diff --git a/src/object/client/CGPlayer.cpp b/src/object/client/CGPlayer.cpp index 568baf3..6306a01 100644 --- a/src/object/client/CGPlayer.cpp +++ b/src/object/client/CGPlayer.cpp @@ -41,6 +41,10 @@ uint32_t CGPlayer::TotalRemoteFieldsSaved() { return CGPlayer::GetBaseOffsetSaved() + 173; } +uint32_t CGPlayer::GetMoney() const { + return this->Player()->coinage; +} + uint32_t CGPlayer::GetNextLevelXP() const { return this->Player()->nextLevelXP; } diff --git a/src/object/client/CGPlayer.hpp b/src/object/client/CGPlayer.hpp index 3d18372..8f2c274 100644 --- a/src/object/client/CGPlayer.hpp +++ b/src/object/client/CGPlayer.hpp @@ -149,6 +149,7 @@ class CGPlayer { static uint32_t TotalRemoteFieldsSaved(); // Public member functions + uint32_t GetMoney() const; uint32_t GetNextLevelXP() const; uint32_t GetXP() const; diff --git a/src/object/client/CGPlayer_C.cpp b/src/object/client/CGPlayer_C.cpp index 87d6b1a..805936a 100644 --- a/src/object/client/CGPlayer_C.cpp +++ b/src/object/client/CGPlayer_C.cpp @@ -6,6 +6,12 @@ #include "ui/Game.hpp" #include +CGPlayer_C* CGPlayer_C::GetActivePtr() { + return static_cast( + ClntObjMgrObjectPtr(ClntObjMgrGetActivePlayer(), TYPE_PLAYER, __FILE__, __LINE__) + ); +} + CGPlayer_C::CGPlayer_C(uint32_t time, CClientObjCreate& objCreate) : CGUnit_C(time, objCreate) { // TODO } @@ -14,6 +20,14 @@ CGPlayer_C::~CGPlayer_C() { // TODO } +uint32_t CGPlayer_C::GetMoney() const { + if (this->GetGUID() != ClntObjMgrGetActivePlayer()) { + return 0; + } + + return this->CGPlayer::GetMoney(); +} + uint32_t CGPlayer_C::GetNextLevelXP() const { if (this->GetGUID() != ClntObjMgrGetActivePlayer()) { return 0; diff --git a/src/object/client/CGPlayer_C.hpp b/src/object/client/CGPlayer_C.hpp index d58b7a0..6e6a0eb 100644 --- a/src/object/client/CGPlayer_C.hpp +++ b/src/object/client/CGPlayer_C.hpp @@ -10,11 +10,15 @@ class CreatureModelDataRec; class CGPlayer_C : public CGUnit_C, public CGPlayer { public: + // Public static functions + static CGPlayer_C* GetActivePtr(); + // Virtual public member functions virtual ~CGPlayer_C(); // Public member functions CGPlayer_C(uint32_t time, CClientObjCreate& objCreate); + uint32_t GetMoney() const; uint32_t GetNextLevelXP() const; uint32_t GetXP() const; void PostInit(uint32_t time, const CClientObjCreate& init, bool a4); diff --git a/src/ui/game/ScriptEvents.cpp b/src/ui/game/ScriptEvents.cpp index 89d08bf..a607076 100644 --- a/src/ui/game/ScriptEvents.cpp +++ b/src/ui/game/ScriptEvents.cpp @@ -282,7 +282,15 @@ int32_t Script_UnitLevel(lua_State* L) { } int32_t Script_GetMoney(lua_State* L) { - WHOA_UNIMPLEMENTED(0); + auto player = CGPlayer_C::GetActivePtr(); + + if (player) { + lua_pushnumber(L, player->GetMoney()); + } else { + lua_pushnumber(L, 0.0f); + } + + return 1; } int32_t Script_GetHonorCurrency(lua_State* L) {