"19"
{
"name" "Lantresor, Blade Master"
"author" "Polis"
"required_level" "0"
"maximum_level" "0"
"allow_only" "0"
"teamlimit" "2"
"restrict_shop" ""
"preloadcmd" ""
"player_spawn_cmd" "es es_xkeysetvalue WCSuserdata event_var(userid) restricted <all>;es es_xdelayed 0.5 est_removeweapon event_var(userid) 1;es es_xdelayed 0.6 est_removeweapon event_var(userid) 2;es es_xdelayed 1.1 est_RestrictAll event_var(userid);racealias_fpr_css"
"racealias_fpr_css" "es es_xdelayed 1.4 est_unrestrict event_var(userid) weapon_knife;es es_xdelayed 1.5 est_unrestrict event_var(userid) weapon_c4;es es_xdelayed 1.6 est_unrestrict event_var(userid) weapon_hegrenade;es es_xdelayed 1.7 est_unrestrict event_var(userid) weapon_smokegrenade;es es_xdelayed 1.8 est_unrestrict event_var(userid) weapon_flashbang;es es_xdelayed 1.9 es_give event_var(userid) weapon_knife"
"round_start_cmd" "0"
"round_end_cmd" "0"
"numberofskills" "4"
"numberoflevels" "6"
"skillnames" "Wind Walk|Mirror Image|Critical Strike|Blade Storm"
"skilldescr" "Increase Speed and become invisible for a time (attacking will \ndispel speed and invis).<ability2>|Create Mirror Images of yourself and dispel status effects.<ability3>|Do bonus damage.|Become a Whirlwind of Death."
"skillcfg" "player_ability2|player_ability3|player_attacker|player_ultimate"
"skill1_setting" "es_xset time 3|es_xset time 4|es_xset time 5|es_xset time 6|es_xset time 8|es_xset time 10"
"skill1_cmd" "es wcs_windwalk1 server_var(time)"
"skill1_sfx" ""
"ability2_cooldown" "25"
"skill2_setting" "es_xset wcs_mtime 1|es_xset wcs_mtime 2|es_xset wcs_mtime 2|es_xset wcs_mtime 3|es_xset wcs_mtime 3|es_xset wcs_mtime 4"
"skill2_cmd" "es wcs_mirrorimage1 server_var(wcs_mtime);es est_playplayer server_var(wcs_userid) wcs1\mirrorimage.wav"
"skill2_sfx" ""
"ability3_cooldown" "5"
"skill3_setting" "es_xset wcs_multiplier 0.3|es_xset wcs_multiplier 0.4|es_xset wcs_multiplier 0.5|es_xset wcs_multiplier 0.6|es_xset wcs_multiplier 0.7|es_xset wcs_multiplier 0.8"
"racealias_bm1" "es_xset name1 0;es_xset name2 0;es est_getname name1 event_var(attacker);es est_getname name2 event_var(userid);es_set wcs_dmg event_var(dmg_health);es_xmath wcs_dmg float;es_math wcs_dmg * server_var(wcs_multiplier);es est_RoundDecimal wcs_dmg server_var(wcs_dmg) 0;es wcs_dealdamage event_var(attacker) event_var(userid) server_var(wcs_dmg);es_tell event_var(attacker) #multi #lightgreenYou have Critically Striked#green server_var(name2) #lightgreenfor#green server_var(wcs_dmg) #lightgreendamage!;es_tell server_var(userid) #multi #green server_var(name1) 3lightgreenhas Critically Striked you for#green server_var(wcs_dmg) #lightgreendamage!"
"skill3_cmd" "if (server_var(wcs_dice) <= 45) then est_IsAlive wcs_alive event_var(userid);if (server_var(wcs_dice) <= 45) then es_xif (server_var(wcs_alive) = 1) then racealias_bm1"
"skill3_sfx" ""
"skill4_setting" "es_xset wcs_radius 75;es_xset wcs_time 10;es_xset wcs_bdmg 5|es_xset wcs_radius 75;es_xset wcs_time 10;es_xset wcs_bdmg 10|es_xset wcs_radius 75;es_xset wcs_time 10;es_xset wcs_bdmg 10|es_xset wcs_radius 100;es_xset wcs_time 10;es_xset wcs_bdmg 10|es_xset wcs_radius 125;es_xset wcs_time 10;es_xset wcs_bdmg 15|es_xset wcs_radius 150;es_xset wcs_time 10;es_xset wcs_bdmg 15"
"skill4_cmd" "es_tell server_var(wcs_userid) #multi #lightgreenYou have started a #greenBlade Storm#lightgreen for server_var(wcs_time) seconds!;es wcs_bladestorm server_var(wcs_userid) server_var(wcs_time) server_var(wcs_radius) server_var(wcs_bdmg) server_var(wcs_roundcounter)"
"skill4_sfx" ""
"ultimate_cooldown" "30"
}
Next, I usually like to get the events ect done. These are edited in the es_wcs.txt file. For Blade Master you must edit the player_hurt, player_spawn and add in a few other custom events (bomb defuse ect). First do a search for adminff and add es_xset wcs_wwchk 0 right below it. You will hopefully notice that I don't use es_xsetinfo..this is because it is redundant and is a throwback to old es versions. Anyways, onto the player_hurt event.
Do a search for player_hurt. It will take you to that event. Next look through the code for the hurt check then look down a bit more for the exists check. In 0.77 it looks like:
if (server_var(wcs_hurtcheck) = 1) do
{
es_exists ex key WCSuserdata event_var(attacker)
if (server_var(ex) = 1) do
{
It will look a little different in 0.75 however. Underneath the { paste the following lines of code:
es_keygetvalue wcs_wwchk WCSuserdata event_var(attacker) wwchk
if (server_var(wcs_wwchk) = 1) do
{
es wcs_removefx speed event_var(attacker)
es est_setplayercolor event_var(attacker) 255 255 255 255 1
es_keysetvalue WCSuserdata server_var(wcs_userid) wwchk 0
es_tell event_var(attacker) #multi #lightgreenAttacking someone while in Wind Walk has removed its effects!
}
In a nutshell this code checks to see if you are currently in wind walk and if you are it will remove the effects once you have hurt someone. It does this by checking the keyvalue set when initiating wind walk when you attack someone. If it is true it removes these effects and sets the keyvalue to 0.
Next we have the player_spawn code. All this does is creates keyvalue groups and sets them to 0 for later use. To find where to paste this code just do a search for event player_spawn and then look for the code resembling the following. Then copy and paste the code underneath the last instance of resembling code:
es_keysetvalue WCSuserdata event_var(userid) wwchk 0
es_keysetvalue WCSuserdata event_var(userid) mtime 0
es_keysetvalue WCSuserdata event_var(userid) immune 0
Finally, do a search for // <<<<<<<<<<<<<<<<< END EVENTS <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< and copy and paste the following code above it:
event bomb_begindefuse
{
es_keygetvalue wcs_wwchk WCSuserdata event_var(userid) wwchk
if (server_var(wcs_wwchk) = 1) do
{
es est_setplayercolor event_var(userid) 255 255 255 255 1
es_tell event_var(userid) #multi #greenAttempting to defuse the bomb has revealed you!
}
}
event bomb_beginplant
{
es_keygetvalue wcs_wwchk WCSuserdata event_var(userid) wwchk
if (server_var(wcs_wwchk) = 1) do
{
es est_setplayercolor event_var(userid) 255 255 255 255 1
es_tell event_var(userid) #multi #greenAttempting to plant the bomb has revealed you!
}
}
Thats all the es_wcs editing. Next we have to do the skills section. This is where the bulk of the custom code is. There is a lot of editing in this file as you are going to be creating ability2 and ability3 blocks and commands. First add the following code underneath if (server_var(ex) = 0) then es_xregsaycmd ability wcs/WCSfunctions/WCSskills/wcs_ability "Command for special abilities".
es_xexists ex clientcommand ability2
if (server_var(ex) = 0) then es_xregclientcmd ability2 wcs/WCSfunctions/WCSskills/wcs_ability2 "Command for special abilities"
es_xexists ex saycommand ability2
if (server_var(ex) = 0) then es_xregsaycmd ability2 wcs/WCSfunctions/WCSskills/wcs_ability2 "Command for special abilities"
es_xexists ex clientcommand ability3
if (server_var(ex) = 0) then es_xregclientcmd ability3 wcs/WCSfunctions/WCSskills/wcs_ability3 "Command for special abilities"
es_xexists ex saycommand ability3
This creates a check for the ability2 and ability3 commands then tells the script where to look for the code. Next look for
event wcs_ability
{
}
and underneath copy and paste
block wcs_ability2
{
es es_xif (server_var(wcs_debug) = 1) then profile begin ultimate
// its a command
es_xgetcmduserid wcs_userid
es es_xexists wcs_exists userid server_var(wcs_userid)
es_xsetinfo wcs_time2 0
es_xsetinfo wcs_curtime2 0
// prevent spectator running ultimate
es_xsetinfo wcs_dead "1"
es es_xgetplayerprop wcs_dead server_var(wcs_userid) "CCSPlayer.baseclass.pl.deadflag"
es es_xif (server_var(wcs_dead) = "1") then es_xsetinfo wcs_exists 0
es_xcopy wcs_ulti_allow wcs_gamestarted
//es es_xif (server_var(wcs_game) != server_var(wcs_game_css)) then es_xsetinfo wcs_ulti_allow 1
// check if its valid
es es_xif (server_var(wcs_exists) = "1") do
{
// check teams (T=2, CT=3), and ultimate protection in 30feet range
es es_xgetplayerteam wcs_team server_var(wcs_userid)
es es_xif (server_var(wcs_team) = 2) then es_xsetinfo wcs_team_targetn "#c!d"
es es_xif (server_var(wcs_team) = 3) then es_xsetinfo wcs_team_targetn "#t!d"
es est_PlayerCount wcs_tmp server_var(wcs_team_targetn)
es es_xif (server_var(wcs_tmp) > 0) then est_Near wcs_uid server_var(wcs_team_targetn) 300 server_var(wcs_userid) "es_xsetinfo wcs_tmp 0;es es_xkeygetvalue wcs_tmp WCSuserdata server_var(wcs_uid) ulti_immunity;es es_xif (server_var(wcs_tmp) = 1) then es_xsetinfo wcs_ulti_allow 0"
es es_xif (server_var(wcs_ulti_allow) = 1) do
{
// get a time
es est_uptime wcs_curtime2
es_xsetinfo wcs_abil2 0
es es_xkeygetvalue wcs_abil2 WCSuserdata server_var(wcs_userid) "abil2"
es es_xif (server_var(wcs_abil2) = 0) do
{
es es_xkeysetvalue "WCSuserdata" server_var(wcs_userid) "abil2" server_var(wcs_curtime2)
es es_xsetinfo wcs_abil2 server_var(wcs_time2)
}
es es_xmath wcs_time2 + server_var(wcs_curtime2)
es es_xmath wcs_time2 - server_var(wcs_abil2)
es_xsetinfo wcs_abil2delay 0
es_xsetinfo wcs_race 0
es es_xkeygetvalue wcs_race "WCSuserdata" server_var(wcs_userid) "race"
es es_xkeygetvalue wcs_abil2delay "WCSraces" server_var(wcs_race) "ability2_cooldown"
es es_xif (server_var(wcs_time2) >= server_var(wcs_abil2delay)) do
{
es_xsetinfo wcs_ultinotexec 0
// exec the skill
es wcs_checkskills server_var(wcs_userid) "player_ability2"
// check if ultimate fails
es es_xif (server_var(wcs_ultinotexec) = 0) then es_xkeysetvalue "WCSuserdata" server_var(wcs_userid) "abil2" server_var(wcs_curtime2)
}
es_xelse do
{
es es_xsetinfo wcs_diff server_var(wcs_abil2delay)
es es_xmath wcs_diff - server_var(wcs_time2)
wcs_getlanguage "wcs_lng" "wcs_lng_cooldownabil"
es es_xformat wcs_text server_var(wcs_lng) server_var(wcs_abil2delay) server_var(wcs_diff)
es_tell server_var(wcs_userid) #multi server_var(wcs_text)
}
}
es_xelse do
{
wcs_getlanguage "wcs_lng" "wcs_lng_abilnotnow"
es es_xtell server_var(wcs_userid) #multi server_var(wcs_lng)
}
}
es es_xif (server_var(wcs_debug) = 1) then profile end ultimate
}
block wcs_ability3
{
es es_xif (server_var(wcs_debug) = 1) then profile begin ultimate
// its a command
es_xgetcmduserid wcs_userid
es es_xexists wcs_exists userid server_var(wcs_userid)
es_xsetinfo wcs_time3 0
es_xsetinfo wcs_curtime3 0
// prevent spectator running ultimate
es_xsetinfo wcs_dead "1"
es es_xgetplayerprop wcs_dead server_var(wcs_userid) "CCSPlayer.baseclass.pl.deadflag"
es es_xif (server_var(wcs_dead) = "1") then es_xsetinfo wcs_exists 0
es_xcopy wcs_ulti_allow wcs_gamestarted
//es es_xif (server_var(wcs_game) != server_var(wcs_game_css)) then es_xsetinfo wcs_ulti_allow 1
// check if its valid
es es_xif (server_var(wcs_exists) = "1") do
{
// check teams (T=2, CT=3), and ultimate protection in 30feet range
es es_xgetplayerteam wcs_team server_var(wcs_userid)
es es_xif (server_var(wcs_team) = 2) then es_xsetinfo wcs_team_targetn "#c!d"
es es_xif (server_var(wcs_team) = 3) then es_xsetinfo wcs_team_targetn "#t!d"
es est_PlayerCount wcs_tmp server_var(wcs_team_targetn)
es es_xif (server_var(wcs_tmp) > 0) then est_Near wcs_uid server_var(wcs_team_targetn) 300 server_var(wcs_userid) "es_xsetinfo wcs_tmp 0;es es_xkeygetvalue wcs_tmp WCSuserdata server_var(wcs_uid) ulti_immunity;es es_xif (server_var(wcs_tmp) = 1) then es_xsetinfo wcs_ulti_allow 0"
es es_xif (server_var(wcs_ulti_allow) = 1) do
{
// get a time
es est_uptime wcs_curtime3
es_xsetinfo wcs_abil3 0
es es_xkeygetvalue wcs_abil3 WCSuserdata server_var(wcs_userid) "abil3"
es es_xif (server_var(wcs_abil3) = 0) do
{
es es_xkeysetvalue "WCSuserdata" server_var(wcs_userid) "abil3" server_var(wcs_curtime3)
es es_xsetinfo wcs_abil3 server_var(wcs_time3)
}
es es_xmath wcs_time3 + server_var(wcs_curtime3)
es es_xmath wcs_time3 - server_var(wcs_abil3)
es_xsetinfo wcs_abil3delay 0
es_xsetinfo wcs_race 0
es es_xkeygetvalue wcs_race "WCSuserdata" server_var(wcs_userid) "race"
es es_xkeygetvalue wcs_abil3delay "WCSraces" server_var(wcs_race) "ability3_cooldown"
es es_xif (server_var(wcs_time3) >= server_var(wcs_abil3delay)) do
{
es_xsetinfo wcs_ultinotexec 0
// exec the skill
es wcs_checkskills server_var(wcs_userid) "player_ability3"
// check if ultimate fails
es es_xif (server_var(wcs_ultinotexec) = 0) then es_xkeysetvalue "WCSuserdata" server_var(wcs_userid) "abil3" server_var(wcs_curtime3)
}
es_xelse do
{
es es_xsetinfo wcs_diff server_var(wcs_abil3delay)
es es_xmath wcs_diff - server_var(wcs_time3)
wcs_getlanguage "wcs_lng" "wcs_lng_cooldownabil"
es es_xformat wcs_text server_var(wcs_lng) server_var(wcs_abil3delay) server_var(wcs_diff)
es_tell server_var(wcs_userid) #multi server_var(wcs_text)
}
}
es_xelse do
{
wcs_getlanguage "wcs_lng" "wcs_lng_abilnotnow"
es es_xtell server_var(wcs_userid) #multi server_var(wcs_lng)
}
}
es es_xif (server_var(wcs_debug) = 1) then profile end ultimate
}
Then do a search for player_death player_kill player_attacker player_victim player_spawn player_say player_ultimate player_ability. This is located in the checkskills block. It is what checks the race file for player_attacker ect. this enables you to put something like player_ability2 in your race. You will want the end result to look like this:
if (server_var(wcs_checkskill) in "player_death player_kill player_attacker player_victim player_spawn player_say player_ultimate player_ability player_ability2 player_ability3") do
Thats it for the skills portion. Next onto wcs_ultimates.txt. Next you want to add the following code into anywhere in the block load at the start of the file.
es_xexists ex command wcs_bladestorm
if (server_var(ex) = 0) then es_xregcmd wcs_bladestorm wcs/WCSultimates/wcs_bladestorm ""
es_xexists ex command wcs_windwalk1
if (server_var(ex) = 0) then es_xregcmd wcs_windwalk1 wcs/WCSultimates/wcs_windwalk1 ""
es_xexists ex command wcs_mirrorimage1
if (server_var(ex) = 0) then es_xregcmd wcs_mirrorimage1 wcs/WCSultimates/wcs_mirrorimage1 ""
These create the commands used in the actual race portion (ex. es wcs_windwalk1 server_var(wcs_time) as mentioned earlier) and directs to where to find the actual code. Next at the bottom of your ultimates file add:
block wcs_windwalk1
{
es_xset wcs_time 0
es_xgetargv wcs_time 1
es_getplayerlocation wcs_x2 wcs_y2 wcs_z2 server_var(wcs_userid)
es est_effect 10 #a 0 sprites/lgtning.vmt server_var(wcs_x2) server_var(wcs_y2) server_var(wcs_z2) 20 80 2.6 20 500 0 54 66 120 100 10
es_xmath wcs_z2 + 20
es est_effect 10 #a 0.1 sprites/lgtning.vmt server_var(wcs_x2) server_var(wcs_y2) server_var(wcs_z2) 40 100 2.4 20 500 0 54 66 120 100 10
es_xmath wcs_z2 + 20
es est_effect 10 #a 0.2 sprites/lgtning.vmt server_var(wcs_x2) server_var(wcs_y2) server_var(wcs_z2) 60 120 2.2 20 500 0 54 66 120 100 10
es_xmath wcs_z2 + 20
es est_effect 10 #a 0.3 sprites/lgtning.vmt server_var(wcs_x2) server_var(wcs_y2) server_var(wcs_z2) 80 140 2 20 500 0 54 66 120 100 10
es_xmath wcs_z2 + 20
es est_effect 10 #a 0.4 sprites/lgtning.vmt server_var(wcs_x2) server_var(wcs_y2) server_var(wcs_z2) 100 160 1.8 20 500 0 54 66 120 100 10
es_xmath wcs_z2 + 20
es est_effect 10 #a 0.5 sprites/lgtning.vmt server_var(wcs_x2) server_var(wcs_y2) server_var(wcs_z2) 120 180 1.6 20 500 0 54 66 120 100 10
es_xmath wcs_z2 + 20
es est_effect 10 #a 0.6 sprites/lgtning.vmt server_var(wcs_x2) server_var(wcs_y2) server_var(wcs_z2) 140 200 1.4 20 500 0 54 66 120 100 10
es_xmath wcs_z2 + 20
es est_effect 10 #a 0.7 sprites/lgtning.vmt server_var(wcs_x2) server_var(wcs_y2) server_var(wcs_z2) 160 220 1.2 20 500 0 54 66 120 100 10
es_xmath wcs_z2 + 20
es est_effect 10 #a 0.8 sprites/lgtning.vmt server_var(wcs_x2) server_var(wcs_y2) server_var(wcs_z2) 180 240 1 20 500 0 54 66 120 100 10
es est_playplayer server_var(wcs_userid) wcs1\windwalk.wav
es_keysetvalue WCSuserdata server_var(wcs_userid) wwchk 1
es_tell server_var(wcs_userid) #multi #lightgreenYou have activated #greenWind Walk#lightgreen for#green server_var(wcs_time) #lightgreenseconds!.
es est_speed server_var(wcs_userid) 2.2
es est_setplayercolor server_var(wcs_userid) 255 255 255 0 1
es_delayed server_var(wcs_time) wcs_removefx speed server_var(wcs_userid)
es_delayed server_var(wcs_time) est_setplayercolor server_var(wcs_userid) 255 255 255 255 1
es_delayed server_var(wcs_time) es_keysetvalue WCSuserdata server_var(wcs_userid) wwchk 0
}
block wcs_mirrorimage1
{
es_xset wcs_mtime 0
es_xset usermodel 0
es_xgetargv wcs_mtime 1
es wcs_removefx freeze server_var(wcs_userid)
es est_getteam wcs_tmp server_var(wcs_userid)
if (server_var(wcs_tmp) = 2) then es_xset usermodel models/player/t_phoenix.mdl
if (server_var(wcs_tmp) = 3) then es_xset usermodel models/player/ct_urban.mdl
es_getplayerlocation wcs_x2 wcs_y2 wcs_z2 server_var(wcs_userid)
es est_effect 7 #a 0 sprites/smoke.vmt server_var(wcs_x2) server_var(wcs_y2) server_var(wcs_z2) 40 1
es est_effect 11 #a 0 server_var(usermodel) server_var(wcs_x2) server_var(wcs_y2) server_var(wcs_z2) server_var(wcs_mtime) 1 255
es_xmath wcs_y2 + 30
es est_effect 11 #a 0.1 server_var(usermodel) server_var(wcs_x2) server_var(wcs_y2) server_var(wcs_z2) server_var(wcs_mtime) 1 100
es_xmath wcs_y2 + 30
es est_effect 11 #a 0.2 server_var(usermodel) server_var(wcs_x2) server_var(wcs_y2) server_var(wcs_z2) server_var(wcs_mtime) 1 200
es_xmath wcs_y2 - 30
es est_effect 11 #a 0 server_var(usermodel) server_var(wcs_x2) server_var(wcs_y2) server_var(wcs_z2) server_var(wcs_mtime) 1 55
es_xmath wcs_y2 - 30
es est_effect 11 #a 0.1 server_var(usermodel) server_var(wcs_x2) server_var(wcs_y2) server_var(wcs_z2) server_var(wcs_mtime) 1 100
es_xmath wcs_y2 - 30
es est_effect 11 #a 0.2 server_var(usermodel) server_var(wcs_x2) server_var(wcs_y2) server_var(wcs_z2) server_var(wcs_mtime) 1 200
es_xmath wcs_y2 + 50
es_xmath wcs_x2 + 30
es est_effect 11 #a 0.1 server_var(usermodel) server_var(wcs_x2) server_var(wcs_y2) server_var(wcs_z2) server_var(wcs_mtime) 1 55
es_xmath wcs_x2 + 30
es est_effect 11 #a 0.2 server_var(usermodel) server_var(wcs_x2) server_var(wcs_y2) server_var(wcs_z2) server_var(wcs_mtime) 1 200
es_xmath wcs_x2 + 30
es_xmath wcs_x2 - 120
es est_effect 11 #a 0.1 server_var(usermodel) server_var(wcs_x2) server_var(wcs_y2) server_var(wcs_z2) server_var(wcs_mtime) 1 55
es_xmath wcs_x2 - 30
es_keysetvalue WCSuserdata server_var(wcs_userid) immune 1
es_delayed server_var(wcs_mtime) es_keysetvalue WCSuserdata server_var(wcs_target) immune 0
es_tell server_var(wcs_userid) #multi #lightgreenYou cast #greenMirror Image!
}
You may notice keyvalue creation for immune. This can be used in conjunction with damage over time skills ect. Do a check for while immune is = 1 and if true stop the skill.
Finally do a search for the following code in wcs_language_db. Make sure you edit this in a utf-8 compatible text editor (aka not notepad).
"wcs_lng_cooldown" "#lightgreenYou cannot use your ultimate ! Cooldown time is #green%1 #lightgreenseconds, #green%2 left"
and copy and paste the following
"wcs_lng_cooldownabil" "#lightgreenYou cannot use your ability! Cooldown time is #green%1 #lightgreenseconds, #green%2 left"
Instructions are horrible, I know.