Update GWCA (Closes #1527) (#1528)

This commit is contained in:
2026-04-29 11:47:00 +02:00
parent 9888bc741f
commit b7d58f5e4c
16 changed files with 654 additions and 440 deletions
+293 -151
View File
@@ -13,7 +13,7 @@ namespace Daybreak.API.Interop
{
/// <summary>
/// P/Invoke bindings for 525 C++ exports from gwca.dll (0 skipped).
/// P/Invoke bindings for 527 C++ exports from gwca.dll (0 skipped).
/// Nested classes mirror the C++ namespace hierarchy (e.g. GW::Agents → GWCA.GW.Agents).
/// Types annotated with [GWCAEquivalent] are used in signatures where available.
/// </summary>
@@ -23,27 +23,25 @@ public static unsafe partial class GWCA
// ═══════════════════════════════════════════════════
// Parsed structs diagnostic:
// [NAMESPACE] GWCA.GW popped at line 46
// [NAMESPACE] GWCA.GW.Agents popped at line 124
// [NAMESPACE] GWCA.GW.Agents popped at line 196
// [NAMESPACE] GWCA.GW.CameraMgr popped at line 35
// [NAMESPACE] GWCA.GW.Chat popped at line 21
// [NAMESPACE] GWCA.GW.Chat.TextColor popped at line 49
// [NAMESPACE] GWCA.GW.Constants popped at line 25
// [NAMESPACE] GWCA.GW.Constants.Camera popped at line 357
// [NAMESPACE] GWCA.GW.Constants.DialogID popped at line 331
// [NAMESPACE] GWCA.GW.Constants.HealthbarHeight popped at line 232
// [NAMESPACE] GWCA.GW.Constants.DialogID popped at line 282
// [NAMESPACE] GWCA.GW.Constants.ItemID popped at line 201
// [NAMESPACE] GWCA.GW.Constants.ModelID.Minipet.SummoningStone.FoW.UW.FoW.Urgoz.Deep.DoA.EotnDungeons.BonusMissionPack.EotnDungeons popped at line 444
// [NAMESPACE] GWCA.GW.Constants.ModelID.Minipet.SummoningStone.FoW.UW.FoW.Urgoz.Deep.DoA.PolymockSummon popped at line 384
// [NAMESPACE] GWCA.GW.Constants.Preference popped at line 62
// [NAMESPACE] GWCA.GW.Constants.Range popped at line 288
// [NAMESPACE] GWCA.GW.Constants.SqrRange popped at line 298
// [NAMESPACE] GWCA.GW.Constants.Range popped at line 239
// [NAMESPACE] GWCA.GW.Constants.SqrRange popped at line 249
// [NAMESPACE] GWCA.GW.Effects popped at line 60
// [NAMESPACE] GWCA.GW.EventMgr popped at line 32
// [NAMESPACE] GWCA.GW.FriendListMgr popped at line 32
// [NAMESPACE] GWCA.GW.GameThread popped at line 32
// [NAMESPACE] GWCA.GW.GuildMgr popped at line 21
// [NAMESPACE] GWCA.GW.Hook popped at line 22
// [NAMESPACE] GWCA.GW.Items popped at line 95
// [NAMESPACE] GWCA.GW.Items popped at line 97
// [NAMESPACE] GWCA.GW.Map popped at line 165
// [NAMESPACE] GWCA.GW.MemoryMgr popped at line 30
// [NAMESPACE] GWCA.GW.Merchant popped at line 26
@@ -59,9 +57,10 @@ public static unsafe partial class GWCA
// [NAMESPACE] GWCA.GW.Scanner popped at line 52
// [NAMESPACE] GWCA.GW.SkillbarMgr popped at line 39
// [NAMESPACE] GWCA.GW.StoC popped at line 50
// [NAMESPACE] GWCA.GW.TargetFilter popped at line 112
// [NAMESPACE] GWCA.GW.Trade popped at line 22
// [NAMESPACE] GWCA.GW.UI popped at line 774
// [NAMESPACE] GWCA.GW.UI.UIPacket popped at line 29
// [NAMESPACE] GWCA.GW.UI.UIPacket popped at line 30
// [NAMESPACE] GWCA.GWCA popped at line 15
// GWCA.GW.AccountContext: 9 fields [OK]
// GWCA.GW.AccountInfo: 7 fields [OK]
@@ -117,8 +116,9 @@ public static unsafe partial class GWCA
// GWCA.GW.HeroInfo: 30 fields [OK]
// GWCA.GW.HeroPartyMember: 6 fields [OK]
// GWCA.GW.Inventory: 39 fields [OK]
// GWCA.GW.InventoryTableEntry: 3 fields [OK]
// GWCA.GW.Item: 26 fields [OK]
// GWCA.GW.ItemContext: 12 fields [OK]
// GWCA.GW.ItemContext: 43 fields [OK]
// GWCA.GW.ItemData: 4 fields [OK]
// GWCA.GW.ItemFormula: 5 fields [OK]
// GWCA.GW.ItemModifier: 1 fields [OK]
@@ -462,6 +462,11 @@ public static unsafe partial class GWCA
[LibraryImport(DllName, EntryPoint = "?GetAgentIdByLoginNumber@Agents@GW@@YAII@Z")]
public static partial uint GetAgentIdByLoginNumber(uint value);
// GW::Agents::GetAgentMatchesFlags
[LibraryImport(DllName, EntryPoint = "?GetAgentMatchesFlags@Agents@GW@@YA_NPBUAgent@2@W4AgentTargetFlags@2@@Z")]
[return: MarshalAs(UnmanagedType.U1)]
public static partial bool GetAgentMatchesFlags(global::Daybreak.API.Interop.GuildWars.Agent* agent1, global::Daybreak.API.Interop.GWCA.GW.AgentTargetFlags agentTargetFlags2);
// GW::Agents::GetAgentPrimary
[LibraryImport(DllName, EntryPoint = "?GetAgentPrimary@Agents@GW@@YA?AW4ProfessionByte@Constants@2@I@Z")]
public static partial global::Daybreak.API.Interop.GWCA.GW.Constants.ProfessionByte GetAgentPrimary(uint value);
@@ -1197,6 +1202,10 @@ public static unsafe partial class GWCA
[LibraryImport(DllName, EntryPoint = "?GetGoldAmountOnCharacter@Items@GW@@YAIXZ")]
public static partial uint GetGoldAmountOnCharacter();
// GW::Items::GetHeroInventory
[LibraryImport(DllName, EntryPoint = "?GetHeroInventory@Items@GW@@YAPAUInventory@2@W4HeroID@Constants@2@@Z")]
public static partial global::Daybreak.API.Interop.GuildWars.Inventory* GetHeroInventory(global::Daybreak.API.Interop.GWCA.GW.Constants.HeroID heroID);
// GW::Items::GetHoveredItem
[LibraryImport(DllName, EntryPoint = "?GetHoveredItem@Items@GW@@YAPAUItem@2@XZ")]
public static partial global::Daybreak.API.Interop.GuildWars.ItemStruct* GetHoveredItem();
@@ -2816,6 +2825,37 @@ public static unsafe partial class GWCA
public static partial class GW
{
public enum AgentTargetFlags : uint
{
Include_Ally = 0x000001,
Include_Neutral = 0x000002,
Accept_HasQuest = 0x000004,
Include_Enemy = 0x000008,
Include_SpiritPet = 0x000010,
Accept_ActiveState = 0x000020,
Include_Minion = 0x000040,
Include_NPCMinipet = 0x000080,
Accept_Player = 0x000100,
Type_Gadget = 0x000200,
Type_Item = 0x000400,
Exclude_DeadAlly = 0x000800,
Exclude_DeadNeutral = 0x001000,
Exclude_DeadEnemy = 0x002000,
Exclude_DeadSpiritPet = 0x004000,
Exclude_DeadMinion = 0x008000,
Exclude_DeadNPCMinipet = 0x010000,
Exclude_UsedCorpse = 0x020000,
Exclude_AliveAlly = 0x040000,
Exclude_AliveNeutral = 0x080000,
Exclude_AliveEnemy = 0x100000,
Exclude_AliveSpiritPet = 0x200000,
Exclude_AliveMinion = 0x400000,
Exclude_AliveNPCMinipet = 0x800000,
Exclude_BeingObserved = 0x2000000,
ZeroPriority = 0x4000000,
NPCMinipet_ZeroPriority = 0x8000000,
}
public enum CallTargetType : uint
{
Following = 0x3,
@@ -3300,7 +3340,7 @@ public static unsafe partial class GWCA
Miku,
ZeiRi,
Devona,
GhostofAlthea,
GhostOfAlthea,
Count,
}
@@ -4140,7 +4180,8 @@ public static unsafe partial class GWCA
MISSION_CINEMATIC_MISSION_PACK_ELONA_INTRODUCTION,
MISSION_CINEMATIC_MISSION_PACK_GWX_INTRODUCTION,
Piken_Square_pre_Searing_outpost,
Secret_Lair_of_the_Snowmen2 = 781, // ?
Forsaken_Tunnels_Presearing_Level1,
Secret_Lair_of_the_Snowmen2, // ?
Secret_Lair_of_the_Snowmen3, // ?
Droknars_Forge_cinematic, // ?
Isle_of_the_Nameless_PvP,
@@ -4227,6 +4268,12 @@ public static unsafe partial class GWCA
The_Final_Confrontation,
Lakeside_County_1070_AE,
Ashford_Catacombs_1070_AE,
Forsaken_Tunnels_Presearing_Level2,
Forsaken_Tunnels_Presearing_Level3,
Forsaken_Tunnels_Level1,
Forsaken_Tunnels_Level2,
Forsaken_Tunnels_Level3,
Forsaken_Tunnels_Level4,
Count = 0x373,
}
@@ -7707,13 +7754,6 @@ public static unsafe partial class GWCA
Codex,
None = 0xff,
}
internal const uint SkillMax = 0xd69;
public static partial class Camera
{
internal const float DEFAULT_DIST = 750.0f;
internal const float FIRST_PERSON_DIST = 2.0f;
}
public static partial class DialogID
{
@@ -7744,14 +7784,6 @@ public static unsafe partial class GWCA
internal const int UwTeleWastes = 140;
}
public static partial class HealthbarHeight
{
internal const uint Large = 26;
internal const uint Larger = 30;
internal const uint Normal = 22;
internal const uint Small = 24;
}
public static partial class ItemID
{
internal const int Absinthe = 6367;
@@ -9210,99 +9242,100 @@ public static unsafe partial class GWCA
kMessage_0x1000016c, // 0x1000016c
kMessage_0x1000016d, // 0x1000016d
kMessage_0x1000016e, // 0x1000016e
kMessage_0x1000016f, // 0x1000016f
kMessage_0x10000170, // 0x10000170
kMessage_0x10000171, // 0x10000171
kMessage_0x10000172, // 0x10000172
kMessage_0x10000173, // 0x10000173
kMessage_0x10000174, // 0x10000174
kCheckUIState, // 0x10000175
kMessage_0x10000176, // 0x10000176
kMessage_0x10000177, // 0x10000177
kMessage_0x10000178, // 0x10000178
kMessage_0x10000178_1, // 0x10000179, added to GW 2026-02-26
kMessage_0x10000178_2, // 0x1000017a, added to GW 2026-02-26
kMessage_0x10000178_3, // 0x1000017b, added to GW 2026-02-26
kDestroyUIPositionOverlay, // 0x1000017c
kEnableUIPositionOverlay, // 0x1000017d, wparam = uint32_t enable
kMessage_0x1000017b, // 0x1000017e
kGuildHall, // 0x1000017f, wparam = gh key (uint32_t[4])
kMessage_0x1000017d, // 0x10000180
kLeaveGuildHall, // 0x10000181
kTravel, // 0x10000182
kOpenWikiUrl, // 0x10000183, wparam = char* url
kMessage_0x10000181, // 0x10000184
kMessage_0x10000182, // 0x10000185
kSetPreGameContext_Value0, // 0x10000186, wparam = uint32_t value
kMessage_0x10000184, // 0x10000187
kGetPreGameContext_Value0, // 0x10000188, lparam = *uint32_t value_out
kSetPreGameContext_Value1, // 0x10000189, wparam = uint32_t value , added to GW 2026-02-06
kGetPreGameContext_Value1, // 0x1000018a, lparam = *uint32_t value_out, added to GW 2026-02-06
kMessage_0x10000186, // 0x1000018b
kMessage_0x10000187, // 0x1000018c
kMessage_0x10000188, // 0x1000018d
kMessage_0x10000189, // 0x1000018e
kMessage_0x1000018a, // 0x1000018f
kMessage_0x1000018b, // 0x10000190
kMessage_0x1000018c, // 0x10000191
kMessage_0x1000018d, // 0x10000192
kAppendMessageToChat, // 0x10000193, wparam = wchar_t* message
kMessage_0x1000018f, // 0x10000194
kMessage_0x10000190, // 0x10000195
kMessage_0x10000191, // 0x10000196
kMessage_0x10000192, // 0x10000197
kMessage_0x10000193, // 0x10000198
kMessage_0x10000194, // 0x10000199
kMessage_0x10000195, // 0x1000019a
kMessage_0x10000196, // 0x1000019b
kMessage_0x10000197, // 0x1000019c
kMessage_0x10000198, // 0x1000019d
kMessage_0x10000199, // 0x1000019e
kMessage_0x1000019a, // 0x1000019f
kMessage_0x1000019b, // 0x100001a0
kHideHeroPanel, // 0x100001a1, wparam = hero_id
kShowHeroPanel, // 0x100001a2, wparam = hero_id
kMessage_0x1000019e, // 0x100001a3
kMessage_0x1000019f, // 0x100001a4
kMessage_0x100001a0, // 0x100001a5
kGetInventoryAgentId, // 0x100001a6, wparam = 0, lparam = uint32_t* agent_id_out. Used to fetch which agent is selected
kInventoryRelated1, // 0x100001a7, added to GW 2026-02-26
kInventoryRelated2, // 0x100001a8, added to GW 2026-02-26
kInventoryRelated3, // 0x100001a9, added to GW 2026-02-26
kEquipItem, // 0x100001aa, wparam = { item_id, agent_id }
kMoveItem, // 0x100001ab, wparam = { item_id, to_bag, to_slot, bool prompt }
kItemRelated_1, // 0x100001ac
kItemTooltip, // 0x100001ad
kItemRelated_3, // 0x100001ae, added to GW 2026-02-26
kItemRelated_4, // 0x100001af, added to GW 2026-02-26
kInitiateTrade, // 0x100001b0
kMessage_0x100001a7, // 0x100001b1
kMessage_0x100001a8, // 0x100001b2
kMessage_0x100001a9, // 0x100001b3
kMessage_0x100001aa, // 0x100001b4
kMessage_0x100001ab, // 0x100001b5
kMessage_0x100001ac, // 0x100001b6
kMessage_0x100001ad, // 0x100001b7
kMessage_0x100001ae, // 0x100001b8
kMessage_0x100001af, // 0x100001b9
kMessage_0x100001b0, // 0x100001ba
kMessage_0x100001b1, // 0x100001bb
kMessage_0x100001b2, // 0x100001bc
kMessage_0x100001b3, // 0x100001bd
kMessage_0x100001b4, // 0x100001be
kMessage_0x100001b5, // 0x100001bf
kInventoryAgentChanged, // 0x100001c0, Triggered when inventory needs updating due to agent change; no args
kInventoryRelated_1, // 0x100001c1
kInventoryRelated_2, // 0x100001c2
kMissionStatusRelated, // 0x100001c3
kUnused_1c2, // 0x100001c4
kCollapseExpandSkillListSection, // 0x100001c5
kTemplateRelated_1, // 0x100001c6
kTemplateRelated_2, // 0x100001c7
kPromptSaveTemplate, // 0x100001c8
kOpenTemplate, // 0x100001c9, wparam = GW::UI::ChatTemplate*
kTemplateRelated_3, // 0x100001ca
kTemplateRelated_4, // 0x100001cb
kMessage_0x1000016e_1, // 0x1000016f, added to GW 2026-04-28
kMessage_0x1000016f, // 0x10000170
kMessage_0x10000170, // 0x10000171
kMessage_0x10000171, // 0x10000172
kMessage_0x10000172, // 0x10000173
kMessage_0x10000173, // 0x10000174
kMessage_0x10000174, // 0x10000175
kCheckUIState, // 0x10000176
kMessage_0x10000176, // 0x10000177
kMessage_0x10000177, // 0x10000178
kMessage_0x10000178, // 0x10000179
kMessage_0x10000178_1, // 0x1000017a, added to GW 2026-02-26
kMessage_0x10000178_2, // 0x1000017b, added to GW 2026-02-26
kMessage_0x10000178_3, // 0x1000017c, added to GW 2026-02-26
kDestroyUIPositionOverlay, // 0x1000017d
kEnableUIPositionOverlay, // 0x1000017e, wparam = uint32_t enable
kMessage_0x1000017b, // 0x1000017f
kGuildHall, // 0x10000180, wparam = gh key (uint32_t[4])
kMessage_0x1000017d, // 0x10000181
kLeaveGuildHall, // 0x10000182
kTravel, // 0x10000183
kOpenWikiUrl, // 0x10000184, wparam = char* url
kMessage_0x10000181, // 0x10000185
kMessage_0x10000182, // 0x10000186
kSetPreGameContext_Value0, // 0x10000187, wparam = uint32_t value
kMessage_0x10000184, // 0x10000188
kGetPreGameContext_Value0, // 0x10000189, lparam = *uint32_t value_out
kSetPreGameContext_Value1, // 0x1000018a, wparam = uint32_t value , added to GW 2026-02-06
kGetPreGameContext_Value1, // 0x1000018b, lparam = *uint32_t value_out, added to GW 2026-02-06
kMessage_0x10000186, // 0x1000018c
kMessage_0x10000187, // 0x1000018d
kMessage_0x10000188, // 0x1000018e
kMessage_0x10000189, // 0x1000018f
kMessage_0x1000018a, // 0x10000190
kMessage_0x1000018b, // 0x10000191
kMessage_0x1000018c, // 0x10000192
kMessage_0x1000018d, // 0x10000193
kAppendMessageToChat, // 0x10000194, wparam = wchar_t* message
kMessage_0x1000018f, // 0x10000195
kMessage_0x10000190, // 0x10000196
kMessage_0x10000191, // 0x10000197
kMessage_0x10000192, // 0x10000198
kMessage_0x10000193, // 0x10000199
kMessage_0x10000194, // 0x1000019a
kMessage_0x10000195, // 0x1000019b
kMessage_0x10000196, // 0x1000019c
kMessage_0x10000197, // 0x1000019d
kMessage_0x10000198, // 0x1000019e
kMessage_0x10000199, // 0x1000019f
kMessage_0x1000019a, // 0x100001a0
kMessage_0x1000019b, // 0x100001a1
kHideHeroPanel, // 0x100001a2, wparam = hero_id
kShowHeroPanel, // 0x100001a3, wparam = hero_id
kMessage_0x1000019e, // 0x100001a4
kMessage_0x1000019f, // 0x100001a5
kMessage_0x100001a0, // 0x100001a6
kGetInventoryAgentId, // 0x100001a7, wparam = 0, lparam = uint32_t* agent_id_out. Used to fetch which agent is selected
kInventoryRelated1, // 0x100001a8, added to GW 2026-02-26
kInventoryRelated2, // 0x100001a9, added to GW 2026-02-26
kInventoryRelated3, // 0x100001aa, added to GW 2026-02-26
kEquipItem, // 0x100001ab, wparam = { item_id, agent_id }
kMoveItem, // 0x100001ac, wparam = { item_id, to_bag, to_slot, bool prompt }
kItemRelated_1, // 0x100001ad
kItemTooltip, // 0x100001ae
kItemRelated_3, // 0x100001af, added to GW 2026-02-26
kItemRelated_4, // 0x100001b0, added to GW 2026-02-26
kInitiateTrade, // 0x100001b1
kMessage_0x100001a7, // 0x100001b2
kMessage_0x100001a8, // 0x100001b3
kMessage_0x100001a9, // 0x100001b4
kMessage_0x100001aa, // 0x100001b5
kMessage_0x100001ab, // 0x100001b6
kMessage_0x100001ac, // 0x100001b7
kMessage_0x100001ad, // 0x100001b8
kMessage_0x100001ae, // 0x100001b9
kMessage_0x100001af, // 0x100001ba
kMessage_0x100001b0, // 0x100001bb
kMessage_0x100001b1, // 0x100001bc
kMessage_0x100001b2, // 0x100001bd
kMessage_0x100001b3, // 0x100001be
kMessage_0x100001b4, // 0x100001bf
kMessage_0x100001b5, // 0x100001c0
kInventoryAgentChanged, // 0x100001c1, Triggered when inventory needs updating due to agent change; no args
kInventoryRelated_1, // 0x100001c2
kInventoryRelated_2, // 0x100001c3
kMissionStatusRelated, // 0x100001c4
kUnused_1c2, // 0x100001c5
kCollapseExpandSkillListSection, // 0x100001c6
kTemplateRelated_1, // 0x100001c7
kTemplateRelated_2, // 0x100001c8
kPromptSaveTemplate, // 0x100001c9
kOpenTemplate, // 0x100001ca, wparam = GW::UI::ChatTemplate*
kTemplateRelated_3, // 0x100001cb
kTemplateRelated_4, // 0x100001cc
kSendLoadSkillTemplate = 0x30000000 | 0x3, // 0x30000003, wparam = SkillbarMgr::SkillTemplate*
kSendPingWeaponSet = 0x30000000 | 0x4, // 0x30000004, wparam = UIPacket::kSendPingWeaponSet*
kSendMoveItem = 0x30000000 | 0x5, // 0x30000005, wparam = UIPacket::kSendMoveItem*
@@ -9502,6 +9535,37 @@ namespace Daybreak.API.Interop.GuildWars
LEVEL_CRITICAL,
}
public enum AgentTargetFlags : uint
{
Include_Ally = 0x000001,
Include_Neutral = 0x000002,
Accept_HasQuest = 0x000004,
Include_Enemy = 0x000008,
Include_SpiritPet = 0x000010,
Accept_ActiveState = 0x000020,
Include_Minion = 0x000040,
Include_NPCMinipet = 0x000080,
Accept_Player = 0x000100,
Type_Gadget = 0x000200,
Type_Item = 0x000400,
Exclude_DeadAlly = 0x000800,
Exclude_DeadNeutral = 0x001000,
Exclude_DeadEnemy = 0x002000,
Exclude_DeadSpiritPet = 0x004000,
Exclude_DeadMinion = 0x008000,
Exclude_DeadNPCMinipet = 0x010000,
Exclude_UsedCorpse = 0x020000,
Exclude_AliveAlly = 0x040000,
Exclude_AliveNeutral = 0x080000,
Exclude_AliveEnemy = 0x100000,
Exclude_AliveSpiritPet = 0x200000,
Exclude_AliveMinion = 0x400000,
Exclude_AliveNPCMinipet = 0x800000,
Exclude_BeingObserved = 0x2000000,
ZeroPriority = 0x4000000,
NPCMinipet_ZeroPriority = 0x8000000,
}
public enum CallTargetType : uint
{
Following = 0x3,
@@ -9936,7 +10000,7 @@ namespace Daybreak.API.Interop.GuildWars
Miku,
ZeiRi,
Devona,
GhostofAlthea,
GhostOfAlthea,
Count,
}
@@ -10776,7 +10840,8 @@ namespace Daybreak.API.Interop.GuildWars
MISSION_CINEMATIC_MISSION_PACK_ELONA_INTRODUCTION,
MISSION_CINEMATIC_MISSION_PACK_GWX_INTRODUCTION,
Piken_Square_pre_Searing_outpost,
Secret_Lair_of_the_Snowmen2 = 781,
Forsaken_Tunnels_Presearing_Level1,
Secret_Lair_of_the_Snowmen2,
Secret_Lair_of_the_Snowmen3,
Droknars_Forge_cinematic,
Isle_of_the_Nameless_PvP,
@@ -10863,6 +10928,12 @@ namespace Daybreak.API.Interop.GuildWars
The_Final_Confrontation,
Lakeside_County_1070_AE,
Ashford_Catacombs_1070_AE,
Forsaken_Tunnels_Presearing_Level2,
Forsaken_Tunnels_Presearing_Level3,
Forsaken_Tunnels_Level1,
Forsaken_Tunnels_Level2,
Forsaken_Tunnels_Level3,
Forsaken_Tunnels_Level4,
Count = 0x373,
}
@@ -15217,6 +15288,7 @@ namespace Daybreak.API.Interop.GuildWars
kMessage_0x1000016c,
kMessage_0x1000016d,
kMessage_0x1000016e,
kMessage_0x1000016e_1,
kMessage_0x1000016f,
kMessage_0x10000170,
kMessage_0x10000171,
@@ -15960,7 +16032,7 @@ namespace Daybreak.API.Interop.GuildWars
[global::System.Runtime.InteropServices.FieldOffset(0x0010)]
public uint ItemsCount;
[global::System.Runtime.InteropServices.FieldOffset(0x0014)]
public global::Daybreak.API.Interop.GuildWars.BagStruct* BagArray;
public global::Daybreak.API.Interop.GuildWars.Inventory* Inventory;
[global::System.Runtime.InteropServices.FieldOffset(0x0018)]
public ItemArray Items;
}
@@ -16123,7 +16195,7 @@ namespace Daybreak.API.Interop.GuildWars
public byte Scale; // percent
}
[global::System.Runtime.InteropServices.StructLayout(global::System.Runtime.InteropServices.LayoutKind.Explicit, Pack = 1, Size = 0x438)]
[global::System.Runtime.InteropServices.StructLayout(global::System.Runtime.InteropServices.LayoutKind.Explicit, Pack = 1, Size = 0x440)]
public unsafe struct CharContext
{
[global::System.Runtime.InteropServices.FieldOffset(0x0000)]
@@ -16163,36 +16235,36 @@ namespace Daybreak.API.Interop.GuildWars
[global::System.Runtime.InteropServices.FieldOffset(0x01B8)]
public uint Token2; // player id
[global::System.Runtime.InteropServices.FieldOffset(0x01BC)]
public fixed uint H01BC[25];
[global::System.Runtime.InteropServices.FieldOffset(0x0220)]
public uint DistrictNumber;
[global::System.Runtime.InteropServices.FieldOffset(0x0224)]
public global::Daybreak.API.Interop.GWCA.GW.Constants.Language Language;
public fixed uint H01BC[27];
[global::System.Runtime.InteropServices.FieldOffset(0x0228)]
public global::Daybreak.API.Interop.GWCA.GW.Constants.MapID ObserveMapId;
public uint DistrictNumber;
[global::System.Runtime.InteropServices.FieldOffset(0x022C)]
public global::Daybreak.API.Interop.GWCA.GW.Constants.MapID CurrentMapId;
public global::Daybreak.API.Interop.GWCA.GW.Constants.Language Language;
[global::System.Runtime.InteropServices.FieldOffset(0x0230)]
public global::Daybreak.API.Interop.GWCA.GW.Constants.InstanceType ObserveMapType;
public global::Daybreak.API.Interop.GWCA.GW.Constants.MapID ObserveMapId;
[global::System.Runtime.InteropServices.FieldOffset(0x0234)]
public global::Daybreak.API.Interop.GWCA.GW.Constants.InstanceType CurrentMapType;
public global::Daybreak.API.Interop.GWCA.GW.Constants.MapID CurrentMapId;
[global::System.Runtime.InteropServices.FieldOffset(0x0238)]
public fixed uint H0238[5];
[global::System.Runtime.InteropServices.FieldOffset(0x024C)]
public global::Daybreak.API.Interop.GWCA.GW.Constants.InstanceType ObserveMapType;
[global::System.Runtime.InteropServices.FieldOffset(0x023C)]
public global::Daybreak.API.Interop.GWCA.GW.Constants.InstanceType CurrentMapType;
[global::System.Runtime.InteropServices.FieldOffset(0x0240)]
public fixed uint H0240[5];
[global::System.Runtime.InteropServices.FieldOffset(0x0254)]
public global::Daybreak.API.Interop.GuildWars.GuildWarsArray<nint> ObserverMatches;
[global::System.Runtime.InteropServices.FieldOffset(0x025C)]
public fixed uint H025C[17];
[global::System.Runtime.InteropServices.FieldOffset(0x02A0)]
public uint PlayerFlags; // bitwise something
[global::System.Runtime.InteropServices.FieldOffset(0x02A4)]
public uint PlayerNumber;
[global::System.Runtime.InteropServices.FieldOffset(0x0264)]
public fixed uint H0264[17];
[global::System.Runtime.InteropServices.FieldOffset(0x02A8)]
public fixed uint H02A8[40];
[global::System.Runtime.InteropServices.FieldOffset(0x0348)]
public uint PlayerFlags; // bitwise something
[global::System.Runtime.InteropServices.FieldOffset(0x02AC)]
public uint PlayerNumber;
[global::System.Runtime.InteropServices.FieldOffset(0x02B0)]
public fixed uint H02B0[40];
[global::System.Runtime.InteropServices.FieldOffset(0x0350)]
public global::Daybreak.API.Interop.GuildWars.ProgressBarContext* ProgressBar; // seems to never be nullptr
[global::System.Runtime.InteropServices.FieldOffset(0x034C)]
public fixed uint H034C[27];
[global::System.Runtime.InteropServices.FieldOffset(0x03B8)]
[global::System.Runtime.InteropServices.FieldOffset(0x0354)]
public fixed uint H0354[27];
[global::System.Runtime.InteropServices.FieldOffset(0x03C0)]
public fixed char PlayerEmail[64];
}
@@ -16546,7 +16618,7 @@ namespace Daybreak.API.Interop.GuildWars
[global::System.Runtime.InteropServices.FieldOffset(0x0004)]
public uint AgentId;
[global::System.Runtime.InteropServices.FieldOffset(0x0008)]
public uint Level;
public uint InventoryId;
[global::System.Runtime.InteropServices.FieldOffset(0x000C)]
public global::Daybreak.API.Interop.GWCA.GW.HeroBehavior HeroBehavior;
[global::System.Runtime.InteropServices.FieldOffset(0x0010)]
@@ -16724,6 +16796,14 @@ namespace Daybreak.API.Interop.GuildWars
public uint GoldStorage;
}
[global::System.Runtime.InteropServices.StructLayout(global::System.Runtime.InteropServices.LayoutKind.Sequential, Pack = 1)]
public unsafe struct InventoryTableEntry
{
public uint Stride;
public uint End;
public global::Daybreak.API.Interop.GuildWars.Inventory* Start;
}
[global::System.Runtime.InteropServices.StructLayout(global::System.Runtime.InteropServices.LayoutKind.Explicit, Pack = 1, Size = 0x54)]
public unsafe struct ItemStruct
{
@@ -16781,7 +16861,7 @@ namespace Daybreak.API.Interop.GuildWars
public byte Slot;
}
[global::System.Runtime.InteropServices.StructLayout(global::System.Runtime.InteropServices.LayoutKind.Explicit, Pack = 1)]
[global::System.Runtime.InteropServices.StructLayout(global::System.Runtime.InteropServices.LayoutKind.Explicit, Pack = 1, Size = 0x10C)]
public unsafe struct ItemContext
{
[global::System.Runtime.InteropServices.FieldOffset(0x0000)]
@@ -16793,17 +16873,79 @@ namespace Daybreak.API.Interop.GuildWars
[global::System.Runtime.InteropServices.FieldOffset(0x0024)]
public global::Daybreak.API.Interop.GuildWars.GuildWarsArray<nint> BagsArray;
[global::System.Runtime.InteropServices.FieldOffset(0x0034)]
public fixed byte H0034[12];
public uint H0034;
[global::System.Runtime.InteropServices.FieldOffset(0x0038)]
public uint H0038;
[global::System.Runtime.InteropServices.FieldOffset(0x003C)]
public uint H003C;
[global::System.Runtime.InteropServices.FieldOffset(0x0040)]
public global::Daybreak.API.Interop.GuildWars.GuildWarsArray<nint> H0040;
[global::System.Runtime.InteropServices.FieldOffset(0x0050)]
public global::Daybreak.API.Interop.GuildWars.GuildWarsArray<nint> H0050;
[global::System.Runtime.InteropServices.FieldOffset(0x0060)]
public fixed byte H0060[88];
public uint H0060;
[global::System.Runtime.InteropServices.FieldOffset(0x0064)]
public uint H0064;
[global::System.Runtime.InteropServices.FieldOffset(0x0068)]
public uint H0068;
[global::System.Runtime.InteropServices.FieldOffset(0x006C)]
public uint H006C;
[global::System.Runtime.InteropServices.FieldOffset(0x0070)]
public uint H0070;
[global::System.Runtime.InteropServices.FieldOffset(0x0074)]
public uint H0074;
[global::System.Runtime.InteropServices.FieldOffset(0x0078)]
public uint H0078;
[global::System.Runtime.InteropServices.FieldOffset(0x007C)]
public uint H007C;
[global::System.Runtime.InteropServices.FieldOffset(0x0080)]
public uint H0080;
[global::System.Runtime.InteropServices.FieldOffset(0x0084)]
public uint H0084;
[global::System.Runtime.InteropServices.FieldOffset(0x0088)]
public uint H0088;
[global::System.Runtime.InteropServices.FieldOffset(0x008C)]
public uint H008C;
[global::System.Runtime.InteropServices.FieldOffset(0x0090)]
public uint H0090;
[global::System.Runtime.InteropServices.FieldOffset(0x0094)]
public uint H0094;
[global::System.Runtime.InteropServices.FieldOffset(0x0098)]
public uint H0098;
[global::System.Runtime.InteropServices.FieldOffset(0x009C)]
public uint H009C;
[global::System.Runtime.InteropServices.FieldOffset(0x00A0)]
public uint H00A0;
[global::System.Runtime.InteropServices.FieldOffset(0x00A4)]
public uint H00A4;
[global::System.Runtime.InteropServices.FieldOffset(0x00A8)]
public uint H00A8;
[global::System.Runtime.InteropServices.FieldOffset(0x00AC)]
public uint H00AC;
[global::System.Runtime.InteropServices.FieldOffset(0x00B0)]
public uint H00B0;
[global::System.Runtime.InteropServices.FieldOffset(0x00B4)]
public uint H00B4;
[global::System.Runtime.InteropServices.FieldOffset(0x00B8)]
public global::Daybreak.API.Interop.GuildWars.GuildWarsArray<nint> ItemArray;
[global::System.Runtime.InteropServices.FieldOffset(0x00C8)]
public fixed byte H00C8[48];
public uint H00C8;
[global::System.Runtime.InteropServices.FieldOffset(0x00CC)]
public uint H00CC;
[global::System.Runtime.InteropServices.FieldOffset(0x00D0)]
public uint H00D0;
[global::System.Runtime.InteropServices.FieldOffset(0x00D4)]
public uint H00D4;
[global::System.Runtime.InteropServices.FieldOffset(0x00D8)]
public uint H00D8;
[global::System.Runtime.InteropServices.FieldOffset(0x00DC)]
public uint H00DC;
[global::System.Runtime.InteropServices.FieldOffset(0x00E0)]
public uint H00E0;
[global::System.Runtime.InteropServices.FieldOffset(0x00E4)]
public global::Daybreak.API.Interop.GuildWars.GuildWarsArray<global::Daybreak.API.Interop.GuildWars.InventoryTableEntry> InventoryTable;
[global::System.Runtime.InteropServices.FieldOffset(0x00F4)]
public uint H00F4;
[global::System.Runtime.InteropServices.FieldOffset(0x00F8)]
public global::Daybreak.API.Interop.GuildWars.Inventory* Inventory;
[global::System.Runtime.InteropServices.FieldOffset(0x00FC)]
+1 -57
View File
@@ -138,7 +138,7 @@ namespace GW {
MargridTheSly, Zenmai, Olias, Razah, MOX, KeiranThackeray, Jora,
PyreFierceshot, Anton, Livia, Hayda, Kahmu, Gwen, Xandra, Vekk,
Ogden, Merc1, Merc2, Merc3, Merc4, Merc5, Merc6, Merc7, Merc8,
Miku, ZeiRi, Devona, GhostofAlthea, Count
Miku, ZeiRi, Devona, GhostOfAlthea, Count
};
enum class MaterialSlot : uint32_t {
@@ -159,49 +159,6 @@ namespace GW {
Count
};
constexpr std::array HeroProfs = {
Profession::None,
Profession::Mesmer, // Norgu
Profession::Warrior,// Goren
Profession::Monk, // Tahlkora
Profession::Necromancer, // Master Of Whispers
Profession::Ranger, // Acolyte Jin
Profession::Warrior, // Koss
Profession::Monk, // Dunkoro
Profession::Elementalist, // Acolyte Sousuke
Profession::Dervish, // Melonni
Profession::Elementalist, // Zhed Shadowhoof
Profession::Paragon, // General Morgahn
Profession::Ranger, // Magrid The Sly
Profession::Assassin, // Zenmai
Profession::Necromancer, // Olias
Profession::None, // Razah
Profession::Dervish, // MOX
Profession::Paragon, // Keiran Thackeray
Profession::Warrior, // Jora
Profession::Ranger, // Pyre Fierceshot
Profession::Assassin, // Anton
Profession::Necromancer, // Livia
Profession::Paragon, // Hayda
Profession::Dervish, // Kahmu
Profession::Mesmer, // Gwen
Profession::Ritualist, // Xandra
Profession::Elementalist, // Vekk
Profession::Monk, // Ogden
Profession::None, // Mercenary Hero 1
Profession::None, // Mercenary Hero 2
Profession::None, // Mercenary Hero 3
Profession::None, // Mercenary Hero 4
Profession::None, // Mercenary Hero 5
Profession::None, // Mercenary Hero 6
Profession::None, // Mercenary Hero 7
Profession::None, // Mercenary Hero 8
Profession::Assassin, // Miku
Profession::Ritualist, // Zei Ri
Profession::Warrior, // Devona
Profession::Mesmer // Ghost of Althea
};
enum class TitleID : uint32_t {
Hero, TyrianCarto, CanthanCarto, Gladiator, Champion, Kurzick,
Luxon, Drunkard,
@@ -224,12 +181,6 @@ namespace GW {
enum class Tick { NOT_READY, READY };
enum class InterfaceSize { SMALL = -1, NORMAL, LARGE, LARGER };
namespace HealthbarHeight {
constexpr size_t Small = 24;
constexpr size_t Normal = 22;
constexpr size_t Large = 26;
constexpr size_t Larger = 30;
}
// travel, region, districts
enum class ServerRegion {
@@ -350,12 +301,5 @@ namespace GW {
ritualist_symbol = 35,
dervish_symbol = 36,
};
namespace Camera {
constexpr float FIRST_PERSON_DIST = 2.f;
constexpr float DEFAULT_DIST = 750.f;
}
constexpr size_t SkillMax = 0xd69;
}
}
+10 -2
View File
@@ -794,9 +794,9 @@ namespace GW {
MISSION_CINEMATIC_MISSION_PACK_GWX_INTRODUCTION,
Piken_Square_pre_Searing_outpost,
// Map 780 has invalid continent, name and description
Forsaken_Tunnels_Presearing_Level1,
Secret_Lair_of_the_Snowmen2 = 781, // ?
Secret_Lair_of_the_Snowmen2, // ?
Secret_Lair_of_the_Snowmen3, // ?
Droknars_Forge_cinematic, // ?
Isle_of_the_Nameless_PvP,
@@ -892,6 +892,14 @@ namespace GW {
Lakeside_County_1070_AE,
Ashford_Catacombs_1070_AE,
Forsaken_Tunnels_Presearing_Level2,
Forsaken_Tunnels_Presearing_Level3,
Forsaken_Tunnels_Level1,
Forsaken_Tunnels_Level2,
Forsaken_Tunnels_Level3,
Forsaken_Tunnels_Level4,
Count = 0x373,
};
}
+94 -93
View File
@@ -493,99 +493,100 @@ namespace GW {
kMessage_0x1000016c, // 0x1000016c
kMessage_0x1000016d, // 0x1000016d
kMessage_0x1000016e, // 0x1000016e
kMessage_0x1000016f, // 0x1000016f
kMessage_0x10000170, // 0x10000170
kMessage_0x10000171, // 0x10000171
kMessage_0x10000172, // 0x10000172
kMessage_0x10000173, // 0x10000173
kMessage_0x10000174, // 0x10000174
kCheckUIState, // 0x10000175
kMessage_0x10000176, // 0x10000176
kMessage_0x10000177, // 0x10000177
kMessage_0x10000178, // 0x10000178
kMessage_0x10000178_1, // 0x10000179, added to GW 2026-02-26
kMessage_0x10000178_2, // 0x1000017a, added to GW 2026-02-26
kMessage_0x10000178_3, // 0x1000017b, added to GW 2026-02-26
kDestroyUIPositionOverlay, // 0x1000017c
kEnableUIPositionOverlay, // 0x1000017d, wparam = uint32_t enable
kMessage_0x1000017b, // 0x1000017e
kGuildHall, // 0x1000017f, wparam = gh key (uint32_t[4])
kMessage_0x1000017d, // 0x10000180
kLeaveGuildHall, // 0x10000181
kTravel, // 0x10000182
kOpenWikiUrl, // 0x10000183, wparam = char* url
kMessage_0x10000181, // 0x10000184
kMessage_0x10000182, // 0x10000185
kSetPreGameContext_Value0, // 0x10000186, wparam = uint32_t value
kMessage_0x10000184, // 0x10000187
kGetPreGameContext_Value0, // 0x10000188, lparam = *uint32_t value_out
kSetPreGameContext_Value1, // 0x10000189, wparam = uint32_t value , added to GW 2026-02-06
kGetPreGameContext_Value1, // 0x1000018a, lparam = *uint32_t value_out, added to GW 2026-02-06
kMessage_0x10000186, // 0x1000018b
kMessage_0x10000187, // 0x1000018c
kMessage_0x10000188, // 0x1000018d
kMessage_0x10000189, // 0x1000018e
kMessage_0x1000018a, // 0x1000018f
kMessage_0x1000018b, // 0x10000190
kMessage_0x1000018c, // 0x10000191
kMessage_0x1000018d, // 0x10000192
kAppendMessageToChat, // 0x10000193, wparam = wchar_t* message
kMessage_0x1000018f, // 0x10000194
kMessage_0x10000190, // 0x10000195
kMessage_0x10000191, // 0x10000196
kMessage_0x10000192, // 0x10000197
kMessage_0x10000193, // 0x10000198
kMessage_0x10000194, // 0x10000199
kMessage_0x10000195, // 0x1000019a
kMessage_0x10000196, // 0x1000019b
kMessage_0x10000197, // 0x1000019c
kMessage_0x10000198, // 0x1000019d
kMessage_0x10000199, // 0x1000019e
kMessage_0x1000019a, // 0x1000019f
kMessage_0x1000019b, // 0x100001a0
kHideHeroPanel, // 0x100001a1, wparam = hero_id
kShowHeroPanel, // 0x100001a2, wparam = hero_id
kMessage_0x1000019e, // 0x100001a3
kMessage_0x1000019f, // 0x100001a4
kMessage_0x100001a0, // 0x100001a5
kGetInventoryAgentId, // 0x100001a6, wparam = 0, lparam = uint32_t* agent_id_out. Used to fetch which agent is selected
kInventoryRelated1, // 0x100001a7, added to GW 2026-02-26
kInventoryRelated2, // 0x100001a8, added to GW 2026-02-26
kInventoryRelated3, // 0x100001a9, added to GW 2026-02-26
kEquipItem, // 0x100001aa, wparam = { item_id, agent_id }
kMoveItem, // 0x100001ab, wparam = { item_id, to_bag, to_slot, bool prompt }
kItemRelated_1, // 0x100001ac
kItemTooltip, // 0x100001ad
kItemRelated_3, // 0x100001ae, added to GW 2026-02-26
kItemRelated_4, // 0x100001af, added to GW 2026-02-26
kInitiateTrade, // 0x100001b0
kMessage_0x100001a7, // 0x100001b1
kMessage_0x100001a8, // 0x100001b2
kMessage_0x100001a9, // 0x100001b3
kMessage_0x100001aa, // 0x100001b4
kMessage_0x100001ab, // 0x100001b5
kMessage_0x100001ac, // 0x100001b6
kMessage_0x100001ad, // 0x100001b7
kMessage_0x100001ae, // 0x100001b8
kMessage_0x100001af, // 0x100001b9
kMessage_0x100001b0, // 0x100001ba
kMessage_0x100001b1, // 0x100001bb
kMessage_0x100001b2, // 0x100001bc
kMessage_0x100001b3, // 0x100001bd
kMessage_0x100001b4, // 0x100001be
kMessage_0x100001b5, // 0x100001bf
kInventoryAgentChanged, // 0x100001c0, Triggered when inventory needs updating due to agent change; no args
kInventoryRelated_1, // 0x100001c1
kInventoryRelated_2, // 0x100001c2
kMissionStatusRelated, // 0x100001c3
kUnused_1c2, // 0x100001c4
kCollapseExpandSkillListSection, // 0x100001c5
kTemplateRelated_1, // 0x100001c6
kTemplateRelated_2, // 0x100001c7
kPromptSaveTemplate, // 0x100001c8
kOpenTemplate, // 0x100001c9, wparam = GW::UI::ChatTemplate*
kTemplateRelated_3, // 0x100001ca
kTemplateRelated_4, // 0x100001cb
kMessage_0x1000016e_1, // 0x1000016f, added to GW 2026-04-28
kMessage_0x1000016f, // 0x10000170
kMessage_0x10000170, // 0x10000171
kMessage_0x10000171, // 0x10000172
kMessage_0x10000172, // 0x10000173
kMessage_0x10000173, // 0x10000174
kMessage_0x10000174, // 0x10000175
kCheckUIState, // 0x10000176
kMessage_0x10000176, // 0x10000177
kMessage_0x10000177, // 0x10000178
kMessage_0x10000178, // 0x10000179
kMessage_0x10000178_1, // 0x1000017a, added to GW 2026-02-26
kMessage_0x10000178_2, // 0x1000017b, added to GW 2026-02-26
kMessage_0x10000178_3, // 0x1000017c, added to GW 2026-02-26
kDestroyUIPositionOverlay, // 0x1000017d
kEnableUIPositionOverlay, // 0x1000017e, wparam = uint32_t enable
kMessage_0x1000017b, // 0x1000017f
kGuildHall, // 0x10000180, wparam = gh key (uint32_t[4])
kMessage_0x1000017d, // 0x10000181
kLeaveGuildHall, // 0x10000182
kTravel, // 0x10000183
kOpenWikiUrl, // 0x10000184, wparam = char* url
kMessage_0x10000181, // 0x10000185
kMessage_0x10000182, // 0x10000186
kSetPreGameContext_Value0, // 0x10000187, wparam = uint32_t value
kMessage_0x10000184, // 0x10000188
kGetPreGameContext_Value0, // 0x10000189, lparam = *uint32_t value_out
kSetPreGameContext_Value1, // 0x1000018a, wparam = uint32_t value , added to GW 2026-02-06
kGetPreGameContext_Value1, // 0x1000018b, lparam = *uint32_t value_out, added to GW 2026-02-06
kMessage_0x10000186, // 0x1000018c
kMessage_0x10000187, // 0x1000018d
kMessage_0x10000188, // 0x1000018e
kMessage_0x10000189, // 0x1000018f
kMessage_0x1000018a, // 0x10000190
kMessage_0x1000018b, // 0x10000191
kMessage_0x1000018c, // 0x10000192
kMessage_0x1000018d, // 0x10000193
kAppendMessageToChat, // 0x10000194, wparam = wchar_t* message
kMessage_0x1000018f, // 0x10000195
kMessage_0x10000190, // 0x10000196
kMessage_0x10000191, // 0x10000197
kMessage_0x10000192, // 0x10000198
kMessage_0x10000193, // 0x10000199
kMessage_0x10000194, // 0x1000019a
kMessage_0x10000195, // 0x1000019b
kMessage_0x10000196, // 0x1000019c
kMessage_0x10000197, // 0x1000019d
kMessage_0x10000198, // 0x1000019e
kMessage_0x10000199, // 0x1000019f
kMessage_0x1000019a, // 0x100001a0
kMessage_0x1000019b, // 0x100001a1
kHideHeroPanel, // 0x100001a2, wparam = hero_id
kShowHeroPanel, // 0x100001a3, wparam = hero_id
kMessage_0x1000019e, // 0x100001a4
kMessage_0x1000019f, // 0x100001a5
kMessage_0x100001a0, // 0x100001a6
kGetInventoryAgentId, // 0x100001a7, wparam = 0, lparam = uint32_t* agent_id_out. Used to fetch which agent is selected
kInventoryRelated1, // 0x100001a8, added to GW 2026-02-26
kInventoryRelated2, // 0x100001a9, added to GW 2026-02-26
kInventoryRelated3, // 0x100001aa, added to GW 2026-02-26
kEquipItem, // 0x100001ab, wparam = { item_id, agent_id }
kMoveItem, // 0x100001ac, wparam = { item_id, to_bag, to_slot, bool prompt }
kItemRelated_1, // 0x100001ad
kItemTooltip, // 0x100001ae
kItemRelated_3, // 0x100001af, added to GW 2026-02-26
kItemRelated_4, // 0x100001b0, added to GW 2026-02-26
kInitiateTrade, // 0x100001b1
kMessage_0x100001a7, // 0x100001b2
kMessage_0x100001a8, // 0x100001b3
kMessage_0x100001a9, // 0x100001b4
kMessage_0x100001aa, // 0x100001b5
kMessage_0x100001ab, // 0x100001b6
kMessage_0x100001ac, // 0x100001b7
kMessage_0x100001ad, // 0x100001b8
kMessage_0x100001ae, // 0x100001b9
kMessage_0x100001af, // 0x100001ba
kMessage_0x100001b0, // 0x100001bb
kMessage_0x100001b1, // 0x100001bc
kMessage_0x100001b2, // 0x100001bd
kMessage_0x100001b3, // 0x100001be
kMessage_0x100001b4, // 0x100001bf
kMessage_0x100001b5, // 0x100001c0
kInventoryAgentChanged, // 0x100001c1, Triggered when inventory needs updating due to agent change; no args
kInventoryRelated_1, // 0x100001c2
kInventoryRelated_2, // 0x100001c3
kMissionStatusRelated, // 0x100001c4
kUnused_1c2, // 0x100001c5
kCollapseExpandSkillListSection, // 0x100001c6
kTemplateRelated_1, // 0x100001c7
kTemplateRelated_2, // 0x100001c8
kPromptSaveTemplate, // 0x100001c9
kOpenTemplate, // 0x100001ca, wparam = GW::UI::ChatTemplate*
kTemplateRelated_3, // 0x100001cb
kTemplateRelated_4, // 0x100001cc
// GWCA Client to Server commands. Only added the ones that are used for hooks, everything else goes straight into GW
+94 -93
View File
@@ -493,99 +493,100 @@ namespace GW {
kMessage_0x1000016c, // 0x1000016c
kMessage_0x1000016d, // 0x1000016d
kMessage_0x1000016e, // 0x1000016e
kMessage_0x1000016f, // 0x1000016f
kMessage_0x10000170, // 0x10000170
kMessage_0x10000171, // 0x10000171
kMessage_0x10000172, // 0x10000172
kMessage_0x10000173, // 0x10000173
kMessage_0x10000174, // 0x10000174
kCheckUIState, // 0x10000175
kMessage_0x10000176, // 0x10000176
kMessage_0x10000177, // 0x10000177
kMessage_0x10000178, // 0x10000178
kMessage_0x10000178_1, // 0x10000179, added to GW 2026-02-26
kMessage_0x10000178_2, // 0x1000017a, added to GW 2026-02-26
kMessage_0x10000178_3, // 0x1000017b, added to GW 2026-02-26
kDestroyUIPositionOverlay, // 0x1000017c
kEnableUIPositionOverlay, // 0x1000017d, wparam = uint32_t enable
kMessage_0x1000017b, // 0x1000017e
kGuildHall, // 0x1000017f, wparam = gh key (uint32_t[4])
kMessage_0x1000017d, // 0x10000180
kLeaveGuildHall, // 0x10000181
kTravel, // 0x10000182
kOpenWikiUrl, // 0x10000183, wparam = char* url
kMessage_0x10000181, // 0x10000184
kMessage_0x10000182, // 0x10000185
kSetPreGameContext_Value0, // 0x10000186, wparam = uint32_t value
kMessage_0x10000184, // 0x10000187
kGetPreGameContext_Value0, // 0x10000188, lparam = *uint32_t value_out
kSetPreGameContext_Value1, // 0x10000189, wparam = uint32_t value , added to GW 2026-02-06
kGetPreGameContext_Value1, // 0x1000018a, lparam = *uint32_t value_out, added to GW 2026-02-06
kMessage_0x10000186, // 0x1000018b
kMessage_0x10000187, // 0x1000018c
kMessage_0x10000188, // 0x1000018d
kMessage_0x10000189, // 0x1000018e
kMessage_0x1000018a, // 0x1000018f
kMessage_0x1000018b, // 0x10000190
kMessage_0x1000018c, // 0x10000191
kMessage_0x1000018d, // 0x10000192
kAppendMessageToChat, // 0x10000193, wparam = wchar_t* message
kMessage_0x1000018f, // 0x10000194
kMessage_0x10000190, // 0x10000195
kMessage_0x10000191, // 0x10000196
kMessage_0x10000192, // 0x10000197
kMessage_0x10000193, // 0x10000198
kMessage_0x10000194, // 0x10000199
kMessage_0x10000195, // 0x1000019a
kMessage_0x10000196, // 0x1000019b
kMessage_0x10000197, // 0x1000019c
kMessage_0x10000198, // 0x1000019d
kMessage_0x10000199, // 0x1000019e
kMessage_0x1000019a, // 0x1000019f
kMessage_0x1000019b, // 0x100001a0
kHideHeroPanel, // 0x100001a1, wparam = hero_id
kShowHeroPanel, // 0x100001a2, wparam = hero_id
kMessage_0x1000019e, // 0x100001a3
kMessage_0x1000019f, // 0x100001a4
kMessage_0x100001a0, // 0x100001a5
kGetInventoryAgentId, // 0x100001a6, wparam = 0, lparam = uint32_t* agent_id_out. Used to fetch which agent is selected
kInventoryRelated1, // 0x100001a7, added to GW 2026-02-26
kInventoryRelated2, // 0x100001a8, added to GW 2026-02-26
kInventoryRelated3, // 0x100001a9, added to GW 2026-02-26
kEquipItem, // 0x100001aa, wparam = { item_id, agent_id }
kMoveItem, // 0x100001ab, wparam = { item_id, to_bag, to_slot, bool prompt }
kItemRelated_1, // 0x100001ac
kItemTooltip, // 0x100001ad
kItemRelated_3, // 0x100001ae, added to GW 2026-02-26
kItemRelated_4, // 0x100001af, added to GW 2026-02-26
kInitiateTrade, // 0x100001b0
kMessage_0x100001a7, // 0x100001b1
kMessage_0x100001a8, // 0x100001b2
kMessage_0x100001a9, // 0x100001b3
kMessage_0x100001aa, // 0x100001b4
kMessage_0x100001ab, // 0x100001b5
kMessage_0x100001ac, // 0x100001b6
kMessage_0x100001ad, // 0x100001b7
kMessage_0x100001ae, // 0x100001b8
kMessage_0x100001af, // 0x100001b9
kMessage_0x100001b0, // 0x100001ba
kMessage_0x100001b1, // 0x100001bb
kMessage_0x100001b2, // 0x100001bc
kMessage_0x100001b3, // 0x100001bd
kMessage_0x100001b4, // 0x100001be
kMessage_0x100001b5, // 0x100001bf
kInventoryAgentChanged, // 0x100001c0, Triggered when inventory needs updating due to agent change; no args
kInventoryRelated_1, // 0x100001c1
kInventoryRelated_2, // 0x100001c2
kMissionStatusRelated, // 0x100001c3
kUnused_1c2, // 0x100001c4
kCollapseExpandSkillListSection, // 0x100001c5
kTemplateRelated_1, // 0x100001c6
kTemplateRelated_2, // 0x100001c7
kPromptSaveTemplate, // 0x100001c8
kOpenTemplate, // 0x100001c9, wparam = GW::UI::ChatTemplate*
kTemplateRelated_3, // 0x100001ca
kTemplateRelated_4, // 0x100001cb
kMessage_0x1000016e_1, // 0x1000016f, added to GW 2026-04-28
kMessage_0x1000016f, // 0x10000170
kMessage_0x10000170, // 0x10000171
kMessage_0x10000171, // 0x10000172
kMessage_0x10000172, // 0x10000173
kMessage_0x10000173, // 0x10000174
kMessage_0x10000174, // 0x10000175
kCheckUIState, // 0x10000176
kMessage_0x10000176, // 0x10000177
kMessage_0x10000177, // 0x10000178
kMessage_0x10000178, // 0x10000179
kMessage_0x10000178_1, // 0x1000017a, added to GW 2026-02-26
kMessage_0x10000178_2, // 0x1000017b, added to GW 2026-02-26
kMessage_0x10000178_3, // 0x1000017c, added to GW 2026-02-26
kDestroyUIPositionOverlay, // 0x1000017d
kEnableUIPositionOverlay, // 0x1000017e, wparam = uint32_t enable
kMessage_0x1000017b, // 0x1000017f
kGuildHall, // 0x10000180, wparam = gh key (uint32_t[4])
kMessage_0x1000017d, // 0x10000181
kLeaveGuildHall, // 0x10000182
kTravel, // 0x10000183
kOpenWikiUrl, // 0x10000184, wparam = char* url
kMessage_0x10000181, // 0x10000185
kMessage_0x10000182, // 0x10000186
kSetPreGameContext_Value0, // 0x10000187, wparam = uint32_t value
kMessage_0x10000184, // 0x10000188
kGetPreGameContext_Value0, // 0x10000189, lparam = *uint32_t value_out
kSetPreGameContext_Value1, // 0x1000018a, wparam = uint32_t value , added to GW 2026-02-06
kGetPreGameContext_Value1, // 0x1000018b, lparam = *uint32_t value_out, added to GW 2026-02-06
kMessage_0x10000186, // 0x1000018c
kMessage_0x10000187, // 0x1000018d
kMessage_0x10000188, // 0x1000018e
kMessage_0x10000189, // 0x1000018f
kMessage_0x1000018a, // 0x10000190
kMessage_0x1000018b, // 0x10000191
kMessage_0x1000018c, // 0x10000192
kMessage_0x1000018d, // 0x10000193
kAppendMessageToChat, // 0x10000194, wparam = wchar_t* message
kMessage_0x1000018f, // 0x10000195
kMessage_0x10000190, // 0x10000196
kMessage_0x10000191, // 0x10000197
kMessage_0x10000192, // 0x10000198
kMessage_0x10000193, // 0x10000199
kMessage_0x10000194, // 0x1000019a
kMessage_0x10000195, // 0x1000019b
kMessage_0x10000196, // 0x1000019c
kMessage_0x10000197, // 0x1000019d
kMessage_0x10000198, // 0x1000019e
kMessage_0x10000199, // 0x1000019f
kMessage_0x1000019a, // 0x100001a0
kMessage_0x1000019b, // 0x100001a1
kHideHeroPanel, // 0x100001a2, wparam = hero_id
kShowHeroPanel, // 0x100001a3, wparam = hero_id
kMessage_0x1000019e, // 0x100001a4
kMessage_0x1000019f, // 0x100001a5
kMessage_0x100001a0, // 0x100001a6
kGetInventoryAgentId, // 0x100001a7, wparam = 0, lparam = uint32_t* agent_id_out. Used to fetch which agent is selected
kInventoryRelated1, // 0x100001a8, added to GW 2026-02-26
kInventoryRelated2, // 0x100001a9, added to GW 2026-02-26
kInventoryRelated3, // 0x100001aa, added to GW 2026-02-26
kEquipItem, // 0x100001ab, wparam = { item_id, agent_id }
kMoveItem, // 0x100001ac, wparam = { item_id, to_bag, to_slot, bool prompt }
kItemRelated_1, // 0x100001ad
kItemTooltip, // 0x100001ae
kItemRelated_3, // 0x100001af, added to GW 2026-02-26
kItemRelated_4, // 0x100001b0, added to GW 2026-02-26
kInitiateTrade, // 0x100001b1
kMessage_0x100001a7, // 0x100001b2
kMessage_0x100001a8, // 0x100001b3
kMessage_0x100001a9, // 0x100001b4
kMessage_0x100001aa, // 0x100001b5
kMessage_0x100001ab, // 0x100001b6
kMessage_0x100001ac, // 0x100001b7
kMessage_0x100001ad, // 0x100001b8
kMessage_0x100001ae, // 0x100001b9
kMessage_0x100001af, // 0x100001ba
kMessage_0x100001b0, // 0x100001bb
kMessage_0x100001b1, // 0x100001bc
kMessage_0x100001b2, // 0x100001bd
kMessage_0x100001b3, // 0x100001be
kMessage_0x100001b4, // 0x100001bf
kMessage_0x100001b5, // 0x100001c0
kInventoryAgentChanged, // 0x100001c1, Triggered when inventory needs updating due to agent change; no args
kInventoryRelated_1, // 0x100001c2
kInventoryRelated_2, // 0x100001c3
kMissionStatusRelated, // 0x100001c4
kUnused_1c2, // 0x100001c5
kCollapseExpandSkillListSection, // 0x100001c6
kTemplateRelated_1, // 0x100001c7
kTemplateRelated_2, // 0x100001c8
kPromptSaveTemplate, // 0x100001c9
kOpenTemplate, // 0x100001ca, wparam = GW::UI::ChatTemplate*
kTemplateRelated_3, // 0x100001cb
kTemplateRelated_4, // 0x100001cc
// GWCA Client to Server commands. Only added the ones that are used for hooks, everything else goes straight into GW
+23 -23
View File
@@ -23,18 +23,18 @@ namespace GW {
// possibly more
};
struct CharContext { // total: 0x42C
/* +h0000 */ Array<void *> h0000;
struct CharContext { // total: 0x434
/* +h0000 */ Array<void*> h0000;
/* +h0010 */ uint32_t h0010;
/* +h0014 */ Array<void *> h0014;
/* +h0014 */ Array<void*> h0014;
/* +h0024 */ uint32_t h0024[4];
/* +h0034 */ Array<void *> h0034;
/* +h0044 */ Array<void *> h0044;
/* +h0034 */ Array<void*> h0034;
/* +h0044 */ Array<void*> h0044;
/* +h0054 */ uint32_t h0054[4]; // load head variables
/* +h0064 */ uint32_t player_uuid[4]; // uuid
/* +h0074 */ wchar_t player_name[0x14];
/* +h009C */ uint32_t h009C[20];
/* +h00EC */ Array<void *> h00EC;
/* +h00EC */ Array<void*> h00EC;
/* +h00FC */ uint32_t h00FC[37]; // 40
/* +h0190 */ uint32_t world_flags;
/* +h0194 */ uint32_t token1; // world id
@@ -42,22 +42,22 @@ namespace GW {
/* +h019C */ uint32_t is_explorable;
/* +h01A0 */ uint8_t host[0x18];
/* +h01B8 */ uint32_t token2; // player id
/* +h01BC */ uint32_t h01BC[25];
/* +h0220 */ uint32_t district_number;
/* +h0224 */ GW::Constants::Language language;
/* +h0228 */ GW::Constants::MapID observe_map_id;
/* +h022C */ GW::Constants::MapID current_map_id;
/* +h0230 */ Constants::InstanceType observe_map_type;
/* +h0234 */ Constants::InstanceType current_map_type;
/* +h0238 */ uint32_t h0238[5];
/* +h024C */ Array<ObserverMatch*> observer_matches;
/* +h025C */ uint32_t h025C[17];
/* +h02a0 */ uint32_t player_flags; // bitwise something
/* +h02A4 */ uint32_t player_number;
/* +h02A8 */ uint32_t h02A8[40];
/* +h0348 */ ProgressBarContext* progress_bar; // seems to never be nullptr
/* +h034C */ uint32_t h034C[27];
/* +h03B8 */ wchar_t player_email[0x40];
/* +h01BC */ uint32_t h01BC[27];
/* +h0228 */ uint32_t district_number;
/* +h022C */ GW::Constants::Language language;
/* +h0230 */ GW::Constants::MapID observe_map_id;
/* +h0234 */ GW::Constants::MapID current_map_id;
/* +h0238 */ Constants::InstanceType observe_map_type;
/* +h023C */ Constants::InstanceType current_map_type;
/* +h0240 */ uint32_t h0240[5];
/* +h0254 */ Array<ObserverMatch*> observer_matches;
/* +h0264 */ uint32_t h0264[17];
/* +h02A8 */ uint32_t player_flags; // bitwise something
/* +h02AC */ uint32_t player_number;
/* +h02B0 */ uint32_t h02B0[40];
/* +h0350 */ ProgressBarContext* progress_bar; // seems to never be nullptr
/* +h0354 */ uint32_t h0354[27];
/* +h03C0 */ wchar_t player_email[0x40];
};
static_assert(sizeof(CharContext) == 0x438, "struct CharContext has incorrect size");
static_assert(sizeof(CharContext) == 0x440, "struct CharContext has incorrect size");
}
+51 -13
View File
@@ -11,18 +11,56 @@ namespace GW {
struct Item;
struct Inventory;
struct ItemContext { // total: 0x10C/268 BYTEs
/* +h0000 */ Array<void *> h0000;
/* +h0010 */ Array<void *> h0010;
/* +h0020 */ DWORD h0020;
/* +h0024 */ Array<Bag *> bags_array;
/* +h0034 */ char h0034[12];
/* +h0040 */ Array<void *> h0040;
/* +h0050 */ Array<void *> h0050;
/* +h0060 */ char h0060[88];
/* +h00B8 */ Array<Item *> item_array;
/* +h00C8 */ char h00C8[48];
/* +h00F8 */ Inventory *inventory;
/* +h00FC */ Array<void *> h00FC;
struct InventoryTableEntry {
uint32_t stride;
uint32_t end;
GW::Inventory* start;
};
struct ItemContext { // total: 0x10C/268 BYTEs
/* +h0000 */ Array<void*> h0000;
/* +h0010 */ Array<void*> h0010;
/* +h0020 */ DWORD h0020;
/* +h0024 */ Array<Bag*> bags_array;
/* +h0034 */ uint32_t h0034;
/* +h0038 */ uint32_t h0038;
/* +h003C */ uint32_t h003C;
/* +h0040 */ Array<void*> h0040;
/* +h0050 */ Array<void*> h0050;
/* +h0060 */ uint32_t h0060;
/* +h0064 */ uint32_t h0064;
/* +h0068 */ uint32_t h0068;
/* +h006C */ uint32_t h006C;
/* +h0070 */ uint32_t h0070;
/* +h0074 */ uint32_t h0074;
/* +h0078 */ uint32_t h0078;
/* +h007C */ uint32_t h007C;
/* +h0080 */ uint32_t h0080;
/* +h0084 */ uint32_t h0084;
/* +h0088 */ uint32_t h0088;
/* +h008C */ uint32_t h008C;
/* +h0090 */ uint32_t h0090;
/* +h0094 */ uint32_t h0094;
/* +h0098 */ uint32_t h0098;
/* +h009C */ uint32_t h009C;
/* +h00A0 */ uint32_t h00A0;
/* +h00A4 */ uint32_t h00A4;
/* +h00A8 */ uint32_t h00A8;
/* +h00AC */ uint32_t h00AC;
/* +h00B0 */ uint32_t h00B0;
/* +h00B4 */ uint32_t h00B4;
/* +h00B8 */ Array<Item*> item_array;
/* +h00C8 */ uint32_t h00C8;
/* +h00CC */ uint32_t h00CC;
/* +h00D0 */ uint32_t h00D0;
/* +h00D4 */ uint32_t h00D4;
/* +h00D8 */ uint32_t h00D8;
/* +h00DC */ uint32_t h00DC;
/* +h00E0 */ uint32_t h00E0;
/* +h00E4 */ Array<InventoryTableEntry> inventory_table;
/* +h00F4 */ uint32_t h00F4;
/* +h00F8 */ Inventory* inventory;
/* +h00FC */ Array<void*> h00FC;
};
static_assert(sizeof(ItemContext) == 0x10c);
}
+4 -4
View File
@@ -1,10 +1,10 @@
#pragma once
#define GWCA_VERSION_MAJOR 3
#define GWCA_VERSION_MINOR 3
#define GWCA_VERSION_PATCH 2
#define GWCA_VERSION_MAJOR 4
#define GWCA_VERSION_MINOR 1
#define GWCA_VERSION_PATCH 1
#define GWCA_VERSION_BUILD 0
#define GWCA_VERSION "3.3.2.0"
#define GWCA_VERSION "4.1.1.0"
namespace GWCA {
constexpr int VersionMajor = GWCA_VERSION_MAJOR;
+1 -1
View File
@@ -17,7 +17,7 @@ namespace GW {
struct HeroFlag { // total: 0x20/36
/* +h0000 */ GW::Constants::HeroID hero_id;
/* +h0004 */ AgentID agent_id;
/* +h0008 */ uint32_t level;
/* +h0008 */ uint32_t inventory_id;
/* +h000C */ HeroBehavior hero_behavior;
/* +h0010 */ Vec2f flag;
/* +h0018 */ uint32_t h0018;
+7 -1
View File
@@ -22,6 +22,7 @@ namespace GW {
}
struct Item;
struct Inventory;
typedef Array<Item *> ItemArray;
enum class DyeColor : uint8_t {
@@ -80,7 +81,7 @@ namespace GW {
/* +h0008 */ uint32_t _unknown0;
/* +h000C */ uint32_t container_item;
/* +h0010 */ uint32_t items_count;
/* +h0014 */ Bag *bag_array;
/* +h0014 */ Inventory *inventory;
/* +h0018 */ ItemArray items;
bool IsInventoryBag() const { return bag_type == Constants::BagType::Inventory; }
@@ -207,6 +208,11 @@ namespace GW {
/* +h0088 */ uint32_t h0088[2];
/* +h0090 */ uint32_t gold_character;
/* +h0094 */ uint32_t gold_storage;
[[nodiscard]] uint32_t inventory_id() const
{
return (uint32_t)unused_bag; // Fucked ourselves with this one; bag ids depend on the array starting at the inventory id...
}
};
static_assert(sizeof(Inventory) == 152, "struct Inventory has incorrect size");
+72
View File
@@ -41,6 +41,76 @@ namespace GW {
None = 0xFF
};
enum AgentTargetFlags : uint32_t {
Include_Ally = 0x000001,
Include_Neutral = 0x000002,
Accept_HasQuest = 0x000004,
Include_Enemy = 0x000008,
Include_SpiritPet = 0x000010,
Accept_ActiveState = 0x000020,
Include_Minion = 0x000040,
Include_NPCMinipet = 0x000080,
Accept_Player = 0x000100,
Type_Gadget = 0x000200,
Type_Item = 0x000400,
Exclude_DeadAlly = 0x000800,
Exclude_DeadNeutral = 0x001000,
Exclude_DeadEnemy = 0x002000,
Exclude_DeadSpiritPet = 0x004000,
Exclude_DeadMinion = 0x008000,
Exclude_DeadNPCMinipet = 0x010000,
Exclude_UsedCorpse = 0x020000,
Exclude_AliveAlly = 0x040000,
Exclude_AliveNeutral = 0x080000,
Exclude_AliveEnemy = 0x100000,
Exclude_AliveSpiritPet = 0x200000,
Exclude_AliveMinion = 0x400000,
Exclude_AliveNPCMinipet = 0x800000,
Exclude_BeingObserved = 0x2000000,
ZeroPriority = 0x4000000,
NPCMinipet_ZeroPriority = 0x8000000,
};
inline AgentTargetFlags operator|(AgentTargetFlags a, AgentTargetFlags b) {
return static_cast<AgentTargetFlags>(static_cast<uint32_t>(a) | static_cast<uint32_t>(b));
}
inline AgentTargetFlags operator&(AgentTargetFlags a, AgentTargetFlags b) {
return static_cast<AgentTargetFlags>(static_cast<uint32_t>(a) & static_cast<uint32_t>(b));
}
inline AgentTargetFlags operator~(AgentTargetFlags a) {
return static_cast<AgentTargetFlags>(~static_cast<uint32_t>(a));
}
namespace TargetFilter {
const AgentTargetFlags Enemies = static_cast<AgentTargetFlags>(
Include_Enemy | Exclude_DeadEnemy);
const AgentTargetFlags Allies = static_cast<AgentTargetFlags>(
Include_Ally | Accept_Player | Exclude_DeadAlly);
const AgentTargetFlags Corpses = static_cast<AgentTargetFlags>(
Include_Enemy | Exclude_AliveEnemy | Exclude_UsedCorpse);
const AgentTargetFlags Items = static_cast<AgentTargetFlags>(
Type_Item);
const AgentTargetFlags Gadgets = static_cast<AgentTargetFlags>(
Type_Gadget);
const AgentTargetFlags AnyLiving = static_cast<AgentTargetFlags>(
Include_Ally | Include_Neutral | Include_Enemy |
Include_SpiritPet | Include_Minion | Include_NPCMinipet |
Accept_Player |
Exclude_DeadAlly | Exclude_DeadNeutral | Exclude_DeadEnemy |
Exclude_DeadSpiritPet | Exclude_DeadMinion | Exclude_DeadNPCMinipet);
const AgentTargetFlags Any = static_cast<AgentTargetFlags>(
Include_Ally | Include_Neutral | Include_Enemy |
Include_SpiritPet | Include_Minion | Include_NPCMinipet |
Accept_Player | Accept_HasQuest |
Type_Gadget | Type_Item);
}
namespace Agents {
// === Dialogs ===
@@ -75,6 +145,8 @@ namespace GW {
// Get Agent of current logged in character
GWCA_API AgentLiving* GetControlledCharacter();
GWCA_API bool GetAgentMatchesFlags(const Agent*, AgentTargetFlags flags = TargetFilter::Any);
// Whether we're observing someone else
GWCA_API bool IsObserving();
+2
View File
@@ -21,6 +21,7 @@ namespace GW {
enum class Bag : uint8_t;
enum class StoragePane : uint8_t;
enum class MaterialSlot : uint32_t;
enum HeroID : uint32_t;
}
namespace UI {
@@ -43,6 +44,7 @@ namespace GW {
GWCA_API SalvageSessionInfo* GetSalvageSessionInfo();
GWCA_API ItemArray* GetItemArray();
GWCA_API Inventory* GetInventory();
GWCA_API Inventory* GetHeroInventory(GW::Constants::HeroID hero_id);
GWCA_API Bag** GetBagArray();
GWCA_API Bag* GetBag(Constants::Bag bag_id);
GWCA_API Bag* GetBagByIndex(uint32_t bag_index);
+2 -2
View File
@@ -1,5 +1,4 @@
#pragma once
#define GWCA_ASSERT(expr) ((void)(!!(expr) || (GW::FatalAssert(#expr, __FILE__, (unsigned)__LINE__, __FUNCTION__), 0)))
#ifdef _DEBUG
#define GWCA_TRACE(fmt, ...) GW::LogMessage(GW::LEVEL_TRACE, __FILE__, (unsigned)__LINE__, __FUNCTION__, fmt, __VA_ARGS__)
#define GWCA_DEBUG(fmt, ...) GW::LogMessage(GW::LEVEL_DEBUG, __FILE__, (unsigned)__LINE__, __FUNCTION__, fmt, __VA_ARGS__)
@@ -7,8 +6,9 @@
#define GWCA_WARN(fmt, ...) GW::LogMessage(GW::LEVEL_WARN, __FILE__, (unsigned)__LINE__, __FUNCTION__, fmt, __VA_ARGS__)
#define GWCA_ERR(fmt, ...) GW::LogMessage(GW::LEVEL_ERR, __FILE__, (unsigned)__LINE__, __FUNCTION__, fmt, __VA_ARGS__)
#define GWCA_CRITICAL(fmt, ...) GW::LogMessage(GW::LEVEL_CRITICAL, __FILE__, (unsigned)__LINE__, __FUNCTION__, fmt, __VA_ARGS__)
#define GWCA_ASSERT(expr) ((void)(!!(expr) || (GW::FatalAssert(#expr, __FILE__, (unsigned)__LINE__, __FUNCTION__), 0)))
#else
#define GWCA_ASSERT(expr) ((void)(!!(expr) || (GW::FatalAssert("", "", __COUNTER__, ""), 0)))
#define GWCA_TRACE(fmt, ...)
#define GWCA_DEBUG(fmt, ...)
#define GWCA_INFO(fmt, ...)
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.