Notes

Open : server\Initialize\WorldSystem.ini

edit [MainThread] section

server\Initialize\WorldSystem.ini > [MainThread]

[MainThread]
SleepTerm = 0
SleepValue = 0
SleepIgnore = 1

        

add new section for [DQSThread]

server\Initialize\WorldSystem.ini > [DQSThread]

[DQSThread]
SleepTerm = 0
SleepValue = 0
SleepIgnore = 1

        

• Upto 24 Selectable Results (default was 5 only)
• Allow to save result if accidentally close window
• Allow ignore upgrade
• Allow transfer upgrade
Below is an explanation of how "ignore" and "transfer" work
The E symbol is responsible for ignoring the value and transferring the value, only one material containing such a symbol is possible in the materials. in the results, this symbol is responsible for copying the value
The D symbol is responsible for ignoring the value, there are no restrictions on its use in materials. for results this symbol has no meaning

if combination material has a reference marker (E) in enchant, then the index for LR will be selected from this material (this is especially useful when it is necessary to indicate several LL in the materials)

examples of materials with values that are a marker for enchant transfer
material with 0xEEEEEEEE suits any enchant, any number of slots
material with 0x7EEEEEEEE will ignore all enchant, requires 7 slots
material with 0x5FFFFEEE will ignore taliks in first 3 holes, other holes must be empty, requires 5 slot
result with 0x7EEEEEEEE, transfer all enchant, expose 7 slots
result with 0x5FFFFEEE, transfer enchant from the first three holes, set 5 slots

examples of materials with values that are not a marker for enchant transfer
material with 0xDDDDDDDD suitable for any enchant, any number of slots
material with 0x7DDDDDDD will ignore all enchant, requires 7 slots
material with 0x5FFFDDDD will ignore taliks in first 3 slots, other holes must be empty, requires 5 slots

if you make a combination with materials that do not have E symbols, and use E symbols in the results, then the result is undefined
if you make a combination with several materials that have E symbols, and use E symbols in the results, then the result is undefined

Open : RadarItem.dat

Find EffSort, add 5th value 0 / 1.

Value
Description
OFF / always show commonex-3-3 (default behavior)
0
OFF / always show commonex-3-3
1
activate radar extended
Explanation :
Default rdpvp03 was 1110 its gonna be the same as 11100
If you want to show each race, change it to 11101
 

By default, you need to edit client\SpriteImage\common\commonex.spr to represent the icon information.

File
Description
commonex-3-1
Same Race
commonex-3-2
Same Race, Race Leader
commonex-3-3
Bellato
commonex-3-4
Bellato, Race Leader
commonex-3-5
Cora
commonex-3-6
Cora, Race Leader
commonex-3-7
Accretia
commonex-3-8
Accretia, Race Leader
commonex-3-9
Pitboss

• Enable to use Effect from Equipments
• Enable negative value for Eff 2 (Decrease EXP Gain Rate)
DO NOT USE Eff : 40, 50, 51, 81 !!!

Below is a list of all resource effects

