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); }
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); }
public void BroadcastPacket(PacketWriter writer) { foreach (Member member in MemberList) { Player pl = ObjMgr.FindPlayer(member.CharGuid); if (pl != null) { pl.GetSession().Send(writer); } } }
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)); }
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(); }
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); }
//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); }
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); } }