示例#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);
            }
        }
示例#2
0
        public static void ProcessClanInvite(string invitedPlayer, Socket connection)
        {
            Player thisPlayer = GetPlayer(connection);

            if (thisPlayer == null)
            {
                return;
            }
            if (thisPlayer.ClanId == 0)
            {
                return;
            }
            if (!thisPlayer.IsClanLeader)
            {
                return;
            }

            //find the player that we want to invite
            Player targetPlayer = Players.SingleOrDefault(x => x.Name == invitedPlayer);

            if (targetPlayer == null || targetPlayer == thisPlayer || targetPlayer.ClanId != 0)
            {
                return;
            }
            if (targetPlayer.PendingInvite != null)
            {
                return;                                     // he's currently considering an invite, @TODO: send a message back saying it
            }
            CreatePendingInvite(targetPlayer, thisPlayer, true);

            string clanName = ClanNames.ContainsKey(thisPlayer.ClanId) ? ClanNames[thisPlayer.ClanId] : "Undefined";

            byte[] message = MergeByteArrays(ToBytes(Command.ClanInvite),
                                             WriteMmoString(thisPlayer.Name),
                                             WriteMmoString(clanName));

            targetPlayer.SendOrKick(message); //forward the Clan Invite message to the target player
        }