HOME | DOWNLOADS | SCREENS | SERVER | WHO IS ON | COMMUNITY | DEV | CREDENTIAL
Info: Deep Client Tech
Information about Endless Online 0.3.X - 12 Nov 2022
Updates are offered as a pack of optional executable replacements. This way, players and server admins are free to try.
Do not forget to backup your current Endless client files before making changes.

NON EO-CLONE PLAYERS
Please wait and use the regular update program of your server.


Summary:

- server owners should use the build version. Deep updates are changing minor version.
- additional there is a setup.ini key BuildVersion=X that will do this without hex-editing.

Visual Documents | How to use? last change: 8 feb 2023
Quick Guide : Visual Documents

notes: Download the latest Pub Studio 0.3 G and create item.8 (visual) with SPEC1 field on 101 ( called Visual Resource ID )
For example add a new resource called 102 to GFX026.EGF and create an item with SPEC1 field on 102. Etc.
Quick Fix | Character Creation Shaver last change: 27 dec 2022
Quick Fix : Character creation

notes: Optional: You can change CreateMinHairStyle value to 0 , located inside extra.ini settings, to enable the creation of bald characters.
New Packet | Account Config Packet last change: 22 dec 2022
S->C : Account Creation Wait Timer:
Sever Packet(
               id=002:Account,               // length: 1byte
               action=220:Config,            // length: 1byte
               accountdelaytime              // length: 2bytes , values accepted: ( 10 - 600 seconds )
               accountvalidation             // length: 1byte , values accepted: ( 0-off , 1-on )
            )
			
notes: Optional server config(220) reply packet, should be send back instantly after receiving the Account(2) Request packet. This is the moment after the server accepted the first packet send out by the client to check if the account name is free and acceptable.

- accountdelaytime initialized the account creation with a faster or slower delay (in secs)
- accountvalidation (1-on) will force the client to (emailed) pincode validation
New Packet | Login Config Packet last change: 2 jan 2023
S->C : Login Config Packet:
Sever Packet(
               id=004:Login,                // length: 1byte 
               action=220:Config,           // length: 1byte
               maxSkins                     // length: 2bytes , max ammount of unlocked skins.
               maxHairModals                // length: 2bytes , max ammount of choicable hair modals.	
               maxCharName                  // length: 1bytes , max new character name ( values: 12-14 )
	)
			
notes: server could send this config(220) packet instantly after receiving and accepting the first Login request packet send by the client (the packet containing username and password). The new setting packet will initalize the selectable options in the [Character Creation] dialog accordingly. Please be aware that more future settings could be added to this packet in the future.
New Packet | Item/Npc Lookup Notification last change: 25 Dec 2023
C->S : client typed #item or #npc
Sever Packet(
               id=048:Communications,         // length: 1byte 
               action=009:Get,                // length: 1byte
               lookupType                     // length: 1bytes , 1=#item-lookup, 2=#npc-lookup
               ident                          // length: 2bytes , the item.id or npc.id that was searched or requested.
	)

			
