This will be an how-to create your own race, or modify an existing one.
First, if you have already a custom race (from previous versions like v2.0.5) read this:
The old race format, this example is for undead, looked like this:
Really big, alot of code, bad for multi-language support, unflexible....
The new format will be:
You see, its alot more flexible and smaller, compare ~10000 bytes vs ~4400 bytes of code
(and this races do the same !)
New features compared with the v2.0.x format
* skill names and description in one line ! Its really better if you wanna make a local language version of a race
* skill configs in one line, new is player_death (f.ex. suicide bomber or respawn skills)
* skill settings (variables how strong the effect is) in one line !
* only ONE command line is required ! No more copy&paste 4 times the same code
* also, only one effects code line, all parameters can be set in skill_setting
* UNLIMITED skills support ! But ok....dont use more than 8 skills, because of the selection menu is no multipage yet.....
* UNLIMITED levels support ! But.....you cannot use more than 1024 characters in a line....this is the limitation from Eventscripts. A good thing: 4 level for this Undead race need only 230 characters (means that you can make Undead with 16 levels :shock:)[/list]
This post will be continiued with more info about how to make a race...
First, if you have already a custom race (from previous versions like v2.0.5) read this:
The old race format, this example is for undead, looked like this:
Really big, alot of code, bad for multi-language support, unflexible....
Code: [Select]
"1"
{
"name" "Undead Scourge"
"requiredlevel" "0"
"preloadcmd" "es_setinfo wc_undeadscourge_rand 0;es_setinfo wc_x 0;es_setinfo wc_y 0;es_setinfo wc_z 0;echo Loaded Race: Undead Scourge."
"roundstartcmd" "es_setinfo wc_undeadscourge_rand 0"
"roundendcmd" ""
"skill1cfg" "player_hurt_attacker"
"skill1description" "Gives you a percentage of the damage you do in attack back as health."
"skill1name" "Vampiric Aura"
"skill1level1cmd" "es_setinfo wc_dmg 0;es_setinfo wc_dmg event_var(dmg_health);es_math wc_dmg / 8;es ma_givehealth event_var(attacker) server_var(wc_dmg);es ma_takehealth event_var(userid) server_var(wc_dmg);es_tell event_var(attacker) #green You have used Vampiric Aura on event_var(es_username).;es_tell event_var(userid) #lightgreen event_var(es_attackername) leeched some HP from you."
"skill1level2cmd" "es_setinfo wc_dmg 0;es_setinfo wc_dmg event_var(dmg_health);es_math wc_dmg / 7;es ma_givehealth event_var(attacker) server_var(wc_dmg);es ma_takehealth event_var(userid) server_var(wc_dmg);es_tell event_var(attacker) #green You have used Vampiric Aura on event_var(es_username).;es_tell event_var(userid) #lightgreen event_var(es_attackername) leeched some HP from you."
"skill1level3cmd" "es_setinfo wc_dmg 0;es_setinfo wc_dmg event_var(dmg_health);es_math wc_dmg / 6;es ma_givehealth event_var(attacker) server_var(wc_dmg);es ma_takehealth event_var(userid) server_var(wc_dmg);es_tell event_var(attacker) #green You have used Vampiric Aura on event_var(es_username).;es_tell event_var(userid) #lightgreen event_var(es_attackername) leeched some HP from you."
"skill1level4cmd" "es_setinfo wc_dmg 0;es_setinfo wc_dmg event_var(dmg_health);es_math wc_dmg / 5;es ma_givehealth event_var(attacker) server_var(wc_dmg);es ma_takehealth event_var(userid) server_var(wc_dmg);es_tell event_var(attacker) #green You have used Vampiric Aura on event_var(es_username).;es_tell event_var(userid) #lightgreen event_var(es_attackername) leeched some HP from you."
"skill1level1sfx" "es_math wc_attacker_z + 20;es_math wc_victim_z + 20;es ma_effect 1 server_var(wc_attacker_x) server_var(wc_attacker_y) server_var(wc_attacker_z) server_var(wc_victim_x) server_var(wc_victim_y) server_var(wc_victim_z) lightning NULL 0 0 0.5 10 10 0 1 255 0 0 64 30"
"skill1level2sfx" "es_math wc_attacker_z + 20;es_math wc_victim_z + 20;es ma_effect 1 server_var(wc_attacker_x) server_var(wc_attacker_y) server_var(wc_attacker_z) server_var(wc_victim_x) server_var(wc_victim_y) server_var(wc_victim_z) lightning NULL 0 0 0.5 10 10 0 1 255 0 0 128 30"
"skill1level3sfx" "es_math wc_attacker_z + 20;es_math wc_victim_z + 20;es ma_effect 1 server_var(wc_attacker_x) server_var(wc_attacker_y) server_var(wc_attacker_z) server_var(wc_victim_x) server_var(wc_victim_y) server_var(wc_victim_z) lightning NULL 0 0 0.5 10 10 0 1 255 0 0 192 30"
"skill1level4sfx" "es_math wc_attacker_z + 20;es_math wc_victim_z + 20;es ma_effect 1 server_var(wc_attacker_x) server_var(wc_attacker_y) server_var(wc_attacker_z) server_var(wc_victim_x) server_var(wc_victim_y) server_var(wc_victim_z) lightning NULL 0 0 0.5 10 10 0 1 255 0 0 255 30"
"skill2cfg" "player_hurt_attacker"
"skill2description" "You have a chance of slapping your enemy and doing more damage the higher level you are."
"skill2name" "Banish"
"skill2level1cmd" "es_rand wc_undeadscourge_rand 1 8;if (server_var(wc_undeadscourge_rand) = 1) then ma_slap event_var(userid) 5;if (server_var(wc_undeadscourge_rand) = 1) then es_tell event_var(attacker) #green You have used Banish on event_var(es_username).;if (server_var(wc_undeadscourge_rand) = 1) then es_tell event_var(userid) #lightgreen You have been banished by event_var(es_attackername)."
"skill2level2cmd" "es_rand wc_undeadscourge_rand 1 7;if (server_var(wc_undeadscourge_rand) = 1) then ma_slap event_var(userid) 10;if (server_var(wc_undeadscourge_rand) = 1) then es_tell event_var(attacker) #green You have used Banish on event_var(es_username).;if (server_var(wc_undeadscourge_rand) = 1) then es_tell event_var(userid) #lightgreen You have been banished by event_var(es_attackername)."
"skill2level3cmd" "es_rand wc_undeadscourge_rand 1 7;if (server_var(wc_undeadscourge_rand) = 1) then ma_slap event_var(userid) 15;if (server_var(wc_undeadscourge_rand) = 1) then es_tell event_var(attacker) #green You have used Banish on event_var(es_username).;if (server_var(wc_undeadscourge_rand) = 1) then es_tell event_var(userid) #lightgreen You have been banished by event_var(es_attackername)."
"skill2level4cmd" "es_rand wc_undeadscourge_rand 1 6;if (server_var(wc_undeadscourge_rand) = 1) then ma_slap event_var(userid) 20;if (server_var(wc_undeadscourge_rand) = 1) then es_tell event_var(attacker) #green You have used Banish on event_var(es_username).;if (server_var(wc_undeadscourge_rand) = 1) then es_tell event_var(userid) #lightgreen You have been banished by event_var(es_attackername)."
"skill2level1sfx" "es_math wc_attacker_z + 20;es_math wc_victim_z + 20;if (server_var(wc_undeadscourge_rand) = 1) then es ma_effect 1 server_var(wc_attacker_x) server_var(wc_attacker_y) server_var(wc_attacker_z) server_var(wc_victim_x) server_var(wc_victim_y) server_var(wc_victim_z) lightning NULL 0 0 0.5 10 10 0 1 0 255 255 64 30"
"skill2level2sfx" "es_math wc_attacker_z + 20;es_math wc_victim_z + 20;if (server_var(wc_undeadscourge_rand) = 1) then es ma_effect 1 server_var(wc_attacker_x) server_var(wc_attacker_y) server_var(wc_attacker_z) server_var(wc_victim_x) server_var(wc_victim_y) server_var(wc_victim_z) lightning NULL 0 0 0.5 10 10 0 1 0 255 255 128 30"
"skill2level3sfx" "es_math wc_attacker_z + 20;es_math wc_victim_z + 20;if (server_var(wc_undeadscourge_rand) = 1) then es ma_effect 1 server_var(wc_attacker_x) server_var(wc_attacker_y) server_var(wc_attacker_z) server_var(wc_victim_x) server_var(wc_victim_y) server_var(wc_victim_z) lightning NULL 0 0 0.5 10 10 0 1 0 255 255 192 30"
"skill2level4sfx" "es_math wc_attacker_z + 20;es_math wc_victim_z + 20;if (server_var(wc_undeadscourge_rand) = 1) then es ma_effect 1 server_var(wc_attacker_x) server_var(wc_attacker_y) server_var(wc_attacker_z) server_var(wc_victim_x) server_var(wc_victim_y) server_var(wc_victim_z) lightning NULL 0 0 0.5 10 10 0 1 0 255 255 255 30"
"skill3cfg" "player_spawn"
"skill3description" "You reduce your personal gravity, more levels means less gravity."
"skill3name" "Levitation"
"skill3level1cmd" "es ma_gravity event_var(userid) 85;es_keysetvalue gravities event_var(userid) 85;es_tell event_var(userid) #green Levitation God: Your levitation has been set to level 1."
"skill3level2cmd" "es ma_gravity event_var(userid) 70;es_keysetvalue gravities event_var(userid) 70;es_tell event_var(userid) #green Levitation God: Your levitation has been set to level 2."
"skill3level3cmd" "es ma_gravity event_var(userid) 55;es_keysetvalue gravities event_var(userid) 55;es_tell event_var(userid) #green Levitation God: Your levitation has been set to level 3."
"skill3level4cmd" "es ma_gravity event_var(userid) 40;es_keysetvalue gravities event_var(userid) 40;es_tell event_var(userid) #green Levitation God: Your levitation has been set to level 4."
"skill3level1sfx" "es_math wc_player_z + 20;es ma_effect 10 A 0 server_var(wc_player_x) server_var(wc_player_y) server_var(wc_player_z) 20 100 lightning NULL 0 10 1 15 10 1 0 0 255 255 0 0"
"skill3level2sfx" "es_math wc_player_z + 20;es ma_effect 10 A 0 server_var(wc_player_x) server_var(wc_player_y) server_var(wc_player_z) 20 100 lightning NULL 0 10 1 15 10 1 0 0 255 255 0 0"
"skill3level3sfx" "es_math wc_player_z + 20;es ma_effect 10 A 0 server_var(wc_player_x) server_var(wc_player_y) server_var(wc_player_z) 20 100 lightning NULL 0 10 1 15 10 1 0 0 255 255 0 0"
"skill3level4sfx" "es_math wc_player_z + 20;es ma_effect 10 A 0 server_var(wc_player_x) server_var(wc_player_y) server_var(wc_player_z) 20 100 lightning NULL 0 10 1 15 10 1 0 0 255 255 0 0"
"ultimatecfg" "player_hurt_attacker"
"ultimatedescription" "You have a chance to burn your victims for big damage."
"ultimatename" "Satans Wrath"
"ultimatelevel1cmd" "es_rand wc_undeadscourge_rand 1 7;if (server_var(wc_undeadscourge_rand) = 1) then es ma_takehealth event_var(userid) 10;if (server_var(wc_undeadscourge_rand) = 1) then es_tell event_var(attacker) #green Satan's Wrath strikes event_var(es_username).;if (server_var(wc_undeadscourge_rand) = 1) then es_tell event_var(userid) #lightgreen event_var(es_attackername) strikes you with Satan's Wrath."
"ultimatelevel2cmd" "es_rand wc_undeadscourge_rand 1 8;if (server_var(wc_undeadscourge_rand) = 1) then es ma_takehealth event_var(userid) 20;if (server_var(wc_undeadscourge_rand) = 1) then es_tell event_var(attacker) #green Satan's Wrath strikes event_var(es_username).;if (server_var(wc_undeadscourge_rand) = 1) then es_tell event_var(userid) #lightgreen event_var(es_attackername) strikes you with Satan's Wrath."
"ultimatelevel3cmd" "es_rand wc_undeadscourge_rand 1 9;if (server_var(wc_undeadscourge_rand) = 1) then es ma_takehealth event_var(userid) 30;if (server_var(wc_undeadscourge_rand) = 1) then es_tell event_var(attacker) #green Satan's Wrath strikes event_var(es_username).;if (server_var(wc_undeadscourge_rand) = 1) then es_tell event_var(userid) #lightgreen event_var(es_attackername) strikes you with Satan's Wrath."
"ultimatelevel4cmd" "es_rand wc_undeadscourge_rand 1 10;if (server_var(wc_undeadscourge_rand) = 1) then es ma_takehealth event_var(userid) 40;if (server_var(wc_undeadscourge_rand) = 1) then es_tell event_var(attacker) #green Satan's Wrath strikes event_var(es_username).;if (server_var(wc_undeadscourge_rand) = 1) then es_tell event_var(userid) #lightgreen event_var(es_attackername) strikes you with Satan's Wrath."
"ultimatelevel1sfx" "if (server_var(wc_undeadscourge_rand) = 1) then es ma_effect 19 A 0 server_var(wc_victim_x) server_var(wc_victim_y) server_var(wc_victim_z) fire1 2 255"
"ultimatelevel2sfx" "if (server_var(wc_undeadscourge_rand) = 1) then es ma_effect 19 A 0 server_var(wc_victim_x) server_var(wc_victim_y) server_var(wc_victim_z) fire1 2 255"
"ultimatelevel3sfx" "if (server_var(wc_undeadscourge_rand) = 1) then es ma_effect 19 A 0 server_var(wc_victim_x) server_var(wc_victim_y) server_var(wc_victim_z) fire1 2 255"
"ultimatelevel4sfx" "if (server_var(wc_undeadscourge_rand) = 1) then es ma_effect 19 A 0 server_var(wc_victim_x) server_var(wc_victim_y) server_var(wc_victim_z) fire1 2 255"
}The new format will be:
Code: [Select]
"1"
{
"name" "Undead Scourge"
"preloadcmd" "es_xsetinfo wcs_rand 0;es_xsetinfo wcs_x1 0;es_xsetinfo wcs_y1 0;es_xsetinfo wcs_z1 0;es_xsetinfo wcs_x2 0;es_xsetinfo wcs_y2 0;es_xsetinfo wcs_z2 0;echo Loaded Race: Undead Scourge."
"numberofskills" "4"
"numberoflevels" "4"
"skillnames" "Vampiric Aura|Banish|Levitation|Satans Wrath"
"skilldescr" "Gives you a percentage of the damage you do in attack back as health.|You have a chance of slapping your enemy and doing more damage the higher level you are.|You reduce your personal gravity, more levels means less gravity.|You have a chance to burn your victims for big damage."
"skillcfg" "player_attacker|player_attacker|player_spawn|player_attacker"
"skill1_setting" "es_xsetinfo wcs_divider 8;es_xsetinfo wcs_alpha 50|es_xsetinfo wcs_divider 7;es_xsetinfo wcs_alpha 90|es_xsetinfo wcs_divider 6;es_xsetinfo wcs_alpha 140|es_xsetinfo wcs_divider 5;es_xsetinfo wcs_alpha 200"
"skill1_cmd" "es_xsetinfo wcs_dmg 0;es_setinfo wcs_dmg event_var(dmg_health);es_math wcs_dmg / server_var(wcs_divider);es_xsetinfo wcs_health 0;es est_GetHealth wcs_health event_var(attacker);es_math wcs_health + server_var(wcs_dmg);es est_SetHealth event_var(attacker) server_var(wcs_dmg);es wcs_dealdamage event_var(attacker) event_var(userid) server_var(wcs_dmg);es_tell event_var(attacker) You have used Vampiric Aura on event_var(es_username).;es_tell event_var(userid) event_var(es_attackername) leeched some HP from you."
"skill1_sfx" "es_getplayerlocation wcs_x1 wcs_y1 wcs_z1 event_var(attacker);es_getplayerlocation wcs_x2 wcs_y2 wcs_z2 event_var(userid);es_xmath wcs_z1 + 20;es_xmath wcs_z2 + 20;es est_Effect 3 #a 0 sprites/lgtning.vmt server_var(wcs_x1) server_var(wcs_y1) server_var(wcs_z1) server_var(wcs_x2) server_var(wcs_y2) server_var(wcs_z2) 0.5 40 40 255 0 0 server_var(wcs_alpha)"
"skill2_setting" "es_xrand wcs_rand 1 9;es_xsetinfo wcs_damage 5;es_xsetinfo wcs_alpha 50|es_xrand wcs_rand 1 8;es_xsetinfo wcs_damage 9;es_xsetinfo wcs_alpha 90|es_xrand wcs_rand 1 7;es_xsetinfo wcs_damage 13;es_xsetinfo wcs_alpha 140|es_xrand wcs_rand 1 6;es_xsetinfo wcs_damage 17;es_xsetinfo wcs_alpha 200"
"skill2_cmd" "if (server_var(wcs_rand) = 1) then es wcs_dealdamage event_var(attacker) event_var(userid) server_var(wcs_damage);if (server_var(wcs_rand) = 1) then es_tell event_var(attacker) You have used Banish on event_var(es_username) with server_var(wcs_damage) damage.;if (server_var(wcs_rand) = 1) then es_tell event_var(userid) You have been banished by event_var(es_attackername)."
"skill2_sfx" "es_getplayerlocation wcs_x1 wcs_y1 wcs_z1 event_var(attacker);es_getplayerlocation wcs_x2 wcs_y2 wcs_z2 event_var(userid);es_xmath wcs_z1 + 20;es_xmath wcs_z2 + 20;if (server_var(wcs_rand) = 1) then es est_Effect 3 #a 0 sprites/crystal_beam1.vmt server_var(wcs_x1) server_var(wcs_y1) server_var(wcs_z1) server_var(wcs_x2) server_var(wcs_y2) server_var(wcs_z2) 0.5 40 40 255 255 100 server_var(wcs_alpha)"
"skill3_setting" "es_xsetinfo wcs_gravity 0.9|es_xsetinfo wcs_gravity 0.8|es_xsetinfo wcs_gravity 0.7|es_xsetinfo wcs_gravity 0.6"
"skill3_cmd" "es_delayed 2 est_SetGravity event_var(userid) server_var(wcs_gravity);es_keysetvalue wcs_gravity event_var(userid) server_var(wcs_gravity);es_tell event_var(userid) Your levitation has been set."
"skill3_sfx" "es_getplayerlocation wcs_x1 wcs_y1 wcs_z1 event_var(userid);es_xmath wcs_z1 + 20;es est_Effect 10 #a 0 sprites/lgtning.vmt server_var(wcs_x1) server_var(wcs_y1) server_var(wcs_z1) 20 50 2 60 100 0.8 0 20 100 255 1"
"skill4_setting" "es_xrand wcs_rand 1 7;es_xsetinfo wcs_magnitude 12;es_xsetinfo wcs_radius 100|es_xrand wcs_rand 1 8;es_xsetinfo wcs_magnitude 15;es_xsetinfo wcs_radius 100|es_xrand wcs_rand 1 9;es_xsetinfo wcs_magnitude 18;es_xsetinfo wcs_radius 100|es_xrand wcs_rand 1 10;es_xsetinfo wcs_magnitude 21;es_xsetinfo wcs_radius 100"
"skill4_cmd" "if (server_var(wcs_rand) = 1) then es wcs_explode event_var(attacker) event_var(userid) server_var(wcs_magnitude) server_var(wcs_radius);if (server_var(wcs_rand) = 1) then es_tell event_var(attacker) Satan's Wrath strikes event_var(es_username).;if (server_var(wcs_rand) = 1) then es_tell event_var(userid) event_var(es_attackername) strikes you with Satan's Wrath."
"skill4_sfx" "if (server_var(wcs_rand) = 1) then es est_effect 4 #a 0 sprites/steam1.vmt event_var(userid) 0.8 10 5 1 255 100 100 255"
}You see, its alot more flexible and smaller, compare ~10000 bytes vs ~4400 bytes of code
(and this races do the same !)New features compared with the v2.0.x format
- * removed useless roundstart/end command
* selectable
* skill names and description in one line ! Its really better if you wanna make a local language version of a race
* skill configs in one line, new is player_death (f.ex. suicide bomber or respawn skills)
* skill settings (variables how strong the effect is) in one line !
* only ONE command line is required ! No more copy&paste 4 times the same code
* also, only one effects code line, all parameters can be set in skill_setting
* UNLIMITED skills support ! But ok....dont use more than 8 skills, because of the selection menu is no multipage yet.....
* UNLIMITED levels support ! But.....you cannot use more than 1024 characters in a line....this is the limitation from Eventscripts. A good thing: 4 level for this Undead race need only 230 characters (means that you can make Undead with 16 levels :shock:)[/list]
Code: [Select]
// "number" // unique ID !!
// {
// "name" "race name" // The name of the race, keep it short
// "preloadcmd" "code" // The commands executed on start, eg. used to create variables
// "numberofskills" "number" // How many skills does this race have ?
// "numberoflevels" "number" // Until which level can players go ?
// "skillnames" "name1|name2|..." // the name of the skills, divided by |
// "skilldescr" "text1|text2|..." // description of the skills, divided by |
// "skillcfg" "cfg1|cfg2|..." // The config it checks on, divided by |, valid are: player_death, player_attacker, player_victim, player_spawn, player_say
// "skill1_setting" "set1|set2|..." // Setting for each skill, used for set variables/skill strength
// "skill1_cmd" "code" // Code to execute for skill 1
// "skill1_sfx" "code" // Effects code to execute for skill 1
// "skill2_setting" "set1|set2|..." // Setting for each skill, used for set variables/skill strength
// "skill2_cmd" "code" // Code to execute for skill 2
// "skill2_sfx" "code" // Effects code to execute for skill 2
// "skill3_setting" "set1|set2|..." // Setting for each skill, used for set variables/skill strength
// "skill3_cmd" "code" // Code to execute for skill 3
// "skill3_sfx" "code" // Effects code to execute for skill 3
// "skill4_setting" "set1|set2|..." // Setting for each skill, used for set variables/skill strength
// "skill4_cmd" "code" // Code to execute for skill 4
// "skill4_sfx" "code" // Effects to execute for skill 4
// "ultimate_cooldown" "time" // Cooldow time for the LAST skill (if setting is player_ultimate) should be > 0 !
// }This post will be continiued with more info about how to make a race...



