|
You last visited: Today at 12:00
Advertisement
[RELESE] Test Character Ballance script
Discussion on [RELESE] Test Character Ballance script within the Rappelz Private Server forum part of the Rappelz category.
01/11/2025, 00:32
|
#1
|
elite*gold: 0
Join Date: Apr 2017
Posts: 200
Received Thanks: 113
|
[RELESE] Test Character Ballance script
Release: Test Character script for Private Servers
This script was developed with private server developers in mind, particularly those who spend an unnecessary amount of time setting up characters for testing purposes. Its aim is to streamline the process of testing classes and balancing gameplay, providing a more efficient workflow.
Features- Select a class with one click, independent of race.
- Automatically assigns all skills and skill cards for the chosen class.
- Provides fully enhanced starter equipment, along with pets for belt slots.
- Levels the character to a configurable level (default: 150).
- Includes a configurable section for developers to adjust values such as skill card levels, equipment enhancement levels, and starting level.
How It Works
When a class is selected, the system automatically:
- Changes the character's class.
- Resets and assigns the skill tree with all abilities for the class.
- Provides skill cards, enhanced gear, and pets.
- Levels up the character to the predefined level, ensuring it is ready for immediate testing.
This functionality eliminates the need for repetitive manual setup, allowing developers to focus on testing and balancing instead of spending time on character preparation.
Configuration
Code:
local Config = {
skill_card_enhance = 8, -- Level of skill cards
start_eq_level = 20, -- Level of starter equipment
start_eq_enhance = 25, -- Enhancement level of starter gear
level_up_by_choose_class = 150, -- Starting level
}
The configuration can be easily modified to suit specific server requirements.
Script
Code:
function get_module_name()
return "Immortal_New_Player.lua"
end
local Config = {
skill_card_enhance = 8,
start_eq_level = 20,
start_eq_enhance = 25,
level_up_by_choose_class = 150,
class_types = {
Warrior = 1,
Hunter = 2,
Mage = 3,
Summoner = 4,
Unknow = -1
},
}
function Start_Class_Choose(race)
local title, menu1, menu2, menu3, menu4, menu5, command1, command2, command3, command4, command5
title = "Select Your Class"
if not race then
race = tonumber(gv("race"))
end
if race == 3 then -- Gaia
menu1 = "@10120" -- Berserker
menu2 = "@10121" -- Marksman
menu3 = "@10122" -- Magus
menu4 = "@10123" -- War Kahuna
menu5 = "@10124" -- Beast Master
command1 = "Set_Choosed_Class(11)"
command2 = "Set_Choosed_Class(12)"
command3 = "Set_Choosed_Class(13)"
command4 = "Set_Choosed_Class(14)"
command5 = "Set_Choosed_Class(15)"
elseif race == 4 then -- Deva
menu1 = "@10220" -- Templar
menu2 = "@10221" -- Mercenary
menu3 = "@10222" -- Cardinal
menu4 = "@10223" -- Oracle
menu5 = "@10224" -- Master Breeder
command1 = "Set_Choosed_Class(21)"
command2 = "Set_Choosed_Class(22)"
command3 = "Set_Choosed_Class(23)"
command4 = "Set_Choosed_Class(24)"
command5 = "Set_Choosed_Class(25)"
elseif race == 5 then -- Asura
menu1 = "@10320" -- Slayer
menu2 = "@10321" -- DeadEye
menu3 = "@10322" -- Void Mage
menu4 = "@10323" -- Corruptor
menu5 = "@10324" -- Overlord
command1 = "Set_Choosed_Class(31)"
command2 = "Set_Choosed_Class(32)"
command3 = "Set_Choosed_Class(33)"
command4 = "Set_Choosed_Class(34)"
command5 = "Set_Choosed_Class(35)"
end
dlg_special_menu(title, 'YoSiem_the_best', menu1, command1, menu2, command2, menu3, command3, menu4, command4,
menu5, command5)
end
function Set_Choosed_Class(class)
local Class_Array = {
[31] = {301, 310, 320},
[32] = {301, 311, 321},
[33] = {301, 312, 322},
[34] = {301, 313, 323},
[35] = {301, 314, 324},
[21] = {201, 210, 220},
[22] = {201, 211, 221},
[23] = {201, 212, 222},
[24] = {201, 213, 223},
[25] = {201, 214, 224},
[11] = {101, 110, 120},
[12] = {101, 111, 121},
[13] = {101, 112, 122},
[14] = {101, 113, 123},
[15] = {101, 114, 124}
}
local race
if class >= 30 then
race = 5 -- Asura
elseif class >= 20 then
race = 4 -- Deva
elseif class >= 10 then
race = 3 -- Gaia
end
if race then
sv("race", race)
end
reset_skilltree(0)
reset_job(0)
learn_all_skill()
for _, job in ipairs(Class_Array[class]) do
Run_JobChange_common("@10" .. tostring(job), job)
learn_all_skill()
end
sv("lv", Config.level_up_by_choose_class)
Add_Skill_Cards(class)
Insert_Belt_Pets(5)
Instert_MasterSet(class)
end
function Add_Skill_Cards(class)
local Skill_Cards = {
[11] = {502001,502041,502043,502044,502045,502046,502052,502053,502055,502056,502058,502082,502311,502312,502313,502315,502602,502631,502635,502641,502642,502645,502655,502656,502661,504001,504002,504003,506010,522009,522010,522501,523418,541101,541102,541107,541111,541120,541124,550301,550401}, -- Berserker
[12] = {502001,502041,502043,502044,502045,502046,502311,502312,502313,502315,502321,502322,502326,502328,502602,502616,502617,502631,502635,502641,502642,502645,502662,502663,502664,502668,502681,504001,504002,504003,506010,522305,522306,522501,523418,541120,541202,541211,541224,541225,550301,550401}, -- Meisterschuetze
[13] = {502001,502041,502046,502602,503021,503022,503023,503024,503025,503151,503181,503183,503188,503209,503220,503222,503224,503423,503424,503425,503426,503427,503428,503429,503430,503431,503472,503751,503754,503901,504001,504002,504003,506010,523015,523419,523420,523421,523422,523441,523442,523602,541302,541306,541311,541315,541320,541329,541330,550301,550401}, -- Erzdruide
[14] = {502001,502041,502046,502082,502602,503021,503022,503023,503024,503025,503103,503187,503222,503423,503424,503425,503426,503427,503428,503429,503430,503431,503752,504001,504002,504003,506010,523016,523419,523420,523421,523422,523602,541329,541330,541402,541406,541411,541413,541419,550301,550401}, -- Seher
[15] = {502001,502041,502044,502046,502602,502682,503021,503022,503622,504001,504002,504003,504012,506010,521501,522009,522012,523423,523424,523425,523426,523427,523443,523603,523604,524001,524002,524202,524203,524801,541502,541506,541513,541521,541523,550301,550401}, -- Bestienmeister
[21] = {502001,502011,502012,502013,502014,502018,502019,502020,502021,502022,502063,502064,502067,502068,502611,502615,502635,503001,503201,503401,503492,503814,503815,504001,504002,504003,506010,521103,521112,521121,521124,522001,522002,522003,522004,523401,523402,523403,550101,550102,550401}, -- Templer
[22] = {502001,502011,502012,502013,502014,502018,502019,502020,502021,502022,502061,502611,502635,503001,503201,503401,503492,503815,504001,504002,504003,506010,521201,521202,521211,522001,522002,522003,522005,522006,522007,522008,523009,523010,523011,523401,523402,523403,523432,550101,550102,550401}, -- Kreuzritter
[23] = {502001,502012,503002,503003,503004,503005,503011,503037,503040,503201,503202,503203,503204,503205,503210,503402,503454,504001,504002,504003,506010,521302,521304,521308,521311,521319,521320,521322,523001,523002,523003,523004,523012,523013,523014,523404,523405,523406,523407,523408,523409,523433,523601,550101,550102,550401}, -- Erzbischof
[24] = {502001,502012,503002,503003,503004,503005,503011,503201,503202,503203,503204,503205,503210,503402,503454,504001,504002,504003,506010,521304,521401,521402,521411,521417,521420,521427,523001,523002,523003,523004,523204,523205,523206,523404,523405,523406,523407,523408,523409,523433,523434,523435,523436,523437,523438,523439,523601,550101,550102,550401}, -- Hohepriester
[25] = {502001,502011,502014,503002,503005,503011,503201,503401,503402,503621,504001,504002,504003,504012,504201,504202,504207,504402,506010,521304,521501,521502,521504,521506,521511,521520,521524,521525,521526,521527,523002,523201,523202,523410,523411,523412,523413,523414,523415,523416,523417,523606,524204,524401,524402,524403,524404,550101,550102,550401}, -- Kreaturenmeister
[31] = {502001,502031,502032,502033,502034,502060,502070,502071,502074,502075,502076,502077,502078,502304,502501,502502,502503,502601,502621,502622,502623,502624,502626,502630,502637,502638,502639,502649,504001,504002,504003,506010,522011,522301,522302,522303,522304,531102,531105,531108,531111,531116,531117,531120,531124,550201,550401}, -- Schattenklinge
[32] = {502001,502031,502032,502033,502034,502303,502304,502331,502332,502333,502334,502337,502339,502340,502501,502502,502503,502601,502620,502621,502622,502623,502624,502626,502630,502671,502672,502673,502676,502677,502678,502679,504001,504002,504003,506010,522301,522302,522303,522304,522307,531202,531204,531208,531220,550201,550401}, -- Schattenjaeger
[33] = {502001,502601,503012,503013,503014,503015,503016,503017,503027,503033,503156,503185,503186,503211,503212,503411,503412,503435,503458,503460,503461,503601,503602,503603,503607,503806,504001,504002,504003,506010,523005,523006,523007,523008,523017,523203,523428,523429,523605,531308,531312,531314,531315,531320,531324,531329,550201,550401}, -- Lich
[34] = {502001,502601,503012,503013,503014,503015,503016,503017,503030,503035,503185,503211,503212,503411,503412,503435,503458,503601,503602,503603,503608,503613,503614,503616,503750,503753,503803,503810,503811,504001,504002,504003,506010,523005,523006,523007,523008,523203,523428,523429,523444,523445,523605,523801,523802,531314,531315,531402,531407,531411,531422,531423,550201,550401}, -- Hexenmeist
[35] = {502001,502031,502032,502051,502501,502601,502621,503012,503014,503601,504001,504002,504003,504012,504211,504412,504413,504612,504613,504614,504801,504802,504901,506010,521501,523007,523430,523431,523605,524201,524405,524406,524407,524802,524803,524804,524805,531314,531502,531504,531505,531512,531521,531524,531526,550201,550401} -- Okkultist
}
if not Skill_Cards[class] then
private_notice("Invalid class ID: " .. tostring(class))
return
end
local cards = Skill_Cards[class]
for _, cardID in ipairs(cards) do
insert_item(cardID, 1, Config.skill_card_enhance)
end
private_notice("Skill cards for class " .. Get_Class_Name(class) .. " added successfully.")
end
function Get_Class_Name(class_id)
local class_names = {
-- Gaia
[11] = "Berserker",
[12] = "Marksman",
[13] = "Magus",
[14] = "War Kahuna",
[15] = "Beast Master",
-- Deva
[21] = "Templar",
[22] = "Mercenary",
[23] = "Cardinal",
[24] = "Oracle",
[25] = "Master Breeder",
-- Asura
[31] = "Slayer",
[32] = "DeadEye",
[33] = "Void Mage",
[34] = "Corruptor",
[35] = "Overlord"
}
return class_names[class_id] or "Unknown Class ID"
end
function Get_Class_Type(class_id)
local class_types = {
-- Gaia
[11] = Config.class_types.Warrior,
[12] = Config.class_types.Hunter,
[13] = Config.class_types.Mage,
[14] = Config.class_types.Mage,
[15] = Config.class_types.Summoner,
-- Deva
[21] = Config.class_types.Warrior,
[22] = Config.class_types.Warrior,
[23] = Config.class_types.Mage,
[24] = Config.class_types.Mage,
[25] = Config.class_types.Summoner,
-- Asura
[31] = Config.class_types.Warrior,
[32] = Config.class_types.Hunter,
[33] = Config.class_types.Mage,
[34] = Config.class_types.Mage,
[35] = Config.class_types.Summoner
}
return class_types[class_id] or Config.class_types.Unknow
end
function Insert_Belt_Pets(stage)
local creature_codes = {540002, 540005, 540006, 540009, 540010, 540011, 540012, 540013, 540014, 540015, 540016, 540018, 540019, 540036, 540037, 540050, 540051, 540054, 540056, 540058, 540060, 540062, 540064, 540066, 540069, 540073, 540075, 540077, 540078, 540080, 540082, 540084, 540086, 540088}
local durabilities = 200
for _, item_code in ipairs(creature_codes) do
for i = 1, 3 do
local item_handle = insert_item(item_code, 1, stage, 1, -2147483648)
set_item_ethereal_durability(item_handle, durabilities)
end
end
end
function Instert_MasterSet(class)
local item_codes = {101720504, 101720504, 102720504,103720504, 103720504, 104720504, 105720504, 106720504, 107720504, 108720504, 110720504,110720504, 111720504, 112720504, 113720504,113720504, 201720804, 202720804, 203720804, 204721304, 210720704, 210720804, 231720804, 232720804, 233720804, 234720804, 241720804, 242720804, 243720804, 244720804, 250720804, 301760104, 301760204, 302760104, 303760104}
local soul_stone_count = {2,2, 4, 2,2, 4, 4, 2, 4, 4, 4,4, 2, 4, 2,2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0}
local soul_stones
local class_type = Get_Class_Type(class)
if class_type == Config.class_types.Warrior then
soul_stones = {810301,810302,810301,810302}
elseif class_type == Config.class_types.Hunter then
soul_stones = {810303,810304,810303,810304}
elseif class_type == Config.class_types.Mage then
soul_stones = {810305,810302,810305,810302}
elseif class_type == Config.class_types.Summoner then
soul_stones = {810301,810302,810301,810302}
end
local item_entry_count = table.getn(item_codes)
for i = 1, item_entry_count do
local item_handle = insert_item(item_codes[i], 1)
if item_handle == 0 then
cprint('Item could not be created: ' .. item_codes[i])
return
end
set_item_enhance(item_handle, Config.start_eq_enhance)
set_item_level(item_handle, Config.start_eq_level)
if soul_stone_count[i] > 0 then
for j = 1, soul_stone_count[i] do
set_socket_info(item_handle, j - 1, soul_stones[j])
end
end
end
return
end
Purpose
The purpose of this script is to simplify and speed up the testing process for new private servers. Developers often spend significant time manually setting up characters, which can delay progress. This tool eliminates that inefficiency, allowing for a focus on gameplay balance and mechanics.
Demonstration
For a quick demonstration of the script in action, check out the video below:
Feedback and suggestions for improvement are welcome to further refine this tool for the community.
~YoSiem
|
|
|
01/11/2025, 00:40
|
#2
|
elite*gold: 0
Join Date: Mar 2023
Posts: 1
Received Thanks: 0
|
Great work actully
|
|
|
01/11/2025, 00:47
|
#3
|
elite*gold: 0
Join Date: Jun 2022
Posts: 1
Received Thanks: 0
|
This is very cool! It will help speed up testing
|
|
|
01/19/2025, 17:46
|
#4
|
elite*gold: 0
Join Date: Jul 2011
Posts: 113
Received Thanks: 87
|
Hi,
Very interesting script, thanks.
However, i got this gs error "attempt to call global 'reset_skilltree' (a nil value)"
Which gs did you use ?
Thanks
|
|
|
01/20/2025, 03:25
|
#5
|
elite*gold: 0
Join Date: Apr 2017
Posts: 200
Received Thanks: 113
|
Quote:
Originally Posted by Ne0@NCarbon
Hi,
Very interesting script, thanks.
However, i got this gs error "attempt to call global 'reset_skilltree' (a nil value)"
Which gs did you use ?
Thanks
|
Hi,
You're absolutely right, and I appreciate you pointing this out. In my custom GS, the function is named differently.
The official game server uses the following:
Simply replace that line in your script, and it should work perfectly. Thank you so much for your feedback; I wasn't aware of this issue! 😊
Best regards,
YoSiem
|
|
|
01/20/2025, 07:12
|
#6
|
elite*gold: 0
Join Date: Jul 2011
Posts: 113
Received Thanks: 87
|
Quote:
Originally Posted by yosiemelo
Hi,
You're absolutely right, and I appreciate you pointing this out. In my custom GS, the function is named differently.
The official game server uses the following:
Simply replace that line in your script, and it should work perfectly. Thank you so much for your feedback; I wasn't aware of this issue! 😊
Best regards,
YoSiem
|
Hi,
Thank you so much for this quick reply.
Works perfectly now !!
Have a good day
|
|
|
 |
