Не верно работает переименование игроков!

T1MOXA

Участник
Сообщения
567
Реакции
83
Доброго времени суток уважаемые форумчане!
У меня есть вопрос по поводу изменения имени игроков...

Есть плагин который убирает рекламу из ников
Но дело в том что при смене карты, или если игрок сам сменит ник находясь на сервере
ник нормально сменится в табе и в status,
но в чате и админке СМ ник будет старый

Рассмотрим на примере sm_rename
Если написать:
PHP:
sm_rename "T1MOXA test.ru" "T1MOXA"
То в табе и статусе ник будет без рекламы, а в чете и админке с рекламой.
Но если сделать так:
PHP:
sm_rename "T1MOXA test.ru" "123";sm_rename "123" "T1MOXA"
В данном случаи ник будет везде без рекламы.

И так возникает вопрос...
Почему так происходит, и как это исправить?

Игра CS:GO.
 
Последнее редактирование:

T1MOXA

Участник
Сообщения
567
Реакции
83
К сожалению или к счастью данного квара нет в ксго.
--- Добавлено позже ---
Ещё есть варианты? )
 

FurFur

Участник
Сообщения
153
Реакции
85
Через код ник менять желательно через эту функцию
SetClientName · sdktools_functions · SourceMod Scripting API Reference

Отслеживать изменение ника в кс го через этот форвард
OnClientSettingsChanged · clients · SourceMod Scripting API Reference

Ну и дополнительные проверки на рекламу в никах после смены карты через этот форвард
OnMapStart · sourcemod · SourceMod Scripting API Reference
 

T1MOXA

Участник
Сообщения
567
Реакции
83
@Крабос,
А разве OnMapStart не слишком рано? Так-то люди ещё подключатся будут...
 

T1MOXA

Участник
Сообщения
567
Реакции
83
Потому что начало идентичное*.
Да, именно в этом и дело.
Я просто хотел пояснить на примере.

Ты не знаешь как это поправить?
--- Добавлено позже ---
@Крабос, У меня проверка на OnClientPutInServer
--- Добавлено позже ---
Делай двойное/повторное преобразование/переименование, вот и всё.
В общем я так и сделал, и вроде как работает.
Но это костыльный метод...
Может у кого-то есть вариант получше?
 
Последнее редактирование:

T1MOXA

Участник
Сообщения
567
Реакции
83
Первое изменение. И в событии player_changename - второе: при входе имя меняется, а раз так, то срабатывает событие - меняет дополнительно (2 раз). А если игрок сам меняет имя - срабатывает лишь событие. Таким образом, всё достаточно слажено и можно считать "без костыльным" методом.
Я ничего не понял :)
Наверное пора спать...
 

T1MOXA

Участник
Сообщения
567
Реакции
83
C-подобный:
#include <sdktools_functions>

public OnPluginStart() HookEvent("player_changename", Event_PlayerChangename);

public OnClientPutInServer(client) SetClientName(client, "Новое имя");

public Event_PlayerChangename(Handle:event, const String:name[], bool:dontBroadcast) OnClientPutInServer(GetClientOfUserId(GetEventInt(event, "userid")));
У меня все примерно так и было сделано, но тем не менее был баг.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
примерно так и было сделано
Тогда уже предлагали:
Насколько помню, он "зацикленный". Т.е., меняешь через него ник - снова идёт вызов. Вот и меняешь, пока не изменится на требуемый (сравниваешь, если разные - повторно меняешь).
 

ludanik

Участник
Сообщения
146
Реакции
20
sm_rename "T1MOXA test.ru" "123";sm_rename "123" "T1MOXA"
Есть плагин который убирает рекламу из ников
Тогда сделай так же в плагине. sm_rename "Name hlmod.ru" "random_name"; sm_rename "random_name" "Name"
Это как пример, я не смотрел как изменяется в твоем плагине ник.
 

T1MOXA

Участник
Сообщения
567
Реакции
83
Тогда сделай так же в плагине. sm_rename "Name hlmod.ru" "random_name"; sm_rename "random_name" "Name"
Это как пример, я не смотрел как изменяется в твоем плагине ник.
Я так и сделал, только не через sm_rename, а через SetClientName
--- Добавлено позже ---
Тогда уже предлагали:
Насколько помню, он "зацикленный". Т.е., меняешь через него ник - снова идёт вызов. Вот и меняешь, пока не изменится на требуемый (сравниваешь, если разные - повторно меняешь).
Да, теперь у меня 3 проверки, и вроде работает нормально...
На OnClientPutInServer, OnClientSettingsChanged и Ev_PlayerChangeName.
--- Добавлено позже ---
Ещё вопрос...
Как убрать из чата сообщения типа:
* %random% changed name to %name%
 
Последнее редактирование:

DarklSide

Участник
Сообщения
931
Реакции
468
Вроде это событие "блокнуть" в Pre-хуке.
HookEvent("player_changename", Ev_PlayerChangeName, EventHookMode_Pre);
Broadcast|return Plugin_Handled;
Это поможет в некоторых играх, либо в никаких.

Как убрать из чата сообщения типа:
* %random% changed name to %name%
HookUserMessage(GetUserMessageId("SayText2"), SayText2, true);
[Любая игра] - Auto Name Changer.
 
Последнее редактирование:

T1MOXA

Участник
Сообщения
567
Реакции
83
Теперь ник вовсе не меняется...
Что у меня не так?
PHP:
#include <sdktools>

#pragma newdecls required
#pragma semicolon 1

public void OnPluginStart()
{
    HookUserMessage(GetUserMessageId("SayText2"), SayText2, true);
}

public Action SayText2(UserMsg msg_id, Handle msg, const int[] players,int playersNum, bool reliable, bool init)
{
    char buffer[64];
    PbReadString(msg, "params", buffer, sizeof(buffer), 1);

    if (StrContains(buffer, "#Cstrike_Name_Change") != -1) {
        return Plugin_Handled;
    }
    return Plugin_Continue;
}
 

DarklSide

Участник
Сообщения
931
Реакции
468
PHP:
if (reliable)
{
    char buffer[64];
    PbReadString(msg, "msg_name", buffer, sizeof(buffer));
    if (StrEqual(buffer, "#Cstrike_Name_Change"))
    {
        return Plugin_Handled;
    }
}
return Plugin_Continue;
 
Сверху Снизу