Esempio n. 1
0
        public void SetLevel(uint NewLevel)
        {
            uint oldLevel = GetLevel();

            Level = NewLevel;

            /*
             * // Find all guild perks to learn
             * std::vector<uint32> perksToLearn;
             * for (uint32 i = 0; i < sGuildPerkSpellsStore.GetNumRows(); ++i)
             *  if (GuildPerkSpellsEntry const* entry = sGuildPerkSpellsStore.LookupEntry(i))
             * if (entry->Level > oldLevel && entry->Level <= GetLevel())
             *  perksToLearn.push_back(entry->SpellId);
             */
            // Notify all online players that guild level changed and learn perks
            Player pl;

            foreach (var member in MemberList)
            {
                pl = ObjMgr.FindPlayer(member.CharGuid);
                if (pl != null)
                {
                    pl.SetGuildLevel(GetLevel());
                    //for (size_t i = 0; i < perksToLearn.size(); ++i)
                    //pl->learnSpell(perksToLearn[i], true);
                }
            }

            //GetNewsLog().AddNewEvent(GUILD_NEWS_LEVEL_UP, time(NULL), 0, 0, _level);
            //GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_GUILD_LEVEL, GetLevel(), 0, NULL, source);
        }
Esempio n. 2
0
        public static void HandleNameQueryRequest(ref PacketReader packet, ref WorldSession session)
        {
            ulong guid    = packet.ReadUInt64();
            uint  realmId = packet.ReadUInt32();//Sometimes it reads 0?  maybe not realmid?

            Player pl = ObjMgr.FindPlayer(guid);

            if (pl == null)
            {
                return;
            }

            PacketWriter writer = new PacketWriter(Opcodes.SMSG_NameQueryResponse);

            writer.WritePackedGuid(guid);
            writer.WriteUInt8(0);//result?
            writer.WriteCString(pl.GetName());
            writer.WriteUInt32(WorldConfig.RealmId);
            writer.WriteUInt8(pl.getRace());
            writer.WriteUInt8(pl.getGender());
            writer.WriteUInt8(pl.getClass());
            writer.WriteUInt8(0);

            session.Send(writer);
        }
Esempio n. 3
0
 public void BroadcastPacket(PacketWriter writer)
 {
     foreach (Member member in MemberList)
     {
         Player pl = ObjMgr.FindPlayer(member.CharGuid);
         if (pl != null)
         {
             pl.GetSession().Send(writer);
         }
     }
 }
Esempio n. 4
0
        public static bool Delete(string[] args, CommandGroup command)
        {
            if (args.Length < 1)
            {
                return(false);
            }

            string account = args[0];

            if (account == string.Empty)
            {
                return(false);
            }

            if (!account.Contains("@"))
            {
                return(command.SendSysMessage("Account name requires an email address"));
            }

            PreparedStatement stmt = DB.Auth.GetPreparedStatement(LoginStatements.Get_AccountIDByUsername);

            stmt.AddValue(0, account);
            SQLResult result = DB.Auth.Select(stmt);


            if (result.Count == 0)
            {
                command.SendErrorMessage(CypherStrings.AccountNotExist, account);
            }

            uint accountId = result.Read <uint>(0, 0);

            stmt = DB.Characters.GetPreparedStatement(CharStatements.CHAR_SEL_CHARS_BY_ACCOUNT_ID);
            stmt.AddValue(0, accountId);
            result = DB.Characters.Select(stmt);

            if (result.Count != 0)
            {
                for (var i = 0; i < result.Count; i++)
                {
                    uint guidLow = result.Read <uint>(i, 0);

                    // Kick if player is online
                    Player pl = ObjMgr.FindPlayer(guidLow);
                    if (pl != null)
                    {
                        WorldSession s = pl.GetSession();
                        s.KickPlayer();                            // mark session to remove at next session list update
                        //s.LogoutPlayer(false);                     // logout player without waiting next session list update
                    }

                    //Player::DeleteFromDB(guid, accountId, false);       // no need to update realm characters todo fixme
                }
            }

            stmt = DB.Characters.GetPreparedStatement(CharStatements.CHAR_DEL_TUTORIALS);
            stmt.AddValue(0, accountId);
            DB.Characters.Execute(stmt);

            stmt = DB.Characters.GetPreparedStatement(CharStatements.CHAR_DEL_ACCOUNT_DATA);
            stmt.AddValue(0, accountId);
            DB.Characters.Execute(stmt);

            stmt = DB.Characters.GetPreparedStatement(CharStatements.CHAR_DEL_CHARACTER_BAN);
            stmt.AddValue(0, accountId);
            DB.Characters.Execute(stmt);

            stmt = DB.Auth.GetPreparedStatement(LoginStatements.Del_Account);
            stmt.AddValue(0, accountId);
            DB.Auth.Execute(stmt);

            stmt = DB.Auth.GetPreparedStatement(LoginStatements.Del_account_access);
            stmt.AddValue(0, accountId);
            DB.Auth.Execute(stmt);

            stmt = DB.Auth.GetPreparedStatement(LoginStatements.Del_RealmCharacters);
            stmt.AddValue(0, accountId);
            DB.Auth.Execute(stmt);

            stmt = DB.Auth.GetPreparedStatement(LoginStatements.Del_AccountBanned);
            stmt.AddValue(0, accountId);
            DB.Auth.Execute(stmt);

            return(command.SendSysMessage(CypherStrings.AccountDeleted, account));
        }
