AMX MOD X
Среда, 11.12.2024, 12:38:13



Приветствую Вас Гость | RSS
[ Главная ] [ Как грамотно сменить ник, при попытке юзера сменить ник ? - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
Как грамотно сменить ник, при попытке юзера сменить ник ?
KokaДата: Среда, 17.06.2009, 16:54:01 | Сообщение # 1
Полковник
Группа: Пользователи
Сообщений: 169
Репутация: 1
Статус: Не в сети
с помощью этого:
register_forward(FM_ClientUserInfoChanged, "fwd_FM_ClientUserInfoChanged")

подскажите код плз, срочно надо %)


стал ощущать рефлексы тоньше, оставаясь как всегда с идеей той же...
 
pikeДата: Среда, 17.06.2009, 17:16:33 | Сообщение # 2
Полковник
Группа: Пользователи
Сообщений: 207
Репутация: 4
Статус: Не в сети
Code
public fwClientUserInfoChanged(id, buffer) {
  if (!is_user_connected(id))
   return FMRES_IGNORED

  static name[32], val[32]
  get_user_name(id, name, sizeof name - 1)
  engfunc(EngFunc_InfoKeyValue, buffer, g_name, val, sizeof val - 1)
  if (equal(val, name))
   return FMRES_IGNORED

  engfunc(EngFunc_SetClientKeyValue, id, buffer, g_name, name)
  client_cmd(id, g_clcmd_template, name, name)
  client_print(id, print_chat, "%s", g_reason)

  return FMRES_SUPERCEDE
}
 
KokaДата: Среда, 17.06.2009, 18:36:38 | Сообщение # 3
Полковник
Группа: Пользователи
Сообщений: 169
Репутация: 1
Статус: Не в сети
спасибо B)

еще вопросики:
1) что это g_clcmd_template? неужели "name %s", или "setinfo name %s"??, если одно из этих двух - то это мне кажется будет overflow, т.к. такая установка ника находится в самом форварде, где и перехватывается!

2) что качественнее (в плане узнавания настоящего ника):

get_user_name(id, name, 31)
pev(id, pev_netname, name, 31)
get_user_info(id, "name", name, 31)

?


стал ощущать рефлексы тоньше, оставаясь как всегда с идеей той же...

Сообщение отредактировал Koka - Среда, 17.06.2009, 18:46:20
 
pikeДата: Среда, 17.06.2009, 18:47:13 | Сообщение # 4
Полковник
Группа: Пользователи
Сообщений: 207
Репутация: 4
Статус: Не в сети
Quote (Koka)
что это g_clcmd_template, неужели client_cmd(id, "name %s", name)

Code

new const g_clcmd_template[] = "name ^"%s^"; setinfo name ^"%s^""
 
KokaДата: Среда, 17.06.2009, 18:58:11 | Сообщение # 5
Полковник
Группа: Пользователи
Сообщений: 169
Репутация: 1
Статус: Не в сети
я там обновил пост с вопросиком (мб неуспел заметить))

Добавлено (2009-06-17, 6:58 Pm)
---------------------------------------------
мне прост кажется что одного
engfunc(EngFunc_SetClientKeyValue, id, buffer, g_name, name)
будет достаточно. а чтобы сообщение появилось типа игрок сменил ник можно это вставить

message_begin(MSG_BROADCAST, get_user_msgid("SayText"))
write_byte(id)
write_string("#Cstrike_Name_Change")
write_string(name)
write_string(val)
message_end()

ну естествено с оптимизацией..

а вот как можно сменить ник игрока (кроме client_cmd), чтобы он сохранился навсегда (имею ввиду, пока он сам его не сменит) ?


стал ощущать рефлексы тоньше, оставаясь как всегда с идеей той же...
 
pikeДата: Среда, 17.06.2009, 18:58:54 | Сообщение # 6
Полковник
Группа: Пользователи
Сообщений: 207
Репутация: 4
Статус: Не в сети
Quote (Koka)
мне кажется будет overflow

не будет
 
KokaДата: Среда, 17.06.2009, 19:34:36 | Сообщение # 7
Полковник
Группа: Пользователи
Сообщений: 169
Репутация: 1
Статус: Не в сети
небудет но вызываться будет дважды :)

стал ощущать рефлексы тоньше, оставаясь как всегда с идеей той же...
 
ZefirДата: Четверг, 18.06.2009, 13:30:10 | Сообщение # 8
Майор
Группа: Пользователи
Сообщений: 83
Репутация: 5
Статус: Не в сети
Я у себя выставлял флаг игроку, что сейчас я буду переименовывать его и первый вызов форвард функции надо проигнорировать....

И кстати я старался избавиться от сообщения в чат, потому заюзал FakeMeta, а не просто client_infochange, как было по началу.

А по поводу команд, то предпочитаю такую последовательность:

Code

client_cmd(id, "name ^"%s^"", name)
set_user_info(id, "name", name)

Добавлено (2009-06-18, 1:30 Pm)
---------------------------------------------
По поводу узнавания ника, то я тоже столкнулся с ситуацией, что get_user_name(id, name, 31) возвращает пустую строку. Потому написал свою функцию, которая если ник пустой вызывает get_user_info(id, "name", name, 31), и уже его и возвращает.
Про pev(id, pev_netname, name, 31) не скажу ничего. не использовал, мне хватает двух других.


Чтобы правильно задать вопрос, нужно знать больше половины ответа...
Cerberus(Цербер) - начато публичное тестирование
Энциклопедия Counter-Strike
 
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2024