|
You last visited: Today at 21:18
Advertisement
9.5.2 KiteKat repack
Discussion on 9.5.2 KiteKat repack within the Rappelz Private Server forum part of the Rappelz category.
02/05/2026, 12:02
|
#91
|
elite*gold: 0
Join Date: Apr 2017
Posts: 213
Received Thanks: 119
|
Quote:
Originally Posted by ThunderNikk
Well I stand corrected, but this isn't 9.1 source this is based from the 9.5 release.
I will do some upgrading and testing.
|
yes and no, this repack include source as well and im 1000% sure it will not work on 2025 or i dont know how to setup a server ( there is a chance yes )
|
|
|
02/05/2026, 13:47
|
#92
|
elite*gold: 0
Join Date: Jan 2010
Posts: 12
Received Thanks: 1
|
Hi atherounge3,
First of all, huge thanks for your work on this repack!
I wanted to share the specific critical errors I am encountering with the current release files, confirming what others (like Ne0@NCarbon) have reported.
My Setup:
SQL Server: Properly installed (SQL Express).
User: sa user configured as db_owner for all 3 databases.
Auth/Connection: Fully working (Login successful, game connects).
The Issues (GameLog.txt):
1. Critical Crash - Cash Shop Loop (Nesting Level Exceeded)
Even when disabling the cash shop in GameServer.opt (N:game.cash_usable_server:0), the server still crashes upon login with an infinite loop error in the database.
DB COM ERROR ... DB_ReadCommercialStorageList(dbo.smp_read_purchase d_item_list) : Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32).
2. Critical Crash - Character State Saving (Argument Mismatch)
The GameServer binary seems to send more arguments than the Stored Procedure in the Telecaster database expects. This crashes the server when buffering/saving character state.
DB COM ERROR ... DB_UpdateState(dbo.smp_update_state: @IN_SID: 4) : Procedure or function smp_update_state has too many arguments specified.
DB COM ERROR ... DB_UpdateState(dbo.smp_insert_state: @IN_SID: 8) : Procedure or function smp_insert_state has too many arguments specified.
It looks like the Telecaster database schema is older/incompatible with the provided CaptainHerlock.exe binary regarding these procedures.
Looking forward to the updated repack/fresh RDBs you mentioned!
Thanks again.
|
|
|
02/05/2026, 21:26
|
#93
|
elite*gold: 0
Join Date: Feb 2025
Posts: 147
Received Thanks: 58
|
Repack update to 1.0.2
Repack got updated. Download link got refreshed
Changelog:
1) Fixed smp_read_purchased_item_list procedure in telecaster
2) Removed source-compiled binary from Game_bin directory to avoid confusing. Now here are only original and sapir619 ones (Source is still included, so if you wish, you build it and change telecaster to your own needs. As you see above, source built herlock requires some telecaster tables changes)
3) Changed Item, ItemRef and SkillFullResource views. Now they are working correctly
4) Modified some lua scripts in adjusted and implemented YoSiem's player ban script
5) Added "scripts" directory inside of "tools" directory. It contains some useful scripts, such as:
- Script to modify DropGroupResource in bulk
- Script to modify MonsterDropTableResource in bulk
- Script to create 02_item.spr file from scratch based on your directory
- MD5 hash script
- Account registration script, so you won't struggle anymore with account creation. Tried to make it as simple to use as possible
- Archive with rest of YoSiem scripts (careful, more than half of them wouldn't work here without adjustments, due to different gameservers. For example, retail 9.5.2 Herlock don't have os. / string libs.
- README.txt which worth to read to avoid stupid questions
- Grimoire tool for client data rebuild / hashing resources
6) Added fresh rdbs to the client data
7) Updated Description.txt, added here some info with mentioning people participated in this repack life. Now here also would be current version of the repack. Also added here miniguide to installation of all the shit
Additional info: I did NOT sort IDA/ pdb files because I have no wish for that. So I have no clue which pdb is original. If you have wish, then sort it out. But for now, I just don't want to do that. And being honest, I bet nobody bothers with that (at least 99% )
Special thanks to:

For sharing his scripts

For reporting bugs