Esempio n. 5
0
        public static void HandleGuildAssignRank(ref PacketReader packet, ref WorldSession session)
        {
            uint rankId = packet.ReadUInt32();

            var TGuid = new byte[8];
            var Guid  = new byte[8];

            TGuid[1] = packet.GetBit();
            TGuid[7] = packet.GetBit();
            Guid[4]  = packet.GetBit();
            Guid[2]  = packet.GetBit();
            TGuid[4] = packet.GetBit();
            TGuid[5] = packet.GetBit();
            TGuid[6] = packet.GetBit();
            Guid[1]  = packet.GetBit();
            Guid[7]  = packet.GetBit();
            TGuid[2] = packet.GetBit();
            TGuid[3] = packet.GetBit();
            TGuid[0] = packet.GetBit();
            Guid[6]  = packet.GetBit();
            Guid[3]  = packet.GetBit();
            Guid[0]  = packet.GetBit();
            Guid[5]  = packet.GetBit();

            packet.ReadXORByte(TGuid, 0);
            packet.ReadXORByte(Guid, 1);
            packet.ReadXORByte(Guid, 3);
            packet.ReadXORByte(Guid, 5);
            packet.ReadXORByte(TGuid, 7);
            packet.ReadXORByte(TGuid, 3);
            packet.ReadXORByte(Guid, 0);
            packet.ReadXORByte(TGuid, 1);
            packet.ReadXORByte(Guid, 6);
            packet.ReadXORByte(TGuid, 2);
            packet.ReadXORByte(TGuid, 5);
            packet.ReadXORByte(TGuid, 4);
            packet.ReadXORByte(Guid, 2);
            packet.ReadXORByte(Guid, 4);
            packet.ReadXORByte(Guid, 6);
            packet.ReadXORByte(Guid, 7);

            ObjectGuid TargetGuid = new ObjectGuid(TGuid);
            ObjectGuid PlGuid     = new ObjectGuid(Guid);

            Player pl    = ObjMgr.FindPlayer(PlGuid);
            Guild  guild = GuildMgr.GetGuildByGuid(pl.GuildGuid);

            if (guild == null)
            {
                SendCommandResult(ref session, GuildCommandType.Create_S, GuildCommandErrors.PlayerNotInGuild);
                return;
            }

            Guild.Member member = guild.GetMember(TargetGuid);
            if (member == null)
            {
                SendCommandResult(ref session, GuildCommandType.Create_S, GuildCommandErrors.PlayerNotInGuild);
                return;
            }

            bool promote = false;

            if (member.RankId > rankId)
            {
                promote = true;
            }

            member.ChangeRank(rankId);

            guild.LogGuildEvent(promote ? GuildEventLogTypes.PromotePlayer : GuildEventLogTypes.DemotePlayer, pl.GetGUIDLow(), member.CharGuid, rankId);
            guild.SendBroadcastEvent(promote ? GuildEvents.Promotion : GuildEvents.Demotion, 0, pl.GetName(), member.Name, guild.GetRankName(rankId));

            guild.SendRoster();
        }
