diff --git a/src/gameui/CGTooltip.cpp b/src/gameui/CGTooltip.cpp index 3f873a4..d4cd380 100644 --- a/src/gameui/CGTooltip.cpp +++ b/src/gameui/CGTooltip.cpp @@ -1,11 +1,29 @@ #include "gameui/CGTooltip.hpp" +#include "gameui/CGTooltipScript.hpp" +#include -CGTooltip::CGTooltip(CSimpleFrame* parent) : CSimpleFrame(parent) { -} +int32_t CGTooltip::s_metatable; CSimpleFrame* CGTooltip::Create(CSimpleFrame* parent) { // TODO: Data = CDataAllocator__GetData(0, ".?AVCGTooltip@@", -2); - - auto m = SMemAlloc(sizeof(CGTooltip), __FILE__, __LINE__, 0); - return m ? (new (m) CGTooltip(parent)) : nullptr; + return NEW(CGTooltip, parent); +} + +void CGTooltip::CreateScriptMetaTable() { + lua_State* L = FrameScript_GetContext(); + int32_t ref = FrameScript_Object::CreateScriptMetaTable(L, &CGTooltip::RegisterScriptMethods); + CGTooltip::s_metatable = ref; +} + +void CGTooltip::RegisterScriptMethods(lua_State* L) { + CSimpleFrame::RegisterScriptMethods(L); + FrameScript_Object::FillScriptMethodTable(L, CGTooltipMethods, NUM_CGTOOLTIP_SCRIPT_METHODS); +} + +int32_t CGTooltip::GetScriptMetaTable() { + return CGTooltip::s_metatable; +} + +CGTooltip::CGTooltip(CSimpleFrame* parent) + : CSimpleFrame(parent) { } diff --git a/src/gameui/CGTooltip.hpp b/src/gameui/CGTooltip.hpp index 7e12596..b532723 100644 --- a/src/gameui/CGTooltip.hpp +++ b/src/gameui/CGTooltip.hpp @@ -6,9 +6,19 @@ class CGTooltip : public CSimpleFrame { public: - CGTooltip(CSimpleFrame* parent); + // Static variables + static int32_t s_metatable; + // Static functions static CSimpleFrame* Create(CSimpleFrame* parent); + static void CreateScriptMetaTable(); + static void RegisterScriptMethods(lua_State* L); + + // Virtual member functions + virtual int32_t GetScriptMetaTable(); + + // Member functions + CGTooltip(CSimpleFrame* parent); }; #endif // GAME_UI_CGTOOLTIP_HPP diff --git a/src/gameui/CGTooltipScript.cpp b/src/gameui/CGTooltipScript.cpp new file mode 100644 index 0000000..a9482ae --- /dev/null +++ b/src/gameui/CGTooltipScript.cpp @@ -0,0 +1,352 @@ +#include "gameui/CGTooltipScript.hpp" +#include "util/Lua.hpp" +#include "util/Unimplemented.hpp" + +static int32_t Script_AddFontStrings(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetMinimumWidth(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_GetMinimumWidth(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetPadding(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_GetPadding(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_IsOwned(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_GetOwner(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetOwner(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_GetAnchorType(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetAnchorType(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_ClearLines(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_AddLine(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_AddDoubleLine(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_AddTexture(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetText(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_AppendText(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_FadeOut(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetHyperlink(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetAction(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetPetAction(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetShapeshift(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetPossession(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetTracking(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetSpell(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetSpellByID(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetGlyph(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetInventoryItem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetLootItem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetQuestItem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetQuestLogItem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetTrainerService(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetTradeSkillItem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetMerchantItem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetMerchantCostItem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetTradePlayerItem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetTradeTargetItem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetBagItem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetUnit(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetUnitBuff(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetUnitDebuff(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetUnitAura(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetTalent(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetSendMailItem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetInboxItem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetAuctionSellItem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetAuctionItem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_NumLines(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetQuestRewardSpell(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetQuestLogRewardSpell(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetHyperlinkCompareItem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetBuybackItem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetLootRollItem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetSocketedItem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetSocketGem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetExistingSocketGem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetGuildBankItem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_IsUnit(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_GetUnit(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_GetItem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_GetSpell(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetTotem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetCurrencyToken(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetBackpackToken(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_IsEquippedItem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetQuestLogSpecialItem(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetEquipmentSet(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetFrameStack(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetLFGDungeonReward(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + +static int32_t Script_SetLFGCompletionReward(lua_State* L) { + WHOA_UNIMPLEMENTED(0); +} + + +FrameScript_Method CGTooltipMethods[NUM_CGTOOLTIP_SCRIPT_METHODS] = { + { "AddFontStrings", &Script_AddFontStrings }, + { "SetMinimumWidth", &Script_SetMinimumWidth }, + { "GetMinimumWidth", &Script_GetMinimumWidth }, + { "SetPadding", &Script_SetPadding }, + { "GetPadding", &Script_GetPadding }, + { "IsOwned", &Script_IsOwned }, + { "GetOwner", &Script_GetOwner }, + { "SetOwner", &Script_SetOwner }, + { "GetAnchorType", &Script_GetAnchorType }, + { "SetAnchorType", &Script_SetAnchorType }, + { "ClearLines", &Script_ClearLines }, + { "AddLine", &Script_AddLine }, + { "AddDoubleLine", &Script_AddDoubleLine }, + { "AddTexture", &Script_AddTexture }, + { "SetText", &Script_SetText }, + { "AppendText", &Script_AppendText }, + { "FadeOut", &Script_FadeOut }, + { "SetHyperlink", &Script_SetHyperlink }, + { "SetAction", &Script_SetAction }, + { "SetPetAction", &Script_SetPetAction }, + { "SetShapeshift", &Script_SetShapeshift }, + { "SetPossession", &Script_SetPossession }, + { "SetTracking", &Script_SetTracking }, + { "SetSpell", &Script_SetSpell }, + { "SetSpellByID", &Script_SetSpellByID }, + { "SetGlyph", &Script_SetGlyph }, + { "SetInventoryItem", &Script_SetInventoryItem }, + { "SetLootItem", &Script_SetLootItem }, + { "SetQuestItem", &Script_SetQuestItem }, + { "SetQuestLogItem", &Script_SetQuestLogItem }, + { "SetTrainerService", &Script_SetTrainerService }, + { "SetTradeSkillItem", &Script_SetTradeSkillItem }, + { "SetMerchantItem", &Script_SetMerchantItem }, + { "SetMerchantCostItem", &Script_SetMerchantCostItem }, + { "SetTradePlayerItem", &Script_SetTradePlayerItem }, + { "SetTradeTargetItem", &Script_SetTradeTargetItem }, + { "SetBagItem", &Script_SetBagItem }, + { "SetUnit", &Script_SetUnit }, + { "SetUnitBuff", &Script_SetUnitBuff }, + { "SetUnitDebuff", &Script_SetUnitDebuff }, + { "SetUnitAura", &Script_SetUnitAura }, + { "SetTalent", &Script_SetTalent }, + { "SetSendMailItem", &Script_SetSendMailItem }, + { "SetInboxItem", &Script_SetInboxItem }, + { "SetAuctionSellItem", &Script_SetAuctionSellItem }, + { "SetAuctionItem", &Script_SetAuctionItem }, + { "NumLines", &Script_NumLines }, + { "SetQuestRewardSpell", &Script_SetQuestRewardSpell }, + { "SetQuestLogRewardSpell", &Script_SetQuestLogRewardSpell }, + { "SetHyperlinkCompareItem", &Script_SetHyperlinkCompareItem }, + { "SetBuybackItem", &Script_SetBuybackItem }, + { "SetLootRollItem", &Script_SetLootRollItem }, + { "SetSocketedItem", &Script_SetSocketedItem }, + { "SetSocketGem", &Script_SetSocketGem }, + { "SetExistingSocketGem", &Script_SetExistingSocketGem }, + { "SetGuildBankItem", &Script_SetGuildBankItem }, + { "IsUnit", &Script_IsUnit }, + { "GetUnit", &Script_GetUnit }, + { "GetItem", &Script_GetItem }, + { "GetSpell", &Script_GetSpell }, + { "SetTotem", &Script_SetTotem }, + { "SetCurrencyToken", &Script_SetCurrencyToken }, + { "SetBackpackToken", &Script_SetBackpackToken }, + { "IsEquippedItem", &Script_IsEquippedItem }, + { "SetQuestLogSpecialItem", &Script_SetQuestLogSpecialItem }, + { "SetEquipmentSet", &Script_SetEquipmentSet }, + { "SetFrameStack", &Script_SetFrameStack }, + { "SetLFGDungeonReward", &Script_SetLFGDungeonReward }, + { "SetLFGCompletionReward", &Script_SetLFGCompletionReward } +}; diff --git a/src/gameui/CGTooltipScript.hpp b/src/gameui/CGTooltipScript.hpp new file mode 100644 index 0000000..4154cde --- /dev/null +++ b/src/gameui/CGTooltipScript.hpp @@ -0,0 +1,10 @@ +#ifndef GAME_UI_CGTOOLTIP_SCRIPT_HPP +#define GAME_UI_CGTOOLTIP_SCRIPT_HPP + +#include "ui/FrameScript.hpp" + +#define NUM_CGTOOLTIP_SCRIPT_METHODS 69 + +extern FrameScript_Method CGTooltipMethods[NUM_CGTOOLTIP_SCRIPT_METHODS]; + +#endif diff --git a/src/gameui/GameScriptFunctions.cpp b/src/gameui/GameScriptFunctions.cpp index 70c2998..f356375 100644 --- a/src/gameui/GameScriptFunctions.cpp +++ b/src/gameui/GameScriptFunctions.cpp @@ -1,5 +1,6 @@ #include "gameui/GameScriptFunctions.hpp" #include "gameui/CGGameUI.hpp" +#include "gameui/CGTooltip.hpp" #include "ui/FrameXML.hpp" #include "ui/FrameScript.hpp" #include "util/Lua.hpp" @@ -105,7 +106,9 @@ static int32_t Script_Screenshot(lua_State* L) { } static int32_t Script_GetFramerate(lua_State* L) { - WHOA_UNIMPLEMENTED(0); + // TODO: v1 = sub_77F440(); + lua_pushnumber(L, 60.0); + return 1; } static int32_t Script_TogglePerformanceDisplay(lua_State* L) { @@ -626,7 +629,13 @@ static int32_t Script_GetCursorPosition(lua_State* L) { } static int32_t Script_GetNetStats(lua_State* L) { - WHOA_UNIMPLEMENTED(0); + // v1 = ClientServices__Connection(); + // NetClient__GetNetStats(v1, &v5, &v4, (int*)&v3); + // TODO: + lua_pushnumber(L, 0.0); + lua_pushnumber(L, 0.0); + lua_pushnumber(L, 0.0); + return 3; } static int32_t Script_SitStandOrDescendStart(lua_State* L) { @@ -949,7 +958,9 @@ static int32_t Script_IsItemInRange(lua_State* L) { } static int32_t Script_GetNumAddOns(lua_State* L) { - WHOA_UNIMPLEMENTED(0); + // TODO: v2 = (double)(unsigned int)sub_5F4FF0(v1); + lua_pushnumber(L, 0.0); + return 1; } static int32_t Script_GetAddOnInfo(lua_State* L) { @@ -1595,6 +1606,7 @@ FrameScript_Method GameScript::s_ScriptFunctions_Game[NUM_SCRIPT_FUNCTIONS_GAME] void LoadScriptFunctions() { RegisterSimpleFrameScriptMethods(); + CGTooltip::CreateScriptMetaTable(); // TODO