Example #1
0
        private static void HandleTransferLeader(GameSession session, PacketReader packet)
        {
            string target = packet.ReadUnicodeString();

            Player newLeader = GameServer.Storage.GetPlayerByName(target);

            if (newLeader == null)
            {
                return;
            }

            Player oldLeader = session.Player;

            Guild guild = GameServer.GuildManager.GetGuildByLeader(oldLeader);

            if (guild == null || guild.LeaderCharacterId != oldLeader.CharacterId)
            {
                return;
            }
            GuildMember newLeaderMember = guild.Members.FirstOrDefault(x => x.Player.CharacterId == newLeader.CharacterId);
            GuildMember oldLeaderMember = guild.Members.FirstOrDefault(x => x.Player.CharacterId == oldLeader.CharacterId);

            newLeaderMember.Rank    = 0;
            oldLeaderMember.Rank    = 1;
            guild.LeaderCharacterId = newLeader.CharacterId;
            guild.LeaderAccountId   = newLeader.AccountId;
            guild.LeaderName        = newLeader.Name;

            session.Send(GuildPacket.TransferLeaderConfirm(newLeader));
            guild.BroadcastPacketGuild(GuildPacket.AssignNewLeader(newLeader, oldLeader));
            guild.AssignNewLeader(oldLeader, newLeader);
        }