Eff
Description
0
Magnet Loot
Column Eff1 = 0, Val1 = 2, MaxVal1 = 2
1
Discount NPC Purchase/Sell
2
EXP Gain Rate
3
Language Translator
4
Item Level
5
EXP Gain Rate
6
PT Gain Rate
7
Mining Speed
8
Item Drop Rate
9
EXP Gain Rate
10
Discount NPC Purchase
11
Discount NPC Sell
12
HP Regeneration
13
FP Regeneration
14
SP Regeneration
15
Max HP
16
Max FP
17
Max SP
18
Attack
19
Melee Attack
20
Melee Skill Damage
21
Range Attack
22
Range Skill Damage
23
Force Attack
24
Defense
25
Vamp (Damage to HP)
26
Vamp (Damage to FP)
27
Vamp (Damage to SP)
28
Radius of Monster Aggro
29
MAU Attack (Melee Weapon)
30
MAU Attack (Range Weapon)
31
MAU Attack (Force Weapon)
32
MAU Attack (Defense)
33
Animus Attack (Force Weapon)
34
Animus Attack
35
Animus Attack
36
Animus Attack
37
Animus Attack
38
Attack of Melee/Range Weapon
39
Skill Range
40
*DO NOT USE*
41
Movement Speed
42
Reflects 100% of Received Damages
43
Accuracy (Melee Weapon)
44
Accuracy (Range Weapon)
45
Force Accuracy
46
Skill Accuracy
47
Chance of Critical Attack
48
Accuracy
49
Avoid
50
Restricts Actions *DO NOT USE*
51
Chance Resurrect On Death *DO NOT USE*
52
Monsters Level Requirement
53
Party Level Requirement
54
Reflects of Received Damages
55
Using any teleport scrolls
56
+100% Chance Avoid
57
Block Chance
58
-100% Potion Delay
59
PT Melee Gain Rate
60
PT Range Gain Rate
61
PT Force Gain Rate
62
PT Defense Gain Rate
63
PT Shield Gain Rate
64
PT Animus Gain Rate
65
PT MAU Gain Rate
71
EXP Gain Rate
72
EXP Gain Rate
73
Item Drop Rate
74
Item Drop Rate
75
Item Drop Rate
76
Detect
77
Debuff Duration
78
Chance Ignore Shield Block
79
Ignorant Talic in Weapon
80
Favor Talic in Armors
81
Chance to Protect Items from Dropping on Death *DO NOT USE*
82
All PT Gain Rate
84
Max SP
85
FP Cost
86
Accuracy
87
Avoid
88
Max HP/FP
89
Attack
90
Defense
91
Skill Level
92
Stealth
93
Detect
94
Remove Damage Protection Skill
95
Movement Speed
96
Reveals information about enemy vulnerability
97
FP Regeneration
98
Force Attack
99
Max FP
100
Vamp (Damage to HP)
101
Vamp (Damage to HP)
102
Critical Attack Chance
103
Attack Range
104
Defense
105
Debuff Duration
106
HP Regeneration
107
Avoid
108
Attack Delay (Launcher)
109
Force Attack Range
110
Chance Receiving Critical Attack
111
Block Chance
112
Elemental Resistance
113
Max HP
114
Debuff Duration
115
Chance Ignore Shield Block
116
Range Skill Delay
117
Melee Skill Delay
118
Force Delay

There are "Effects Details" in client side. If you want to enable/disable certain part to shown or change of wordings, you can edit from client\DataTable\en-gb\resource_effects.ini

This is regarding how effects gonna applied if character have multiple ResourceItem with same ItemSerise

Open : resource_serise.json and to be safe, set it to : dynamic

Below is an explanation and example

CCR behaviour :
on clients side : dynamic type
on server side : (pay attention to the order on last line):
99 item A + 99 item B = 50 value
99 item A + 99 item B + 99 item C = 500 value
99 item A + 99 item C + 99 item B = 50 value

example : item have same ItemSerise
item A : value 5, max value 50
item B : value 5, max value 50
item C : value 5, max value 500

static type (group boundaries are formed globally and do not depend on items in the inventory):
99 item A + 99 item B = 100 value
99 item A + 99 item B + 99 item C = 500 value

dynamic type (group boundaries are formed depending on the items in the inventory):
99 item A + 99 item B = 50 value
99 item A + 99 item B + 99 item C = 500 value

Only usable for Monster, dont try to apply to Character!

Open : ClassSkill.dat (need to use 2 column : ContParamCode, ContParamIndex, and ContValue)

Reflect Damage ContParamCode1 3 ContParamIndex1 54 ContValue1 0.42 42% of the damage will be reflected to the attacker.
Chance to Reflect ContParamCode2 3 ContParamIndex2 0 ContValue2 0.88 88% chance that damage will be reflected.
Conclusion There is an 88% chance that damage will be reflected, with 42% of the damage being reflected back to the attacker.

Problem : ipwhp01 can be used anytime
Expected : ipwhp01 must be peace state
Analyze : invalid UseState specified for ipwhp01, comparing to ipwhp03 can be used anytime.