Similar Threads
|
[Selling] Selling druid 710 pve ballance/resto and 735 Pvp!
01/07/2016 - World of Warcraft Trading - 3 Replies
Can provide all info you guys need.Post below your questions and I'll answer them if you are intrested !
Good day!
|
ballance mt2 -char_battle.cpp RISAN Help me
08/30/2012 - Metin2 Private Server - 1 Replies
game1-ballancemt2 syserror
SYSERR: Dec 24 13:02:24 :: GetPoint: Point type overflow (type 255)
SYSERR: Dec 24 13:02:24 :: GetPoint: Point type overflow (type 255)
SYSERR: Dec 24 13:02:24 :: GetPoint: Point type overflow (type 255)
SYSERR: Dec 24 13:02:24 :: GetPoint: Point type overflow (type 255)
SYSERR: Dec 24 13:02:25 :: GetPoint: Point type overflow (type 255)
SYSERR: Dec 24 13:02:25 :: GetPoint: Point type overflow (type 255)
SYSERR: Dec 24 13:02:25 :: number_ex: number(): first...
|
[Help] Syserr server files m2 ballance 2011
07/17/2012 - Metin2 Private Server - 1 Replies
Anyone can help me with this error please :
SYSERR: Feb 18 14:26:14 :: number_ex: number(): first argument is bigger than second argument 71 -> 70, char_skill.cpp 1030
SYSERR: Feb 18 14:26:48 :: Process: SEQUENCE 3d02c400 mismatch 0xaf != 0x0 header 254
SYSERR: Feb 18 14:26:48 :: Process: SEQUENCE_LOG -------------
Y have sf 2011 (metin2ballance with game r32_v7 by .Infyniti)
Y use also FreeBsd 8,2 x64
|
All times are GMT +1. The time now is 12:01.
|
|