# # Copyright (C) 2006 - 2013 All developers at http://sourceforge.net/projects/seq # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # [File Info] PatchDate=11/02/2021 [Port] port=5555 [Memory Offsets] # pinstZoneAddr_x ZoneAddr=0xdb0300 # pinstSpawnManager_x SpawnHeaderAddr=0xf9e378 # pinstLocalPlayer_x CharInfo=0xf93d18 # pinstTarget_x TargetAddr=0xf93d6c # pinstEQItemList_x ItemsAddr=0xf92808 # pinstWorldData_x WorldAddr=0xf93d9c [WorldInfo Offsets] WorldHourOffset=4 WorldMinuteOffset=5 WorldDayOffset=6 WorldMonthOffset=7 WorldYearOffset=8 [SpawnInfo Offsets] NextOffset=0x4 PrevOffset=0x8 LastnameOffset=0x38 XOffset=0x64 YOffset=0x68 ZOffset=0x6c SpeedOffset=0x7c HeadingOffset=0x80 NameOffset=0xa4 TypeOffset=0x125 SpawnIDOffset=0x150 # DWORD pets has this merc dont MasterID OwnerIDOffset=0x3d0 # dword HideMode HideOffset=0x540 # BYTE Level LevelOffset=0x5f0 # BYTE Class ClassOffset=0xf9c # dword Race = Class-8 RaceOffset=0xf94 # ActorEquipment + 0x94 PrimaryOffset=0x10ac # Offhand Offset + 0xa8 OffhandOffset=0x10c0 [GroundItem Offsets] PrevOffset=0x00 NextOffset=0x04 IdOffset=0x08 DropIdOffset=0x0c XOffset=0x70 YOffset=0x74 ZOffset=0x78 NameOffset=0x1c # Using the new Debug CLI # ======================= # To start the server in debug mode, run the server with the 'debug' argument: # # myseqserver debug # # You will see the menu, which looks like this: # # Debug Menu # ======================= # d) display current offsets # r) reload all offsets from INI file # spo) set a primary offset (index/name) (hex value) # sso) set a secondary offset (index/name) (hex value) # ez) examine raw data using pZone # et) examine raw data using pTarget # ew) examine raw data using pWorld # fz) find zonename using pZone (zonename) # ft) find spawnname using pTarget (spawnname) # fs) find spawnname using pSelf (spawnname) # ps) process a spawn entity using pSelf # pt) process a spawn entity using pTarget # sp) scan process names (process name) # sft) scan for floating point using pTarget (X,Y,Z) # sfa) scan for floating point using Address (X,Y,Z,Address) # sfw) scan for world offsets using game date (mm/dd/yyyy) # sg) scan for ground items # ws) walk the spawnlist (reverse) using pSelf # wt) walk the spawnlist (reverse) using pTarget # vs) walk the spawnlist (forward) using pSelf # vt) walk the spawnlist (forward) using pTarget # x) exit # # > # # # To select a command, type it in and press Enter. Some commands require # arguments, which are indicated in parenthesis. # # If you are having troubling just accessing the EQ process, first try the 'scan process names' command: # > sp # # You can provide an optional process name to attempt to scan for and access, but if you do not provide # any arguments, then it will default to 'eqgame'. You will see a list of processes detected on your system # and if a match is found, it will try and access it, providing feedback on the results. Prior to server v1.19.1, # this was a case-sensitive match. For server v1.19.1 and higher, the check is case-insensitive. We had some # problems on a Win2K system regarding this. # # When new offsets are needed, you can start the server in debug mode and it will use the # old offsets as starting points to locate the new offsets. # # The first thing is to locate the zonename. Just enter a zone that you know the name of, like the Bazaar, # and use the "fz" command along with the appropriate shortname for the zone: # > fz Bazaar # # You should see a list of matches. Anyone of them could potentially be a valid pZone value. Select one and # place it in the INI file above under ZoneAddr. Now press 'r' to reload the INI file into the debug server. # Press 'd' to verify your change was actually loaded. # # Next we want to locate the pTarget value, stored above as TargetAddr. Inside the game, select any target NPC # or PC other than yourself. It is best to select a uniquely named NPC, like "Boss Hogg". Do not select an NPC # with a re-used name, like "a rat". Now you need to determine the hidden name of that NPC. To do this, replace # any spaces in the name with underscores, and stick a 00 on the end. So "Boss Hogg" becomes "Boss_Hogg00". # Use this hidden name as the sole argument to the 'ft' command: # > ft Boss_Hogg00 # # You should see a list of matches. Anyone of them could potentially be a valid pTarget. Select one and # place it in the INI file above under TargetAddr. Press 'r' to reload the INI file. # # Next we want to locate the pSpawnlist value, stored above as SpawnHeaderAddr. This is very easy once you have # pTarget done above. Simply select any target in the game and use the 'wt' command: # > wt # # You should see a long list of spawn information dump out. At the end, we do an automatic scan looking for # where that entry point pointer lives. You should see a list of matches. Anyone of them could potentially be # a valid pSpawnlist. Select one and place it in the INI file above under SpawnHeaderAddr. Press 'r' to reload # the INI file. # # Next we want to locate the pSelf value, store above as CharInfo. Inside the game, select yourself as the # target (press F1) and use the 'ft' command along with your characters first name: # > ft Yourfirstname # # You should see a list of matches. Anyone of them could potentially be a valid pSelf. Select one and # place it in the INI file above under CharInfo. Press 'r' to reload the INI file. # # Last we want to locate the pGroundItems value, stored above as ItemsAddr. Just use the 'sg' command and # look for matched pointers that look like 'ITxxxxx_ACTORDEF', where xxxxx is any 3 or 5 digit number. # > sg # Scanning for 'IT' from 0x7d62c4 to 0x9d62c4 # Pointer match found at 0x8d62c4. Full string is IT10805_ACTORDEF # Pointer match found at 0x9bc648. Full string is ITORTOKEN # # Of course the first one here looks good. Put it in the INI file above under ItemsAddr. Press 'r' to # reload the INI file. # # You can now exit the server (press 'x') and restart it in normal mode. Try attaching the client to it. # As long as none of the secondary offsets have changed, it should work. If it only works for a short time # and then stops working, repeat the above procedure, but this time make different selections in the match # lists. # # If the secondary offsets have changed, or the basic design of how they obtain spawn information, the server # may need to be updated. The other debug options can be used to aid in locating secondary offsets, but it # is so involved that it is probably best to use a full blown RAM editor. Please visit our forums to learn # how to help ( http://www.showeq.net/ and look for the MySEQ subforums). # # Notes: # - All string searches are case sensitive! # - As you get matches, write them all down! If a function works for a minute or so and then stops working, try the # next match in the list. # - If you use the spo/sso functions, the changes are NOT made in the INI file. Once you exit, those changes are lost. # - Only reverse walks (wt/ws) will scan for entry point pointers. Forward walks will just show the spawns and return.