Solution : PotionItem.dat > code ipwhp01 > UseState 1

UseState
Description
0
anytime
1
peace state
2
battle state
3
dead state

Problem : click item (or several item) with result price more than 1B = client crash.
Solution : NDLanguage.edf > Serial 1935 > change to [Invoice: %s]

Problem : When UMT Attacked, its gonna send notification, if its wrong configured = client crash.
Solution : NDLanguage.edf > Serial 2665 > change to The unmanned mining tool is under attack.

Possibility 1

Mistake at Developing (so can be from multiple factor, such as : editing .ini, map, quest, or even script)

Possibility 2

Corrupt / Mistake when editing global.json or any of .json files (validate it after editing to make sure its correct)

Possibility 3

• Server not yet registered
• You forgot to set environment.json
• Your device have something changed

Possibility 4

Stuck / failed update new version database tbl_schema_version & database_migration.json

Possibility 5

CGameServerView::OnCreate(...): g_Main.Init() Fail!
Try to revert to original files for \RF_Bin\Initialize\PvpCashPoint.ini

Possibility 6

Domain certificate corruption or failure detected during license verification
Set enable_server_certificate_verification to false at environment.json

Advice

• My advice is to perform step-by-step debugging using the default CCR configuration for Initialize, Map, Quest, and Scripts.
• If that works, then try using the default HGKProtect configs (dont forget to copy environment.json and license.dat).
• By doing each step individually, you can pinpoint what is causing the error or failure.

Possibility 1

You may using different BILLING database, usually happen if you use tbl_userstatus (id : binary)

Solution : run queries below.

Solution
                            
/* HGK BILLING */
USE [BILLING]
GO
ALTER PROCEDURE pAddCashAmount
    @s_userid varchar(20),
    @s_subsystem_name varchar(64),
    @s_cash float
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @before_amount float = -1
    DECLARE @after_amount float = -1

    UPDATE [dbo].[tbl_UserStatus]
    SET  @before_amount = [Cash], [Cash] += @s_cash, @after_amount = [Cash] + @s_cash
	WHERE [id] = CONVERT(binary,@s_userid);

	INSERT INTO [dbo].[tbl_change_amount] ([userid],[subsystem_name],[change],[before_amount],[after_amount],[Date])
	VALUES (@s_userid,@s_subsystem_name,@s_cash,@before_amount,@after_amount,GETDATE())

	SELECT 1 as operation_status;
END
GO

USE [BILLING]
GO
ALTER PROCEDURE pAddPcBangTime
	@s_userid varchar(20),
	@s_subsystem_name varchar(64),
	@addhour int
AS
BEGIN
	SET NOCOUNT ON;
	IF (SELECT Status As BillType FROM [tbl_UserStatus] WHERE Id = CONVERT(binary,@s_userid)) = 2
		UPDATE [tbl_UserStatus] SET DTEndPrem = DATEADD(HOUR, @addhour, DTEndPrem) WHERE Id = CONVERT(binary,@s_userid);
	ELSE
		UPDATE [tbl_UserStatus] SET Status = 2, DTEndPrem = DATEADD(HOUR, @addhour, GETDATE()) WHERE Id = CONVERT(binary,@s_userid);

	SELECT 1 as operation_status;
END
GO

USE [BILLING]
GO
ALTER PROCEDURE [dbo].[pGetPcBangTime]
	@s_userid varchar(20)
AS
BEGIN
	SET NOCOUNT ON;
	SELECT DTEndPrem as pc_bang_end FROM [tbl_UserStatus] WHERE Id = CONVERT(binary,@s_userid);
END
GO

USE [BILLING]
GO
ALTER PROCEDURE pSubCashAmount
	@s_userid varchar(20),
	@s_subsystem_name varchar(64),
	@s_cash float
