From 7ec2f584f590611f793d44f89a467ab21183c793 Mon Sep 17 00:00:00 2001 From: Arto Simonyan Date: Mon, 26 Aug 2024 15:38:00 +0300 Subject: [PATCH] Refactor Checks (#39) - Refactor IsInLobby - Refactor IsInCharacterCreationScreen - Refactor IsInCharacterSelectionScreen --- pkg/memory/game_reader.go | 63 +++++++++++++++++++++++---------------- 1 file changed, 38 insertions(+), 25 deletions(-) diff --git a/pkg/memory/game_reader.go b/pkg/memory/game_reader.go index 88a5c02..c97aca9 100644 --- a/pkg/memory/game_reader.go +++ b/pkg/memory/game_reader.go @@ -50,24 +50,24 @@ func (gd *GameReader) GetData() data.Data { LastGamePassword: gd.LastGamePass(), FPS: gd.FPS(), }, - Monsters: gd.Monsters(pu.Position, hover), - Corpses: gd.Corpses(pu.Position, hover), - PlayerUnit: pu, - Inventory: gd.Inventory(rawPlayerUnits, hover), - Objects: gd.Objects(pu.Position, hover), - OpenMenus: gd.openMenus(), - Widgets: gd.UpdateWidgets(), - Roster: roster, - HoverData: hover, - TerrorZones: gd.TerrorZones(), - Quests: gd.getQuests(gameQuestsBytes), - KeyBindings: gd.GetKeyBindings(), - LegacyGraphics: gd.LegacyGraphics(), - IsOnline: gd.IsOnline(), - IsIngame: gd.IsIngame(), - IsInCharCreationScreen: gd.IsInCharacterCreationScreen(), - //IsInLobby: gd.IsInLobby(), - //IsInCharSelectionScreen: gd.IsInCharacterSelectionScreen(), + Monsters: gd.Monsters(pu.Position, hover), + Corpses: gd.Corpses(pu.Position, hover), + PlayerUnit: pu, + Inventory: gd.Inventory(rawPlayerUnits, hover), + Objects: gd.Objects(pu.Position, hover), + OpenMenus: gd.openMenus(), + Widgets: gd.UpdateWidgets(), + Roster: roster, + HoverData: hover, + TerrorZones: gd.TerrorZones(), + Quests: gd.getQuests(gameQuestsBytes), + KeyBindings: gd.GetKeyBindings(), + LegacyGraphics: gd.LegacyGraphics(), + IsOnline: gd.IsOnline(), + IsIngame: gd.IsIngame(), + IsInCharCreationScreen: gd.IsInCharacterCreationScreen(), + IsInLobby: gd.IsInLobby(), + IsInCharSelectionScreen: gd.IsInCharacterSelectionScreen(), } return d @@ -215,27 +215,40 @@ func (gd *GameReader) IsIngame() bool { return gd.ReadUInt(gd.moduleBaseAddressPtr+0x22D5D78, 1) == 1 } -/* func (gd *GameReader) IsInLobby() bool { - return gd.ReadUInt(gd.moduleBaseAddressPtr+0x21CF488, 1) == 1 + widgets := gd.UpdateWidgets() + if lobbyWidget, found := widgets["LobbyBackgroundPanel"]; found { + return lobbyWidget["WidgetActive"].(bool) && lobbyWidget["WidgetVisible"].(bool) + } + + return false } func (gd *GameReader) IsInCharacterSelectionScreen() bool { - return gd.ReadUInt(gd.moduleBaseAddressPtr+0x1DC7276, 1) != 0 + widgets := gd.UpdateWidgets() + if csWidget, found := widgets["CharacterSelectPanel"]; found { + return csWidget["WidgetActive"].(bool) && csWidget["WidgetVisible"].(bool) + } + + return false } -*/ func (gd *GameReader) IsInCharacterCreationScreen() bool { - // Dont use this ;) - // This will bug out if you switch to legacy graphics in the character select screen and return 1 until you go back to character screen with d2r graphics - return gd.ReadUInt(gd.moduleBaseAddressPtr+0x234A1CE, 1) == 1 + widgets := gd.UpdateWidgets() + if ccWidget, found := widgets["CharacterCreatePanel"]; found { + return ccWidget["WidgetActive"].(bool) && ccWidget["WidgetVisible"].(bool) + } + + return false } func (gd *GameReader) LastGameName() string { + // outdated return gd.ReadStringFromMemory(gd.moduleBaseAddressPtr+0x29DBD10+0x8, 0) } func (gd *GameReader) LastGamePass() string { + // outdated return gd.ReadStringFromMemory(gd.moduleBaseAddressPtr+0x29DBD10+0x60, 0) }