diff options
author | Shauren <shauren.trinity@gmail.com> | 2012-07-23 00:13:13 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2012-07-23 00:13:13 +0200 |
commit | fc453ab623178f824bbb0b741ff17cc40beb6c62 (patch) | |
tree | 794da67aa87362cb7682ab87e6e84d3f484322e3 /src | |
parent | 48f38f6da17cd10010539c3124994310af5a1c62 (diff) | |
parent | 47054e6bc1b58ea1a553c550bd302e74016a2467 (diff) |
Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4
Diffstat (limited to 'src')
25 files changed, 2625 insertions, 906 deletions
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index 1fc2b912fcc..50e8af9bc13 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -230,7 +230,7 @@ void AuctionHouseMgr::SendAuctionOutbiddedMail(AuctionEntry* auction, uint32 new if (oldBidder && newBidder) oldBidder->GetSession()->SendAuctionBidderNotification(auction->GetHouseId(), auction->Id, newBidder->GetGUID(), newPrice, auction->GetAuctionOutBid(), auction->item_template); - MailDraft(auction->BuildAuctionMailSubject(AUCTION_OUTBIDDED), AuctionEntry::BuildAuctionMailBody(0, auction->bid, 0, 0, 0)) + MailDraft(auction->BuildAuctionMailSubject(AUCTION_OUTBIDDED), AuctionEntry::BuildAuctionMailBody(auction->owner, auction->bid, auction->buyout, auction->deposit, auction->GetAuctionCut())) .AddMoney(auction->bid) .SendMailTo(trans, MailReceiver(oldBidder, auction->bidder), auction, MAIL_CHECK_MASK_COPIED); } @@ -248,7 +248,7 @@ void AuctionHouseMgr::SendAuctionCancelledToBidderMail(AuctionEntry* auction, SQ // bidder exist if (bidder || bidder_accId) - MailDraft(auction->BuildAuctionMailSubject(AUCTION_CANCELLED_TO_BIDDER), AuctionEntry::BuildAuctionMailBody(0, auction->bid, 0, 0, 0)) + MailDraft(auction->BuildAuctionMailSubject(AUCTION_CANCELLED_TO_BIDDER), AuctionEntry::BuildAuctionMailBody(auction->owner, auction->bid, auction->buyout, auction->deposit, 0)) .AddMoney(auction->bid) .SendMailTo(trans, MailReceiver(bidder, auction->bidder), auction, MAIL_CHECK_MASK_COPIED); } diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index 3c47b739072..b8f4d7de3c0 100755 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -1660,6 +1660,7 @@ bool Battleground::AddSpiritGuide(uint32 type, float x, float y, float z, float creature->SetUInt32Value(UNIT_CHANNEL_SPELL, SPELL_SPIRIT_HEAL_CHANNEL); // correct cast speed creature->SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f); + creature->SetFloatValue(UNIT_MOD_CAST_HASTE, 1.0f); //creature->CastSpell(creature, SPELL_SPIRIT_HEAL_CHANNEL, true); return true; } diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp index 110be872b9a..65cdca70aba 100755 --- a/src/server/game/Chat/Chat.cpp +++ b/src/server/game/Chat/Chat.cpp @@ -111,34 +111,6 @@ ChatCommand* ChatHandler::getCommandTable() { NULL, 0, false, NULL, "", NULL } }; - static ChatCommand ticketResponseCommandTable[] = - { - { "append", SEC_MODERATOR, true, OldHandler<&ChatHandler::HandleGMTicketResponseAppendCommand>, "", NULL }, - { "appendln", SEC_MODERATOR, true, OldHandler<&ChatHandler::HandleGMTicketResponseAppendLnCommand>, "", NULL }, - { NULL, 0, false, NULL, "", NULL } - }; - - static ChatCommand ticketCommandTable[] = - { - { "list", SEC_MODERATOR, true, OldHandler<&ChatHandler::HandleGMTicketListCommand>, "", NULL }, - { "onlinelist", SEC_MODERATOR, true, OldHandler<&ChatHandler::HandleGMTicketListOnlineCommand>, "", NULL }, - { "viewname", SEC_MODERATOR, true, OldHandler<&ChatHandler::HandleGMTicketGetByNameCommand>, "", NULL }, - { "viewid", SEC_MODERATOR, true, OldHandler<&ChatHandler::HandleGMTicketGetByIdCommand>, "", NULL }, - { "close", SEC_MODERATOR, true, OldHandler<&ChatHandler::HandleGMTicketCloseByIdCommand>, "", NULL }, - { "closedlist", SEC_MODERATOR, true, OldHandler<&ChatHandler::HandleGMTicketListClosedCommand>, "", NULL }, - { "escalatedlist", SEC_GAMEMASTER, true, OldHandler<&ChatHandler::HandleGMTicketListEscalatedCommand>, "", NULL }, - { "delete", SEC_ADMINISTRATOR, true, OldHandler<&ChatHandler::HandleGMTicketDeleteByIdCommand>, "", NULL }, - { "reset", SEC_ADMINISTRATOR, true, OldHandler<&ChatHandler::HandleGMTicketResetCommand>, "", NULL }, - { "assign", SEC_GAMEMASTER, true, OldHandler<&ChatHandler::HandleGMTicketAssignToCommand>, "", NULL }, - { "unassign", SEC_GAMEMASTER, true, OldHandler<&ChatHandler::HandleGMTicketUnAssignCommand>, "", NULL }, - { "comment", SEC_MODERATOR, true, OldHandler<&ChatHandler::HandleGMTicketCommentCommand>, "", NULL }, - { "togglesystem", SEC_ADMINISTRATOR, true, OldHandler<&ChatHandler::HandleToggleGMTicketSystem>, "", NULL }, - { "escalate", SEC_MODERATOR, true, OldHandler<&ChatHandler::HandleGMTicketEscalateCommand>, "", NULL }, - { "response", SEC_MODERATOR, true, NULL, "", ticketResponseCommandTable }, - { "complete", SEC_MODERATOR, true, OldHandler<&ChatHandler::HandleGMTicketCompleteCommand>, "", NULL }, - { NULL, 0, false, NULL, "", NULL } - }; - static ChatCommand commandTable[] = { { "pdump", SEC_ADMINISTRATOR, true, NULL, "", pdumpCommandTable }, @@ -147,7 +119,6 @@ ChatCommand* ChatHandler::getCommandTable() { "channel", SEC_ADMINISTRATOR, true, NULL, "", channelCommandTable }, { "pet", SEC_GAMEMASTER, false, NULL, "", petCommandTable }, - { "ticket", SEC_MODERATOR, false, NULL, "", ticketCommandTable }, { "aura", SEC_ADMINISTRATOR, false, OldHandler<&ChatHandler::HandleAuraCommand>, "", NULL }, { "unaura", SEC_ADMINISTRATOR, false, OldHandler<&ChatHandler::HandleUnAuraCommand>, "", NULL }, diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h index 47734036071..af06b4f760a 100755 --- a/src/server/game/Chat/Chat.h +++ b/src/server/game/Chat/Chat.h @@ -211,26 +211,6 @@ class ChatHandler bool HandleChangeWeather(const char* args); bool HandleKickPlayerCommand(const char * args); - // GM ticket command handlers - bool HandleGMTicketListCommand(const char* args); - bool HandleGMTicketListOnlineCommand(const char* args); - bool HandleGMTicketListClosedCommand(const char* args); - bool HandleGMTicketListEscalatedCommand(const char* args); - bool HandleGMTicketGetByIdCommand(const char* args); - bool HandleGMTicketGetByNameCommand(const char* args); - bool HandleGMTicketCloseByIdCommand(const char* args); - bool HandleGMTicketAssignToCommand(const char* args); - bool HandleGMTicketUnAssignCommand(const char* args); - bool HandleGMTicketCommentCommand(const char* args); - bool HandleGMTicketDeleteByIdCommand(const char* args); - bool HandleGMTicketResetCommand(const char* /* args */); - bool HandleGMTicketReloadCommand(const char*); - bool HandleToggleGMTicketSystem(const char* args); - bool HandleGMTicketEscalateCommand(const char* args); - bool HandleGMTicketCompleteCommand(const char* args); - bool HandleGMTicketResponseAppendCommand(const char* args); - bool HandleGMTicketResponseAppendLnCommand(const char* args); - bool HandleMaxSkillCommand(const char* args); bool HandleSetSkillCommand(const char* args); bool HandleRespawnCommand(const char* args); @@ -259,8 +239,6 @@ class ChatHandler void HandleLearnSkillRecipesHelper(Player* player, uint32 skill_id); private: - bool _HandleGMTicketResponseAppendCommand(const char* args, bool newLine); - WorldSession* m_session; // != NULL for chat command call and NULL for CLI command // common global flag diff --git a/src/server/game/Chat/Commands/TicketCommands.cpp b/src/server/game/Chat/Commands/TicketCommands.cpp deleted file mode 100755 index 177899efbf0..00000000000 --- a/src/server/game/Chat/Commands/TicketCommands.cpp +++ /dev/null @@ -1,457 +0,0 @@ -/* - * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/> - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "Common.h" -#include "DatabaseEnv.h" -#include "WorldPacket.h" -#include "WorldSession.h" -#include "ObjectMgr.h" -#include "TicketMgr.h" -#include "AccountMgr.h" -#include "Chat.h" -#include "Player.h" - -bool ChatHandler::HandleGMTicketListCommand(const char* /*args*/) -{ - sTicketMgr->ShowList(*this, false); - return true; -} - -bool ChatHandler::HandleGMTicketListOnlineCommand(const char* /*args*/) -{ - sTicketMgr->ShowList(*this, true); - return true; -} - -bool ChatHandler::HandleGMTicketListClosedCommand(const char* /*args*/) -{ - sTicketMgr->ShowClosedList(*this); - return true; -} - -bool ChatHandler::HandleGMTicketListEscalatedCommand(const char* /*args*/) -{ - sTicketMgr->ShowEscalatedList(*this); - return true; -} - -bool ChatHandler::HandleGMTicketGetByIdCommand(const char* args) -{ - if (!*args) - return false; - - uint32 ticketId = atoi(args); - GmTicket *ticket = sTicketMgr->GetTicket(ticketId); - if (!ticket || ticket->IsClosed() || ticket->IsCompleted()) - { - SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); - return true; - } - - SQLTransaction trans = SQLTransaction(NULL); - ticket->SetViewed(); - ticket->SaveToDB(trans); - - SendSysMessage(ticket->FormatMessageString(*this, true).c_str()); - return true; -} - -bool ChatHandler::HandleGMTicketGetByNameCommand(const char* args) -{ - if (!*args) - return false; - - std::string name(args); - if (!normalizePlayerName(name)) - return false; - - // Detect target's GUID - uint64 guid = 0; - if (Player* player = sObjectAccessor->FindPlayerByName(name.c_str())) - guid = player->GetGUID(); - else - guid = sObjectMgr->GetPlayerGUIDByName(name); - - // Target must exist - if (!guid) - { - SendSysMessage(LANG_NO_PLAYERS_FOUND); - return true; - } - - // Ticket must exist - GmTicket *ticket = sTicketMgr->GetTicketByPlayer(guid); - if (!ticket) - { - SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); - return true; - } - - SQLTransaction trans = SQLTransaction(NULL); - ticket->SetViewed(); - ticket->SaveToDB(trans); - - SendSysMessage(ticket->FormatMessageString(*this, true).c_str()); - return true; -} - -bool ChatHandler::HandleGMTicketCloseByIdCommand(const char* args) -{ - if (!*args) - return false; - - uint32 ticketId = atoi(args); - GmTicket* ticket = sTicketMgr->GetTicket(ticketId); - if (!ticket || ticket->IsClosed() || ticket->IsCompleted()) - { - SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); - return true; - } - - // Ticket should be assigned to the player who tries to close it. - // Console can override though - Player* player = m_session ? m_session->GetPlayer() : NULL; - if (player && ticket->IsAssignedNotTo(player->GetGUID())) - { - PSendSysMessage(LANG_COMMAND_TICKETCANNOTCLOSE, ticket->GetId()); - return true; - } - - sTicketMgr->CloseTicket(ticket->GetId(), player ? player->GetGUID() : -1); - sTicketMgr->UpdateLastChange(); - - std::string msg = ticket->FormatMessageString(*this, player ? player->GetName() : "Console", NULL, NULL, NULL); - SendGlobalGMSysMessage(msg.c_str()); - - // Inform player, who submitted this ticket, that it is closed - if (Player* submitter = ticket->GetPlayer()) - { - if (submitter->IsInWorld()) - { - WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4); - data << uint32(GMTICKET_RESPONSE_TICKET_DELETED); - submitter->GetSession()->SendPacket(&data); - } - } - return true; -} - -bool ChatHandler::HandleGMTicketAssignToCommand(const char* args) -{ - if (!*args) - return false; - - char* sTicketId = strtok((char*)args, " "); - uint32 ticketId = atoi(sTicketId); - - char* sTarget = strtok(NULL, " "); - if (!sTarget) - return false; - - std::string target(sTarget); - if (!normalizePlayerName(target)) - return false; - - GmTicket* ticket = sTicketMgr->GetTicket(ticketId); - if (!ticket || ticket->IsClosed()) - { - SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); - return true; - } - - // Get target information - uint64 targetGuid = sObjectMgr->GetPlayerGUIDByName(target.c_str()); - uint64 targetAccId = sObjectMgr->GetPlayerAccountIdByGUID(targetGuid); - uint32 targetGmLevel = AccountMgr::GetSecurity(targetAccId, realmID); - - // Target must exist and have administrative rights - if (!targetGuid || AccountMgr::IsPlayerAccount(targetGmLevel)) - { - SendSysMessage(LANG_COMMAND_TICKETASSIGNERROR_A); - return true; - } - - // If already assigned, leave - if (ticket->IsAssignedTo(targetGuid)) - { - PSendSysMessage(LANG_COMMAND_TICKETASSIGNERROR_B, ticket->GetId()); - return true; - } - - // If assigned to different player other than current, leave - //! Console can override though - Player* player = m_session ? m_session->GetPlayer() : NULL; - if (player && ticket->IsAssignedNotTo(player->GetGUID())) - { - PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->GetId(), target.c_str()); - return true; - } - - // Assign ticket - SQLTransaction trans = SQLTransaction(NULL); - ticket->SetAssignedTo(targetGuid, AccountMgr::IsAdminAccount(targetGmLevel)); - ticket->SaveToDB(trans); - sTicketMgr->UpdateLastChange(); - - std::string msg = ticket->FormatMessageString(*this, NULL, target.c_str(), NULL, NULL); - SendGlobalGMSysMessage(msg.c_str()); - return true; -} - -bool ChatHandler::HandleGMTicketUnAssignCommand(const char* args) -{ - if (!*args) - return false; - - uint32 ticketId = atoi(args); - GmTicket *ticket = sTicketMgr->GetTicket(ticketId); - if (!ticket || ticket->IsClosed()) - { - SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); - return true; - } - // Ticket must be assigned - if (!ticket->IsAssigned()) - { - PSendSysMessage(LANG_COMMAND_TICKETNOTASSIGNED, ticket->GetId()); - return true; - } - - // Get security level of player, whom this ticket is assigned to - uint32 security = SEC_PLAYER; - Player* assignedPlayer = ticket->GetAssignedPlayer(); - if (assignedPlayer && assignedPlayer->IsInWorld()) - security = assignedPlayer->GetSession()->GetSecurity(); - else - { - uint64 guid = ticket->GetAssignedToGUID(); - uint32 accountId = sObjectMgr->GetPlayerAccountIdByGUID(guid); - security = AccountMgr::GetSecurity(accountId, realmID); - } - - // Check security - //! If no m_session present it means we're issuing this command from the console - uint32 mySecurity = m_session ? m_session->GetSecurity() : SEC_CONSOLE; - if (security > mySecurity) - { - SendSysMessage(LANG_COMMAND_TICKETUNASSIGNSECURITY); - return true; - } - - SQLTransaction trans = SQLTransaction(NULL); - ticket->SetUnassigned(); - ticket->SaveToDB(trans); - sTicketMgr->UpdateLastChange(); - - std::string msg = ticket->FormatMessageString(*this, NULL, ticket->GetAssignedToName().c_str(), - m_session ? m_session->GetPlayer()->GetName() : "Console", NULL); - SendGlobalGMSysMessage(msg.c_str()); - return true; -} - -bool ChatHandler::HandleGMTicketCommentCommand(const char* args) -{ - if (!*args) - return false; - - char* tguid = strtok((char*)args, " "); - uint32 ticketId = atoi(tguid); - - char* comment = strtok(NULL, "\n"); - if (!comment) - return false; - - GmTicket *ticket = sTicketMgr->GetTicket(ticketId); - if (!ticket || ticket->IsClosed()) - { - PSendSysMessage(LANG_COMMAND_TICKETNOTEXIST); - return true; - } - - // Cannot comment ticket assigned to someone else - //! Console excluded - Player* player = m_session ? m_session->GetPlayer() : NULL; - if (player && ticket->IsAssignedNotTo(player->GetGUID())) - { - PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->GetId()); - return true; - } - - SQLTransaction trans = SQLTransaction(NULL); - ticket->SetComment(comment); - ticket->SaveToDB(trans); - sTicketMgr->UpdateLastChange(); - - std::string msg = ticket->FormatMessageString(*this, NULL, ticket->GetAssignedToName().c_str(), NULL, NULL); - msg += PGetParseString(LANG_COMMAND_TICKETLISTADDCOMMENT, player ? player->GetName() : "Console", comment); - SendGlobalGMSysMessage(msg.c_str()); - - return true; -} - -bool ChatHandler::HandleGMTicketDeleteByIdCommand(const char* args) -{ - if (!*args) - return false; - - uint32 ticketId = atoi(args); - GmTicket* ticket = sTicketMgr->GetTicket(ticketId); - if (!ticket) - { - SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); - return true; - } - - if (!ticket->IsClosed()) - { - SendSysMessage(LANG_COMMAND_TICKETCLOSEFIRST); - return true; - } - - std::string msg = ticket->FormatMessageString(*this, NULL, NULL, NULL, m_session ? m_session->GetPlayer()->GetName() : "Console"); - SendGlobalGMSysMessage(msg.c_str()); - - sTicketMgr->RemoveTicket(ticket->GetId()); - sTicketMgr->UpdateLastChange(); - - if (Player* player = ticket->GetPlayer()) - { - if (player->IsInWorld()) - { - // Force abandon ticket - WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4); - data << uint32(GMTICKET_RESPONSE_TICKET_DELETED); - player->GetSession()->SendPacket(&data); - } - } - return true; -} - -bool ChatHandler::HandleGMTicketResetCommand(const char* /* args */) -{ - if (sTicketMgr->GetOpenTicketCount() > 0) - { - SendSysMessage(LANG_COMMAND_TICKETPENDING); - return true; - } - else - { - sTicketMgr->ResetTickets(); - SendSysMessage(LANG_COMMAND_TICKETRESET); - } - - return true; -} - -bool ChatHandler::HandleToggleGMTicketSystem(const char* /* args */) -{ - bool status = !sTicketMgr->GetStatus(); - sTicketMgr->SetStatus(status); - PSendSysMessage(status ? LANG_ALLOW_TICKETS : LANG_DISALLOW_TICKETS); - return true; -} - -bool ChatHandler::HandleGMTicketEscalateCommand(const char *args) -{ - if (!*args) - return false; - - uint32 ticketId = atoi(args); - GmTicket* ticket = sTicketMgr->GetTicket(ticketId); - if (!ticket || !ticket->IsClosed() || ticket->IsCompleted() || ticket->GetEscalatedStatus() != TICKET_UNASSIGNED) - { - SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); - return true; - } - - ticket->SetEscalatedStatus(TICKET_IN_ESCALATION_QUEUE); - - if (Player* player = ticket->GetPlayer()) - if (player->IsInWorld()) - sTicketMgr->SendTicket(player->GetSession(), ticket); - - sTicketMgr->UpdateLastChange(); - return true; -} - -bool ChatHandler::HandleGMTicketCompleteCommand(const char* args) -{ - if (!*args) - return false; - - uint32 ticketId = atoi(args); - GmTicket* ticket = sTicketMgr->GetTicket(ticketId); - if (!ticket || !ticket->IsClosed() || ticket->IsCompleted()) - { - SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); - return true; - } - - if (Player* player = ticket->GetPlayer()) - if (player->IsInWorld()) - ticket->SendResponse(player->GetSession()); - - sTicketMgr->UpdateLastChange(); - return true; -} - -inline bool ChatHandler::_HandleGMTicketResponseAppendCommand(const char* args, bool newLine) -{ - if (!*args) - return false; - - char* sTicketId = strtok((char*)args, " "); - uint32 ticketId = atoi(sTicketId); - - char* response = strtok(NULL, "\n"); - if (!response) - return false; - - GmTicket* ticket = sTicketMgr->GetTicket(ticketId); - if (!ticket || !ticket->IsClosed()) - { - PSendSysMessage(LANG_COMMAND_TICKETNOTEXIST); - return true; - } - - // Cannot add response to ticket, assigned to someone else - //! Console excluded - Player* player = m_session ? m_session->GetPlayer() : NULL; - if (player && ticket->IsAssignedNotTo(player->GetGUID())) - { - PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->GetId()); - return true; - } - - SQLTransaction trans = SQLTransaction(NULL); - ticket->AppendResponse(response); - if (newLine) - ticket->AppendResponse("\n"); - ticket->SaveToDB(trans); - - return true; -} - -bool ChatHandler::HandleGMTicketResponseAppendCommand(const char* args) -{ - return _HandleGMTicketResponseAppendCommand(args, false); -} - -bool ChatHandler::HandleGMTicketResponseAppendLnCommand(const char* args) -{ - return _HandleGMTicketResponseAppendCommand(args, true); -} diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index c7758bf5e55..c9d298c769f 100755 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -327,6 +327,7 @@ bool Creature::InitEntry(uint32 Entry, uint32 /*team*/, const CreatureData* data SetFloatValue(UNIT_FIELD_COMBATREACH, minfo->combat_reach); SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f); + SetFloatValue(UNIT_MOD_CAST_HASTE, 1.0f); SetSpeed(MOVE_WALK, cinfo->speed_walk); SetSpeed(MOVE_RUN, cinfo->speed_run); diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 6894928b551..6271af99fcd 100755 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -41,13 +41,14 @@ #include "GridNotifiers.h" #include "GridNotifiersImpl.h" #include "SpellAuraEffects.h" - +#include "UpdateFieldFlags.h" #include "TemporarySummon.h" #include "Totem.h" #include "OutdoorPvPMgr.h" #include "MovementPacketBuilder.h" #include "DynamicTree.h" #include "Unit.h" +#include "Group.h" uint32 GuidHigh2TypeId(uint32 guid_hi) { @@ -75,6 +76,7 @@ Object::Object() : m_PackGUID(sizeof(uint64)+1) m_uint32Values = NULL; _changedFields = NULL; m_valuesCount = 0; + _fieldNotifyFlags = UF_FLAG_DYNAMIC; m_inWorld = false; m_objectUpdated = false; @@ -586,17 +588,13 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask* if (((GameObject*)this)->ActivateToQuest(target) || target->isGameMaster()) IsActivateToQuest = true; - updateMask->SetBit(GAMEOBJECT_DYNAMIC); - if (((GameObject*)this)->GetGoArtKit()) updateMask->SetBit(GAMEOBJECT_BYTES_1); } else if (isType(TYPEMASK_UNIT)) { if (((Unit*)this)->HasFlag(UNIT_FIELD_AURASTATE, PER_CASTER_AURA_STATE_MASK)) - { updateMask->SetBit(UNIT_FIELD_AURASTATE); - } } } else // case UPDATETYPE_VALUES @@ -604,10 +602,8 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask* if (isType(TYPEMASK_GAMEOBJECT) && !((GameObject*)this)->IsTransport()) { if (((GameObject*)this)->ActivateToQuest(target) || target->isGameMaster()) - { IsActivateToQuest = true; - } - updateMask->SetBit(GAMEOBJECT_DYNAMIC); + updateMask->SetBit(GAMEOBJECT_BYTES_1); if (ToGameObject()->GetGoType() == GAMEOBJECT_TYPE_CHEST && ToGameObject()->GetGOInfo()->chest.groupLootRules && @@ -617,9 +613,7 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask* else if (isType(TYPEMASK_UNIT)) { if (((Unit*)this)->HasFlag(UNIT_FIELD_AURASTATE, PER_CASTER_AURA_STATE_MASK)) - { updateMask->SetBit(UNIT_FIELD_AURASTATE); - } } } @@ -911,26 +905,96 @@ void Object::_LoadIntoDataField(char const* data, uint32 startOffset, uint32 cou } } -void Object::_SetUpdateBits(UpdateMask* updateMask, Player* /*target*/) const +void Object::GetUpdateFieldData(Player const* target, uint32*& flags, bool& isOwner, bool& isItemOwner, bool& hasSpecialInfo, bool& isPartyMember) const +{ + // This function assumes updatefield index is always valid + switch (GetTypeId()) + { + case TYPEID_ITEM: + case TYPEID_CONTAINER: + flags = ItemUpdateFieldFlags; + isOwner = isItemOwner = ((Item*)this)->GetOwnerGUID() == target->GetGUID(); + break; + case TYPEID_UNIT: + case TYPEID_PLAYER: + { + Player* plr = ToUnit()->GetCharmerOrOwnerPlayerOrPlayerItself(); + flags = UnitUpdateFieldFlags; + isOwner = ToUnit()->GetOwnerGUID() == target->GetGUID(); + hasSpecialInfo = ToUnit()->HasAuraTypeWithCaster(SPELL_AURA_EMPATHY, target->GetGUID()); + isPartyMember = plr && plr->IsInSameGroupWith(target); + break; + } + case TYPEID_GAMEOBJECT: + flags = GameObjectUpdateFieldFlags; + isOwner = ToGameObject()->GetOwnerGUID() == target->GetGUID(); + break; + case TYPEID_DYNAMICOBJECT: + flags = DynamicObjectUpdateFieldFlags; + isOwner = ((DynamicObject*)this)->GetCasterGUID() == target->GetGUID(); + break; + case TYPEID_CORPSE: + flags = CorpseUpdateFieldFlags; + isOwner = ToCorpse()->GetOwnerGUID() == target->GetGUID(); + break; + } +} + +bool Object::IsUpdateFieldVisible(uint32 flags, bool isSelf, bool isOwner, bool isItemOwner, bool isPartyMember) const +{ + if (flags == UF_FLAG_NONE) + return false; + + if (flags & UF_FLAG_PUBLIC) + return true; + + if (flags & UF_FLAG_PRIVATE && isSelf) + return true; + + if (flags & UF_FLAG_OWNER && isOwner) + return true; + + if (flags & UF_FLAG_ITEM_OWNER && isItemOwner) + return true; + + if (flags & UF_FLAG_PARTY_MEMBER && isPartyMember) + return true; + + return false; +} + +void Object::_SetUpdateBits(UpdateMask* updateMask, Player* target) const { bool* indexes = _changedFields; + uint32* flags = NULL; + bool isSelf = target == this; + bool isOwner = false; + bool isItemOwner = false; + bool hasSpecialInfo = false; + bool isPartyMember = false; + + GetUpdateFieldData(target, flags, isOwner, isItemOwner, hasSpecialInfo, isPartyMember); for (uint16 index = 0; index < m_valuesCount; ++index, ++indexes) - { - if (*indexes) + if (_fieldNotifyFlags & flags[index] || (flags[index] & UF_FLAG_SPECIAL_INFO && hasSpecialInfo) || (*indexes && IsUpdateFieldVisible(flags[index], isSelf, isOwner, isItemOwner, isPartyMember))) updateMask->SetBit(index); - } } -void Object::_SetCreateBits(UpdateMask* updateMask, Player* /*target*/) const +void Object::_SetCreateBits(UpdateMask* updateMask, Player* target) const { uint32* value = m_uint32Values; + uint32* flags = NULL; + bool isSelf = target == this; + bool isOwner = false; + bool isItemOwner = false; + bool hasSpecialInfo = false; + bool isPartyMember = false; + + GetUpdateFieldData(target, flags, isOwner, isItemOwner, hasSpecialInfo, isPartyMember); for (uint16 index = 0; index < m_valuesCount; ++index, ++value) - { - if (*value) + if (_fieldNotifyFlags & flags[index] || (flags[index] & UF_FLAG_SPECIAL_INFO && hasSpecialInfo) || (*value && IsUpdateFieldVisible(flags[index], isSelf, isOwner, isItemOwner, isPartyMember))) updateMask->SetBit(index); - } } void Object::SetInt32Value(uint16 index, int32 value) diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 1d4732b8153..3e00e775b4b 100755 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -355,6 +355,9 @@ class Object virtual void BuildUpdate(UpdateDataMapType&) {} void BuildFieldsUpdate(Player*, UpdateDataMapType &) const; + void SetFieldNotifyFlag(uint16 flag) { _fieldNotifyFlags |= flag; } + void RemoveFieldNotifyFlag(uint16 flag) { _fieldNotifyFlags &= ~flag; } + // FG: some hacky helpers void ForceValuesUpdateAtIndex(uint32); @@ -375,13 +378,16 @@ class Object Object(); void _InitValues(); - void _Create (uint32 guidlow, uint32 entry, HighGuid guidhigh); + void _Create(uint32 guidlow, uint32 entry, HighGuid guidhigh); std::string _ConcatFields(uint16 startIndex, uint16 size) const; void _LoadIntoDataField(const char* data, uint32 startOffset, uint32 count); - virtual void _SetUpdateBits(UpdateMask* updateMask, Player* target) const; + void GetUpdateFieldData(Player const* target, uint32*& flags, bool& isOwner, bool& isItemOwner, bool& hasSpecialInfo, bool& isPartyMember) const; + + bool IsUpdateFieldVisible(uint32 flags, bool isSelf, bool isOwner, bool isItemOwner, bool isPartyMember) const; - virtual void _SetCreateBits(UpdateMask* updateMask, Player* target) const; + void _SetUpdateBits(UpdateMask* updateMask, Player* target) const; + void _SetCreateBits(UpdateMask* updateMask, Player* target) const; void _BuildMovementUpdate(ByteBuffer * data, uint16 flags) const; void _BuildValuesUpdate(uint8 updatetype, ByteBuffer *data, UpdateMask* updateMask, Player* target) const; @@ -401,6 +407,8 @@ class Object uint16 m_valuesCount; + uint16 _fieldNotifyFlags; + bool m_objectUpdated; private: diff --git a/src/server/game/Entities/Object/Updates/UpdateFieldFlags.cpp b/src/server/game/Entities/Object/Updates/UpdateFieldFlags.cpp new file mode 100644 index 00000000000..2c15487180c --- /dev/null +++ b/src/server/game/Entities/Object/Updates/UpdateFieldFlags.cpp @@ -0,0 +1,1658 @@ +/* + * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "UpdateFieldFlags.h" + +uint32 ItemUpdateFieldFlags[CONTAINER_END] = +{ + UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID + UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1 + UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA + UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+1 + UF_FLAG_PUBLIC, // OBJECT_FIELD_TYPE + UF_FLAG_PUBLIC, // OBJECT_FIELD_ENTRY + UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X + UF_FLAG_NONE, // OBJECT_FIELD_PADDING + UF_FLAG_PUBLIC, // ITEM_FIELD_OWNER + UF_FLAG_PUBLIC, // ITEM_FIELD_OWNER+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_CONTAINED + UF_FLAG_PUBLIC, // ITEM_FIELD_CONTAINED+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_CREATOR + UF_FLAG_PUBLIC, // ITEM_FIELD_CREATOR+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_GIFTCREATOR + UF_FLAG_PUBLIC, // ITEM_FIELD_GIFTCREATOR+1 + UF_FLAG_OWNER | UF_FLAG_ITEM_OWNER, // ITEM_FIELD_STACK_COUNT + UF_FLAG_OWNER | UF_FLAG_ITEM_OWNER, // ITEM_FIELD_DURATION + UF_FLAG_OWNER | UF_FLAG_ITEM_OWNER, // ITEM_FIELD_SPELL_CHARGES + UF_FLAG_OWNER | UF_FLAG_ITEM_OWNER, // ITEM_FIELD_SPELL_CHARGES+1 + UF_FLAG_OWNER | UF_FLAG_ITEM_OWNER, // ITEM_FIELD_SPELL_CHARGES+2 + UF_FLAG_OWNER | UF_FLAG_ITEM_OWNER, // ITEM_FIELD_SPELL_CHARGES+3 + UF_FLAG_OWNER | UF_FLAG_ITEM_OWNER, // ITEM_FIELD_SPELL_CHARGES+4 + UF_FLAG_PUBLIC, // ITEM_FIELD_FLAGS + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_1_1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_1_1+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_1_3 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_2_1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_2_1+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_2_3 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_3_1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_3_1+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_3_3 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_4_1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_4_1+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_4_3 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_5_1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_5_1+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_5_3 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_6_1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_6_1+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_6_3 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_7_1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_7_1+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_7_3 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_8_1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_8_1+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_8_3 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_9_1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_9_1+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_9_3 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_10_1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_10_1+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_10_3 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_11_1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_11_1+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_11_3 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_12_1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_12_1+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_12_3 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_13_1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_13_1+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_13_3 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_14_1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_14_1+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_14_3 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_15_1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_15_1+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT_15_3 + UF_FLAG_PUBLIC, // ITEM_FIELD_PROPERTY_SEED + UF_FLAG_PUBLIC, // ITEM_FIELD_RANDOM_PROPERTIES_ID + UF_FLAG_OWNER | UF_FLAG_ITEM_OWNER, // ITEM_FIELD_DURABILITY + UF_FLAG_OWNER | UF_FLAG_ITEM_OWNER, // ITEM_FIELD_MAXDURABILITY + UF_FLAG_PUBLIC, // ITEM_FIELD_CREATE_PLAYED_TIME + UF_FLAG_PUBLIC, // CONTAINER_FIELD_NUM_SLOTS + UF_FLAG_NONE, // CONTAINER_ALIGN_PAD + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+1 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+2 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+3 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+4 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+5 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+6 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+7 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+8 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+9 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+10 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+11 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+12 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+13 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+14 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+15 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+16 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+17 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+18 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+19 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+20 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+21 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+22 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+23 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+24 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+25 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+26 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+27 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+28 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+29 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+30 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+31 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+32 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+33 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+34 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+35 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+36 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+37 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+38 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+39 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+40 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+41 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+42 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+43 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+44 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+45 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+46 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+47 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+48 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+49 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+50 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+51 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+52 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+53 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+54 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+55 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+56 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+57 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+58 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+59 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+60 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+61 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+62 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+63 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+64 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+65 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+66 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+67 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+68 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+69 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+70 + UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+71 +}; + +uint32 UnitUpdateFieldFlags[PLAYER_END] = +{ + UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID + UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1 + UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA + UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+1 + UF_FLAG_PUBLIC, // OBJECT_FIELD_TYPE + UF_FLAG_PUBLIC, // OBJECT_FIELD_ENTRY + UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X + UF_FLAG_NONE, // OBJECT_FIELD_PADDING + UF_FLAG_PUBLIC, // UNIT_FIELD_CHARM + UF_FLAG_PUBLIC, // UNIT_FIELD_CHARM+1 + UF_FLAG_PUBLIC, // UNIT_FIELD_SUMMON + UF_FLAG_PUBLIC, // UNIT_FIELD_SUMMON+1 + UF_FLAG_PRIVATE, // UNIT_FIELD_CRITTER + UF_FLAG_PRIVATE, // UNIT_FIELD_CRITTER+1 + UF_FLAG_PUBLIC, // UNIT_FIELD_CHARMEDBY + UF_FLAG_PUBLIC, // UNIT_FIELD_CHARMEDBY+1 + UF_FLAG_PUBLIC, // UNIT_FIELD_SUMMONEDBY + UF_FLAG_PUBLIC, // UNIT_FIELD_SUMMONEDBY+1 + UF_FLAG_PUBLIC, // UNIT_FIELD_CREATEDBY + UF_FLAG_PUBLIC, // UNIT_FIELD_CREATEDBY+1 + UF_FLAG_PUBLIC, // UNIT_FIELD_TARGET + UF_FLAG_PUBLIC, // UNIT_FIELD_TARGET+1 + UF_FLAG_PUBLIC, // UNIT_FIELD_CHANNEL_OBJECT + UF_FLAG_PUBLIC, // UNIT_FIELD_CHANNEL_OBJECT+1 + UF_FLAG_PUBLIC, // UNIT_CHANNEL_SPELL + UF_FLAG_PUBLIC, // UNIT_FIELD_BYTES_0 + UF_FLAG_PUBLIC, // UNIT_FIELD_HEALTH + UF_FLAG_PUBLIC, // UNIT_FIELD_POWER1 + UF_FLAG_PUBLIC, // UNIT_FIELD_POWER2 + UF_FLAG_PUBLIC, // UNIT_FIELD_POWER3 + UF_FLAG_PUBLIC, // UNIT_FIELD_POWER4 + UF_FLAG_PUBLIC, // UNIT_FIELD_POWER5 + UF_FLAG_PUBLIC, // UNIT_FIELD_MAXHEALTH + UF_FLAG_PUBLIC, // UNIT_FIELD_MAXPOWER1 + UF_FLAG_PUBLIC, // UNIT_FIELD_MAXPOWER2 + UF_FLAG_PUBLIC, // UNIT_FIELD_MAXPOWER3 + UF_FLAG_PUBLIC, // UNIT_FIELD_MAXPOWER4 + UF_FLAG_PUBLIC, // UNIT_FIELD_MAXPOWER5 + UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNUSED2, // UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER + UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNUSED2, // UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER+1 + UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNUSED2, // UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER+2 + UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNUSED2, // UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER+3 + UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNUSED2, // UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER+4 + UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNUSED2, // UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER + UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNUSED2, // UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER+1 + UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNUSED2, // UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER+2 + UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNUSED2, // UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER+3 + UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNUSED2, // UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER+4 + UF_FLAG_PUBLIC, // UNIT_FIELD_LEVEL + UF_FLAG_PUBLIC, // UNIT_FIELD_FACTIONTEMPLATE + UF_FLAG_PUBLIC, // UNIT_VIRTUAL_ITEM_SLOT_ID + UF_FLAG_PUBLIC, // UNIT_VIRTUAL_ITEM_SLOT_ID+1 + UF_FLAG_PUBLIC, // UNIT_VIRTUAL_ITEM_SLOT_ID+2 + UF_FLAG_PUBLIC, // UNIT_FIELD_FLAGS + UF_FLAG_PUBLIC, // UNIT_FIELD_FLAGS_2 + UF_FLAG_PUBLIC, // UNIT_FIELD_AURASTATE + UF_FLAG_PUBLIC, // UNIT_FIELD_BASEATTACKTIME + UF_FLAG_PUBLIC, // UNIT_FIELD_BASEATTACKTIME+1 + UF_FLAG_PRIVATE, // UNIT_FIELD_RANGEDATTACKTIME + UF_FLAG_PUBLIC, // UNIT_FIELD_BOUNDINGRADIUS + UF_FLAG_PUBLIC, // UNIT_FIELD_COMBATREACH + UF_FLAG_DYNAMIC, // UNIT_FIELD_DISPLAYID + UF_FLAG_PUBLIC, // UNIT_FIELD_NATIVEDISPLAYID + UF_FLAG_PUBLIC, // UNIT_FIELD_MOUNTDISPLAYID + UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_MINDAMAGE + UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_MAXDAMAGE + UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_MINOFFHANDDAMAGE + UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_MAXOFFHANDDAMAGE + UF_FLAG_PUBLIC, // UNIT_FIELD_BYTES_1 + UF_FLAG_PUBLIC, // UNIT_FIELD_PETNUMBER + UF_FLAG_PUBLIC, // UNIT_FIELD_PET_NAME_TIMESTAMP + UF_FLAG_OWNER, // UNIT_FIELD_PETEXPERIENCE + UF_FLAG_OWNER, // UNIT_FIELD_PETNEXTLEVELEXP + UF_FLAG_DYNAMIC, // UNIT_DYNAMIC_FLAGS + UF_FLAG_PUBLIC, // UNIT_MOD_CAST_SPEED + UF_FLAG_PUBLIC, // UNIT_MOD_CAST_HASTE + UF_FLAG_PUBLIC, // UNIT_CREATED_BY_SPELL + UF_FLAG_DYNAMIC, // UNIT_NPC_FLAGS + UF_FLAG_PUBLIC, // UNIT_NPC_EMOTESTATE + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_STAT0 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_STAT1 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_STAT2 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_STAT3 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_STAT4 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POSSTAT0 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POSSTAT1 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POSSTAT2 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POSSTAT3 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POSSTAT4 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_NEGSTAT0 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_NEGSTAT1 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_NEGSTAT2 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_NEGSTAT3 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_NEGSTAT4 + UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_RESISTANCES + UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_RESISTANCES+1 + UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_RESISTANCES+2 + UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_RESISTANCES+3 + UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_RESISTANCES+4 + UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_RESISTANCES+5 + UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_RESISTANCES+6 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE+1 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE+2 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE+3 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE+4 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE+5 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE+6 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE+1 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE+2 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE+3 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE+4 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE+5 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE+6 + UF_FLAG_PUBLIC, // UNIT_FIELD_BASE_MANA + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_BASE_HEALTH + UF_FLAG_PUBLIC, // UNIT_FIELD_BYTES_2 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_ATTACK_POWER + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_ATTACK_POWER_MOD_POS + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_ATTACK_POWER_MOD_NEG + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_ATTACK_POWER_MULTIPLIER + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RANGED_ATTACK_POWER + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RANGED_ATTACK_POWER_MOD_POS + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RANGED_ATTACK_POWER_MOD_NEG + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_MINRANGEDDAMAGE + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_MAXRANGEDDAMAGE + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MODIFIER + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MODIFIER+1 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MODIFIER+2 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MODIFIER+3 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MODIFIER+4 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MODIFIER+5 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MODIFIER+6 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MULTIPLIER + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MULTIPLIER+1 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MULTIPLIER+2 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MULTIPLIER+3 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MULTIPLIER+4 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MULTIPLIER+5 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MULTIPLIER+6 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_MAXHEALTHMODIFIER + UF_FLAG_PUBLIC, // UNIT_FIELD_HOVERHEIGHT + UF_FLAG_PUBLIC, // UNIT_FIELD_MAXITEMLEVEL + UF_FLAG_NONE, // UNIT_FIELD_PADDING + UF_FLAG_PUBLIC, // PLAYER_DUEL_ARBITER + UF_FLAG_PUBLIC, // PLAYER_DUEL_ARBITER+1 + UF_FLAG_PUBLIC, // PLAYER_FLAGS + UF_FLAG_PUBLIC, // PLAYER_GUILDRANK + UF_FLAG_PUBLIC, // PLAYER_GUILDDELETE_DATE + UF_FLAG_PUBLIC, // PLAYER_GUILDLEVEL + UF_FLAG_PUBLIC, // PLAYER_BYTES + UF_FLAG_PUBLIC, // PLAYER_BYTES_2 + UF_FLAG_PUBLIC, // PLAYER_BYTES_3 + UF_FLAG_PUBLIC, // PLAYER_DUEL_TEAM + UF_FLAG_PUBLIC, // PLAYER_GUILD_TIMESTAMP + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_1_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_1_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_1_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_1_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_1_4 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_2_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_2_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_2_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_2_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_2_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_3_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_3_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_3_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_3_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_3_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_4_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_4_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_4_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_4_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_4_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_5_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_5_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_5_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_5_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_5_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_6_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_6_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_6_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_6_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_6_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_7_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_7_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_7_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_7_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_7_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_8_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_8_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_8_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_8_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_8_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_9_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_9_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_9_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_9_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_9_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_10_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_10_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_10_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_10_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_10_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_11_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_11_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_11_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_11_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_11_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_12_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_12_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_12_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_12_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_12_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_13_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_13_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_13_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_13_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_13_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_14_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_14_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_14_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_14_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_14_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_15_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_15_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_15_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_15_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_15_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_16_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_16_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_16_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_16_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_16_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_17_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_17_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_17_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_17_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_17_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_18_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_18_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_18_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_18_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_18_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_19_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_19_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_19_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_19_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_19_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_20_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_20_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_20_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_20_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_20_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_21_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_21_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_21_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_21_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_21_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_22_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_22_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_22_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_22_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_22_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_23_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_23_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_23_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_23_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_23_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_24_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_24_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_24_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_24_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_24_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_25_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_25_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_25_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_25_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_25_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_26_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_26_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_26_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_26_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_26_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_27_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_27_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_27_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_27_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_27_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_28_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_28_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_28_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_28_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_28_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_29_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_29_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_29_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_29_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_29_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_30_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_30_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_30_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_30_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_30_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_31_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_31_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_31_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_31_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_31_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_32_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_32_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_32_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_32_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_32_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_33_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_33_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_33_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_33_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_33_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_34_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_34_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_34_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_34_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_34_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_35_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_35_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_35_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_35_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_35_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_36_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_36_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_36_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_36_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_36_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_37_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_37_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_37_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_37_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_37_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_38_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_38_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_38_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_38_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_38_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_39_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_39_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_39_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_39_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_39_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_40_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_40_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_40_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_40_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_40_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_41_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_41_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_41_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_41_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_41_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_42_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_42_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_42_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_42_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_42_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_43_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_43_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_43_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_43_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_43_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_44_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_44_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_44_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_44_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_44_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_45_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_45_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_45_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_45_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_45_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_46_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_46_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_46_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_46_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_46_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_47_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_47_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_47_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_47_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_47_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_48_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_48_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_48_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_48_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_48_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_49_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_49_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_49_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_49_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_49_5 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_50_1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_50_2 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_50_3 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_50_3+1 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG_50_5 + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_1_ENTRYID + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_1_ENCHANTMENT + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_2_ENTRYID + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_2_ENCHANTMENT + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_3_ENTRYID + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_3_ENCHANTMENT + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_4_ENTRYID + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_4_ENCHANTMENT + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_5_ENTRYID + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_5_ENCHANTMENT + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_6_ENTRYID + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_6_ENCHANTMENT + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_7_ENTRYID + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_7_ENCHANTMENT + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_8_ENTRYID + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_8_ENCHANTMENT + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_9_ENTRYID + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_9_ENCHANTMENT + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_10_ENTRYID + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_10_ENCHANTMENT + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_11_ENTRYID + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_11_ENCHANTMENT + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_12_ENTRYID + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_12_ENCHANTMENT + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_13_ENTRYID + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_13_ENCHANTMENT + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_14_ENTRYID + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_14_ENCHANTMENT + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_15_ENTRYID + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_15_ENCHANTMENT + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_16_ENTRYID + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_16_ENCHANTMENT + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_17_ENTRYID + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_17_ENCHANTMENT + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_18_ENTRYID + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_18_ENCHANTMENT + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_19_ENTRYID + UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM_19_ENCHANTMENT + UF_FLAG_PUBLIC, // PLAYER_CHOSEN_TITLE + UF_FLAG_PUBLIC, // PLAYER_FAKE_INEBRIATION + UF_FLAG_NONE, // PLAYER_FIELD_PAD_0 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+2 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+3 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+4 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+5 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+6 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+7 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+8 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+9 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+10 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+11 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+12 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+13 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+14 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+15 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+16 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+17 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+18 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+19 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+20 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+21 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+22 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+23 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+24 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+25 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+26 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+27 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+28 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+29 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+30 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+31 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+32 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+33 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+34 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+35 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+36 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+37 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+38 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+39 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+40 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+41 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+42 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+43 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+44 + UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+45 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+2 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+3 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+4 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+5 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+6 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+7 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+8 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+9 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+10 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+11 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+12 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+13 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+14 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+15 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+16 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+17 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+18 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+19 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+20 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+21 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+22 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+23 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+24 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+25 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+26 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+27 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+28 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+29 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+30 + UF_FLAG_PRIVATE, // PLAYER_FIELD_PACK_SLOT_1+31 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+2 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+3 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+4 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+5 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+6 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+7 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+8 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+9 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+10 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+11 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+12 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+13 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+14 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+15 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+16 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+17 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+18 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+19 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+20 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+21 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+22 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+23 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+24 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+25 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+26 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+27 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+28 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+29 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+30 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+31 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+32 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+33 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+34 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+35 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+36 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+37 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+38 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+39 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+40 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+41 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+42 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+43 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+44 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+45 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+46 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+47 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+48 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+49 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+50 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+51 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+52 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+53 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+54 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_SLOT_1+55 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANKBAG_SLOT_1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANKBAG_SLOT_1+1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANKBAG_SLOT_1+2 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANKBAG_SLOT_1+3 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANKBAG_SLOT_1+4 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANKBAG_SLOT_1+5 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANKBAG_SLOT_1+6 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANKBAG_SLOT_1+7 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANKBAG_SLOT_1+8 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANKBAG_SLOT_1+9 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANKBAG_SLOT_1+10 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANKBAG_SLOT_1+11 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANKBAG_SLOT_1+12 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BANKBAG_SLOT_1+13 + UF_FLAG_PRIVATE, // PLAYER_FIELD_VENDORBUYBACK_SLOT_1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_VENDORBUYBACK_SLOT_1+1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_VENDORBUYBACK_SLOT_1+2 + UF_FLAG_PRIVATE, // PLAYER_FIELD_VENDORBUYBACK_SLOT_1+3 + UF_FLAG_PRIVATE, // PLAYER_FIELD_VENDORBUYBACK_SLOT_1+4 + UF_FLAG_PRIVATE, // PLAYER_FIELD_VENDORBUYBACK_SLOT_1+5 + UF_FLAG_PRIVATE, // PLAYER_FIELD_VENDORBUYBACK_SLOT_1+6 + UF_FLAG_PRIVATE, // PLAYER_FIELD_VENDORBUYBACK_SLOT_1+7 + UF_FLAG_PRIVATE, // PLAYER_FIELD_VENDORBUYBACK_SLOT_1+8 + UF_FLAG_PRIVATE, // PLAYER_FIELD_VENDORBUYBACK_SLOT_1+9 + UF_FLAG_PRIVATE, // PLAYER_FIELD_VENDORBUYBACK_SLOT_1+10 + UF_FLAG_PRIVATE, // PLAYER_FIELD_VENDORBUYBACK_SLOT_1+11 + UF_FLAG_PRIVATE, // PLAYER_FIELD_VENDORBUYBACK_SLOT_1+12 + UF_FLAG_PRIVATE, // PLAYER_FIELD_VENDORBUYBACK_SLOT_1+13 + UF_FLAG_PRIVATE, // PLAYER_FIELD_VENDORBUYBACK_SLOT_1+14 + UF_FLAG_PRIVATE, // PLAYER_FIELD_VENDORBUYBACK_SLOT_1+15 + UF_FLAG_PRIVATE, // PLAYER_FIELD_VENDORBUYBACK_SLOT_1+16 + UF_FLAG_PRIVATE, // PLAYER_FIELD_VENDORBUYBACK_SLOT_1+17 + UF_FLAG_PRIVATE, // PLAYER_FIELD_VENDORBUYBACK_SLOT_1+18 + UF_FLAG_PRIVATE, // PLAYER_FIELD_VENDORBUYBACK_SLOT_1+19 + UF_FLAG_PRIVATE, // PLAYER_FIELD_VENDORBUYBACK_SLOT_1+20 + UF_FLAG_PRIVATE, // PLAYER_FIELD_VENDORBUYBACK_SLOT_1+21 + UF_FLAG_PRIVATE, // PLAYER_FIELD_VENDORBUYBACK_SLOT_1+22 + UF_FLAG_PRIVATE, // PLAYER_FIELD_VENDORBUYBACK_SLOT_1+23 + UF_FLAG_PRIVATE, // PLAYER_FARSIGHT + UF_FLAG_PRIVATE, // PLAYER_FARSIGHT+1 + UF_FLAG_PRIVATE, // PLAYER__FIELD_KNOWN_TITLES + UF_FLAG_PRIVATE, // PLAYER__FIELD_KNOWN_TITLES+1 + UF_FLAG_PRIVATE, // PLAYER__FIELD_KNOWN_TITLES1 + UF_FLAG_PRIVATE, // PLAYER__FIELD_KNOWN_TITLES1+1 + UF_FLAG_PRIVATE, // PLAYER__FIELD_KNOWN_TITLES2 + UF_FLAG_PRIVATE, // PLAYER__FIELD_KNOWN_TITLES2+1 + UF_FLAG_PRIVATE, // PLAYER__FIELD_KNOWN_TITLES3 + UF_FLAG_PRIVATE, // PLAYER__FIELD_KNOWN_TITLES3+1 + UF_FLAG_PRIVATE, // PLAYER_XP + UF_FLAG_PRIVATE, // PLAYER_NEXT_LEVEL_XP + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+1 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+2 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+3 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+4 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+5 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+6 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+7 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+8 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+9 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+10 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+11 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+12 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+13 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+14 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+15 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+16 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+17 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+18 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+19 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+20 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+21 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+22 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+23 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+24 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+25 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+26 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+27 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+28 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+29 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+30 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+31 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+32 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+33 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+34 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+35 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+36 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+37 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+38 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+39 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+40 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+41 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+42 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+43 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+44 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+45 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+46 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+47 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+48 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+49 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+50 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+51 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+52 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+53 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+54 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+55 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+56 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+57 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+58 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+59 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+60 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+61 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+62 + UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID_0+63 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+1 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+2 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+3 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+4 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+5 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+6 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+7 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+8 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+9 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+10 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+11 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+12 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+13 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+14 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+15 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+16 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+17 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+18 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+19 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+20 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+21 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+22 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+23 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+24 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+25 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+26 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+27 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+28 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+29 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+30 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+31 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+32 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+33 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+34 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+35 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+36 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+37 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+38 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+39 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+40 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+41 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+42 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+43 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+44 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+45 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+46 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+47 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+48 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+49 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+50 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+51 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+52 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+53 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+54 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+55 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+56 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+57 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+58 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+59 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+60 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+61 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+62 + UF_FLAG_PRIVATE, // PLAYER_SKILL_STEP_0+63 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+1 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+2 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+3 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+4 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+5 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+6 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+7 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+8 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+9 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+10 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+11 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+12 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+13 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+14 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+15 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+16 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+17 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+18 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+19 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+20 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+21 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+22 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+23 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+24 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+25 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+26 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+27 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+28 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+29 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+30 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+31 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+32 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+33 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+34 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+35 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+36 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+37 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+38 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+39 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+40 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+41 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+42 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+43 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+44 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+45 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+46 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+47 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+48 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+49 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+50 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+51 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+52 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+53 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+54 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+55 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+56 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+57 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+58 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+59 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+60 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+61 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+62 + UF_FLAG_PRIVATE, // PLAYER_SKILL_RANK_0+63 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+1 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+2 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+3 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+4 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+5 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+6 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+7 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+8 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+9 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+10 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+11 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+12 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+13 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+14 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+15 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+16 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+17 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+18 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+19 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+20 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+21 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+22 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+23 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+24 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+25 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+26 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+27 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+28 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+29 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+30 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+31 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+32 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+33 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+34 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+35 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+36 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+37 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+38 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+39 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+40 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+41 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+42 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+43 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+44 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+45 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+46 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+47 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+48 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+49 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+50 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+51 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+52 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+53 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+54 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+55 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+56 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+57 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+58 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+59 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+60 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+61 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+62 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MAX_RANK_0+63 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+1 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+2 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+3 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+4 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+5 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+6 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+7 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+8 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+9 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+10 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+11 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+12 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+13 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+14 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+15 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+16 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+17 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+18 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+19 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+20 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+21 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+22 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+23 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+24 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+25 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+26 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+27 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+28 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+29 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+30 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+31 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+32 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+33 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+34 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+35 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+36 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+37 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+38 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+39 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+40 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+41 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+42 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+43 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+44 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+45 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+46 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+47 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+48 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+49 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+50 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+51 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+52 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+53 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+54 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+55 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+56 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+57 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+58 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+59 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+60 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+61 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+62 + UF_FLAG_PRIVATE, // PLAYER_SKILL_MODIFIER_0+63 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+1 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+2 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+3 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+4 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+5 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+6 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+7 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+8 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+9 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+10 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+11 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+12 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+13 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+14 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+15 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+16 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+17 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+18 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+19 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+20 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+21 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+22 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+23 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+24 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+25 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+26 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+27 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+28 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+29 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+30 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+31 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+32 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+33 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+34 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+35 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+36 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+37 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+38 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+39 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+40 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+41 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+42 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+43 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+44 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+45 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+46 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+47 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+48 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+49 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+50 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+51 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+52 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+53 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+54 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+55 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+56 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+57 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+58 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+59 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+60 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+61 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+62 + UF_FLAG_PRIVATE, // PLAYER_SKILL_TALENT_0+63 + UF_FLAG_PRIVATE, // PLAYER_CHARACTER_POINTS + UF_FLAG_PRIVATE, // PLAYER_TRACK_CREATURES + UF_FLAG_PRIVATE, // PLAYER_TRACK_RESOURCES + UF_FLAG_PRIVATE, // PLAYER_EXPERTISE + UF_FLAG_PRIVATE, // PLAYER_OFFHAND_EXPERTISE + UF_FLAG_PRIVATE, // PLAYER_BLOCK_PERCENTAGE + UF_FLAG_PRIVATE, // PLAYER_DODGE_PERCENTAGE + UF_FLAG_PRIVATE, // PLAYER_PARRY_PERCENTAGE + UF_FLAG_PRIVATE, // PLAYER_CRIT_PERCENTAGE + UF_FLAG_PRIVATE, // PLAYER_RANGED_CRIT_PERCENTAGE + UF_FLAG_PRIVATE, // PLAYER_OFFHAND_CRIT_PERCENTAGE + UF_FLAG_PRIVATE, // PLAYER_SPELL_CRIT_PERCENTAGE1 + UF_FLAG_PRIVATE, // PLAYER_SPELL_CRIT_PERCENTAGE1+1 + UF_FLAG_PRIVATE, // PLAYER_SPELL_CRIT_PERCENTAGE1+2 + UF_FLAG_PRIVATE, // PLAYER_SPELL_CRIT_PERCENTAGE1+3 + UF_FLAG_PRIVATE, // PLAYER_SPELL_CRIT_PERCENTAGE1+4 + UF_FLAG_PRIVATE, // PLAYER_SPELL_CRIT_PERCENTAGE1+5 + UF_FLAG_PRIVATE, // PLAYER_SPELL_CRIT_PERCENTAGE1+6 + UF_FLAG_PRIVATE, // PLAYER_SHIELD_BLOCK + UF_FLAG_PRIVATE, // PLAYER_SHIELD_BLOCK_CRIT_PERCENTAGE + UF_FLAG_PRIVATE, // PLAYER_MASTERY + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+1 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+2 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+3 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+4 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+5 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+6 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+7 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+8 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+9 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+10 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+11 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+12 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+13 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+14 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+15 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+16 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+17 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+18 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+19 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+20 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+21 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+22 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+23 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+24 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+25 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+26 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+27 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+28 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+29 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+30 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+31 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+32 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+33 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+34 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+35 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+36 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+37 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+38 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+39 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+40 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+41 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+42 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+43 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+44 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+45 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+46 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+47 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+48 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+49 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+50 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+51 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+52 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+53 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+54 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+55 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+56 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+57 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+58 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+59 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+60 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+61 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+62 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+63 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+64 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+65 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+66 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+67 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+68 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+69 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+70 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+71 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+72 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+73 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+74 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+75 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+76 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+77 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+78 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+79 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+80 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+81 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+82 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+83 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+84 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+85 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+86 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+87 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+88 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+89 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+90 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+91 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+92 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+93 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+94 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+95 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+96 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+97 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+98 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+99 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+100 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+101 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+102 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+103 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+104 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+105 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+106 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+107 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+108 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+109 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+110 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+111 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+112 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+113 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+114 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+115 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+116 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+117 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+118 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+119 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+120 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+121 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+122 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+123 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+124 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+125 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+126 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+127 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+128 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+129 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+130 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+131 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+132 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+133 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+134 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+135 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+136 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+137 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+138 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+139 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+140 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+141 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+142 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+143 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+144 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+145 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+146 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+147 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+148 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+149 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+150 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+151 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+152 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+153 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+154 + UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+155 + UF_FLAG_PRIVATE, // PLAYER_REST_STATE_EXPERIENCE + UF_FLAG_PRIVATE, // PLAYER_FIELD_COINAGE + UF_FLAG_PRIVATE, // PLAYER_FIELD_COINAGE+1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_POS + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_POS+1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_POS+2 + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_POS+3 + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_POS+4 + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_POS+5 + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_POS+6 + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+2 + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+3 + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+4 + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+5 + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+6 + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_PCT + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_PCT+1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_PCT+2 + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_PCT+3 + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_PCT+4 + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_PCT+5 + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_PCT+6 + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_HEALING_DONE_POS + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_HEALING_PCT + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_HEALING_DONE_PCT + UF_FLAG_PRIVATE, // PLAYER_FIELD_WEAPON_DMG_MULTIPLIERS + UF_FLAG_PRIVATE, // PLAYER_FIELD_WEAPON_DMG_MULTIPLIERS+1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_WEAPON_DMG_MULTIPLIERS+2 + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_SPELL_POWER_PCT + UF_FLAG_PRIVATE, // PLAYER_FIELD_OVERRIDE_SPELL_POWER_BY_AP_PCT + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_TARGET_RESISTANCE + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE + UF_FLAG_PRIVATE, // PLAYER_FIELD_BYTES + UF_FLAG_PRIVATE, // PLAYER_SELF_RES_SPELL + UF_FLAG_PRIVATE, // PLAYER_FIELD_PVP_MEDALS + UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1+1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1+2 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1+3 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1+4 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1+5 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1+6 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1+7 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1+8 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1+9 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1+10 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1+11 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_TIMESTAMP_1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_TIMESTAMP_1+1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_TIMESTAMP_1+2 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_TIMESTAMP_1+3 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_TIMESTAMP_1+4 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_TIMESTAMP_1+5 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_TIMESTAMP_1+6 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_TIMESTAMP_1+7 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_TIMESTAMP_1+8 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_TIMESTAMP_1+9 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_TIMESTAMP_1+10 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_TIMESTAMP_1+11 + UF_FLAG_PRIVATE, // PLAYER_FIELD_KILLS + UF_FLAG_PRIVATE, // PLAYER_FIELD_LIFETIME_HONORBALE_KILLS + UF_FLAG_PRIVATE, // PLAYER_FIELD_BYTES2 + UF_FLAG_PRIVATE, // PLAYER_FIELD_WATCHED_FACTION_INDEX + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+2 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+3 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+4 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+5 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+6 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+7 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+8 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+9 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+10 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+11 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+12 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+13 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+14 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+15 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+16 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+17 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+18 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+19 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+20 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+21 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+22 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+23 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+24 + UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+25 + UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+2 + UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+3 + UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+4 + UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+5 + UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+6 + UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+7 + UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+8 + UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+9 + UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+10 + UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+11 + UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+12 + UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+13 + UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+14 + UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+15 + UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+16 + UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+17 + UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+18 + UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+19 + UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+20 + UF_FLAG_PRIVATE, // PLAYER_FIELD_BATTLEGROUND_RATING + UF_FLAG_PRIVATE, // PLAYER_FIELD_MAX_LEVEL + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1+1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1+2 + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1+3 + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1+4 + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1+5 + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1+6 + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1+7 + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1+8 + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1+9 + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1+10 + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1+11 + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1+12 + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1+13 + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1+14 + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1+15 + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1+16 + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1+17 + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1+18 + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1+19 + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1+20 + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1+21 + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1+22 + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1+23 + UF_FLAG_PRIVATE, // PLAYER_FIELD_DAILY_QUESTS_1+24 + UF_FLAG_PRIVATE, // PLAYER_RUNE_REGEN_1 + UF_FLAG_PRIVATE, // PLAYER_RUNE_REGEN_1+1 + UF_FLAG_PRIVATE, // PLAYER_RUNE_REGEN_1+2 + UF_FLAG_PRIVATE, // PLAYER_RUNE_REGEN_1+3 + UF_FLAG_PRIVATE, // PLAYER_NO_REAGENT_COST_1 + UF_FLAG_PRIVATE, // PLAYER_NO_REAGENT_COST_1+1 + UF_FLAG_PRIVATE, // PLAYER_NO_REAGENT_COST_1+2 + UF_FLAG_PRIVATE, // PLAYER_FIELD_GLYPH_SLOTS_1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_GLYPH_SLOTS_1+1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_GLYPH_SLOTS_1+2 + UF_FLAG_PRIVATE, // PLAYER_FIELD_GLYPH_SLOTS_1+3 + UF_FLAG_PRIVATE, // PLAYER_FIELD_GLYPH_SLOTS_1+4 + UF_FLAG_PRIVATE, // PLAYER_FIELD_GLYPH_SLOTS_1+5 + UF_FLAG_PRIVATE, // PLAYER_FIELD_GLYPH_SLOTS_1+6 + UF_FLAG_PRIVATE, // PLAYER_FIELD_GLYPH_SLOTS_1+7 + UF_FLAG_PRIVATE, // PLAYER_FIELD_GLYPH_SLOTS_1+8 + UF_FLAG_PRIVATE, // PLAYER_FIELD_GLYPHS_1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_GLYPHS_1+1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_GLYPHS_1+2 + UF_FLAG_PRIVATE, // PLAYER_FIELD_GLYPHS_1+3 + UF_FLAG_PRIVATE, // PLAYER_FIELD_GLYPHS_1+4 + UF_FLAG_PRIVATE, // PLAYER_FIELD_GLYPHS_1+5 + UF_FLAG_PRIVATE, // PLAYER_FIELD_GLYPHS_1+6 + UF_FLAG_PRIVATE, // PLAYER_FIELD_GLYPHS_1+7 + UF_FLAG_PRIVATE, // PLAYER_FIELD_GLYPHS_1+8 + UF_FLAG_PRIVATE, // PLAYER_GLYPHS_ENABLED + UF_FLAG_PRIVATE, // PLAYER_PET_SPELL_POWER + UF_FLAG_PRIVATE, // PLAYER_FIELD_RESEARCHING_1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_RESEARCHING_1+1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_RESEARCHING_1+2 + UF_FLAG_PRIVATE, // PLAYER_FIELD_RESEARCHING_1+3 + UF_FLAG_PRIVATE, // PLAYER_FIELD_RESEARCHING_1+4 + UF_FLAG_PRIVATE, // PLAYER_FIELD_RESEARCHING_1+5 + UF_FLAG_PRIVATE, // PLAYER_FIELD_RESEARCHING_1+6 + UF_FLAG_PRIVATE, // PLAYER_FIELD_RESEARCHING_1+7 + UF_FLAG_PRIVATE, // PLAYER_FIELD_RESERACH_SITE_1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_RESERACH_SITE_1+1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_RESERACH_SITE_1+2 + UF_FLAG_PRIVATE, // PLAYER_FIELD_RESERACH_SITE_1+3 + UF_FLAG_PRIVATE, // PLAYER_FIELD_RESERACH_SITE_1+4 + UF_FLAG_PRIVATE, // PLAYER_FIELD_RESERACH_SITE_1+5 + UF_FLAG_PRIVATE, // PLAYER_FIELD_RESERACH_SITE_1+6 + UF_FLAG_PRIVATE, // PLAYER_FIELD_RESERACH_SITE_1+7 + UF_FLAG_PRIVATE, // PLAYER_PROFESSION_SKILL_LINE_1 + UF_FLAG_PRIVATE, // PLAYER_PROFESSION_SKILL_LINE_1+1 + UF_FLAG_PRIVATE, // PLAYER_FIELD_UI_HIT_MODIFIER + UF_FLAG_PRIVATE, // PLAYER_FIELD_UI_SPELL_HIT_MODIFIER + UF_FLAG_PRIVATE, // PLAYER_FIELD_HOME_REALM_TIME_OFFSET + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_HASTE + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_RANGED_HASTE + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_PET_HASTE + UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_HASTE_REGEN +}; + +uint32 GameObjectUpdateFieldFlags[GAMEOBJECT_END] = +{ + UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID + UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1 + UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA + UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+1 + UF_FLAG_PUBLIC, // OBJECT_FIELD_TYPE + UF_FLAG_PUBLIC, // OBJECT_FIELD_ENTRY + UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X + UF_FLAG_NONE, // OBJECT_FIELD_PADDING + UF_FLAG_PUBLIC, // OBJECT_FIELD_CREATED_BY + UF_FLAG_PUBLIC, // OBJECT_FIELD_CREATED_BY+1 + UF_FLAG_PUBLIC, // GAMEOBJECT_DISPLAYID + UF_FLAG_PUBLIC, // GAMEOBJECT_FLAGS + UF_FLAG_PUBLIC, // GAMEOBJECT_PARENTROTATION + UF_FLAG_PUBLIC, // GAMEOBJECT_PARENTROTATION+1 + UF_FLAG_PUBLIC, // GAMEOBJECT_PARENTROTATION+2 + UF_FLAG_PUBLIC, // GAMEOBJECT_PARENTROTATION+3 + UF_FLAG_DYNAMIC, // GAMEOBJECT_DYNAMIC + UF_FLAG_PUBLIC, // GAMEOBJECT_FACTION + UF_FLAG_PUBLIC, // GAMEOBJECT_LEVEL + UF_FLAG_PUBLIC, // GAMEOBJECT_BYTES_1 +}; + +uint32 DynamicObjectUpdateFieldFlags[DYNAMICOBJECT_END] = +{ + UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID + UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1 + UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA + UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+1 + UF_FLAG_PUBLIC, // OBJECT_FIELD_TYPE + UF_FLAG_PUBLIC, // OBJECT_FIELD_ENTRY + UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X + UF_FLAG_NONE, // OBJECT_FIELD_PADDING + UF_FLAG_PUBLIC, // DYNAMICOBJECT_CASTER + UF_FLAG_PUBLIC, // DYNAMICOBJECT_CASTER+1 + UF_FLAG_DYNAMIC, // DYNAMICOBJECT_BYTES + UF_FLAG_PUBLIC, // DYNAMICOBJECT_SPELLID + UF_FLAG_PUBLIC, // DYNAMICOBJECT_RADIUS + UF_FLAG_PUBLIC, // DYNAMICOBJECT_CASTTIME +}; + +uint32 CorpseUpdateFieldFlags[CORPSE_END] = +{ + UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID + UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1 + UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA + UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+1 + UF_FLAG_PUBLIC, // OBJECT_FIELD_TYPE + UF_FLAG_PUBLIC, // OBJECT_FIELD_ENTRY + UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X + UF_FLAG_NONE, // OBJECT_FIELD_PADDING + UF_FLAG_PUBLIC, // CORPSE_FIELD_OWNER + UF_FLAG_PUBLIC, // CORPSE_FIELD_OWNER+1 + UF_FLAG_PUBLIC, // CORPSE_FIELD_PARTY + UF_FLAG_PUBLIC, // CORPSE_FIELD_PARTY+1 + UF_FLAG_PUBLIC, // CORPSE_FIELD_DISPLAY_ID + UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM + UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+1 + UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+2 + UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+3 + UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+4 + UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+5 + UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+6 + UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+7 + UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+8 + UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+9 + UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+10 + UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+11 + UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+12 + UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+13 + UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+14 + UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+15 + UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+16 + UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+17 + UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+18 + UF_FLAG_PUBLIC, // CORPSE_FIELD_BYTES_1 + UF_FLAG_PUBLIC, // CORPSE_FIELD_BYTES_2 + UF_FLAG_PUBLIC, // CORPSE_FIELD_FLAGS + UF_FLAG_DYNAMIC, // CORPSE_FIELD_DYNAMIC_FLAGS +}; + +uint32 AreaTriggerUpdateFieldFlags[AREATRIGGER_END] = +{ + UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID + UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1 + UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA + UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+1 + UF_FLAG_PUBLIC, // OBJECT_FIELD_TYPE + UF_FLAG_PUBLIC, // OBJECT_FIELD_ENTRY + UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X + UF_FLAG_NONE, // OBJECT_FIELD_PADDING + UF_FLAG_PUBLIC, // AREATRIGGER_SPELLID + UF_FLAG_PUBLIC, // AREATRIGGER_SPELLVISUALID + UF_FLAG_PUBLIC, // AREATRIGGER_DURATION + UF_FLAG_PUBLIC, // AREATRIGGER_FINAL_POS + UF_FLAG_PUBLIC, // AREATRIGGER_FINAL_POS+1 + UF_FLAG_PUBLIC, // AREATRIGGER_FINAL_POS+2 +}; diff --git a/src/server/game/Entities/Object/Updates/UpdateFieldFlags.h b/src/server/game/Entities/Object/Updates/UpdateFieldFlags.h new file mode 100644 index 00000000000..5a4186c9894 --- /dev/null +++ b/src/server/game/Entities/Object/Updates/UpdateFieldFlags.h @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef _UPDATEFIELDFLAGS_H +#define _UPDATEFIELDFLAGS_H + +#include "UpdateFields.h" +#include "Define.h" + +enum UpdatefieldFlags +{ + UF_FLAG_NONE = 0x000, + UF_FLAG_PUBLIC = 0x001, + UF_FLAG_PRIVATE = 0x002, + UF_FLAG_OWNER = 0x004, + UF_FLAG_UNUSED1 = 0x008, + UF_FLAG_ITEM_OWNER = 0x010, + UF_FLAG_SPECIAL_INFO = 0x020, + UF_FLAG_PARTY_MEMBER = 0x040, + UF_FLAG_UNUSED2 = 0x080, + UF_FLAG_DYNAMIC = 0x100, +}; + +extern uint32 ItemUpdateFieldFlags[CONTAINER_END]; +extern uint32 UnitUpdateFieldFlags[PLAYER_END]; +extern uint32 GameObjectUpdateFieldFlags[GAMEOBJECT_END]; +extern uint32 DynamicObjectUpdateFieldFlags[DYNAMICOBJECT_END]; +extern uint32 CorpseUpdateFieldFlags[CORPSE_END]; +extern uint32 AreaTriggerUpdateFieldFlags[AREATRIGGER_END]; + +#endif // _UPDATEFIELDFLAGS_H diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index 399895860ff..023ccfd44d1 100755 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -38,9 +38,9 @@ enum EItemFields ITEM_FIELD_CONTAINED = OBJECT_END + 0x0002, // Size: 2, Type: LONG, Flags: PUBLIC ITEM_FIELD_CREATOR = OBJECT_END + 0x0004, // Size: 2, Type: LONG, Flags: PUBLIC ITEM_FIELD_GIFTCREATOR = OBJECT_END + 0x0006, // Size: 2, Type: LONG, Flags: PUBLIC - ITEM_FIELD_STACK_COUNT = OBJECT_END + 0x0008, // Size: 1, Type: INT, Flags: OWNER, UNUSED1 - ITEM_FIELD_DURATION = OBJECT_END + 0x0009, // Size: 1, Type: INT, Flags: OWNER, UNUSED1 - ITEM_FIELD_SPELL_CHARGES = OBJECT_END + 0x000A, // Size: 5, Type: INT, Flags: OWNER, UNUSED1 + ITEM_FIELD_STACK_COUNT = OBJECT_END + 0x0008, // Size: 1, Type: INT, Flags: OWNER, ITEM_OWNER + ITEM_FIELD_DURATION = OBJECT_END + 0x0009, // Size: 1, Type: INT, Flags: OWNER, ITEM_OWNER + ITEM_FIELD_SPELL_CHARGES = OBJECT_END + 0x000A, // Size: 5, Type: INT, Flags: OWNER, ITEM_OWNER ITEM_FIELD_FLAGS = OBJECT_END + 0x000F, // Size: 1, Type: INT, Flags: PUBLIC ITEM_FIELD_ENCHANTMENT_1_1 = OBJECT_END + 0x0010, // Size: 2, Type: INT, Flags: PUBLIC ITEM_FIELD_ENCHANTMENT_1_3 = OBJECT_END + 0x0012, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC @@ -74,8 +74,8 @@ enum EItemFields ITEM_FIELD_ENCHANTMENT_15_3 = OBJECT_END + 0x003C, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC ITEM_FIELD_PROPERTY_SEED = OBJECT_END + 0x003D, // Size: 1, Type: INT, Flags: PUBLIC ITEM_FIELD_RANDOM_PROPERTIES_ID = OBJECT_END + 0x003E, // Size: 1, Type: INT, Flags: PUBLIC - ITEM_FIELD_DURABILITY = OBJECT_END + 0x003F, // Size: 1, Type: INT, Flags: OWNER, UNUSED1 - ITEM_FIELD_MAXDURABILITY = OBJECT_END + 0x0040, // Size: 1, Type: INT, Flags: OWNER, UNUSED1 + ITEM_FIELD_DURABILITY = OBJECT_END + 0x003F, // Size: 1, Type: INT, Flags: OWNER, ITEM_OWNER + ITEM_FIELD_MAXDURABILITY = OBJECT_END + 0x0040, // Size: 1, Type: INT, Flags: OWNER, ITEM_OWNER ITEM_FIELD_CREATE_PLAYED_TIME = OBJECT_END + 0x0041, // Size: 1, Type: INT, Flags: PUBLIC ITEM_END = OBJECT_END + 0x0042, }; @@ -112,8 +112,8 @@ enum EUnitFields UNIT_FIELD_MAXPOWER3 = OBJECT_END + 0x001B, // Size: 1, Type: INT, Flags: PUBLIC UNIT_FIELD_MAXPOWER4 = OBJECT_END + 0x001C, // Size: 1, Type: INT, Flags: PUBLIC UNIT_FIELD_MAXPOWER5 = OBJECT_END + 0x001D, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER = OBJECT_END + 0x001E, // Size: 5, Type: FLOAT, Flags: PRIVATE, OWNER, PARTY_MEMBER - UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER = OBJECT_END + 0x0023, // Size: 5, Type: FLOAT, Flags: PRIVATE, OWNER, PARTY_MEMBER + UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER = OBJECT_END + 0x001E, // Size: 5, Type: FLOAT, Flags: PRIVATE, OWNER, UNUSED2 + UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER = OBJECT_END + 0x0023, // Size: 5, Type: FLOAT, Flags: PRIVATE, OWNER, UNUSED2 UNIT_FIELD_LEVEL = OBJECT_END + 0x0028, // Size: 1, Type: INT, Flags: PUBLIC UNIT_FIELD_FACTIONTEMPLATE = OBJECT_END + 0x0029, // Size: 1, Type: INT, Flags: PUBLIC UNIT_VIRTUAL_ITEM_SLOT_ID = OBJECT_END + 0x002A, // Size: 3, Type: INT, Flags: PUBLIC @@ -124,23 +124,23 @@ enum EUnitFields UNIT_FIELD_RANGEDATTACKTIME = OBJECT_END + 0x0032, // Size: 1, Type: INT, Flags: PRIVATE UNIT_FIELD_BOUNDINGRADIUS = OBJECT_END + 0x0033, // Size: 1, Type: FLOAT, Flags: PUBLIC UNIT_FIELD_COMBATREACH = OBJECT_END + 0x0034, // Size: 1, Type: FLOAT, Flags: PUBLIC - UNIT_FIELD_DISPLAYID = OBJECT_END + 0x0035, // Size: 1, Type: INT, Flags: UNUSED2 + UNIT_FIELD_DISPLAYID = OBJECT_END + 0x0035, // Size: 1, Type: INT, Flags: DYNAMIC UNIT_FIELD_NATIVEDISPLAYID = OBJECT_END + 0x0036, // Size: 1, Type: INT, Flags: PUBLIC UNIT_FIELD_MOUNTDISPLAYID = OBJECT_END + 0x0037, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_FIELD_MINDAMAGE = OBJECT_END + 0x0038, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, ITEM_OWNER - UNIT_FIELD_MAXDAMAGE = OBJECT_END + 0x0039, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, ITEM_OWNER - UNIT_FIELD_MINOFFHANDDAMAGE = OBJECT_END + 0x003A, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, ITEM_OWNER - UNIT_FIELD_MAXOFFHANDDAMAGE = OBJECT_END + 0x003B, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, ITEM_OWNER + UNIT_FIELD_MINDAMAGE = OBJECT_END + 0x0038, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, SPECIAL_INFO + UNIT_FIELD_MAXDAMAGE = OBJECT_END + 0x0039, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, SPECIAL_INFO + UNIT_FIELD_MINOFFHANDDAMAGE = OBJECT_END + 0x003A, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, SPECIAL_INFO + UNIT_FIELD_MAXOFFHANDDAMAGE = OBJECT_END + 0x003B, // Size: 1, Type: FLOAT, Flags: PRIVATE, OWNER, SPECIAL_INFO UNIT_FIELD_BYTES_1 = OBJECT_END + 0x003C, // Size: 1, Type: BYTES, Flags: PUBLIC UNIT_FIELD_PETNUMBER = OBJECT_END + 0x003D, // Size: 1, Type: INT, Flags: PUBLIC UNIT_FIELD_PET_NAME_TIMESTAMP = OBJECT_END + 0x003E, // Size: 1, Type: INT, Flags: PUBLIC UNIT_FIELD_PETEXPERIENCE = OBJECT_END + 0x003F, // Size: 1, Type: INT, Flags: OWNER UNIT_FIELD_PETNEXTLEVELEXP = OBJECT_END + 0x0040, // Size: 1, Type: INT, Flags: OWNER - UNIT_DYNAMIC_FLAGS = OBJECT_END + 0x0041, // Size: 1, Type: INT, Flags: UNUSED2 + UNIT_DYNAMIC_FLAGS = OBJECT_END + 0x0041, // Size: 1, Type: INT, Flags: DYNAMIC UNIT_MOD_CAST_SPEED = OBJECT_END + 0x0042, // Size: 1, Type: FLOAT, Flags: PUBLIC UNIT_MOD_CAST_HASTE = OBJECT_END + 0x0043, // Size: 1, Type: FLOAT, Flags: PUBLIC UNIT_CREATED_BY_SPELL = OBJECT_END + 0x0044, // Size: 1, Type: INT, Flags: PUBLIC - UNIT_NPC_FLAGS = OBJECT_END + 0x0045, // Size: 1, Type: INT, Flags: UNUSED2 + UNIT_NPC_FLAGS = OBJECT_END + 0x0045, // Size: 1, Type: INT, Flags: DYNAMIC UNIT_NPC_EMOTESTATE = OBJECT_END + 0x0046, // Size: 1, Type: INT, Flags: PUBLIC UNIT_FIELD_STAT0 = OBJECT_END + 0x0047, // Size: 1, Type: INT, Flags: PRIVATE, OWNER UNIT_FIELD_STAT1 = OBJECT_END + 0x0048, // Size: 1, Type: INT, Flags: PRIVATE, OWNER @@ -157,7 +157,7 @@ enum EUnitFields UNIT_FIELD_NEGSTAT2 = OBJECT_END + 0x0053, // Size: 1, Type: INT, Flags: PRIVATE, OWNER UNIT_FIELD_NEGSTAT3 = OBJECT_END + 0x0054, // Size: 1, Type: INT, Flags: PRIVATE, OWNER UNIT_FIELD_NEGSTAT4 = OBJECT_END + 0x0055, // Size: 1, Type: INT, Flags: PRIVATE, OWNER - UNIT_FIELD_RESISTANCES = OBJECT_END + 0x0056, // Size: 7, Type: INT, Flags: PRIVATE, OWNER, ITEM_OWNER + UNIT_FIELD_RESISTANCES = OBJECT_END + 0x0056, // Size: 7, Type: INT, Flags: PRIVATE, OWNER, SPECIAL_INFO UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE = OBJECT_END + 0x005D, // Size: 7, Type: INT, Flags: PRIVATE, OWNER UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE = OBJECT_END + 0x0064, // Size: 7, Type: INT, Flags: PRIVATE, OWNER UNIT_FIELD_BASE_MANA = OBJECT_END + 0x006B, // Size: 1, Type: INT, Flags: PUBLIC @@ -194,206 +194,206 @@ enum EPlayerFields PLAYER_BYTES_3 = UNIT_END + 0x0008, // Size: 1, Type: BYTES, Flags: PUBLIC PLAYER_DUEL_TEAM = UNIT_END + 0x0009, // Size: 1, Type: INT, Flags: PUBLIC PLAYER_GUILD_TIMESTAMP = UNIT_END + 0x000A, // Size: 1, Type: INT, Flags: PUBLIC - PLAYER_QUEST_LOG_1_1 = UNIT_END + 0x000B, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_1_2 = UNIT_END + 0x000C, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_1_3 = UNIT_END + 0x000D, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_1_4 = UNIT_END + 0x000F, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_2_1 = UNIT_END + 0x0010, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_2_2 = UNIT_END + 0x0011, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_2_3 = UNIT_END + 0x0012, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_2_5 = UNIT_END + 0x0014, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_3_1 = UNIT_END + 0x0015, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_3_2 = UNIT_END + 0x0016, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_3_3 = UNIT_END + 0x0017, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_3_5 = UNIT_END + 0x0019, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_4_1 = UNIT_END + 0x001A, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_4_2 = UNIT_END + 0x001B, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_4_3 = UNIT_END + 0x001C, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_4_5 = UNIT_END + 0x001E, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_5_1 = UNIT_END + 0x001F, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_5_2 = UNIT_END + 0x0020, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_5_3 = UNIT_END + 0x0021, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_5_5 = UNIT_END + 0x0023, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_6_1 = UNIT_END + 0x0024, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_6_2 = UNIT_END + 0x0025, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_6_3 = UNIT_END + 0x0026, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_6_5 = UNIT_END + 0x0028, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_7_1 = UNIT_END + 0x0029, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_7_2 = UNIT_END + 0x002A, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_7_3 = UNIT_END + 0x002B, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_7_5 = UNIT_END + 0x002D, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_8_1 = UNIT_END + 0x002E, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_8_2 = UNIT_END + 0x002F, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_8_3 = UNIT_END + 0x0030, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_8_5 = UNIT_END + 0x0032, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_9_1 = UNIT_END + 0x0033, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_9_2 = UNIT_END + 0x0034, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_9_3 = UNIT_END + 0x0035, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_9_5 = UNIT_END + 0x0037, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_10_1 = UNIT_END + 0x0038, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_10_2 = UNIT_END + 0x0039, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_10_3 = UNIT_END + 0x003A, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_10_5 = UNIT_END + 0x003C, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_11_1 = UNIT_END + 0x003D, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_11_2 = UNIT_END + 0x003E, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_11_3 = UNIT_END + 0x003F, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_11_5 = UNIT_END + 0x0041, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_12_1 = UNIT_END + 0x0042, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_12_2 = UNIT_END + 0x0043, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_12_3 = UNIT_END + 0x0044, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_12_5 = UNIT_END + 0x0046, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_13_1 = UNIT_END + 0x0047, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_13_2 = UNIT_END + 0x0048, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_13_3 = UNIT_END + 0x0049, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_13_5 = UNIT_END + 0x004B, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_14_1 = UNIT_END + 0x004C, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_14_2 = UNIT_END + 0x004D, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_14_3 = UNIT_END + 0x004E, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_14_5 = UNIT_END + 0x0050, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_15_1 = UNIT_END + 0x0051, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_15_2 = UNIT_END + 0x0052, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_15_3 = UNIT_END + 0x0053, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_15_5 = UNIT_END + 0x0055, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_16_1 = UNIT_END + 0x0056, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_16_2 = UNIT_END + 0x0057, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_16_3 = UNIT_END + 0x0058, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_16_5 = UNIT_END + 0x005A, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_17_1 = UNIT_END + 0x005B, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_17_2 = UNIT_END + 0x005C, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_17_3 = UNIT_END + 0x005D, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_17_5 = UNIT_END + 0x005F, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_18_1 = UNIT_END + 0x0060, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_18_2 = UNIT_END + 0x0061, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_18_3 = UNIT_END + 0x0062, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_18_5 = UNIT_END + 0x0064, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_19_1 = UNIT_END + 0x0065, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_19_2 = UNIT_END + 0x0066, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_19_3 = UNIT_END + 0x0067, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_19_5 = UNIT_END + 0x0069, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_20_1 = UNIT_END + 0x006A, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_20_2 = UNIT_END + 0x006B, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_20_3 = UNIT_END + 0x006C, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_20_5 = UNIT_END + 0x006E, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_21_1 = UNIT_END + 0x006F, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_21_2 = UNIT_END + 0x0070, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_21_3 = UNIT_END + 0x0071, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_21_5 = UNIT_END + 0x0073, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_22_1 = UNIT_END + 0x0074, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_22_2 = UNIT_END + 0x0075, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_22_3 = UNIT_END + 0x0076, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_22_5 = UNIT_END + 0x0078, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_23_1 = UNIT_END + 0x0079, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_23_2 = UNIT_END + 0x007A, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_23_3 = UNIT_END + 0x007B, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_23_5 = UNIT_END + 0x007D, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_24_1 = UNIT_END + 0x007E, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_24_2 = UNIT_END + 0x007F, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_24_3 = UNIT_END + 0x0080, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_24_5 = UNIT_END + 0x0082, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_25_1 = UNIT_END + 0x0083, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_25_2 = UNIT_END + 0x0084, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_25_3 = UNIT_END + 0x0085, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_25_5 = UNIT_END + 0x0087, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_26_1 = UNIT_END + 0x0088, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_26_2 = UNIT_END + 0x0089, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_26_3 = UNIT_END + 0x008A, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_26_5 = UNIT_END + 0x008C, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_27_1 = UNIT_END + 0x008D, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_27_2 = UNIT_END + 0x008E, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_27_3 = UNIT_END + 0x008F, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_27_5 = UNIT_END + 0x0091, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_28_1 = UNIT_END + 0x0092, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_28_2 = UNIT_END + 0x0093, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_28_3 = UNIT_END + 0x0094, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_28_5 = UNIT_END + 0x0096, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_29_1 = UNIT_END + 0x0097, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_29_2 = UNIT_END + 0x0098, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_29_3 = UNIT_END + 0x0099, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_29_5 = UNIT_END + 0x009B, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_30_1 = UNIT_END + 0x009C, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_30_2 = UNIT_END + 0x009D, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_30_3 = UNIT_END + 0x009E, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_30_5 = UNIT_END + 0x00A0, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_31_1 = UNIT_END + 0x00A1, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_31_2 = UNIT_END + 0x00A2, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_31_3 = UNIT_END + 0x00A3, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_31_5 = UNIT_END + 0x00A5, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_32_1 = UNIT_END + 0x00A6, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_32_2 = UNIT_END + 0x00A7, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_32_3 = UNIT_END + 0x00A8, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_32_5 = UNIT_END + 0x00AA, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_33_1 = UNIT_END + 0x00AB, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_33_2 = UNIT_END + 0x00AC, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_33_3 = UNIT_END + 0x00AD, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_33_5 = UNIT_END + 0x00AF, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_34_1 = UNIT_END + 0x00B0, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_34_2 = UNIT_END + 0x00B1, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_34_3 = UNIT_END + 0x00B2, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_34_5 = UNIT_END + 0x00B4, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_35_1 = UNIT_END + 0x00B5, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_35_2 = UNIT_END + 0x00B6, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_35_3 = UNIT_END + 0x00B7, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_35_5 = UNIT_END + 0x00B9, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_36_1 = UNIT_END + 0x00BA, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_36_2 = UNIT_END + 0x00BB, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_36_3 = UNIT_END + 0x00BC, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_36_5 = UNIT_END + 0x00BE, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_37_1 = UNIT_END + 0x00BF, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_37_2 = UNIT_END + 0x00C0, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_37_3 = UNIT_END + 0x00C1, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_37_5 = UNIT_END + 0x00C3, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_38_1 = UNIT_END + 0x00C4, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_38_2 = UNIT_END + 0x00C5, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_38_3 = UNIT_END + 0x00C6, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_38_5 = UNIT_END + 0x00C8, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_39_1 = UNIT_END + 0x00C9, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_39_2 = UNIT_END + 0x00CA, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_39_3 = UNIT_END + 0x00CB, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_39_5 = UNIT_END + 0x00CD, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_40_1 = UNIT_END + 0x00CE, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_40_2 = UNIT_END + 0x00CF, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_40_3 = UNIT_END + 0x00D0, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_40_5 = UNIT_END + 0x00D2, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_41_1 = UNIT_END + 0x00D3, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_41_2 = UNIT_END + 0x00D4, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_41_3 = UNIT_END + 0x00D5, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_41_5 = UNIT_END + 0x00D7, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_42_1 = UNIT_END + 0x00D8, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_42_2 = UNIT_END + 0x00D9, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_42_3 = UNIT_END + 0x00DA, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_42_5 = UNIT_END + 0x00DC, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_43_1 = UNIT_END + 0x00DD, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_43_2 = UNIT_END + 0x00DE, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_43_3 = UNIT_END + 0x00DF, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_43_5 = UNIT_END + 0x00E1, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_44_1 = UNIT_END + 0x00E2, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_44_2 = UNIT_END + 0x00E3, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_44_3 = UNIT_END + 0x00E4, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_44_5 = UNIT_END + 0x00E6, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_45_1 = UNIT_END + 0x00E7, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_45_2 = UNIT_END + 0x00E8, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_45_3 = UNIT_END + 0x00E9, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_45_5 = UNIT_END + 0x00EB, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_46_1 = UNIT_END + 0x00EC, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_46_2 = UNIT_END + 0x00ED, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_46_3 = UNIT_END + 0x00EE, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_46_5 = UNIT_END + 0x00F0, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_47_1 = UNIT_END + 0x00F1, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_47_2 = UNIT_END + 0x00F2, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_47_3 = UNIT_END + 0x00F3, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_47_5 = UNIT_END + 0x00F5, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_48_1 = UNIT_END + 0x00F6, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_48_2 = UNIT_END + 0x00F7, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_48_3 = UNIT_END + 0x00F8, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_48_5 = UNIT_END + 0x00FA, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_49_1 = UNIT_END + 0x00FB, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_49_2 = UNIT_END + 0x00FC, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_49_3 = UNIT_END + 0x00FD, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_49_5 = UNIT_END + 0x00FF, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_50_1 = UNIT_END + 0x0100, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_50_2 = UNIT_END + 0x0101, // Size: 1, Type: INT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_50_3 = UNIT_END + 0x0102, // Size: 2, Type: TWO_SHORT, Flags: PARTY_LEADER - PLAYER_QUEST_LOG_50_5 = UNIT_END + 0x0104, // Size: 1, Type: INT, Flags: PARTY_LEADER + PLAYER_QUEST_LOG_1_1 = UNIT_END + 0x000B, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_1_2 = UNIT_END + 0x000C, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_1_3 = UNIT_END + 0x000D, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_1_4 = UNIT_END + 0x000F, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_2_1 = UNIT_END + 0x0010, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_2_2 = UNIT_END + 0x0011, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_2_3 = UNIT_END + 0x0012, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_2_5 = UNIT_END + 0x0014, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_3_1 = UNIT_END + 0x0015, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_3_2 = UNIT_END + 0x0016, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_3_3 = UNIT_END + 0x0017, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_3_5 = UNIT_END + 0x0019, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_4_1 = UNIT_END + 0x001A, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_4_2 = UNIT_END + 0x001B, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_4_3 = UNIT_END + 0x001C, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_4_5 = UNIT_END + 0x001E, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_5_1 = UNIT_END + 0x001F, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_5_2 = UNIT_END + 0x0020, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_5_3 = UNIT_END + 0x0021, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_5_5 = UNIT_END + 0x0023, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_6_1 = UNIT_END + 0x0024, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_6_2 = UNIT_END + 0x0025, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_6_3 = UNIT_END + 0x0026, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_6_5 = UNIT_END + 0x0028, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_7_1 = UNIT_END + 0x0029, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_7_2 = UNIT_END + 0x002A, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_7_3 = UNIT_END + 0x002B, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_7_5 = UNIT_END + 0x002D, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_8_1 = UNIT_END + 0x002E, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_8_2 = UNIT_END + 0x002F, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_8_3 = UNIT_END + 0x0030, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_8_5 = UNIT_END + 0x0032, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_9_1 = UNIT_END + 0x0033, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_9_2 = UNIT_END + 0x0034, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_9_3 = UNIT_END + 0x0035, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_9_5 = UNIT_END + 0x0037, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_10_1 = UNIT_END + 0x0038, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_10_2 = UNIT_END + 0x0039, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_10_3 = UNIT_END + 0x003A, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_10_5 = UNIT_END + 0x003C, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_11_1 = UNIT_END + 0x003D, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_11_2 = UNIT_END + 0x003E, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_11_3 = UNIT_END + 0x003F, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_11_5 = UNIT_END + 0x0041, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_12_1 = UNIT_END + 0x0042, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_12_2 = UNIT_END + 0x0043, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_12_3 = UNIT_END + 0x0044, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_12_5 = UNIT_END + 0x0046, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_13_1 = UNIT_END + 0x0047, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_13_2 = UNIT_END + 0x0048, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_13_3 = UNIT_END + 0x0049, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_13_5 = UNIT_END + 0x004B, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_14_1 = UNIT_END + 0x004C, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_14_2 = UNIT_END + 0x004D, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_14_3 = UNIT_END + 0x004E, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_14_5 = UNIT_END + 0x0050, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_15_1 = UNIT_END + 0x0051, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_15_2 = UNIT_END + 0x0052, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_15_3 = UNIT_END + 0x0053, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_15_5 = UNIT_END + 0x0055, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_16_1 = UNIT_END + 0x0056, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_16_2 = UNIT_END + 0x0057, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_16_3 = UNIT_END + 0x0058, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_16_5 = UNIT_END + 0x005A, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_17_1 = UNIT_END + 0x005B, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_17_2 = UNIT_END + 0x005C, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_17_3 = UNIT_END + 0x005D, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_17_5 = UNIT_END + 0x005F, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_18_1 = UNIT_END + 0x0060, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_18_2 = UNIT_END + 0x0061, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_18_3 = UNIT_END + 0x0062, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_18_5 = UNIT_END + 0x0064, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_19_1 = UNIT_END + 0x0065, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_19_2 = UNIT_END + 0x0066, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_19_3 = UNIT_END + 0x0067, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_19_5 = UNIT_END + 0x0069, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_20_1 = UNIT_END + 0x006A, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_20_2 = UNIT_END + 0x006B, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_20_3 = UNIT_END + 0x006C, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_20_5 = UNIT_END + 0x006E, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_21_1 = UNIT_END + 0x006F, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_21_2 = UNIT_END + 0x0070, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_21_3 = UNIT_END + 0x0071, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_21_5 = UNIT_END + 0x0073, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_22_1 = UNIT_END + 0x0074, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_22_2 = UNIT_END + 0x0075, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_22_3 = UNIT_END + 0x0076, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_22_5 = UNIT_END + 0x0078, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_23_1 = UNIT_END + 0x0079, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_23_2 = UNIT_END + 0x007A, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_23_3 = UNIT_END + 0x007B, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_23_5 = UNIT_END + 0x007D, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_24_1 = UNIT_END + 0x007E, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_24_2 = UNIT_END + 0x007F, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_24_3 = UNIT_END + 0x0080, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_24_5 = UNIT_END + 0x0082, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_25_1 = UNIT_END + 0x0083, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_25_2 = UNIT_END + 0x0084, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_25_3 = UNIT_END + 0x0085, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_25_5 = UNIT_END + 0x0087, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_26_1 = UNIT_END + 0x0088, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_26_2 = UNIT_END + 0x0089, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_26_3 = UNIT_END + 0x008A, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_26_5 = UNIT_END + 0x008C, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_27_1 = UNIT_END + 0x008D, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_27_2 = UNIT_END + 0x008E, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_27_3 = UNIT_END + 0x008F, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_27_5 = UNIT_END + 0x0091, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_28_1 = UNIT_END + 0x0092, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_28_2 = UNIT_END + 0x0093, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_28_3 = UNIT_END + 0x0094, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_28_5 = UNIT_END + 0x0096, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_29_1 = UNIT_END + 0x0097, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_29_2 = UNIT_END + 0x0098, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_29_3 = UNIT_END + 0x0099, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_29_5 = UNIT_END + 0x009B, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_30_1 = UNIT_END + 0x009C, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_30_2 = UNIT_END + 0x009D, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_30_3 = UNIT_END + 0x009E, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_30_5 = UNIT_END + 0x00A0, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_31_1 = UNIT_END + 0x00A1, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_31_2 = UNIT_END + 0x00A2, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_31_3 = UNIT_END + 0x00A3, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_31_5 = UNIT_END + 0x00A5, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_32_1 = UNIT_END + 0x00A6, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_32_2 = UNIT_END + 0x00A7, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_32_3 = UNIT_END + 0x00A8, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_32_5 = UNIT_END + 0x00AA, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_33_1 = UNIT_END + 0x00AB, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_33_2 = UNIT_END + 0x00AC, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_33_3 = UNIT_END + 0x00AD, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_33_5 = UNIT_END + 0x00AF, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_34_1 = UNIT_END + 0x00B0, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_34_2 = UNIT_END + 0x00B1, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_34_3 = UNIT_END + 0x00B2, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_34_5 = UNIT_END + 0x00B4, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_35_1 = UNIT_END + 0x00B5, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_35_2 = UNIT_END + 0x00B6, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_35_3 = UNIT_END + 0x00B7, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_35_5 = UNIT_END + 0x00B9, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_36_1 = UNIT_END + 0x00BA, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_36_2 = UNIT_END + 0x00BB, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_36_3 = UNIT_END + 0x00BC, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_36_5 = UNIT_END + 0x00BE, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_37_1 = UNIT_END + 0x00BF, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_37_2 = UNIT_END + 0x00C0, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_37_3 = UNIT_END + 0x00C1, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_37_5 = UNIT_END + 0x00C3, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_38_1 = UNIT_END + 0x00C4, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_38_2 = UNIT_END + 0x00C5, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_38_3 = UNIT_END + 0x00C6, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_38_5 = UNIT_END + 0x00C8, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_39_1 = UNIT_END + 0x00C9, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_39_2 = UNIT_END + 0x00CA, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_39_3 = UNIT_END + 0x00CB, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_39_5 = UNIT_END + 0x00CD, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_40_1 = UNIT_END + 0x00CE, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_40_2 = UNIT_END + 0x00CF, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_40_3 = UNIT_END + 0x00D0, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_40_5 = UNIT_END + 0x00D2, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_41_1 = UNIT_END + 0x00D3, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_41_2 = UNIT_END + 0x00D4, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_41_3 = UNIT_END + 0x00D5, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_41_5 = UNIT_END + 0x00D7, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_42_1 = UNIT_END + 0x00D8, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_42_2 = UNIT_END + 0x00D9, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_42_3 = UNIT_END + 0x00DA, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_42_5 = UNIT_END + 0x00DC, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_43_1 = UNIT_END + 0x00DD, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_43_2 = UNIT_END + 0x00DE, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_43_3 = UNIT_END + 0x00DF, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_43_5 = UNIT_END + 0x00E1, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_44_1 = UNIT_END + 0x00E2, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_44_2 = UNIT_END + 0x00E3, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_44_3 = UNIT_END + 0x00E4, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_44_5 = UNIT_END + 0x00E6, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_45_1 = UNIT_END + 0x00E7, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_45_2 = UNIT_END + 0x00E8, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_45_3 = UNIT_END + 0x00E9, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_45_5 = UNIT_END + 0x00EB, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_46_1 = UNIT_END + 0x00EC, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_46_2 = UNIT_END + 0x00ED, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_46_3 = UNIT_END + 0x00EE, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_46_5 = UNIT_END + 0x00F0, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_47_1 = UNIT_END + 0x00F1, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_47_2 = UNIT_END + 0x00F2, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_47_3 = UNIT_END + 0x00F3, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_47_5 = UNIT_END + 0x00F5, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_48_1 = UNIT_END + 0x00F6, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_48_2 = UNIT_END + 0x00F7, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_48_3 = UNIT_END + 0x00F8, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_48_5 = UNIT_END + 0x00FA, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_49_1 = UNIT_END + 0x00FB, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_49_2 = UNIT_END + 0x00FC, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_49_3 = UNIT_END + 0x00FD, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_49_5 = UNIT_END + 0x00FF, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_50_1 = UNIT_END + 0x0100, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_50_2 = UNIT_END + 0x0101, // Size: 1, Type: INT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_50_3 = UNIT_END + 0x0102, // Size: 2, Type: TWO_SHORT, Flags: PARTY_MEMBER + PLAYER_QUEST_LOG_50_5 = UNIT_END + 0x0104, // Size: 1, Type: INT, Flags: PARTY_MEMBER PLAYER_VISIBLE_ITEM_1_ENTRYID = UNIT_END + 0x0105, // Size: 1, Type: INT, Flags: PUBLIC PLAYER_VISIBLE_ITEM_1_ENCHANTMENT = UNIT_END + 0x0106, // Size: 1, Type: TWO_SHORT, Flags: PUBLIC PLAYER_VISIBLE_ITEM_2_ENTRYID = UNIT_END + 0x0107, // Size: 1, Type: INT, Flags: PUBLIC @@ -521,7 +521,7 @@ enum EGameObjectFields GAMEOBJECT_DISPLAYID = OBJECT_END + 0x0002, // Size: 1, Type: INT, Flags: PUBLIC GAMEOBJECT_FLAGS = OBJECT_END + 0x0003, // Size: 1, Type: INT, Flags: PUBLIC GAMEOBJECT_PARENTROTATION = OBJECT_END + 0x0004, // Size: 4, Type: FLOAT, Flags: PUBLIC - GAMEOBJECT_DYNAMIC = OBJECT_END + 0x0008, // Size: 1, Type: TWO_SHORT, Flags: UNUSED2 + GAMEOBJECT_DYNAMIC = OBJECT_END + 0x0008, // Size: 1, Type: TWO_SHORT, Flags: DYNAMIC GAMEOBJECT_FACTION = OBJECT_END + 0x0009, // Size: 1, Type: INT, Flags: PUBLIC GAMEOBJECT_LEVEL = OBJECT_END + 0x000A, // Size: 1, Type: INT, Flags: PUBLIC GAMEOBJECT_BYTES_1 = OBJECT_END + 0x000B, // Size: 1, Type: BYTES, Flags: PUBLIC @@ -531,7 +531,7 @@ enum EGameObjectFields enum EDynamicObjectFields { DYNAMICOBJECT_CASTER = OBJECT_END + 0x0000, // Size: 2, Type: LONG, Flags: PUBLIC - DYNAMICOBJECT_BYTES = OBJECT_END + 0x0002, // Size: 1, Type: INT, Flags: UNUSED2 + DYNAMICOBJECT_BYTES = OBJECT_END + 0x0002, // Size: 1, Type: INT, Flags: DYNAMIC DYNAMICOBJECT_SPELLID = OBJECT_END + 0x0003, // Size: 1, Type: INT, Flags: PUBLIC DYNAMICOBJECT_RADIUS = OBJECT_END + 0x0004, // Size: 1, Type: FLOAT, Flags: PUBLIC DYNAMICOBJECT_CASTTIME = OBJECT_END + 0x0005, // Size: 1, Type: INT, Flags: PUBLIC @@ -547,7 +547,7 @@ enum ECorpseFields CORPSE_FIELD_BYTES_1 = OBJECT_END + 0x0018, // Size: 1, Type: BYTES, Flags: PUBLIC CORPSE_FIELD_BYTES_2 = OBJECT_END + 0x0019, // Size: 1, Type: BYTES, Flags: PUBLIC CORPSE_FIELD_FLAGS = OBJECT_END + 0x001A, // Size: 1, Type: INT, Flags: PUBLIC - CORPSE_FIELD_DYNAMIC_FLAGS = OBJECT_END + 0x001B, // Size: 1, Type: INT, Flags: UNUSED2 + CORPSE_FIELD_DYNAMIC_FLAGS = OBJECT_END + 0x001B, // Size: 1, Type: INT, Flags: DYNAMIC CORPSE_END = OBJECT_END + 0x001C, }; diff --git a/src/server/game/Entities/Object/Updates/UpdateMask.h b/src/server/game/Entities/Object/Updates/UpdateMask.h index d4ecd42819c..ad70936b81d 100755 --- a/src/server/game/Entities/Object/Updates/UpdateMask.h +++ b/src/server/game/Entities/Object/Updates/UpdateMask.h @@ -26,26 +26,26 @@ class UpdateMask { public: UpdateMask() : mCount(0), mBlocks(0), mUpdateMask(0) { } - UpdateMask(const UpdateMask& mask) : mUpdateMask(0) { *this = mask; } + UpdateMask(UpdateMask const& mask) : mUpdateMask(0) { *this = mask; } ~UpdateMask() { - delete [] mUpdateMask; + delete[] mUpdateMask; } - void SetBit (uint32 index) + void SetBit(uint32 index) { - ((uint8 *)mUpdateMask)[ index >> 3 ] |= 1 << (index & 0x7); + ((uint8*)mUpdateMask)[index >> 3] |= 1 << (index & 0x7); } - void UnsetBit (uint32 index) + void UnsetBit(uint32 index) { - ((uint8 *)mUpdateMask)[ index >> 3 ] &= (0xff ^ (1 << (index & 0x7))); + ((uint8*)mUpdateMask)[index >> 3] &= (0xff ^ (1 << (index & 0x7))); } - bool GetBit (uint32 index) const + bool GetBit(uint32 index) const { - return (((uint8 *)mUpdateMask)[ index >> 3 ] & (1 << (index & 0x7))) != 0; + return (((uint8*)mUpdateMask)[index >> 3] & (1 << (index & 0x7))) != 0; } uint32 GetBlockCount() const { return mBlocks; } @@ -70,7 +70,7 @@ class UpdateMask memset(mUpdateMask, 0, mBlocks << 2); } - UpdateMask& operator = (const UpdateMask& mask) + UpdateMask& operator=(UpdateMask const& mask) { if (this == &mask) return *this; @@ -81,21 +81,21 @@ class UpdateMask return *this; } - void operator &= (const UpdateMask& mask) + void operator&=(UpdateMask const& mask) { ASSERT(mask.mCount <= mCount); for (uint32 i = 0; i < mBlocks; ++i) mUpdateMask[i] &= mask.mUpdateMask[i]; } - void operator |= (const UpdateMask& mask) + void operator|=(UpdateMask const& mask) { ASSERT(mask.mCount <= mCount); for (uint32 i = 0; i < mBlocks; ++i) mUpdateMask[i] |= mask.mUpdateMask[i]; } - UpdateMask operator & (const UpdateMask& mask) const + UpdateMask operator&(UpdateMask const& mask) const { ASSERT(mask.mCount <= mCount); @@ -106,7 +106,7 @@ class UpdateMask return newmask; } - UpdateMask operator | (const UpdateMask& mask) const + UpdateMask operator|(UpdateMask const& mask) const { ASSERT(mask.mCount <= mCount); diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index efd5e577f9e..36736bb63a7 100755 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -813,6 +813,7 @@ bool Guardian::InitStatsForLevel(uint8 petlevel) SetAttackTime(RANGED_ATTACK, BASE_ATTACK_TIME); SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f); + SetFloatValue(UNIT_MOD_CAST_HASTE, 1.0f); //scale CreatureFamilyEntry const* cFamily = sCreatureFamilyStore.LookupEntry(cinfo->family); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 79318ba6e4d..b2808938b57 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -628,8 +628,6 @@ void KillRewarder::Reward() // == Player ==================================================== -UpdateMask Player::updateVisualBits; - // we can disable this warning for this since it only // causes undefined behavior when passed to the base class constructor #ifdef _MSC_VER @@ -953,6 +951,7 @@ bool Player::Create(uint32 guidlow, CharacterCreateInfo* createInfo) } SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_REGENERATE_POWER); SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f); // fix cast time showed in spell tooltip on client + SetFloatValue(UNIT_MOD_CAST_HASTE, 1.0f); SetFloatValue(UNIT_FIELD_HOVERHEIGHT, 1.0f); // default for players in 3.0.3 // -1 is default value @@ -3203,6 +3202,7 @@ void Player::InitStatsForLevel(bool reapplyMods) // set default cast time multiplier SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f); + SetFloatValue(UNIT_MOD_CAST_HASTE, 1.0f); // reset size before reapply auras SetObjectScale(1.0f); @@ -4506,117 +4506,6 @@ Mail* Player::GetMail(uint32 id) return NULL; } -void Player::_SetCreateBits(UpdateMask* updateMask, Player* target) const -{ - if (target == this) - Object::_SetCreateBits(updateMask, target); - else - { - for (uint16 index = 0; index < m_valuesCount; index++) - if (GetUInt32Value(index) != 0 && updateVisualBits.GetBit(index)) - updateMask->SetBit(index); - } -} - -void Player::_SetUpdateBits(UpdateMask* updateMask, Player* target) const -{ - if (target == this) - Object::_SetUpdateBits(updateMask, target); - else - { - Object::_SetUpdateBits(updateMask, target); - *updateMask &= updateVisualBits; - } -} - -void Player::InitVisibleBits() -{ - updateVisualBits.SetCount(PLAYER_END); - - updateVisualBits.SetBit(OBJECT_FIELD_GUID); - updateVisualBits.SetBit(OBJECT_FIELD_GUID + 1); - updateVisualBits.SetBit(OBJECT_FIELD_DATA); - updateVisualBits.SetBit(OBJECT_FIELD_DATA + 1); - updateVisualBits.SetBit(OBJECT_FIELD_TYPE); - updateVisualBits.SetBit(OBJECT_FIELD_ENTRY); - updateVisualBits.SetBit(OBJECT_FIELD_SCALE_X); - updateVisualBits.SetBit(UNIT_FIELD_CHARM + 0); - updateVisualBits.SetBit(UNIT_FIELD_CHARM + 1); - updateVisualBits.SetBit(UNIT_FIELD_SUMMON + 0); - updateVisualBits.SetBit(UNIT_FIELD_SUMMON + 1); - updateVisualBits.SetBit(UNIT_FIELD_CHARMEDBY + 0); - updateVisualBits.SetBit(UNIT_FIELD_CHARMEDBY + 1); - updateVisualBits.SetBit(UNIT_FIELD_TARGET + 0); - updateVisualBits.SetBit(UNIT_FIELD_TARGET + 1); - updateVisualBits.SetBit(UNIT_FIELD_CHANNEL_OBJECT + 0); - updateVisualBits.SetBit(UNIT_FIELD_CHANNEL_OBJECT + 1); - updateVisualBits.SetBit(UNIT_FIELD_BYTES_0); - updateVisualBits.SetBit(UNIT_FIELD_HEALTH); - updateVisualBits.SetBit(UNIT_FIELD_POWER1); - updateVisualBits.SetBit(UNIT_FIELD_POWER2); - updateVisualBits.SetBit(UNIT_FIELD_POWER3); - updateVisualBits.SetBit(UNIT_FIELD_POWER4); - updateVisualBits.SetBit(UNIT_FIELD_POWER5); - updateVisualBits.SetBit(UNIT_FIELD_MAXHEALTH); - updateVisualBits.SetBit(UNIT_FIELD_MAXPOWER1); - updateVisualBits.SetBit(UNIT_FIELD_MAXPOWER2); - updateVisualBits.SetBit(UNIT_FIELD_MAXPOWER3); - updateVisualBits.SetBit(UNIT_FIELD_MAXPOWER4); - updateVisualBits.SetBit(UNIT_FIELD_MAXPOWER5); - updateVisualBits.SetBit(UNIT_FIELD_LEVEL); - updateVisualBits.SetBit(UNIT_FIELD_FACTIONTEMPLATE); - updateVisualBits.SetBit(UNIT_VIRTUAL_ITEM_SLOT_ID + 0); - updateVisualBits.SetBit(UNIT_VIRTUAL_ITEM_SLOT_ID + 1); - updateVisualBits.SetBit(UNIT_VIRTUAL_ITEM_SLOT_ID + 2); - updateVisualBits.SetBit(UNIT_FIELD_FLAGS); - updateVisualBits.SetBit(UNIT_FIELD_FLAGS_2); - updateVisualBits.SetBit(UNIT_FIELD_AURASTATE); - updateVisualBits.SetBit(UNIT_FIELD_BASEATTACKTIME + 0); - updateVisualBits.SetBit(UNIT_FIELD_BASEATTACKTIME + 1); - updateVisualBits.SetBit(UNIT_FIELD_BOUNDINGRADIUS); - updateVisualBits.SetBit(UNIT_FIELD_COMBATREACH); - updateVisualBits.SetBit(UNIT_FIELD_DISPLAYID); - updateVisualBits.SetBit(UNIT_FIELD_NATIVEDISPLAYID); - updateVisualBits.SetBit(UNIT_FIELD_MOUNTDISPLAYID); - updateVisualBits.SetBit(UNIT_FIELD_BYTES_1); - updateVisualBits.SetBit(UNIT_FIELD_PETNUMBER); - updateVisualBits.SetBit(UNIT_FIELD_PET_NAME_TIMESTAMP); - updateVisualBits.SetBit(UNIT_DYNAMIC_FLAGS); - updateVisualBits.SetBit(UNIT_CHANNEL_SPELL); - updateVisualBits.SetBit(UNIT_MOD_CAST_SPEED); - updateVisualBits.SetBit(UNIT_FIELD_BASE_MANA); - updateVisualBits.SetBit(UNIT_FIELD_BYTES_2); - updateVisualBits.SetBit(UNIT_FIELD_HOVERHEIGHT); - - updateVisualBits.SetBit(PLAYER_DUEL_ARBITER + 0); - updateVisualBits.SetBit(PLAYER_DUEL_ARBITER + 1); - updateVisualBits.SetBit(PLAYER_FLAGS); - updateVisualBits.SetBit(PLAYER_GUILDRANK); - updateVisualBits.SetBit(PLAYER_BYTES); - updateVisualBits.SetBit(PLAYER_BYTES_2); - updateVisualBits.SetBit(PLAYER_BYTES_3); - updateVisualBits.SetBit(PLAYER_DUEL_TEAM); - updateVisualBits.SetBit(PLAYER_GUILD_TIMESTAMP); - updateVisualBits.SetBit(UNIT_NPC_FLAGS); - - // PLAYER_QUEST_LOG_x also visible bit on official (but only on party/raid)... - for (uint16 i = PLAYER_QUEST_LOG_1_1; i < PLAYER_QUEST_LOG_25_2; i += MAX_QUEST_OFFSET) - updateVisualBits.SetBit(i); - - // Players visible items are not inventory stuff - for (uint8 i = 0; i < EQUIPMENT_SLOT_END; ++i) - { - uint16 offset = i * 2; - - // item entry - updateVisualBits.SetBit(PLAYER_VISIBLE_ITEM_1_ENTRYID + offset); - // enchant - updateVisualBits.SetBit(PLAYER_VISIBLE_ITEM_1_ENCHANTMENT + offset); - } - - updateVisualBits.SetBit(PLAYER_CHOSEN_TITLE); -} - void Player::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) const { for (uint8 i = 0; i < EQUIPMENT_SLOT_END; ++i) @@ -17218,7 +17107,7 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder) SetUInt32Value(UNIT_CHANNEL_SPELL, 0); // clear charm/summon related fields - SetUInt64Value(UNIT_FIELD_SUMMONEDBY, 0); + SetOwnerGUID(0); SetUInt64Value(UNIT_FIELD_CHARMEDBY, 0); SetUInt64Value(UNIT_FIELD_CHARM, 0); SetUInt64Value(UNIT_FIELD_SUMMON, 0); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 050e655fdca..39b9f59ba95 100755 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1116,9 +1116,6 @@ class Player : public Unit, public GridObject<Player> void CleanupsBeforeDelete(bool finalCleanup = true); - static UpdateMask updateVisualBits; - static void InitVisibleBits(); - void AddToWorld(); void RemoveFromWorld(); @@ -2682,9 +2679,6 @@ class Player : public Unit, public GridObject<Player> void _SaveStats(SQLTransaction& trans); void _SaveInstanceTimeRestrictions(SQLTransaction& trans); - void _SetCreateBits(UpdateMask* updateMask, Player* target) const; - void _SetUpdateBits(UpdateMask* updateMask, Player* target) const; - /*********************************************************/ /*** ENVIRONMENTAL SYSTEM ***/ /*********************************************************/ diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 7310ae58587..5a5f5c358b2 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -56,6 +56,7 @@ #include "MoveSplineInit.h" #include "MoveSpline.h" #include "ConditionMgr.h" +#include "UpdateFieldFlags.h" #include <math.h> @@ -9663,6 +9664,31 @@ bool Unit::HasAuraState(AuraStateType flag, SpellInfo const* spellProto, Unit co return HasFlag(UNIT_FIELD_AURASTATE, 1<<(flag-1)); } +void Unit::SetOwnerGUID(uint64 owner) +{ + if (GetOwnerGUID() == owner) + return; + + SetUInt64Value(UNIT_FIELD_SUMMONEDBY, owner); + if (!owner) + return; + + // Update owner dependent fields + Player* player = ObjectAccessor::GetPlayer(*this, owner); + if (!player || !player->HaveAtClient(this)) // if player cannot see this unit yet, he will receive needed data with create object + return; + + SetFieldNotifyFlag(UF_FLAG_OWNER); + + UpdateData udata(GetMapId()); + WorldPacket packet; + BuildValuesUpdateBlockForPlayer(&udata, player); + udata.BuildPacket(&packet); + player->SendDirectMessage(&packet); + + RemoveFieldNotifyFlag(UF_FLAG_OWNER); +} + Unit* Unit::GetOwner() const { if (uint64 ownerid = GetOwnerGUID()) @@ -9748,12 +9774,14 @@ void Unit::SetMinion(Minion *minion, bool apply) if (apply) { - if (!minion->AddUInt64Value(UNIT_FIELD_SUMMONEDBY, GetGUID())) + if (minion->GetOwnerGUID()) { sLog->outCrash("SetMinion: Minion %u is not the minion of owner %u", minion->GetEntry(), GetEntry()); return; } + minion->SetOwnerGUID(GetGUID()); + m_Controlled.insert(minion); if (GetTypeId() == TYPEID_PLAYER) @@ -12056,7 +12084,7 @@ MountCapabilityEntry const* Unit::GetMountCapability(uint32 mountType) const continue; } - if (mountCapability->RequiredMap != -1 && GetMapId() != mountCapability->RequiredMap) + if (mountCapability->RequiredMap != -1 && int32(GetMapId()) != mountCapability->RequiredMap) continue; if (mountCapability->RequiredArea && (mountCapability->RequiredArea != zoneId && mountCapability->RequiredArea != areaId)) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 82e9f4e8e56..7984c91bbd3 100755 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -961,24 +961,6 @@ struct SpellPeriodicAuraLogInfo uint32 createProcExtendMask(SpellNonMeleeDamage* damageInfo, SpellMissInfo missCondition); -enum UnitAnimationState -{ - ANIMATION_ON_GROUND = 0, - ANIMATION_SWIMMING = 1, - ANIMATION_HOVER = 2, - ANIMATION_FLYING = 3, -}; - -struct MonsterMoveData -{ - MonsterMoveData() : SplineFlag(0), AnimationState(ANIMATION_ON_GROUND), Time(0), SpeedZ(0.0f) {} - Position DestLocation; - uint32 SplineFlag; - UnitAnimationState AnimationState; // Only used with SPLINEFLAG_ANIMATIONTIER - uint32 Time; - float SpeedZ; // Only used with SPLINEFLAG_TRAJECTORY -}; - #define MAX_DECLINED_NAME_CASES 5 struct DeclinedName @@ -1657,6 +1639,7 @@ class Unit : public WorldObject virtual void setDeathState(DeathState s); // overwrited in Creature/Player/Pet uint64 GetOwnerGUID() const { return GetUInt64Value(UNIT_FIELD_SUMMONEDBY); } + void SetOwnerGUID(uint64 owner); uint64 GetCreatorGUID() const { return GetUInt64Value(UNIT_FIELD_CREATEDBY); } void SetCreatorGUID(uint64 creator) { SetUInt64Value(UNIT_FIELD_CREATEDBY, creator); } uint64 GetMinionGUID() const { return GetUInt64Value(UNIT_FIELD_SUMMON); } diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 1060500bda1..1b5aeb5d785 100755 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -34,6 +34,7 @@ #include "MapInstanced.h" #include "Util.h" #include "LFGMgr.h" +#include "UpdateFieldFlags.h" Roll::Roll(uint64 _guid, LootItem const& li) : itemGUID(_guid), itemid(li.itemid), itemRandomPropId(li.randomPropertyId), itemRandomSuffix(li.randomSuffix), itemCount(li.count), @@ -468,6 +469,47 @@ bool Group::AddMember(Player* player) if (isRaidGroup()) player->UpdateForQuestWorldObjects(); + { + // Broadcast new player group member fields to rest of the group + player->SetFieldNotifyFlag(UF_FLAG_PARTY_MEMBER); + + UpdateData groupData(player->GetMapId()); + WorldPacket groupDataPacket; + + // Broadcast group members' fields to player + for (GroupReference* itr = GetFirstMember(); itr != NULL; itr = itr->next()) + { + if (itr->getSource() == player) + continue; + + if (Player* member = itr->getSource()) + { + if (player->HaveAtClient(member)) // must be on the same map, or shit will break + { + member->SetFieldNotifyFlag(UF_FLAG_PARTY_MEMBER); + member->BuildValuesUpdateBlockForPlayer(&groupData, player); + member->RemoveFieldNotifyFlag(UF_FLAG_PARTY_MEMBER); + } + + if (member->HaveAtClient(player)) + { + UpdateData newData(player->GetMapId()); + WorldPacket newDataPacket; + player->BuildValuesUpdateBlockForPlayer(&newData, member); + member->SendDirectMessage(&newDataPacket); + } + } + } + + if (groupData.HasData()) + { + groupData.BuildPacket(&groupDataPacket); + player->SendDirectMessage(&groupDataPacket); + } + + player->RemoveFieldNotifyFlag(UF_FLAG_PARTY_MEMBER); + } + if (m_maxEnchantingLevel < player->GetSkillValue(SKILL_ENCHANTING)) m_maxEnchantingLevel = player->GetSkillValue(SKILL_ENCHANTING); } diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp index 494a8471a6a..60b698d79b8 100755 --- a/src/server/game/Handlers/GroupHandler.cpp +++ b/src/server/game/Handlers/GroupHandler.cpp @@ -113,7 +113,10 @@ void WorldSession::HandleGroupInviteOpcode(WorldPacket & recv_data) // restrict invite to GMs if (!sWorld->getBoolConfig(CONFIG_ALLOW_GM_GROUP) && !GetPlayer()->isGameMaster() && player->isGameMaster()) + { + SendPartyResult(PARTY_OP_INVITE, membername, ERR_BAD_PLAYER_NAME_S); return; + } // can't group with if (!GetPlayer()->isGameMaster() && !sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP) && GetPlayer()->GetTeam() != player->GetTeam()) diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp index c95a1aa60d1..72af70f5c26 100755 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/game/Scripting/ScriptLoader.cpp @@ -68,6 +68,7 @@ void AddSC_reload_commandscript(); void AddSC_reset_commandscript(); void AddSC_server_commandscript(); void AddSC_tele_commandscript(); +void AddSC_ticket_commandscript(); void AddSC_titles_commandscript(); void AddSC_wp_commandscript(); @@ -679,6 +680,7 @@ void AddCommandScripts() AddSC_reset_commandscript(); AddSC_server_commandscript(); AddSC_tele_commandscript(); + AddSC_ticket_commandscript(); AddSC_titles_commandscript(); AddSC_wp_commandscript(); } diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index aba486b0df9..9c0c3423827 100755 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -2418,7 +2418,7 @@ void Spell::EffectSummonType(SpellEffIndex effIndex) if (properties->Category == SUMMON_CATEGORY_ALLY) { - summon->SetUInt64Value(UNIT_FIELD_SUMMONEDBY, m_originalCaster->GetGUID()); + summon->SetOwnerGUID(m_originalCaster->GetGUID()); summon->setFaction(m_originalCaster->getFaction()); summon->SetUInt32Value(UNIT_CREATED_BY_SPELL, m_spellInfo->Id); } diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 5778e9deef3..5b89abe3b24 100755 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1696,7 +1696,6 @@ void World::SetInitialWorldSettings() ///- Initilize static helper structures AIRegistry::Initialize(); - Player::InitVisibleBits(); ///- Initialize MapManager sLog->outString("Starting Map System"); diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 450183226fc..65377eacf4b 100755 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -638,7 +638,7 @@ class World /// Get the maximum skill level a player can reach uint16 GetConfigMaxSkillValue() const { - uint8 lvl = getIntConfig(CONFIG_MAX_PLAYER_LEVEL); + uint8 lvl = uint8(getIntConfig(CONFIG_MAX_PLAYER_LEVEL)); return lvl > 60 ? 300 + ((lvl - 60) * 75) / 10 : lvl*5; } diff --git a/src/server/scripts/Commands/CMakeLists.txt b/src/server/scripts/Commands/CMakeLists.txt index 915d94c420c..bb7d27d7dce 100644 --- a/src/server/scripts/Commands/CMakeLists.txt +++ b/src/server/scripts/Commands/CMakeLists.txt @@ -33,13 +33,13 @@ set(scripts_STAT_SRCS Commands/cs_reload.cpp Commands/cs_reset.cpp Commands/cs_tele.cpp + Commands/cs_ticket.cpp Commands/cs_server.cpp Commands/cs_titles.cpp Commands/cs_wp.cpp # Commands/cs_pdump.cpp # Commands/cs_channel.cpp # Commands/cs_pet.cpp -# Commands/cs_ticket.cpp # Commands/cs_aura.cpp # Commands/cs_unaura.cpp # Commands/cs_nameannounce.cpp diff --git a/src/server/scripts/Commands/cs_ticket.cpp b/src/server/scripts/Commands/cs_ticket.cpp new file mode 100644 index 00000000000..baaa5d2bd43 --- /dev/null +++ b/src/server/scripts/Commands/cs_ticket.cpp @@ -0,0 +1,509 @@ +/* + * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +/* ScriptData +Name: ticket_commandscript +%Complete: 100 +Comment: All ticket related commands +Category: commandscripts +EndScriptData */ + +#include "ScriptMgr.h" +#include "Chat.h" +#include "AccountMgr.h" +#include "ObjectMgr.h" +#include "TicketMgr.h" + +class ticket_commandscript : public CommandScript +{ +public: + ticket_commandscript() : CommandScript("ticket_commandscript") { } + + ChatCommand* GetCommands() const + { + static ChatCommand ticketResponseCommandTable[] = + { + { "append", SEC_MODERATOR, true, &HandleGMTicketResponseAppendCommand, "", NULL }, + { "appendln", SEC_MODERATOR, true, &HandleGMTicketResponseAppendLnCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } + }; + static ChatCommand ticketCommandTable[] = + { + { "assign", SEC_GAMEMASTER, true, &HandleGMTicketAssignToCommand, "", NULL }, + { "close", SEC_MODERATOR, true, &HandleGMTicketCloseByIdCommand, "", NULL }, + { "closedlist", SEC_MODERATOR, true, &HandleGMTicketListClosedCommand, "", NULL }, + { "comment", SEC_MODERATOR, true, &HandleGMTicketCommentCommand, "", NULL }, + { "complete", SEC_MODERATOR, true, &HandleGMTicketCompleteCommand, "", NULL }, + { "delete", SEC_ADMINISTRATOR, true, &HandleGMTicketDeleteByIdCommand, "", NULL }, + { "escalate", SEC_MODERATOR, true, &HandleGMTicketEscalateCommand, "", NULL }, + { "escalatedlist", SEC_GAMEMASTER, true, &HandleGMTicketListEscalatedCommand, "", NULL }, + { "list", SEC_MODERATOR, true, &HandleGMTicketListCommand, "", NULL }, + { "onlinelist", SEC_MODERATOR, true, &HandleGMTicketListOnlineCommand, "", NULL }, + { "reset", SEC_ADMINISTRATOR, true, &HandleGMTicketResetCommand, "", NULL }, + { "response", SEC_MODERATOR, true, NULL, "", ticketResponseCommandTable }, + { "togglesystem", SEC_ADMINISTRATOR, true, &HandleToggleGMTicketSystem, "", NULL }, + { "unassign", SEC_GAMEMASTER, true, &HandleGMTicketUnAssignCommand, "", NULL }, + { "viewid", SEC_MODERATOR, true, &HandleGMTicketGetByIdCommand, "", NULL }, + { "viewname", SEC_MODERATOR, true, &HandleGMTicketGetByNameCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } + }; + static ChatCommand commandTable[] = + { + { "ticket", SEC_MODERATOR, false, NULL, "", ticketCommandTable }, + { NULL, 0, false, NULL, "", NULL } + }; + return commandTable; + } + + static bool HandleGMTicketAssignToCommand(ChatHandler* handler, char const* args) + { + if (!*args) + return false; + + char* ticketIdStr = strtok((char*)args, " "); + uint32 ticketId = atoi(ticketIdStr); + + char* targetStr = strtok(NULL, " "); + if (!targetStr) + return false; + + std::string target(targetStr); + if (!normalizePlayerName(target)) + return false; + + GmTicket* ticket = sTicketMgr->GetTicket(ticketId); + if (!ticket || ticket->IsClosed()) + { + handler->SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); + return true; + } + + // Get target information + uint64 targetGuid = sObjectMgr->GetPlayerGUIDByName(target.c_str()); + uint64 targetAccountId = sObjectMgr->GetPlayerAccountIdByGUID(targetGuid); + uint32 targetGmLevel = AccountMgr::GetSecurity(targetAccountId, realmID); + + // Target must exist and have administrative rights + if (!targetGuid || AccountMgr::IsPlayerAccount(targetGmLevel)) + { + handler->SendSysMessage(LANG_COMMAND_TICKETASSIGNERROR_A); + return true; + } + + // If already assigned, leave + if (ticket->IsAssignedTo(targetGuid)) + { + handler->PSendSysMessage(LANG_COMMAND_TICKETASSIGNERROR_B, ticket->GetId()); + return true; + } + + // If assigned to different player other than current, leave + //! Console can override though + Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : NULL; + if (player && ticket->IsAssignedNotTo(player->GetGUID())) + { + handler->PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->GetId(), target.c_str()); + return true; + } + + // Assign ticket + SQLTransaction trans = SQLTransaction(NULL); + ticket->SetAssignedTo(targetGuid, AccountMgr::IsAdminAccount(targetGmLevel)); + ticket->SaveToDB(trans); + sTicketMgr->UpdateLastChange(); + + std::string msg = ticket->FormatMessageString(*handler, NULL, target.c_str(), NULL, NULL); + handler->SendGlobalGMSysMessage(msg.c_str()); + return true; + } + + static bool HandleGMTicketCloseByIdCommand(ChatHandler* handler, char const* args) + { + if (!*args) + return false; + + uint32 ticketId = atoi(args); + GmTicket* ticket = sTicketMgr->GetTicket(ticketId); + if (!ticket || ticket->IsClosed() || ticket->IsCompleted()) + { + handler->SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); + return true; + } + + // Ticket should be assigned to the player who tries to close it. + // Console can override though + Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : NULL; + if (player && ticket->IsAssignedNotTo(player->GetGUID())) + { + handler->PSendSysMessage(LANG_COMMAND_TICKETCANNOTCLOSE, ticket->GetId()); + return true; + } + + sTicketMgr->CloseTicket(ticket->GetId(), player ? player->GetGUID() : -1); + sTicketMgr->UpdateLastChange(); + + std::string msg = ticket->FormatMessageString(*handler, player ? player->GetName() : "Console", NULL, NULL, NULL); + handler->SendGlobalGMSysMessage(msg.c_str()); + + // Inform player, who submitted this ticket, that it is closed + if (Player* submitter = ticket->GetPlayer()) + { + if (submitter->IsInWorld()) + { + WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4); + data << uint32(GMTICKET_RESPONSE_TICKET_DELETED); + submitter->GetSession()->SendPacket(&data); + } + } + return true; + } + + static bool HandleGMTicketCommentCommand(ChatHandler* handler, char const* args) + { + if (!*args) + return false; + + char* ticketIdStr = strtok((char*)args, " "); + uint32 ticketId = atoi(ticketIdStr); + + char* comment = strtok(NULL, "\n"); + if (!comment) + return false; + + GmTicket* ticket = sTicketMgr->GetTicket(ticketId); + if (!ticket || ticket->IsClosed()) + { + handler->PSendSysMessage(LANG_COMMAND_TICKETNOTEXIST); + return true; + } + + // Cannot comment ticket assigned to someone else + //! Console excluded + Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : NULL; + if (player && ticket->IsAssignedNotTo(player->GetGUID())) + { + handler->PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->GetId()); + return true; + } + + SQLTransaction trans = SQLTransaction(NULL); + ticket->SetComment(comment); + ticket->SaveToDB(trans); + sTicketMgr->UpdateLastChange(); + + std::string msg = ticket->FormatMessageString(*handler, NULL, ticket->GetAssignedToName().c_str(), NULL, NULL); + msg += handler->PGetParseString(LANG_COMMAND_TICKETLISTADDCOMMENT, player ? player->GetName() : "Console", comment); + handler->SendGlobalGMSysMessage(msg.c_str()); + + return true; + } + + static bool HandleGMTicketListClosedCommand(ChatHandler* handler, char const* /*args*/) + { + sTicketMgr->ShowClosedList(*handler); + return true; + } + + static bool HandleGMTicketCompleteCommand(ChatHandler* handler, char const* args) + { + if (!*args) + return false; + + uint32 ticketId = atoi(args); + GmTicket* ticket = sTicketMgr->GetTicket(ticketId); + if (!ticket || ticket->IsClosed() || ticket->IsCompleted()) + { + handler->SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); + return true; + } + + if (Player* player = ticket->GetPlayer()) + if (player->IsInWorld()) + ticket->SendResponse(player->GetSession()); + + sTicketMgr->UpdateLastChange(); + return true; + } + + static bool HandleGMTicketDeleteByIdCommand(ChatHandler* handler, char const* args) + { + if (!*args) + return false; + + uint32 ticketId = atoi(args); + GmTicket* ticket = sTicketMgr->GetTicket(ticketId); + if (!ticket) + { + handler->SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); + return true; + } + + if (!ticket->IsClosed()) + { + handler->SendSysMessage(LANG_COMMAND_TICKETCLOSEFIRST); + return true; + } + + std::string msg = ticket->FormatMessageString(*handler, NULL, NULL, NULL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetName() : "Console"); + handler->SendGlobalGMSysMessage(msg.c_str()); + + sTicketMgr->RemoveTicket(ticket->GetId()); + sTicketMgr->UpdateLastChange(); + + if (Player* player = ticket->GetPlayer()) + { + if (player->IsInWorld()) + { + // Force abandon ticket + WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4); + data << uint32(GMTICKET_RESPONSE_TICKET_DELETED); + player->GetSession()->SendPacket(&data); + } + } + + return true; + } + + static bool HandleGMTicketEscalateCommand(ChatHandler* handler, char const* args) + { + if (!*args) + return false; + + uint32 ticketId = atoi(args); + GmTicket* ticket = sTicketMgr->GetTicket(ticketId); + if (!ticket || ticket->IsClosed() || ticket->IsCompleted() || ticket->GetEscalatedStatus() != TICKET_UNASSIGNED) + { + handler->SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); + return true; + } + + ticket->SetEscalatedStatus(TICKET_IN_ESCALATION_QUEUE); + + if (Player* player = ticket->GetPlayer()) + if (player->IsInWorld()) + sTicketMgr->SendTicket(player->GetSession(), ticket); + + sTicketMgr->UpdateLastChange(); + return true; + } + + static bool HandleGMTicketListEscalatedCommand(ChatHandler* handler, char const* /*args*/) + { + sTicketMgr->ShowEscalatedList(*handler); + return true; + } + + static bool HandleGMTicketListCommand(ChatHandler* handler, char const* /*args*/) + { + sTicketMgr->ShowList(*handler, false); + return true; + } + + static bool HandleGMTicketListOnlineCommand(ChatHandler* handler, char const* /*args*/) + { + sTicketMgr->ShowList(*handler, true); + return true; + } + + static bool HandleGMTicketResetCommand(ChatHandler* handler, char const* /*args*/) + { + if (sTicketMgr->GetOpenTicketCount()) + { + handler->SendSysMessage(LANG_COMMAND_TICKETPENDING); + return true; + } + else + { + sTicketMgr->ResetTickets(); + handler->SendSysMessage(LANG_COMMAND_TICKETRESET); + } + + return true; + } + + static bool HandleToggleGMTicketSystem(ChatHandler* handler, char const* /*args*/) + { + bool status = !sTicketMgr->GetStatus(); + sTicketMgr->SetStatus(status); + handler->PSendSysMessage(status ? LANG_ALLOW_TICKETS : LANG_DISALLOW_TICKETS); + return true; + } + + static bool HandleGMTicketUnAssignCommand(ChatHandler* handler, char const* args) + { + if (!*args) + return false; + + uint32 ticketId = atoi(args); + GmTicket* ticket = sTicketMgr->GetTicket(ticketId); + if (!ticket || ticket->IsClosed()) + { + handler->SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); + return true; + } + // Ticket must be assigned + if (!ticket->IsAssigned()) + { + handler->PSendSysMessage(LANG_COMMAND_TICKETNOTASSIGNED, ticket->GetId()); + return true; + } + + // Get security level of player, whom this ticket is assigned to + uint32 security = SEC_PLAYER; + Player* assignedPlayer = ticket->GetAssignedPlayer(); + if (assignedPlayer && assignedPlayer->IsInWorld()) + security = assignedPlayer->GetSession()->GetSecurity(); + else + { + uint64 guid = ticket->GetAssignedToGUID(); + uint32 accountId = sObjectMgr->GetPlayerAccountIdByGUID(guid); + security = AccountMgr::GetSecurity(accountId, realmID); + } + + // Check security + //! If no m_session present it means we're issuing this command from the console + uint32 mySecurity = handler->GetSession() ? handler->GetSession()->GetSecurity() : SEC_CONSOLE; + if (security > mySecurity) + { + handler->SendSysMessage(LANG_COMMAND_TICKETUNASSIGNSECURITY); + return true; + } + + SQLTransaction trans = SQLTransaction(NULL); + ticket->SetUnassigned(); + ticket->SaveToDB(trans); + sTicketMgr->UpdateLastChange(); + + std::string msg = ticket->FormatMessageString(*handler, NULL, ticket->GetAssignedToName().c_str(), + handler->GetSession() ? handler->GetSession()->GetPlayer()->GetName() : "Console", NULL); + handler->SendGlobalGMSysMessage(msg.c_str()); + + return true; + } + + static bool HandleGMTicketGetByIdCommand(ChatHandler* handler, char const* args) + { + if (!*args) + return false; + + uint32 ticketId = atoi(args); + GmTicket* ticket = sTicketMgr->GetTicket(ticketId); + if (!ticket || ticket->IsClosed() || ticket->IsCompleted()) + { + handler->SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); + return true; + } + + SQLTransaction trans = SQLTransaction(NULL); + ticket->SetViewed(); + ticket->SaveToDB(trans); + + handler->SendSysMessage(ticket->FormatMessageString(*handler, true).c_str()); + return true; + } + + static bool HandleGMTicketGetByNameCommand(ChatHandler* handler, char const* args) + { + if (!*args) + return false; + + std::string name(args); + if (!normalizePlayerName(name)) + return false; + + // Detect target's GUID + uint64 guid = 0; + if (Player* player = sObjectAccessor->FindPlayerByName(name.c_str())) + guid = player->GetGUID(); + else + guid = sObjectMgr->GetPlayerGUIDByName(name); + + // Target must exist + if (!guid) + { + handler->SendSysMessage(LANG_NO_PLAYERS_FOUND); + return true; + } + + // Ticket must exist + GmTicket* ticket = sTicketMgr->GetTicketByPlayer(guid); + if (!ticket) + { + handler->SendSysMessage(LANG_COMMAND_TICKETNOTEXIST); + return true; + } + + SQLTransaction trans = SQLTransaction(NULL); + ticket->SetViewed(); + ticket->SaveToDB(trans); + + handler->SendSysMessage(ticket->FormatMessageString(*handler, true).c_str()); + return true; + } + + static bool _HandleGMTicketResponseAppendCommand(char const* args, bool newLine, ChatHandler* handler) + { + if (!*args) + return false; + + char* ticketIdStr = strtok((char*)args, " "); + uint32 ticketId = atoi(ticketIdStr); + + char* response = strtok(NULL, "\n"); + if (!response) + return false; + + GmTicket* ticket = sTicketMgr->GetTicket(ticketId); + if (!ticket || ticket->IsClosed()) + { + handler->PSendSysMessage(LANG_COMMAND_TICKETNOTEXIST); + return true; + } + + // Cannot add response to ticket, assigned to someone else + //! Console excluded + Player* player = handler->GetSession() ? handler->GetSession()->GetPlayer() : NULL; + if (player && ticket->IsAssignedNotTo(player->GetGUID())) + { + handler->PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->GetId()); + return true; + } + + SQLTransaction trans = SQLTransaction(NULL); + ticket->AppendResponse(response); + if (newLine) + ticket->AppendResponse("\n"); + ticket->SaveToDB(trans); + + return true; + } + + static bool HandleGMTicketResponseAppendCommand(ChatHandler* handler, char const* args) + { + return _HandleGMTicketResponseAppendCommand(args, false, handler); + } + + static bool HandleGMTicketResponseAppendLnCommand(ChatHandler* handler, char const* args) + { + return _HandleGMTicketResponseAppendCommand(args, true, handler); + } +}; + +void AddSC_ticket_commandscript() +{ + new ticket_commandscript(); +} |