Update Player for 322a

--HG--
branch : trunk
This commit is contained in:
n0n4m3
2009-12-17 12:06:19 +01:00
parent 02740ef79a
commit e91d18c1f5
2 changed files with 576 additions and 357 deletions
+486 -296
View File
File diff suppressed because it is too large Load Diff
+81 -52
View File
@@ -38,6 +38,7 @@
#include "AchievementMgr.h" #include "AchievementMgr.h"
#include "ReputationMgr.h" #include "ReputationMgr.h"
#include "BattleGround.h" #include "BattleGround.h"
#include "DBCEnums.h"
#include<string> #include<string>
#include<vector> #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; typedef std::map<uint8,ActionButton> ActionButtonList;
@@ -339,10 +340,10 @@ enum LfgType
enum LfgRoles enum LfgRoles
{ {
LEADER = 1, LEADER = 0x01,
TANK = 2, TANK = 0x02,
HEALER = 4, HEALER = 0x04,
DAMAGE = 8 DAMAGE = 0x08
}; };
struct LookingForGroupSlot struct LookingForGroupSlot
@@ -438,7 +439,9 @@ enum PlayerFlags
PLAYER_FLAGS_UNK22 = 0x00200000, PLAYER_FLAGS_UNK22 = 0x00200000,
PLAYER_FLAGS_UNK23 = 0x00400000, PLAYER_FLAGS_UNK23 = 0x00400000,
PLAYER_ALLOW_ONLY_ABILITY = 0x00800000, // used by bladestorm and killing spree 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) // 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_NEED_GROUP = 0x0B, // 3.1
TRANSFER_ABORT_NOT_FOUND2 = 0x0C, // 3.1 TRANSFER_ABORT_NOT_FOUND2 = 0x0C, // 3.1
TRANSFER_ABORT_NOT_FOUND3 = 0x0D, // 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 enum InstanceResetWarningType
@@ -745,6 +751,19 @@ enum InstanceResetWarningType
RAID_INSTANCE_EXPIRED = 5 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; class InstanceSave;
enum RestType enum RestType
@@ -988,12 +1007,11 @@ class MANGOS_DLL_SPEC Player : public Unit
bool IsInWater() const { return m_isInWater; } bool IsInWater() const { return m_isInWater; }
bool IsUnderWater() const; bool IsUnderWater() const;
bool IsFalling() { return GetPositionZ() < m_lastFallZ; }
void SendInitialPacketsBeforeAddToMap(); void SendInitialPacketsBeforeAddToMap();
void SendInitialPacketsAfterAddToMap(); void SendInitialPacketsAfterAddToMap();
void SendTransferAborted(uint32 mapid, uint8 reason, uint8 arg = 0); 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); Creature* GetNPCIfCanInteractWith(uint64 guid, uint32 npcflagmask);
bool CanInteractWithNPCs(bool alive = true) const; bool CanInteractWithNPCs(bool alive = true) const;
@@ -1001,13 +1019,13 @@ class MANGOS_DLL_SPEC Player : public Unit
bool ToggleAFK(); bool ToggleAFK();
bool ToggleDND(); bool ToggleDND();
bool isAFK() const { return HasFlag(PLAYER_FLAGS,PLAYER_FLAGS_AFK); }; bool isAFK() const { return HasFlag(PLAYER_FLAGS,PLAYER_FLAGS_AFK); }
bool isDND() const { return HasFlag(PLAYER_FLAGS,PLAYER_FLAGS_DND); }; bool isDND() const { return HasFlag(PLAYER_FLAGS,PLAYER_FLAGS_DND); }
uint8 chatTag() const; uint8 chatTag() const;
std::string afkMsg; std::string afkMsg;
std::string dndMsg; 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; } PlayerSocial *GetSocial() { return m_social; }
@@ -1039,8 +1057,8 @@ class MANGOS_DLL_SPEC Player : public Unit
time_t m_logintime; time_t m_logintime;
time_t m_Last_tick; time_t m_Last_tick;
uint32 m_Played_time[MAX_PLAYED_TIME_INDEX]; uint32 m_Played_time[MAX_PLAYED_TIME_INDEX];
uint32 GetTotalPlayedTime() { return m_Played_time[PLAYED_TIME_TOTAL]; }; uint32 GetTotalPlayedTime() { return m_Played_time[PLAYED_TIME_TOTAL]; }
uint32 GetLevelPlayedTime() { return m_Played_time[PLAYED_TIME_LEVEL]; }; uint32 GetLevelPlayedTime() { return m_Played_time[PLAYED_TIME_LEVEL]; }
void setDeathState(DeathState s); // overwrite Unit::setDeathState void setDeathState(DeathState s); // overwrite Unit::setDeathState
@@ -1051,21 +1069,21 @@ class MANGOS_DLL_SPEC Player : public Unit
inn_pos_y = y; inn_pos_y = y;
inn_pos_z = z; inn_pos_z = z;
time_inn_enter = time; time_inn_enter = time;
}; }
float GetRestBonus() const { return m_rest_bonus; }; float GetRestBonus() const { return m_rest_bonus; }
void SetRestBonus(float rest_bonus_new); void SetRestBonus(float rest_bonus_new);
RestType GetRestType() const { return rest_type; }; RestType GetRestType() const { return rest_type; }
void SetRestType(RestType n_r_type) { rest_type = n_r_type; }; void SetRestType(RestType n_r_type) { rest_type = n_r_type; }
uint32 GetInnPosMapId() const { return inn_pos_mapid; }; uint32 GetInnPosMapId() const { return inn_pos_mapid; }
float GetInnPosX() const { return inn_pos_x; }; float GetInnPosX() const { return inn_pos_x; }
float GetInnPosY() const { return inn_pos_y; }; float GetInnPosY() const { return inn_pos_y; }
float GetInnPosZ() const { return inn_pos_z; }; float GetInnPosZ() const { return inn_pos_z; }
int GetTimeInnEnter() const { return time_inn_enter; }; int GetTimeInnEnter() const { return time_inn_enter; }
void UpdateInnerTime (int time) { time_inn_enter = time; }; void UpdateInnerTime (int time) { time_inn_enter = time; }
Pet* GetPet() const; Pet* GetPet() const;
Pet* SummonPet(uint32 entry, float x, float y, float z, float ang, PetType petType, uint32 despwtime); 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 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 ); void SendQuestUpdateAddCreatureOrGo( Quest const* pQuest, uint64 guid, uint32 creatureOrGO_idx, uint32 old_count, uint32 add_count );
uint64 GetDivider() { return m_divider; }; uint64 GetDivider() { return m_divider; }
void SetDivider( uint64 guid ) { m_divider = guid; }; 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 AddTimedQuest( uint32 quest_id ) { m_timedquests.insert(quest_id); }
void RemoveTimedQuest( uint32 quest_id ) { m_timedquests.erase(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); void AddNewMailDeliverTime(time_t deliver_time);
bool IsMailsLoaded() const { return m_mailsLoaded; } bool IsMailsLoaded() const { return m_mailsLoaded; }
//void SetMail(Mail *m);
void RemoveMail(uint32 id); void RemoveMail(uint32 id);
void AddMail(Mail* mail) { m_mail.push_front(mail);}// for call from WorldSession::SendMailTo 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); Mail* GetMail(uint32 id);
PlayerMails::iterator GetMailBegin() { return m_mail.begin();}; PlayerMails::iterator GetMailBegin() { return m_mail.begin();}
PlayerMails::iterator GetMailEnd() { return m_mail.end();}; PlayerMails::iterator GetMailEnd() { return m_mail.end();}
/*********************************************************/ /*********************************************************/
/*** MAILED ITEMS SYSTEM ***/ /*** MAILED ITEMS SYSTEM ***/
@@ -1575,7 +1592,7 @@ class MANGOS_DLL_SPEC Player : public Unit
m_resurrectZ = Z; m_resurrectZ = Z;
m_resurrectHealth = health; m_resurrectHealth = health;
m_resurrectMana = mana; m_resurrectMana = mana;
}; }
void clearResurrectRequestData() { setResurrectRequestData(0,0,0.0f,0.0f,0.0f,0,0); } void clearResurrectRequestData() { setResurrectRequestData(0,0,0.0f,0.0f,0.0f,0,0); }
bool isRessurectRequestedBy(uint64 guid) const { return m_resurrectGUID == guid; } bool isRessurectRequestedBy(uint64 guid) const { return m_resurrectGUID == guid; }
bool isRessurectRequested() const { return m_resurrectGUID != 0; } bool isRessurectRequested() const { return m_resurrectGUID != 0; }
@@ -1626,6 +1643,7 @@ class MANGOS_DLL_SPEC Player : public Unit
void UpdateDuelFlag(time_t currTime); void UpdateDuelFlag(time_t currTime);
void CheckDuelDistance(time_t currTime); void CheckDuelDistance(time_t currTime);
void DuelComplete(DuelCompleteType type); void DuelComplete(DuelCompleteType type);
void SendDuelCountdown(uint32 counter);
bool IsGroupVisibleFor(Player* p) const; bool IsGroupVisibleFor(Player* p) const;
bool IsInSameGroupWith(Player const* 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); static void RemovePetitionsAndSigns(uint64 guid, uint32 type);
// Arena Team // 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); static uint32 GetArenaTeamIdFromDB(uint64 guid, uint8 slot);
void SetArenaTeamIdInvited(uint32 ArenaTeamId) { m_ArenaTeamIdInvited = ArenaTeamId; } void SetArenaTeamIdInvited(uint32 ArenaTeamId) { m_ArenaTeamIdInvited = ArenaTeamId; }
uint32 GetArenaTeamIdInvited() { return m_ArenaTeamIdInvited; } uint32 GetArenaTeamIdInvited() { return m_ArenaTeamIdInvited; }
static void LeaveAllArenaTeams(uint64 guid); static void LeaveAllArenaTeams(uint64 guid);
void SetDifficulty(uint32 dungeon_difficulty) { m_dungeonDifficulty = dungeon_difficulty; } Difficulty GetDifficulty(bool isRaid) const { return isRaid ? m_raidDifficulty : m_dungeonDifficulty; }
uint8 GetDifficulty() { return m_dungeonDifficulty; } Difficulty GetDungeonDifficulty() const { return m_dungeonDifficulty; }
bool IsHeroic() { return m_dungeonDifficulty == DIFFICULTY_HEROIC; } 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 UpdateSkill(uint32 skill_id, uint32 step);
bool UpdateSkillPro(uint16 SkillId, int32 Chance, 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 GetRatingCoefficient(CombatRating cr) const;
float GetRatingBonusValue(CombatRating cr) const; float GetRatingBonusValue(CombatRating cr) const;
uint32 GetMeleeCritDamageReduction(uint32 damage) const; uint32 GetMeleeCritDamageReduction(uint32 damage) const;
uint32 GetMeleeDamageReduction(uint32 damage) const;
uint32 GetRangedCritDamageReduction(uint32 damage) const; uint32 GetRangedCritDamageReduction(uint32 damage) const;
uint32 GetRangedDamageReduction(uint32 damage) const;
uint32 GetSpellCritDamageReduction(uint32 damage) const; uint32 GetSpellCritDamageReduction(uint32 damage) const;
uint32 GetDotDamageReduction(uint32 damage) const; uint32 GetSpellDamageReduction(uint32 damage) const;
uint32 GetBaseSpellPowerBonus() { return m_baseSpellPower; } uint32 GetBaseSpellPowerBonus() { return m_baseSpellPower; }
float GetExpertiseDodgeOrParryReduction(WeaponAttackType attType) const; float GetExpertiseDodgeOrParryReduction(WeaponAttackType attType) const;
@@ -1721,6 +1744,7 @@ class MANGOS_DLL_SPEC Player : public Unit
void UpdateArmorPenetration(int32 amount); void UpdateArmorPenetration(int32 amount);
void UpdateExpertise(WeaponAttackType attType); void UpdateExpertise(WeaponAttackType attType);
void ApplyManaRegenBonus(int32 amount, bool apply); void ApplyManaRegenBonus(int32 amount, bool apply);
void ApplyHealthRegenBonus(int32 amount, bool apply);
void UpdateManaRegen(); void UpdateManaRegen();
const uint64& GetLootGUID() const { return m_lootGuid; } 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 SendExplorationExperience(uint32 Area, uint32 Experience);
void SendDungeonDifficulty(bool IsInGroup); void SendDungeonDifficulty(bool IsInGroup);
void ResetInstances(uint8 method); void SendRaidDifficulty(bool IsInGroup);
void ResetInstances(uint8 method, bool isRaid);
void SendResetInstanceSuccess(uint32 MapId); void SendResetInstanceSuccess(uint32 MapId);
void SendResetInstanceFailed(uint32 reason, uint32 MapId); void SendResetInstanceFailed(uint32 reason, uint32 MapId);
void SendResetFailedNotify(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; } bool isRested() const { return GetRestTime() >= 10*IN_MILISECONDS; }
uint32 GetXPRestBonus(uint32 xp); uint32 GetXPRestBonus(uint32 xp);
uint32 GetRestTime() const { return m_restTime;}; uint32 GetRestTime() const { return m_restTime;}
void SetRestTime(uint32 v) { m_restTime = v;}; void SetRestTime(uint32 v) { m_restTime = v;}
/*********************************************************/ /*********************************************************/
/*** ENVIROMENTAL SYSTEM ***/ /*** ENVIROMENTAL SYSTEM ***/
@@ -2163,12 +2188,12 @@ class MANGOS_DLL_SPEC Player : public Unit
uint32 m_HomebindTimer; uint32 m_HomebindTimer;
bool m_InstanceValid; bool m_InstanceValid;
// permanent binds and solo binds by difficulty // permanent binds and solo binds by difficulty
BoundInstancesMap m_boundInstances[TOTAL_DIFFICULTIES]; BoundInstancesMap m_boundInstances[MAX_DIFFICULTY];
InstancePlayerBind* GetBoundInstance(uint32 mapid, uint8 difficulty); InstancePlayerBind* GetBoundInstance(uint32 mapid, Difficulty difficulty);
BoundInstancesMap& GetBoundInstances(uint8 difficulty) { return m_boundInstances[difficulty]; } BoundInstancesMap& GetBoundInstances(Difficulty difficulty) { return m_boundInstances[difficulty]; }
InstanceSave * GetInstanceSave(uint32 mapid); InstanceSave * GetInstanceSave(uint32 mapid, bool raid);
void UnbindInstance(uint32 mapid, uint8 difficulty, bool unload = false); void UnbindInstance(uint32 mapid, Difficulty difficulty, bool unload = false);
void UnbindInstance(BoundInstancesMap::iterator &itr, uint8 difficulty, bool unload = false); void UnbindInstance(BoundInstancesMap::iterator &itr, Difficulty difficulty, bool unload = false);
InstancePlayerBind* BindToInstance(InstanceSave *save, bool permanent, bool load = false); InstancePlayerBind* BindToInstance(InstanceSave *save, bool permanent, bool load = false);
void SendRaidInfo(); void SendRaidInfo();
void SendSavedInstances(); void SendSavedInstances();
@@ -2239,6 +2264,11 @@ class MANGOS_DLL_SPEC Player : public Unit
//bool isActiveObject() const { return true; } //bool isActiveObject() const { return true; }
bool canSeeSpellClickOn(Creature const* creature) const; 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; } uint32 GetChampioningFaction() const { return m_ChampioningFaction; }
void SetChampioningFaction(uint32 faction) { m_ChampioningFaction = faction; } void SetChampioningFaction(uint32 faction) { m_ChampioningFaction = faction; }
@@ -2342,7 +2372,8 @@ Spell * m_spellModTakingSpell;
uint32 m_nextSave; uint32 m_nextSave;
time_t m_speakTime; time_t m_speakTime;
uint32 m_speakCount; uint32 m_speakCount;
uint32 m_dungeonDifficulty; Difficulty m_dungeonDifficulty;
Difficulty m_raidDifficulty;
uint32 m_atLoginFlags; uint32 m_atLoginFlags;
@@ -2382,6 +2413,7 @@ Spell * m_spellModTakingSpell;
uint16 m_baseSpellPower; uint16 m_baseSpellPower;
uint16 m_baseFeralAP; uint16 m_baseFeralAP;
uint16 m_baseManaRegen; uint16 m_baseManaRegen;
uint16 m_baseHealthRegen;
SpellModList m_spellMods[MAX_SPELLMOD]; SpellModList m_spellMods[MAX_SPELLMOD];
//uint32 m_pad; //uint32 m_pad;
@@ -2407,8 +2439,6 @@ Spell * m_spellModTakingSpell;
uint16 tradeItems[TRADE_SLOT_COUNT]; uint16 tradeItems[TRADE_SLOT_COUNT];
uint32 tradeGold; uint32 tradeGold;
time_t m_nextThinkTime;
bool m_DailyQuestChanged; bool m_DailyQuestChanged;
time_t m_lastDailyQuestTime; time_t m_lastDailyQuestTime;
@@ -2442,7 +2472,6 @@ Spell * m_spellModTakingSpell;
float m_rest_bonus; float m_rest_bonus;
RestType rest_type; RestType rest_type;
////////////////////Rest System///////////////////// ////////////////////Rest System/////////////////////
uint32 m_resetTalentsCost; uint32 m_resetTalentsCost;
time_t m_resetTalentsTime; time_t m_resetTalentsTime;
uint32 m_usedTalentCount; uint32 m_usedTalentCount;