
Сообщение от
naryv
для массива, а этот массив уже делается таким как автор хочет.
Просто обычно используются три таких массива - армия, все игроки, произвольный массив игроков. И собрать такие массивы не так просто. Например если отправлять сообщения всем в чат и на экран одновременно нужно обязательно исключать Server из массива адресатов, иначе при отправке HUD на выделенном появляется ошибка. Это часть проблемы универсальности - нужно сначала определить что за тип игры, отсортировать, потом проверять на null и так для все трех вышеуказанных основных типов сообщений. И это будет засорять каждый скрипт, где есть отправка сообщений. Вот такой кусок примерно:
Код:
public static void SendMessageToAll(string langFolderPath, string msgKey, string target, params object[] args)
{
List<Player> players = new List<Player>();
List<Player> playersScreen = new List<Player>();
if (target == "Chat")
{
if (GamePlay.gpPlayer() != null)
players.Add(GamePlay.gpPlayer());
if (GamePlay.gpRemotePlayers() != null)
players.AddRange(GamePlay.gpRemotePlayers());
if (players.ToArray() != null)
{
send(langFolderPath, players.ToArray(), msgKey, target, args);
}
}
else if (target == "Screen")
{
if (GamePlay.gpPlayer() != null)
if (GamePlay.gpPlayer().Name().ToString() != "Server")
{
players.Add(GamePlay.gpPlayer());
}
if (GamePlay.gpRemotePlayers() != null)
players.AddRange(GamePlay.gpRemotePlayers());
if (players.ToArray() != null)
{
send(langFolderPath, players.ToArray(), msgKey, target, args);
}
}
else if (target == "ChatAndScreen")
{
// Chat
if (GamePlay.gpPlayer() != null)
players.Add(GamePlay.gpPlayer());
if (GamePlay.gpRemotePlayers() != null)
players.AddRange(GamePlay.gpRemotePlayers());
if (players.ToArray() != null)
{
send(langFolderPath, players.ToArray(), msgKey, "Chat", args);
}
//Screen
if (GamePlay.gpPlayer() != null)
if (GamePlay.gpPlayer().Name().ToString() != "Server")
{
playersScreen.Add(GamePlay.gpPlayer());
}
if (GamePlay.gpRemotePlayers() != null)
playersScreen.AddRange(GamePlay.gpRemotePlayers());
if (playersScreen.ToArray() != null)
{
send(langFolderPath, playersScreen.ToArray(), msgKey, "Screen", args);
}
}
}
public static void SendMessageToArmy(string langFolderPath, string msgKey, int army, string target, params object[] args)
{
List<Player> players = new List<Player>();
List<Player> acceptedPlayers = new List<Player>();
if (GamePlay.gpPlayer() != null)
players.Add(GamePlay.gpPlayer());
if (GamePlay.gpRemotePlayers() != null)
players.AddRange(GamePlay.gpRemotePlayers());
if (players != null)
{
foreach (Player player in players)
{
if (player.Army() == army) acceptedPlayers.Add(player);
}
if (acceptedPlayers.Count > 0)
{
send(langFolderPath, acceptedPlayers.ToArray(), msgKey, target, args);
}
}
}
public static void SendMessageToPlayers(string langFolderPath, string msgKey, Player[] players, string target, params object[] args)
{
if (players != null)
{
send(langFolderPath, players, msgKey, target, args);
}
}
При том, что обычно используются только эти три типа(они покрывают все потребности) - SendMessageToAll, SendMessageToArmy и произвольные массив - SendMessageToPlayers

Сообщение от
naryv
Да, здания не грузятся.
Это не планируется менять? Просто для миссий, где загрузка подмиссий меняется от каких-то условий невозможно предусмотреть все постройки в хост миссии. И вообще получается окопы где-то в хостмиссии, артиллерия в подмиссии и еще неизвестно, появится ли она на карте(в зависимости от условий). Это не дает воспользоваться возможностями игры по организации динамической войны.
И еще вопрос. По мультиплеерным аддинам будут изменения в новом патче?