Пример #1
0
        private static CharacterBook ReadCharactersImpl()
        {
            CharacterBook charMgr = new CharacterBook();

            foreach (string filepath in EnumerateCharacterFilepaths())
            {
                using (var file = new StreamReader(filepath))
                {
                    string contents = file.ReadToEnd();
                    // to avoid json vulnerability, do not use TypeNameHandling.All
                    var data = JsonConvert.DeserializeObject <Dictionary <string, ServerCharacterListByAccount> >(contents);
                    charMgr.AppendCharacters(data);
                }
            }
            return(charMgr);
        }
Пример #2
0
        internal void FilterCore_ServerDispatch(object sender, NetworkMessageEventArgs e)
        {
            log.WriteDebug("Account123:" + GameRepo.Game.Account);
            if (e.Message.Type == 0xF658) // Zone Name
            {
                zonename = Convert.ToString(e.Message["zonename"]);
                log.WriteInfo("zonename123: '{0}'", zonename);
                GameRepo.Game.SetAccount(zonename);
            }

            if (e.Message.Type == 0xF7E1) // Server Name
            {
                //Server Name retrieved from the server message, not used (unreliable in EMU)
                var server = Convert.ToString(e.Message["server"]);
                log.WriteInfo("server: '{0}'", server);
                GameRepo.Game.SetServer(server);
            }

            if (e.Message.Type == 0xF658) // Character List
            {
                characterSlots = Convert.ToInt32(e.Message["slotCount"]);

                characters = new List <Character>();

                MessageStruct charactersStruct = e.Message.Struct("characters");

                bool all_chars = true;
                for (int i = 0; i < charactersStruct.Count; i++)
                {
                    int    character     = Convert.ToInt32(charactersStruct.Struct(i)["character"]);
                    string name          = Convert.ToString(charactersStruct.Struct(i)["name"]);
                    int    deleteTimeout = Convert.ToInt32(charactersStruct.Struct(i)["deleteTimeout"]);

                    characters.Add(new Character(character, name, deleteTimeout));
                    log.WriteInfo(character.ToString() + " " + name + " " + deleteTimeout.ToString());
                    if (!name.StartsWith(base_name))
                    {
                        all_chars = false;
                    }
                }

                if (characters.Count < 10 && all_chars && !creating_character)
                {
                    log.WriteDebug("Found less than 10 Ztiel characters, creating!");
                    CreateCharacter();
                }

                characters.Sort((a, b) => String.Compare(a.Name, b.Name, StringComparison.Ordinal));
            }
            if (!written)
            {
                if (GameRepo.Game.Server != "" && zonename != null && characters != null)
                {
                    CharacterBook.WriteCharacters(ServerName: GameRepo.Game.Server, zonename: zonename, characters: characters);
                    Heartbeat.LaunchHeartbeat();
                    written = true;
                }
            }
            if (CoreManager.Current.CharacterFilter.Name != characterName)
            {
                GameRepo.Game.SetCharacter(CoreManager.Current.CharacterFilter.Name);
                characterName = CoreManager.Current.CharacterFilter.Name;
            }
        }
Пример #3
0
 public static System.Collections.Generic.List <string> GetAllCharacterFilePaths()
 {
     return(CharacterBook.EnumerateCharacterFilepaths());
 }