For Grimoire Tool
If you're lazy ass and don't want to get back to first page, here is the link:
I also would like you guys to test it more. This player ban script looks very smart decision, so if somebody has good PC, try to test it. LIke run game in 2+ windows and ban urself, then try to log in, etc
|
|
|
02/05/2026, 23:33
|
#94
|
elite*gold: 0
Join Date: Jan 2010
Posts: 12
Received Thanks: 1
|
Hi atherounge3,
Thanks for the updated repack! Everything is working great now with the new DBs.
I just wanted to report the small syntax error in Resource\Script\Kitekat\extra_things.lua that was causing the GameServer to crash on startup (Lua load failed).
Around line 209 (inside the epoch_to_date function), there is a misplaced double quote in the sconv parameters:
Current (Error): "#@month"@#,
Fixed: "#@month@#",
Here is the full corrected line to replace:
Lua
return sconv("#@day@# / #@month@# / #@year@#", "#@day@#", day, "#@month@#", month, "#@year@#", year)
Applying this fix solved the startup crash immediately. Thanks again for your hard work!
|
|
|
02/05/2026, 23:43
|
#95
|
elite*gold: 0
Join Date: Oct 2022
Posts: 85
Received Thanks: 1
|
Is there by any chance a way to apply your updates to the Telecaster database without having to reset it from scratch, so I don’t lose my gameplay progress? Thanks.
|
|
|
02/06/2026, 05:20
|
#96
|
elite*gold: 0
Join Date: Feb 2025
Posts: 147
Received Thanks: 58
|
Quote:
Originally Posted by karlkani600
Hi atherounge3,
Thanks for the updated repack! Everything is working great now with the new DBs.
I just wanted to report the small syntax error in Resource\Script\Kitekat\extra_things.lua that was causing the GameServer to crash on startup (Lua load failed).
Around line 209 (inside the epoch_to_date function), there is a misplaced double quote in the sconv parameters:
Current (Error): "#@month"@#,
Fixed: "#@month@#",
Here is the full corrected line to replace:
Lua
return sconv("#@day@# / #@month@# / #@year@#", "#@day@#", day, "#@month@#", month, "#@year@#", year)
Applying this fix solved the startup crash immediately. Thanks again for your hard work!
|
Thank you! I don't know how this even happened, lol!
Quote:
Originally Posted by osomeloso
Is there by any chance a way to apply your updates to the Telecaster database without having to reset it from scratch, so I don’t lose my gameplay progress? Thanks.
|
Restore it as additional databases and transfer these things:
- StringResource_EN from arcadia
- Item; ItemRef and SkillFullResource views from Telecaster
- smp_read_purchased_item_list procedure from Telecaster
- on_login script.lua script
- Kitekat/extra_things.lua script (with fix from karlkani600 written above)
- Kitekat/PlayerBan.lua script
Also use new client
Or you can just backup / copy-paste next tables:
Alliance
Character
Farm
Friends
GlobalVariable
Guild
GuildMember
Item
ItemCoolTime
ItemKeeping
Party
Pet
Quest
QuestCOolTime
RandomOption
RandomQuestInfo
RankingInfo
RankingScore
SecrouteInfo
Skill
State
Summon
Title
TitleCondition
But in fact, I think that you're playing alone, so only Character, Skill, RandomOption, Summon, Pet and Item would be pretty enough for you
(If you have navicat you can just ctrl+a -> ctrl+c -> ctrl+v bulk copypaste all tables lol)
|
|
|
02/06/2026, 16:52
|
#97
|
elite*gold: 0
Join Date: Jul 2011
Posts: 124
Received Thanks: 89
|
9.1 binary gs does not work with sql 2025,but 9.5.2 binary works with 2025 standard
|
|
|
02/06/2026, 18:04
|
#98
|
elite*gold: 0
Join Date: Oct 2022
Posts: 85
Received Thanks: 1
|
2026-02-06 18:01:10 Lua run doFile failed. Resource\Script\Kitekat\extra_things.lua([string "..."]:209: ')' expected near '@')
when start server.
Copilot fix, work.
-- Strings used: From 100046001 - to 100110000
function set_debug( var )
local flag = tonumber(get_flag("dbgm")) or 0
if var == nil or var == '' then
if flag == 0 then
set_flag("dbgm", 1)
else
set_flag("dbgm", 0)
end
else
set_flag("dbgm", flag)
end
end
function debug_notice( noticeString )
local flag = tonumber(get_flag("dbgm")) or 0
if flag == 1 then
private_notice("<#272AF5>[Debug]: " .. noticeString)
end
end
function is_in_form( location )
local pointsArray = {}
if location == "star" then
pointsArray =
{
{ x = 151898, y = 73295 },
{ x = 152013, y = 73158 },
{ x = 152160, y = 73242 },
{ x = 152213, y = 73059 },
{ x = 152397, y = 73106 },
{ x = 152349, y = 72906 },
{ x = 152554, y = 72864 },
{ x = 152449, y = 72717 },
{ x = 152454, y = 72465 },
{ x = 152538, y = 72345 },
{ x = 152407, y = 72308 },
{ x = 152365, y = 72245 },
{ x = 152397, y = 72119 },
{ x = 152255, y = 72135 },
{ x = 152192, y = 72087 },
{ x = 152166, y = 71961 },
{ x = 152045, y = 72024 },
{ x = 151992, y = 72009 },
{ x = 151914, y = 71909 },
{ x = 151819, y = 72019 },
{ x = 151767, y = 72024 },
{ x = 151641, y = 71956 },
{ x = 151614, y = 72082 },
{ x = 151551, y = 72114 },
{ x = 151425, y = 72103 },
{ x = 151425, y = 72266 },
{ x = 151268, y = 72324 },
{ x = 151357, y = 72471 },
{ x = 151347, y = 72691 },
{ x = 151263, y = 72859 },
{ x = 151410, y = 72875 },
{ x = 151431, y = 72912 },
{ x = 151410, y = 73059 },
{ x = 151520, y = 73043 },
{ x = 151588, y = 73080 },
{ x = 151635, y = 73200 },
{ x = 151756, y = 73132 },
{ x = 151819, y = 73174 },
{ x = 151819, y = 73174 }
}
elseif location == "hori_scarecrows" then
pointsArray =
{
{ x = 154596, y = 76419 },
{ x = 154486, y = 76371 },
{ x = 154339, y = 76387 },
{ x = 154213, y = 76434 },
{ x = 154134, y = 76513 },
{ x = 154082, y = 76581 },
{ x = 154040, y = 76676 },
{ x = 154029, y = 76849 },
{ x = 154098, y = 77007 },
{ x = 154213, y = 77117 },
{ x = 154350, y = 77159 },
{ x = 154481, y = 77164 },
{ x = 154633, y = 77091 },
{ x = 154764, y = 76975 },
{ x = 154806, y = 76875 },
{ x = 154817, y = 76686 },
{ x = 154770, y = 76566 }
}
end
local isInside = PolygonsCheck(pointsArray, gv("x"), gv("y"))
debug_notice( "[" .. location .. "]: Your X: " .. gv('x') .. "; Y: " .. gv('y') )
if isInside then
debug_notice("Inside of form")
else
debug_notice("Outside")
end
end
function PolygonsCheck(polygon, px, py)
local inside = false
local j = #polygon
for i = 1, #polygon do
local xi, yi = polygon[i].x, polygon[i].y
local xj, yj = polygon[j].x, polygon[j].y
local intersects = ((yi > py) ~= (yj > py)) and (px < (xj - xi) * (py - yi) / ((yj - yi) + 0.000001) + xi)
if intersects then
inside = not inside
end
j = i
end
return inside
end
function levelupmypets(form_slot)
if form_slot == nil or form_slot == '' then form_slot = 0 end
for i = 1, 180 do
local creature_handle = get_creature_handle( form_slot )
local curr_level = get_creature_value( creature_handle, "lv" )
local curr_evo = get_creature_value( creature_handle, "evolution_depth" )
local id = get_creature_value( creature_handle, "job" )
if curr_level ~= 60 and curr_level ~= 115 then
set_creature_value(creature_handle, "lv", ( curr_level + 1 ) )
elseif curr_level == 60 and curr_evo == 1 then
set_creature_value(creature_handle, "ev_1_ID", id)
set_creature_value(creature_handle, "ev_1_level", curr_level)
creature_evolution(creature_handle)
set_creature_value(creature_handle, "lv", ( curr_level + 1 ) )
elseif curr_level == 115 and curr_evo == 2 then
set_creature_value(creature_handle, "ev_2_ID", id)
set_creature_value(creature_handle, "ev_2_level", curr_level)
creature_evolution(creature_handle)
set_creature_value(creature_handle, "lv", ( curr_level + 1 ) )
end
end
end
local function is_leap(year)
return (year % 4 == 0 and year % 100 ~= 0) or (year % 400 == 0)
end
local function epoch_to_date(ts)
local seconds_per_day = 86400
local days = math.floor(ts / seconds_per_day)
local year = 1970
while true do
local days_in_year = is_leap(year) and 366 or 365
if days >= days_in_year then
days = days - days_in_year
year = year + 1
else
break
end
end
local month_lengths =
{
31,
is_leap(year) and 29 or 28,
31,
30,
31,
30,
31,
31,
30,
31,
30,
31
}
local month = 1
while days >= month_lengths[month] do
days = days - month_lengths[month]
month = month + 1
end
local day = days + 1
return sconv("#@day@# / #@month@# / #@year@#",
"#@day@#", day,
"#@month@#", month,
"#@year@#", year)
end
function server_variables()
local process_start = get_env("process.start")
local uptime = get_env("process.uptime")
local process_load = get_env("process.load")
local process_memory = get_env("process.memory")
local paged_memory = get_env("process.paged_memory")
local curr_online = get_env("game.user_count")
local exp_ratio = get_env("game.exp_rate")
local chaos_drop_ratio = get_env("game.chaos_drop_rate")
local gold_drop_ratio = get_env("game.gold_drop_rate")
local item_drop_ratio = get_env("game.item_drop_rate")
local party_rate_0 = get_env("game.party_exp_rate_0")
local party_rate_1 = get_env("game.party_exp_rate_1")
local party_rate_2 = get_env("game.party_exp_rate_2")
local party_rate_3 = get_env("game.party_exp_rate_3")
local party_rate_4 = get_env("game.party_exp_rate_4")
local party_rate_5 = get_env("game.party_exp_rate_5")
local party_rate_6 = get_env("game.party_exp_rate_6")
local party_rate_level = get_env("game.party_exp_penalty_level")
dlg_general("<br><br>Server started at: " .. process_start .. "<br>Server uptime is: " .. uptime .. ".<br>CPU load: " .. process_load .. "%<br>Process RAM Usage: " .. process_memory .. "<br>Process paged memory: " .. paged_memory .. "<br><br><br>Current online is: " .. curr_online .. " players.<br>EXP rate: " .. exp_ratio .. "<br>Chaos rate: " .. chaos_drop_ratio .. "<br>Gold drop rate: " .. gold_drop_ratio .. "<br>Item drop rate: " .. item_drop_ratio .. "<br>Parte rate 0: " .. party_rate_0 .. "<br>Parte rate 1: " .. party_rate_1 .. "<br>Parte rate 2: " .. party_rate_2 .. "<br>Parte rate 3: " .. party_rate_3 .. "<br>Parte rate 4: " .. party_rate_4 .. "<br>Parte rate 5: " .. party_rate_5 .. "<br>Parte rate 6: " .. party_rate_6 .. "<br>Party rate level: " .. party_rate_level .. "<br><br>")
end
function npcid()
debug_notice("NPC ID: " .. get_npc_id())
end
function get_character_info( characterName )
if characterName == nil or characterName == '' then characterName = gv("name") end
if gv("login", characterName) ~= 1 then
message("<b>" .. characterName .. "</b> is currently offline")
return
end
local SlotsTable = {}
SlotsTable[0] = "@6700" -- Weapon
SlotsTable[1] = "@6702" -- Shield
SlotsTable[2] = "@6701" -- Armor
SlotsTable[3] = "@6703" -- Helmet
SlotsTable[4] = "@6704" -- Gloves
SlotsTable[5] = "@6705" -- Boots
SlotsTable[6] = "@6706" -- Belt
SlotsTable[7] = "@6707" -- Cloak
SlotsTable[8] = "@6820" -- Necklace
SlotsTable[9] = "@6818" -- Ring [1]
SlotsTable[10] = "@6818" -- Ring [2]
SlotsTable[11] = "@6819" -- Earring
SlotsTable[12] = "@7193" -- Mask
SlotsTable[14] = "@7542" -- Decorative Weapon
SlotsTable[15] = "@7543" -- Decorative Shield
SlotsTable[16] = "@7544" -- Decorative Costume
SlotsTable[17] = "@7545" -- Decorative Helmet
SlotsTable[18] = "@7546" -- Decorative Glove
SlotsTable[19] = "@7547" -- Decorative Boots
SlotsTable[20] = "@7548" -- Decorative Cloak
SlotsTable[21] = "@7549" -- Decorative Shoulder Piece (wings)
SlotsTable[22] = "@9702" -- Mount<7.2>
SlotsTable[23] = "@6711" -- Bag
--job_classification_table[job_id][2]
local equippedItemsList = {}
equippedItemsList[0] = "Nothing"
equippedItemsList[1] = "Nothing"
equippedItemsList[2] = "Nothing"
equippedItemsList[3] = "Nothing"
equippedItemsList[4] = "Nothing"
equippedItemsList[5] = "Nothing"
equippedItemsList[6] = "Nothing"
equippedItemsList[7] = "Nothing"
equippedItemsList[8] = "Nothing"
equippedItemsList[9] = "Nothing"
equippedItemsList[10] = "Nothing"
equippedItemsList[11] = "Nothing"
equippedItemsList[12] = "Nothing"
equippedItemsList[14] = "Nothing"
equippedItemsList[15] = "Nothing"
equippedItemsList[16] = "Nothing"
equippedItemsList[17] = "Nothing"
equippedItemsList[18] = "Nothing"
equippedItemsList[19] = "Nothing"
equippedItemsList[20] = "Nothing"
equippedItemsList[21] = "Nothing"
equippedItemsList[22] = "Nothing"
equippedItemsList[23] = "Nothing"
local equippedItemsIDs = {}
equippedItemsIDs[0] = 0
equippedItemsIDs[1] = 0
equippedItemsIDs[2] = 0
equippedItemsIDs[3] = 0
equippedItemsIDs[4] = 0
equippedItemsIDs[5] = 0
equippedItemsIDs[6] = 0
equippedItemsIDs[7] = 0
equippedItemsIDs[8] = 0
equippedItemsIDs[9] = 0
equippedItemsIDs[10] = 0
equippedItemsIDs[11] = 0
equippedItemsIDs[12] = 0
equippedItemsIDs[14] = 0
equippedItemsIDs[15] = 0
equippedItemsIDs[16] = 0
equippedItemsIDs[17] = 0
equippedItemsIDs[18] = 0
equippedItemsIDs[19] = 0
equippedItemsIDs[20] = 0
equippedItemsIDs[21] = 0
equippedItemsIDs[22] = 0
equippedItemsIDs[23] = 0
local characterLevel = gv("lv", characterName)
local accountName = gv("account", characterName)
local characterJob = ( "@" .. job_classification_table[gv("job", characterName)][2] ) -- String!
local characterJlv = gv("jlv", characterName)
local characterJp = gv("jp", characterName)
local characterX = gv("x", characterName)
local characterY = gv("y", characterName)
local characterGold = gv("gold", characterName)
local characterAP = gv("ap", characterName)
local characterChaos = gv("chaos", characterName)
local characterEthStone = gv("ethereal_stone", characterName)
local characterPrem = gv("premium", characterName)
if characterPrem == 1 then
local totalTime = gv("prem_remain")
local days = math.floor((totalTime / 86400) / 100)
totalTime = totalTime % 86400
local hours = math.floor(totalTime / 3600)
totalTime = totalTime % 3600
local minutes = math.floor(totalTime / 60)
local seconds = totalTime % 60
characterPrem = "" .. days .. "D, ".. hours .. "h, " .. minutes .. "m, " .. seconds .. "s"
end
local chatInfo = "<center><b>#@chName@# | #@acc@#<br>#@job@# #@jlv@# JLv | #@lv@# Lv | #@jp@# JP<br>Premium: #@prem@# | X: #@x@#; Y: #@Y@#<br>#@R@# <b>R<br>#@AP@# <b>AP<br>#@LAK@# <b>LAK<br>#@eth@# <b>Ethereal stone"
local itemString = "<inv><b>========================================= ==========<br><b>#@s0#@</b>: #@i0@# [ID: #@id0@#]<br><b>#@s1#@</b>: #@i1@# [ID: #@id1@#]<br><b>#@s2#@</b>: #@i2@# [ID: #@id2@#]<br><b>#@s3#@</b>: #@i3@# [ID: #@id3@#]<br><b>#@s4#@</b>: #@i4@# [ID: #@id4@#]<br><b>#@s5#@</b>: #@i5@# [ID: #@id5@#]<br><b>#@s6#@</b>: #@i6@# [ID: #@id6@#]<br><b>#@s7#@</b>: #@i7@# [ID: #@id7@#]<br>"
local decoString = "<inv><b>========================================= ==========<br><b>#@s14#@</b>: #@i14@# [ID: #@id14@#]<br><b>#@s15#@</b>: #@i15@# [ID: #@id15@#]<br><b>#@s16#@</b>: #@i16@# [ID: #@id16@#]<br><b>#@s17#@</b>: #@i17@# [ID: #@id17@#]<br><b>#@s18#@</b>: #@i18@# [ID: #@id18@#]<br><b>#@s19#@</b>: #@i19@# [ID: #@id19@#]<br><b>#@s20#@</b>: #@i20@# [ID: #@id20@#]<br><b>#@s21#@</b>: #@i21@# [ID: #@id21@#]<br>"
local etcString = "<inv><b>========================================= ==========<br><b>#@s8#@</b>: #@i8@# [ID: #@id8@#]<br><b>#@s9#@</b>: #@i9@# [ID: #@id9@#]<br><b>#@s10#@</b>: #@i10@# [ID: #@id10@#]<br><b>#@s11#@</b>: #@i11@# [ID: #@id11@#]<br><b>#@s12#@</b>: #@i12@# [ID: #@id12@#]<br><b>#@s22#@</b>: #@i22@# [ID: #@id22@#]<br><b>#@s23@#</b>: #@i23@# [ID: #@id23@#]<br>"
for i = 0, 5000 do
if get_wear_item_handle(i) ~= nil and get_wear_item_handle(i) ~= 0 then
local item_id = get_item_code(get_wear_item_handle(i)) or 0
local item_name_id = get_item_name_id(item_id) or 0
local item_name = "#@enhance@# #@itemname@# #@itemlevel@#"
if item_name_id ~= 0 then
local itemEnhance = tonumber(get_item_enhance(get_wear_item_handle(i)) )
local itemLv = tonumber(get_item_level(get_wear_item_handle(i)))
local itemEnhanceString = "+#@enh@#"
local itemLevelString1 = "#@lvstr@# #@level@#"
local itemLevelString2 = "@6610"
if itemEnhance > 0 then
itemEnhanceString = sconv(itemEnhanceString, "#@enh@#", itemEnhance)
else
itemEnhanceString = ' '
end
if itemLv > 0 then
itemLevelString1 = sconv(itemLevelString1, "#@lvstr@#", itemLevelString2, "#@level@#", itemLv)
else
itemLevelString1 = ' '
end
item_name = sconv(item_name, "#@enhance@#", itemEnhanceString, "#@itemname@#", '@'.. item_name_id, "#@itemlevel@#", itemLevelString1)
equippedItemsList[i] = item_name
else
item_name = "Nothing"
end
if item_id ~= 0 and item_id ~= '' and item_id ~= nil then equippedItemsIDs[i] = item_id end
end
end
message(sconv(chatInfo,"#@chName@#",characterName, "#@acc@#",accountName,"#@job@#",characterJob,"#@jl v@#",characterJlv,"#@lv@#",characterLevel,"#@jp@#" ,characterJp,"#@prem@#",characterPrem,"#@x@#",char acterX,"#@Y@#",characterY,"#@R@#",characterGold,"# @AP@#",characterAP,"#@LAK@#",characterChaos,"#@eth @#",characterEthStone))
message(sconv(itemString,"#@s0#@",SlotsTable[0],"#@i0@#",equippedItemsList[0],"#@id0@#",equippedItemsIDs[0],"#@s1#@",SlotsTable[1],"#@i1@#",equippedItemsList[1],"#@id1@#",equippedItemsIDs[1],"#@s2#@",SlotsTable[2],"#@i2@#",equippedItemsList[2],"#@id2@#",equippedItemsIDs[2],"#@s3#@",SlotsTable[3],"#@i3@#",equippedItemsList[3],"#@id3@#",equippedItemsIDs[3],"#@s4#@",SlotsTable[4],"#@i4@#",equippedItemsList[4],"#@id4@#",equippedItemsIDs[4],"#@s5#@",SlotsTable[5],"#@i5@#",equippedItemsList[5],"#@id5@#",equippedItemsIDs[5],"#@s6#@",SlotsTable[6],"#@i6@#",equippedItemsList[6],"#@id6@#",equippedItemsIDs[6],"#@s7#@",SlotsTable[7],"#@i7@#",equippedItemsList[7],"#@id7@#",equippedItemsIDs[7],"#@s8#@",SlotsTable[8],"#@i8@#",equippedItemsList[8],"#@id8@#",equippedItemsIDs[8],"#@s9#@",SlotsTable[9],"#@i9@#",equippedItemsList[9],"#@id9@#",equippedItemsIDs[9],"#@s10#@",SlotsTable[10],"#@i10@#",equippedItemsList[10],"#@id10@#",equippedItemsIDs[10],"#@s11#@",SlotsTable[11],"#@i11@#",equippedItemsList[11],"#@id11@#",equippedItemsIDs[11]))
message(sconv(decoString,"#@s12#@",SlotsTable[12],"#@i12@#",equippedItemsList[12],"#@id12@#",equippedItemsIDs[12],"#@s14#@",SlotsTable[14],"#@i14@#",equippedItemsList[14],"#@id14@#",equippedItemsIDs[14],"#@s15#@",SlotsTable[15],"#@i15@#",equippedItemsList[15],"#@id15@#",equippedItemsIDs[15],"#@s16#@",SlotsTable[16],"#@i16@#",equippedItemsList[16],"#@id16@#",equippedItemsIDs[16],"#@s17#@",SlotsTable[17],"#@i17@#",equippedItemsList[17],"#@id17@#",equippedItemsIDs[17],"#@s18#@",SlotsTable[18],"#@i18@#",equippedItemsList[18],"#@id18@#",equippedItemsIDs[18],"#@s19#@",SlotsTable[19],"#@i19@#",equippedItemsList[19],"#@id19@#",equippedItemsIDs[19],"#@s20#@",SlotsTable[20],"#@i20@#",equippedItemsList[20],"#@id20@#",equippedItemsIDs[20],"#@s21#@",SlotsTable[21],"#@i21@#",equippedItemsList[21],"#@id21@#",equippedItemsIDs[21],"#@s22#@",SlotsTable[22],"#@i22@#",equippedItemsList[22],"#@id22@#",equippedItemsIDs[22],"#@s23#@",SlotsTable[23],"#@i23@#",equippedItemsList[23],"#@id23@#",equippedItemsIDs[23]))
message(sconv(etcString,"#@s8#@",SlotsTable[8],"#@i8@#",equippedItemsList[8],"#@id8@#",equippedItemsIDs[8],"#@s9#@",SlotsTable[9],"#@i9@#",equippedItemsList[9],"#@id9@#",equippedItemsIDs[9],"#@s10#@",SlotsTable[10],"#@i10@#",equippedItemsList[10],"#@id10@#",equippedItemsIDs[10],"#@s11#@",SlotsTable[11],"#@i11@#",equippedItemsList[11],"#@id11@#",equippedItemsIDs[11],"#@s12#@",SlotsTable[12],"#@i12@#",equippedItemsList[12],"#@id12@#",equippedItemsIDs[12],"#@s22#@",SlotsTable[22],"#@i22@#",equippedItemsList[22],"#@id22@#",equippedItemsIDs[22],"#@s23@#",SlotsTable[23],"#@i23@#",equippedItemsList[23],"#@id23@#",equippedItemsIDs[23]))
end
function on_change_weapon()
local isEnabled = tonumber(get_env("game.antiweaponswap")) == 1
if not isEnabled then return end
local currTime = get_os_time()
local playerName = gv("name")
local lastSwap = tonumber(get_env("last_swap_" .. playerName)) or 0
local swapCount = tonumber(get_env("swap_cnt_" .. playerName)) or 0
if currTime - lastSwap <= 2 then
swapCount = swapCount + 1
else
swapCount = 1
end
if swapCount >= 5 then
notice(playerName .. " swapped weapons too often and got punishment!")
warp_to_revive_position()
add_state(6012, 10, 5000)
swapCount = 0
end
set_env("last_swap_" .. playerName, currTime)
set_env("swap_cnt_" .. playerName, swapCount)
end
function test_except()
for k,v in pairs(_G) do
private_notice("k: " .. k)
end
end
function output_inventory()
local itemsTable = {103100,108401,112100,230100,230102,240100,307050, 490001,540002,540005,540006,540009,540010,540011,5 40012,540013,540018,540019,540052,540053,540055,54 0057,540059,540065,540067,540079,540200,540201,540 202,603001,690435,690448,700654,705002,705004,7050 07,705008,705011,710008,810223,810224,810226,81022 7,810228,810231,810232,810233,810234,900010,900011 ,900016,910005,910023,910025,910064,910065,910066, 910067,910068,910069,910070,910071,910072,910073,9 10074,910085,910090,910109,930071,930072,930073,93 0074,930075,930076,950019,950073,950117,1000541,11 00101,1100102,1100408,2000145,2010454,2010739,2011 033,2011279,2012073,2012116,2012240,2012430,201243 1,2012774,2012780,2012787,2012788,2012819,2012820, 2012821,2012823,2012824,2012825,2012832,2013011,20 13584,2013816,2016027,2016028,2016030,2016031,2016 032,2016033,2016034,2016035,2016037,2016038,201603 9,2016126,2016132,2016153,2016154,3100034,3100036, 3630334,3630339,103730509,106730509,108730509,7000 00806,700000805,700000804,700000803,601100285,2107 30709,113730509,112730509, 3701701, 710107}
for i = 1, #itemsTable do
if find_item(itemsTable[i]) > 0 then
local itemHandle = get_item_handle(itemsTable[i])
local itemName = '@' .. get_item_name_id(itemsTable[i])
local itemLevel = get_item_level(itemHandle)
local itemEnhance = get_item_enhance(itemHandle)
local noticeText = "[Item] ID: #@item_id@#; Handle: #@item_handle@#; Level: #@item_level@#; Enhance: #@item_enhance@#; Name: #@item_name@#"
private_notice(sconv(noticeText, "#@item_id@#", itemsTable[i], "#@item_handle@#", itemHandle, "#@item_level@#", itemLevel, "#@item_enhance@#", itemEnhance, "#@item_name@#", itemName))
end
end
end
function dlg_start() -- Function to output NPC title. So all you do is type "dlg_start()" now instead of long ass "dlg_title(get_npc_title())"
dlg_title(get_npc_title())
end
function get_npc_title() -- Function to get NPC title; Using this way: npc_title(get_npc_title())
local firstName = '@' .. get_npc_type() -- .. ' ' .. '@' .. get_npc_name()
local secondName = '@' .. get_npc_name()
if firstName == nil or firstName == "" then firstName = " " end
if secondName == nil or secondName == "" then secondName = " " end
local result = sconv("#@first_name@# #@second_name@#","#@first_name@#",firstName,"#@sec ond_name@#",secondName)
return result
end
function dlg_end()
dlg_menu( "@90010001", '' )
dlg_show()
end
function r()
refresh('script')
end
function get_segment_data()
local x = gv("x")
local y = gv("y")
local x_id = math.floor(x / 16128)
local y_id = math.floor(y / 16128)
if x_id > 9 and y_id > 9 then
message("Map name: m0" .. x_id .. "_0" .. y_id)
elseif x_id > 9 then
message("Map name: m0" .. x_id .. "_00" .. y_id)
elseif y_id > 9 then
message("Map name: m00" .. x_id .. "_0" .. y_id)
else
message("Map name: m00" .. x_id .. "_00" .. y_id)
end
local loc_x = x - x_id * 16128
local loc_y = y - y_id * 16128
local segment = math.floor(loc_y / 252) * 64 + math.floor(loc_x / 252)
message("Segment ID: " .. segment)
local segment_x = loc_x - math.floor(loc_x / 252) * 252
local segment_y = loc_y - math.floor(loc_y / 252) * 252
message("Segment X: " .. segment_x)
message("Segment Y: " .. segment_y)
end
function test1(id)
id = id or 0
dlg_special("confirm_window", "test1(".. id + 1 .. ")", "id = " .. id )
end
Quote:
Originally Posted by atherounge3
Uplaoded new repack version. Links were updated.
Changelog:
Fixed animations
Added new monsters/pets from 9.6
Fixed motions
Added new NPC in Horizon, with some management
Added some scripts, including antimacro system (idk, id if works flawless, test it)
Updated levelupmypets script, now it levelups pets up to 180lvl
Added some strings
Fixed global chat issue
Jerked off databases a little bit
Now MonsterResource has id as a key (means all monsters duplicates were removed) and local flag set to 0 for every monster in the game
Added sql types of backups (In case if you have older sql version, I set it to SQL Server 2017)
Now here are 4 batch files to start the game, with 3 different most used languages (Like a guide for you how to start the game with specific 'X' language)
Also I've put a source of Herlock which supports 9.5.2 SFrame, but it needs some modifications:
1) Change packets to original ones
2) Change MAX_RANDOM_OPTION_NUMBER to 10
3) Change pPtr->GetHandle() to pPtr->GetSID() in the DB_UpdateGuildMemberPoint push construction
(Perhaps here is something else (most likely), so I didn't even bother for now. Perhaps, later I would include fixed source-built herlock in the repack. But now we have what we have.
IF you're feeling yourself smart enough, then just replicate behavior of original 9.5.2 binary, since you have pdb file. Not much hard, if you are considering yourself a developer. At least you can search in the internet for the info.
IMPORTANT INFO
The origin of this source is unknown. Here is arabic guy claiming that this source was made by him, but he is unable to prove that and considering his "releases", he is totally uncapable of doing such gameserver upgrade. So if somebody knows origin of that Herlock, let me know. I'll add credits to this wonderful guy.
Also, as I remember, I made a patch to one of original precompiled binaries. But can't remember what exactly I patched and which binary I patched. And I don't have previous ones, so... If you have and don't trust, just replace them. Nothing would be changed. Compare hashsums, idk... Your choice. Any way...-===>
Credits to:
@ 
For european game client (I dumped his server one and took working nx3/naf from it, so now gaian characters are looking better)
@ 
For his repack, from which I took motions and packed rdb tool with prepared structs
@ 
For writing his script for Job Level
Link itself, if you're too lazy ass to scroll in the beginning: 
|
I’ve spent the whole afternoon thinking the client you shared didn’t include the 9.6 pets… but they’re not in the database at all.
You tricked me!”
|
|
|
02/06/2026, 20:37
|
#99
|
elite*gold: 0
Join Date: Feb 2025
Posts: 147
Received Thanks: 58
|
Quote:
Originally Posted by osomeloso
2026-02-06 18:01:10 Lua run doFile failed. Resource\Script\Kitekat\extra_things.lua([string "..."]:209: ')' expected near '@')
when start server.
Copilot fix, work.
-- Strings used: From 100046001 - to 100110000
function set_debug( var )
local flag = tonumber(get_flag("dbgm")) or 0
if var == nil or var == '' then
if flag == 0 then
set_flag("dbgm", 1)
else
set_flag("dbgm", 0)
end
else
set_flag("dbgm", flag)
end
end
function debug_notice( noticeString )
local flag = tonumber(get_flag("dbgm")) or 0
if flag == 1 then
private_notice("<#272AF5>[Debug]: " .. noticeString)
end
end
function is_in_form( location )
local pointsArray = {}
if location == "star" then
pointsArray =
{
{ x = 151898, y = 73295 },
{ x = 152013, y = 73158 },
{ x = 152160, y = 73242 },
{ x = 152213, y = 73059 },
{ x = 152397, y = 73106 },
{ x = 152349, y = 72906 },
{ x = 152554, y = 72864 },
{ x = 152449, y = 72717 },
{ x = 152454, y = 72465 },
{ x = 152538, y = 72345 },
{ x = 152407, y = 72308 },
{ x = 152365, y = 72245 },
{ x = 152397, y = 72119 },
{ x = 152255, y = 72135 },
{ x = 152192, y = 72087 },
{ x = 152166, y = 71961 },
{ x = 152045, y = 72024 },
{ x = 151992, y = 72009 },
{ x = 151914, y = 71909 },
{ x = 151819, y = 72019 },
{ x = 151767, y = 72024 },
{ x = 151641, y = 71956 },
{ x = 151614, y = 72082 },
{ x = 151551, y = 72114 },
{ x = 151425, y = 72103 },
{ x = 151425, y = 72266 },
{ x = 151268, y = 72324 },
{ x = 151357, y = 72471 },
{ x = 151347, y = 72691 },
{ x = 151263, y = 72859 },
{ x = 151410, y = 72875 },
{ x = 151431, y = 72912 },
{ x = 151410, y = 73059 },
{ x = 151520, y = 73043 },
{ x = 151588, y = 73080 },
{ x = 151635, y = 73200 },
{ x = 151756, y = 73132 },
{ x = 151819, y = 73174 },
{ x = 151819, y = 73174 }
}
elseif location == "hori_scarecrows" then
pointsArray =
{
{ x = 154596, y = 76419 },
{ x = 154486, y = 76371 },
{ x = 154339, y = 76387 },
{ x = 154213, y = 76434 },
{ x = 154134, y = 76513 },
{ x = 154082, y = 76581 },
{ x = 154040, y = 76676 },
{ x = 154029, y = 76849 },
{ x = 154098, y = 77007 },
{ x = 154213, y = 77117 },
{ x = 154350, y = 77159 },
{ x = 154481, y = 77164 },
{ x = 154633, y = 77091 },
{ x = 154764, y = 76975 },
{ x = 154806, y = 76875 },
{ x = 154817, y = 76686 },
{ x = 154770, y = 76566 }
}
end
local isInside = PolygonsCheck(pointsArray, gv("x"), gv("y"))
debug_notice( "[" .. location .. "]: Your X: " .. gv('x') .. "; Y: " .. gv('y') )
if isInside then
debug_notice("Inside of form")
else
debug_notice("Outside")
end
end
function PolygonsCheck(polygon, px, py)
local inside = false
local j = #polygon
for i = 1, #polygon do
local xi, yi = polygon[i].x, polygon[i].y
local xj, yj = polygon[j].x, polygon[j].y
local intersects = ((yi > py) ~= (yj > py)) and (px < (xj - xi) * (py - yi) / ((yj - yi) + 0.000001) + xi)
if intersects then
inside = not inside
end
j = i
end
return inside
end
function levelupmypets(form_slot)
if form_slot == nil or form_slot == '' then form_slot = 0 end
for i = 1, 180 do
local creature_handle = get_creature_handle( form_slot )
local curr_level = get_creature_value( creature_handle, "lv" )
local curr_evo = get_creature_value( creature_handle, "evolution_depth" )
local id = get_creature_value( creature_handle, "job" )
if curr_level ~= 60 and curr_level ~= 115 then
set_creature_value(creature_handle, "lv", ( curr_level + 1 ) )
elseif curr_level == 60 and curr_evo == 1 then
set_creature_value(creature_handle, "ev_1_ID", id)
set_creature_value(creature_handle, "ev_1_level", curr_level)
creature_evolution(creature_handle)
set_creature_value(creature_handle, "lv", ( curr_level + 1 ) )
elseif curr_level == 115 and curr_evo == 2 then
set_creature_value(creature_handle, "ev_2_ID", id)
set_creature_value(creature_handle, "ev_2_level", curr_level)
creature_evolution(creature_handle)
set_creature_value(creature_handle, "lv", ( curr_level + 1 ) )
end
end
end
local function is_leap(year)
return (year % 4 == 0 and year % 100 ~= 0) or (year % 400 == 0)
end
local function epoch_to_date(ts)
local seconds_per_day = 86400
local days = math.floor(ts / seconds_per_day)
local year = 1970
while true do
local days_in_year = is_leap(year) and 366 or 365
if days >= days_in_year then
days = days - days_in_year
year = year + 1
else
break
end
end
local month_lengths =
{
31,
is_leap(year) and 29 or 28,
31,
30,
31,
30,
31,
31,
30,
31,
30,
31
}
local month = 1
while days >= month_lengths[month] do
days = days - month_lengths[month]
month = month + 1
end
local day = days + 1
return sconv("#@day@# / #@month@# / #@year@#",
"#@day@#", day,
"#@month@#", month,
"#@year@#", year)
end
function server_variables()
local process_start = get_env("process.start")
local uptime = get_env("process.uptime")
local process_load = get_env("process.load")
local process_memory = get_env("process.memory")
local paged_memory = get_env("process.paged_memory")
local curr_online = get_env("game.user_count")
local exp_ratio = get_env("game.exp_rate")
local chaos_drop_ratio = get_env("game.chaos_drop_rate")
local gold_drop_ratio = get_env("game.gold_drop_rate")
local item_drop_ratio = get_env("game.item_drop_rate")
local party_rate_0 = get_env("game.party_exp_rate_0")
local party_rate_1 = get_env("game.party_exp_rate_1")
local party_rate_2 = get_env("game.party_exp_rate_2")
local party_rate_3 = get_env("game.party_exp_rate_3")
local party_rate_4 = get_env("game.party_exp_rate_4")
local party_rate_5 = get_env("game.party_exp_rate_5")
local party_rate_6 = get_env("game.party_exp_rate_6")
local party_rate_level = get_env("game.party_exp_penalty_level")
dlg_general("<br><br>Server started at: " .. process_start .. "<br>Server uptime is: " .. uptime .. ".<br>CPU load: " .. process_load .. "%<br>Process RAM Usage: " .. process_memory .. "<br>Process paged memory: " .. paged_memory .. "<br><br><br>Current online is: " .. curr_online .. " players.<br>EXP rate: " .. exp_ratio .. "<br>Chaos rate: " .. chaos_drop_ratio .. "<br>Gold drop rate: " .. gold_drop_ratio .. "<br>Item drop rate: " .. item_drop_ratio .. "<br>Parte rate 0: " .. party_rate_0 .. "<br>Parte rate 1: " .. party_rate_1 .. "<br>Parte rate 2: " .. party_rate_2 .. "<br>Parte rate 3: " .. party_rate_3 .. "<br>Parte rate 4: " .. party_rate_4 .. "<br>Parte rate 5: " .. party_rate_5 .. "<br>Parte rate 6: " .. party_rate_6 .. "<br>Party rate level: " .. party_rate_level .. "<br><br>")
end
function npcid()
debug_notice("NPC ID: " .. get_npc_id())
end
function get_character_info( characterName )
if characterName == nil or characterName == '' then characterName = gv("name") end
if gv("login", characterName) ~= 1 then
message("<b>" .. characterName .. "</b> is currently offline")
return
end
local SlotsTable = {}
SlotsTable[0] = "@6700" -- Weapon
SlotsTable[1] = "@6702" -- Shield
SlotsTable[2] = "@6701" -- Armor
SlotsTable[3] = "@6703" -- Helmet
SlotsTable[4] = "@6704" -- Gloves
SlotsTable[5] = "@6705" -- Boots
SlotsTable[6] = "@6706" -- Belt
SlotsTable[7] = "@6707" -- Cloak
SlotsTable[8] = "@6820" -- Necklace
SlotsTable[9] = "@6818" -- Ring [1]
SlotsTable[10] = "@6818" -- Ring [2]
SlotsTable[11] = "@6819" -- Earring
SlotsTable[12] = "@7193" -- Mask
SlotsTable[14] = "@7542" -- Decorative Weapon
SlotsTable[15] = "@7543" -- Decorative Shield
SlotsTable[16] = "@7544" -- Decorative Costume
SlotsTable[17] = "@7545" -- Decorative Helmet
SlotsTable[18] = "@7546" -- Decorative Glove
SlotsTable[19] = "@7547" -- Decorative Boots
SlotsTable[20] = "@7548" -- Decorative Cloak
SlotsTable[21] = "@7549" -- Decorative Shoulder Piece (wings)
SlotsTable[22] = "@9702" -- Mount<7.2>
SlotsTable[23] = "@6711" -- Bag
--job_classification_table[job_id][2]
local equippedItemsList = {}
equippedItemsList[0] = "Nothing"
equippedItemsList[1] = "Nothing"
equippedItemsList[2] = "Nothing"
equippedItemsList[3] = "Nothing"
equippedItemsList[4] = "Nothing"
equippedItemsList[5] = "Nothing"
equippedItemsList[6] = "Nothing"
equippedItemsList[7] = "Nothing"
equippedItemsList[8] = "Nothing"
equippedItemsList[9] = "Nothing"
equippedItemsList[10] = "Nothing"
equippedItemsList[11] = "Nothing"
equippedItemsList[12] = "Nothing"
equippedItemsList[14] = "Nothing"
equippedItemsList[15] = "Nothing"
equippedItemsList[16] = "Nothing"
equippedItemsList[17] = "Nothing"
equippedItemsList[18] = "Nothing"
equippedItemsList[19] = "Nothing"
equippedItemsList[20] = "Nothing"
equippedItemsList[21] = "Nothing"
equippedItemsList[22] = "Nothing"
equippedItemsList[23] = "Nothing"
local equippedItemsIDs = {}
equippedItemsIDs[0] = 0
equippedItemsIDs[1] = 0
equippedItemsIDs[2] = 0
equippedItemsIDs[3] = 0
equippedItemsIDs[4] = 0
equippedItemsIDs[5] = 0
equippedItemsIDs[6] = 0
equippedItemsIDs[7] = 0
equippedItemsIDs[8] = 0
equippedItemsIDs[9] = 0
equippedItemsIDs[10] = 0
equippedItemsIDs[11] = 0
equippedItemsIDs[12] = 0
equippedItemsIDs[14] = 0
equippedItemsIDs[15] = 0
equippedItemsIDs[16] = 0
equippedItemsIDs[17] = 0
equippedItemsIDs[18] = 0
equippedItemsIDs[19] = 0
equippedItemsIDs[20] = 0
equippedItemsIDs[21] = 0
equippedItemsIDs[22] = 0
equippedItemsIDs[23] = 0
local characterLevel = gv("lv", characterName)
local accountName = gv("account", characterName)
local characterJob = ( "@" .. job_classification_table[gv("job", characterName)][2] ) -- String!
local characterJlv = gv("jlv", characterName)
local characterJp = gv("jp", characterName)
local characterX = gv("x", characterName)
local characterY = gv("y", characterName)
local characterGold = gv("gold", characterName)
local characterAP = gv("ap", characterName)
local characterChaos = gv("chaos", characterName)
local characterEthStone = gv("ethereal_stone", characterName)
local characterPrem = gv("premium", characterName)
if characterPrem == 1 then
local totalTime = gv("prem_remain")
local days = math.floor((totalTime / 86400) / 100)
totalTime = totalTime % 86400
local hours = math.floor(totalTime / 3600)
totalTime = totalTime % 3600
local minutes = math.floor(totalTime / 60)
local seconds = totalTime % 60
characterPrem = "" .. days .. "D, ".. hours .. "h, " .. minutes .. "m, " .. seconds .. "s"
end
local chatInfo = "<center><b>#@chName@# | #@acc@#<br>#@job@# #@jlv@# JLv | #@lv@# Lv | #@jp@# JP<br>Premium: #@prem@# | X: #@x@#; Y: #@Y@#<br>#@R@# <b>R<br>#@AP@# <b>AP<br>#@LAK@# <b>LAK<br>#@eth@# <b>Ethereal stone"
local itemString = "<inv><b>========================================= ==========<br><b>#@s0#@</b>: #@i0@# [ID: #@id0@#]<br><b>#@s1#@</b>: #@i1@# [ID: #@id1@#]<br><b>#@s2#@</b>: #@i2@# [ID: #@id2@#]<br><b>#@s3#@</b>: #@i3@# [ID: #@id3@#]<br><b>#@s4#@</b>: #@i4@# [ID: #@id4@#]<br><b>#@s5#@</b>: #@i5@# [ID: #@id5@#]<br><b>#@s6#@</b>: #@i6@# [ID: #@id6@#]<br><b>#@s7#@</b>: #@i7@# [ID: #@id7@#]<br>"
local decoString = "<inv><b>========================================= ==========<br><b>#@s14#@</b>: #@i14@# [ID: #@id14@#]<br><b>#@s15#@</b>: #@i15@# [ID: #@id15@#]<br><b>#@s16#@</b>: #@i16@# [ID: #@id16@#]<br><b>#@s17#@</b>: #@i17@# [ID: #@id17@#]<br><b>#@s18#@</b>: #@i18@# [ID: #@id18@#]<br><b>#@s19#@</b>: #@i19@# [ID: #@id19@#]<br><b>#@s20#@</b>: #@i20@# [ID: #@id20@#]<br><b>#@s21#@</b>: #@i21@# [ID: #@id21@#]<br>"
local etcString = "<inv><b>========================================= ==========<br><b>#@s8#@</b>: #@i8@# [ID: #@id8@#]<br><b>#@s9#@</b>: #@i9@# [ID: #@id9@#]<br><b>#@s10#@</b>: #@i10@# [ID: #@id10@#]<br><b>#@s11#@</b>: #@i11@# [ID: #@id11@#]<br><b>#@s12#@</b>: #@i12@# [ID: #@id12@#]<br><b>#@s22#@</b>: #@i22@# [ID: #@id22@#]<br><b>#@s23@#</b>: #@i23@# [ID: #@id23@#]<br>"
for i = 0, 5000 do
if get_wear_item_handle(i) ~= nil and get_wear_item_handle(i) ~= 0 then
local item_id = get_item_code(get_wear_item_handle(i)) or 0
local item_name_id = get_item_name_id(item_id) or 0
local item_name = "#@enhance@# #@itemname@# #@itemlevel@#"
if item_name_id ~= 0 then
local itemEnhance = tonumber(get_item_enhance(get_wear_item_handle(i)) )
local itemLv = tonumber(get_item_level(get_wear_item_handle(i)))
local itemEnhanceString = "+#@enh@#"
local itemLevelString1 = "#@lvstr@# #@level@#"
local itemLevelString2 = "@6610"
if itemEnhance > 0 then
itemEnhanceString = sconv(itemEnhanceString, "#@enh@#", itemEnhance)
else
itemEnhanceString = ' '
end
if itemLv > 0 then
itemLevelString1 = sconv(itemLevelString1, "#@lvstr@#", itemLevelString2, "#@level@#", itemLv)
else
itemLevelString1 = ' '
end
item_name = sconv(item_name, "#@enhance@#", itemEnhanceString, "#@itemname@#", '@'.. item_name_id, "#@itemlevel@#", itemLevelString1)
equippedItemsList[i] = item_name
else
item_name = "Nothing"
end
if item_id ~= 0 and item_id ~= '' and item_id ~= nil then equippedItemsIDs[i] = item_id end
end
end
message(sconv(chatInfo,"#@chName@#",characterName, "#@acc@#",accountName,"#@job@#",characterJob,"#@jl v@#",characterJlv,"#@lv@#",characterLevel,"#@jp@#" ,characterJp,"#@prem@#",characterPrem,"#@x@#",char acterX,"#@Y@#",characterY,"#@R@#",characterGold,"# @AP@#",characterAP,"#@LAK@#",characterChaos,"#@eth @#",characterEthStone))
message(sconv(itemString,"#@s0#@",SlotsTable[0],"#@i0@#",equippedItemsList[0],"#@id0@#",equippedItemsIDs[0],"#@s1#@",SlotsTable[1],"#@i1@#",equippedItemsList[1],"#@id1@#",equippedItemsIDs[1],"#@s2#@",SlotsTable[2],"#@i2@#",equippedItemsList[2],"#@id2@#",equippedItemsIDs[2],"#@s3#@",SlotsTable[3],"#@i3@#",equippedItemsList[3],"#@id3@#",equippedItemsIDs[3],"#@s4#@",SlotsTable[4],"#@i4@#",equippedItemsList[4],"#@id4@#",equippedItemsIDs[4],"#@s5#@",SlotsTable[5],"#@i5@#",equippedItemsList[5],"#@id5@#",equippedItemsIDs[5],"#@s6#@",SlotsTable[6],"#@i6@#",equippedItemsList[6],"#@id6@#",equippedItemsIDs[6],"#@s7#@",SlotsTable[7],"#@i7@#",equippedItemsList[7],"#@id7@#",equippedItemsIDs[7],"#@s8#@",SlotsTable[8],"#@i8@#",equippedItemsList[8],"#@id8@#",equippedItemsIDs[8],"#@s9#@",SlotsTable[9],"#@i9@#",equippedItemsList[9],"#@id9@#",equippedItemsIDs[9],"#@s10#@",SlotsTable[10],"#@i10@#",equippedItemsList[10],"#@id10@#",equippedItemsIDs[10],"#@s11#@",SlotsTable[11],"#@i11@#",equippedItemsList[11],"#@id11@#",equippedItemsIDs[11]))
message(sconv(decoString,"#@s12#@",SlotsTable[12],"#@i12@#",equippedItemsList[12],"#@id12@#",equippedItemsIDs[12],"#@s14#@",SlotsTable[14],"#@i14@#",equippedItemsList[14],"#@id14@#",equippedItemsIDs[14],"#@s15#@",SlotsTable[15],"#@i15@#",equippedItemsList[15],"#@id15@#",equippedItemsIDs[15],"#@s16#@",SlotsTable[16],"#@i16@#",equippedItemsList[16],"#@id16@#",equippedItemsIDs[16],"#@s17#@",SlotsTable[17],"#@i17@#",equippedItemsList[17],"#@id17@#",equippedItemsIDs[17],"#@s18#@",SlotsTable[18],"#@i18@#",equippedItemsList[18],"#@id18@#",equippedItemsIDs[18],"#@s19#@",SlotsTable[19],"#@i19@#",equippedItemsList[19],"#@id19@#",equippedItemsIDs[19],"#@s20#@",SlotsTable[20],"#@i20@#",equippedItemsList[20],"#@id20@#",equippedItemsIDs[20],"#@s21#@",SlotsTable[21],"#@i21@#",equippedItemsList[21],"#@id21@#",equippedItemsIDs[21],"#@s22#@",SlotsTable[22],"#@i22@#",equippedItemsList[22],"#@id22@#",equippedItemsIDs[22],"#@s23#@",SlotsTable[23],"#@i23@#",equippedItemsList[23],"#@id23@#",equippedItemsIDs[23]))
message(sconv(etcString,"#@s8#@",SlotsTable[8],"#@i8@#",equippedItemsList[8],"#@id8@#",equippedItemsIDs[8],"#@s9#@",SlotsTable[9],"#@i9@#",equippedItemsList[9],"#@id9@#",equippedItemsIDs[9],"#@s10#@",SlotsTable[10],"#@i10@#",equippedItemsList[10],"#@id10@#",equippedItemsIDs[10],"#@s11#@",SlotsTable[11],"#@i11@#",equippedItemsList[11],"#@id11@#",equippedItemsIDs[11],"#@s12#@",SlotsTable[12],"#@i12@#",equippedItemsList[12],"#@id12@#",equippedItemsIDs[12],"#@s22#@",SlotsTable[22],"#@i22@#",equippedItemsList[22],"#@id22@#",equippedItemsIDs[22],"#@s23@#",SlotsTable[23],"#@i23@#",equippedItemsList[23],"#@id23@#",equippedItemsIDs[23]))
end
function on_change_weapon()
local isEnabled = tonumber(get_env("game.antiweaponswap")) == 1
if not isEnabled then return end
local currTime = get_os_time()
local playerName = gv("name")
local lastSwap = tonumber(get_env("last_swap_" .. playerName)) or 0
local swapCount = tonumber(get_env("swap_cnt_" .. playerName)) or 0
if currTime - lastSwap <= 2 then
swapCount = swapCount + 1
else
swapCount = 1
end
if swapCount >= 5 then
notice(playerName .. " swapped weapons too often and got punishment!")
warp_to_revive_position()
add_state(6012, 10, 5000)
swapCount = 0
end
set_env("last_swap_" .. playerName, currTime)
set_env("swap_cnt_" .. playerName, swapCount)
end
function test_except()
for k,v in pairs(_G) do
private_notice("k: " .. k)
end
end
function output_inventory()
local itemsTable = {103100,108401,112100,230100,230102,240100,307050, 490001,540002,540005,540006,540009,540010,540011,5 40012,540013,540018,540019,540052,540053,540055,54 0057,540059,540065,540067,540079,540200,540201,540 202,603001,690435,690448,700654,705002,705004,7050 07,705008,705011,710008,810223,810224,810226,81022 7,810228,810231,810232,810233,810234,900010,900011 ,900016,910005,910023,910025,910064,910065,910066, 910067,910068,910069,910070,910071,910072,910073,9 10074,910085,910090,910109,930071,930072,930073,93 0074,930075,930076,950019,950073,950117,1000541,11 00101,1100102,1100408,2000145,2010454,2010739,2011 033,2011279,2012073,2012116,2012240,2012430,201243 1,2012774,2012780,2012787,2012788,2012819,2012820, 2012821,2012823,2012824,2012825,2012832,2013011,20 13584,2013816,2016027,2016028,2016030,2016031,2016 032,2016033,2016034,2016035,2016037,2016038,201603 9,2016126,2016132,2016153,2016154,3100034,3100036, 3630334,3630339,103730509,106730509,108730509,7000 00806,700000805,700000804,700000803,601100285,2107 30709,113730509,112730509, 3701701, 710107}
for i = 1, #itemsTable do
if find_item(itemsTable[i]) > 0 then
local itemHandle = get_item_handle(itemsTable[i])
local itemName = '@' .. get_item_name_id(itemsTable[i])
local itemLevel = get_item_level(itemHandle)
local itemEnhance = get_item_enhance(itemHandle)
local noticeText = "[Item] ID: #@item_id@#; Handle: #@item_handle@#; Level: #@item_level@#; Enhance: #@item_enhance@#; Name: #@item_name@#"
private_notice(sconv(noticeText, "#@item_id@#", itemsTable[i], "#@item_handle@#", itemHandle, "#@item_level@#", itemLevel, "#@item_enhance@#", itemEnhance, "#@item_name@#", itemName))
end
end
end
function dlg_start() -- Function to output NPC title. So all you do is type "dlg_start()" now instead of long ass "dlg_title(get_npc_title())"
dlg_title(get_npc_title())
end
function get_npc_title() -- Function to get NPC title; Using this way: npc_title(get_npc_title())
local firstName = '@' .. get_npc_type() -- .. ' ' .. '@' .. get_npc_name()
local secondName = '@' .. get_npc_name()
if firstName == nil or firstName == "" then firstName = " " end
if secondName == nil or secondName == "" then secondName = " " end
local result = sconv("#@first_name@# #@second_name@#","#@first_name@#",firstName,"#@sec ond_name@#",secondName)
return result
end
function dlg_end()
dlg_menu( "@90010001", '' )
dlg_show()
end
function r()
refresh('script')
end
function get_segment_data()
local x = gv("x")
local y = gv("y")
local x_id = math.floor(x / 16128)
local y_id = math.floor(y / 16128)
if x_id > 9 and y_id > 9 then
message("Map name: m0" .. x_id .. "_0" .. y_id)
elseif x_id > 9 then
message("Map name: m0" .. x_id .. "_00" .. y_id)
elseif y_id > 9 then
message("Map name: m00" .. x_id .. "_0" .. y_id)
else
message("Map name: m00" .. x_id .. "_00" .. y_id)
end
local loc_x = x - x_id * 16128
local loc_y = y - y_id * 16128
local segment = math.floor(loc_y / 252) * 64 + math.floor(loc_x / 252)
message("Segment ID: " .. segment)
local segment_x = loc_x - math.floor(loc_x / 252) * 252
local segment_y = loc_y - math.floor(loc_y / 252) * 252
message("Segment X: " .. segment_x)
message("Segment Y: " .. segment_y)
end
function test1(id)
id = id or 0
dlg_special("confirm_window", "test1(".. id + 1 .. ")", "id = " .. id )
end
I’ve spent the whole afternoon thinking the client you shared didn’t include the 9.6 pets… but they’re not in the database at all.
You tricked me!”
|
My bad, I'm sorry
Just realized what exactly I forgot, lol
While "compiling" everything together, I am making changelog (not after uploading, but while packing already) just to save time.
When I was making this patch, I fucked up entire database. Short story as timeline:
1) I'm finishing doing changes
2) I'm making backups as .bak files
3) An idea came in my head to rename databases to make it better and cleanup some things as well
4) I'm restoring databases
5) I'm renaming them, changing colation, changing some procedures
6) I'm doing backups with replacements (.bak)
7) I'm doing .sql backup
8) I'm removing current databases to recheck everything
9) I'm restoring databases from .bak
10) I'm realizing that I fucking restored wrong databases (restored OLD without ANY fucking changes, means I saved old databases overwritten to new ones, so new became lost forever)
11) I got mad and spent another few hours sorting all that shit because literally everything got rolled back
So when I uploaded this patch, I had some strong feeling that I forgot something. Checked multiple times -> forgot nothing. Did everything. Rechecked everything again. Restored-deleted, everything seems fine. Removed old backups, only new now
So now I realized what I forgot to do xD
Would implement them in the next patch
With new pixies as well (at least would try to)
|
|
|
02/08/2026, 07:11
|
#100
|
elite*gold: 0
Join Date: Feb 2026
Posts: 2
Received Thanks: 0
|
Wow big thanks for sharing, everything works fine I only have one issue regarding summon exp, my pets doesn't seem to gain exp & I don't know where to look to solve this
|
|
|
02/08/2026, 16:01
|
#101
|
elite*gold: 0
Join Date: Dec 2025
Posts: 8
Received Thanks: 0
|
Can anyone explain to me why the admin panel isn't working for me? I can't work properly with either the tool or the commands in the chat. I added the command to dbo.AllowedCommandsForPermission, but it didn't work either.
|
|
|
02/08/2026, 16:37
|
#102
|
elite*gold: 0
Join Date: Feb 2025
Posts: 147
Received Thanks: 58
|
Quote:
Originally Posted by ActionGod
Can anyone explain to me why the admin panel isn't working for me? I can't work properly with either the tool or the commands in the chat. I added the command to dbo.AllowedCommandsForPermission, but it didn't work either.
|
What do you mean? Which "admin panel"?
You just give yourself 100 permissions in Telecaster.dbo.Cahracter and type in chat /run blahblah
|
|
|
02/09/2026, 05:51
|
#103
|
elite*gold: 0
Join Date: Dec 2025
Posts: 8
Received Thanks: 0
|
Quote:
Originally Posted by atherounge3
What do you mean? Which "admin panel"?
You just give yourself 100 permissions in Telecaster.dbo.Cahracter and type in chat /run blahblah
|
I'm wondering if I can use admin commands like item distribution and monster spawning in the client. Is there an admin tool that works properly? I tried flatgm, and it loaded the databases, but distribution doesn't work. So, I'm wondering if anyone has encountered this and set up admin commands and can share their experience.
|
|
|
02/09/2026, 10:05
|
#104
|
elite*gold: 0
Join Date: Feb 2025
Posts: 147
Received Thanks: 58
|
Quote:
Originally Posted by ActionGod
I'm wondering if I can use admin commands like item distribution and monster spawning in the client. Is there an admin tool that works properly? I tried flatgm, and it loaded the databases, but distribution doesn't work. So, I'm wondering if anyone has encountered this and set up admin commands and can share their experience.
|
???
|
|
|
02/10/2026, 15:19
|
#105
|
elite*gold: 0
Join Date: Oct 2022
Posts: 85
Received Thanks: 1
|
Quote:
Originally Posted by atherounge3
|
I have a question. In your pack, you include the tool GlanduRDBTool, which is very useful for working with RDB files and connecting to the database. However, in the version of the Client 9.5.2 that you shared, as far as I know, it is not possible to work with RDB files inside the Resource folder. The data.0xx files must be rebuilt with the RDB files inside. I’m curious why this application, which does not recompile the data files, is included.
|
|
|
 |
