
Сообщение от
-atas-
Там еще Server есть. Он возможно как player считается, не помню уже, когда-то на желтом обсуждали с Kodiak. Лучше посмотреть как у него реализовано. Он раз 10 код менял, чтобы все заработало на выделенном.
Сами сообщения сервера проходят как положено. Думаю разберусь, только нескоро получится. Заодно добавлю еще пару интересных вещей.
Кажется нашел ошибку, хотя не уверен. Много раз читал тему, но все равно особенности выделеного не учел.
Сам скрипт сообщений работает идеально.
Код:
//******************Send Screen Message Method*******************
private void sendScreenMessageTo(int army, string msg, object[] parms)
{
List<Player> Players = new List<Player>();
//Singleplayer or Dedi Server
if (GamePlay.gpPlayer() != null)
{
if (GamePlay.gpPlayer().Army() == army || army == -1)
Players.Add(GamePlay.gpPlayer());
} // Multiplayer
if (GamePlay.gpRemotePlayers() != null || GamePlay.gpRemotePlayers().Length > 0)
{
foreach (Player p in GamePlay.gpRemotePlayers())
{
if (p.Army() == army || army == -1)
Players.Add(p);
}
}
if (Players != null && Players.Count > 0)
GamePlay.gpHUDLogCenter(Players.ToArray(), msg, parms);
}
Код:
[21:34:02] Server to [Server]: ======================================
[21:34:02] Server to [Server]: RED> [ 142 ] / [ 166 ] <BLUE
[21:34:02] Server to [Server]: Миссия будет остановлена через 2 min.
[21:34:02] Server to [Server]: ======================================
[21:34:19] Server to [Server]: Команда красных уничтожила самолет-разведчик синих[ 1 ]
[21:34:19] Server to [Server]: Команда красных получает очки за выполнение задания: [ 100 ]
[21:34:19] Server: Bf 110 C-4 () (Бот) сбил FW 200 () (Бот).
Пока "в игре" только [Server] - локализация тоже работает правильно, но в ней есть определение языка игрока:
Код:
string langIndex = GamePlay.gpPlayer().LanguageName();
Получается, что текст сообщения определяется по GamePlay.gpPlayer()(скорее всего здесь конфликт), а сообщения отправляются массиву игроков(они все могут оказаться с разными языками):
Код:
sendScreenMessageTo(-1, getLocalizedMessage("noWinner"), new object[] { });
Попробую сделать определение языка для каждого игрока из массива и тправку сообщений в соответствии с ним, но я не очень хорошо понимаю отличия выделенного/сингла от мультиплеера. Хотел бы уточнить, чтобы правильно понимать что происходит с этими плеерами, так как они везде используются.
Для сингла и dedi:
GamePlay.gpPlayer() - это кто?
Для мультиплеера:
GamePlay.gpRemotePlayers() - массив игроков на сервере(он состоит из GamePlay.gpPlayer() ?)
И почему определение игрока отличается для сингла и выделенного?