Everytime there is a Forced Patch, EasyUO fu*k up... that's frankly an very sad moment for everyone.
But with the gracious kindness of Monsieur Cheffe, We can try to make self and update. Thanks to the tools it has distributed.
In the folder \EasyUO_Source\tools , we can find "EUOUpdtr.exe" and txt "EUO Updtr Strings 6062 and newer.txt".
"EUOUpdtr.exe" is a tool that can scan addresses to get the value of Character Info, Status Bars etc.
Why ? Because in most of each UO Updates, some values changes, so we have to scan the new ones and add it manually.
Example:
Yesterday, i was playing client 7.0.62.2 but today after an malicious patch, my client is 7.0.63.2. OK Let's go !
Open Ultima Online then "EUOUpdtr.exe"(With admins right), copy and paste the whole text string from "EUO Updtr Strings 6062 and newer.txt" to "EUOUpdtr.exe" (Left panel) and click on "Start" button.
On the right list, you will find all the new values !!
![](https://i.imgur.com/5N7XUOm.png)
as you can see, SYSMSG give N/A {SYSMSG} which is suck. but Cheffe give the value to add (not string to scan) which is $009781FC
Ok now, we have all new values, Go update \EasyUO_Source\uo\uoclidata.pas
First, in "ClientList" Variable/Constant, i add manually the version of client to update and the number in array
###
### ClientList : array[0..223] of TClientList = ( ### before 7.0.63.2 it was "array[0..222]" because I added 1 variable
### (Cli: '7.0.63.2'; List: @SysVar70632; ), ### Newly Added line with client Version
### (Cli: '7.0.62.2'; List: @SysVar70622; ), ### 7.0.62.2 client i was playing with yesterday
###
After this, you will have to add a new section for your variable with all the new Values you just get from the Tool Updater:
After the line 239 (approx)
### Add New name variable you added in ClientList and the array [0..77] should respect the number of variables / Const / Fetures etc.. if you add a line so 0..78 (...Logic)
(THIS IS JUST A SAMPLE, DON'T JUST COPY PASTE VALUES OF THIS CODES)
////////////////////////////////////////////////////////////////////////////////
SysVar70632 : array[0..77] of TSysVarList = (
/// VARIABLES /////////
(Expr: C_BLOCKINFO ; Val: $00594D90),
(Expr: C_CLILOGGED ; Val: $00704C98),
(Expr: C_CLIXRES ; Val: $00705464),
(Expr: C_ENEMYID ; Val: $0097D7F4),
(Expr: C_SHARDPOS ; Val: $00983648),
(Expr: C_NEXTCPOS ; Val: $009837EC),
(Expr: C_SYSMSG ; Val: $009781FC),
(Expr: C_CONTPOS ; Val: $009842A0),
(Expr: C_ENEMYHITS ; Val: $00A4C48C),
(Expr: C_LHANDID ; Val: $00AA8A0C),
(Expr: C_CHARDIR ; Val: $00AA97C8),
(Expr: C_TARGETCNT ; Val: $00000000),
(Expr: C_CURSORKIND ; Val: $00AADEED),
(Expr: C_TARGETCURS ; Val: $00AADF4C),
(Expr: C_CLILEFT ; Val: $00AADF78),
(Expr: C_CHARPTR ; Val: $00AEEC0C),
(Expr: C_LLIFTEDID ; Val: $00AEEC58),
(Expr: C_LSHARD ; Val: $00AF32A4),
(Expr: C_POPUPID ; Val: $00AF3414),
(Expr: C_JOURNALPTR ; Val: $01EBA0CC),
(Expr: C_SKILLCAPS ; Val: $01F60B00),
(Expr: C_SKILLLOCK ; Val: $01F60AC4),
(Expr: C_SKILLSPOS ; Val: $01F60B78),
/// BASE CONSTANTS ////
(Expr: B_TARGPROC ; Val: $0000000C),
(Expr: B_CHARSTATUS ; Val: $00000024),
(Expr: B_ITEMID ; Val: $000000A8),
(Expr: B_ITEMTYPE ; Val: $00000038),
(Expr: B_ITEMSTACK ; Val: $0000003E),
(Expr: B_STATNAME ; Val: $000000C4),
(Expr: B_STATWEIGHT ; Val: $00000038),
(Expr: B_STATAR ; Val: $00000038),
(Expr: B_STATML ; Val: $00000004),
(Expr: B_CONTSIZEX ; Val: $00000024),
(Expr: B_CONTX ; Val: $00000034),
(Expr: B_CONTITEM ; Val: $0000004C),
(Expr: B_CONTNEXT ; Val: $00000058),
(Expr: B_ENEMYHPVAL ; Val: $000000C4),
(Expr: B_SHOPCURRENT ; Val: $000000CC),
(Expr: B_SHOPNEXT ; Val: $00000044),
(Expr: B_BILLFIRST ; Val: $000000DC),
(Expr: B_SKILLDIST ; Val: $00000078),
(Expr: B_SYSMSGSTR ; Val: $00000100),
(Expr: B_EVSKILLPAR ; Val: $000000D8),
(Expr: B_LLIFTEDTYPE ; Val: $00000004),
(Expr: B_LLIFTEDKIND ; Val: $00000038),
(Expr: B_LANG ; Val: $00000060),
(Expr: B_TITHE ; Val: $00000084),
(Expr: B_FINDREP ; Val: $000001B4),
(Expr: B_SHOPPRICE ; Val: $00000030),
(Expr: B_GUMPPTR ; Val: $00000044),
(Expr: B_ITEMSLOT ; Val: $00000025),
(Expr: B_MEMBASE ; Val: $00000000),
(Expr: B_PACKETVER ; Val: $00000001),
(Expr: B_LTARGTILE ; Val: $0000001C),
(Expr: B_LTARGX ; Val: $000001A8),
(Expr: B_STAT1 ; Val: $0000001C),
/// EVENTS ////////////
(Expr: E_REDIR ; Val: $0059D3AD),
(Expr: E_OLDDIR ; Val: $006277B0),
(Expr: E_EXMSGADDR ; Val: $005AA5C0),
(Expr: E_ITEMPROPID ; Val: $00AA097C),
(Expr: E_ITEMNAMEADDR ; Val: $0057B680),
(Expr: E_ITEMPROPADDR ; Val: $0057B580),
(Expr: E_ITEMCHECKADDR ; Val: $0043DA50),
(Expr: E_ITEMREQADDR ; Val: $0043EDB0),
(Expr: E_PATHFINDADDR ; Val: $00505E09),
(Expr: E_SLEEPADDR ; Val: $0068C0EC),
(Expr: E_DRAGADDR ; Val: $005ABD20),
(Expr: E_SYSMSGADDR ; Val: $005D9010),
(Expr: E_MACROADDR ; Val: $005839B0),
(Expr: E_SENDPACKET ; Val: $0045CF20),
(Expr: E_CONTTOP ; Val: $004DE950),
(Expr: E_STATBAR ; Val: $00549D40),
/// FEATURES //////////
(Expr: F_EXTSTAT ; Val: $00000001),
(Expr: F_EVPROPERTY ; Val: $00000001),
(Expr: F_MACROMAP ; Val: $00000001),
(Expr: F_EXCHARSTATC ; Val: $00000018),
(Expr: F_PACKETVER ; Val: $00000001),
(Expr: F_PATHFINDVER ; Val: $00000001),
(Expr: F_FLAGS ; Val: $00000003),
/// END ///////////////
(Expr: LISTEND ; Val: $00000000)
);
When done, save the file.
Now, clean the folder build, re-open EasyUO.dpr from Delphi and Compile !
SMASHING !! you have a new fresh EasyUO before everyone <3<3
I tried to be as clear as the level of my English =)
All questions welcome
For Delphi Link, just google it
For EasyUO Source
http://www.easyuo.com/forum/viewtopic.php?f=52&t=53017for EasyUO SysMSG & Journal Update
http://www.easyuo.com/forum/viewtopic.php?f=52&t=53567Don't forget to thank Cheffe for his amazing work.