???
Математика на уровне МГУ

Показано с 1 по 25 из 789

Тема: Вопросы.

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    hehehe 111 Аватар для podvoxx
    Регистрация
    25.08.2008
    Адрес
    Барнаул - Питер
    Возраст
    41
    Сообщений
    4,245

    Re: Вопросы.

    Снова проблема с null и HUD-сообщениями. Здесь миссия со скриптом - http://www.sukhoi.ru/forum/showthrea...=1#post1783621.

    Рецидив этой полученной в домашних условиях, ходя код совсем другой сейчас - http://www.sukhoi.ru/forum/showthrea...=1#post1767524.

    Суть ошибки такая получается. Имеем выделенный сервер. Отправляем HUD-сообщение только серверу(нет игроков) - ошибки нет.
    Отправляем игрокам и серверу - ошибка 100%.
    В чем может быть дело?

    Код скрипта:

    Код:
    //======================Small_Bee Localization Class====================
        string langFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "\\1C SoftClub\\il-2 sturmovik cliffs of dover\\missions\\SMP\\Friday on my mind\\localization\\"; 
        string defaultLanguage = "en"; 
    	public Dictionary<string, Dictionary<string, string>> lines = new Dictionary<string, Dictionary<string, string>>();   
    	
        public void SendMessageToAll(string msgKey, string target, params object[] args)
        {
            List<Player> players = new List<Player>();
        	if (GamePlay.gpPlayer() != null)
                players.Add(GamePlay.gpPlayer());
            if (GamePlay.gpRemotePlayers() != null)
                players.AddRange(GamePlay.gpRemotePlayers());
        	
        	if (players.ToArray() != null)
            {
                send(players.ToArray(), msgKey, target, args);
            }
        }
    
        public void SendMessageToArmy(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(acceptedPlayers.ToArray(), msgKey, target, args);
                }
            }
        }
    
        public void SendMessageToPlayers(string msgKey, Player[] players, string target, params object[] args)
        {
            if (players != null)
            {
                send(players, msgKey, target, args);
            }
        }
    
        private void send(Player[] players, string msgKey, string target, params object[] args)
        {
            Dictionary<string, List<Player>> sorted = new Dictionary<string, List<Player>>();
            load(langFolderPath);
            foreach (Player player in players)
            {
                string langName = player.LanguageName();
                if (!lines.ContainsKey(langName))
                {
                    langName = defaultLanguage;
                }
                if (!sorted.ContainsKey(langName))
                {
                    sorted.Add(langName, new List<Player>());
                }
                sorted[langName].Add(player);
            }
            foreach (KeyValuePair<string, List<Player>> kvp in sorted)
            {
                if (lines[kvp.Key].ContainsKey(msgKey))
                {
                    switch (target)
                    {
                        case "ChatAndScreen":
                        {
                            GamePlay.gpLogServer(kvp.Value.ToArray(), lines[kvp.Key][msgKey], args);
                            GamePlay.gpHUDLogCenter(kvp.Value.ToArray(), lines[kvp.Key][msgKey], args);
                        } break;
                		case "Chat": GamePlay.gpLogServer(kvp.Value.ToArray(), lines[kvp.Key][msgKey], args); break;
                		case "Screen": GamePlay.gpHUDLogCenter(kvp.Value.ToArray(), lines[kvp.Key][msgKey], args); break;
                    }
                } else
                {
                	switch (target)
                    {
                        case "ChatAndScreen":
                        {
                            GamePlay.gpLogServer(kvp.Value.ToArray(), msgKey, args);
                            GamePlay.gpHUDLogCenter(kvp.Value.ToArray(), msgKey, args);
                        } break;
                		case "Chat": GamePlay.gpLogServer(kvp.Value.ToArray(), msgKey, args); break;
                		case "Screen": GamePlay.gpHUDLogCenter(kvp.Value.ToArray(), msgKey, args); break;
                    }            	
                }
            }
        }
        /*
        public string sendOnlyTranslate(Player player, string msgKey)
        {        
            load(langFolderPath);        
            string langName = player.LanguageName();
            if (!lines.ContainsKey(langName))
            {
                langName = defaultLanguage;
            } 
            if (lines[kvp.Key].ContainsKey(msgKey))
            {
                return lines[kvp.Key][msgKey];
            }
            else { return msgKey; }
            
        }
        */
        private void load(string langFolderPath)
        {
            IEnumerable<string> fileNames = Directory.EnumerateFiles(langFolderPath, "*.txt", SearchOption.TopDirectoryOnly);
            foreach (string filename in fileNames)
            {
                parseLanguageFile(filename);
            }
        }
    
        private void parseLanguageFile(string filename)
        {
            string[] filelines = File.ReadAllLines(filename);
            string[] firstLine = filelines[0].Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
            if (firstLine[0].Equals("LanguageName"))
            {
                string langName = firstLine[1];
                if (!lines.ContainsKey(langName))
                {
                    lines.Add(langName, new Dictionary<string, string>());
                }
                for (int i = 1; i < filelines.Length; i++)
                {
                    string[] lineArr = filelines[i].Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                    if (lineArr.Length != 2) continue;
                    lines[langName][lineArr[0]] = lineArr[1];
                }
            }
        }
        //======================================================================
    
    Вывод сообщения:
    SendMessageToAll("Hello null!", "Screen");
    По идее ошибка должна быть здесь, так как остальной код совпадает с GamePlay.gpLogServer:

    Код:
    GamePlay.gpHUDLogCenter(kvp.Value.ToArray(), msgKey, args);

    Примеры из логов:

    Ошибка при выводе HUD игрокам и серверу:
    Скрытый текст:
    Код:
    [13:25:59]	Server to [Server, Cassius Calhoun]: ======================================
    [13:25:59]	Server to [Server, Cassius Calhoun]: Команда красных уничтожила самолет-разведчик синих
    [13:26:00]	
    [13:26:00]	=================================================
    [13:26:00]	System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
    [13:26:00]	
    [13:26:00]	Server stack trace: 
    [13:26:00]	   в 6UZP66dp5dKAdD5LMYr.F9pJL9dGtcbAt8r8Umh.JwjWWYN9w9(xnKDxkk8wATA33F3hpA , G7xPRi2e9fpuLtHG23a )
    [13:26:00]	   в 5iyST5gABhh0WhImZtw.4W7PgSgvHpySuqonJno.sp1UnA9jmwb(Player[] , String , Object[] , Double )
    [13:26:00]	   в 5iyST5gABhh0WhImZtw.4W7PgSgvHpySuqonJno.yEy1eAe2YPQxskLBZIku(Object , Object , Object , Double )
    [13:26:00]	   в 5iyST5gABhh0WhImZtw.4W7PgSgvHpySuqonJno.d87UnNOmgnm(Player[] , String , Object[] )
    [13:26:00]	   в pqlnUTF7gnMAoU4L9MP.lm1GgkFoiOOBGu1gmwf.ZnhKPrKgxsgJUIGtmgOK(Object , Object , Object )
    [13:26:00]	   в pqlnUTF7gnMAoU4L9MP.lm1GgkFoiOOBGu1gmwf.HUDLogCenter(Player[] , String , Object[] )
    [13:26:00]	   в maddox.game.GameDef.gpHUDLogCenter(Player[] to, String msg, Object[] parms)
    [13:26:00]	   в System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
    [13:26:00]	   в System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)
    [13:26:00]	
    [13:26:00]	Exception rethrown at [0]: 
    [13:26:00]	   в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
    [13:26:00]	   в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
    [13:26:00]	   в maddox.game.IGamePlay.gpHUDLogCenter(Player[] to, String msg, Object[] parms)
    [13:26:00]	   в Mission.send(Player[] players, String msgKey, String target, Object[] args)
    [13:26:00]	   в Mission.SendMessageToAll(String msgKey, String target, Object[] args)
    [13:26:00]	   в Mission.messageTaskComplite(Int32 taskPrice, Int32 armyTask, String msg)
    [13:26:00]	   в Mission.OnActorDead(Int32 missionNumber, String shortName, AiActor actor, List`1 damages)
    [13:26:00]	   в maddox.game.world.Strategy.OnActorDead(Int32 missionNumber, String shortName, AiActor actor, AiDamageInitiator initiator)
    [13:26:00]	   в maddox.game.ABattle.OnEventGame(GameEventId eventId, Object eventArg0, Object eventArg1, Int32 eventArgInt)
    [13:26:00]	   в maddox.game.world.Strategy.OnEventGame(GameEventId eventId, Object eventArg0, Object eventArg1, Int32 eventArgInt)
    [13:26:00]	   в System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
    [13:26:00]	   в System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)
    [13:26:00]	
    [13:26:00]	Exception rethrown at [1]: 
    [13:26:00]	   в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
    [13:26:00]	   в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
    [13:26:00]	   в maddox.game.IBattle.OnEventGame(GameEventId eventId, Object eventArg0, Object eventArg1, Int32 eventArgInt)
    [13:26:00]	   в maddox.game.GameDef.eventGame(GameEventId eventId, Object eventArg0, Object eventArg1, Int32 eventArgInt)
    [13:26:00]	   в RoFTf9069W6jWRmA8PN.U2RoVL0OVdWjVQJ7319.eventGame(GameEventId , Object , Object , Int32 )
    [13:26:00]	   в NTlYp6NdtgpnKt7wGgO.VvFELvNie2My3mOTesk.WPGBQuHHKI8(GameEventId , Object , Object , Int32 )
    [13:26:00]	=================================================
    [13:29:30]	Server: Cassius Calhoun Bf 110 C-7 () Пилот готов.
    [13:29:30]	Server: Стрелок Bf 110 C-7 () (Бот) готов.
    [13:29:30]	Server: Cassius Calhoun на Bf 110 C-7 () разбился.
    [13:30:51]	Server: До свидания, Cassius Calhoun!


    Вывод HUD только серверу, нет ошибки:
    Скрытый текст:
    Код:
    [18:49:16]	Server: Носовой стрелок FW 200 () (Бот) погиб от рук Минный тральщик 1935.
    [18:50:34]	Server to [Server]: ======================================
    [18:50:34]	Server to [Server]: Команда красных уничтожила самолет-разведчик синих
    [18:50:34]	Server to [Server]: Команда красных получает очки за выполнение задания [ 500 ]
    [18:50:34]	Server to [Server]: ======================================
    [18:50:34]	Server: Минный тральщик 1935, Минный тральщик 1935 сбил ИИ на FW 200 ().
    [18:59:53]	Server: =m=black875 теперь с нами.
    [18:59:56]	Server: =m=black875 будет летать за Красные ВВС.


    В сообщении серверу нет ошибок:
    Скрытый текст:
    Код:
    [16:05:10]	Server: =Apostol= Bf 109 E-3 () Пилот готов.
    [16:05:10]	Server: =Apostol= в кабине =Apostol= разбился.
    [16:05:19]	Server: До свидания, =Apostol=!
    [16:05:56]	Server to [Server, =ZERO_13=]: ======================================
    [16:05:56]	Server to [Server, =ZERO_13=]: RED> [ 40 ] / [ 26 ] <BLUE 
    [16:05:56]	Server to [Server, =ZERO_13=]: Миссия будет остановлена через  60 min.
    [16:05:56]	Server to [Server, =ZERO_13=]: ======================================
    [16:06:11]	Server to [Server, =ZERO_13=]: ======================================
    [16:06:11]	Server to [Server, =ZERO_13=]: RED> [ 40 ] / [ 26 ] <BLUE 
    [16:06:11]	Server to [Server, =ZERO_13=]: До конца миссии осталось [ 60 ] min.
    [16:06:11]	Server to [Server, =ZERO_13=]: ======================================
    [16:06:45]	Server: =ZERO_13= Bf 109 E-3 () Пилот готов.
    [16:06:45]	Server: =ZERO_13= в кабине =ZERO_13= влетел в ландшафт.


    --- Добавлено ---

    И второй вопрос:

    Некоторые логи бывают такого вида с битой кодировкой:
    Код:
    [17:36:37]	Server to [Server]: ======================================
    [17:36:37]	Server to [Server]: RED> [ 9 ] / [ 27 ] <BLUE 
    [17:36:37]	Server to [Server]: До конца миссии осталось [ 210 ] min.
    [17:36:37]	Server to [Server]: ======================================
    [17:41:17]	>chat TS3: ts13.forteam.ru:10117 pass: sukhoi
    [17:41:17]	Chat: Server: 	TS3: ts13.forteam.ru:10117 pass: sukhoi
    [17:41:17]	>chat English-speaking channels available now!
    [17:41:17]	Chat: Server: 	English-speaking channels available now!
    [17:41:17]	>timeout 1800.00 f ts1.cmd
    [17:45:43]	Server: __MAVR__ РІС…РѕРґРёС‚ РІ Р±РѕР№.
    [17:45:46]	Server: __MAVR__ будет летать за Красные ВВС.
    [17:46:39]	Loading mission ...
    [17:46:39]	Mission loaded. time = 0,131
    [17:48:45]	Server: До свидания, __MAVR__!
    [17:49:50]	Server: __MAVR__ теперь с нами.
    [17:49:53]	Server: __MAVR__ сбежал! Его приветсвуют Красные.
    Это из-за чего может быть? Таких немного, но попадаются.
    Крайний раз редактировалось podvoxx; 03.02.2012 в 09:51.

  2. #2
    3GIAP.ru Аватар для -atas-
    Регистрация
    26.12.2001
    Адрес
    Москва
    Возраст
    54
    Сообщений
    2,992
    Записей в дневнике
    1

    Re: Вопросы.

    Цитата Сообщение от podvoxx Посмотреть сообщение
    Это из-за чего может быть? Таких немного, но попадаются.
    Баг. Желательно сообщать в багрепорты, чтобы не забыли.
    ...зелёные горят.
    ----------------------

    i7-860@3.8, 4GB, ati4890-2GB, 1680x1050, Win7-64.

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •