Ejemplo n.º 1
0
        public static void UpdateClansWithInfo(ClansOutput result)
        {
            CharacterIds.Clear();
            CharacterClans.Clear();
            ClanLeaders.Clear();
            ClanNames.Clear();

            Players.ForEach(player => player.ClanId = 0);

            foreach (var row in result.Clans)
            {
                CharacterIds.Add(row.CharacterName, row.CharacterId);
                CharacterClans.Add(row.CharacterId, row.ClanId);
                if (row.IsLeader)
                {
                    ClanLeaders.Add(row.CharacterId);
                }

                if (!ClanNames.ContainsKey(row.ClanId))
                {
                    ClanNames.Add(row.ClanId, row.ClanName);
                }

                Player foundPlayer = Players.FirstOrDefault(x => x.Name == row.CharacterName);
                if (foundPlayer != null)
                {
                    foundPlayer.Id           = row.CharacterId;
                    foundPlayer.ClanId       = row.ClanId;
                    foundPlayer.IsClanLeader = row.IsLeader;
                }
            }

            byte[] message = MergeByteArrays(ToBytes(Command.ClanUpdate)); // inform game servers that they need to update clans from db by themselves

            foreach (Socket gameServer in GameServers)
            {
                gameServer.SendOrFail(message);
            }
        }
Ejemplo n.º 2
0
        public static void PlayerLogin(Socket conn, string characterName)
        {
            var newPlayer = new Player(conn, characterName);

            // if it's a character that's in some clan, get his id
            if (CharacterIds.ContainsKey(newPlayer.Name))
            {
                newPlayer.Id = CharacterIds[newPlayer.Name];

                // if a clan for this character id is found, assign clan to character
                if (CharacterClans.ContainsKey(newPlayer.Id))
                {
                    newPlayer.ClanId = CharacterClans[newPlayer.Id];
                }

                // set him as clan leader if he's in the list of clan leaders
                if (ClanLeaders.Contains(newPlayer.Id))
                {
                    newPlayer.IsClanLeader = true;
                }
            }

            // if it's a reconnecting character, remove him from list of online characters
            Players.RemoveAll(x => x.Name == newPlayer.Name);
            // add him to list of online characters
            Players.Add(newPlayer);

            // update this player in groups if he was in one before reconnecting
            Groups.ForEach(group => group.UpdateReconnectedPlayer(newPlayer));

            if (PendingKicks.ContainsKey(newPlayer.Name)) //cancel automatic kick
            {
                PendingKicks[newPlayer.Name].Stop();
                PendingKicks.Remove(newPlayer.Name);
            }
        }