237 struct StarterHunterPetTemplate
243 bool GetStarterHunterPetTemplate(
PlayerInfo const* info, StarterHunterPetTemplate& starterPet)
261 starterPet.CreatedBySpell = spellId;
269 char const* GetDefaultPetActionBarData()
271 return "7 2 7 1 7 4 1 0 1 0 1 0 1 0 6 2 6 3 6 0";
279 StarterHunterPetTemplate starterPet = { };
280 if (!GetStarterHunterPetTemplate(info, starterPet))
295 petName = family->Name;
300 petName = creatureInfo->
Name;
303 if (petName.size() > 21)
309 std::ostringstream ss;
310 ss <<
"INSERT INTO character_pet "
311 <<
"(id, entry, owner, modelid, CreatedBySpell, PetType, level, exp, Reactstate, name, renamed, active, slot, curhealth, curmana, savetime, abdata, PetSpecId) VALUES ("
313 << starterPet.CreatureEntry <<
','
316 << starterPet.CreatedBySpell <<
','
327 <<
uint32(time(NULL)) <<
",'"
328 << GetDefaultPetActionBarData() <<
"',"
331 std::string sql = ss.str();
334 SF_LOG_INFO(
"entities.pet",
"Seeded starter hunter pet entry %u for player %s (GUID: %u) from spell %u.",
335 starterPet.CreatureEntry, player->
GetName().c_str(), player->
GetGUIDLow(), starterPet.CreatedBySpell);
344 StarterHunterPetTemplate starterPet = { };
345 if (!GetStarterHunterPetTemplate(info, starterPet))
368 SF_LOG_INFO(
"entities.pet",
"Created starter hunter pet entry %u for player %s (GUID: %u) from spell %u.",
376struct CharacterGuidRequest
381struct PlayerLoginRequest
387struct LoadScreenRequest
403struct FactionInactiveRequest
409struct CharacterRenameRequest
415struct DeclinedNamesRequest
418 DeclinedName declinedName;
421struct AlterAppearanceRequest
429struct CharacterCustomizeRequest
441struct RandomizeCharNameRequest
447struct EquipmentSetSaveIndexRequest
452struct EquipmentSetSaveHeaderRequest
460struct EquipmentSetSaveTailRequest
463 std::string iconName;
467struct EquipmentSetUseRequest
472 uint8 inventoryItemCounter;
475struct CharFactionOrRaceChangeRequest
486 bool isFactionChange;
489struct ReorderCharacterEntry
495struct ReorderCharactersRequest
497 std::vector<ReorderCharacterEntry> characters;
500CharacterGuidRequest ReadCharacterDeleteRequest(
WorldPacket& recvData)
502 CharacterGuidRequest request;
503 recvData.
ReadGuidMask(request.guid, 1, 3, 2, 7, 4, 6, 0, 5);
504 recvData.
ReadGuidBytes(request.guid, 7, 1, 6, 0, 3, 4, 2, 5);
508PlayerLoginRequest ReadPlayerLoginRequest(
WorldPacket& recvData)
510 PlayerLoginRequest request;
511 recvData >> request.unk;
512 recvData.
ReadGuidMask(request.guid, 1, 4, 7, 3, 2, 6, 5, 0);
513 recvData.
ReadGuidBytes(request.guid, 5, 1, 0, 6, 2, 4, 7, 3);
517LoadScreenRequest ReadLoadScreenRequest(
WorldPacket& recvPacket)
519 LoadScreenRequest request;
520 recvPacket >> request.mapId;
521 request.unk = recvPacket.
ReadBit();
525UInt32Request ReadUInt32Request(
WorldPacket& recvData)
527 UInt32Request request;
528 recvData >> request.value;
532UInt8Request ReadUInt8Request(
WorldPacket& recvData)
534 UInt8Request request;
535 recvData >> request.value;
539FactionInactiveRequest ReadFactionInactiveRequest(
WorldPacket& recvData)
541 FactionInactiveRequest request;
542 recvData >> request.factionIndex >> request.status;
546void ReadToggleDisplayRequest(
WorldPacket& recvData)
551CharacterRenameRequest ReadCharacterRenameRequest(
WorldPacket& recvData)
553 CharacterRenameRequest request;
558 request.newName = recvData.
ReadString(nameLen);
563DeclinedNamesRequest ReadDeclinedNamesRequest(
WorldPacket& recvData)
565 DeclinedNamesRequest request;
567 recvData.
ReadGuidMask(request.guid, 0, 2, 1, 7, 5, 6, 4, 3);
576 recvData.
ReadGuidBytes(request.guid, 0, 7, 3, 6, 4, 2, 1, 5);
580AlterAppearanceRequest ReadAlterAppearanceRequest(
WorldPacket& recvData)
582 AlterAppearanceRequest request;
583 recvData >> request.skinColor >> request.color >> request.hair >> request.facialHair;
587CharacterCustomizeRequest ReadCharacterCustomizeRequest(
WorldPacket& recvData)
589 CharacterCustomizeRequest request;
590 recvData >> request.hairStyle >> request.gender >> request.skin >> request.face >> request.hairColor >> request.facialHair;
596 request.newName = recvData.
ReadString(nameLen);
602CharacterGuidRequest ReadEquipmentSetDeleteRequest(
WorldPacket& recvData)
604 CharacterGuidRequest request;
606 request.guid[4] = recvData.
ReadBit();
607 request.guid[2] = recvData.
ReadBit();
608 request.guid[6] = recvData.
ReadBit();
609 request.guid[0] = recvData.
ReadBit();
610 request.guid[5] = recvData.
ReadBit();
611 request.guid[1] = recvData.
ReadBit();
612 request.guid[7] = recvData.
ReadBit();
613 request.guid[3] = recvData.
ReadBit();
627RandomizeCharNameRequest ReadRandomizeCharNameRequest(
WorldPacket& recvData)
629 RandomizeCharNameRequest request;
630 recvData >> request.gender;
631 recvData >> request.race;
635EquipmentSetSaveIndexRequest ReadEquipmentSetSaveIndexRequest(
WorldPacket& recvData)
637 EquipmentSetSaveIndexRequest request;
638 recvData >> request.index;
642EquipmentSetSaveHeaderRequest ReadEquipmentSetSaveHeaderRequest(
WorldPacket& recvData)
644 EquipmentSetSaveHeaderRequest request;
648 request.itemGuid[i][5] = recvData.
ReadBit();
649 request.itemGuid[i][0] = recvData.
ReadBit();
650 request.itemGuid[i][1] = recvData.
ReadBit();
651 request.itemGuid[i][4] = recvData.
ReadBit();
652 request.itemGuid[i][6] = recvData.
ReadBit();
653 request.itemGuid[i][3] = recvData.
ReadBit();
654 request.itemGuid[i][7] = recvData.
ReadBit();
655 request.itemGuid[i][2] = recvData.
ReadBit();
658 request.setGuid[7] = recvData.
ReadBit();
659 request.setGuid[1] = recvData.
ReadBit();
660 request.setGuid[5] = recvData.
ReadBit();
661 request.setGuid[2] = recvData.
ReadBit();
662 request.setGuid[3] = recvData.
ReadBit();
663 request.setGuid[0] = recvData.
ReadBit();
665 request.setNameLen = recvData.
ReadBits(8);
666 request.setGuid[6] = recvData.
ReadBit();
667 request.iconNameLen = recvData.
ReadBits(8);
669 request.setGuid[4] = recvData.
ReadBit();
671 bool pair = recvData.
ReadBit();
673 request.iconNameLen++;
693EquipmentSetSaveTailRequest ReadEquipmentSetSaveTailRequest(
WorldPacket& recvData, EquipmentSetSaveHeaderRequest
const& header)
695 EquipmentSetSaveTailRequest request;
696 request.setGuid = header.setGuid;
697 request.iconName = recvData.
ReadString(header.iconNameLen);
702 request.name = recvData.
ReadString(header.setNameLen);
712EquipmentSetUseRequest ReadEquipmentSetUseRequest(
WorldPacket& recvData)
714 EquipmentSetUseRequest request;
717 recvData >> request.srcslot[i] >> request.srcbag[i];
720 recvData.
ReadGuidMask(request.itemGuid[i], 3, 1, 7, 4, 5, 6, 0, 2);
722 request.inventoryItemCounter = recvData.
ReadBits(2);
724 for (
uint8 i = 0; i < request.inventoryItemCounter; i++)
738CharFactionOrRaceChangeRequest ReadCharFactionOrRaceChangeRequest(
WorldPacket& recvData)
740 CharFactionOrRaceChangeRequest request;
743 request.hairStyle = 0;
744 request.hairColor = 0;
745 request.facialHair = 0;
747 recvData >> request.gender;
748 recvData >> request.race;
749 request.guid[3] = recvData.
ReadBit();
750 request.guid[2] = recvData.
ReadBit();
751 bool hasSkinColor = recvData.
ReadBit();
752 bool hasFace = recvData.
ReadBit();
753 request.guid[6] = recvData.
ReadBit();
755 bool hasFacialHair = recvData.
ReadBit();
756 bool hasHairStyle = recvData.
ReadBit();
757 request.guid[4] = recvData.
ReadBit();
758 request.guid[1] = recvData.
ReadBit();
759 request.guid[0] = recvData.
ReadBit();
760 request.guid[5] = recvData.
ReadBit();
761 bool hasHairColor = recvData.
ReadBit();
762 request.isFactionChange = recvData.
ReadBit();
763 request.guid[7] = recvData.
ReadBit();
766 request.newName = recvData.
ReadString(nameLength);
770 recvData >> request.hairColor;
772 recvData >> request.hairStyle;
774 recvData >> request.skin;
776 recvData >> request.face;
778 recvData >> request.facialHair;
783ReorderCharactersRequest ReadReorderCharactersRequest(
WorldPacket& recvData)
785 ReorderCharactersRequest request;
786 request.characters.resize(recvData.
ReadBits(9));
788 for (
uint8 i = 0; i < request.characters.size(); ++i)
790 request.characters[i].guid[4] = recvData.
ReadBit();
791 request.characters[i].guid[2] = recvData.
ReadBit();
792 request.characters[i].guid[7] = recvData.
ReadBit();
793 request.characters[i].guid[6] = recvData.
ReadBit();
794 request.characters[i].guid[0] = recvData.
ReadBit();
795 request.characters[i].guid[5] = recvData.
ReadBit();
796 request.characters[i].guid[3] = recvData.
ReadBit();
797 request.characters[i].guid[1] = recvData.
ReadBit();
803void ReadReorderCharacterEntryTail(
WorldPacket& recvData, ReorderCharacterEntry& character)
813 recvData >> character.position;
832 charCount =
uint32(result->GetRowCount());
833 bitBuffer.
reserve(24 * charCount / 8);
834 dataBuffer.
reserve(charCount * 381);
841 uint32 guidLow = (*result)[0].GetUInt32();
848 if (!(*result)[20].GetUInt32())
851 if (!
sWorld->HasCharacterNameData(guidLow))
852 sWorld->AddCharacterNameData(guidLow, (*result)[1].GetString(), (*result)[4].GetUInt8(), (*result)[2].GetUInt8(), (*result)[3].GetUInt8(), (*result)[7].GetUInt8(), (*result)[11].GetUInt32());
853 }
while (result->NextRow());
902 uint8 hairStyle, face, facialHair, hairColor, race_, class_, skin, gender, outfitId;
904 recvData >> outfitId >> hairStyle >> class_ >> skin;
905 recvData >> face >> race_ >> facialHair >> gender >> hairColor;
909 std::string name = recvData.
ReadString(nameLength);
920 bool disabled =
false;
926 disabled = mask & (1 << 0);
929 disabled = mask & (1 << 1);
947 SF_LOG_ERROR(
"network",
"Class (%u) not found in DBC while creating new char for account (ID: %u): wrong DBC files or cheater?", class_,
GetAccountId());
956 SF_LOG_ERROR(
"network",
"Race (%u) not found in DBC while creating new char for account (ID: %u): wrong DBC files or cheater?", race_,
GetAccountId());
981 if ((1 << (race_ - 1)) & raceMaskDisabled)
992 if ((1 << (class_ - 1)) & classMaskDisabled)
1029 if (heroic_free_slots == 0)
1047 _charCreateCallback.SetParam(
new CharacterCreateInfo(name, race_, class_, gender, skin, face, hairStyle, hairColor, facialHair, outfitId, recvData));
1085 uint16 acctCharCount = 0;
1088 Field* fields = result->Fetch();
1092 acctCharCount = atoi(ch);
1120 Field* fields = result->Fetch();
1155 bool haveSameRace =
false;
1157 bool hasHeroicReqLevel = (heroicReqLevel == 0);
1167 Field* field = result->Fetch();
1170 if (checkHeroicReqs)
1175 if (freeHeroicSlots > 0)
1178 if (freeHeroicSlots == 0)
1189 if (!hasHeroicReqLevel)
1192 if (accLevel >= heroicReqLevel)
1193 hasHeroicReqLevel =
true;
1199 if (!allowTwoSideAccounts)
1205 if (accTeam != team)
1220 if (!result->NextRow())
1223 field = result->Fetch();
1227 haveSameRace = createInfo->
Race == accRace;
1229 if (checkHeroicReqs)
1234 if (freeHeroicSlots > 0)
1237 if (freeHeroicSlots == 0)
1248 if (!hasHeroicReqLevel)
1251 if (acc_level >= heroicReqLevel)
1252 hasHeroicReqLevel =
true;
1258 if (checkHeroicReqs && !hasHeroicReqLevel)
1271 createInfo->
Data >> unk;
1272 SF_LOG_DEBUG(
"network",
"Character creation %s (account %u) has unhandled tail data: [%u]", createInfo->
Name.c_str(),
GetAccountId(), unk);
1290 if ((haveSameRace && skipCinematics == 1) || skipCinematics == 2)
1298 SeedStarterHunterPetRecord(&newChar, info);
1307 trans->Append(stmt);
1313 trans->Append(stmt);
1336 CharacterGuidRequest request = ReadCharacterDeleteRequest(recvData);
1363 Field* fields = result->Fetch();
1374 SF_LOG_INFO(
"entities.player.character",
"Account: %d, IP: %s deleted character: %s, GUID: %u, Level: %u", accountId, IP_str.c_str(), name.c_str(),
GUID_LOPART(guid), level);
1381 sLog->outCharDump(dump.c_str(), accountId,
GUID_LOPART(guid), name.c_str());
1403 SF_LOG_DEBUG(
"network",
"WORLD: Recvd Player Logon Message");
1405 PlayerLoginRequest request = ReadPlayerLoginRequest(recvData);
1433 SF_LOG_INFO(
"general",
"WORLD: Recvd CMSG_LOADING_SCREEN_NOTIFY");
1434 LoadScreenRequest request = ReadLoadScreenRequest(recvPacket);
1435 uint32 mapID = request.mapId;
1475 bool excessiveWarning =
false;
1496 if (excessiveWarning)
1519 std::string str_motd =
sWorld->GetMotd();
1520 std::string::size_type pos, nextpos;
1524 while ((nextpos = str_motd.find(
'@', pos)) != std::string::npos)
1528 std::string
string = str_motd.substr(pos, nextpos - pos);
1529 data.
WriteBits(strlen(
string.c_str()), 7);
1536 if (pos < str_motd.length())
1538 std::string
string = str_motd.substr(pos);
1539 data.
WriteBits(strlen(
string.c_str()), 7);
1545 data.
PutBits(0, linecount, 4);
1547 data.
append(stringBuffer);
1550 SF_LOG_DEBUG(
"network",
"WORLD: Sent motd (SMSG_MOTD)");
1555 chH.
PSendSysMessage(
"Open Source Emulation https://www.projectskyfire.org");
1571 Field* fields = resultGuild->Fetch();
1572 pCurrChar->
SetInGuild(fields[0].GetUInt32());
1573 pCurrChar->
SetRank(fields[1].GetUInt8());
1592 for (
uint32 i = 0; i < hotfix.size(); ++i)
1594 data <<
uint32(hotfix[i].Timestamp);
1596 data <<
uint32(hotfix[i].Type);
1610 if (cEntry->CinematicSequence)
1616 if (!
sWorld->GetNewCharString().empty())
1636 guild->SendLoginInfo(
this);
1640 SF_LOG_ERROR(
"general",
"Player %s (GUID: %u) marked as member of not existing guild (id: %u), removing guild membership for player.", pCurrChar->
GetName().c_str(), pCurrChar->
GetGUIDLow(), pCurrChar->
GetGuildId());
1661 group->SendUpdate();
1662 group->ResetMaxEnchantingLevel();
1676 pCurrChar->
CastSpell(pCurrChar, 20584,
true, 0);
1677 pCurrChar->
CastSpell(pCurrChar, 8326,
true, 0);
1719 StarterHunterPetTemplate starterPet = { };
1721 GetStarterHunterPetTemplate(info, starterPet);
1725 if (hasStarterHunterPet && spellId == starterPet.CreatedBySpell)
1728 pCurrChar->
CastSpell(pCurrChar, spellId,
true);
1740 if (!pCurrChar->
GetPet())
1742 Pet* storedPet =
new Pet(pCurrChar);
1747 if (!pCurrChar->
GetPet())
1748 CreateStarterHunterPet(pCurrChar, info);
1755 if (
sWorld->IsShuttingDown())
1756 sWorld->ShutdownMsg(
true, pCurrChar);
1765 SF_LOG_INFO(
"entities.player.character",
"Account: %d (IP: %s) Login Character:[%s] (GUID: %u) Level: %d",
1774 pCurrChar->
CastSpell(pCurrChar, 103985,
true);
1776 sScriptMgr->OnPlayerLogin(pCurrChar, firstLogin);
1781 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_SET_LFG_BONUS_FACTION_ID");
1782 UInt32Request request = ReadUInt32Request(recvData);
1783 uint32 FactionID = request.value;
1789 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_SET_FACTION_ATWAR");
1791 UInt8Request request = ReadUInt8Request(recvData);
1792 uint8 FactionIndexID = request.value;
1799 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_SET_FACTION_NOTATWAR");
1801 UInt8Request request = ReadUInt8Request(recvData);
1802 uint8 FactionIndexID = request.value;
1810 SF_LOG_ERROR(
"network",
"WORLD SESSION: HandleSetFactionCheat, not expected call, please report.");
1816 UInt32Request request = ReadUInt32Request(recvData);
1817 uint32 data = request.value;
1823 uint32 value = (data % 32);
1826 flag |= (1 << value);
1844 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_SET_WATCHED_FACTION");
1845 UInt32Request request = ReadUInt32Request(recvData);
1846 uint32 fact = request.value;
1852 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_SET_FACTION_INACTIVE");
1853 FactionInactiveRequest request = ReadFactionInactiveRequest(recvData);
1855 uint8 Status = request.status;
1862 SF_LOG_DEBUG(
"network",
"WORLD: Received CMSG_REQUEST_FORCED_REACTIONS");
1864 _player->GetReputationMgr().SendForceReactions();
1870 ReadToggleDisplayRequest(recvData);
1877 ReadToggleDisplayRequest(recvData);
1883 CharacterRenameRequest request = ReadCharacterRenameRequest(recvData);
1885 std::string newName = request.newName;
1900 data <<
uint8(result);
1942 Field* fields = result->Fetch();
1945 std::string oldName = fields[1].
GetString();
1965 SF_LOG_INFO(
"entities.player.character",
"Account: %d (IP: %s) Character:[%s] (guid:%u) Changed name to: %s",
GetAccountId(),
GetRemoteAddress().c_str(), oldName.c_str(), guidLow, newName.c_str());
1973 sWorld->UpdateCharacterNameData(guidLow, newName);
1978 DeclinedNamesRequest request = ReadDeclinedNamesRequest(recvData);
1984 if (!
sObjectMgr->GetPlayerNameByGUID(guid, name))
2055 trans->Append(stmt);
2060 for (
uint8 i = 0; i < 5; i++)
2063 trans->Append(stmt);
2081 AlterAppearanceRequest request = ReadAlterAppearanceRequest(recvData);
2082 uint32 Hair = request.hair;
2083 uint32 Color = request.color;
2084 uint32 FacialHair = request.facialHair;
2085 uint32 SkinColor = request.skinColor;
2094 if (!bs_facialHair || bs_facialHair->
type != 2 || bs_facialHair->
race !=
_player->getRace() || bs_facialHair->
gender !=
_player->getGender())
2099 if (bs_skinColor && (bs_skinColor->
type != 3 || bs_skinColor->
race !=
_player->getRace() || bs_skinColor->
gender !=
_player->getGender()))
2147 CharacterCustomizeRequest request = ReadCharacterCustomizeRequest(recvData);
2149 std::string newName = request.newName;
2150 uint8 gender = request.gender;
2151 uint8 skin = request.skin;
2152 uint8 face = request.face;
2153 uint8 hairStyle = request.hairStyle;
2154 uint8 hairColor = request.hairColor;
2155 uint8 facialHair = request.facialHair;
2159 SF_LOG_ERROR(
"network",
"Account %u, IP: %s tried to customise character %u, but it does not belong to their account!",
2178 Field* fields = result->Fetch();
2219 if (newguid != guid)
2234 std::string oldname = result->Fetch()[0].GetString();
2260 data <<
uint8(facialHair);
2261 data <<
uint8(skin);
2262 data <<
uint8(gender);
2263 data <<
uint8(hairStyle);
2264 data <<
uint8(face);
2265 data <<
uint8(hairColor);
2275 EquipmentSetSaveIndexRequest indexRequest = ReadEquipmentSetSaveIndexRequest(recvData);
2276 uint32 index = indexRequest.index;
2282 EquipmentSetSaveHeaderRequest request = ReadEquipmentSetSaveHeaderRequest(recvData);
2286 ReadEquipmentSetSaveItemGuidBytes(recvData, request.itemGuid[i]);
2289 if (request.itemGuid[i] == 1)
2298 if (!item && request.itemGuid[i])
2301 if (item && item->
GetGUID() != request.itemGuid[i])
2307 EquipmentSetSaveTailRequest tail = ReadEquipmentSetSaveTailRequest(recvData, request);
2308 eqSet.
Guid = tail.setGuid;
2309 eqSet.
Name = tail.name;
2313 _player->SetEquipmentSet(index, eqSet);
2320 CharacterGuidRequest request = ReadEquipmentSetDeleteRequest(recvData);
2323 _player->DeleteEquipmentSet(setGuid);
2330 EquipmentSetUseRequest request = ReadEquipmentSetUseRequest(recvData);
2335 ReadEquipmentSetUseItemGuidBytes(recvData, request.itemGuid[i]);
2337 if (i <
uint32(startSlot))
2341 if (request.itemGuid[i] == 1)
2344 Item* item =
_player->GetItemByGuid(request.itemGuid[i]);
2359 _player->StoreItem(sDest, uItem,
true);
2362 _player->SendEquipError(msg, uItem, NULL);
2367 if (item->
GetPos() == dstpos)
2377 data <<
uint8(Reason);
2384 CharFactionOrRaceChangeRequest request = ReadCharFactionOrRaceChangeRequest(recvData);
2386 std::string newname = request.newName;
2387 uint8 gender = request.gender;
2388 uint8 skin = request.skin;
2389 uint8 face = request.face;
2390 uint8 hairStyle = request.hairStyle;
2391 uint8 hairColor = request.hairColor;
2392 uint8 facialHair = request.facialHair;
2393 uint8 race = request.race;
2394 bool isFactionChange = request.isFactionChange;
2398 SF_LOG_ERROR(
"network",
"Account %u, IP: %s tried to factionchange character %u, but it does not belong to their account!",
2432 Field* fields = result->Fetch();
2434 char const* knownTitlesStr = fields[1].
GetCString();
2437 if (!
sObjectMgr->GetPlayerInfo(race, playerClass))
2445 if (!(at_loginFlags & used_loginFlag))
2456 if ((1 << (race - 1)) & raceMaskDisabled)
2495 if (newguid != guid)
2513 trans->Append(stmt);
2517 trans->Append(stmt);
2521 if (oldRace != race)
2544 trans->Append(stmt);
2556 trans->Append(stmt);
2601 trans->Append(stmt);
2604 if (isFactionChange)
2609 trans->Append(stmt);
2615 std::ostringstream taximaskstream;
2616 uint32 numFullTaximasks = level / 7;
2617 if (numFullTaximasks > 11)
2618 numFullTaximasks = 11;
2623 for (
uint8 i = 0; i < numFullTaximasks; ++i)
2628 for (
uint8 i = 0; i < numFullTaximasks; ++i)
2636 for (
uint8 i = 0; i < numFullTaximasks; ++i)
2641 for (
uint8 i = 0; i < numFullTaximasks; ++i)
2646 uint32 numEmptyTaximasks = 11 - numFullTaximasks;
2647 for (
uint8 i = 0; i < numEmptyTaximasks; ++i)
2648 taximaskstream <<
"0 ";
2649 taximaskstream <<
'0';
2650 std::string taximask = taximaskstream.str();
2655 trans->Append(stmt);
2667 if (
Guild* guild =
sGuildMgr->GetGuildById((result->Fetch()[0]).GetUInt32()))
2676 trans->Append(stmt);
2680 trans->Append(stmt);
2686 trans->Append(stmt);
2708 trans->Append(stmt);
2711 for (std::map<uint32, uint32>::const_iterator it =
sObjectMgr->FactionChangeAchievements.begin(); it !=
sObjectMgr->FactionChangeAchievements.end(); ++it)
2713 uint32 achiev_alliance = it->first;
2714 uint32 achiev_horde = it->second;
2719 trans->Append(stmt);
2725 trans->Append(stmt);
2729 for (std::map<uint32, uint32>::const_iterator it =
sObjectMgr->FactionChangeItems.begin(); it !=
sObjectMgr->FactionChangeItems.end(); ++it)
2731 uint32 item_alliance = it->first;
2732 uint32 item_horde = it->second;
2738 trans->Append(stmt);
2744 trans->Append(stmt);
2747 for (std::map<uint32, uint32>::const_iterator it =
sObjectMgr->FactionChangeQuests.begin(); it !=
sObjectMgr->FactionChangeQuests.end(); ++it)
2749 uint32 quest_alliance = it->first;
2750 uint32 quest_horde = it->second;
2755 trans->Append(stmt);
2761 trans->Append(stmt);
2767 trans->Append(stmt);
2772 for (ObjectMgr::QuestMap::const_iterator iter = questTemplates.begin(); iter != questTemplates.end(); ++iter)
2774 Quest const* quest = iter->second;
2781 trans->Append(stmt);
2787 for (std::map<uint32, uint32>::const_iterator it =
sObjectMgr->FactionChangeSpells.begin(); it !=
sObjectMgr->FactionChangeSpells.end(); ++it)
2789 uint32 spell_alliance = it->first;
2790 uint32 spell_horde = it->second;
2795 trans->Append(stmt);
2801 trans->Append(stmt);
2805 for (std::map<uint32, uint32>::const_iterator it =
sObjectMgr->FactionChangeReputation.begin(); it !=
sObjectMgr->FactionChangeReputation.end(); ++it)
2807 uint32 reputation_alliance = it->first;
2808 uint32 reputation_horde = it->second;
2826 fields = result->Fetch();
2831 int32 oldBaseRep =
sObjectMgr->GetBaseReputationOf(factionEntry, oldRace, playerClass);
2837 int32 FinalRep = oldDBRep + oldBaseRep;
2838 int32 newDBRep = FinalRep - newBaseRep;
2843 trans->Append(stmt);
2850 trans->Append(stmt);
2857 uint32 knownTitles[ktcount];
2858 Tokenizer tokens(knownTitlesStr,
' ', ktcount);
2860 if (tokens.
size() != ktcount)
2863 for (
uint32 index = 0; index < ktcount; ++index)
2864 knownTitles[index] = atol(tokens[index]);
2866 for (std::map<uint32, uint32>::const_iterator it =
sObjectMgr->FactionChangeTitles.begin(); it !=
sObjectMgr->FactionChangeTitles.end(); ++it)
2868 uint32 title_alliance = it->first;
2869 uint32 title_horde = it->second;
2877 uint32 index = bitIndex / 32;
2878 uint32 old_flag = 1 << (bitIndex % 32);
2880 if (knownTitles[index] & old_flag)
2882 knownTitles[index] &= ~old_flag;
2884 knownTitles[atitleInfo->
bit_index / 32] |= new_flag;
2890 uint32 index = bitIndex / 32;
2891 uint32 old_flag = 1 << (bitIndex % 32);
2893 if (knownTitles[index] & old_flag)
2895 knownTitles[index] &= ~old_flag;
2897 knownTitles[htitleInfo->
bit_index / 32] |= new_flag;
2901 std::ostringstream ss;
2902 for (
uint32 index = 0; index < ktcount; ++index)
2903 ss << knownTitles[index] <<
' ';
2908 trans->Append(stmt);
2913 trans->Append(stmt);
2922 SF_LOG_DEBUG(
"entities.player",
"%s (IP: %s) changed race from %u to %u",
GetPlayerInfo().c_str(), IP_str.c_str(), oldRace, race);
2928 data <<
uint8(gender);
2929 data <<
uint8(skin);
2930 data <<
uint8(face);
2931 data <<
uint8(hairStyle);
2932 data <<
uint8(hairColor);
2933 data <<
uint8(facialHair);
2934 data <<
uint8(race);
2940 RandomizeCharNameRequest request = ReadRandomizeCharNameRequest(recvData);
2941 uint8 gender = request.gender;
2942 uint8 race = request.race;
2967 ReorderCharactersRequest request = ReadReorderCharactersRequest(recvData);
2970 for (
uint8 i = 0; i < request.characters.size(); ++i)
2972 ReadReorderCharacterEntryTail(recvData, request.characters[i]);
2975 stmt->
setUInt8(0, request.characters[i].position);
2977 trans->Append(stmt);
2991 if (classEntry->CinematicSequence)
2992 _player->SendCinematicStart(classEntry->CinematicSequence);
2994 _player->SendCinematicStart(raceEntry->CinematicSequence);
@ CHAR_SEL_CHARACTER_ACTIONS
@ CHAR_SEL_CHARACTER_DAILYQUESTSTATUS
@ CHAR_DEL_CHAR_SOCIAL_BY_FRIEND
@ CHAR_UPD_CHAR_INVENTORY_FACTION_CHANGE
@ CHAR_SEL_CHARACTER_AT_LOGIN
@ CHAR_DEL_CHAR_QUESTSTATUS_REWARDED_BY_QUEST
@ CHAR_SEL_PLAYER_CURRENCY
@ CHAR_SEL_CHARACTER_QUESTSTATUSREW
@ CHAR_SEL_PLAYER_ACCOUNT_DATA
@ CHAR_UPD_CHAR_QUESTSTATUS_REWARDED_FACTION_CHANGE
@ CHAR_DEL_CHAR_SKILL_LANGUAGES
@ CHAR_SEL_CHARACTER_AURAS
@ CHAR_SEL_ACCOUNT_INSTANCELOCKTIMES
@ CHAR_UPD_CHAR_ACHIEVEMENT
@ CHAR_SEL_ACCOUNT_BATTLE_PET_SLOTS
@ CHAR_DEL_CHAR_DECLINED_NAME
@ CHAR_SEL_CHAR_VOID_STORAGE
@ CHAR_INS_PLAYER_HOMEBIND
@ CHAR_INS_CHAR_SKILL_LANGUAGE
@ CHAR_SEL_CHARACTER_BGDATA
@ CHAR_SEL_CHARACTER_SOCIALLIST
@ CHAR_UPD_CHAR_SPELL_FACTION_CHANGE
@ CHAR_UPD_CHAR_TAXI_PATH
@ CHAR_DEL_PLAYER_HOMEBIND
@ CHAR_SEL_CHAR_REP_BY_FACTION
@ CHAR_SEL_CHARACTER_HOMEBIND
@ CHAR_UPD_CHAR_LIST_SLOT
@ CHAR_DEL_CHAR_SPELL_BY_SPELL
@ CHAR_SEL_CHAR_CREATE_INFO
@ CHAR_SEL_CHARACTER_INVENTORY
@ CHAR_UPD_CHAR_QUESTSTATUS_REWARDED_ACTIVE_BY_QUEST
@ CHAR_SEL_CHARACTER_INSTANCE
@ CHAR_SEL_CHARACTER_DATA_BY_GUID
@ CHAR_SEL_CHARACTER_QUESTSTATUS
@ CHAR_DEL_CHAR_ACHIEVEMENT_BY_ACHIEVEMENT
@ CHAR_SEL_CHARACTER_TALENTS
@ CHAR_SEL_CHARACTER_WEEKLYQUESTSTATUS
@ CHAR_SEL_CHAR_CUF_PROFILES
@ CHAR_SEL_CHARACTER_CRITERIAPROGRESS
@ CHAR_SEL_CHARACTER_MAILCOUNT
@ CHAR_SEL_CHARACTER_GLYPHS
@ CHAR_SEL_CHARACTER_REPUTATION
@ CHAR_DEL_CHAR_QUESTSTATUS
@ CHAR_SEL_CHARACTER_SPELL
@ CHAR_UPD_CHAR_REP_FACTION_CHANGE
@ CHAR_SEL_ACCOUNT_BATTLE_PETS
@ CHAR_SEL_CHARACTER_RANDOMBG
@ CHAR_SEL_CHARACTER_EQUIPMENTSETS
@ CHAR_SEL_CHARACTER_SKILLS
@ CHAR_SEL_CHARACTER_MAILDATE
@ CHAR_UPD_CHAR_TITLES_FACTION_CHANGE
@ CHAR_DEL_CHAR_REP_BY_FACTION
@ CHAR_SEL_CHAR_RESEARCH_DIGSITES
@ CHAR_SEL_CHARACTER_QUEST_OBJECTIVE_STATUS
@ CHAR_SEL_ENUM_DECLINED_NAME
@ CHAR_SEL_CHARACTER_SPELLCOOLDOWNS
@ CHAR_RES_CHAR_TITLES_FACTION_CHANGE
@ CHAR_SEL_CHARACTER_MONTHLYQUESTSTATUS
@ CHAR_SEL_CHAR_RESEARCH_HISTORY
@ CHAR_SEL_CHAR_AT_LOGIN_TITLES
@ CHAR_UPD_CHAR_QUESTSTATUS_REWARDED_ACTIVE
@ CHAR_DEL_CHAR_SOCIAL_BY_GUID
@ CHAR_SEL_CHARACTER_ACHIEVEMENTS
@ CHAR_SEL_CHAR_RESEARCH_PROJECTS
@ CHAR_SEL_CHARACTER_SEASONALQUESTSTATUS
@ CHAR_SEL_CHARACTER_DECLINEDNAMES
@ CHAR_UPD_CHAR_NAME_AT_LOGIN
@ CHAR_INS_CHAR_DECLINED_NAME
@ CHAR_SEL_CHARACTER_BANNED
@ CHAR_SEL_CHARACTER_NAME
@ CHAR_UPD_FACTION_OR_RACE
#define MAX_ACCOUNT_TUTORIAL_VALUES
@ ACHIEVEMENT_CRITERIA_TYPE_VISIT_BARBER_SHOP
@ ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_AT_BARBER
DBCStorage< CharTitlesEntry > sCharTitlesStore(CharTitlesEntryfmt)
DBCStorage< FactionEntry > sFactionStore(FactionEntryfmt)
TaxiMask sAllianceTaxiNodesMask
const std::string * GetRandomCharacterName(uint8 race, uint8 gender)
DBCStorage< BarberShopStyleEntry > sBarberShopStyleStore(BarberShopStyleEntryfmt)
DBCStorage< ChrRacesEntry > sChrRacesStore(ChrRacesEntryfmt)
TaxiMask sDeathKnightTaxiNodesMask
DBCStorage< CreatureFamilyEntry > sCreatureFamilyStore(CreatureFamilyfmt)
DBCStorage< ChrClassesEntry > sChrClassesStore(ChrClassesEntryfmt)
TaxiMask sHordeTaxiNodesMask
#define MAX_SPELL_EFFECTS
#define SF_LOG_DEBUG(filterType__,...)
#define SF_LOG_ERROR(filterType__,...)
#define SF_LOG_INFO(filterType__,...)
@ LOGIN_INS_REALM_CHARACTERS
@ LOGIN_SEL_SUM_REALM_CHARACTERS
@ LOGIN_UPD_ACCOUNT_ONLINE
@ LOGIN_DEL_REALM_CHARACTERS_BY_REALM
uint32 GUID_LOPART(uint64 x)
uint64 MAKE_NEW_GUID(uint32 l, uint32 e, uint32 h)
bool normalizePlayerName(std::string &name)
std::vector< HotfixInfo > HotfixData
std::vector< ItemPosCount > ItemPosCountVec
#define KNOWN_TITLES_SIZE
@ PLAYER_FLAGS_HIDE_CLOAK
@ PLAYER_FLAGS_CONTESTED_PVP
#define MAX_EQUIPMENT_SET_INDEX
@ EQUIPMENT_SLOT_MAINHAND
@ AT_LOGIN_RESET_PET_TALENTS
@ AT_LOGIN_CHANGE_FACTION
#define INVENTORY_SLOT_BAG_0
@ PLAYER_LOGIN_QUERY_LOAD_SPELL_COOLDOWNS
@ PLAYER_LOGIN_QUERY_LOAD_CURRENCY
@ PLAYER_LOGIN_QUERY_LOAD_RESEARCH_HISTORY
@ PLAYER_LOGIN_QUERY_LOAD_GLYPHS
@ PLAYER_LOGIN_QUERY_LOAD_DECLINED_NAMES
@ PLAYER_LOGIN_QUERY_LOAD_QUEST_STATUS_REW
@ PLAYER_LOGIN_QUERY_LOAD_DAILY_QUEST_STATUS
@ PLAYER_LOGIN_QUERY_LOAD_INSTANCE_LOCK_TIMES
@ PLAYER_LOGIN_QUERY_LOAD_SEASONAL_QUEST_STATUS
@ PLAYER_LOGIN_QUERY_LOAD_SOCIAL_LIST
@ PLAYER_LOGIN_QUERY_LOAD_ACTIONS
@ PLAYER_LOGIN_QUERY_LOAD_SKILLS
@ PLAYER_LOGIN_QUERY_LOAD_BG_DATA
@ PLAYER_LOGIN_QUERY_LOAD_ACCOUNT_DATA
@ PLAYER_LOGIN_QUERY_LOAD_MAIL_DATE
@ PLAYER_LOGIN_QUERY_LOAD_VOID_STORAGE
@ PLAYER_LOGIN_QUERY_LOAD_INVENTORY
@ PLAYER_LOGIN_QUERY_LOAD_REPUTATION
@ PLAYER_LOGIN_QUERY_LOAD_RESEARCH_PROJECTS
@ PLAYER_LOGIN_QUERY_LOAD_MAIL_COUNT
@ PLAYER_LOGIN_QUERY_LOAD_FROM
@ PLAYER_LOGIN_QUERY_LOAD_QUEST_STATUS
@ PLAYER_LOGIN_QUERY_LOAD_BATTLE_PET_SLOTS
@ PLAYER_LOGIN_QUERY_LOAD_BATTLE_PETS
@ PLAYER_LOGIN_QUERY_LOAD_RESEARCH_DIGSITES
@ PLAYER_LOGIN_QUERY_LOAD_WEEKLY_QUEST_STATUS
@ PLAYER_LOGIN_QUERY_LOAD_MONTHLY_QUEST_STATUS
@ PLAYER_LOGIN_QUERY_LOAD_GUILD
@ PLAYER_LOGIN_QUERY_LOAD_EQUIPMENT_SETS
@ PLAYER_LOGIN_QUERY_LOAD_AURAS
@ PLAYER_LOGIN_QUERY_LOAD_TALENTS
@ PLAYER_LOGIN_QUERY_LOAD_BANNED
@ PLAYER_LOGIN_QUERY_LOAD_QUEST_OBJECTIVE_STATUS
@ PLAYER_LOGIN_QUERY_LOAD_GROUP
@ PLAYER_LOGIN_QUERY_LOAD_CRITERIA_PROGRESS
@ PLAYER_LOGIN_QUERY_LOAD_HOME_BIND
@ PLAYER_LOGIN_QUERY_LOAD_SPELLS
@ PLAYER_LOGIN_QUERY_LOAD_BOUND_INSTANCES
@ PLAYER_LOGIN_QUERY_LOAD_CUF_PROFILES
@ PLAYER_LOGIN_QUERY_LOAD_RANDOM_BG
@ PLAYER_LOGIN_QUERY_LOAD_ACHIEVEMENTS
Skyfire::AutoPtr< PreparedResultSet, Skyfire::Mutex > PreparedQueryResult
Role Based Access Control related classes definition.
@ GAMEOBJECT_TYPE_BARBER_CHAIR
@ SPELL_EFFECT_CREATE_TAMED_PET
@ CHAR_CREATE_ACCOUNT_LIMIT
@ CHAR_DELETE_FAILED_GUILD_LEADER
@ CHAR_CREATE_LEVEL_REQUIREMENT
@ CHAR_LOGIN_NO_CHARACTER
@ CHAR_CREATE_NAME_IN_USE
@ CHAR_CREATE_PVP_TEAMS_VIOLATION
@ CHAR_CREATE_SERVER_LIMIT
@ CHAR_CREATE_UNIQUE_CLASS_LIMIT
@ CHARACTER_BOOST_APPLIED
#define RACEMASK_ALLIANCE
Skyfire::AutoPtr< Transaction, Skyfire::Mutex > SQLTransaction
@ UNIT_STAND_STATE_SIT_LOW_CHAIR
#define MAX_DECLINED_NAME_CASES
@ UNIT_BYTE2_FLAG_FFA_PVP
@ UNIT_FIELD_SHAPESHIFT_FORM
@ PLAYER_FIELD_LFG_BONUS_FACTION_ID
@ PLAYER_FIELD_HAIR_COLOR_ID
@ PLAYER_FIELD_WATCHED_FACTION_INDEX
@ PLAYER_FIELD_PLAYER_FLAGS
@ PLAYER_FIELD_REST_STATE
bool Utf8toWStr(char const *utf8str, size_t csize, wchar_t *wstr, size_t &wsize)
bool isCyrillicCharacter(wchar_t wchar)
void WriteGuidBytes(const ObjectGuid &guid, Offsets... offsets)
bool WriteBit(uint32 bit)
void WriteGuidMask(const ObjectGuid &guid, Offsets... offsets)
void reserve(size_t ressize)
void WriteString(std::string const &str)
uint32 ReadBits(size_t bits)
void ReadGuidBytes(ObjectGuid &guid, Offsets... offsets)
void ReadByteSeq(uint8 &b)
std::string ReadString(size_t length)
void PutBits(size_t pos, T value, uint32 bitCount)
void ReadGuidMask(ObjectGuid &guid, Offsets... offsets)
void WriteBits(T value, size_t bits)
std::string Name
User specified variables.
uint8 CharCount
Server side data.
void PSendSysMessage(const char *format,...) ATTR_PRINTF(2
std::string GetString() const
char const * GetCString() const
GameObjectTemplate const * GetGOInfo() const
uint32 GetAccountId() const
LoginQueryHolder(uint32 accountId, uint64 guid)
virtual bool AddPlayerToMap(Player *)
float GetFollowAngle() const OVERRIDE
static Player * FindPlayer(uint64)
uint32 GetGUIDLow() const
bool HasFlag(uint16 index, uint32 flag) const
void SetUInt32Value(uint16 index, uint32 value)
void SetByteFlag(uint16 index, uint8 offset, uint8 newFlag)
static bool CheckDeclinedNames(const std::wstring &w_ownname, DeclinedName const &names)
static ResponseCodes CheckPlayerName(std::string const &name, bool create=false)
UNORDERED_MAP< uint32, Quest * > QuestMap
void InitTalentForLevel()
void SavePetToDB(PetSaveMode mode)
bool LoadPetFromDB(Player *owner, uint32 petentry=0, uint32 petnumber=0, bool current=false)
static void resetTalentsForAllPetsOf(Player *owner, Pet *online_pet=NULL)
void SendInitialPacketsAfterAddToMap()
void RemoveAtLoginFlag(AtLoginFlags flags, bool persist=false)
void SetInGuild(uint32 guildId)
void SendCinematicStart(uint32 CinematicSequenceId)
static bool BuildEnumData(PreparedQueryResult result, ByteBuffer *dataBuffer, ByteBuffer *bitBuffer, bool boosted=false)
uint32 GetGuildId() const
bool CanTameExoticPets() const
void SendDungeonDifficulty()
bool Create(uint32 guidlow, CharacterCreateInfo *createInfo)
void CleanupsBeforeDelete(bool finalCleanup=true) override
void SendTalentsInfoData()
void PetSpellInitialize()
void ContinueTaxiFlight()
void SendInitialPacketsBeforeAddToMap()
static void SavePositionInDB(uint32 mapid, float x, float y, float z, float o, uint32 zone, uint64 guid)
void SetAtLoginFlag(AtLoginFlags f)
WorldSession * GetSession() const
bool ResetTalents(bool noCost=false, bool resetTalents=true, bool resetSpecialization=true)
static uint32 TeamForRace(uint8 race)
static void Customize(uint64 guid, uint8 gender, uint8 skin, uint8 face, uint8 hairStyle, uint8 hairColor, uint8 facialHair)
bool LoadFromDB(uint32 guid, SQLQueryHolder *holder)
bool IsGameMaster() const
uint8 getCinematic() const
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options=0)
static void DeleteFromDB(uint64 playerguid, uint32 accountId, bool updateRealmChars=true, bool deleteFinally=false)
void SetRank(uint8 rankId)
void SaveToDB(bool create=false)
static bool IsValidGender(uint8 Gender)
bool HasAtLoginFlag(AtLoginFlags f) const
static bool IsValidRace(uint8 Race)
void SetGuildLevel(uint32 level)
void SetTaxiCheater(bool on)
void SetInGameTime(uint32 time)
void setCinematic(uint8 cine)
bool CheckInstanceLoginValid()
ReputationMgr & GetReputationMgr()
void resetSpells(bool myClassOnly=false)
void setFloat(const uint8 index, const float value)
void setString(const uint8 index, const std::string &value)
void setUInt16(const uint8 index, const uint16 value)
void setUInt64(const uint8 index, const uint64 value)
void setUInt32(const uint8 index, const uint32 value)
void setUInt8(const uint8 index, const uint8 value)
void setInt32(const uint8 index, const int32 value)
uint32 GetRequiredRaces() const
uint32 GetQuestId() const
void SetAtWar(FactionIndex FactionIndexID)
void SetNotAtWar(FactionIndex FactionIndexID)
void SetSize(size_t size)
PreparedQueryResult GetPreparedResult(size_t index)
bool bool SetPreparedQuery(size_t index, PreparedStatement *stmt)
SpellEffectInfo Effects[MAX_SPELL_EFFECTS]
void SetMinion(Minion *minion, bool apply)
uint32 getVirtualRealm() const
void SetContestedPvP(Player *attackedPlayer=NULL)
void CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=NULL, AuraEffect const *triggeredByAura=NULL, uint64 originalCaster=0)
Pet * CreateTamedPetFrom(Creature *creatureTarget, uint32 spell_id=0)
MotionMaster * GetMotionMaster()
bool IsStandState() const
bool HasUnitState(const uint32 f) const
void SetStandState(uint8 state)
bool SetWaterWalking(bool enable, bool packetOnly=false)
std::string const & GetName() const
void GetClosePoint(float &x, float &y, float &z, float size, float distance2d=0, float angle=0) const
float GetObjectSize() const
void Initialize(Opcodes opcode, size_t newres=200)
QueryCallback< PreparedQueryResult, CharacterCreateInfo *, true > _charCreateCallback
void SetPlayer(Player *player)
void HandleCharCustomize(WorldPacket &recvData)
void KickPlayer()
Kick a player out of the World.
void HandleEquipmentSetUse(WorldPacket &recvData)
void HandlePlayerLoginOpcode(WorldPacket &recvPacket)
void HandleAlterAppearance(WorldPacket &recvData)
void HandleShowingHelmOpcode(WorldPacket &recvData)
void HandleSetFactionAtWar(WorldPacket &recvData)
void HandleCharEnumOpcode(WorldPacket &recvPacket)
void HandleSetLfgBonusFactionID(WorldPacket &recvData)
void SendNotification(const char *format,...) ATTR_PRINTF(2
void HandleCharFactionOrRaceChange(WorldPacket &recvData)
void HandleSetWatchedFactionOpcode(WorldPacket &recvData)
void HandleSetFactionNotAtWar(WorldPacket &recvData)
void HandleSetFactionInactiveOpcode(WorldPacket &recvData)
void HandlePlayerLogin(LoginQueryHolder *holder)
void LoadAccountData(PreparedQueryResult result, uint32 mask)
void HandleCharCreateCallback(PreparedQueryResult result, CharacterCreateInfo *createInfo)
void HandleLoadScreenOpcode(WorldPacket &recvPacket)
void HandleRandomizeCharNameOpcode(WorldPacket &recvData)
void HandleTutorialFlag(WorldPacket &recvData)
std::string GetPlayerInfo() const
void HandleSetFactionCheat(WorldPacket &recvData)
Player * GetPlayer() const
bool PlayerLoading() const
PreparedQueryResultFuture _charEnumCallback
void HandleChangePlayerNameOpcodeCallBack(PreparedQueryResult result, std::string const &newName)
void HandleEquipmentSetDelete(WorldPacket &recvData)
void HandleOpeningCinematic(WorldPacket &recvData)
QueryCallback< PreparedQueryResult, std::string > _charRenameCallback
void HandleShowingCloakOpcode(WorldPacket &recvData)
void SendBarberShopResult(BarberShopResult result)
uint32 GetVirtualRealmID() const
QueryResultHolderFuture _charLoginCallback
void HandleCharDeleteOpcode(WorldPacket &recvPacket)
void HandleReorderCharacters(WorldPacket &recvData)
void HandleCharEnum(PreparedQueryResult result)
std::set< uint32 > _legitCharacters
bool HasPermission(uint32 permissionId)
void SendTimezoneInformation()
void SendPacket(WorldPacket const *packet, bool forced=false)
Send a packet to the client.
uint32 GetAccountId() const
void HandleRequestForcedReactionsOpcode(WorldPacket &recvData)
uint32 GetTutorialInt(uint8 index) const
CharacterBooster * m_charBooster
void HandleCharCreateOpcode(WorldPacket &recvPacket)
std::string const & GetRemoteAddress()
void HandleEquipmentSetSave(WorldPacket &recvData)
void HandleSetPlayerDeclinedNames(WorldPacket &recvData)
void SendAccountDataTimes(uint32 mask)
void HandleTutorialReset(WorldPacket &recvData)
bool IsLegitCharacterForAccount(uint32 lowGUID)
void HandleCharRenameOpcode(WorldPacket &recvData)
void SetTutorialInt(uint8 index, uint32 value)
void SendCharacterLoginFailed(ResponseCodes reason)
void HandleTutorialClear(WorldPacket &recvData)
CharacterDatabaseWorkerPool CharacterDatabase
Accessor to the character database.
#define PER_CHARACTER_CACHE_MASK
@ BARBER_SHOP_NOT_ENOUGH_MONEY
@ BARBER_SHOP_NOT_SITTING
@ SMSG_USE_EQUIPMENT_SET_RESULT
@ SMSG_CHAR_FACTION_CHANGE
@ SMSG_SET_PLAYER_DECLINED_NAMES_RESULT
@ SMSG_RANDOMIZE_CHAR_NAME
@ SMSG_HOTFIX_NOTIFY_BLOB
@ SMSG_LOGIN_VERIFY_WORLD
@ SMSG_BARBER_SHOP_RESULT
@ SMSG_ENUM_CHARACTERS_RESULT
@ SMSG_FEATURE_SYSTEM_STATUS
@ CONFIG_CHARACTERS_PER_ACCOUNT
@ CONFIG_CHARACTER_CREATING_MIN_LEVEL_FOR_HEROIC_CHARACTER
@ CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK
@ CONFIG_CHARACTER_CREATING_DISABLED_CLASSMASK
@ CONFIG_CHARACTERS_PER_REALM
@ CONFIG_CHARACTER_CREATING_DISABLED
@ CONFIG_MAX_PLAYER_LEVEL
@ CONFIG_HEROIC_CHARACTERS_PER_REALM
@ CONFIG_ENABLE_SINFO_LOGIN
@ CONFIG_TICKETS_FEEDBACK_SYSTEM_ENABLED
@ CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD
@ CONFIG_DECLINED_NAMES_USED
@ RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_TEAMMASK
@ RBAC_PERM_TWO_SIDE_CHARACTER_CREATION
@ RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_RESERVEDNAME
@ RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_RACEMASK
@ RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_CLASSMASK
@ RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_HEROIC_CHARACTER
@ RBAC_PERM_TWO_SIDE_ADD_FRIEND
LoginDatabaseWorkerPool LoginDatabase
uint32 GetFirstValidModelId() const
bool IsTameable(bool canTameExotic) const
uint32 nameLength[MAX_DECLINED_NAME_CASES]
std::string name[MAX_DECLINED_NAME_CASES]
EquipmentSetUpdateState state
uint32 Items[EQUIPMENT_SLOT_END]
struct GameObjectTemplate::@046065176235271051340241126110345143267101032070::@114312050106372302366137106154036240136321221160 barberChair
PlayerCreateInfoSpells spell_cast
float GetPositionZ() const
float GetOrientation() const
bool IsPositionValid() const
float GetPositionX() const
float GetPositionY() const
void Relocate(float x, float y)
const uint32 CreatureEntry[3]