Hier meine Config:
Habe schon mit dem Teambalancer rumgespielt aber ohne erfolg.
// es_ytb.txt
// mrYoung Team Balancer (yTB) by mRyOuNg
/// Most ideas are from Eric Team Balancer (ETB)
// Installation instructions
// : Create a directory ytb in cstrike/addons/eventscripts
// : Put this script in this directory as es_ytb.txt
// : add - es_load corelib - in autoexec.cfg (if not already done)
// : add - es_load ytb - in autoexec.cfg
// : Go to "ytb_conf" block, and set your values
// : Requirements :
// : Mattie EventScripts including CoreLib
// : ES Tools
// --- Configuration
block ytb_conf
{
/// ytb_algorithm - Algorithm to use to compute difference
// 0 means minus computing (player score = kills - deaths) - original ETB algorithm
// 1 means k/d ratio computing (player score = kills / deaths)
es_xsetinfo ytb_algorithm 0
/// ytb_difference - Minimum advantage difference between rounds for a switch to occur. (depends on ytb_algorithm)
// 10 is a good value for minus computing (ytb_algorithm = 0) - original ETB default is 6
// 4 is a good value for k/d ratio computing (ytb_algorithm = 1)
es_xsetinfo ytb_difference 10
/// ytb_rounds - Minimum number of rounds between switchs
// default value: every 2 rounds, a switch can occurs (if required) - original ETB default is 2
es_xsetinfo ytb_rounds 2
/// ytb_lostrounds - Number of losts round in a row, to allow disadvantage of winning team
// A swap can't give advantage to the loosing team (by swapping a very good player - like a real pgm)
// until this number of rounds has been lost by the loosing team
// this feature doesn't exist in original ETB, to disable it, set it to server_var(mp_maxrounds)
es_xsetinfo ytb_lostrounds 3
/// ytb_onlyswapdead - Enable or Disable the "Only Swap Dead Player" feature
// If enabled (1), only swap dead players - original ETB can't swap alive player, so original ETB default is 1
// If disabled (0), swap dead and alive players
es_xsetinfo ytb_onlyswapdead 0
/// ytb_swapbots - enable or disable swapping of bot players
// If enabled (1), bots will be swapped like all other players
// if disabled (0), bots will never be swapped
es_xsetinfo ytb_swapbots 1
/// ytb_recently_swap_protection - Protect recently swapped players during the x next swap action taken
// 0 disable this feature
// x > 0, protect a player during the next x swap action taken
es_xsetinfo ytb_recently_swap_protection 3
/// ytb_nowarmupswap - disable swap during warmup
// 0 disable it
// > 0 enable it (should be equal to your mani_warmuptimer value)
es_xsetinfo ytb_nowarmupswap 90
/// ytb_godmode - enable god mode after swap
// to avoid people killing swapped player, all alive player will be set in god mode (unvulnerable)
// 0 disable, 1 enable (only useful if ytb_onlyswapdead is 0)
es_xsetinfo ytb_godmode 1
/// ytb_swappedreward - give a reward to swapped players
// specify the amount of money to give to swapped player (0 to disable it)
es_xsetinfo ytb_swappedreward 3000
}
// ---
block load
{ /// block load
// called at script loads
// versioning
es_xsetinfo ytb_ver 1.0r2
es_makepublic ytb_ver
// loading configuration
es_xdoblock ytb/ytb_conf
// creating players database
es_xsetinfo ytb_exists 0
es_xexists ytb_exists keygroup ytb_players
if (server_var(ytb_exists) equalto 1) then es_xkeygroupdelete ytb_players
es_xkeygroupcreate ytb_players
// creating players protection database
es_xsetinfo ytb_exists 0
es_xexists ytb_exists keygroup ytb_players_protection
if (server_var(ytb_exists) equalto 1) then es_xkeygroupdelete ytb_players_protection
es_xkeygroupcreate ytb_players_protection
// misc. var. init
es_xsetinfo ytb_current_roundcycle 0
es_xsetinfo ytb_ct_lost 0
es_xsetinfo ytb_t_lost 0
es_xsetinfo ytb_enable_status 1
es_xsetinfo ytb_godmode_enabled 1
}
block unload
{ /// block unload
// called at script unloads
// deleting players database
es_xsetinfo ytb_exists 0
es_xexists ytb_exists keygroup ytb_players
if (server_var(ytb_exists) equalto 1) then es_xkeygroupdelete ytb_players
// deleting players protection database
es_xsetinfo ytb_exists 0
es_xexists ytb_exists keygroup ytb_players_protection
if (server_var(ytb_exists) equalto 1) then es_xkeygroupdelete ytb_players_protection
}
event es_map_start
{ /// event es_map_start
// called when the map starts
// creating players database
es_xsetinfo ytb_exists 0
es_xexists ytb_exists keygroup ytb_players
if (server_var(ytb_exists) equalto 1) then es_xkeygroupdelete ytb_players
es_xkeygroupcreate ytb_players
// creating players protection database
es_xsetinfo ytb_exists 0
es_xexists ytb_exists keygroup ytb_players_protection
if (server_var(ytb_exists) equalto 1) then es_xkeygroupdelete ytb_players_protection
es_xkeygroupcreate ytb_players_protection
// misc. var. init
es_xsetinfo ytb_current_roundcycle 0
es_xsetinfo ytb_ct_lost 0
es_xsetinfo ytb_t_lost 0
es_xsetinfo ytb_enable_status 0
es_xsetinfo ytb_godmode_enabled 1
// nowarmuptimer
es_delayed server_var(ytb_nowarmupswap) es_xdoblock ytb/ytb_enable
}
event player_disconnect
{ /// event player_disconnect
// called when a player disconnects
// deleting user's database entry
es_xsetinfo ytb_exists 0
es_exists ytb_exists key ytb_players event_var(userid)
if (server_var(ytb_exists) equalto 1) then es_keydelete ytb_players event_var(userid)
// deleting user's protection database entry
es_xsetinfo ytb_exists 0
es_exists ytb_exists key ytb_players_protection event_var(userid)
if (server_var(ytb_exists) equalto 1) then es_keydelete ytb_players_protection event_var(userid)
}
event round_start
{ /// event round_start
// called when the round starts
// computing balance
es_xdoblock ytb/ytb_compute_balance
// displaying balance
es_xdoblock ytb/ytb_show_balance
// disabling god mode (if enabled)
if (server_var(ytb_godmode_enabled) equalto 1) do
{
es_xsetinfo ytb_godmode_enabled 0
foreach player ytb_godmode_id #alive "es_xdoblock ytb/ytb_godmode_off"
}
}
event round_end
{ /// event round_end
// called when round ends
// computing balance
es_xdoblock ytb/ytb_compute_balance
// compute lost rounds
if (event_var(winner) == "2") do
{ // t wins
es_math ytb_ct_lost + 1
es_xsetinfo ytb_t_lost 0
}
else do
{
if (event_var(winner) == "3") do
{ // ct wins
es_math ytb_t_lost + 1
es_xsetinfo ytb_ct_lost 0
}
}
// checking difference, and calling swap function if necessary
es_math ytb_current_roundcycle + 1
if (server_var(ytb_current_roundcycle) equalto server_var(ytb_rounds)) do
{
if (server_var(ytb_current_difference) greaterthan server_var(ytb_difference)) do
{
if (server_var(ytb_enable_status) equalto 1) do
{
es_xdoblock ytb/ytb_swap
}
}
es_xsetinfo ytb_current_roundcycle 0
}
}
block ytb_compute_balance
{ /// block ytb_compute_balance
// compute balance_status, and current_difference
// computing ct score
es_xsetinfo ytb_ct_score 0
es_xmath ytb_ct_score float
es_xsetinfo ytb_current_player_id 0
foreach player ytb_current_player_id #ct "es_xdoblock ytb/ytb_compute_ct_score"
// computing t score
es_xsetinfo ytb_t_score 0
es_xmath ytb_t_score float
es_xsetinfo ytb_current_player_id 0
foreach player ytb_current_player_id #t "es_xdoblock ytb/ytb_compute_t_score"
// computing balance_status, and current_difference
es_xsetinfo ytb_balance_status 0
es_xsetinfo ytb_current_difference 0
es_xmath ytb_current_difference float
if (server_var(ytb_ct_score) equalto server_var(ytb_t_score)) do
{
es_xsetinfo ytb_balance_status 0
es_xsetinfo ytb_current_difference 0
}
else do
{
if (server_var(ytb_ct_score) greaterthan server_var(ytb_t_score)) do
{
es_xsetinfo ytb_balance_status 1
es_math ytb_current_difference + server_var(ytb_ct_score)
es_math ytb_current_difference - server_var(ytb_t_score)
}
else do
{
es_xsetinfo ytb_balance_status 2
es_math ytb_current_difference + server_var(ytb_t_score)
es_math ytb_current_difference - server_var(ytb_ct_score)
}
}
}
block ytb_compute_ct_score
{ /// block ytb_compute_ct_score
// called to compute ct score
// getting current player score
es_xsetinfo ytb_current_player_kills 0
es_xsetinfo ytb_current_player_deaths 0
es est_GetKills ytb_current_player_kills server_var(ytb_current_player_id)
es est_GetDeaths ytb_current_player_deaths server_var(ytb_current_player_id)
es_xsetinfo ytb_current_player_score 0
if (server_var(ytb_algorithm) equalto 0) do
{ // minus algorithm
es_math ytb_current_player_score + server_var(ytb_current_player_kills)
es_math ytb_current_player_score - server_var(ytb_current_player_deaths)
}
else do
{
if (server_var(ytb_algorithm) equalto 1) do
{ // k/d ratio algorithm
if (server_var(ytb_current_player_kills) < 1) then es_xsetinfo ytb_current_player_kills 0
if (server_var(ytb_current_player_deaths) < 1) then es_xsetinfo ytb_current_player_deaths 1
es_mathparse ytb_current_player_score "ytb_current_player_kills / ytb_current_player_deaths"
}
}
// getting current player alive status
es_xsetinfo ytb_alive 0
es est_IsAlive ytb_alive server_var(ytb_current_player_id)
// storing current player kills/deaths into database
es_xsetinfo ytb_exists 0
es_exists ytb_exists key ytb_players server_var(ytb_current_player_id)
if (server_var(ytb_exists) equalto 0) then es_keycreate ytb_players server_var(ytb_current_player_id)
es_keysetvalue ytb_players server_var(ytb_current_player_id) current_score server_var(ytb_current_player_score)
es_keysetvalue ytb_players server_var(ytb_current_player_id) alive_status server_var(ytb_alive)
// adding player score to team score
es_math ytb_ct_score + server_var(ytb_current_player_score)
}
block ytb_compute_t_score
{ /// block ytb_compute_t_score
// called to compute t score
// getting current player score
es_xsetinfo ytb_current_player_kills 0
es_xsetinfo ytb_current_player_deaths 0
es est_GetKills ytb_current_player_kills server_var(ytb_current_player_id)
es est_GetDeaths ytb_current_player_deaths server_var(ytb_current_player_id)
es_xsetinfo ytb_current_player_score 0
if (server_var(ytb_algorithm) equalto 0) do
{ // minus algorithm
es_math ytb_current_player_score + server_var(ytb_current_player_kills)
es_math ytb_current_player_score - server_var(ytb_current_player_deaths)
}
else do
{
if (server_var(ytb_algorithm) equalto 1) do
{ // k/d ratio algorithm
if (server_var(ytb_current_player_kills) < 1) then es_xsetinfo ytb_current_player_kills 0
if (server_var(ytb_current_player_deaths) < 1) then es_xsetinfo ytb_current_player_deaths 1
es_mathparse ytb_current_player_score "ytb_current_player_kills / ytb_current_player_deaths"
}
}
// getting current player alive status
es_xsetinfo ytb_alive 0
es est_IsAlive ytb_alive server_var(ytb_current_player_id)
// storing current player kills/deaths into database
es_xsetinfo ytb_exists 0
es_exists ytb_exists key ytb_players server_var(ytb_current_player_id)
if (server_var(ytb_exists) equalto 0) then es_keycreate ytb_players server_var(ytb_current_player_id)
es_keysetvalue ytb_players server_var(ytb_current_player_id) current_score server_var(ytb_current_player_score)
es_keysetvalue ytb_players server_var(ytb_current_player_id) alive_status server_var(ytb_alive)
// adding player score to team score
es_math ytb_t_score + server_var(ytb_current_player_score)
}
block ytb_show_balance
{ /// block ytb_show_balance
// called to display balance status
if (server_var(ytb_balance_status) equalto 0) do
{
es_xmsg #multi #greenyTB: #defaultTeams are balanced.
}
else do
{
if (server_var(ytb_balance_status) equalto 1) do
{
es_xmsg #multi #greenyTB: #lightgreenCounter-Terrorists #defaulthave the advantage.
}
else do
{
es_xmsg #multi #greenyTB: #lightgreenTerrorists #defaulthave the advantage.
}
}
}
block ytb_swap
{ /// ytb_swap
// called when difference between teams reach the thresold
// misc. var. init
es_xsetinfo ytb_swap_status 0
es_xsetinfo ytb_swap_odd 0
es_xsetinfo ytb_swapped_ct_player 0
es_xsetinfo ytb_swapped_t_player 0
es_setinfo ytb_swap_difference server_var(ytb_current_difference)
// reseting swap_protection value
es_xsetinfo ytb_current_id 0
foreach player ytb_current_id #all "es_xdoblock ytb/ytb_swap_protection_reset"
// getting number of players from each team (useful with odd number of players)
es_xsetinfo ytb_ct_number 0
es_xgetplayercount ytb_ct_number 3
es_xsetinfo ytb_t_number 0
es_xgetplayercount ytb_t_number 2
if (server_var(ytb_ct_number) equalto server_var(ytb_t_number)) do
{ // teams have an even number of players, swapping 2 players
es_xsetinfo ytb_swap_odd 0
if (server_var(ytb_balance_status) equalto 1) do
{ // CT have the advantage
es_xsetinfo ytb_current_ct_id 0
foreach player ytb_current_ct_id #ct "es_xdoblock ytb/ytb_swap_search_ct"
}
else do
{ // T have the advantage
es_xsetinfo ytb_current_t_id 0
foreach player ytb_current_t_id #t "es_xdoblock ytb/ytb_swap_search_t"
}
}
else do
{ // teams are odd
if (server_var(ytb_ct_number) greaterthan server_var(ytb_t_number)) do
{ // CT have more players than T
if (server_var(ytb_balance_status) equalto 1) do
{ // CT have the advantage, we must try to swap a CT player to T team
es_xsetinfo ytb_swap_odd 1
es_xsetinfo ytb_current_ct_id 0
foreach player ytb_current_ct_id #ct "es_xdoblock ytb/ytb_swap_search_ct_only"
}
else do
{ // T have the advantage, swapping 2 players (we consider this as odd teams)
es_xsetinfo ytb_swap_odd 0
es_xsetinfo ytb_current_t_id 0
foreach player ytb_current_t_id #t "es_xdoblock ytb/ytb_swap_search_t"
}
}
else do
{ // T have more players than CT
if (server_var(ytb_balance_status) equalto 2) do
{ // T have the advantage, we must try to swap a T player to CT team
es_xsetinfo ytb_swap_odd 2
es_xsetinfo ytb_current_t_id 0
foreach player ytb_current_t_id #t "es_xdoblock ytb/ytb_swap_search_t_only"
}
else do
{ // CT have the advantage, swapping 2 players (we consider this as odd teams)
es_xsetinfo ytb_swap_odd 0
es_xsetinfo ytb_current_ct_id 0
foreach player ytb_current_ct_id #ct "es_xdoblock ytb/ytb_swap_search_ct"
}
}
}
if (server_var(ytb_swap_status) equalto 1) do
{ // ok, we found a way to swap ...
if (server_var(ytb_swap_odd) equalto 0) do
{ // Teams are even, 2 players swapped
// Swapping players
es est_Team server_var(ytb_swapped_ct_player) 2
es est_Team server_var(ytb_swapped_t_player) 3
es est_CashAdd server_var(ytb_swapped_ct_player) server_var(ytb_swappedreward)
es est_CashAdd server_var(ytb_swapped_t_player) server_var(ytb_swappedreward)
es_tell server_var(ytb_swapped_ct_player) #multi #greenyTB: #defaultYou have been swapped to #lightgreenTerrorists #defaultteam.
es_tell server_var(ytb_swapped_ct_player) #multi #greenyTB: #defaultYou have been rewarded of#lightgreen server_var(ytb_swappedreward) $#default for being swapped.
es_xsetinfo ytb_swapped_ct_player_name 0 // getting player name
es_getplayername ytb_swapped_ct_player_name server_var(ytb_swapped_ct_player)
es_msg #multi #greenyTB: #defaultSwapped#lightgreen server_var(ytb_swapped_ct_player_name) #defaultto #lightgreenTerrorists #defaultteam.
es_tell server_var(ytb_swapped_t_player) #multi #greenyTB: #defaultYou have been swapped to #lightgreenCounter-Terrorists #defaultteam.
es_tell server_var(ytb_swapped_t_player) #multi #greenyTB: #defaultYou have been rewarded of#lightgreen server_var(ytb_swappedreward) $#default for being swapped.
es_xsetinfo ytb_swapped_t_player_name 0 // getting player name
es_getplayername ytb_swapped_t_player_name server_var(ytb_swapped_t_player)
es_msg #multi #greenyTB: #defaultSwapped#lightgreen server_var(ytb_swapped_t_player_name) #defaultto #lightgreenCounter-Terrorists #defaultteam.
// Managing player protection
es_keycreate ytb_players_protection server_var(ytb_swapped_ct_player)
es_keysetvalue ytb_players_protection server_var(ytb_swapped_ct_player) swap_protection_left server_var(ytb_recently_swap_protection)
es_keycreate ytb_players_protection server_var(ytb_swapped_t_player)
es_keysetvalue ytb_players_protection server_var(ytb_swapped_t_player) swap_protection_left server_var(ytb_recently_swap_protection)
}
else do
{ // Teams are odd
if (server_var(ytb_swap_odd) equalto 1) do
{ // a CT player should be swapped
es est_Team server_var(ytb_swapped_ct_player) 2 // Swapping player
es est_CashAdd server_var(ytb_swapped_ct_player) server_var(ytb_swappedreward)
es_tell server_var(ytb_swapped_ct_player) #multi #greenyTB: #defaultYou have been swapped to #lightgreenTerrorists #defaultteam.
es_tell server_var(ytb_swapped_ct_player) #multi #greenyTB: #defaultYou have been rewarded of#lightgreen server_var(ytb_swappedreward) $#default for being swapped.
es_xsetinfo ytb_swapped_ct_player_name 0 // getting player name
es_getplayername ytb_swapped_ct_player_name server_var(ytb_swapped_ct_player)
es_msg #multi #greenyTB: #defaultSwapped#lightgreen server_var(ytb_swapped_ct_player_name) #defaultto #lightgreenTerrorists #defaultteam.
// Managing player protection
es_keycreate ytb_players_protection server_var(ytb_swapped_ct_player)
es_keysetvalue ytb_players_protection server_var(ytb_swapped_ct_player) swap_protection_left server_var(ytb_recently_swap_protection)
}
else do
{ // a T player should be swapped
es est_Team server_var(ytb_swapped_t_player) 3 // Swapping player
es est_CashAdd server_var(ytb_swapped_t_player) server_var(ytb_swappedreward)
es_tell server_var(ytb_swapped_t_player) #multi #greenyTB: #defaultYou have been swapped to #lightgreenCounter-Terrorists #defaultteam.
es_tell server_var(ytb_swapped_t_player) #multi #greenyTB: #defaultYou have been rewarded of#lightgreen server_var(ytb_swappedreward) $#default for being swapped.
es_xsetinfo ytb_swapped_t_player_name 0 // getting player name
es_getplayername ytb_swapped_t_player_name server_var(ytb_swapped_t_player)
es_msg #multi #greenyTB: #defaultSwapped#lightgreen server_var(ytb_swapped_t_player_name) #defaultto #lightgreenCounter-Terrorists #defaultteam.
// Managing player protection
es_keycreate ytb_players_protection server_var(ytb_swapped_t_player)
es_keysetvalue ytb_players_protection server_var(ytb_swapped_t_player) swap_protection_left server_var(ytb_recently_swap_protection)
}
}
// god mode
if (server_var(ytb_godmode) equalto 1) do
{
es_xsetinfo ytb_godmode_enabled 1
foreach player ytb_godmode_id #alive "es_xdoblock ytb/ytb_godmode_on"
}
}
else do
{ // Unable to find a fair swap
es_xmsg #multi #greenyTB: #defaultUnable to balance teams.
}
es_xsetinfo ytb_swap_status 0
es_xsetinfo ytb_swap_odd 0
es_xsetinfo ytb_swapped_ct_player 0
es_xsetinfo ytb_swapped_t_player 0
es_xsetinfo ytb_swap_difference 0
}
block ytb_swap_search_ct
{ /// ytb_swap_search_ct
// Called when teams are even, and CT have the advantage
es_xsetinfo ytb_current_ct_mustbechecked 0
if (server_var(ytb_onlyswapdead) equalto 1) do
{ // if "onlyswapdead" feature is enabled
es_xsetinfo ytb_alive 0
es_keygetvalue ytb_alive ytb_players server_var(ytb_current_ct_id) alive_status
if (server_var(ytb_alive) equalto 0) do
{ // player is dead
es_xsetinfo ytb_current_ct_mustbechecked 1
}
else do
{ // player is alive
es_xsetinfo ytb_current_ct_mustbechecked 0
}
}
else do
{ // "onlyswapdead" feature is disabled
es_xsetinfo ytb_current_ct_mustbechecked 1
}
es_xsetinfo ytb_exists 0
es_exists ytb_exists key ytb_players_protection server_var(ytb_current_ct_id)
if (server_var(ytb_exists) equalto 1) do
{ // player is in protection database
es_xsetinfo ytb_current_ct_mustbechecked 0
}
if (server_var(ytb_swapbots) equalto 0) do
{ // don't swap bots feature
es_xsetinfo ytb_isbot 0
es_isbot ytb_isbot server_var(ytb_current_ct_id)
if (server_var(ytb_isbot) equalto 1) do
{ // current player is a bot
es_xsetinfo ytb_current_ct_mustbechecked 0
}
}
if (server_var(ytb_current_ct_mustbechecked) equalto 1) do
{ // if we can check the current player
// getting current ct score
es_xsetinfo ytb_current_ct_score 0
es_keygetvalue ytb_current_ct_score ytb_players server_var(ytb_current_ct_id) current_score
// computing new score for t and ct team
es_setinfo ytb_tmp_ct_ct_score server_var(ytb_ct_score)
es_setinfo ytb_tmp_ct_t_score server_var(ytb_t_score)
es_math ytb_tmp_ct_ct_score - server_var(ytb_current_ct_score)
es_math ytb_tmp_ct_t_score + server_var(ytb_current_ct_score)
// With this new scores, let's find a t player giving us a fair swap
es_xsetinfo ytb_current_t_id 0
foreach player ytb_current_t_id #t "es_xdoblock ytb/ytb_swap_search_ct_t"
}
}
block ytb_swap_search_ct_t
{ /// ytb_swap_search_ct_t
// Called by ytb_swap_search_ct to find a fair swap with the current ct player
es_xsetinfo ytb_current_t_mustbechecked 0
if (server_var(ytb_onlyswapdead) equalto 1) do
{ // if "onlyswapdead" feature is enabled
es_xsetinfo ytb_alive 0
es_keygetvalue ytb_alive ytb_players server_var(ytb_current_t_id) alive_status
if (server_var(ytb_alive) equalto 0) do
{ // player is dead
es_xsetinfo ytb_current_t_mustbechecked 1
}
else do
{ // player is alive
es_xsetinfo ytb_current_t_mustbechecked 0
}
}
else do
{ // "onlyswapdead" feature is disabled
es_xsetinfo ytb_current_t_mustbechecked 1
}
es_xsetinfo ytb_exists 0
es_exists ytb_exists key ytb_players_protection server_var(ytb_current_t_id)
if (server_var(ytb_exists) equalto 1) do
{ // player is in protection database
es_xsetinfo ytb_current_t_mustbechecked 0
}
if (server_var(ytb_swapbots) equalto 0) do
{ // don't swap bots feature
es_xsetinfo ytb_isbot 0
es_isbot ytb_isbot server_var(ytb_current_t_id)
if (server_var(ytb_isbot) equalto 1) do
{ // current player is a bot
es_xsetinfo ytb_current_t_mustbechecked 0
}
}
if (server_var(ytb_current_t_mustbechecked) equalto 1) do
{ // if we can check the current player
// getting current t score
es_xsetinfo ytb_current_t_score 0
es_keygetvalue ytb_current_t_score ytb_players server_var(ytb_current_t_id) current_score
// computing new score for ct and t team
es_setinfo ytb_tmp_ct_t_ct_score server_var(ytb_tmp_ct_ct_score)
es_setinfo ytb_tmp_ct_t_t_score server_var(ytb_tmp_ct_t_score)
es_math ytb_tmp_ct_t_t_score - server_var(ytb_current_t_score)
es_math ytb_tmp_ct_t_ct_score + server_var(ytb_current_t_score)
es_setinfo ytb_tmp_difference server_var(ytb_swap_difference)
if (server_var(ytb_tmp_ct_t_ct_score) lessthan server_var(ytb_tmp_ct_t_t_score)) do
{ // if this swap give advantage to T team
if (server_var(ytb_t_lost) >= server_var(ytb_lostrounds)) do
{ // if T lost x rounds in a row, we allow disadvantage of the winning team
// computing new difference
es_xsetinfo ytb_tmp_difference 0
es_math ytb_tmp_difference + server_var(ytb_tmp_ct_t_t_score)
es_math ytb_tmp_difference - server_var(ytb_tmp_ct_t_ct_score)
}
}
else do
{
// computing new difference
es_xsetinfo ytb_tmp_difference 0
es_math ytb_tmp_difference + server_var(ytb_tmp_ct_t_ct_score)
es_math ytb_tmp_difference - server_var(ytb_tmp_ct_t_t_score)
}
if (server_var(ytb_tmp_difference) lessthan server_var(ytb_swap_difference)) do
{ // if the new difference, is less than the current difference
// it's a valid swap ... (maybe not the best, but at least it exists)
es_setinfo ytb_swap_difference server_var(ytb_tmp_difference)
es_setinfo ytb_swapped_ct_player server_var(ytb_current_ct_id)
es_setinfo ytb_swapped_t_player server_var(ytb_current_t_id)
es_xsetinfo ytb_swap_status 1
}
es_xsetinfo ytb_tmp_difference 0
}
}
block ytb_swap_search_t
{ /// ytb_swap_search_t
// Called when teams are even, and T have the advantage
es_xsetinfo ytb_current_t_mustbechecked 0
if (server_var(ytb_onlyswapdead) equalto 1) do
{ // if "onlyswapdead" feature is enabled
es_xsetinfo ytb_alive 0
es_keygetvalue ytb_alive ytb_players server_var(ytb_current_t_id) alive_status
if (server_var(ytb_alive) equalto 0) do
{ // player is dead
es_xsetinfo ytb_current_t_mustbechecked 1
}
else do
{ // player is alive
es_xsetinfo ytb_current_t_mustbechecked 0
}
}
else do
{ // "onlyswapdead" feature is disabled
es_xsetinfo ytb_current_t_mustbechecked 1
}
es_xsetinfo ytb_exists 0
es_exists ytb_exists key ytb_players_protection server_var(ytb_current_t_id)
if (server_var(ytb_exists) equalto 1) do
{ // player is in protection database
es_xsetinfo ytb_current_t_mustbechecked 0
}
if (server_var(ytb_swapbots) equalto 0) do
{ // don't swap bots feature
es_xsetinfo ytb_isbot 0
es_isbot ytb_isbot server_var(ytb_current_t_id)
if (server_var(ytb_isbot) equalto 1) do
{ // current player is a bot
es_xsetinfo ytb_current_t_mustbechecked 0
}
}
if (server_var(ytb_current_t_mustbechecked) equalto 1) do
{ // if we can check the current player
// getting current t score
es_xsetinfo ytb_current_t_score 0
es_keygetvalue ytb_current_t_score ytb_players server_var(ytb_current_t_id) current_score
// computing new score for ct and t team
es_setinfo ytb_tmp_t_ct_score server_var(ytb_ct_score)
es_setinfo ytb_tmp_t_t_score server_var(ytb_t_score)
es_math ytb_tmp_t_t_score - server_var(ytb_current_t_score)
es_math ytb_tmp_t_ct_score + server_var(ytb_current_t_score)
// With this new scores, let's find a ct player giving us a fair swap
es_xsetinfo ytb_current_ct_id 0
foreach player ytb_current_ct_id #ct "es_xdoblock ytb/ytb_swap_search_t_ct"
}
}
block ytb_swap_search_t_ct
{/// ytb_swap_search_t_ct
// Called by ytb_swap_search_t to find a fair swap with the current t player
es_xsetinfo ytb_current_ct_mustbechecked 0
if (server_var(ytb_onlyswapdead) equalto 1) do
{ // if "onlyswapdead" feature is enabled
es_xsetinfo ytb_alive 0
es_keygetvalue ytb_alive ytb_players server_var(ytb_current_ct_id) alive_status
if (server_var(ytb_alive) equalto 0) do
{ // player is dead
es_xsetinfo ytb_current_ct_mustbechecked 1
}
else do
{ // player is alive
es_xsetinfo ytb_current_ct_mustbechecked 0
}
}
else do
{ // "onlyswapdead" feature is disabled
es_xsetinfo ytb_current_ct_mustbechecked 1
}
es_xsetinfo ytb_exists 0
es_exists ytb_exists key ytb_players_protection server_var(ytb_current_ct_id)
if (server_var(ytb_exists) equalto 1) do
{ // player is in protection database
es_xsetinfo ytb_current_ct_mustbechecked 0
}
if (server_var(ytb_swapbots) equalto 0) do
{ // don't swap bots feature
es_xsetinfo ytb_isbot 0
es_isbot ytb_isbot server_var(ytb_current_ct_id)
if (server_var(ytb_isbot) equalto 1) do
{ // current player is a bot
es_xsetinfo ytb_current_ct_mustbechecked 0
}
}
if (server_var(ytb_current_ct_mustbechecked) equalto 1) do
{ // if we can check the current player
// getting current ct score
es_xsetinfo ytb_current_ct_score 0
es_keygetvalue ytb_current_ct_score ytb_players server_var(ytb_current_ct_id) current_score
// computing new score for t and ct team
es_setinfo ytb_tmp_t_ct_ct_score server_var(ytb_tmp_t_ct_score)
es_setinfo ytb_tmp_t_ct_t_score server_var(ytb_tmp_t_t_score)
es_math ytb_tmp_t_ct_ct_score - server_var(ytb_current_ct_score)
es_math ytb_tmp_t_ct_t_score + server_var(ytb_current_ct_score)
es_setinfo ytb_tmp_difference server_var(ytb_swap_difference)
if (server_var(ytb_tmp_t_ct_t_score) lessthan server_var(ytb_tmp_t_ct_ct_score)) do
{ // if this swap give advantage to CT team
if (server_var(ytb_ct_lost) >= server_var(ytb_lostrounds)) do
{ // if CT lost x rounds in a row, we allow disadvantage of the winning team
// computing new difference
es_xsetinfo ytb_tmp_difference 0
es_math ytb_tmp_difference + server_var(ytb_tmp_t_ct_ct_score)
es_math ytb_tmp_difference - server_var(ytb_tmp_t_ct_t_score)
}
}
else do
{
// computing new difference
es_xsetinfo ytb_tmp_difference 0
es_math ytb_tmp_difference + server_var(ytb_tmp_t_ct_t_score)
es_math ytb_tmp_difference - server_var(ytb_tmp_t_ct_ct_score)
}
if (server_var(ytb_tmp_difference) lessthan server_var(ytb_swap_difference)) do
{ // if the new difference, is less than the current difference
// it's a valid swap ... (maybe not the best, but at least it exists)
es_setinfo ytb_swap_difference server_var(ytb_tmp_difference)
es_setinfo ytb_swapped_ct_player server_var(ytb_current_ct_id)
es_setinfo ytb_swapped_t_player server_var(ytb_current_t_id)
es_xsetinfo ytb_swap_status 1
}
es_xsetinfo ytb_tmp_difference 0
}
}
block ytb_swap_search_ct_only
{ /// ytb_swap_search_ct_only
// Called when teams are odd, and CT have the advantage
es_xsetinfo ytb_current_ct_mustbechecked 0
if (server_var(ytb_onlyswapdead) equalto 1) do
{ // if "onlyswapdead" feature is enabled
es_xsetinfo ytb_alive 0
es_keygetvalue ytb_alive ytb_players server_var(ytb_current_ct_id) alive_status
if (server_var(ytb_alive) equalto 0) do
{ // player is dead
es_xsetinfo ytb_current_ct_mustbechecked 1
}
else do
{ // player is alive
es_xsetinfo ytb_current_ct_mustbechecked 0
}
}
else do
{ // "onlyswapdead" feature is disabled
es_xsetinfo ytb_current_ct_mustbechecked 1
}
es_xsetinfo ytb_exists 0
es_exists ytb_exists key ytb_players_protection server_var(ytb_current_ct_id)
if (server_var(ytb_exists) equalto 1) do
{ // player is in protection database
es_xsetinfo ytb_current_ct_mustbechecked 0
}
if (server_var(ytb_swapbots) equalto 0) do
{ // don't swap bots feature
es_xsetinfo ytb_isbot 0
es_isbot ytb_isbot server_var(ytb_current_ct_id)
if (server_var(ytb_isbot) equalto 1) do
{ // current player is a bot
es_xsetinfo ytb_current_ct_mustbechecked 0
}
}
if (server_var(ytb_current_ct_mustbechecked) equalto 1) do
{ // if we can check the current player
// getting current ct score
es_xsetinfo ytb_current_ct_score 0
es_keygetvalue ytb_current_ct_score ytb_players server_var(ytb_current_ct_id) current_score
// computing new score for t and ct team
es_setinfo ytb_tmp_ct_score server_var(ytb_ct_score)
es_setinfo ytb_tmp_t_score server_var(ytb_t_score)
es_math ytb_tmp_ct_score - server_var(ytb_current_ct_score)
es_math ytb_tmp_t_score + server_var(ytb_current_ct_score)
es_setinfo ytb_tmp_difference server_var(ytb_swap_difference)
if (server_var(ytb_tmp_ct_score) lessthan server_var(ytb_tmp_t_score)) do
{ // if this swap give advantage to T team
if (server_var(ytb_t_lost) >= server_var(ytb_lostrounds)) do
{ // if T lost x rounds in a row, we allow disadvantage of the winning team
// computing new difference
es_xsetinfo ytb_tmp_difference 0
es_math ytb_tmp_difference + server_var(ytb_tmp_t_score)
es_math ytb_tmp_difference - server_var(ytb_tmp_ct_score)
}
}
else do
{
es_xsetinfo ytb_tmp_difference 0
es_math ytb_tmp_difference + server_var(ytb_tmp_ct_score)
es_math ytb_tmp_difference - server_var(ytb_tmp_t_score)
}
if (server_var(ytb_tmp_difference) lessthan server_var(ytb_swap_difference)) do
{ // if the new difference, is less than the current difference
// it's a valid swap ... (maybe not the best, but at least it exists)
es_setinfo ytb_swap_difference server_var(ytb_tmp_difference)
es_setinfo ytb_swapped_ct_player server_var(ytb_current_ct_id)
es_xsetinfo ytb_swap_status 1
}
es_xsetinfo ytb_tmp_difference 0
}
}
block ytb_swap_search_t_only
{ /// ytb_swap_search_t_only
// Called when teams are odd, and T have the advantage
es_xsetinfo ytb_current_t_mustbechecked 0
if (server_var(ytb_onlyswapdead) equalto 1) do
{ // if "onlyswapdead" feature is enabled
es_xsetinfo ytb_alive 0
es_keygetvalue ytb_alive ytb_players server_var(ytb_current_t_id) alive_status
if (server_var(ytb_alive) equalto 0) do
{ // player is dead
es_xsetinfo ytb_current_t_mustbechecked 1
}
else do
{ // player is alive
es_xsetinfo ytb_current_t_mustbechecked 0
}
}
else do
{ // "onlyswapdead" feature is disabled
es_xsetinfo ytb_current_t_mustbechecked 1
}
es_xsetinfo ytb_exists 0
es_exists ytb_exists key ytb_players_protection server_var(ytb_current_t_id)
if (server_var(ytb_exists) equalto 1) do
{ // player is in protection database
es_xsetinfo ytb_current_t_mustbechecked 0
}
if (server_var(ytb_swapbots) equalto 0) do
{ // don't swap bots feature
es_xsetinfo ytb_isbot 0
es_isbot ytb_isbot server_var(ytb_current_t_id)
if (server_var(ytb_isbot) equalto 1) do
{ // current player is a bot
es_xsetinfo ytb_current_t_mustbechecked 0
}
}
if (server_var(ytb_current_t_mustbechecked) equalto 1) do
{ // if we can check the current player
// getting current t score
es_xsetinfo ytb_current_t_score 0
es_keygetvalue ytb_current_t_score ytb_players server_var(ytb_current_t_id) current_score
// computing new score for t and ct team
es_setinfo ytb_tmp_ct_score server_var(ytb_ct_score)
es_setinfo ytb_tmp_t_score server_var(ytb_t_score)
es_math ytb_tmp_t_score - server_var(ytb_current_t_score)
es_math ytb_tmp_ct_score + server_var(ytb_current_t_score)
es_setinfo ytb_tmp_difference server_var(ytb_swap_difference)
if (server_var(ytb_tmp_t_score) lessthan server_var(ytb_tmp_ct_score)) do
{ // if this swap give advantage to CT team
if (server_var(ytb_ct_lost) >= server_var(ytb_lostrounds)) do
{ // if T lost x rounds in a row, we allow disadvantage of the winning team
// computing new difference
es_xsetinfo ytb_tmp_difference 0
es_math ytb_tmp_difference + server_var(ytb_tmp_ct_score)
es_math ytb_tmp_difference - server_var(ytb_tmp_t_score)
}
}
else do
{
es_xsetinfo ytb_tmp_difference 0
es_math ytb_tmp_difference + server_var(ytb_tmp_t_score)
es_math ytb_tmp_difference - server_var(ytb_tmp_ct_score)
}
if (server_var(ytb_tmp_difference) lessthan server_var(ytb_swap_difference)) do
{ // if the new difference, is less than the current difference
// it's a valid swap ... (maybe not the best, but at least it exists)
es_setinfo ytb_swap_difference server_var(ytb_tmp_difference)
es_setinfo ytb_swapped_t_player server_var(ytb_current_t_id)
es_xsetinfo ytb_swap_status 1
}
es_xsetinfo ytb_tmp_difference 0
}
}
block ytb_swap_protection_reset
{ /// ytb_swap_protection_reset
// triggered to reset ytb_players_protection keygroup
es_xsetinfo ytb_exists 0
es_exists ytb_exists key ytb_players_protection server_var(ytb_current_id)
if (server_var(ytb_exists) equalto 1) do
{ // player is in protection database
es_xsetinfo ytb_current_id_swap_protection 0
es_keygetvalue ytb_current_id_swap_protection ytb_players_protection server_var(ytb_current_id) swap_protection_left
if (server_var(ytb_current_id_swap_protection) greaterthan 0) do
{ // if player is still protected
es_math ytb_current_id_swap_protection - 1
es_keysetvalue ytb_players_protection server_var(ytb_current_id) swap_protection_left server_var(ytb_current_id_swap_protection)
}
else do
{ // player is not protected anymore
es_keydelete ytb_players_protection server_var(ytb_current_id)
}
}
}
block ytb_enable
{ /// ytb_enable
// triggered to enable yTB after a warmup time
es_xsetinfo ytb_current_roundcycle 0
es_xsetinfo ytb_ct_lost 0
es_xsetinfo ytb_t_lost 0
es_xsetinfo ytb_enable_status 1
es_xsetinfo ytb_godmode_enabled 1
}
block ytb_godmode_on
{ /// ytb_godmode_on
// triggered to enable god mode
es est_God server_var(ytb_godmode_id) 1
}
block ytb_godmode_off
{ /// ytb_godmode_off
// triggered to disable god mode
es est_God server_var(ytb_godmode_id) 0
}
// ---