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); } }
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 }