notes: This packet is send out to the server instead of a chatline ( the chatline is no longer send for commands starting with #item or #npc version 03J+ ) Instead the client will send the direct pub ID of the item (lookupType 1) or the npc (lookupType 2)

3X-K: now client supports adding to existing memo windows with new packet Communications/Add, *see next packet block documentation
New Packet | Communications/Add Text Line(s) last change: 10 Mar 2024 (3X-K)
S->C : server adds one (or more) lines to visible dialog
Sever Packet(
               id=048:Communications,         // length: 1byte 
               action=007:Add,                // length: 1byte
               {
                   leftstring                 // length: variable string
                   seperator=255,             // length: 1byte 
                   rightstring                // length: variable string
                   seperator=255,             // length: 1byte 
               }
	)

			
notes: Sending this packet adds 1 (or more) lines to an already visible dialog* on the client (such as #npc or #item)

Each line expects 2 strings seperated with Byte(255): this would look like stringOnLeft(255)stringOnRight(255)
To send multiple lines keep repeating: Line1Left(255)Line1Right(255)Line2Left(255)Line2Right(255) ..etc

* client will ignore this packet if there is no dialog visible.
New Packet | Communications/New Dialog last change: 10 Mar 2024 (3X-K)
S->C : server opens new info dialog with one (or more) lines on client
Sever Packet(
               id=048:Communications,         // length: 1byte 
               action=006:New,                // length: 1byte
               captionstring                  // length: variable string
               seperator=255,                 // length: 1byte 
               {
                   leftstring                 // length: variable string
                   seperator=255,             // length: 1byte 
                   rightstring                // length: variable string
                   seperator=255,             // length: 1byte 
               }
	)

			
notes: Alternatively to the packet above the server can open a whole new info dialog with custom lines by using COMMUNICATIONS_NEW (48,6)

The only difference is that the packet payload has 1 string before the text lines loop (Caption)
For example: CaptionTitle(255)Line1Left(255)Line1Right(255)Line2Left(255)Line2Right(255) ..etc
New Packet | Show captcha on client last change: 10 feb 2023
S->C : Show captcha on client:
Sever Packet(
               id=249:Captcha,                // length: 1byte 
               action=013:Open,               // length: 1byte
               captchaID                      // length: 2bytes , send back in c->s RESULT CAPTCHA packet
               rewardEXP                      // length: 3bytes , displays the rewarded experience on popup
               chaptchaString                 // length: 5bytes , method 1: generated string (accepted chars A-Z)
	)

			
notes: This packet shows the captcha popup on screen, there are currently 2 ways to do this:

1. Server-checked : Make sure to include a 5 character captcha string in this s->c packet to enable server-checked mode on the client. The client will display your captcha on the screen and will send the input captcha back to your server for checking. The server chould respond with an UPDATE CAPTCHA packet to display a new challenge, in case the user sended (too many) wrong answers or accept the captcha and send CLOSE CAPTCHA packet to unlock the client.

2. Client-checked : Send only a captcha ID and reward ammount to the client but do not include the captcha string in this packet. The client will generate local captcha's and handle everything itself. A result/captcha packet is send to the server and the popup is closed locally on success.

The client will always sends RESULT CAPTCHA packet in both case.
The server should reply with CLOSE CAPTCHA for both methodes as well. To correctly sync the experience reward for the user.

Usage: The OPEN CAPTCHA could be targeted on suspected players by admins, or weekly and randomly send on a timer on a convenient moment, for example when the user is not fightning or an a specific map etc.

Recommendations: flag the player with an inCaptcha flag to avoid exploits with the reward. Punish and/or additionally flag users that in the earn EXP while this flag is set, because they are not able to earn exp during a captcha block. Punish or additionally flag users that disconnect while the captcha flag is set. Remove and reward inCaptcha flagged users when receiving a correct or any* RESULT CAPTCHA packet. Depending on the used method (remote or local).
New Packet | Update captcha popup on client last change: 10 feb 2023
S->C : Update captcha popup on client:
Sever Packet(
               id=249:Captcha,                // length: 1byte 
               action=005:Update,             // length: 1byte
               captchaID                      // length: 2bytes , send back in c->s RESULT CAPTCHA packet
               chaptchaString                 // length: 5bytes , generated string (accepted chars A-Z)
	)
			
notes: This packet displays a new/updated captcha on the blocking client popup, could be used on too many failures.
New Packet | Close captcha (success) last change: 10 feb 2023
S->C : Close captcha (success)
Sever Packet(
               id=249:Captcha,                // length: 1byte 
               action=005:Close               // length: 1byte
               totalexperience                // length: 4bytes , total experience (exp sync)
	)
			
notes: Will close the popup on client, playing a success sound, and displaying the earned exp.
New Packet | Send captcha answer (success) last change: 10 feb 2023
C->S : Send captcha answer (success)
Sever Packet(
               id=249:Captcha,                // length: 1byte 
               action=003:Result              // length: 1byte
               captchaID                      // length: 2bytes , echoing captcha id for server-side checking
               captchaString                  // length: 5bytes , captcha string for server-side checking
	)
			
notes: The client will send this packet with the input captcha, to server.
method 1: you could check the captchaString with the one generated and stored on server memory.
method 2: you should always accept this packet as a successful captcha answer when using the client-side checking.
New Packet | Client requesting new captcha last change: 10 feb 2023
C->S : Client requesting new captcha
Sever Packet(
               id=249:Captcha,                // length: 1byte 
               action=001:Request             // length: 1byte
               captchaID                      // length: 2bytes , echoing captcha id for server-side checking
	)
			
notes: The client will send this packet upon 5 failures, when using method 1. The server could respond with generating a new captcha and sending it using the UPDATE CAPTCHA packet.
New Packet | New Account Validation (START) last change: 22 dec 2022
C->S : Start Account Validation (step1)
Sever Packet(
               id=002:Account,              // length: 1byte 
               action=002:Confirm,          // length: 1byte
               sequenceNumber,              // length: 2bytes - the latest sequence number
               seperator=255,               // length: 1byte 
               accountname                  // length: variable string
               seperator=255,               // length: 1byte 
               emailaddress                 // length: variable string


	)
			
notes: This packet is send to the server after the account creation delay timer has ran out AND when the client was initialized with accountvalidation flag set to 1-on. *this can be done by sending the previous Account(2) Config(220) (S->C) packet to the client.
New Packet | New Account Validation last change: 22 dec 2022
S->C : Account Validation / reply
Sever Packet(
               id=002:Account,              // length: 1byte 
               action=002:Confirm,          // length: 1byte
               resultCode                   // length: 2bytes , value:1 (Ok)

	)
			
notes: This packet is the server response to the account validation started after the client timedout on the original accountcreationdelay (kept for backwards compatibility)

-resultcode 0 : the system is too busy (email queue full) - client aborts.
-resultcode 1 : validation send by email and accepted - client goes to step 2 (new screen)
-resultcode 2 : too many attempt send to this email - client aborts.
New Packet | Extended Account Validation last change: 22 dec 2022
C->S : Account Validation Send ALL
Sever Packet(
               id=002:Account,              // length: 1byte 
               action=006:New,              // length: 1byte
               sequenceNumber,              // length: 2bytes - the latest sequence number
               seperator=255,               // length: 1byte 
               accountname                  // length: variable string
               seperator=255,               // length: 1byte 
               password                     // length: variable string
               seperator=255,               // length: 1byte 
               realname                     // length: variable string
               seperator=255,               // length: 1byte 
               location                     // length: variable string
               seperator=255,               // length: 1byte 
               email                        // length: variable string
               seperator=255,               // length: 1byte 
               serial_computername          // length: variable string
               seperator=255,               // length: 1byte 
               serial_hardware              // length: variable string
               seperator=255,               // length: 1byte 
               PINCODE                      // length: *added* extra variable string
	)
			
notes: This packet is send to the server after entering PIN-code and hitting Create button. Notice that the packet is exactly the same as the NEW ACCOUNT packet, only with an additional PINCODE at the end. Since the server should be in an [validation only] mode the server knows to look for the pincode and validate it.
New Packet | Extended Account Validation (COMPLETED) last change: 22 dec 2022
S->C : Account Validation Result
Sever Packet(
               id=002:Account,              // length: 1byte 
               action=003:Result,           // length: 1byte
               resultCode                   // length: 2bytes , value:1 (Ok)

	)
			
notes: This packet is the server response to the completed and validated account creation attempt by the client. The server should check the PINCODE and block/continue the creation of the new account since all information is send over. Its recommended to close the client connection after x failed attempts.

-resultcode 3 : account accepted (pincode ok) same result packet as unverified account creation!
-resultcode 8 : wrong pincode, client stays on pincode verification screen (and can try again)
New Packet | Login Password Recovery (START) last change: 22 dec 2022
C->S : Login Password Recovery / Request Forgot Password:
Sever Packet(
               id=004:Login,                // length: 1byte 
               action=009:Get,              // length: 1byte

	)
			
notes: This packet is send to the server when the user clicks on the 'forgot password?' button on the main login dialog.
New Packet | Login Password Recovery last change: 22 dec 2022
S->C : Login Password Recovery / Open Screen:
Sever Packet(
               id=004:Login,                // length: 1byte 
               action=009:Get,              // length: 1byte
               resultCode                   // length: 2bytes , value:1 (Ok)

	)
			
notes: This packet is the server response to open and start the password recover procedure on the client side. After the client sended LOGIN|GET (C->S) , this lookup is done to keep the client backwards-compatabily
New Packet | Login Password Recovery last change: 22 dec 2022
C->S Login Password Recovery / Select Accountname (step1)
Sever Packet(
               id=004:Login,                // length: 1byte 
               action=010:New,              // length: 1byte
               accountname                  // length: variable string

	)
			
notes: This packet is send to the server when the user enters and sends the accountname he/she wants to recover. The server should generate, memorize and send out an email with a 7-digit PIN-code.
New Packet | Login Password Recovery last change: 22 dec 2022
S->C : Login Password Recovery / Select Accountname reply:
Sever Packet(
               id=004:Login,                // length: 1byte 
               action=010:New,              // length: 1byte
               resultCode                   // length: 2bytes
               seperator=255,               // length: 1byte 
               emailaddress                 // length: variable (masked email)

	)
			
notes: This packet is the server response after the client sended the requested accountname to recover password.

- resultcode 0 : Sorry account does not exist in the database.
- resultcode 1 : Recover request accepted - client goes to step 2 (pincode)
- resultcode 2 : Recover request accepted showing emailaddress string - client goes to step 2 (pincode)
- resultcode 3 : Too many account lookups from this account - aborts
- resultcode 4 : Sorry the recover system is currently disabled - aborts
- resultcode 5 : Sorry the recover system is too busy (email queue full) - aborts
- resultcode 6 : Too many requests have been sent to this email, Please try again tomorrow - aborts
New Packet | Login Password Recovery last change: 22 dec 2022
C->S Login Password Recovery / Send pincode (step2)
Sever Packet(
               id=004:Login,                // length: 1byte 
               action=002:Confirm,          // length: 1byte
               pincode                      // length: variable string

	)
			
notes: This packet is send to the server when the user enters and sends the secret 7-digit PIN-code to verify his/her email. important: The client will not accept any other input then a string of 7 chars long!
New Packet | Login Password Recovery last change: 22 dec 2022
S->C : Login Password Recovery / Select Accountname reply:
Sever Packet(
               id=004:Login,                // length: 1byte 
               action=002:Confirm,          // length: 1byte
               resultCode                   // length: 2bytes

	)
			
notes: This packet is the server response after the client sended the 7-digit PIN-code for validation.

- resultcode 0 : Wrong code - aborts
- resultcode 1 : Pin-code accepted, continue to step 3 (new password)
New Packet | Login Password Recovery last change: 22 dec 2022
C->S Login Password Recovery / Send New Password (step3)
Sever Packet(
               id=004:Login,                // length: 1byte 
               action=005:Update,           // length: 1byte
               account                      // length: variable string
               seperator=255,               // length: 1byte 
               pincode                      // length: variable string
               seperator=255,               // length: 1byte 
               newpassword                  // length: variable string
               seperator=255,               // length: 1byte 

	)
			
notes: This packet is send to the server when the user double checked on a new password and clicked on the SEND button to complete the recovery. For security purposes the client will send everything (account, pincode and the new password) to the server.
New Packet | Login Password Recovery (COMPLETED) last change: 22 dec 2022
S->C : Login Password Recovery / New password reply:
Sever Packet(
               id=004:Login,                // length: 1byte 
               action=005:Update,           // length: 1byte
               resultCode                   // length: 2bytes

	)
			
notes: This packet is the server response after the client sended the accountname, PIN-code and new password. The usual reply would be 1(OK) and the client goes back to the main menu telling the user that the password was successfully recovered and reset.

- resultcode 0 : Unexpected error - aborts
- resultcode 1 : The pasword was updated in database - recovery completed
New Packet | Boss(52) last change: 7 nov 2022
S->C : Boss Sync:
Sever Packet(
               id=052:Boss,                // length: 1byte 
               action=240:Sync1,           // length: 1byte
               npcHandle,                  // length: 2bytes , (map)spawnID of npc
               npcID,                      // length: 2bytes , ID of npc
               hp,                         // length: 3bytes , values accepted: ( 0 - 16194275 )
               hp_perc,                    // length: 1bytes , values accepted: ( 0 - 100 )
               killed,                     // length: 1bytes , values accepted: ( 0 - 1 )
	     )
			
notes: suggested usage: range- or mapwide broadcast when boss is hit and hurt ( reaction packet to melee, ranged or magic damage ) packet value [killed=1] will remove the bar showing the flashing skull animation. Optionally this packet could also be broadcasted when the boss heals itself.

New (sub)packet: Player(23) last change: 7 nov 2022
S->C : Update Player Sprite:
Sever Packet(
               id=023:Player,                // length: 1byte 
               action=005:Update,            // length: 1byte 
               playerHandle,                 // length: 2bytes , playerHandleID
               mutationType=4:Skintype,      // length: 1byte , value: 4 (skin)
               sound,                        // length: 1byte , values: 0 (nosound) >0 (withsound)
               skinID                        // length: 1byte , skinID
	      )
			
notes: Set and re-render the target-player (playerHandle/ID) with a new skin, packet added to support new item.type 7 ; Transformation
New (sub)packet: Player(23) last change: 7 nov 2022
S->C : Update Player Sprite:
Sever Packet(
               id=023:Player,                // length: 1byte  
               action=005:Update,            // length: 1byte 
               playerHandle,                 // length: 2bytes , playerHandleID
               mutationType=5:Gender,        // length: 1byte , value: 5 (gender)
               sound,                        // length: 1byte , values: 0 (nosound) >0 (withsound)
               gender                        // length: 1byte , values: 0 (female) 1 (male)
	     )
			
notes: Set and re-render the target-player (playerHandle/ID) with a new gender. This packet is currently NOT used, if one decide to use it this operation should be used with caution.
Extended/Changed packet: Barber(38) last change: 7 nov 2022
S->C : Barber Open Window:
Sever Packet(
               id=038:Barber,                // length: 1byte 
               action=013:Open,              // length: 1byte 
               handle,                       // length: 4bytes
               maxHairModals,                // length: 2bytes , values accepted: ( 0 - 64008 )
               basePrice,                    // length: 2bytes , values accepted: ( 0 - 64008 )
               pricePerLevel                 // length: 2bytes , values accepted: ( 0 - 64008 )
	     )
			
notes: The 0.2.X client will try read the extra bytes and initialize the barber Shop Window accordingly.
New Packet: Item(14) last change: 7 nov 2022
C->S : Requesting new Title:
Sever Packet(
               id=014:Item,                  // length: 1byte 
               action=021:Public,            // length: 1byte
               itemID,                       // length: 2byte , itemID (of the used title certificate)
               seperator=255,                // length: 1byte
               newTitleString,               // length: variable , string containing new title

	     )
			
notes: The new 0.3.X clients will send this packet to support new item.type 28 (title certificate). On item usage (clicking item in inventory) the 0.3.X client will present input window where user(s) can enter his/her new title. Server can respond with normal ITEM RESULT packet using item type 28 to update the inventory count minus the used title certificate, the client will also play the scribble sound on receiving this ITEM RESULT packet.
Extended/Changed Packet: Recover(42) last change: 9 nov 2022
S->C : Updating recover stats:
Sever Packet(
               id=042:Recover,               // length: 1byte 
               action=033:Group,             // length: 1byte
               statpoints,                   // length: 2byte , number of unspend stat points
               skillpoints,                  // length: 2byte , number of unspend skill points
               hp_max,                       // length: 2byte , (extended) updated max hitpoints
               tp_max,                       // length: 2byte , (extended) updated max techpoints (mana)
               sp_max                        // length: 2byte , (extended) updated max specialpoints

	     )
			
notes: The new 0.3.X clients also can be updated with hp_max, tp_max and sp_max values for complete syncing.
New NEEDED Packet: Paperdoll(30) last change: 7 nov 2022
S->C : Swap Item:
Sever Packet(
               id=030:Paperdoll,             // length: 1byte 
               action=035:Swap,              // length: 1byte
               playerHandle                  // length: 2bytes , playerHandleID
               SLOT_CLOTHES=1,               // length: 1byte  , value : SLOT_CLOTHES (1)
               SUBLOC=0,                     // length: 1byte  , value : subloc (0)
               equipedBootsID,               // length: 2bytes
               equipedArmorID,               // length: 2bytes
               equipedHatID,                 // length: 2bytes
               equipedWeaponID,              // length: 2bytes
               equipedShieldID,              // length: 2bytes
               equipedItemID,                // length: 2bytes , itemID of the equiped item inside paperdoll
               equipedItemValue,             // length: 3bytes , updated inventory value of equipedItemID
               equipedItemSlot,              // length: 1byte  , slotID of equipedItemID (not required, can be 0)
               swappedItemID,                // length: 2bytes , itemID of the previously equiped item in paperdoll **
               swappedItemValue,             // length: 3bytes , updated inventory value of swappedItemID **
               updatedHpMax,                 // length: 2bytes , updated HP_MAX of the character
               updatedMpMax,                 // length: 2bytes , updated MP_MAX of the character
               updatedStatCon,               // length: 2bytes , updated strength of character
               updatedStatInt,               // length: 2bytes , updated intelligence of character
               updatedStatWis,               // length: 2bytes , updated Wisdom of character
               updatedStatAgi,               // length: 2bytes , updated Agility of character
               updatedStatCon,               // length: 2bytes , updated Constitution of character
               updatedStatCha,               // length: 2bytes , updated Charisma of character
               updatedDamageLo,              // length: 2bytes , updated Low damage stat
               updatedDamageHi,              // length: 2bytes , updated High damage stat
               updatedHitrate,               // length: 2bytes , updated Hitrate
               updatedDodge,                 // length: 2bytes , updated Dodge
               updatedArmor,                 // length: 2bytes , updated Armor
	     )
			
notes: *Now that clients support hotkeys -and- allowing weapon and armor swaps, this packet SHOULD be used for updating the swapped weapon(s) and swapped armor(s) back to the client's inventory while keeping backward-compatibily. Please send the ITEM/SWAP packet instead of the ITEM/RESULT packet(s) if there was a previously equiped weapon back to inventory.

Difference between ITEM_SWAP and ITEM_RESULT reply is 5 bytes containing previously swappedItemID and swappedItemValue.
Extended/Changed Packet: Item(14) last change: 7 nov 2022
S->C : Item Give:
Sever Packet(
               id=014:Item,                  // length: 1byte 
               action=026:Give,              // length: 1byte
               itemID,                       // length: 2bytes , itemID
               itemValue,                    // length: 3bytes , default: value to add
               totalWeigtht,                 // length: 1byte , updated total weigth of all Inventory+Equiped items.
               valueMode,                    // length: 1byte , values: 0 (itemValue is added) 1 (itemValue is set)
	     )
			
notes: *OPTIONAL WORKAROUND* ( prefered packet : SWAP_ITEM ) Now that clients support hotkeys -and- allowing weapon and armor swaps, this packet COULD be used for updating the swapped weapon(s) and swapped armor(s) back to the client's inventory while keeping backward-compatibily. For example if the server detected an equiped weapon this packet should be send along with the ITEM/RESULT packet(s) to add the previously equiped weapon back to inventory.

The new extended 'valueMode' byte can be set to 0(default) to add the itemValue (itemValue should always be 1 in this case)
The new extended 'valueMode' can be set to 1 to set the value to the current value of the item. ( for example player->hasItem(itemID) )


future note: Inventory backlog+recode including a ITEM-SWAP pascket should be added in 'breaking updates' later for more elegant solution.
Hidden Setup.ini Keys:


Optional keys:
AutoAccountName=BillyGoat
BuildVersion=29
ShowGridCursor=on
Skipintro=on
Skipsoftpad=on
TextTheme=1
			

Advanced users can use the hidden keys to load values that cannot be modified by the econfig.exe Tool

- AutoAccountName: automatically sets the login account name to the given value.
- ShowGridCursor: enable of disable the tile shaped mouseover cursor.
- TextTheme: value 1 inverts text colors that may help improve readability on modified dark backgrounds.
- BuildVersion: should be used by server owners only.


How to use BuildVersion?
Because the decentered state and the way things are there is no default to make this work.
Server admins with no way to HEX the build version number are free to add BuildVersion to their setup.ini:

1. make sure your setup.ini contains all 48 needed key values.
You can use Econfig.exe to update to the latest config file or obtain a new setup.ini file here.

2. add BuildVersion key value inside setup.ini using notepad.
( for example BuildVersion=12 or BuildVersion=49 ) look below



click to: go back




free mmorpg games free online rpg games
© by vult-r
Endless Online | Contact | Privacy Policy | Disclaimer | ToS