Esempio n. 6
0
        public void DeleteMember(ulong guid)
        {
            Player player = ObjMgr.FindPlayer(guid);

            if (GetLeaderGuid() == guid)
            {
                Member oldLeader = null;
                Member newLeader = null;
                foreach (var member in MemberList.OrderBy(p => p.RankId))
                {
                    if (member.CharGuid == guid)
                    {
                        oldLeader = member;
                    }
                    else if (newLeader == null || newLeader.RankId > member.RankId)
                    {
                        newLeader = member;
                    }
                }

                if (newLeader == null)
                {
                    Disband();
                    return;
                }

                SetLeader(newLeader);

                Player newLeaderPlayer = ObjMgr.FindPlayer(newLeader.CharGuid);
                if (newLeaderPlayer != null)
                {
                    newLeaderPlayer.SetGuildRank((uint)GuildDefaultRanks.Master);
                }

                if (oldLeader != null)
                {
                    SendBroadcastEvent(GuildEvents.LeaderChanged, 0, oldLeader.Name, newLeader.Name);
                    SendBroadcastEvent(GuildEvents.Left, guid, oldLeader.Name);
                }
            }
            Member m = GetMember(guid);

            if (m == null)
            {
                return;
            }
            MemberList.Remove(m);

            if (player != null)
            {
                player.SetInGuild(0);
                player.SetGuildRank(0);
                player.SetGuildLevel(0);

                /*
                 * for (uint32 i = 0; i < sGuildPerkSpellsStore.GetNumRows(); ++i)
                 *  if (GuildPerkSpellsEntry const* entry = sGuildPerkSpellsStore.LookupEntry(i))
                 * if (entry->Level >= GetLevel())
                 *  player->removeSpell(entry->SpellId, false, false);
                 */
            }
            PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.GuildDelMember);

            stmt.AddValue(0, guid);
            DB.Characters.Execute(stmt);
        }
Esempio n. 7
0
        //Members
        public bool AddMember(UInt64 plGuid, int rankId = -1)
        {
            Player pl = ObjMgr.FindPlayer(plGuid);

            if (pl == null || pl.GuildGuid != 0)
            {
                return(false);
            }

            //remove all signs from petitions

            if (rankId == -1)
            {
                rankId = GetLowestRank();
            }

            Member member = new Member()
            {
                CharGuid           = new ObjectGuid(pl.GetGUIDLow()),
                Name               = pl.Name,
                Level              = pl.getLevel(),
                Class              = pl.getClass(),
                ZoneId             = pl.GetZoneId(),
                Flags              = (byte)GuildMemberFlags.Online,
                LogoutTime         = 0,
                RankId             = (uint)rankId,
                PublicNote         = "",
                OfficerNote        = "",
                AchievementPoints  = 0,
                BankRemainingMoney = 0,
                BankResetTimeMoney = 0,
            };

            for (int i = 0; i < 2; i++)
            {
                Member.Profession prof = new Member.Profession();
                prof.Level   = 0;
                prof.SkillId = 0;
                prof.Rank    = 0;
                member.ProfessionList.Add(prof);
            }

            MemberList.Add(member);

            member.SaveToDB(Guid);

            pl.SetInGuild(Guid);
            pl.SetGuildRank(member.RankId);
            pl.SetGuildLevel(GetLevel());
            pl.SetGuildInvited(0);

            /*
             * pl.GetReputationMgr().SetReputation(sFactionStore.LookupEntry(1168), 1);
             * if (sWorld->getBoolConfig(CONFIG_GUILD_LEVELING_ENABLED))
             * {
             *  for (uint32 i = 0; i < sGuildPerkSpellsStore.GetNumRows(); ++i)
             *      if (GuildPerkSpellsEntry const* entry = sGuildPerkSpellsStore.LookupEntry(i))
             *  if (entry->Level >= GetLevel())
             *      player->learnSpell(entry->SpellId, true);
             * }
             */
            return(true);
        }
