diff options
author | ForesterDev <11771800+ForesterDev@users.noreply.github.com> | 2019-07-05 16:07:35 +0400 |
---|---|---|
committer | Wyrserth <wyrserth@protonmail.com> | 2019-07-05 14:07:35 +0200 |
commit | c44fb37f74347e3b6d399c941716971503af4cf8 (patch) | |
tree | a5770aa1baf7678e50b8774f566b85b03128b19e /src | |
parent | 9530c33af0847ac13826d20f21d2447f0817bfa5 (diff) |
Core/Unit: Implement more helper methods (#23555)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Pet/Pet.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Entities/Pet/Pet.h | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 130 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 20 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 28 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 6 | ||||
-rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 15 | ||||
-rw-r--r-- | src/server/game/Handlers/SpellHandler.cpp | 17 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_character.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_reset.cpp | 6 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 2 |
12 files changed, 123 insertions, 117 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index aa32fc90f76..dce1df66980 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -465,10 +465,10 @@ bool Creature::InitEntry(uint32 entry, CreatureData const* data /*= nullptr*/) m_creatureInfo = cinfo; // map mode related always // equal to player Race field, but creature does not have race - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_RACE, 0); + SetRace(RACE_NONE); // known valid are: CLASS_WARRIOR, CLASS_PALADIN, CLASS_ROGUE, CLASS_MAGE - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, uint8(cinfo->unit_class)); + SetClass(uint8(cinfo->unit_class)); // Cancel load if no model defined if (!(cinfo->GetFirstValidModelId())) diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index ed5e98aea68..68696f9a003 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -219,12 +219,12 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c case SUMMON_PET: petlevel = owner->GetLevel(); - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, uint8(CLASS_MAGE)); + SetClass(CLASS_MAGE); SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED); // this enables popup window (pet dismiss, cancel) break; case HUNTER_PET: - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, CLASS_WARRIOR); + SetClass(CLASS_WARRIOR); SetGender(GENDER_NONE); SetSheath(SHEATH_STATE_MELEE); SetByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PET_FLAGS, fields[9].GetBool() ? UNIT_CAN_BE_ABANDONED : UNIT_CAN_BE_RENAMED | UNIT_CAN_BE_ABANDONED); @@ -783,7 +783,7 @@ bool Pet::CreateBaseAtTamed(CreatureTemplate const* cinfo, Map* map, uint32 phas if (cinfo->type == CREATURE_TYPE_BEAST) { - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, CLASS_WARRIOR); + SetClass(CLASS_WARRIOR); SetGender(GENDER_NONE); SetSheath(SHEATH_STATE_MELEE); SetByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PET_FLAGS, UNIT_CAN_BE_RENAMED | UNIT_CAN_BE_ABANDONED); diff --git a/src/server/game/Entities/Pet/Pet.h b/src/server/game/Entities/Pet/Pet.h index 3e69330b5ea..5de4723e9e7 100644 --- a/src/server/game/Entities/Pet/Pet.h +++ b/src/server/game/Entities/Pet/Pet.h @@ -132,8 +132,8 @@ class TC_GAME_API Pet : public Guardian void InitTalentForLevel(); uint8 GetMaxTalentPointsForLevel(uint8 level) const; - uint8 GetFreeTalentPoints() const { return GetByteValue(UNIT_FIELD_BYTES_1, 1); } - void SetFreeTalentPoints(uint8 points) { SetByteValue(UNIT_FIELD_BYTES_1, 1, points); } + uint8 GetFreeTalentPoints() const { return GetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_PET_TALENTS); } + void SetFreeTalentPoints(uint8 points) { SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_PET_TALENTS, points); } uint32 m_usedTalentCount; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 0b722bc79de..40399c527be 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -494,7 +494,7 @@ bool Player::Create(ObjectGuid::LowType guidlow, CharacterCreateInfo* createInfo SetObjectScale(1.0f); - setFactionForRace(createInfo->Race); + SetFactionForRace(createInfo->Race); if (!IsValidGender(createInfo->Gender)) { @@ -510,10 +510,10 @@ bool Player::Create(ObjectGuid::LowType guidlow, CharacterCreateInfo* createInfo return false; } - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_RACE, createInfo->Race); - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, createInfo->Class); + SetRace(createInfo->Race); + SetClass(createInfo->Class); SetGender(createInfo->Gender); - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_POWER_TYPE, powertype); + SetPowerType(Powers(powertype), false); InitDisplayIds(); UpdatePositionData(); if (sWorld->getIntConfig(CONFIG_GAME_TYPE) == REALM_TYPE_PVP || sWorld->getIntConfig(CONFIG_GAME_TYPE) == REALM_TYPE_RPPVP) @@ -527,17 +527,17 @@ bool Player::Create(ObjectGuid::LowType guidlow, CharacterCreateInfo* createInfo SetInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX, uint32(-1)); // -1 is default value - SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID, createInfo->Skin); - SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID, createInfo->Face); - SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID, createInfo->HairStyle); - SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID, createInfo->HairColor); - SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE, createInfo->FacialHair); - SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_REST_STATE, (GetSession()->IsARecruiter() || GetSession()->GetRecruiterId() != 0) ? REST_STATE_RAF_LINKED : REST_STATE_NOT_RAF_LINKED); + SetSkinId(createInfo->Skin); + SetFaceId(createInfo->Face); + SetHairStyleId(createInfo->HairStyle); + SetHairColorId(createInfo->HairColor); + SetFacialStyle(createInfo->FacialHair); + SetRestState((GetSession()->IsARecruiter() || GetSession()->GetRecruiterId() != 0) ? REST_STATE_RAF_LINKED : REST_STATE_NOT_RAF_LINKED); SetNativeGender(createInfo->Gender); - SetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_ARENA_FACTION, 0); + SetArenaFaction(0); SetUInt32Value(PLAYER_GUILDID, 0); - SetUInt32Value(PLAYER_GUILDRANK, 0); + SetRank(0); SetUInt32Value(PLAYER_GUILD_TIMESTAMP, 0); for (int i = 0; i < KNOWN_TITLES_SIZE; ++i) @@ -561,11 +561,11 @@ bool Player::Create(ObjectGuid::LowType guidlow, CharacterCreateInfo* createInfo start_level = gm_level; } - SetUInt32Value(UNIT_FIELD_LEVEL, start_level); + SetLevel(start_level, false); InitRunes(); - SetUInt32Value(PLAYER_FIELD_COINAGE, sWorld->getIntConfig(CONFIG_START_PLAYER_MONEY)); + SetMoney(sWorld->getIntConfig(CONFIG_START_PLAYER_MONEY)); SetHonorPoints(sWorld->getIntConfig(CONFIG_START_HONOR_POINTS)); SetArenaPoints(sWorld->getIntConfig(CONFIG_START_ARENA_POINTS)); @@ -2403,7 +2403,7 @@ void Player::SetGameMaster(bool on) SetPhaseMask(newPhase, false); m_ExtraFlags &= ~ PLAYER_EXTRA_GM_ON; - setFactionForRace(GetRace()); + SetFactionForRace(GetRace()); RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_GM); RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_ALLOW_CHEAT_SPELLS); @@ -2556,9 +2556,8 @@ void Player::GiveXP(uint32 xp, Unit* victim, float group_rate) SendLogXPGain(xp, victim, bonus_xp, recruitAFriend, group_rate); - uint32 curXP = GetUInt32Value(PLAYER_XP); uint32 nextLvlXP = GetUInt32Value(PLAYER_NEXT_LEVEL_XP); - uint32 newXP = curXP + xp + bonus_xp; + uint32 newXP = GetXP() + xp + bonus_xp; while (newXP >= nextLvlXP && level < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL)) { @@ -2571,7 +2570,7 @@ void Player::GiveXP(uint32 xp, Unit* victim, float group_rate) nextLvlXP = GetUInt32Value(PLAYER_NEXT_LEVEL_XP); } - SetUInt32Value(PLAYER_XP, newXP); + SetXP(newXP); } // Update player to next level @@ -4703,14 +4702,8 @@ Corpse* Player::CreateCorpse() _corpseLocation.WorldRelocate(*this); - uint8 skin = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID); - uint8 face = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID); - uint8 hairstyle = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID); - uint8 haircolor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID); - uint8 facialhair = GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE); - - _cfb1 = ((0x00) | (GetRace() << 8) | (GetNativeGender() << 16) | (skin << 24)); - _cfb2 = ((face) | (hairstyle << 8) | (haircolor << 16) | (facialhair << 24)); + _cfb1 = ((0x00) | (GetRace() << 8) | (GetNativeGender() << 16) | (GetSkinId() << 24)); + _cfb2 = (GetFaceId() | (GetHairStyleId() << 8) | (GetHairColorId() << 16) | (GetFacialStyle() << 24)); corpse->SetUInt32Value(CORPSE_FIELD_BYTES_1, _cfb1); corpse->SetUInt32Value(CORPSE_FIELD_BYTES_2, _cfb2); @@ -6506,7 +6499,7 @@ uint32 Player::TeamForRace(uint8 race) return ALLIANCE; } -void Player::setFactionForRace(uint8 race) +void Player::SetFactionForRace(uint8 race) { m_team = TeamForRace(race); @@ -17143,8 +17136,8 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) return false; } - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_RACE, fields[3].GetUInt8()); - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, fields[4].GetUInt8()); + SetRace(fields[3].GetUInt8()); + SetClass(fields[4].GetUInt8()); SetGender(gender); // check if race/class combination is valid @@ -17155,8 +17148,8 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) return false; } - SetUInt32Value(UNIT_FIELD_LEVEL, fields[6].GetUInt8()); - SetUInt32Value(PLAYER_XP, fields[7].GetUInt32()); + SetLevel(fields[6].GetUInt8(), false); + SetXP(fields[7].GetUInt32()); _LoadIntoDataField(fields[66].GetString(), PLAYER_EXPLORED_ZONES_1, PLAYER_EXPLORED_ZONES_SIZE); _LoadIntoDataField(fields[69].GetString(), PLAYER__FIELD_KNOWN_TITLES, KNOWN_TITLES_SIZE * 2); @@ -17172,25 +17165,20 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) money = MAX_MONEY_AMOUNT; SetMoney(money); - SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID, fields[9].GetUInt8()); - SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID, fields[10].GetUInt8()); - SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID, fields[11].GetUInt8()); - SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID, fields[12].GetUInt8()); - SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE, fields[13].GetUInt8()); - SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_BANK_BAG_SLOTS, fields[14].GetUInt8()); - SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_REST_STATE, fields[15].GetUInt8()); + SetSkinId(fields[9].GetUInt8()); + SetFaceId(fields[10].GetUInt8()); + SetHairStyleId(fields[11].GetUInt8()); + SetHairColorId(fields[12].GetUInt8()); + SetFacialStyle(fields[13].GetUInt8()); + SetBankBagSlotCount(fields[14].GetUInt8()); + SetRestState(fields[15].GetUInt8()); SetNativeGender(fields[5].GetUInt8()); - SetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_INEBRIATION, fields[54].GetUInt8()); + SetDrunkValue(fields[54].GetUInt8()); if (!ValidateAppearance( fields[3].GetUInt8(), // race fields[4].GetUInt8(), // class - gender, - GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID), - GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID), - GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID), - GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE), - GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID))) + gender, GetHairStyleId(), GetHairColorId(), GetFaceId(), GetFacialStyle(), GetSkinId())) { TC_LOG_ERROR("entities.player", "Player::LoadFromDB: Player (%s) has wrong Appearance values (Hair/Skin/Color), can't load.", guid.ToString().c_str()); return false; @@ -17225,7 +17213,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) //Need to call it to initialize m_team (m_team can be calculated from race) //Other way is to saves m_team into characters table. - setFactionForRace(GetRace()); + SetFactionForRace(GetRace()); // load home bind and check in same time class/race pair, it used later for restore broken positions if (!_LoadHomeBind(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_HOME_BIND))) @@ -19266,15 +19254,15 @@ void Player::SaveToDB(bool create /*=false*/) stmt->setUInt8(index++, GetClass()); stmt->setUInt8(index++, GetNativeGender()); // save gender from PLAYER_BYTES_3, UNIT_BYTES_0 changes with every transform effect stmt->setUInt8(index++, GetLevel()); - stmt->setUInt32(index++, GetUInt32Value(PLAYER_XP)); + stmt->setUInt32(index++, GetXP()); stmt->setUInt32(index++, GetMoney()); - stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID)); - stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID)); - stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID)); - stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID)); - stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE)); - stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_BANK_BAG_SLOTS)); - stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_REST_STATE)); + stmt->setUInt8(index++, GetSkinId()); + stmt->setUInt8(index++, GetFaceId()); + stmt->setUInt8(index++, GetHairStyleId()); + stmt->setUInt8(index++, GetHairColorId()); + stmt->setUInt8(index++, GetFacialStyle()); + stmt->setUInt8(index++, GetBankBagSlotCount()); + stmt->setUInt8(index++, GetRestState()); stmt->setUInt32(index++, GetUInt32Value(PLAYER_FLAGS)); stmt->setUInt16(index++, (uint16)GetMapId()); stmt->setUInt32(index++, (uint32)GetInstanceId()); @@ -19376,15 +19364,15 @@ void Player::SaveToDB(bool create /*=false*/) stmt->setUInt8(index++, GetClass()); stmt->setUInt8(index++, GetNativeGender()); // save gender from PLAYER_BYTES_3, UNIT_BYTES_0 changes with every transform effect stmt->setUInt8(index++, GetLevel()); - stmt->setUInt32(index++, GetUInt32Value(PLAYER_XP)); + stmt->setUInt32(index++, GetXP()); stmt->setUInt32(index++, GetMoney()); - stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID)); - stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID)); - stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID)); - stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID)); - stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE)); - stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_BANK_BAG_SLOTS)); - stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_REST_STATE)); + stmt->setUInt8(index++, GetSkinId()); + stmt->setUInt8(index++, GetFaceId()); + stmt->setUInt8(index++, GetHairStyleId()); + stmt->setUInt8(index++, GetHairColorId()); + stmt->setUInt8(index++, GetFacialStyle()); + stmt->setUInt8(index++, GetBankBagSlotCount()); + stmt->setUInt8(index++, GetRestState()); stmt->setUInt32(index++, GetUInt32Value(PLAYER_FLAGS)); if (!IsBeingTeleported()) @@ -21187,13 +21175,13 @@ void Player::SetRestBonus(float rest_bonus_new) // update data for client if ((GetsRecruitAFriendBonus(true) && (GetSession()->IsARecruiter() || GetSession()->GetRecruiterId() != 0))) - SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_REST_STATE, REST_STATE_RAF_LINKED); + SetRestState(REST_STATE_RAF_LINKED); else { if (m_rest_bonus > 10) - SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_REST_STATE, REST_STATE_RESTED); + SetRestState(REST_STATE_RESTED); else if (m_rest_bonus <= 1) - SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_REST_STATE, REST_STATE_NOT_RAF_LINKED); + SetRestState(REST_STATE_NOT_RAF_LINKED); } //RestTickUpdate @@ -22127,7 +22115,7 @@ void Player::SetBattlegroundEntryPoint() void Player::SetBGTeam(uint32 team) { m_bgData.bgTeam = team; - SetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_ARENA_FACTION, uint8(team == ALLIANCE ? 1 : 0)); + SetArenaFaction(uint8(team == ALLIANCE ? 1 : 0)); } uint32 Player::GetBGTeam() const @@ -24382,10 +24370,10 @@ uint32 Player::GetBarberShopCost(uint8 newhairstyle, uint8 newhaircolor, uint8 n if (level > GT_MAX_LEVEL) level = GT_MAX_LEVEL; // max level in this dbc - uint8 hairstyle = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID); - uint8 haircolor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID); - uint8 facialhair = GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE); - uint8 skincolor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID); + uint8 hairstyle = GetHairStyleId(); + uint8 haircolor = GetHairColorId(); + uint8 facialhair = GetFacialStyle(); + uint8 skincolor = GetSkinId(); if ((hairstyle == newhairstyle) && (haircolor == newhaircolor) && (facialhair == newfacialhair) && (!newSkin || (newSkin->hair_id == skincolor))) return 0; @@ -26585,7 +26573,7 @@ Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetTy case SUMMON_PET: // this enables pet details window (Shift+P) pet->GetCharmInfo()->SetPetNumber(pet_number, true); - pet->SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, CLASS_MAGE); + pet->SetClass(CLASS_MAGE); pet->SetUInt32Value(UNIT_FIELD_PETEXPERIENCE, 0); pet->SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, 1000); pet->SetFullHealth(); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 20978e26a61..999398bc987 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -966,7 +966,9 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void SetHas310Flyer(bool on) { if (on) m_ExtraFlags |= PLAYER_EXTRA_HAS_310_FLYER; else m_ExtraFlags &= ~PLAYER_EXTRA_HAS_310_FLYER; } void SetPvPDeath(bool on) { if (on) m_ExtraFlags |= PLAYER_EXTRA_PVP_DEATH; else m_ExtraFlags &= ~PLAYER_EXTRA_PVP_DEATH; } - void GiveXP(uint32 xp, Unit* victim, float group_rate=1.0f); + uint32 GetXP() const { return GetUInt32Value(PLAYER_XP); } + void SetXP(uint32 xp) { SetUInt32Value(PLAYER_XP, xp); } + void GiveXP(uint32 xp, Unit* victim, float group_rate = 1.0f); void GiveLevel(uint8 level); void InitStatsForLevel(bool reapplyMods = false); @@ -985,12 +987,25 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> uint8 GetNativeGender() const override { return GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER); } void SetNativeGender(uint8 gender) override { SetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER, gender); } + uint8 GetSkinId() const { return GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID); } + void SetSkinId(uint8 skin) { SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID, skin); } + uint8 GetFaceId() const { return GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID); } + void SetFaceId(uint8 face) { SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID, face); } + uint8 GetHairStyleId() const { return GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID); } + void SetHairStyleId(uint8 hairStyle) { SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID, hairStyle); } + uint8 GetHairColorId() const { return GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID); } + void SetHairColorId(uint8 hairColor) { SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID, hairColor); } + uint8 GetFacialStyle() const { return GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE); } + void SetFacialStyle(uint8 facialStyle) { SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE, facialStyle); } void setDeathState(DeathState s) override; // overwrite Unit::setDeathState float GetRestBonus() const { return m_rest_bonus; } void SetRestBonus(float rest_bonus_new); + uint8 GetRestState() const { return GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_REST_STATE); } + void SetRestState(uint8 restState) { SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_REST_STATE, restState); } + bool HasRestFlag(RestFlag restFlag) const { return (_restFlagMask & restFlag) != 0; } void SetRestFlag(RestFlag restFlag, uint32 triggerId = 0); void RemoveRestFlag(RestFlag restFlag); @@ -1734,7 +1749,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> static uint32 TeamForRace(uint8 race); uint32 GetTeam() const { return m_team; } TeamId GetTeamId() const { return m_team == ALLIANCE ? TEAM_ALLIANCE : TEAM_HORDE; } - void setFactionForRace(uint8 race); + void SetFactionForRace(uint8 race); void InitDisplayIds(); @@ -1763,6 +1778,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> /*********************************************************/ /*** PVP SYSTEM ***/ /*********************************************************/ + void SetArenaFaction(uint8 arenaFaction) { SetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_ARENA_FACTION, arenaFaction); } void UpdateHonorFields(); bool RewardHonor(Unit* victim, uint32 groupsize, int32 honor = -1, bool pvptoken = false); uint32 GetHonorPoints() const { return GetUInt32Value(PLAYER_FIELD_HONOR_CURRENCY); } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 7f4b9484e4e..937048030fd 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -5300,13 +5300,16 @@ void Unit::SendAttackStateUpdate(uint32 HitInfo, Unit* target, uint8 /*SwingType SendAttackStateUpdate(&dmgInfo); } -void Unit::SetPowerType(Powers new_powertype) +void Unit::SetPowerType(Powers new_powertype, bool sendUpdate/* = true*/) { if (GetPowerType() == new_powertype) return; SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_POWER_TYPE, new_powertype); + if (!sendUpdate) + return; + if (GetTypeId() == TYPEID_PLAYER) { if (ToPlayer()->GetGroup()) @@ -9210,10 +9213,13 @@ bool Unit::CanFreeMove() const UNIT_STATE_ROOT | UNIT_STATE_STUNNED | UNIT_STATE_DISTRACTED) && GetOwnerGUID().IsEmpty(); } -void Unit::SetLevel(uint8 lvl) +void Unit::SetLevel(uint8 lvl, bool sendUpdate/* = true*/) { SetUInt32Value(UNIT_FIELD_LEVEL, lvl); + if (!sendUpdate) + return; + if (Player* player = ToPlayer()) { // group update @@ -11446,7 +11452,7 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au if (cinfo && cinfo->type == CREATURE_TYPE_DEMON) { // to prevent client crash - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, (uint8)CLASS_MAGE); + SetClass(CLASS_MAGE); // just to enable stat window if (GetCharmInfo()) @@ -11543,7 +11549,7 @@ void Unit::RemoveCharmedBy(Unit* charmer) CreatureTemplate const* cinfo = ToCreature()->GetCreatureTemplate(); if (cinfo && cinfo->type == CREATURE_TYPE_DEMON) { - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, uint8(cinfo->unit_class)); + SetClass(uint8(cinfo->unit_class)); if (GetCharmInfo()) GetCharmInfo()->SetPetNumber(0, true); else @@ -11581,7 +11587,7 @@ void Unit::RemoveCharmedBy(Unit* charmer) void Unit::RestoreFaction() { if (GetTypeId() == TYPEID_PLAYER) - ToPlayer()->setFactionForRace(GetRace()); + ToPlayer()->SetFactionForRace(GetRace()); else { if (HasUnitTypeMask(UNIT_MASK_MINION)) @@ -12052,7 +12058,7 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form, uint32 spellId) const break; } - if (GetTypeId() == TYPEID_PLAYER) + if (Player const* player = ToPlayer()) { switch (form) { @@ -12060,8 +12066,7 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form, uint32 spellId) const // Based on Hair color if (GetRace() == RACE_NIGHTELF) { - uint8 hairColor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID); - switch (hairColor) + switch (player->GetHairColorId()) { case 7: // Violet case 8: @@ -12081,7 +12086,7 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form, uint32 spellId) const // Based on Skin color else if (GetRace() == RACE_TAUREN) { - uint8 skinColor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID); + uint8 skinColor = player->GetSkinId(); // Male if (GetNativeGender() == GENDER_MALE) { @@ -12140,8 +12145,7 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form, uint32 spellId) const // Based on Hair color if (GetRace() == RACE_NIGHTELF) { - uint8 hairColor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID); - switch (hairColor) + switch (player->GetHairColorId()) { case 0: // Green case 1: // Light Green @@ -12160,7 +12164,7 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form, uint32 spellId) const // Based on Skin color else if (GetRace() == RACE_TAUREN) { - uint8 skinColor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID); + uint8 skinColor = player->GetSkinId(); // Male if (GetNativeGender() == GENDER_MALE) { diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index b705e5f9f8f..4292765833b 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -848,10 +848,12 @@ class TC_GAME_API Unit : public WorldObject uint8 GetLevel() const { return uint8(GetUInt32Value(UNIT_FIELD_LEVEL)); } uint8 GetLevelForTarget(WorldObject const* /*target*/) const override { return GetLevel(); } - void SetLevel(uint8 lvl); + void SetLevel(uint8 lvl, bool sendUpdate = true); uint8 GetRace() const { return GetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_RACE); } + void SetRace(uint8 race) { SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_RACE, race); } uint32 GetRaceMask() const { return 1 << (GetRace() - 1); } uint8 GetClass() const { return GetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS); } + void SetClass(uint8 unitClass) { SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, unitClass); } uint32 GetClassMask() const { return 1 << (GetClass() - 1); } uint8 GetGender() const { return GetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER); } void SetGender(uint8 gender) { SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, gender); } @@ -887,7 +889,7 @@ class TC_GAME_API Unit : public WorldObject int32 GetHealthGain(int32 dVal); Powers GetPowerType() const { return Powers(GetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_POWER_TYPE)); } - void SetPowerType(Powers power); + void SetPowerType(Powers power, bool sendUpdate = true); void UpdateDisplayPower(); uint32 GetPower(Powers power) const { return GetUInt32Value(UNIT_FIELD_POWER1 +power); } uint32 GetMaxPower(Powers power) const { return GetUInt32Value(UNIT_FIELD_MAXPOWER1+power); } diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index d3ca93e8ac8..46d33b10956 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1273,11 +1273,8 @@ void WorldSession::HandleAlterAppearance(WorldPacket& recvData) return; if (!Player::ValidateAppearance(_player->GetRace(), _player->GetClass(), _player->GetNativeGender(), - bs_hair->hair_id, - Color, - _player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID), - bs_facialHair->hair_id, - bs_skinColor ? bs_skinColor->hair_id : _player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID))) + bs_hair->hair_id, Color, _player->GetFaceId(), bs_facialHair->hair_id, + bs_skinColor ? bs_skinColor->hair_id : _player->GetSkinId())) return; GameObject* go = _player->FindNearestGameObjectOfType(GAMEOBJECT_TYPE_BARBER_CHAIR, 5.0f); @@ -1309,11 +1306,11 @@ void WorldSession::HandleAlterAppearance(WorldPacket& recvData) _player->ModifyMoney(-int32(cost)); // it isn't free _player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_GOLD_SPENT_AT_BARBER, cost); - _player->SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID, uint8(bs_hair->hair_id)); - _player->SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID, uint8(Color)); - _player->SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE, uint8(bs_facialHair->hair_id)); + _player->SetHairStyleId(uint8(bs_hair->hair_id)); + _player->SetHairColorId(uint8(Color)); + _player->SetFacialStyle(uint8(bs_facialHair->hair_id)); if (bs_skinColor) - _player->SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID, uint8(bs_skinColor->hair_id)); + _player->SetSkinId(uint8(bs_skinColor->hair_id)); _player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_VISIT_BARBER_SHOP, 1); diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp index 39c40dbc47d..9baa16cba72 100644 --- a/src/server/game/Handlers/SpellHandler.cpp +++ b/src/server/game/Handlers/SpellHandler.cpp @@ -636,15 +636,14 @@ void WorldSession::HandleMirrorImageDataRequest(WorldPacket& recvData) data << uint8(creator->GetGender()); data << uint8(creator->GetClass()); - if (creator->GetTypeId() == TYPEID_PLAYER) - { - Player* player = creator->ToPlayer(); - data << uint8(player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID)); - data << uint8(player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID)); - data << uint8(player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID)); - data << uint8(player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID)); - data << uint8(player->GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE)); - data << uint32(player->GetGuildId()); // unk + if (Player* player = creator->ToPlayer()) + { + data << uint8(player->GetSkinId()); + data << uint8(player->GetFaceId()); + data << uint8(player->GetHairStyleId()); + data << uint8(player->GetHairColorId()); + data << uint8(player->GetFacialStyle()); + data << uint32(player->GetGuildId()); static EquipmentSlots const itemSlots[] = { diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp index ac9145f89d7..448508ed75c 100644 --- a/src/server/scripts/Commands/cs_character.cpp +++ b/src/server/scripts/Commands/cs_character.cpp @@ -239,7 +239,7 @@ public: { player->GiveLevel(newLevel); player->InitTalentForLevel(); - player->SetUInt32Value(PLAYER_XP, 0); + player->SetXP(0); if (handler->needReportToTarget(player)) { diff --git a/src/server/scripts/Commands/cs_reset.cpp b/src/server/scripts/Commands/cs_reset.cpp index 8f9e4784977..1541764d150 100644 --- a/src/server/scripts/Commands/cs_reset.cpp +++ b/src/server/scripts/Commands/cs_reset.cpp @@ -107,9 +107,9 @@ public: if (!player->HasAuraType(SPELL_AURA_MOD_SHAPESHIFT)) player->SetShapeshiftForm(FORM_NONE); - player->setFactionForRace(player->GetRace()); + player->SetFactionForRace(player->GetRace()); - player->SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_POWER_TYPE, powerType); + player->SetPowerType(Powers(powerType), false); // reset only if player not in some form; if (player->GetShapeshiftForm() == FORM_NONE) @@ -147,7 +147,7 @@ public: target->InitTaxiNodesForLevel(); target->InitGlyphsForLevel(); target->InitTalentForLevel(); - target->SetUInt32Value(PLAYER_XP, 0); + target->SetXP(0); target->_ApplyAllLevelScaleItemMods(true); diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index a435b045c81..946a6e82db7 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -3756,7 +3756,7 @@ class spell_gen_gm_freeze : public AuraScript if (Player* player = GetTarget()->ToPlayer()) { // Reset player faction + allow combat + allow duels - player->setFactionForRace(player->GetRace()); + player->SetFactionForRace(player->GetRace()); player->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); // save player player->SaveToDB(); |