Code:
#/cygdrive/d/mq2depot/MacroQuest2/MQ2Main
#$ ./gen_myseq.pl
#
#       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=7/20/2017


[Port]
port=5555


[Memory Offsets]
ZoneAddr=0xf21c24
SpawnHeaderAddr=0xfa71d0
CharInfo=0xf142a0
TargetAddr=0xf142b8
ItemsAddr=0xf10984
WorldAddr=0xf14270


[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=0x148
OwnerIDOffset=0x4b0
HideOffset=0x2c4
LevelOffset=0x194
ClassOffset=0xf90
RaceOffset=0xf88
PrimaryOffset=0x1098
OffhandOffset=0x10ac


[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.