Update Player for 322a
--HG-- branch : trunk
This commit is contained in:
+378
-188
File diff suppressed because it is too large
Load Diff
+81
-52
@@ -38,6 +38,7 @@
|
||||
#include "AchievementMgr.h"
|
||||
#include "ReputationMgr.h"
|
||||
#include "BattleGround.h"
|
||||
#include "DBCEnums.h"
|
||||
|
||||
#include<string>
|
||||
#include<vector>
|
||||
@@ -178,7 +179,7 @@ struct ActionButton
|
||||
}
|
||||
};
|
||||
|
||||
#define MAX_ACTION_BUTTONS 132 //checked in 2.3.0
|
||||
#define MAX_ACTION_BUTTONS 144 //checked in 3.2.0
|
||||
|
||||
typedef std::map<uint8,ActionButton> ActionButtonList;
|
||||
|
||||
@@ -339,10 +340,10 @@ enum LfgType
|
||||
|
||||
enum LfgRoles
|
||||
{
|
||||
LEADER = 1,
|
||||
TANK = 2,
|
||||
HEALER = 4,
|
||||
DAMAGE = 8
|
||||
LEADER = 0x01,
|
||||
TANK = 0x02,
|
||||
HEALER = 0x04,
|
||||
DAMAGE = 0x08
|
||||
};
|
||||
|
||||
struct LookingForGroupSlot
|
||||
@@ -438,7 +439,9 @@ enum PlayerFlags
|
||||
PLAYER_FLAGS_UNK22 = 0x00200000,
|
||||
PLAYER_FLAGS_UNK23 = 0x00400000,
|
||||
PLAYER_ALLOW_ONLY_ABILITY = 0x00800000, // used by bladestorm and killing spree
|
||||
PLAYER_FLAGS_UNK25 = 0x01000000 // disabled all melee ability on tab include autoattack
|
||||
PLAYER_FLAGS_UNK25 = 0x01000000, // disabled all melee ability on tab include autoattack
|
||||
|
||||
PLAYER_FLAGS_NO_XP_GAIN = 0x02000000
|
||||
};
|
||||
|
||||
// used for PLAYER__FIELD_KNOWN_TITLES field (uint64), (1<<bit_index) without (-1)
|
||||
@@ -734,6 +737,9 @@ enum TransferAbortReason
|
||||
TRANSFER_ABORT_NEED_GROUP = 0x0B, // 3.1
|
||||
TRANSFER_ABORT_NOT_FOUND2 = 0x0C, // 3.1
|
||||
TRANSFER_ABORT_NOT_FOUND3 = 0x0D, // 3.1
|
||||
TRANSFER_ABORT_NOT_FOUND4 = 0x0E, // 3.2
|
||||
TRANSFER_ABORT_REALM_ONLY = 0x0F, // All players on party must be from the same realm.
|
||||
TRANSFER_ABORT_MAP_NOT_ALLOWED = 0x10, // Map can't be entered at this time.
|
||||
};
|
||||
|
||||
enum InstanceResetWarningType
|
||||
@@ -745,6 +751,19 @@ enum InstanceResetWarningType
|
||||
RAID_INSTANCE_EXPIRED = 5
|
||||
};
|
||||
|
||||
// PLAYER_FIELD_ARENA_TEAM_INFO_1_1 offsets
|
||||
enum ArenaTeamInfoType
|
||||
{
|
||||
ARENA_TEAM_ID = 0,
|
||||
ARENA_TEAM_TYPE = 1, // new in 3.2 - team type?
|
||||
ARENA_TEAM_MEMBER = 2, // 0 - captain, 1 - member
|
||||
ARENA_TEAM_GAMES_WEEK = 3,
|
||||
ARENA_TEAM_GAMES_SEASON = 4,
|
||||
ARENA_TEAM_WINS_SEASON = 5,
|
||||
ARENA_TEAM_PERSONAL_RATING = 6,
|
||||
ARENA_TEAM_END = 7
|
||||
};
|
||||
|
||||
class InstanceSave;
|
||||
|
||||
enum RestType
|
||||
@@ -988,12 +1007,11 @@ class MANGOS_DLL_SPEC Player : public Unit
|
||||
|
||||
bool IsInWater() const { return m_isInWater; }
|
||||
bool IsUnderWater() const;
|
||||
bool IsFalling() { return GetPositionZ() < m_lastFallZ; }
|
||||
|
||||
void SendInitialPacketsBeforeAddToMap();
|
||||
void SendInitialPacketsAfterAddToMap();
|
||||
void SendTransferAborted(uint32 mapid, uint8 reason, uint8 arg = 0);
|
||||
void SendInstanceResetWarning(uint32 mapid, uint32 difficulty, uint32 time);
|
||||
void SendInstanceResetWarning(uint32 mapid, Difficulty difficulty, uint32 time);
|
||||
|
||||
Creature* GetNPCIfCanInteractWith(uint64 guid, uint32 npcflagmask);
|
||||
bool CanInteractWithNPCs(bool alive = true) const;
|
||||
@@ -1001,13 +1019,13 @@ class MANGOS_DLL_SPEC Player : public Unit
|
||||
|
||||
bool ToggleAFK();
|
||||
bool ToggleDND();
|
||||
bool isAFK() const { return HasFlag(PLAYER_FLAGS,PLAYER_FLAGS_AFK); };
|
||||
bool isDND() const { return HasFlag(PLAYER_FLAGS,PLAYER_FLAGS_DND); };
|
||||
bool isAFK() const { return HasFlag(PLAYER_FLAGS,PLAYER_FLAGS_AFK); }
|
||||
bool isDND() const { return HasFlag(PLAYER_FLAGS,PLAYER_FLAGS_DND); }
|
||||
uint8 chatTag() const;
|
||||
std::string afkMsg;
|
||||
std::string dndMsg;
|
||||
|
||||
uint32 GetBarberShopCost(uint8 newhairstyle, uint8 newhaircolor, uint8 newfacialhair);
|
||||
uint32 GetBarberShopCost(uint8 newhairstyle, uint8 newhaircolor, uint8 newfacialhair, BarberShopStyleEntry const* newSkin=NULL);
|
||||
|
||||
PlayerSocial *GetSocial() { return m_social; }
|
||||
|
||||
@@ -1039,8 +1057,8 @@ class MANGOS_DLL_SPEC Player : public Unit
|
||||
time_t m_logintime;
|
||||
time_t m_Last_tick;
|
||||
uint32 m_Played_time[MAX_PLAYED_TIME_INDEX];
|
||||
uint32 GetTotalPlayedTime() { return m_Played_time[PLAYED_TIME_TOTAL]; };
|
||||
uint32 GetLevelPlayedTime() { return m_Played_time[PLAYED_TIME_LEVEL]; };
|
||||
uint32 GetTotalPlayedTime() { return m_Played_time[PLAYED_TIME_TOTAL]; }
|
||||
uint32 GetLevelPlayedTime() { return m_Played_time[PLAYED_TIME_LEVEL]; }
|
||||
|
||||
void setDeathState(DeathState s); // overwrite Unit::setDeathState
|
||||
|
||||
@@ -1051,21 +1069,21 @@ class MANGOS_DLL_SPEC Player : public Unit
|
||||
inn_pos_y = y;
|
||||
inn_pos_z = z;
|
||||
time_inn_enter = time;
|
||||
};
|
||||
}
|
||||
|
||||
float GetRestBonus() const { return m_rest_bonus; };
|
||||
float GetRestBonus() const { return m_rest_bonus; }
|
||||
void SetRestBonus(float rest_bonus_new);
|
||||
|
||||
RestType GetRestType() const { return rest_type; };
|
||||
void SetRestType(RestType n_r_type) { rest_type = n_r_type; };
|
||||
RestType GetRestType() const { return rest_type; }
|
||||
void SetRestType(RestType n_r_type) { rest_type = n_r_type; }
|
||||
|
||||
uint32 GetInnPosMapId() const { return inn_pos_mapid; };
|
||||
float GetInnPosX() const { return inn_pos_x; };
|
||||
float GetInnPosY() const { return inn_pos_y; };
|
||||
float GetInnPosZ() const { return inn_pos_z; };
|
||||
uint32 GetInnPosMapId() const { return inn_pos_mapid; }
|
||||
float GetInnPosX() const { return inn_pos_x; }
|
||||
float GetInnPosY() const { return inn_pos_y; }
|
||||
float GetInnPosZ() const { return inn_pos_z; }
|
||||
|
||||
int GetTimeInnEnter() const { return time_inn_enter; };
|
||||
void UpdateInnerTime (int time) { time_inn_enter = time; };
|
||||
int GetTimeInnEnter() const { return time_inn_enter; }
|
||||
void UpdateInnerTime (int time) { time_inn_enter = time; }
|
||||
|
||||
Pet* GetPet() const;
|
||||
Pet* SummonPet(uint32 entry, float x, float y, float z, float ang, PetType petType, uint32 despwtime);
|
||||
@@ -1324,12 +1342,12 @@ class MANGOS_DLL_SPEC Player : public Unit
|
||||
void SendQuestUpdateAddItem( Quest const* pQuest, uint32 item_idx, uint32 count );
|
||||
void SendQuestUpdateAddCreatureOrGo( Quest const* pQuest, uint64 guid, uint32 creatureOrGO_idx, uint32 old_count, uint32 add_count );
|
||||
|
||||
uint64 GetDivider() { return m_divider; };
|
||||
void SetDivider( uint64 guid ) { m_divider = guid; };
|
||||
uint64 GetDivider() { return m_divider; }
|
||||
void SetDivider( uint64 guid ) { m_divider = guid; }
|
||||
|
||||
uint32 GetInGameTime() { return m_ingametime; };
|
||||
uint32 GetInGameTime() { return m_ingametime; }
|
||||
|
||||
void SetInGameTime( uint32 time ) { m_ingametime = time; };
|
||||
void SetInGameTime( uint32 time ) { m_ingametime = time; }
|
||||
|
||||
void AddTimedQuest( uint32 quest_id ) { m_timedquests.insert(quest_id); }
|
||||
void RemoveTimedQuest( uint32 quest_id ) { m_timedquests.erase(quest_id); }
|
||||
@@ -1421,15 +1439,14 @@ class MANGOS_DLL_SPEC Player : public Unit
|
||||
void AddNewMailDeliverTime(time_t deliver_time);
|
||||
bool IsMailsLoaded() const { return m_mailsLoaded; }
|
||||
|
||||
//void SetMail(Mail *m);
|
||||
void RemoveMail(uint32 id);
|
||||
|
||||
void AddMail(Mail* mail) { m_mail.push_front(mail);}// for call from WorldSession::SendMailTo
|
||||
uint32 GetMailSize() { return m_mail.size();};
|
||||
uint32 GetMailSize() { return m_mail.size();}
|
||||
Mail* GetMail(uint32 id);
|
||||
|
||||
PlayerMails::iterator GetMailBegin() { return m_mail.begin();};
|
||||
PlayerMails::iterator GetMailEnd() { return m_mail.end();};
|
||||
PlayerMails::iterator GetMailBegin() { return m_mail.begin();}
|
||||
PlayerMails::iterator GetMailEnd() { return m_mail.end();}
|
||||
|
||||
/*********************************************************/
|
||||
/*** MAILED ITEMS SYSTEM ***/
|
||||
@@ -1575,7 +1592,7 @@ class MANGOS_DLL_SPEC Player : public Unit
|
||||
m_resurrectZ = Z;
|
||||
m_resurrectHealth = health;
|
||||
m_resurrectMana = mana;
|
||||
};
|
||||
}
|
||||
void clearResurrectRequestData() { setResurrectRequestData(0,0,0.0f,0.0f,0.0f,0,0); }
|
||||
bool isRessurectRequestedBy(uint64 guid) const { return m_resurrectGUID == guid; }
|
||||
bool isRessurectRequested() const { return m_resurrectGUID != 0; }
|
||||
@@ -1626,6 +1643,7 @@ class MANGOS_DLL_SPEC Player : public Unit
|
||||
void UpdateDuelFlag(time_t currTime);
|
||||
void CheckDuelDistance(time_t currTime);
|
||||
void DuelComplete(DuelCompleteType type);
|
||||
void SendDuelCountdown(uint32 counter);
|
||||
|
||||
bool IsGroupVisibleFor(Player* p) const;
|
||||
bool IsInSameGroupWith(Player const* p) const;
|
||||
@@ -1646,19 +1664,22 @@ class MANGOS_DLL_SPEC Player : public Unit
|
||||
static void RemovePetitionsAndSigns(uint64 guid, uint32 type);
|
||||
|
||||
// Arena Team
|
||||
void SetInArenaTeam(uint32 ArenaTeamId, uint8 slot)
|
||||
void SetInArenaTeam(uint32 ArenaTeamId, uint8 slot, uint8 type)
|
||||
{
|
||||
SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (slot * 6), ArenaTeamId);
|
||||
SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (slot * ARENA_TEAM_END) + ARENA_TEAM_ID, ArenaTeamId);
|
||||
SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (slot * ARENA_TEAM_END) + ARENA_TEAM_TYPE, type);
|
||||
}
|
||||
uint32 GetArenaTeamId(uint8 slot) { return GetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (slot * 6)); }
|
||||
uint32 GetArenaTeamId(uint8 slot) { return GetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (slot * ARENA_TEAM_END)); }
|
||||
static uint32 GetArenaTeamIdFromDB(uint64 guid, uint8 slot);
|
||||
void SetArenaTeamIdInvited(uint32 ArenaTeamId) { m_ArenaTeamIdInvited = ArenaTeamId; }
|
||||
uint32 GetArenaTeamIdInvited() { return m_ArenaTeamIdInvited; }
|
||||
static void LeaveAllArenaTeams(uint64 guid);
|
||||
|
||||
void SetDifficulty(uint32 dungeon_difficulty) { m_dungeonDifficulty = dungeon_difficulty; }
|
||||
uint8 GetDifficulty() { return m_dungeonDifficulty; }
|
||||
bool IsHeroic() { return m_dungeonDifficulty == DIFFICULTY_HEROIC; }
|
||||
Difficulty GetDifficulty(bool isRaid) const { return isRaid ? m_raidDifficulty : m_dungeonDifficulty; }
|
||||
Difficulty GetDungeonDifficulty() const { return m_dungeonDifficulty; }
|
||||
Difficulty GetRaidDifficulty() const { return m_raidDifficulty; }
|
||||
void SetDungeonDifficulty(Difficulty dungeon_difficulty) { m_dungeonDifficulty = dungeon_difficulty; }
|
||||
void SetRaidDifficulty(Difficulty raid_difficulty) { m_raidDifficulty = raid_difficulty; }
|
||||
|
||||
bool UpdateSkill(uint32 skill_id, uint32 step);
|
||||
bool UpdateSkillPro(uint16 SkillId, int32 Chance, uint32 step);
|
||||
@@ -1701,9 +1722,11 @@ class MANGOS_DLL_SPEC Player : public Unit
|
||||
float GetRatingCoefficient(CombatRating cr) const;
|
||||
float GetRatingBonusValue(CombatRating cr) const;
|
||||
uint32 GetMeleeCritDamageReduction(uint32 damage) const;
|
||||
uint32 GetMeleeDamageReduction(uint32 damage) const;
|
||||
uint32 GetRangedCritDamageReduction(uint32 damage) const;
|
||||
uint32 GetRangedDamageReduction(uint32 damage) const;
|
||||
uint32 GetSpellCritDamageReduction(uint32 damage) const;
|
||||
uint32 GetDotDamageReduction(uint32 damage) const;
|
||||
uint32 GetSpellDamageReduction(uint32 damage) const;
|
||||
uint32 GetBaseSpellPowerBonus() { return m_baseSpellPower; }
|
||||
|
||||
float GetExpertiseDodgeOrParryReduction(WeaponAttackType attType) const;
|
||||
@@ -1721,6 +1744,7 @@ class MANGOS_DLL_SPEC Player : public Unit
|
||||
void UpdateArmorPenetration(int32 amount);
|
||||
void UpdateExpertise(WeaponAttackType attType);
|
||||
void ApplyManaRegenBonus(int32 amount, bool apply);
|
||||
void ApplyHealthRegenBonus(int32 amount, bool apply);
|
||||
void UpdateManaRegen();
|
||||
|
||||
const uint64& GetLootGUID() const { return m_lootGuid; }
|
||||
@@ -1746,7 +1770,8 @@ class MANGOS_DLL_SPEC Player : public Unit
|
||||
void SendExplorationExperience(uint32 Area, uint32 Experience);
|
||||
|
||||
void SendDungeonDifficulty(bool IsInGroup);
|
||||
void ResetInstances(uint8 method);
|
||||
void SendRaidDifficulty(bool IsInGroup);
|
||||
void ResetInstances(uint8 method, bool isRaid);
|
||||
void SendResetInstanceSuccess(uint32 MapId);
|
||||
void SendResetInstanceFailed(uint32 reason, uint32 MapId);
|
||||
void SendResetFailedNotify(uint32 mapid);
|
||||
@@ -2049,8 +2074,8 @@ class MANGOS_DLL_SPEC Player : public Unit
|
||||
|
||||
bool isRested() const { return GetRestTime() >= 10*IN_MILISECONDS; }
|
||||
uint32 GetXPRestBonus(uint32 xp);
|
||||
uint32 GetRestTime() const { return m_restTime;};
|
||||
void SetRestTime(uint32 v) { m_restTime = v;};
|
||||
uint32 GetRestTime() const { return m_restTime;}
|
||||
void SetRestTime(uint32 v) { m_restTime = v;}
|
||||
|
||||
/*********************************************************/
|
||||
/*** ENVIROMENTAL SYSTEM ***/
|
||||
@@ -2163,12 +2188,12 @@ class MANGOS_DLL_SPEC Player : public Unit
|
||||
uint32 m_HomebindTimer;
|
||||
bool m_InstanceValid;
|
||||
// permanent binds and solo binds by difficulty
|
||||
BoundInstancesMap m_boundInstances[TOTAL_DIFFICULTIES];
|
||||
InstancePlayerBind* GetBoundInstance(uint32 mapid, uint8 difficulty);
|
||||
BoundInstancesMap& GetBoundInstances(uint8 difficulty) { return m_boundInstances[difficulty]; }
|
||||
InstanceSave * GetInstanceSave(uint32 mapid);
|
||||
void UnbindInstance(uint32 mapid, uint8 difficulty, bool unload = false);
|
||||
void UnbindInstance(BoundInstancesMap::iterator &itr, uint8 difficulty, bool unload = false);
|
||||
BoundInstancesMap m_boundInstances[MAX_DIFFICULTY];
|
||||
InstancePlayerBind* GetBoundInstance(uint32 mapid, Difficulty difficulty);
|
||||
BoundInstancesMap& GetBoundInstances(Difficulty difficulty) { return m_boundInstances[difficulty]; }
|
||||
InstanceSave * GetInstanceSave(uint32 mapid, bool raid);
|
||||
void UnbindInstance(uint32 mapid, Difficulty difficulty, bool unload = false);
|
||||
void UnbindInstance(BoundInstancesMap::iterator &itr, Difficulty difficulty, bool unload = false);
|
||||
InstancePlayerBind* BindToInstance(InstanceSave *save, bool permanent, bool load = false);
|
||||
void SendRaidInfo();
|
||||
void SendSavedInstances();
|
||||
@@ -2239,6 +2264,11 @@ class MANGOS_DLL_SPEC Player : public Unit
|
||||
|
||||
//bool isActiveObject() const { return true; }
|
||||
bool canSeeSpellClickOn(Creature const* creature) const;
|
||||
uint32 GetActionButtonSpell(uint8 button) const
|
||||
{
|
||||
ActionButtonList::const_iterator ab = m_actionButtons.find(button);
|
||||
return ab != m_actionButtons.end() && ab->second.uState != ACTIONBUTTON_DELETED && ab->second.GetType() == ACTION_BUTTON_SPELL ? ab->second.GetAction() : 0;
|
||||
}
|
||||
|
||||
uint32 GetChampioningFaction() const { return m_ChampioningFaction; }
|
||||
void SetChampioningFaction(uint32 faction) { m_ChampioningFaction = faction; }
|
||||
@@ -2342,7 +2372,8 @@ Spell * m_spellModTakingSpell;
|
||||
uint32 m_nextSave;
|
||||
time_t m_speakTime;
|
||||
uint32 m_speakCount;
|
||||
uint32 m_dungeonDifficulty;
|
||||
Difficulty m_dungeonDifficulty;
|
||||
Difficulty m_raidDifficulty;
|
||||
|
||||
uint32 m_atLoginFlags;
|
||||
|
||||
@@ -2382,6 +2413,7 @@ Spell * m_spellModTakingSpell;
|
||||
uint16 m_baseSpellPower;
|
||||
uint16 m_baseFeralAP;
|
||||
uint16 m_baseManaRegen;
|
||||
uint16 m_baseHealthRegen;
|
||||
|
||||
SpellModList m_spellMods[MAX_SPELLMOD];
|
||||
//uint32 m_pad;
|
||||
@@ -2407,8 +2439,6 @@ Spell * m_spellModTakingSpell;
|
||||
uint16 tradeItems[TRADE_SLOT_COUNT];
|
||||
uint32 tradeGold;
|
||||
|
||||
time_t m_nextThinkTime;
|
||||
|
||||
bool m_DailyQuestChanged;
|
||||
time_t m_lastDailyQuestTime;
|
||||
|
||||
@@ -2442,7 +2472,6 @@ Spell * m_spellModTakingSpell;
|
||||
float m_rest_bonus;
|
||||
RestType rest_type;
|
||||
////////////////////Rest System/////////////////////
|
||||
|
||||
uint32 m_resetTalentsCost;
|
||||
time_t m_resetTalentsTime;
|
||||
uint32 m_usedTalentCount;
|
||||
|
||||
Reference in New Issue
Block a user