Добрый день. Если на сервере игроки с одинаковым ником (Survivor) и кто-то пытается выполнить команду, то она выполняется у всех с таким же ником. Сообщение из чата перехватывается таким образом, что не возможно понять, кто именно из одноименцев написал команду. Хоть и в чате вы будете Survivor (5) , а перехватится сообщение от имени Survivor т.к. именно оно указано в параметрах запуска игры.
Перехватываются сообщения кодом:
override void OnEvent(EventType eventTypeId, Param params) //Call from chat
{
switch(eventTypeId)
{
case ChatMessageEventTypeID:
{
Print("ChatMessageEventTypeID:");
ChatMessageEventParams chat_params = ChatMessageEventParams.Cast(params);
if (chat_params.param1 == 0 && chat_params.param2 != "" && chat_params.param3 != "") //trigger only when channel is Global == 0, Player Name does not equal to null and entered command
{
AdminMod.OnAdminChatRequest(params); //Redirect call from chat to UserMod
}
break;
}
default:
{
super.OnEvent(eventTypeId,params);
break;
}
break;
}
}
Далее класс админки берет имя из чата (params) и ищет игрока с таким именем среди подключившихся:
for ( i = 0; i < players.Count(); ++i )
{
str_nmpl = players.Get(i).GetIdentity().GetName();
if (str_nmpl.IndexOfFrom( 0, chat_params.param2) == 0){
UserPlayer = PlayerBase.Cast(players.Get(i));
UserIdentity = UserPlayer.GetIdentity();
UserUID = UserIdentity.GetPlainId();
}
}
Видел, на других серверах чат-команды работают не взирая на то, что на сервере много людей с одинаковыми никами.
Поделитесь информацией, как точно идентифицировать игрока, который написал сообщение в чат?
Пробовал изменять ник игрокам, если он повторяется, получилось, но только клиентским модом @Survivor name changer. Также в данный момент сделал костыль, который просит игрока ввести последние цифры своего стимайди перед командой, но это не удобно людям. Менять свой Survivor народ тоже не горит желанием. Копался в коде чата, но пока попытки не дали результат.