|
Similar Threads
|
[Selling] KITEKAT 30 DAY KEY FOR SELL
08/14/2023 - Rust Trading - 0 Replies
Selling a Kitekat rust cheat key
I have used it but dont need it anymore (will come with HWID Reset)
It is valid until 4th of September.
Original price: 31$
Want:17$ (Crypto LTC BTC or any crypto)
https://media.discordapp.net/attachments/10781259 96215111832/1079663174535610398/image.png?width=12 02&height=676
|
[Selling] RUST KITEKAT 20 DAYS REMAINING $15
08/14/2023 - Rust Trading - 0 Replies
As title suggests I am selling my kitekat key since I am now playing EFT
There is 20ish days available and I am open to offers, would like around 15 dollars. For reference 7 days usually costs around 13.5 dollars.
My friend is also selling his key due to same situation so 2 keys available.
Add me on Discord .miraql
SUPPORTED OS:
|
Arcaida Repack 1.3..? ممكن ملفات Arcaida Repack 1.3
11/16/2011 - Rappelz Private Server - 1 Replies
HI
Possible files Arcaida Repack 1.3 modern
ـــــــ ـــــــ& #1600;ــــــ 1600;ــــــ
السلام عليكم ورحمة الله وبركاته
ممكن ملفات
Arcaida Repack 1.3
جديدة وحديثة
|
UWC Repack 1.0.9.9 (aka Ramas Repack)
01/02/2008 - WoW Private Server - 16 Replies
This is the newes release by Team UWC:
DL:
FULL RAR:
UWC Repack 1.0.9.9 (Rapidshare)
If you start the emu in the first time, you must type:
.create_auctiondb
.create_maildb
.create_buybackdb
|
All times are GMT +1. The time now is 21:19.
|
|