An open-source effort to make episode 5 servers compatible with episode 6 clients.
Windows 10
Visual Studio 2022
C++ 23
Microsoft Visual C++ Redistributable
Microsoft DirectX SDK (June 2010)
Cheat Engine isn't guaranteed to work for everyone. It's not an issue with the application or the libraries. The libraries have an export defined in the main headers.
Bug reports are appreciated. I don't care about anything else. Older versions of the software are not supported.
// shaiya/include/common.h
//#define SHAIYA_EP6_4_PT
// shaiya/include/common.h
#define SHAIYA_EP6_4_PT
The shaiya library contains common types and packet definitions. The other projects depend on this library.
https://github.com/kurtekat/shaiya-episode-6/tree/main/shaiya
The sdev-client library is for build version 0x16021200
modifications. The DirectX SDK installer should create a system environment variable named DXSDK_DIR
that specifies the installation directory.
https://github.com/kurtekat/shaiya-episode-6/tree/main/sdev-client
https://github.com/kurtekat/shaiya-episode-6/tree/main/sdev-client/bin
The binary was patched to fix the recovery packet handler.
005942D8 01B0 58010000 ADD DWORD PTR DS:[EAX+158],ESI
005942DE 0190 60010000 ADD DWORD PTR DS:[EAX+160],EDX
005942E4 0188 68010000 ADD DWORD PTR DS:[EAX+168],ECX
The sdev-db library is for the dbAgent service. It adds support for the character list packet and the name availability packet.
https://github.com/kurtekat/shaiya-episode-6/tree/main/sdev-db
https://github.com/kurtekat/shaiya-episode-6/tree/main/sdev-db/bin
https://github.com/kurtekat/shaiya-episode-6/tree/main/sdev-db/bin/sql
The binary was patched to undo an edit that causes an item mall purchase dupe.
// bug
00407942 mov dword ptr [ebx+8],1
// original code
00407942 mov dword ptr [ebx+8],0
The sdev-login library is for the login service. It fixes a well-known bug (thanks, Cups) and parameterizes the login query. Use SQL Server Profiler to see the result.
declare @p1 int
set @p1=1
exec sp_prepexec @p1 output,N'@P1 text,@P2 text,@P3 bigint,@P4 text',N'EXEC usp_Try_GameLogin_Taiwan @P1,@P2,@P3,@P4','a','a',6998436556411240449,'127.0.0.1'
select @p1
https://github.com/kurtekat/shaiya-episode-6/tree/main/sdev-login
https://github.com/kurtekat/shaiya-episode-6/tree/main/sdev-login/bin
The sdev library is for the game service. Continue reading for more information.
https://github.com/kurtekat/shaiya-episode-6/tree/main/sdev/bin/v1
NpcQuest | Max Level |
---|---|
EP5 | 70 |
https://github.com/kurtekat/shaiya-episode-6/tree/main/sdev/bin/v2
NpcQuest | Max Level | Item Duration |
---|---|---|
EP6 | 80 | Yes |
https://github.com/kurtekat/shaiya-episode-6/tree/main/sdev/bin/v3
NpcQuest | Max Level | Item Duration |
---|---|---|
EP6 | 80 | No |
https://github.com/kurtekat/shaiya-episode-6/tree/main/sdev-db/bin
https://github.com/kurtekat/shaiya-episode-6/tree/main/sdev-db/bin/sql
Install the following procedures:
[dbo].[usp_Read_User_CashPoint_UsersMaster]
[dbo].[usp_Save_User_BuyPointItems2]
[dbo].[usp_Save_User_GiftPointItems2]
[dbo].[usp_Update_UserPoint]
If you receive an error, change ALTER
to CREATE
and try again.
The episode 6 format has 6 quest results, each containing up to 3 items. The following items are supported:
ItemId | SkillId | SkillLv |
---|---|---|
101112 | 432 | 2 |
101113 | 432 | 3 |
The library will divide the ability value by 100. The exp value in the client result window comes from the data; not the packet. Please don't report it as a bug.
https://github.com/kurtekat/shaiya-episode-6/tree/main/sdev/bin/v2
https://github.com/kurtekat/shaiya-episode-6/tree/main/sdev/bin/v2/sql
Warning: the Items script will create an empty table.
The library expects the same day(s) to seconds conversion as the client.
Days | Duration |
---|---|
1 | 86400 |
7 | 604800 |
15 | 1296000 |
30 | 2592000 |
Items will not be removed from guild warehouses. Items will not be deleted without sending a notification to the client.
The data is supported but the feature is not implemented.
Value | Definition |
---|---|
0 | None |
1 | Unexpandable |
2 | Expandable |
The kill count will determine which effect will be rendered. Notice effects are not supported.
KillCount | Effect |
---|---|
0 | N/A |
1 | RevengeMark_Loop_01.EFT |
2 | RevengeMark_Loop_02.EFT |
3 | RevengeMark_Loop_03.EFT |
4 | RevengeMark_Loop_04.EFT |
5 | RevengeMark_Loop_05.EFT |
6 | RevengeMark_Loop_06.EFT |
7 | RevengeMark_Loop_07.EFT |
8 (or greater) | RevengeMark_Loop_08.EFT |
The sdev-client library adds support for system message 509.
508 "Your revenge to <t> has succeeded!"
509 "<t> killed you <v> time(s)."
The following skills are supported:
SkillId | Ability |
---|---|
375 | 52 |
376 | 53 |
377 | 54 |
378 | 55 |
379 | 56 |
380 | 57 |
398 | 70 |
399 | 70 |
400 | 70 |
401 | 70 |
432 | 87 |
The library uses base stats; not ability stats. Relog when stats are applied (level up, reset, etc.).
Use the following example to get started:
;PSM_Client\Bin\Data\ItemSynthesis.ini
[ItemSynthesis_0]
ItemID=102073
SuccessRate=80
MaterialType=30,30,30,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
MaterialTypeID=5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
MaterialCount=1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
CreateType=30
CreateTypeID=6
CreateCount=1
[ItemSynthesis_1]
ItemID=102073
SuccessRate=80
MaterialType=30,30,30,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
MaterialTypeID=12,12,12,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
MaterialCount=1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
CreateType=30
CreateTypeID=13
CreateCount=1
[ItemSynthesis_2]
ItemID=102073
SuccessRate=80
MaterialType=30,30,30,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
MaterialTypeID=19,19,19,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
MaterialCount=1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
CreateType=30
CreateTypeID=20
CreateCount=1
[ItemSynthesis_3]
ItemID=102073
SuccessRate=80
MaterialType=30,30,30,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
MaterialTypeID=26,26,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
MaterialCount=1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
CreateType=30
CreateTypeID=27
CreateCount=1
[ItemSynthesis_4]
ItemID=102073
SuccessRate=80
MaterialType=30,30,30,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
MaterialTypeID=33,33,33,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
MaterialCount=1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
CreateType=30
CreateTypeID=34
CreateCount=1
[ItemSynthesis_5]
ItemID=102073
SuccessRate=80
MaterialType=30,30,30,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
MaterialTypeID=40,40,40,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
MaterialCount=1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
CreateType=30
CreateTypeID=41
CreateCount=1
The gold per percentage value in the library is the same as the official server.
constexpr auto gold_per_percentage = 100'000'000;
The ReqVg value is the success rate. The library will multiply the value by 100.
ItemId | Effect | ReqVg |
---|---|---|
102074 | 102 | 5 |
102075 | 102 | 10 |
This feature will not be implemented.
The library expects SetItem.SData to be in the PSM_Client/Bin/Data directory.
The client expects the file to be encrypted.
" Sinergia [5]\n- LUC +20\n- DEX +50\n- STR +70"
The library expects the file to be decrypted. The bonus text is expected to be 12 comma-separated values.
The values are signed 32-bit integers, expected to be in the following order:
- strength
- dexterity
- intelligence
- wisdom
- reaction
- luck
- health
- mana
- stamina
- attackPower
- rangedAttackPower
- magicPower
Use item 101150
to activate the window. The CraftName
and Gems
will be removed from the original item if the transfer is successful.
ItemId | Effect |
---|---|
101150 | 105 |
The base success rate is 30 percent.
ItemId | Effect | ReqVg | Success Rate |
---|---|---|---|
101156 | 106 | 20 | 50 |
101157 | 106 | 50 | 80 |
101158 | 106 | 60 | 90 |
Version | Supported |
---|---|
0x16012100 | Yes |
0x16021200 | No |
0x16032100 | No |
Use item 101101 to activate the window. See system message 510 for more information.
ItemId | Effect |
---|---|
101090 | 103 |
101132 | 103 |
This feature will not be implemented.