Esempio n. 8
0
        public void SendRoster(WorldSession session = null)
        {
            PacketWriter writer = new PacketWriter(Opcodes.SMSG_GuildRoster);

            int size = GetMemberSize();

            writer.WriteBits(MOTD.Length, 11);
            writer.WriteBits(size, 18);

            foreach (Member pmember in MemberList)
            {
                var guid = pmember.CharGuid;

                writer.WriteBit(guid[3]);
                writer.WriteBit(guid[4]);
                writer.WriteBit(false); //Has Authenticator
                writer.WriteBit(false); //Can SoR
                writer.WriteBits(pmember.PublicNote.Length, 8);
                writer.WriteBits(pmember.OfficerNote.Length, 8);
                writer.WriteBit(guid[0]);
                writer.WriteBits(pmember.Name.Length, 7);
                writer.WriteBit(guid[1]);
                writer.WriteBit(guid[2]);
                writer.WriteBit(guid[6]);
                writer.WriteBit(guid[5]);
                writer.WriteBit(guid[7]);
            }
            writer.WriteBits(INFO.Length, 12);
            writer.BitFlush();
            foreach (Member pmember in MemberList)
            {
                Player pl = ObjMgr.FindPlayer(pmember.CharGuid);

                if (pl != null)
                {
                    var guid = new ObjectGuid(pl.GetGUIDLow());
                    writer.WriteUInt8(pl.getClass());
                    writer.WriteUInt32(0); //Guild Reputation
                    writer.WriteByteSeq(guid[0]);
                    writer.WriteUInt64(0); //week activity
                    writer.WriteUInt32(pmember.RankId);
                    writer.WriteUInt32(0); //GetAchievementPoints());

                    for (int j = 0; j < 2; j++)
                    {
                        writer.WriteUInt32(pmember.ProfessionList[j].Rank);
                        writer.WriteUInt32(pmember.ProfessionList[j].Level);
                        writer.WriteUInt32(pmember.ProfessionList[j].SkillId);
                    }

                    writer.WriteByteSeq(guid[2]);
                    writer.WriteUInt8((byte)GuildMemberFlags.Online);
                    writer.WriteUInt32(pl.GetZoneId());
                    writer.WriteUInt64(0); //total activity
                    writer.WriteByteSeq(guid[7]);
                    writer.WriteUInt32(0); // remaining guild week rep
                    writer.Write(pmember.PublicNote.ToCharArray());
                    writer.WriteByteSeq(guid[3]);
                    writer.WriteUInt8((byte)pl.getLevel());
                    writer.WriteUInt32(0);//unk
                    writer.WriteByteSeq(guid[5]);
                    writer.WriteByteSeq(guid[4]);
                    writer.WriteUInt8(0);//unk
                    writer.WriteByteSeq(guid[1]);
                    writer.WriteFloat(0);
                    writer.Write(pmember.OfficerNote.ToCharArray());
                    writer.WriteByteSeq(guid[6]);
                    writer.Write(pl.Name.ToCharArray());
                }
                else
                {
                    var guid = pmember.CharGuid;

                    writer.WriteUInt8(pmember.Class);
                    writer.WriteUInt32(0);              //unk
                    writer.WriteByteSeq(guid[0]);
                    writer.WriteUInt64(0);              //week activity
                    writer.WriteUInt32(pmember.RankId); //rank
                    writer.WriteUInt32(0);              //GetAchievementPoints());

                    for (int j = 0; j < 2; j++)
                    {
                        writer.WriteUInt32(pmember.ProfessionList[j].Rank);
                        writer.WriteUInt32(pmember.ProfessionList[j].Level);
                        writer.WriteUInt32(pmember.ProfessionList[j].SkillId);
                    }
                    writer.WriteByteSeq(guid[2]);
                    writer.WriteUInt8((byte)GuildMemberFlags.Offline);
                    writer.WriteUInt32(pmember.ZoneId);
                    writer.WriteUInt64(0); //total activity
                    writer.WriteByteSeq(guid[7]);
                    writer.WriteUInt32(0); // remaining guild rep
                    writer.Write(pmember.PublicNote.ToCharArray());
                    writer.WriteByteSeq(guid[3]);
                    writer.WriteUInt8((byte)pmember.Level);
                    writer.WriteUInt32(0);//unk
                    writer.WriteByteSeq(guid[5]);
                    writer.WriteByteSeq(4);
                    writer.WriteUInt8(0);                                                                                                                   //unk
                    writer.WriteByteSeq(guid[1]);
                    writer.WriteFloat(Convert.ToSingle(new TimeSpan((DateTime.UtcNow.Ticks - (long)pmember.LogoutTime) / (int)TimeConstants.Day).Minutes)); // ?? time(NULL)-itr2->second.LogoutTime) / DAY);
                    writer.Write(pmember.OfficerNote.ToCharArray());
                    writer.WriteByteSeq(guid[6]);
                    writer.Write(pmember.Name.ToCharArray());
                }
            }
            writer.Write(INFO.ToCharArray());
            writer.Write(MOTD.ToCharArray());
            writer.WriteUInt32(0);
            writer.WriteUInt32(0);
            writer.WriteUInt32(0);
            writer.WriteUInt32(0);

            if (session != null)
            {
                session.Send(writer);
            }
            else
            {
                BroadcastPacket(writer);
            }
        }