AS
BEGIN
	SET NOCOUNT ON;
	BEGIN TRANSACTION;
	BEGIN TRY
		IF @s_cash <= 0
			SELECT 0 as operation_status;
		ELSE BEGIN
			DECLARE @before_amount float = -1
			DECLARE @after_amount float = -1

			UPDATE [dbo].[tbl_UserStatus]
			SET  @before_amount = [Cash], [Cash] -= @s_cash, @after_amount = [Cash] - @s_cash
			WHERE [Id] = CONVERT(binary,@s_userid);

			INSERT INTO [dbo].[tbl_change_amount] ([userid],[subsystem_name],[change],[before_amount],[after_amount],[Date])
			VALUES (@s_userid, @s_subsystem_name, -@s_cash, @before_amount, @after_amount, GETDATE())

			SELECT
				CASE
					WHEN @after_amount < 0 THEN 0
					ELSE 1
				END as operation_status;

			IF @after_amount < 0
				RAISERROR (15600,-1,-1, 'pSubCashAmount');
		END
	END TRY
	BEGIN CATCH
		IF @@TRANCOUNT > 0
			ROLLBACK TRANSACTION;
	END CATCH;

	IF @@TRANCOUNT > 0
		COMMIT TRANSACTION;
END
GO
/*END OF LINE HGK */
                            
                        

Possibility 2

Your account not exist in the billing tables

Solution : Insert your account to billing tables manually or run these query below to automaticly insert your account when you open cash shop.

Solution
                            
USE [BILLING]
GO
ALTER PROCEDURE [dbo].[RF_CheckBalance]
    @Login varchar(13),
    @Balance bigint = 0 OUTPUT
AS
BEGIN
	SET NOCOUNT ON;

	IF NOT EXISTS (SELECT Cash FROM [dbo].[tbl_UserStatus] WITH (NOLOCK) WHERE id = CONVERT(binary, @Login)) BEGIN
		INSERT INTO [dbo].[tbl_UserStatus] (Id, Status, Cash, DTStartPrem, DTEndPrem) VALUES (CONVERT(binary, @Login), 1, 0, GETDATE(), GETDATE());
		SET @Balance = 0;
	END
	ELSE BEGIN
		SET @Balance = (SELECT [Cash] FROM [dbo].[tbl_UserStatus] WITH (NOLOCK) WHERE [Id] = CONVERT(binary, @Login));
	END
END
GO
                            
                        

Possibility 1

Usually happen when Client & Server Version Missmatch.
Make sure use latest version / same version for Client : HGKClient.dll & RF_Online.bin and for Server : HGKProtect.dll

Possibility 2

Usually happen when Server wrong configure GateIP or ZonePort.
GateIP can be configured at WorldInfo.ini & ZonePort can be configured from server_memory_patch.json

Possibility 3

Usually happen when Server is Full (2532) or have Connection trouble (not stable).

Possibility 1

Usually happen when Client Files is missing or corrupt.
Make sure to use Clean and Complete Client (2232 / GU Version)

Possibility 2

You forgot to put "required files" at Clients.
Make sure every you made some edit for related module, restart your zone and put these files to client
client_memory_patch : server\HGKProtect\memory_patch.bin and put into client\System\memory_patch.bin
item_sockets : server\HGKProtect\GemSockets.dat into GemSockets.edf and put into client\DataTable\GemSockets.edf
radius : server\HGKProtect\RadiusView.dat into RadiusView.edf and put into client\DataTable\RadiusView.edf
season_pass : server\HGKProtect\SeasonPass.dat into SeasonPass.edf and put into client\DataTable\SeasonPass.edf
transmog : server\HGKProtect\Transmog.dat into Transmog.edf and put into client\DataTable\Transmog.edf
Including default HGK Files, such as : .ini .spr .dds

Possibility 3

Usually happen when Asset Encryption enabled and the .key path is wrong / incorrect.
Also usually because the encrypted files is wrong / incorrect with the one was generated.

Possibility 4

Mistake at Developing, such as "skin related like .msh files", "items related like .edf files", "UI related like .spr files", etc.
Example : for .edf related to items with "Special Effects" if its not contain any effects, set the EffNum to 0 (possible value : 0 ~ 5).