diff --git a/addons/amxmodx/configs/gungame.cfg b/addons/amxmodx/configs/gungame.cfg new file mode 100644 index 0000000..be2e620 --- /dev/null +++ b/addons/amxmodx/configs/gungame.cfg @@ -0,0 +1,137 @@ +// GunGame AMXX 2.13c + +// basic cvars +gg_enabled 1 +gg_vote_setting 2 +gg_vote_custom "" +gg_changelevel_custom "" +gg_map_setup "mp_timelimit 45; mp_winlimit 0; sv_alltalk 0; mp_chattime 10; mp_c4timer 25" +gg_endmap_setup "" +gg_join_msg 1 +gg_messages 1 +gg_save_temp 300 +gg_status_display 1 +gg_map_iterations 1 +gg_ignore_bots 0 +gg_block_equips 2 +gg_leader_display 1 +gg_leader_display_x -1.0 +gg_leader_display_y 0.0 +gg_allow_changeteam 2 +gg_disable_money 1 +gg_winner_motd 1 +gg_afk_protection 0 +gg_top10_ppp 8 + +// autovote cvars +gg_autovote_mode 0 +gg_autovote_rounds 1 +gg_autovote_delay 8.0 +gg_autovote_ratio 0.51 +gg_autovote_time 10.0 + +// stats cvars +gg_stats_file "gungame.stats" // not used with SQL +gg_stats_streak_file "gungame.streaks" // not used with SQL +gg_stats_ip 0 +gg_stats_prune 2592000 +gg_stats_mode 2 +gg_stats_split 0 +gg_stats_winbonus 1.5 + +// SQL-only cvars +//gg_sql_host "127.0.0.1" +//gg_sql_user "root" +//gg_sql_pass "" +//gg_sql_db "amx" +//gg_sql_table "gg_stats" +//gg_sql_streak_table "gg_streaks" +//gg_sql_winmotd_table "gg_winmotd" + +// deathmatch cvars +gg_dm 1 +gg_dm_sp_time 1.0 +gg_dm_sp_mode 1 +gg_dm_spawn_random 2 +gg_dm_start_random 1 +gg_dm_spawn_delay 3.0 +gg_dm_spawn_afterplant 1 +gg_dm_corpses 1 +gg_dm_countdown 2 + +// objective cvars +gg_block_objectives 0 +gg_bomb_defuse_lvl 1 +gg_host_touch_reward 2 +gg_host_rescue_reward 2 +gg_host_kill_reward 1 +gg_host_kill_penalty 1 + +// teamplay cvars +gg_teamplay 0 +gg_teamplay_knife_mod 0.33 +gg_teamplay_nade_mod 0.50 +gg_teamplay_timeratio 1 + +// gameplay cvars +gg_ff_auto 1 +gg_weapon_order "glock18,usp,p228,deagle,fiveseven,elite,m3,xm1014,tmp,mac10,mp5navy,ump45,p90,galil,famas,ak47,scout,m4a1,sg552,aug,m249,hegrenade,knife" +gg_max_lvl 3 +gg_triple_on 0 +gg_turbo 1 +gg_knife_pro 1 +gg_knife_elite 0 +gg_suicide_penalty 1 +gg_worldspawn_suicide 1 +gg_pickup_others 0 +gg_handicap_on 1 +gg_top10_handicap 1 +gg_warmup_timer_setting 60 +gg_warmup_weapon "knife" +gg_warmup_multi 0 +gg_nade_glock 1 +gg_nade_smoke 0 +gg_nade_flash 0 +gg_extra_nades 1 +gg_nade_refresh 5.0 +gg_kills_per_lvl 2 +gg_kills_botmod 1.0 +gg_give_armor 100 +gg_give_helmet 1 +gg_ammo_amount 200 +gg_refill_on_kill 1 +gg_tk_penalty 1 +gg_awp_oneshot 1 +gg_bots_skipnade 0 +gg_bots_knifeable 1 + +// sound cvars +gg_sound_levelup "sound/gungame/gg_levelup.wav" +gg_sound_leveldown "sound/ambience/xtal_down1(e70)" +gg_sound_levelsteal "sound/turret/tu_die.wav" +gg_sound_nade "sound/gungame/gg_nade_level.wav" +gg_sound_knife "sound/gungame/gg_knife_level.wav" +gg_sound_welcome "sound/gungame/gg_welcome.wav" +gg_sound_triple "sound/gungame/gg_triple.wav" +gg_sound_winner "media/Half-Life03.mp3;media/Half-Life08.mp3;media/Half-Life11.mp3;media/Half-Life17.mp3" +gg_sound_takenlead "sound/gungame/gg_takenlead.wav" +gg_sound_tiedlead "sound/gungame/gg_tiedlead.wav" +gg_sound_lostlead "sound/gungame/gg_lostlead.wav" +gg_lead_sounds 0.9 + +// random weapon order cvars (leave blank to disable) +gg_weapon_order1 "" +gg_weapon_order2 "" +gg_weapon_order3 "" +gg_weapon_order4 "" +gg_weapon_order5 "" +gg_weapon_order6 "" +gg_weapon_order7 "" +gg_weapon_order8 "" +gg_weapon_order9 "" +gg_weapon_order10 "" + +// valid weapon names for gg_weapon_order: +// +// ak47, aug, awp, deagle, elite, famas, fiveseven, g3sg1, galil, glock18, hegrenade, knife, +// m249, m3, m4a1, mac10, mp5navy, p228, p90, scout, sg550, sg552, tmp, ump45, usp, xm1014 diff --git a/addons/amxmodx/data/lang/gungame.txt b/addons/amxmodx/data/lang/gungame.txt new file mode 100644 index 0000000..1bb5a92 --- /dev/null +++ b/addons/amxmodx/data/lang/gungame.txt @@ -0,0 +1,3467 @@ +// For GunGame 2.13 - last updated 10:58 PM 1/2/2013 + +[en] +AFK_KILL = Your kill did not count because %%n%s%%e was AFK +AUTOVOTE_RES1 = Playing GunGame with teamplay mode +AUTOVOTE_RES2 = Playing regular GunGame +AUTOVOTE_RES3 = Not playing GunGame +CANCEL = Cancel +CLOSE = Close +FRIENDLYFIRE_ON = %%gFriendly Fire is ON!!!%%e Watch your fire! +GAINED_POINTS = You have just gained %%g%i%%e points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_REG = You have just gained %%g%i%%e regular points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_TP = You have just gained %%g%i%%e teamplay points, for a total of %%g%i%%e points with %%g%i%%e wins! +GUNGAME = GunGame +HK_LEVEL_DOWN = %%n%s%%e went back down to level %%g%i%%e for killing a hostage +HK_SCORE_DOWN = %%n%s%%e lost %%g%i%%e points for killing a hostage +HK_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for a hostage kill +HK_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for a hostage kill +IN_A_ROW = %i in a row +JUMP_TO_ME = Jump to me +LEADER = Leader +LEADING_ON_LEVEL = %%n%s%%e is leading on level %%g%i%%e :: %%g%s%%e +LEADING_ON_LEVEL_TEAM = The %%n%s%%e team is leading on level %%g%i%%e :: %%g%s%%e +LEVEL = Level +LEVEL_MESSAGE_LINE1A = You have made %i/%i of your required kills +LEVEL_MESSAGE_LINE1B = Your team has made %i/%i of its required kills +LEVEL_MESSAGE_LINE2A = You are in the lead +LEVEL_MESSAGE_LINE2B = You are tied for first place +LEVEL_MESSAGE_LINE2C = You are %i levels behind the leader +LEVEL_MESSAGE_LINE3A = You have won %i times +LEVEL_MESSAGE_LINE3A_REG = You have %i regular wins +LEVEL_MESSAGE_LINE3A_TP = You have %i teamplay wins +LEVEL_MESSAGE_LINE3B = You have accumulated %i points over %i wins +LEVEL_MESSAGE_LINE3B_REG = You have accumulated %i regular points over %i wins +LEVEL_MESSAGE_LINE3B_TP = You have accumulated %i teamplay points over %i wins +LEVEL_MESSAGE_LINE4 = Your record streak is %i wins in a row +LEVEL_MESSAGE_LINE4_REG = Your record regular streak is %i wins in a row +LEVEL_MESSAGE_LINE4_TP = Your record teamplay streak is %i wins in a row +LEVEL_MESSAGE_LINE5A = Current leaders: %s +LEVEL_MESSAGE_LINE5B = Current leader: %s +LEVEL_MESSAGE_LINE6 = Leader level: %i (%s) +LEVELS_BEHIND_LEADER = You are now %%g%i%%e levels behind the leader +NEXT = Next +NONE = none +NO_ONE = no one +NO_WIN_LOGGING = This server has win logging disabled +NOW_ON_LEVEL = You are now on level +ON_LEVEL = You are on level +ON_LEVEL_TEAM = Your team is on level +PLAY_GUNGAME = Play GunGame? +PLAYER_RESET = %%n%s%%e reset himself back to level %%g1%%e +POINTS = points +POINTS_ABBR = pts +PRESS_KEY_TO_CONTINUE = Press any number key to continue +PREVIOUS = Prev +PROGRESS_DISPLAY = You need %%n%i%%e kills to advance. Score: %%n%i / %i%%e +PROGRESS_DISPLAY1 = You are in the lead by %i levels +PROGRESS_DISPLAY2 = You are tied for the lead with %s +PROGRESS_DISPLAY3 = You are tied for the lead with %s others +PROGRESS_DISPLAY4 = You are %i levels behind the leader +PROGRESS_DISPLAY_TEAM1 = Your team is in the lead by %i levels +PROGRESS_DISPLAY_TEAM2 = Your team is tied with the other team +PROGRESS_DISPLAY_TEAM3 = Your team is %i levels behind the other team +PRUNING = Pruning %s: %i entries removed +RECORD_STREAK = Record Streak: %s (%i in a row) +REQUIRED_KILLS = Required kills +RESET_NOT_ALLOWED = You cannot reset your level during Teamplay Mode! +RESET_QUERY = Are you SURE that you want^nto reset yourself back to level 1? +RESPAWN_COUNTDOWN = You will respawn in %i seconds +RULES = Rules +RULES_CONSOLE_LINE1 = %i) You must get a kill with your current weapon to level up. +RULES_CONSOLE_LINE2 = %i) If you get a kill with a weapon out of order, it does not count and you remain on your current level. +RULES_CONSOLE_LINE3 = %i) You can gain levels by PLANTING and DEFUSING. +RULES_CONSOLE_LINE4 = %i) If you commit suicide, you will lose a level. +RULES_CONSOLE_LINE5 = %i) Friendly Fire is turned ON when someone reaches GRENADE level. +RULES_CONSOLE_LINE6A = %i) You CAN gain more than one level per round. +RULES_CONSOLE_LINE6B = %i) You can only gain one level per round. +RULES_CONSOLE_LINE6C = %i) You can gain up to %i levels per round. +RULES_CONSOLE_LINE7 = %i) There is a grace period at the end of each round to allow players to switch teams. +RULES_CONSOLE_LINE8 = %i) Because Knife Pro is enabled, you can steal a level from an opponent by knifing them. +RULES_CONSOLE_LINE9 = %i) Because Turbo Mode is enabled, you will receive your next weapon immediately when you level up. +RULES_CONSOLE_LINE10 = %i) Because Knife Elite Mode is enabled, once you level up you will have to use a knife until the next round. +RULES_CONSOLE_LINE11 = %i) Because Deathmatch Mode is enabled, you will respawn infinitely. +RULES_CONSOLE_LINE12 = %i) Because Teamplay Mode is enabled, you will gain points as a team instead of individually. +RULES_CONSOLE_LINE13 = Say !level to see your current level and who is winning. +RULES_CONSOLE_LINE14 = Say !weapons to see the weapon order. +RULES_CONSOLE_LINE15 = Say !score to see all player current scores. +RULES_CONSOLE_LINE16 = Say !top10 to see the top 10 winners on the server. +RULES_CONSOLE_LINE17 = Say !restart to reset you to level 1. +RULES_MESSAGE_LINE1 = Game rules and all say commands are now listed in your console +RULES_MESSAGE_LINE2 = Some useful say commands: +RULES_MESSAGE_LINE3 : +Say !top10 to see the top 10 players on this server^n +Say !level to see your current level and who is winning^n +Say !weapons to see the weapon order^n +Say !score to see player scores +: +SCORES = Scores +SLOW_DOWN = Slow down! This is still the warmup round! +SPAWNPROTECTED_KILL = Your kill did not count because %%n%s%%e spawned in the last %%g%i%%e seconds +STATS = Stats +STATS_REGULAR = Regular Stats +STATS_TEAMPLAY = Teamplay Stats +STILL_LEVEL_ONE = You aren't even past level 1 yet! +STOLE_LEVEL = %%n%s%%e stole a level from %%g%s%%e +STOLE_LEVEL_TEAM = %%n%s%%e stole %%g%i%%e points from %%g%s%%e (gained %%g%i%%e) +SUICIDE_LEVEL_DOWN = %%n%s%%e lost a level for suicide +SUICIDE_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for a suicide +SUICIDE_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for a suicide +TEAM = team +TIED_LEADER_MULTI = %%n%s%%e is tied on level %%g%i%%e :: %%g%s%%e with %%g%s%%e others +TIED_LEADER_ONE = %%n%s%%e is tied on level %%g%i%%e :: %%g%s%%e with %%g%s%%e +TIED_LEADER_TEAM = The teams are tied on level %%g%i%%e :: %%g%s%%e +TK_LEVEL_DOWN = %%n%s%%e went back down to level %%g%i%%e for team killing +TK_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for team killing +TK_SCORE_DOWN = %%n%s%%e lost %%g%i%%e points for team killing +TK_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for team killing +TOP_10 = Top 10 +TRAILING_ON_LEVEL_TEAM = The %%n%s%%e team is trailing on level %%g%i%%e :: %%g%s%%e +TRIPLE_LEVELED = %%n%s%%e triple leveled!!! +UNRANKED = unranked +WARMUP_ROUND = Warmup round +WARMUP_ROUND_OVER = Warmup Round Over! +WARMUP_ROUND_DISPLAY = Warmup Round: %i seconds left +WEAPONS = Weapons +WELCOME_MESSAGE_LINE1 = This server is running GunGame %s by Avalanche +WELCOME_MESSAGE_LINE2 = Knife Pro is \rENABLED!\w +WELCOME_MESSAGE_LINE3 = Turbo Mode is \rENABLED!\w +WELCOME_MESSAGE_LINE4 = Knife Elite Mode is \rENABLED!\w +WELCOME_MESSAGE_LINE5 = Deathmatch Mode is \rENABLED!\w +WELCOME_MESSAGE_LINE6 = Teamplay Mode is \rENABLED!\w +WELCOME_MESSAGE_LINE7 = There are \y%i\w levels this round! +WELCOME_MESSAGE_LINE8 : +Type !rules for instructions on how to play and a list of commands^n +Type !level to get your level info and who is leading^n +Type !score to get a list of all players scores and winnings^n +: +WIN_MOTD_LINE1 = %s won! +WIN_MOTD_LINE2 = the %s team +WIN_MOTD_LINE3 = is the winner! +WIN_MOTD_LINE4A = The final %s kill was made against %s +WIN_MOTD_LINE4B = The final %s kill was made against %s by %s +WIN_MOTD_LINE5A = This is %s's %i%s win,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_REG = This is %s's %i%s regular win,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_TP = This is %s's %i%s teamplay win,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE5B = %s now has a total of %i points. +WIN_MOTD_LINE5B_REG = %s now has a total of %i regular points. +WIN_MOTD_LINE5B_TP = %s now has a total of %i teamplay points. +WIN_MOTD_LINE5C = This is %s's %i%s win, for a total of %i points,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_REG = This is %s's %i%s regular win, for a total of %i points,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_TP = This is %s's %i%s teamplay win, for a total of %i points,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE6 = You spent %i%% of your time contributing to the winning team. +WIN_MOTD_LINE7A = You now have a total of %i wins.

This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_REG = You now have a total of %i regular wins.

This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_TP = You now have a total of %i teamplay wins.

This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_LINE7B = You have a total of %i wins. +WIN_MOTD_LINE7B_REG = You have a total of %i regular wins. +WIN_MOTD_LINE7B_TP = You have a total of %i teamplay wins. +WIN_MOTD_LINE7C = You have just gained %i points, for a total of %i points with %i wins! +WIN_MOTD_LINE7C_REG = You have just gained %i regular points, for a total of %i points with %i wins! +WIN_MOTD_LINE7C_TP = You have just gained %i teamplay points, for a total of %i points with %i wins! +WIN_MOTD_LINE8A = The next map will be %s +WIN_MOTD_LINE8B = There is one round of this map left. +WIN_MOTD_LINE8C = There are %i rounds of this map left. +WIN_MOTD_STREAK1 = This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_REG = This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_TP = This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_STREAK2 = Your record streak is %i wins in a row. +WIN_MOTD_STREAK2_REG = Your record regular streak is %i wins in a row. +WIN_MOTD_STREAK2_TP = Your record teamplay streak is %i wins in a row. +WIN_MOTD_STREAK3 = The all-time record streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_REG = The all-time record regular streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_TP = The all-time record teamplay streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK4 = %s just set a new all-time record streak with %i wins in a row! +WIN_MOTD_STREAK4_REG = %s just set a new all-time record regular streak with %i wins in a row! +WIN_MOTD_STREAK4_TP = %s just set a new all-time record teamplay streak with %i wins in a row! +WINS = wins +WON = %%n%s%%e won +WON_TEAM = The %%n%s%%e team won +YES_REGULAR = Yes, regular mode +YES_TEAMPLAY = Yes, teamplay mode + +[ls] +AFK_KILL = Your kill did not count because %%n%s%%e was AFK +AUTOVOTE_RES1 = Playing GunGame with teamplay mode +AUTOVOTE_RES2 = Playing regular GunGame +AUTOVOTE_RES3 = Not playing GunGame +CANCEL = C4Nc31 +CLOSE = C10$3 +FRIENDLYFIRE_ON = %%gF|2!3|\||)1y F!|23 !$ ON!!!%%e W4+ch J00|2 |=!|23! +GAINED_POINTS = You have just gained %%g%i%%e points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_REG = You have just gained %%g%i%%e regular points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_TP = You have just gained %%g%i%%e teamplay points, for a total of %%g%i%%e points with %%g%i%%e wins! +GUNGAME = GuNG4m3 +HK_LEVEL_DOWN = %%n%s%%e sux n3w l3v3l %%g%i%%e f0 b00m b00m b4dd!3 +HK_SCORE_DOWN = %%n%s%%e sux %%g%i%%e f0 b00m b00m b4dd!3 +HK_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for a hostage kill +HK_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for a hostage kill +IN_A_ROW = %i in a row +JUMP_TO_ME = Jump to me +LEADER = 134|)3|2 +LEADING_ON_LEVEL = %%n%s%%e !$ 134|)!|\|g 0|\| 13\/31 %%g%i%%e :: %%g%s%%e +LEADING_ON_LEVEL_TEAM = The %%n%s%%e team is leading on level %%g%i%%e :: %%g%s%%e +LEVEL = L3V31 +LEVEL_MESSAGE_LINE1A = J00 h4V3 m4|)3 %i/%i 0|= J00|2 |23qu!|23|) k!11$ +LEVEL_MESSAGE_LINE1B = Your team has made %i/%i of its required kills +LEVEL_MESSAGE_LINE2A = J00 4|23 !N +h3 134|) +LEVEL_MESSAGE_LINE2B = J00 4|23 +!3|) |=0|2 |=!|2$+ p14c3 +LEVEL_MESSAGE_LINE2C = J00 4|23 %i 13V31$ |33h!N|) +h3 134|)3|2 +LEVEL_MESSAGE_LINE3A = J00 h4V3 w0N %i +!m3$ +LEVEL_MESSAGE_LINE3A_REG = You have %i regular wins +LEVEL_MESSAGE_LINE3A_TP = You have %i teamplay wins +LEVEL_MESSAGE_LINE3B = You have accumulated %i points over %i wins +LEVEL_MESSAGE_LINE3B_REG = You have accumulated %i regular points over %i wins +LEVEL_MESSAGE_LINE3B_TP = You have accumulated %i teamplay points over %i wins +LEVEL_MESSAGE_LINE3C = You have won %i times (ranked %i%s) +LEVEL_MESSAGE_LINE3D = You have accumulated %i points over %i wins (ranked %i%s) +LEVEL_MESSAGE_LINE4 = Your record streak is %i wins in a row +LEVEL_MESSAGE_LINE4_REG = Your record regular streak is %i wins in a row +LEVEL_MESSAGE_LINE4_TP = Your record teamplay streak is %i wins in a row +LEVEL_MESSAGE_LINE5A = Cu|2|23N+ 134|)3|2$: %s +LEVEL_MESSAGE_LINE5B = Cu|2|23N+ 134|)3|2: %s +LEVEL_MESSAGE_LINE6 = L34|)3|2 13V31: %i (%s) +LEVELS_BEHIND_LEADER = J00 4|23 N0w %%g%i%%e 13\/31$ |33h!|\||) +h3 134|)3|2 +NEXT = N3x+ +NONE = N0N3 +NO_ONE = |\|0 0|\|3 +NO_WIN_LOGGING = Th!$ $3|2\/3|2 h4$ w!|\| 10gg!|\|g |)!$4|313|) +NOW_ON_LEVEL = J00 4|23 |\|0w 0|\| 13\/31 +ON_LEVEL = J00 4|23 0N 13V31 +ON_LEVEL_TEAM = Your team is on level +PLAY_GUNGAME = GuNG4m3 L0L? +PLAYER_RESET = %%n%s%%e |23$3+ h!m$31|= |34ck +0 13\/31 %%g1%%e +POINTS = p0!ntz +POINTS_ABBR = pts +PRESS_KEY_TO_CONTINUE = P|23$$ 4|\|y |\|um|33|2 k3y +0 c0|\|+!|\|u3 +PREVIOUS = P|23V +PROGRESS_DISPLAY = J00 |\|33|) %%n%i%%e k!11$ +0 4|)\/4|\|c3. Sc0|23: %%n%i / %i%%e +PROGRESS_DISPLAY1 = You are in the lead by %i levels +PROGRESS_DISPLAY2 = You are tied for the lead with %s +PROGRESS_DISPLAY3 = You are tied for the lead with %s others +PROGRESS_DISPLAY4 = You are %i levels behind the leader +PROGRESS_DISPLAY_TEAM1 = Your team is in the lead by %i levels +PROGRESS_DISPLAY_TEAM2 = Your team is tied with the other team +PROGRESS_DISPLAY_TEAM3 = Your team is %i levels behind the other team +PRUNING = P|2u|\|!|\|g %s: %i 3|\|+|2!3$ |23m0\/3|) +RECORD_STREAK = Record Streak: %s (%i in a row) +REQUIRED_KILLS = R3qu!|23|) k!11$ +RESET_NOT_ALLOWED = You cannot reset your level during Teamplay Mode! +RESET_QUERY = A|23 J00 SURE +h4+ J00 w4N+^n+0 |23$3+ J00|2$31|= |34ck +0 13V31 1? +RESPAWN_COUNTDOWN = j00 n00b g0 b3 |=L4|<3 !|\| %i s3c0ndz +RULES = Ru13$ +RULES_CONSOLE_LINE1 = %i) J00 mu$+ g3+ 4 k!11 w!+h J00|2 cu|2|23|\|+ w34p0|\| +0 13\/31 up. +RULES_CONSOLE_LINE2 = %i) I|= J00 g3+ 4 k!11 w!+h 4 w34p0|\| 0u+ 0|= 0|2|)3|2, !+ |)03$ |\|0+ c0u|\|+ 4|\||) J00 |23m4!|\| 0|\| J00|2 cu|2|23|\|+ 13\/31. +RULES_CONSOLE_LINE3 = %i) J00 c4|\| g4!|\| 13\/31$ |3y PLANTING 4|\||) DEFUSING. +RULES_CONSOLE_LINE4 = %i) I|= J00 c0mm!+ $u!c!|)3, J00 w!11 10$3 4 13\/31. +RULES_CONSOLE_LINE5 = %i) F|2!3|\||)1y F!|23 !$ +u|2|\|3|) ON wh3|\| $0m30|\|3 |234ch3$ GRENADE 13\/31. +RULES_CONSOLE_LINE6A = %i) J00 CAN g4!|\| m0|23 +h4|\| 0|\|3 13\/31 p3|2 |20u|\||). +RULES_CONSOLE_LINE6B = %i) J00 c4|\| 0|\|1y g4!|\| 0|\|3 13\/31 p3|2 |20u|\||). +RULES_CONSOLE_LINE6C = %i) J00 c4|\| g4!|\| up +0 %i 13\/31$ p3|2 |20u|\||). +RULES_CONSOLE_LINE7 = %i) Th3|23 !$ 4 g|24c3 p3|2!0|) 4+ +h3 3|\||) 0|= 34ch |20u|\||) +0 4110w p14y3|2$ +0 $w!+ch +34m$. +RULES_CONSOLE_LINE8 = %i) B3c4u$3 K|\|!|=3 P|20 !$ 3|\|4|313|), J00 c4|\| $+341 4 13\/31 |=|20m 4|\| 0pp0|\|3|\|+ |3y k|\|!|=!|\|g +h3m. +RULES_CONSOLE_LINE9 = %i) B3c4u$3 Tu|2|30 M0|)3 !$ 3|\|4|313|), J00 w!11 |23c3!\/3 J00|2 |\|3x+ w34p0|\| !mm3|)!4+31y wh3|\| J00 13\/31 up. +RULES_CONSOLE_LINE10 = %i) Because Knife Elite Mode is enabled, once you level up you will have to use a knife until the next round. +RULES_CONSOLE_LINE11 = %i) B3c4u$3 D34+hm4+ch M0|)3 !$ 3|\|4|313|), J00 w!11 |23$p4w|\| !|\||=!|\|!+31y. +RULES_CONSOLE_LINE12 = %i) Because Teamplay Mode is enabled, you will gain points as a team instead of individually. +RULES_CONSOLE_LINE13 = S4y !13\/31 +0 $33 J00|2 cu|2|23|\|+ 13\/31 4|\||) wh0 !$ w!|\||\|!|\|g. +RULES_CONSOLE_LINE14 = S4y !w34p0|\|$ +0 $33 +h3 w34p0|\| 0|2|)3|2. +RULES_CONSOLE_LINE15 = S4y !$c0|23 +0 $33 411 p14y3|2 cu|2|23|\|+ $c0|23$. +RULES_CONSOLE_LINE16 = S4y !+0p10 +0 $33 +h3 +0p 10 w!|\||\|3|2$ 0|\| +h3 $3|2\/3|2. +RULES_CONSOLE_LINE17 = S4y !|23$+4|2+ +0 |23$3+ J00 +0 13\/31 1. +RULES_MESSAGE_LINE1 = G4m3 |2u13$ 4N|) 411 $4y c0mm4N|)$ 4|23 N0w 1!$+3|) !N J00|2 c0N$013 +RULES_MESSAGE_LINE2 = S0m3 u$3|=u1 $4y c0mm4N|)$: +RULES_MESSAGE_LINE3 : +S4y !+0p10 +0 $33 +h3 +0p 10 p14y3|2$ 0N +h!$ $3|2V3|2^n +S4y !13V31 +0 $33 J00|2 cu|2|23N+ 13V31 4N|) wh0 !$ w!NN!Ng^n +S4y !w34p0N$ +0 $33 +h3 w34p0N 0|2|)3|2^n +S4y !$c0|23 +0 $33 p14y3|2 $c0|23$ +: +SCORES = Sc0|23$ +SLOW_DOWN = S10w |)0w|\|! Th!$ !$ $+!11 +h3 w4|2mup |20u|\||)! +SPAWNPROTECTED_KILL = J00|2 k!11 |)!|) |\|0+ c0u|\|+ |33c4u$3 %%n%s%%e $p4w|\|3|) !|\| +h3 14$+ %%g%i%%e $3c0|\||)$ +STATS = Stats +STATS_REGULAR = Regular Stats +STATS_TEAMPLAY = Teamplay Stats +STILL_LEVEL_ONE = J00 4|23|\|'+ 3\/3|\| p4$+ 13\/31 1 y3+! +STOLE_LEVEL = %%n%s%%e $+013 4 13\/31 |=|20m %%g%s%%e +STOLE_LEVEL_TEAM = %%n%s%%e stole %%g%i%%e points from %%g%s%%e (gained %%g%i%%e) +SUICIDE_LEVEL_DOWN = %%n%s%%e 10$+ 4 13\/31 |=0|2 $u!c!|)3 +SUICIDE_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for a suicide +SUICIDE_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for a suicide +TEAM = team +TIED_LEADER_MULTI = %%n%s%%e is tied on level %%g%i%%e :: %%g%s%%e with %%g%s%%e others +TIED_LEADER_ONE = %%n%s%%e is tied on level %%g%i%%e :: %%g%s%%e with %%g%s%%e +TIED_LEADER_TEAM = The teams are tied on level %%g%i%%e :: %%g%s%%e +TK_LEVEL_DOWN = %%n%s%%e w3|\|+ |34ck |)0w|\| +0 13\/31 %%g%i%%e |=0|2 +34m k!11!|\|g +TK_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for team killing +TK_SCORE_DOWN = %%n%s%%e 10$+ %%g%i%%e p0!|\|+$ |=0|2 +34m k!11!|\|g +TK_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for team killing +TOP_10 = T0p 10 +TRAILING_ON_LEVEL_TEAM = The %%n%s%%e team is trailing on level %%g%i%%e :: %%g%s%%e +TRIPLE_LEVELED = %%n%s%%e +|2!p13 13\/313|)!!! +UNRANKED = unranked +WARMUP_ROUND = W4|2mup |20u|\||) +WARMUP_ROUND_OVER = W4|2mup R0u|\||) O\/3|2! +WARMUP_ROUND_DISPLAY = W4|2mup R0u|\||): %i $3c0|\||)$ 13|=+ +WEAPONS = W34p0N$ +WELCOME_MESSAGE_LINE1 = Th!$ $3|2V3|2 !$ |2uNN!Ng GuNG4m3 %s |3y AV414Nch3 +WELCOME_MESSAGE_LINE2 = KN!|=3 P|20 !$ \rENABLED!\w +WELCOME_MESSAGE_LINE3 = Tu|2|30 M0|)3 !$ \rENABLED!\w +WELCOME_MESSAGE_LINE4 = Knife Elite Mode is \rENABLED!\w +WELCOME_MESSAGE_LINE5 = D34+hm4+ch M0|)3 !$ \rENABLED!\w +WELCOME_MESSAGE_LINE6 = Teamplay Mode is \rENABLED!\w +WELCOME_MESSAGE_LINE7 = There are \y%i\w levels this round! +WELCOME_MESSAGE_LINE8 : +Typ3 !|2u13$ |=0|2 !N$+|2uc+!0N$ 0N h0w +0 p14y 4N|) 4 1!$+ 0|= c0mm4N|)$^n +Typ3 !13V31 +0 g3+ J00|2 13V31 !N|=0 4N|) wh0 !$ 134|)!Ng^n +Typ3 !$c0|23 +0 g3+ 4 1!$+ 0|= 411 p14y3|2$ $c0|23$ 4N|) w!NN!Ng$ !N J00|2 c0N$013^n +: +WIN_MOTD_LINE1 = %s won! +WIN_MOTD_LINE2 = the %s team +WIN_MOTD_LINE3 = is the winner! +WIN_MOTD_LINE4A = The final %s kill was made against %s +WIN_MOTD_LINE4B = The final %s kill was made against %s by %s +WIN_MOTD_LINE5A = This is %s's %i%s win,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_REG = This is %s's %i%s regular win,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_TP = This is %s's %i%s teamplay win,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE5B = %s now has a total of %i points. +WIN_MOTD_LINE5B_REG = %s now has a total of %i regular points. +WIN_MOTD_LINE5B_TP = %s now has a total of %i teamplay points. +WIN_MOTD_LINE5C = This is %s's %i%s win, for a total of %i points,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_REG = This is %s's %i%s regular win, for a total of %i points,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_TP = This is %s's %i%s teamplay win, for a total of %i points,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE6 = You spent %i%% of your time contributing to the winning team. +WIN_MOTD_LINE7A = You now have a total of %i wins.

This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_REG = You now have a total of %i regular wins.

This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_TP = You now have a total of %i teamplay wins.

This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_LINE7B = You have a total of %i wins. +WIN_MOTD_LINE7B_REG = You have a total of %i regular wins. +WIN_MOTD_LINE7B_TP = You have a total of %i teamplay wins. +WIN_MOTD_LINE7C = You have just gained %i points, for a total of %i points with %i wins! +WIN_MOTD_LINE7C_REG = You have just gained %i regular points, for a total of %i points with %i wins! +WIN_MOTD_LINE7C_TP = You have just gained %i teamplay points, for a total of %i points with %i wins! +WIN_MOTD_LINE8A = The next map will be %s +WIN_MOTD_LINE8B = There is one round of this map left. +WIN_MOTD_LINE8C = There are %i rounds of this map left. +WIN_MOTD_STREAK1 = This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_REG = This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_TP = This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_STREAK2 = Your record streak is %i wins in a row. +WIN_MOTD_STREAK2_REG = Your record regular streak is %i wins in a row. +WIN_MOTD_STREAK2_TP = Your record teamplay streak is %i wins in a row. +WIN_MOTD_STREAK3 = The all-time record streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_REG = The all-time record regular streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_TP = The all-time record teamplay streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK4 = %s just set a new all-time record streak with %i wins in a row! +WIN_MOTD_STREAK4_REG = %s just set a new all-time record regular streak with %i wins in a row! +WIN_MOTD_STREAK4_TP = %s just set a new all-time record teamplay streak with %i wins in a row! +WINS = w!N$ +WON = %%n%s%%e w0|\| +WON_TEAM = The %%n%s%%e team won +YES_REGULAR = Yes, regular mode +YES_TEAMPLAY = Yes, teamplay mode + +[de] +AFK_KILL = Dein Kill zaehlte nicht weil %%n%s%%e AFK ist +AUTOVOTE_RES1 = Spielt GunGame im Teamplay Modus +AUTOVOTE_RES2 = Spielt normales GunGame +AUTOVOTE_RES3 = Spielt kein GunGame +CANCEL = Abbruch +CLOSE = Schliessen +FRIENDLYFIRE_ON = %%gFriendly Fire ist AN!!!%%e Pass auf wo Du hin schiesst! +GAINED_POINTS = You have just gained %%g%i%%e points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_REG = Du hast %%g%i%%e normale Punkte erhalten, fuer insgesamt %%g%i%%e Punkte mit %%g%i%%e Siegen! +GAINED_POINTS_TP = Du hast %%g%i%%e Teamplay Punkte erhalten, fuer insgesamt %%g%i%%e Punkte mit %%g%i%%e Siegen! +GUNGAME = GunGame +HK_LEVEL_DOWN = %%n%s%%e fiel aufgrund eines Geisel-Kills auf Level %%g%i%%e zurueck +HK_SCORE_DOWN = %%n%s%%e verliert %%g%i%%e Punkte wegen dem Tod einer Geisel +HK_LEVEL_DOWN_TEAM = Das %%n%s%%e Team fiel auf Level %%g%i%%e zurueck wegen dem Tod einer Geisel +HK_SCORE_DOWN_TEAM = Das %%n%s%%e Team verlor %%g%i%%e Punkte wegen dem Tod einer Geisel +IN_A_ROW = %i nacheinander +JUMP_TO_ME = Zeige mich +LEADER = Fuehrender +LEADING_ON_LEVEL = %%n%s%%e fuehrt mit Level %%g%i%%e :: %%g%s%%e +LEADING_ON_LEVEL_TEAM = Das %%n%s%%e Team fuehrt auf Level %%g%i%%e :: %%g%s%%e +LEVEL = Level +LEVEL_MESSAGE_LINE1A = Du hast %i/%i von Deinen benoetigten Kills gemacht +LEVEL_MESSAGE_LINE1B = Dein Team hat %i/%i der benoetigten Kills gemacht +LEVEL_MESSAGE_LINE2A = Du bist in Fuehrung +LEVEL_MESSAGE_LINE2B = Du bist punktgleich mit dem Fuehrenden +LEVEL_MESSAGE_LINE2C = Du bist %i Level hinter dem Fuehrenden +LEVEL_MESSAGE_LINE3A = Du hast %i mal gewonnen +LEVEL_MESSAGE_LINE3A_REG = Du hast %i normale Siege +LEVEL_MESSAGE_LINE3A_TP = Du hast %i Teamplay Siege +LEVEL_MESSAGE_LINE3B = You have accumulated %i points over %i wins +LEVEL_MESSAGE_LINE3B_REG = Du hast %i normale Punkte gesammelt durch %i Siege +LEVEL_MESSAGE_LINE3B_TP = Du hast %i Teamplay Punkte gesammelt durch %i Siege +LEVEL_MESSAGE_LINE3C = Du hast %i mal gewonnen (Rang %i%s) +LEVEL_MESSAGE_LINE3D = Du hast %i Punkte gesammelt durch %i Siege (Rang %i%s) +LEVEL_MESSAGE_LINE4 = Deine Rekord Serie ist %i Siege in Folge +LEVEL_MESSAGE_LINE4_REG = Dein Rekord fuer normale Siege ist %i Siege in Folge +LEVEL_MESSAGE_LINE4_TP = Dein Rekord fuer Teamplay Siege ist %i Siege in Folge +LEVEL_MESSAGE_LINE5A = Momentan Fuehrende: %s +LEVEL_MESSAGE_LINE5B = Momentan Fuehrender: %s +LEVEL_MESSAGE_LINE6 = Level des Fuehrenden: %i (%s) +LEVELS_BEHIND_LEADER = Du bist nun %%g%i%%e Level hinter dem Fuehrenden +NEXT = Naechste +NONE = nichts +NO_ONE = keiner +NO_WIN_LOGGING = Dieser Server hat die Sieges-Protokollierung deaktiviert +NOW_ON_LEVEL = Du bist jetzt auf Level +ON_LEVEL = Du bist auf Level +ON_LEVEL_TEAM = Dein Team ist auf Level +PLAY_GUNGAME = GunGame spielen? +PLAYER_RESET = %%n%s%%e hat sich selbst auf Level %%g1%%e zurueckgesetzt +POINTS = Punkte +POINTS_ABBR = Pkt +PRESS_KEY_TO_CONTINUE = Druecke eine Nummerntaste um fortzufahren +PREVIOUS = Zurueck +PROGRESS_DISPLAY = Du brauchst %%n%i%%e Kills um weiter zukommen. Punkte: %%n%i / %i%%e +PROGRESS_DISPLAY1 = Du liegst mit %i Level in Fuehrung +PROGRESS_DISPLAY2 = Du liegst in Fuehrung gleichauf mit %s +PROGRESS_DISPLAY3 = Du liegst in Fuehrung gleichauf mit %s anderen +PROGRESS_DISPLAY4 = Du bist %i Level hinter dem Fuehrenden +PROGRESS_DISPLAY_TEAM1 = Dein Team liegt in Fuehrung mit %i Level +PROGRESS_DISPLAY_TEAM2 = Dein Team liegt gleichauf mit dem anderen Team +PROGRESS_DISPLAY_TEAM3 = Dein Team liegt %i Level hinter dem anderen Team +PRUNING = Pruning %s: %i Eintraege entfernt +RECORD_STREAK = Record Streak: %s (%i in a row) +REQUIRED_KILLS = Benoetigte Kills +RESET_NOT_ALLOWED = Du kannst deinen Level waehrend Teamplay Mode nicht zuruecksetzen! +RESET_QUERY = Bist du SICHER dass du Dich selbst^nauf Level 1 zuruecksetzen moechtest? +RESPAWN_COUNTDOWN = Du wirst in %i Sekunden respawnen +RULES = Regeln +RULES_CONSOLE_LINE1 = %i) Du musst einen Kill mit Deiner jetzigen Waffe machen, um einen Level aufzusteigen. +RULES_CONSOLE_LINE2 = %i) Wenn Du einen Kill mit einer Waffe ausserhalb der Reihenfolge bekommst, so zaehlt dieser nicht und Du bleibst auf Deinem momentanen Level. +RULES_CONSOLE_LINE3 = %i) Du kannst Level durch BOMBE LEGEN und ENTSCHAERFEN steigern. +RULES_CONSOLE_LINE4 = %i) Wenn Du Selbstmord begehst, wirst Du ein Level verlieren. +RULES_CONSOLE_LINE5 = %i) Friendly Fire ist EINGESCHALTET, wenn jemand das GRANATEN-Level erreicht. +RULES_CONSOLE_LINE6A = %i) Du kannst mehr als einen Level pro Runde steigen. +RULES_CONSOLE_LINE6B = %i) Du kannst nur ein Level pro Runde steigen. +RULES_CONSOLE_LINE6C = %i) Du kannst bis zu %i Level pro Runde steigen. +RULES_CONSOLE_LINE7 = %i) Es gibt eine Gnadenfrist am Ende jeder Runde, um den Spielern zu erlauben die Teams zu wechseln. +RULES_CONSOLE_LINE8 = %i) Da Knife Pro aktiviert ist, kannst Du Deinem Gegner ein Level stehlen, indem Du ihn messerst. +RULES_CONSOLE_LINE9 = %i) Da Turbo Mode aktiviert ist, bekommst Du Deine naechste Waffe sofort nachdem Du das naechste Level aufgestiegen bist. +RULES_CONSOLE_LINE10 = %i) Weil Knife Elite Mode aktiv ist musst du nach einem Levelaufstieg hast du bis zum Ende der Runde nur das Messer. +RULES_CONSOLE_LINE11 = %i) Da Deathmatch Mode aktiviert ist, wirst Du unendlich respawnen. +RULES_CONSOLE_LINE12 = %i) Weil der Teamplay Mode aktiv ist erhaelt das gesammte Team Punkte anstatt jeder individuell. +RULES_CONSOLE_LINE13 = Sag !level um Deinen momentanen Level und den Fuehrenden zu sehen. +RULES_CONSOLE_LINE14 = Sag !weapons um die Waffenreihenfolge zu sehen. +RULES_CONSOLE_LINE15 = Sag !score um die momentanen Punkte aller Spieler zu sehen. +RULES_CONSOLE_LINE16 = Sag !top10 um die Top 10 Gewinner auf dem Server zu sehen. +RULES_CONSOLE_LINE17 = Sag !restart um Dich auf Level 1 zurueckzusetzen. +RULES_MESSAGE_LINE1 = Die Spielregeln und alle Chatbefehle sind jetzt in deiner Konsole aufgelistet +RULES_MESSAGE_LINE2 = Einige nuetzliche Chatbefehle: +RULES_MESSAGE_LINE3 : +Sag !top10 um die Top 10 Spieler auf diesem Server zu sehen^n +Sag !level um Deinen momentanen Level und die Person, die gewinnt zu sehen^n +Sag !weapons um die Waffenreihenfolge zu sehen^n +Sag !score um die Spielerpunkte zu sehen +: +SCORES = Punkte +SLOW_DOWN = Langsam! Das ist noch die Aufwaermrunde! +SPAWNPROTECTED_KILL = Dein Kill zaehlte nicht, weil %%n%s%%e in den letzten %%g%i%%e Sekunden gespawnt ist +STATS = Statistiken +STATS_REGULAR = normale Statistiken +STATS_TEAMPLAY = Teamplay Statistiken +STILL_LEVEL_ONE = Du hast noch nicht mal Level 1 beendet! +STOLE_LEVEL = %%n%s%%e hat ein Level von %%g%s%%e gestohlen +STOLE_LEVEL_TEAM = %%n%s%%e stole %%g%i%%e points from %%g%s%%e (gained %%g%i%%e) +SUICIDE_LEVEL_DOWN = %%n%s%%e verlor ein Level wegen Selbstmord +SUICIDE_LEVEL_DOWN_TEAM = Das %%n%s%%e Team fiel auf Level %%g%i%%e zurueck wegen eines Selbstmordes +SUICIDE_SCORE_DOWN_TEAM = Das %%n%s%%e Team verliert %%g%i%%e Punkte wegen eines Selbstmordes +TEAM = Team +TIED_LEADER_MULTI = %%n%s%%e liegt gleichauf auf Level %%g%i%%e :: %%g%s%%e mit %%g%s%%e anderen +TIED_LEADER_ONE = %%n%s%%e liegt gleichauf auf Level %%g%i%%e :: %%g%s%%e mit %%g%s%%e +TIED_LEADER_TEAM = Beide Teams liegen auf Level %%g%i%%e :: %%g%s%%e +TK_LEVEL_DOWN = %%n%s%%e fiel aufgrund eines Teamkills auf Level %%g%i%%e zurueck +TK_LEVEL_DOWN_TEAM = Das %%n%s%%e Team fiel auf Level %%g%i%%e zurueck wegen eines Teamkills +TK_SCORE_DOWN = %%n%s%%e verlor %%g%i%%e Punkte fuer einen Teamkill +TK_SCORE_DOWN_TEAM = Das %%n%s%%e Team verliert %%g%i%%e Punkte wegen eines Teamkills +TOP_10 = Top 10 +TRAILING_ON_LEVEL_TEAM = Das %%n%s%%e Team folgt auf Level %%g%i%%e :: %%g%s%%e +TRIPLE_LEVELED = %%n%s%%e levelte dreifach!!! +UNRANKED = nicht Platziert +WARMUP_ROUND = Aufwaermrunde +WARMUP_ROUND_OVER = Aufwaermrunde vorbei! +WARMUP_ROUND_DISPLAY = Aufwaermrunde: Noch %i Sekunden +WEAPONS = Waffen +WELCOME_MESSAGE_LINE1 = Auf diesem Server laeuft GunGame %s von Avalanche +WELCOME_MESSAGE_LINE2 = Knife Pro ist \rAKTIVIERT!\w +WELCOME_MESSAGE_LINE3 = Turbo Modus ist \rAKTIVIERT!\w +WELCOME_MESSAGE_LINE4 = Knife Elite Modus ist \rAKTIVIERT!\w +WELCOME_MESSAGE_LINE5 = Deathmatch Modus ist \rAKTIVIERT!\w +WELCOME_MESSAGE_LINE6 = Teamplay Modus ist \rENABLED!\w +WELCOME_MESSAGE_LINE7 = Diese Runde hat \y%i\w Level! +WELCOME_MESSAGE_LINE8 : +Tippe !rules fuer Instruktionen, wie man den Mod spielt und um eine Liste der Befehle zu sehen^n +Tippe !level um Deine Levelinfo und den momentan Fuehrenden zu sehen^n +Tippe !score um eine Liste von allen Spielern, Punkten und Gewinnen in Deiner Konsole zu bekommen^n +: +WIN_MOTD_LINE1 = %s gewinnt! +WIN_MOTD_LINE2 = Das %sen Team +WIN_MOTD_LINE3 = ist der Gewinner! +WIN_MOTD_LINE4A = Der letzte %s wurde gemacht gegen %s +WIN_MOTD_LINE4B = Der letzte %s Kill wurde gemacht gegen %s durch %s +WIN_MOTD_LINE5A = Dieses war %s's %i%s Sieg,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_REG = Das ist %s's %i%s normaler Sieg,
und sein %i%s normaler Sieg in Folge (Sein Rekord: %i in Folge). +WIN_MOTD_LINE5A_TP = Das ist %s's %i%s teamplay Sieg,
und ihr %i%s Teamplay Sieg in Folge (Ihr Record: %i in Folge). +WIN_MOTD_LINE5B = %s hat nun insgesammt %i Punkte. +WIN_MOTD_LINE5B_REG = %s hat nun insgesamt %i normale Punkte. +WIN_MOTD_LINE5B_TP = %s hat nun insgesamt %i Teamplay Punkte. +WIN_MOTD_LINE5C = Das ist %s's %i%s Sieg, mit nun insgesammt %i Punkten,
und sein %i%s Sieg in Folge (sein Rekord: %i in Folge). +WIN_MOTD_LINE5C_REG = Das ist %s's %i%s normaler Sieg, fuer insgesamt %i Punkte,
und sein %i%s normler Sieg in Folge(sein Rekord: %i in Folge). +WIN_MOTD_LINE5C_TP = Das ist %s's %i%s Teamplay Sieg, fuer insgesamt %i Punkte,
und sein %i%s Teamplay Sieg in Folge(sein Rekord: %i in Folge). +WIN_MOTD_LINE6 = Du warst zu %i%% deiner Spielzeit im Gewinner-Team. +WIN_MOTD_LINE7A = Du hast nun insgesamt %i Siege.

Das ist dein %i%s Sieg in Folge (dein Rekord: %i in Folge). +WIN_MOTD_LINE7A_REG = Du hast nun insgesamt %i regular wins.

This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_TP = Du hast nun insgesamt %i teamplay wins.

This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_LINE7B = Du hast Du hast nun insgesamt %i Siege. +WIN_MOTD_LINE7B_REG = Du hast nun insgesamt %i normale Siege. +WIN_MOTD_LINE7B_TP = Du hast nun insgesamt %i Teamplay Siege. +WIN_MOTD_LINE7C = Du erhaelst %i Punkte, und hast nun insgesammt %i Punkte und %i Siege! +WIN_MOTD_LINE7C_REG = Du erhaelst %i normale Punkte, fuer nun insgesamt %i Punkte und %i Siege! +WIN_MOTD_LINE7C_TP = Du erhaelst %i Teamplay Punkte, fuer nun insgesamt %i Punkte und %i Siege! +WIN_MOTD_LINE8A = Die naechste Map wird %s sein +WIN_MOTD_LINE8B = Es ist noch eine Runde auf dieser Map uebrig. +WIN_MOTD_LINE8C = Es sind noch %i Runden auf dieser Map uebrig. +WIN_MOTD_STREAK1 = Das ist dein %i%s Sieg in Folge (your record: %i in a row). +WIN_MOTD_STREAK1_REG = Das ist dein %i%s Sieg in Folge (your record: %i in a row). +WIN_MOTD_STREAK1_TP = Das ist dein %i%s Teamplay Sieg in Folge (your record: %i in a row). +WIN_MOTD_STREAK2 = Dein Serienrekord ist %i Siege in Folge. +WIN_MOTD_STREAK2_REG = Dein normaler Serienrekord ist %i Siege in Folge. +WIN_MOTD_STREAK2_TP = Dein Teamplay Serienrekord ist %i Siege in Folge. +WIN_MOTD_STREAK3 = Die Allzeit-Rekord Serie, %i Siege in Folge, wurde gestellt von %s. +WIN_MOTD_STREAK3_REG = Die Allzeit-Rekord Serie fuer normal, %i Siege in Folge, wurde gestellt von %s. +WIN_MOTD_STREAK3_TP = Die Allzeit-Rekord Serie fuer Teamplay, %i Siege in Folge, wurde gestellt von %s. +WIN_MOTD_STREAK4 = %s hat einen neuen Allzeit-Rekord gestellt mit %i Siege in Folge! +WIN_MOTD_STREAK4_REG = %s hat einen neuen Allzeit-Rekord fuer normal gestellt mit %i Siege in Folge! +WIN_MOTD_STREAK4_TP = %s hat einen neuen Allzeit-Rekord fuer Teamplay gestellt mit %i Siege in Folge! +WINS = Siege +WON = %%n%s%%e gewinnt +WON_TEAM = Das %%n%s%%e Team hat gewonnen +YES_REGULAR = Ja, normaler Modus +YES_TEAMPLAY = Ja, Teamplay Modus + +[nl] +AFK_KILL = Your kill did not count because %%n%s%%e was AFK +AUTOVOTE_RES1 = Playing GunGame with teamplay mode +AUTOVOTE_RES2 = Playing regular GunGame +AUTOVOTE_RES3 = Not playing GunGame +CANCEL = Anuleer +CLOSE = Sluit +FRIENDLYFIRE_ON = %%gVriendschapelijk vuur is aan!!!%%e Let op waar je schiet! +GAINED_POINTS = You have just gained %%g%i%%e points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_REG = You have just gained %%g%i%%e regular points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_TP = You have just gained %%g%i%%e teamplay points, for a total of %%g%i%%e points with %%g%i%%e wins! +GUNGAME = GunGame +HK_LEVEL_DOWN = %%n%s%%e ging terug naar level %%g%i%%e voor het doden van een hostage +HK_SCORE_DOWN = %%n%s%%e verloor %%g%i%%e punten voor het doden van een hostage +HK_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for a hostage kill +HK_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for a hostage kill +IN_A_ROW = %i in a row +JUMP_TO_ME = Jump to me +LEADER = Leider +LEADING_ON_LEVEL = %%n%s%%e is aan de leiding op level%%g%i%%e :: %%g%s%%e +LEADING_ON_LEVEL_TEAM = The %%n%s%%e team is leading on level %%g%i%%e :: %%g%s%%e +LEVEL = Level +LEVEL_MESSAGE_LINE1A = Je hebt %i/%i gemaakt van je gevraagde kills +LEVEL_MESSAGE_LINE1B = Your team has made %i/%i of its required kills +LEVEL_MESSAGE_LINE2A = Je ben in de leiding +LEVEL_MESSAGE_LINE2B = Je staat gelijk voor de eerste plaats +LEVEL_MESSAGE_LINE2C = Je bent %i levels achter de leide +LEVEL_MESSAGE_LINE3A = Je hebt %i gewonnen +LEVEL_MESSAGE_LINE3A_REG = You have %i regular wins +LEVEL_MESSAGE_LINE3A_TP = You have %i teamplay wins +LEVEL_MESSAGE_LINE3B = You have accumulated %i points over %i wins +LEVEL_MESSAGE_LINE3B_REG = You have accumulated %i regular points over %i wins +LEVEL_MESSAGE_LINE3B_TP = You have accumulated %i teamplay points over %i wins +LEVEL_MESSAGE_LINE3C = You have won %i times (ranked %i%s) +LEVEL_MESSAGE_LINE3D = You have accumulated %i points over %i wins (ranked %i%s) +LEVEL_MESSAGE_LINE4 = Your record streak is %i wins in a row +LEVEL_MESSAGE_LINE4_REG = Your record regular streak is %i wins in a row +LEVEL_MESSAGE_LINE4_TP = Your record teamplay streak is %i wins in a row +LEVEL_MESSAGE_LINE5A = Leiders momenteel: %s +LEVEL_MESSAGE_LINE5B = leider momenteel: %s +LEVEL_MESSAGE_LINE6 = leider level: %i (%s) +LEVELS_BEHIND_LEADER = Je bent %%g%i%%e levels achter de leider +NEXT = Volgende +NONE = Geen +NO_ONE = no one +NO_WIN_LOGGING = De server heefd win logging afgezet +NOW_ON_LEVEL = Je level is nu +ON_LEVEL = Je bent op level +ON_LEVEL_TEAM = Your team is on level +PLAY_GUNGAME = Speel GunGame? +PLAYER_RESET = %%n%s%%e zijn level staat terug op%%g1%%e +POINTS = punten +POINTS_ABBR = pts +PRESS_KEY_TO_CONTINUE = Druk op een toets om verder te doen +PREVIOUS = Vorige +PROGRESS_DISPLAY = Je hebt zoveel %%n%i%%e kills om te advanceren. Score: %%n%i / %i%%e +PROGRESS_DISPLAY1 = You are in the lead by %i levels +PROGRESS_DISPLAY2 = You are tied for the lead with %s +PROGRESS_DISPLAY3 = You are tied for the lead with %s others +PROGRESS_DISPLAY4 = You are %i levels behind the leader +PROGRESS_DISPLAY_TEAM1 = Your team is in the lead by %i levels +PROGRESS_DISPLAY_TEAM2 = Your team is tied with the other team +PROGRESS_DISPLAY_TEAM3 = Your team is %i levels behind the other team +PRUNING = Pruning %s: %i plaatsen zijn weg +RECORD_STREAK = Record Streak: %s (%i in a row) +REQUIRED_KILLS = Nodige kills +RESET_NOT_ALLOWED = You cannot reset your level during Teamplay Mode! +RESET_QUERY = Ben je zeker dat je^nTerug van level 1 wilt beginnen ? +RESPAWN_COUNTDOWN = Je komt terug in leven in %i seconds +RULES = Regels +RULES_CONSOLE_LINE1 = %i) Je moet een kill hebben met je huidige wapen voor naar het volgende level te gaan. +RULES_CONSOLE_LINE2 = %i) Als je een kill maakt men een ander wapen dan zal dat niet mee tellen en je level zal blijven. +RULES_CONSOLE_LINE3 = %i) Je krijgt levels door te PLANTEN en te DEFUSEN +RULES_CONSOLE_LINE4 = %i) Als je zelfmoord pleegt, zal je een level verliezen. +RULES_CONSOLE_LINE5 = %i) Vriendschapelijk vuur is aan waneer iemand de GRENADE level bereikt is. +RULES_CONSOLE_LINE6A = %i) Je kunt meer dan 1 level krijgen per ronde. +RULES_CONSOLE_LINE6B = %i) Je kunt maar 1 level krijgen per ronde. +RULES_CONSOLE_LINE6C = %i) Je kan %i levels Krijgen per ronde. +RULES_CONSOLE_LINE7 = %i) ER is een safe peroide op het einde van de ronde zo kan je van team veranderen. +RULES_CONSOLE_LINE8 = %i) Omdat Knife Pro aan is , kan je levels stelen van een tegenstander door hem met een knife te doden. +RULES_CONSOLE_LINE9 = %i) Omdat Turbo Mode aan is , zal je derickt je volgende wapen krijgen en een level hoger zijn. +RULES_CONSOLE_LINE10 = %i) Because Knife Elite Mode is enabled, once you level up you will have to use a knife until the next round. +RULES_CONSOLE_LINE11 = %i) Omdat Deathmatch Mode aan is , Zal je altijd open nieuw tot leven komen. +RULES_CONSOLE_LINE12 = %i) Because Teamplay Mode is enabled, you will gain points as a team instead of individually. +RULES_CONSOLE_LINE13 = Zeg !level voor je level te zien en te zien wie er aan het winnen is. +RULES_CONSOLE_LINE14 = Zeg !weapons om de wapen volgorde te zien. +RULES_CONSOLE_LINE15 = Zeg !score voor iedereen zijn score te zien. +RULES_CONSOLE_LINE16 = Zeg !top10 voor de top10 winnaars te zien in deze server. +RULES_CONSOLE_LINE17 = Zeg !restart voor terug op level 1 te beginnen. +RULES_MESSAGE_LINE1 = Spel regels en alles zeg commands zijn nu zichtbaar in de console. +RULES_MESSAGE_LINE2 = Een paar bruikbare commands: +RULES_MESSAGE_LINE3 : +Zeg !top10 voor de top10 winnaars te zien in deze server^n +Zeg !level voor je level te zien en te zien wie er aan het winnen is^n +Zeg !weapons om de wapen volgorde te zien^n +Zeg !score voor iedereen zijn score te zien +: +SCORES = Scores +SLOW_DOWN = Rustin aan! dit is nog altijd de opwarm ronde! +SPAWNPROTECTED_KILL = Je kill telde niet mee omdat%%n%s%%e spawned in de laaste %%g%i%%e seconden. +STATS = Stats +STATS_REGULAR = Regular Stats +STATS_TEAMPLAY = Teamplay Stats +STILL_LEVEL_ONE = Je bent zelf nog niet voorbij level 1! +STOLE_LEVEL = %%n%s%%e steelde een level van%%g%s%%e +STOLE_LEVEL_TEAM = %%n%s%%e stole %%g%i%%e points from %%g%s%%e (gained %%g%i%%e) +SUICIDE_LEVEL_DOWN = %%n%s%%e verloor een level door zelfmoord +SUICIDE_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for a suicide +SUICIDE_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for a suicide +TEAM = team +TIED_LEADER_MULTI = %%n%s%%e is tied on level %%g%i%%e :: %%g%s%%e with %%g%s%%e others +TIED_LEADER_ONE = %%n%s%%e is tied on level %%g%i%%e :: %%g%s%%e with %%g%s%%e +TIED_LEADER_TEAM = The teams are tied on level %%g%i%%e :: %%g%s%%e +TK_LEVEL_DOWN = %%n%s%%e Is terug tot level%%g%i%%e voor een teammember te doden +TK_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for team killing +TK_SCORE_DOWN = %%n%s%%e verloor %%g%i%%e punten voor een teammember te doden +TK_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for team killing +TOP_10 = Top 10 +TRAILING_ON_LEVEL_TEAM = The %%n%s%%e team is trailing on level %%g%i%%e :: %%g%s%%e +TRIPLE_LEVELED = %%n%s%%e triple leveled!!! +UNRANKED = unranked +WARMUP_ROUND = Opwarm ronde +WARMUP_ROUND_OVER = Opwarm ronde is over! +WARMUP_ROUND_DISPLAY = Opwarm ronde: %i seconden over +WEAPONS = Wapens +WELCOME_MESSAGE_LINE1 = Deze server heefd GunGame %s by Avalanche +WELCOME_MESSAGE_LINE2 = Knife Pro is \rAAN!\w +WELCOME_MESSAGE_LINE3 = Turbo Mode is \rAAN!\w +WELCOME_MESSAGE_LINE4 = Knife Elite Mode is \rENABLED!\w +WELCOME_MESSAGE_LINE5 = Deathmatch Mode is \rAAN!\w +WELCOME_MESSAGE_LINE6 = Teamplay Mode is \rENABLED!\w +WELCOME_MESSAGE_LINE7 = There are \y%i\w levels this round! +WELCOME_MESSAGE_LINE8 : +Type !rules voor instructies om te spelen en een lijst met^n +Type !level om je level te zien en te zien wie de leider is^n +Type !score om een lijst van alle scores te zien in je console^n +: +WIN_MOTD_LINE1 = %s won! +WIN_MOTD_LINE2 = the %s team +WIN_MOTD_LINE3 = is the winner! +WIN_MOTD_LINE4A = The final %s kill was made against %s +WIN_MOTD_LINE4B = The final %s kill was made against %s by %s +WIN_MOTD_LINE5A = This is %s's %i%s win,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_REG = This is %s's %i%s regular win,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_TP = This is %s's %i%s teamplay win,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE5B = %s now has a total of %i points. +WIN_MOTD_LINE5B_REG = %s now has a total of %i regular points. +WIN_MOTD_LINE5B_TP = %s now has a total of %i teamplay points. +WIN_MOTD_LINE5C = This is %s's %i%s win, for a total of %i points,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_REG = This is %s's %i%s regular win, for a total of %i points,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_TP = This is %s's %i%s teamplay win, for a total of %i points,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE6 = You spent %i%% of your time contributing to the winning team. +WIN_MOTD_LINE7A = You now have a total of %i wins.

This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_REG = You now have a total of %i regular wins.

This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_TP = You now have a total of %i teamplay wins.

This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_LINE7B = You have a total of %i wins. +WIN_MOTD_LINE7B_REG = You have a total of %i regular wins. +WIN_MOTD_LINE7B_TP = You have a total of %i teamplay wins. +WIN_MOTD_LINE7C = You have just gained %i points, for a total of %i points with %i wins! +WIN_MOTD_LINE7C_REG = You have just gained %i regular points, for a total of %i points with %i wins! +WIN_MOTD_LINE7C_TP = You have just gained %i teamplay points, for a total of %i points with %i wins! +WIN_MOTD_LINE8A = The next map will be %s +WIN_MOTD_LINE8B = There is one round of this map left. +WIN_MOTD_LINE8C = There are %i rounds of this map left. +WIN_MOTD_STREAK1 = This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_REG = This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_TP = This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_STREAK2 = Your record streak is %i wins in a row. +WIN_MOTD_STREAK2_REG = Your record regular streak is %i wins in a row. +WIN_MOTD_STREAK2_TP = Your record teamplay streak is %i wins in a row. +WIN_MOTD_STREAK3 = The all-time record streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_REG = The all-time record regular streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_TP = The all-time record teamplay streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK4 = %s just set a new all-time record streak with %i wins in a row! +WIN_MOTD_STREAK4_REG = %s just set a new all-time record regular streak with %i wins in a row! +WIN_MOTD_STREAK4_TP = %s just set a new all-time record teamplay streak with %i wins in a row! +WINS = winnen +WON = %%n%s%%e gewonnen +WON_TEAM = The %%n%s%%e team won +YES_REGULAR = Yes, regular mode +YES_TEAMPLAY = Yes, teamplay mode + +[fr] +AFK_KILL = Ton frag ne compte pas car %%n%s%%e est AFK +AUTOVOTE_RES1 = GunGame en Equipe +AUTOVOTE_RES2 = GunGame en Individuel +AUTOVOTE_RES3 = Pas de GunGame +CANCEL = Annuler +CLOSE = Fermer +FRIENDLYFIRE_ON = %%gLe mode Friendly Fire est ACTIF !!%%e Fais attention ou tu tires ! +GAINED_POINTS = You have just gained %%g%i%%e points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_REG = You have just gained %%g%i%%e regular points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_TP = You have just gained %%g%i%%e teamplay points, for a total of %%g%i%%e points with %%g%i%%e wins! +GUNGAME = GunGame +HK_LEVEL_DOWN = %%n%s%%e revient au niveau %%g%i%%e pour avoir tuer un otage +HK_SCORE_DOWN = %%n%s%%e perd %%g%i%%e points pour avoir tuer un otage +HK_LEVEL_DOWN_TEAM = Les %%n%s%%e retournent au niveau %%g%i%%e pour avoir tuer un otage +HK_SCORE_DOWN_TEAM = Les %%n%s%%e perdent %%g%i%%e points pour avoir tuer un otage +IN_A_ROW = %i in a row +JUMP_TO_ME = Suivre le lien +LEADER = Meneur +LEADING_ON_LEVEL = %%n%s%%e mene le jeu au niveau %%g%i%%e :: %%g%s%%e +LEADING_ON_LEVEL_TEAM = Les %%n%s%%e mene le jeu au niveau %%g%i%%e :: %%g%s%%e +LEVEL = Niveau +LEVEL_MESSAGE_LINE1A = Tu as fait %i/%i des frags requis +LEVEL_MESSAGE_LINE1B = Ton equipe a deja fait %i/%i des frags requis +LEVEL_MESSAGE_LINE2A = Tu es en tete +LEVEL_MESSAGE_LINE2B = Tu rattrapes la premiere place +LEVEL_MESSAGE_LINE2C = Tu es a %i niveau derriere le meneur +LEVEL_MESSAGE_LINE3A = Tu as gagne %i fois +LEVEL_MESSAGE_LINE3A_REG = You have %i regular wins +LEVEL_MESSAGE_LINE3A_TP = You have %i teamplay wins +LEVEL_MESSAGE_LINE3B = You have accumulated %i points over %i wins +LEVEL_MESSAGE_LINE3B_REG = You have accumulated %i regular points over %i wins +LEVEL_MESSAGE_LINE3B_TP = You have accumulated %i teamplay points over %i wins +LEVEL_MESSAGE_LINE3C = Tu as gagne %i fois (classement %i%s) +LEVEL_MESSAGE_LINE3D = Tu as accumule %i points avec tes %i victoires (classement %i%s) +LEVEL_MESSAGE_LINE4 = Your record streak is %i wins in a row +LEVEL_MESSAGE_LINE4_REG = Your record regular streak is %i wins in a row +LEVEL_MESSAGE_LINE4_TP = Your record teamplay streak is %i wins in a row +LEVEL_MESSAGE_LINE5A = Meneurs actuels : %s +LEVEL_MESSAGE_LINE5B = Meneur actuel : %s +LEVEL_MESSAGE_LINE6 = Niveau du meneur : %i (%s) +LEVELS_BEHIND_LEADER = Tu es maintenant a %%g%i%%e niveau(x) derriere le meneur +NEXT = Suivant +NONE = aucun +NO_ONE = personne +NO_WIN_LOGGING = Ce serveur n'archive pas les gagnants du jeu +NOW_ON_LEVEL = Tu es maintenant au niveau +ON_LEVEL = Tu es au niveau +ON_LEVEL_TEAM = Ton equipe est au niveau +PLAY_GUNGAME = Veux-tu jouer au mode GunGame? +PLAYER_RESET = %%n%s%%e revient de lui-meme au niveau %%g1%%e +POINTS = points +POINTS_ABBR = pts +PRESS_KEY_TO_CONTINUE = Appuie sur n'importe quelle touche numerique pour continuer... +PREVIOUS = Precedent +PROGRESS_DISPLAY = Tu as besoin de %%n%i%%e frag(s) pour avancer. Score : %%n%i / %i%%e +PROGRESS_DISPLAY1 = Tu es en tete de %i niveaux +PROGRESS_DISPLAY2 = Tu partages la tete avec %s +PROGRESS_DISPLAY3 = Tu partages la tete avec %s autres joueurs +PROGRESS_DISPLAY4 = Tu es %i niveaux en dessous du meneur +PROGRESS_DISPLAY_TEAM1 = Ton equipe est en tete de %i niveaux +PROGRESS_DISPLAY_TEAM2 = Ton equipe partage la tete avec l'autre equipe +PROGRESS_DISPLAY_TEAM3 = Ton equipe est %i niveau en dessous de l'autre equipe +PRUNING = Delestage %s : %i entrees effacees +RECORD_STREAK = Record Streak: %s (%i in a row) +REQUIRED_KILLS = Frags requis +RESET_NOT_ALLOWED = Tu ne peux pas revenir au niveau 1 pendant une partie en equipe ! +RESET_QUERY = Es-tu SUR de vouloir^nrevenir au niveau 1 ? +RESPAWN_COUNTDOWN = Tu vas ressuciter dans %i seconde(s) +RULES = Regles +RULES_CONSOLE_LINE1 = %i) Tu dois tuer avec la meme arme courante pour augmenter de niveau. +RULES_CONSOLE_LINE2 = %i) Si tu obtiens un frag avec une autre arme, le frag ne comptera pas et tu reviendras a ton niveau d'avant. +RULES_CONSOLE_LINE3 = %i) Tu peux gagner des niveaux en PLANTANT et DEFUSANT la bombe. +RULES_CONSOLE_LINE4 = %i) Si tu commets un suicide, tu perdras un niveau. +RULES_CONSOLE_LINE5 = %i) Le mode Friendly Fire est ACTIF lorsqu'un joueur atteint le niveau GRENADE. +RULES_CONSOLE_LINE6A = %i) Tu PEUX gagner plus d'un niveau par partie. +RULES_CONSOLE_LINE6B = %i) Tu peux uniquement gagner un niveau par partie. +RULES_CONSOLE_LINE6C = %i) Tu peux gagner jusqu'a %i niveaux par partie. +RULES_CONSOLE_LINE7 = %i) Il y a une periode de grace a la fin de chaque partie qui autorise les joueurs a changer d'equipe. +RULES_CONSOLE_LINE8 = %i) Si le mode Knife Pro est actif, tu peux voler un niveau sur un ennemi en le tuant au couteau. +RULES_CONSOLE_LINE9 = %i) Si le mode Turbo est actif, tu recevras ta prochaine arme immediatement lorsque tu augmentes de niveau. +RULES_CONSOLE_LINE10 = %i) Si le mode Knife Elite est actif, une fois que tu as gagne un niveau tu dois utiliser le couteau jusqu'au prochain round. +RULES_CONSOLE_LINE11 = %i) Si le mode Deathmatch est actif, tu seras ressucites indefiniment. +RULES_CONSOLE_LINE12 = %i) Si le mode Teamplay est actif, tu gagneras des points pour ton equipe et non pour toi. +RULES_CONSOLE_LINE13 = Tape !level pour voir ton niveau actuel et qui est en train de gagner. +RULES_CONSOLE_LINE14 = Tape !weapons pour voir l'ordre des armes. +RULES_CONSOLE_LINE15 = Tape !score pour voir les scores actuels de tous les joueurs. +RULES_CONSOLE_LINE16 = Tape !top10 pour voir le top 10 des gagnants sur le serveur. +RULES_CONSOLE_LINE17 = Tape !restart pour revenir au niveau 1. +RULES_MESSAGE_LINE1 = Les regles du jeu et toutes les commandes du chat sont maintenant listes dans ta console +RULES_MESSAGE_LINE2 = Quelques commandes utiles: +RULES_MESSAGE_LINE3 : +Tape !top10 pour voir le Top 10 des joueurs sur ce serveur^n +Tape !level pour voir ton niveau actuel et qui est en train de gagner^n +Tape !weapons pour voir l'ordre des armes^n +Tape !score pour les scores de toutes les joueurs +: +SCORES = Scores +SLOW_DOWN = Hop ! Un petit echauffement avant de commencer ! +SPAWNPROTECTED_KILL = Ton frag ne compte pas car %%n%s%%e a ete ressucite dans les dernieres %%g%i%%e secondes +STATS = Stats +STATS_REGULAR = Regular Stats +STATS_TEAMPLAY = Teamplay Stats +STILL_LEVEL_ONE = Tu n'as meme pas encore passe le niveau 1 ! +STOLE_LEVEL = %%n%s%%e a vole un niveau a %%g%s%%e +STOLE_LEVEL_TEAM = %%n%s%%e a vole %%g%i%%e points a %%g%s%%e (gagne %%g%i%%e) +SUICIDE_LEVEL_DOWN = %%n%s%%e perd un niveau pour suicide +SUICIDE_LEVEL_DOWN_TEAM = Les %%n%s%%e retournent au niveau %%g%i%%e a cause d'un suicide +SUICIDE_SCORE_DOWN_TEAM = Les %%n%s%%e perdent %%g%i%%e points a cause d'un suicide +TEAM = equipe +TIED_LEADER_MULTI = %%n%s%%e est en tete au niveau %%g%i%%e :: %%g%s%%e avec %%g%s%%e autres +TIED_LEADER_ONE = %%n%s%%e est en tete au niveau %%g%i%%e :: %%g%s%%e avec %%g%s%%e +TIED_LEADER_TEAM = Les 2 equipes partagent la tete au niveau %%g%i%%e :: %%g%s%%e +TK_LEVEL_DOWN = %%n%s%%e revient au niveau %%g%i%%e pour avoir tue un equipier +TK_LEVEL_DOWN_TEAM = Les %%n%s%%e retournent au niveau %%g%i%%e pour avoir tue un equipier +TK_SCORE_DOWN = %%n%s%%e perd %%g%i%%e points pour avoir tue un equipier +TK_SCORE_DOWN_TEAM = Les %%n%s%%e perdent %%g%i%%e points pour avoir tue un equipier +TOP_10 = Top 10 +TRAILING_ON_LEVEL_TEAM = Les %%n%s%%e se trainent au niveau %%g%i%%e :: %%g%s%%e +TRIPLE_LEVELED = %%n%s%%e obtient un bonus pour avoir fragge 3 fois a la suite !!! +UNRANKED = Non classe +WARMUP_ROUND = Partie d'echauffement +WARMUP_ROUND_OVER = Fin de la partie d'echauffement ! +WARMUP_ROUND_DISPLAY = Partie d'echauffement : %i seconde(s) restante(s) +WEAPONS = Armes +WELCOME_MESSAGE_LINE1 = GunGame est en fonctionnement sur ce serveur %s par Avalanche +WELCOME_MESSAGE_LINE2 = Le mode Knife Pro est \rACTIF !\w +WELCOME_MESSAGE_LINE3 = Le mode Turbo est \rACTIF !\w +WELCOME_MESSAGE_LINE4 = Le mode Knife Elite est \rACTIF !\w +WELCOME_MESSAGE_LINE5 = Le mode Deathmatch est \rACTIF !\w +WELCOME_MESSAGE_LINE6 = Le mode par equipe (Teamplay) est \rACTIF !\w +WELCOME_MESSAGE_LINE7 = Il y a \y%i\w niveau a passer ! +WELCOME_MESSAGE_LINE8 : +Tape !rules pour obtenir les instructions sur comment jouer et une liste des commandes^n +Tape !level pour connaitre ton level actuel et qui est le meneur^n +Tape !score pour afficher la liste des scores de tous les joueurs et des gagnants dans ta console^n +: +WIN_MOTD_LINE1 = %s gagne ! +WIN_MOTD_LINE2 = L'equipe des %s +WIN_MOTD_LINE3 = a gagne ! +WIN_MOTD_LINE4A = Le dernier %s frag a ete fait contre %s +WIN_MOTD_LINE4B = Le dernier %s frag a ete fait contre %s par %s +WIN_MOTD_LINE5A = %s remporte sa %i%s eme victoire,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_REG = This is %s's %i%s regular win,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_TP = This is %s's %i%s teamplay win,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE5B = %s cumule maintenant un total de %i points. +WIN_MOTD_LINE5B_REG = %s now has a total of %i regular points. +WIN_MOTD_LINE5B_TP = %s now has a total of %i teamplay points. +WIN_MOTD_LINE5C = %s remporte sa %i%s eme victoire, il cumule un total de %i points,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_REG = This is %s's %i%s regular win, for a total of %i points,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_TP = This is %s's %i%s teamplay win, for a total of %i points,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE6 = Tu as passe %i%% de ton temps dans l'equipe victorieuse. +WIN_MOTD_LINE7A = Tu as maintenant un total de %i victoires.

This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_REG = You now have a total of %i regular wins.

This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_TP = You now have a total of %i teamplay wins.

This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_LINE7B = Tu as un total de %i victoires. +WIN_MOTD_LINE7B_REG = You have a total of %i regular wins. +WIN_MOTD_LINE7B_TP = You have a total of %i teamplay wins. +WIN_MOTD_LINE7C = Tu viens juste de gagner %i points, et tu as %i points au total avec %i victoires! +WIN_MOTD_LINE7C_REG = You have just gained %i regular points, for a total of %i points with %i wins! +WIN_MOTD_LINE7C_TP = You have just gained %i teamplay points, for a total of %i points with %i wins! +WIN_MOTD_LINE8A = La prochaine map sera %s +WIN_MOTD_LINE8B = Il y a one round avant la fin de la map. +WIN_MOTD_LINE8C = Il y a %i rounds avant la fin de la map. +WIN_MOTD_STREAK1 = This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_REG = This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_TP = This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_STREAK2 = Your record streak is %i wins in a row. +WIN_MOTD_STREAK2_REG = Your record regular streak is %i wins in a row. +WIN_MOTD_STREAK2_TP = Your record teamplay streak is %i wins in a row. +WIN_MOTD_STREAK3 = The all-time record streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_REG = The all-time record regular streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_TP = The all-time record teamplay streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK4 = %s just set a new all-time record streak with %i wins in a row! +WIN_MOTD_STREAK4_REG = %s just set a new all-time record regular streak with %i wins in a row! +WIN_MOTD_STREAK4_TP = %s just set a new all-time record teamplay streak with %i wins in a row! +WINS = gagne +WON = %%n%s%%e gagne +WON_TEAM = Les %%n%s%%e ont gagnes ! +YES_REGULAR = Oui, en Individuel +YES_TEAMPLAY = Oui, en Equipe + +[cn] +AFK_KILL = Your kill did not count because %%n%s%%e was AFK +AUTOVOTE_RES1 = Playing GunGame with teamplay mode +AUTOVOTE_RES2 = Playing regular GunGame +AUTOVOTE_RES3 = Not playing GunGame +CANCEL = å–消 +CLOSE = 关闭 +FRIENDLYFIRE_ON = %%gå‹å†›ä¼¤å®³-打开!!!%%e è¦å°å¿ƒå“¦! +GAINED_POINTS = You have just gained %%g%i%%e points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_REG = You have just gained %%g%i%%e regular points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_TP = You have just gained %%g%i%%e teamplay points, for a total of %%g%i%%e points with %%g%i%%e wins! +GUNGAME = GunGame +HK_LEVEL_DOWN = %%n%s%%e 因为æ€æ­»äººè´¨è€Œè¢«é™åˆ° %%g%i%%e 级别 +HK_SCORE_DOWN = %%n%s%%e 因为æ€æ­»äººè´¨è€Œè¢«æ‰£äº† %%g%i%%e 分 +HK_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for a hostage kill +HK_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for a hostage kill +IN_A_ROW = %i in a row +JUMP_TO_ME = Jump to me +LEADER = 领导 +LEADING_ON_LEVEL = %%n%s%%e 领先于级别 %%g%i%%e :: %%g%s%%e +LEADING_ON_LEVEL_TEAM = The %%n%s%%e team is leading on level %%g%i%%e :: %%g%s%%e +LEVEL = Level +LEVEL_MESSAGE_LINE1A = ä½ å·²ç»å®Œæˆ %i/%i çš„æ€äººä»»åŠ¡ +LEVEL_MESSAGE_LINE1B = Your team has made %i/%i of its required kills +LEVEL_MESSAGE_LINE2A = ä½ å¤„äºŽé¢†å…ˆçŠ¶æ€ +LEVEL_MESSAGE_LINE2B = ä½ å·²ç»å¤±åŽ»äº†é¢†å…ˆä½ç½® +LEVEL_MESSAGE_LINE2C = 你比领先的è½åŽ %i 个级别 +LEVEL_MESSAGE_LINE3A = 你赢得了 %i 次 +LEVEL_MESSAGE_LINE3A_REG = You have %i regular wins +LEVEL_MESSAGE_LINE3A_TP = You have %i teamplay wins +LEVEL_MESSAGE_LINE3B = You have accumulated %i points over %i wins +LEVEL_MESSAGE_LINE3B_REG = You have accumulated %i regular points over %i wins +LEVEL_MESSAGE_LINE3B_TP = You have accumulated %i teamplay points over %i wins +LEVEL_MESSAGE_LINE3C = You have won %i times (ranked %i%s) +LEVEL_MESSAGE_LINE3D = You have accumulated %i points over %i wins (ranked %i%s) +LEVEL_MESSAGE_LINE4 = Your record streak is %i wins in a row +LEVEL_MESSAGE_LINE4_REG = Your record regular streak is %i wins in a row +LEVEL_MESSAGE_LINE4_TP = Your record teamplay streak is %i wins in a row +LEVEL_MESSAGE_LINE5A = 当å‰é¢†å…ˆè€…: %s +LEVEL_MESSAGE_LINE5B = 当å‰é¢†å…ˆè€…: %s +LEVEL_MESSAGE_LINE6 = 当å‰é¢†å…ˆè€…级别: %i (%s) +LEVELS_BEHIND_LEADER = 你比领先的è½åŽ %%g%i%%e 级别 +NEXT = 下一个 +NO = å¦ +NONE = æ—  +NO_ONE = no one +NO_WIN_LOGGING = æœåŠ¡å™¨å½“å‰ç¦æ­¢æ—¥å¿— +NOW_ON_LEVEL = 你的当å‰çº§åˆ« +ON_LEVEL = 你的当å‰çº§åˆ« +ON_LEVEL_TEAM = Your team is on level +PLAY_GUNGAME = å¯åŠ¨ GunGame 模å¼? +PLAYER_RESET = %%n%s%%e é‡ç½®è‡ªå·±çš„æˆç»©è¿”回到级别 %%g1%%e +POINTS = 分 +POINTS_ABBR = pts +PRESS_KEY_TO_CONTINUE = 按任æ„数字键继续 +PREVIOUS = 上一个 +PROGRESS_DISPLAY = 你需è¦æ€ %%n%i%%e 人æ¥èŽ·å¾—å‡çº§. 分数: %%n%i / %i%%e +PROGRESS_DISPLAY1 = You are in the lead by %i levels +PROGRESS_DISPLAY2 = You are tied for the lead with %s +PROGRESS_DISPLAY3 = You are tied for the lead with %s others +PROGRESS_DISPLAY4 = You are %i levels behind the leader +PROGRESS_DISPLAY_TEAM1 = Your team is in the lead by %i levels +PROGRESS_DISPLAY_TEAM2 = Your team is tied with the other team +PROGRESS_DISPLAY_TEAM3 = Your team is %i levels behind the other team +PRUNING = 修剪 %s: %i 个è¯æ¡åŽ»é™¤äº† +RECORD_STREAK = Record Streak: %s (%i in a row) +REQUIRED_KILLS = 需è¦æ€æ­» +RESET_NOT_ALLOWED = You cannot reset your level during Teamplay Mode! +RESET_QUERY = 你确定你真的需è¦^né‡ç½®è‡ªå·±çš„æˆç»©è¿”回到级别 1? +RESPAWN_COUNTDOWN = 你将在 %i 秒åŽé‡ç”Ÿ +RULES = 规则 +RULES_CONSOLE_LINE1 = %i) 你必须使用当å‰çš„武器æ€äººæ‰èƒ½èŽ·å¾—å‡çº§. +RULES_CONSOLE_LINE2 = %i) å‡å¦‚你使用了éžæŒ‡å®šæ­¦å™¨æ€äºº, æ€äººæˆç»©å°†è¢«å¿½ç•¥. +RULES_CONSOLE_LINE3 = %i) 放包或拆包, 你也å¯ä»¥èŽ·å¾—å‡çº§. +RULES_CONSOLE_LINE4 = %i) 如果你自æ€, 将会被é™çº§. +RULES_CONSOLE_LINE5 = %i) 但有人达到 GRENADE 武器级别,å‹å†›ä¼¤å®³å°†è¢«æ‰“å¼€. +RULES_CONSOLE_LINE6A = %i) 在一局里你å¯ä»¥èŽ·å¾—多次å‡çº§æœºä¼š. +RULES_CONSOLE_LINE6B = %i) 在一局里你åªèƒ½èŽ·å¾—一次å‡çº§æœºä¼š. +RULES_CONSOLE_LINE6C = %i) 在一局里你åªèƒ½èŽ·å¾— %i 次å‡çº§æœºä¼š. +RULES_CONSOLE_LINE7 = %i) å…许玩家在æ¯ä¸€å±€ç»“æŸæ—¶æ›´æ¢é˜Ÿä¼. +RULES_CONSOLE_LINE8 = %i) 当刀局开å¯æ—¶,当你用刀æ€æ­»å¯¹æ–¹æ—¶,å°†å·å–对方的级别. +RULES_CONSOLE_LINE9 = %i) 当加速开å¯æ—¶, ä½ çš„å‡çº§å°†é©¬ä¸Šåˆ°è¾¾ä¸‹ä¸€æ­¦å™¨çº§åˆ«. +RULES_CONSOLE_LINE10 = %i) Because Knife Elite Mode is enabled, once you level up you will have to use a knife until the next round. +RULES_CONSOLE_LINE11 = %i) 当死亡模å¼å¼€å¯æ—¶, 你将会死åŽæ— é™é‡ç”Ÿ. +RULES_CONSOLE_LINE12 = %i) Because Teamplay Mode is enabled, you will gain points as a team instead of individually. +RULES_CONSOLE_LINE13 = Say !level 命令查看你的当å‰çº§åˆ«ä¿¡æ¯åŠé¢†å…ˆè€…ä¿¡æ¯. +RULES_CONSOLE_LINE14 = Say !weapons 命令查看你的当å‰æ­¦å™¨çº§åˆ«. +RULES_CONSOLE_LINE15 = Say !score 命令查看所有玩家当å‰æˆç»©. +RULES_CONSOLE_LINE16 = Say !top10 命令查看æœåŠ¡å™¨å‰ 10 å玩家æˆç»©. +RULES_CONSOLE_LINE17 = Say !restart 命令é‡ç½®ä½ çš„æˆç»©,返回到原始级别 1. +RULES_MESSAGE_LINE1 = 游æˆè§„则和玩家å¯ç”¨å‘½ä»¤ +RULES_MESSAGE_LINE2 = 玩家命令: +RULES_MESSAGE_LINE3 : +Say !top10 命令查看æœåŠ¡å™¨å‰ 10 å玩家æˆç»©^n +Say !level 命令查看你的当å‰çº§åˆ«ä¿¡æ¯åŠé¢†å…ˆè€…ä¿¡æ¯^n +Say !weapons 命令查看你的当å‰æ­¦å™¨çº§åˆ«^n +Say !score 命令查看所有玩家当å‰æˆç»© +: +SCORES = æˆç»© +SLOW_DOWN = 别ç€æ€¥! 现在是热身时间! +SPAWNPROTECTED_KILL = 你当å‰çš„æ€äººæˆç»©å°†è¢«å¿½ç•¥,因为 %%n%s%%e åœ¨å‡ºç”ŸåŽ %%g%i%%e 秒内被你æ€æ­». +STATS = Stats +STATS_REGULAR = Regular Stats +STATS_TEAMPLAY = Teamplay Stats +STILL_LEVEL_ONE = ä½ ä¾ç„¶åœç•™åœ¨çº§åˆ« 1 ! +STOLE_LEVEL = %%n%s%%e 从 %%g%s%%e å·å–级别 +STOLE_LEVEL_TEAM = %%n%s%%e stole %%g%i%%e points from %%g%s%%e (gained %%g%i%%e) +SUICIDE_LEVEL_DOWN = %%n%s%%e 因为自æ€è€Œè¢«é™çº§ +SUICIDE_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for a suicide +SUICIDE_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for a suicide +TEAM = team +TIED_LEADER_MULTI = %%n%s%%e is tied on level %%g%i%%e :: %%g%s%%e with %%g%s%%e others +TIED_LEADER_ONE = %%n%s%%e is tied on level %%g%i%%e :: %%g%s%%e with %%g%s%%e +TIED_LEADER_TEAM = The teams are tied on level %%g%i%%e :: %%g%s%%e +TK_LEVEL_DOWN = %%n%s%%e 因为æ€æ­»é˜Ÿå‹è€Œè¢«é™çº§åˆ°çº§åˆ« %%g%i%%e +TK_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for team killing +TK_SCORE_DOWN = %%n%s%%e 因为æ€æ­»é˜Ÿå‹è€Œå¤±åŽ» %%g%i%%e 分 +TK_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for team killing +TOP_10 = å‰ 10 å +TRAILING_ON_LEVEL_TEAM = The %%n%s%%e team is trailing on level %%g%i%%e :: %%g%s%%e +TRIPLE_LEVELED = %%n%s%%e è¿žå‡ä¸‰çº§!!! +UNRANKED = unranked +WARMUP_ROUND = 热身局 +WARMUP_ROUND_OVER = 热身局结æŸ! +WARMUP_ROUND_DISPLAY = 热身局: 剩余 %i 秒 +WEAPONS = 武器 +WELCOME_MESSAGE_LINE1 = æœåŠ¡å™¨å½“å‰è¿è¡Œ GunGame %s by Avalanche +WELCOME_MESSAGE_LINE2 = åˆ€å±€æ¨¡å¼ \rå¼€å¯!\w +WELCOME_MESSAGE_LINE3 = åŠ é€Ÿæ¨¡å¼ \rå¼€å¯!\w +WELCOME_MESSAGE_LINE4 = Knife Elite Mode is \rENABLED!\w +WELCOME_MESSAGE_LINE5 = æ­»äº¡æ¨¡å¼ \å¼€å¯!\w +WELCOME_MESSAGE_LINE6 = Teamplay Mode is \rENABLED!\w +WELCOME_MESSAGE_LINE7 = There are \y%i\w levels this round! +WELCOME_MESSAGE_LINE8 : +say !rules 命令查看游æˆè§„则和玩家å¯ç”¨å‘½ä»¤^n +say !level 命令查看你的当å‰çº§åˆ«ä¿¡æ¯åŠé¢†å…ˆè€…ä¿¡æ¯^n +say !score 命令查看所有玩家当å‰æˆç»©^n +: +WIN_MOTD_LINE1 = %s won! +WIN_MOTD_LINE2 = the %s team +WIN_MOTD_LINE3 = is the winner! +WIN_MOTD_LINE4A = The final %s kill was made against %s +WIN_MOTD_LINE4B = The final %s kill was made against %s by %s +WIN_MOTD_LINE5A = This is %s's %i%s win,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_REG = This is %s's %i%s regular win,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_TP = This is %s's %i%s teamplay win,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE5B = %s now has a total of %i points. +WIN_MOTD_LINE5B_REG = %s now has a total of %i regular points. +WIN_MOTD_LINE5B_TP = %s now has a total of %i teamplay points. +WIN_MOTD_LINE5C = This is %s's %i%s win, for a total of %i points,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_REG = This is %s's %i%s regular win, for a total of %i points,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_TP = This is %s's %i%s teamplay win, for a total of %i points,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE6 = You spent %i%% of your time contributing to the winning team. +WIN_MOTD_LINE7A = You now have a total of %i wins.

This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_REG = You now have a total of %i regular wins.

This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_TP = You now have a total of %i teamplay wins.

This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_LINE7B = You have a total of %i wins. +WIN_MOTD_LINE7B_REG = You have a total of %i regular wins. +WIN_MOTD_LINE7B_TP = You have a total of %i teamplay wins. +WIN_MOTD_LINE7C = You have just gained %i points, for a total of %i points with %i wins! +WIN_MOTD_LINE7C_REG = You have just gained %i regular points, for a total of %i points with %i wins! +WIN_MOTD_LINE7C_TP = You have just gained %i teamplay points, for a total of %i points with %i wins! +WIN_MOTD_LINE8A = The next map will be %s +WIN_MOTD_LINE8B = There is one round of this map left. +WIN_MOTD_LINE8C = There are %i rounds of this map left. +WIN_MOTD_STREAK1 = This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_REG = This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_TP = This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_STREAK2 = Your record streak is %i wins in a row. +WIN_MOTD_STREAK2_REG = Your record regular streak is %i wins in a row. +WIN_MOTD_STREAK2_TP = Your record teamplay streak is %i wins in a row. +WIN_MOTD_STREAK3 = The all-time record streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_REG = The all-time record regular streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_TP = The all-time record teamplay streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK4 = %s just set a new all-time record streak with %i wins in a row! +WIN_MOTD_STREAK4_REG = %s just set a new all-time record regular streak with %i wins in a row! +WIN_MOTD_STREAK4_TP = %s just set a new all-time record teamplay streak with %i wins in a row! +WINS = 获胜者 +WON = %%n%s%%e 获胜者 +WON_TEAM = The %%n%s%%e team won +YES = 是 +YES_REGULAR = Yes, regular mode +YES_TEAMPLAY = Yes, teamplay mode + +[bp] +AFK_KILL = Your kill did not count because %%n%s%%e was AFK +AUTOVOTE_RES1 = Jogando GunGame no modo equipe +AUTOVOTE_RES2 = Jogando GunGame no modo normal +AUTOVOTE_RES3 = Sem GunGame +CANCEL = Cancelar +CLOSE = Fechar +FRIENDLYFIRE_ON = %%gFriendly Fire is ON!!!%%e Watch your fire! +GAINED_POINTS = You have just gained %%g%i%%e points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_REG = You have just gained %%g%i%%e regular points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_TP = You have just gained %%g%i%%e teamplay points, for a total of %%g%i%%e points with %%g%i%%e wins! +GUNGAME = GunGame +HK_LEVEL_DOWN = %%n%s%%e voltou ao nivel %%g%i%%e por matar um refem +HK_SCORE_DOWN = %%n%s%%e perdeu %%g%i%%e pontos por matar um refem +HK_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for a hostage kill +HK_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for a hostage kill +IN_A_ROW = %i in a row +JUMP_TO_ME = Jump to me +LEADER = Lider +LEADING_ON_LEVEL = %%n%s%%e estah liderando no posto %%g%i%%e :: %%g%s%%e +LEADING_ON_LEVEL_TEAM = The %%n%s%%e team is leading on level %%g%i%%e :: %%g%s%%e +LEVEL = Posto +LEVEL_MESSAGE_LINE1A = Voce completou %i/%i das mortes necessarias +LEVEL_MESSAGE_LINE1B = Your team has made %i/%i of its required kills +LEVEL_MESSAGE_LINE2A = Voce estah na frente +LEVEL_MESSAGE_LINE2B = Voce estah amarrado no primeiro lugar +LEVEL_MESSAGE_LINE2C = Voce estah a %i niveis atras do lider +LEVEL_MESSAGE_LINE3A = Voce ganhou %i vezes +LEVEL_MESSAGE_LINE3A_REG = You have %i regular wins +LEVEL_MESSAGE_LINE3A_TP = You have %i teamplay wins +LEVEL_MESSAGE_LINE3B = You have accumulated %i points over %i wins +LEVEL_MESSAGE_LINE3B_REG = You have accumulated %i regular points over %i wins +LEVEL_MESSAGE_LINE3B_TP = You have accumulated %i teamplay points over %i wins +LEVEL_MESSAGE_LINE3C = You have won %i times (ranked %i%s) +LEVEL_MESSAGE_LINE3D = You have accumulated %i points over %i wins (ranked %i%s) +LEVEL_MESSAGE_LINE4 = Your record streak is %i wins in a row +LEVEL_MESSAGE_LINE4_REG = Your record regular streak is %i wins in a row +LEVEL_MESSAGE_LINE4_TP = Your record teamplay streak is %i wins in a row +LEVEL_MESSAGE_LINE5A = Lideres atuais: %s +LEVEL_MESSAGE_LINE5B = Lider atual: %s +LEVEL_MESSAGE_LINE6 = Nivel do lider: %i (%s) +LEVELS_BEHIND_LEADER = Voce estah agora %%g%i%%e niveis atras do lider +NEXT = Proximo +NONE = nenhum +NO_ONE = no one +NO_WIN_LOGGING = Este servidor tem logging desabilitado +NOW_ON_LEVEL = Voce esta agora no posto +ON_LEVEL = Voce esta no posto +ON_LEVEL_TEAM = Your team is on level +PLAY_GUNGAME = Jogar GunGame? +PLAYER_RESET = %%n%s%%e decidiu voltar para o nivel %%g1%%e +POINTS = pontos +POINTS_ABBR = pts +PRESS_KEY_TO_CONTINUE = Pressione quaquer numero para continuar +PREVIOUS = Anterior +PROGRESS_DISPLAY = Voce precisa matar %%n%i%%e para avancar. Score: %%n%i / %i%%e +PROGRESS_DISPLAY1 = You are in the lead by %i levels +PROGRESS_DISPLAY2 = You are tied for the lead with %s +PROGRESS_DISPLAY3 = You are tied for the lead with %s others +PROGRESS_DISPLAY4 = You are %i levels behind the leader +PROGRESS_DISPLAY_TEAM1 = Your team is in the lead by %i levels +PROGRESS_DISPLAY_TEAM2 = Your team is tied with the other team +PROGRESS_DISPLAY_TEAM3 = Your team is %i levels behind the other team +PRUNING = Pruning %s: %i registros removidos +RECORD_STREAK = Record Streak: %s (%i in a row) +REQUIRED_KILLS = Mortes necessarias +RESET_NOT_ALLOWED = You cannot reset your level during Teamplay Mode! +RESET_QUERY = Voce tem certeza que voce^nquer voltar para o nivel 1? +RESPAWN_COUNTDOWN = Voce voltara em %i seconds +RULES = Regras +RULES_CONSOLE_LINE1 = %i) Voce precisa matar com a sua arma atual para subir de nivel. +RULES_CONSOLE_LINE2 = %i) Se voce matar com uma arma fora da ordem, nao sera contado e voce permanecera no mesmo nivel. +RULES_CONSOLE_LINE3 = %i) Voce pode ganhar postos plantando ou desativando bombas. +RULES_CONSOLE_LINE4 = %i) Se voce se suicidar, perdera um posto. +RULES_CONSOLE_LINE5 = %i) O fogo amigo serah ativado se alguem alcancar o nivel de GRANADAS. +RULES_CONSOLE_LINE6A = %i) Voce pode ganhar mais de um nivel por round. +RULES_CONSOLE_LINE6B = %i) Voce pode ganhar somente um posto por round. +RULES_CONSOLE_LINE6C = %i) Voce pode ganhar ate %i postos por round. +RULES_CONSOLE_LINE7 = %i) Ha um tempo extra ao final de cada round para que os jogadores possam trocar de time. +RULES_CONSOLE_LINE8 = %i) Knife Pro esta habilitado, o que siginifica que voce pode roubar niveis de oponentes ao esfaquia-los. +RULES_CONSOLE_LINE9 = %i) O Modo Turbo esta habilitado, o que siginifa que voce pode receber sua proxima arma no momento em que subir de posto. +RULES_CONSOLE_LINE10 = %i) Because Knife Elite Mode is enabled, once you level up you will have to use a knife until the next round. +RULES_CONSOLE_LINE11 = %i) O Modo Deathmatch esta habilitado, voce pode renascer infinitamente. +RULES_CONSOLE_LINE12 = %i) Because Teamplay Mode is enabled, you will gain points as a team instead of individually. +RULES_CONSOLE_LINE13 = Say !level para ver seu posto e quem estah ganhando. +RULES_CONSOLE_LINE14 = Say !weapons para ver a ordem de armas. +RULES_CONSOLE_LINE15 = Say !score para ver o score de todos os jogadores. +RULES_CONSOLE_LINE16 = Say !top10 para ver os 10 melhore jogadores no servidor. +RULES_CONSOLE_LINE17 = Say !restart para voltar ao nivel 1. +RULES_MESSAGE_LINE1 = As regras do jogo e todos os comandos say estao listados no sey console +RULES_MESSAGE_LINE2 = Alguns comandos say uteis: +RULES_MESSAGE_LINE3 : +Say !top10 para ver os dez melhores jogadores no servidor^n +Say !level para ver seu nivel atual e quem estah ganhando^n +Say !weapons para ver a ordem das armas^n +Say !score para ver os scores +: +SCORES = Scores +SLOW_DOWN = Alcame-se! Este ainda eh o round de aquecimento! +SPAWNPROTECTED_KILL = Esta morte nao contou porque %%n%s%%e entrou nos ultimos %%g%i%%e segundos +STATS = Stats +STATS_REGULAR = Regular Stats +STATS_TEAMPLAY = Teamplay Stats +STILL_LEVEL_ONE = Voce ainda nao passou do posto 1! +STOLE_LEVEL = %%n%s%%e roubou um posto de %%g%s%%e +STOLE_LEVEL_TEAM = %%n%s%%e stole %%g%i%%e points from %%g%s%%e (gained %%g%i%%e) +SUICIDE_LEVEL_DOWN = %%n%s%%e perdeu um posto por suicidar-se +SUICIDE_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for a suicide +SUICIDE_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for a suicide +TEAM = team +TIED_LEADER_MULTI = %%n%s%%e is tied on level %%g%i%%e :: %%g%s%%e with %%g%s%%e others +TIED_LEADER_ONE = %%n%s%%e is tied on level %%g%i%%e :: %%g%s%%e with %%g%s%%e +TIED_LEADER_TEAM = The teams are tied on level %%g%i%%e :: %%g%s%%e +TK_LEVEL_DOWN = %%n%s%%e voltou ao nivel %%g%i%%e por matar alguem do seu proprio time +TK_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for team killing +TK_SCORE_DOWN = %%n%s%%e perdeu %%g%i%%e pontos por matar alguem do seu proprio time +TK_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for team killing +TOP_10 = Top 10 +TRAILING_ON_LEVEL_TEAM = The %%n%s%%e team is trailing on level %%g%i%%e :: %%g%s%%e +TRIPLE_LEVELED = %%n%s%%e subiu em triplo!!! +UNRANKED = unranked +WARMUP_ROUND = Round de aquecimento +WARMUP_ROUND_OVER = Round de aquecimento acabado! +WARMUP_ROUND_DISPLAY = Round de aquecimento: %i segundos restantes +WEAPONS = Armas +WELCOME_MESSAGE_LINE1 = Este servidor esta rodando GunGame %s by Avalanche +WELCOME_MESSAGE_LINE2 = Knife Pro estah \rENABLED!\w +WELCOME_MESSAGE_LINE3 = Modo Turbo estah \rENABLED!\w +WELCOME_MESSAGE_LINE4 = Knife Elite Mode estah \rENABLED!\w +WELCOME_MESSAGE_LINE5 = Modo Deathmatch estah \rENABLED!\w +WELCOME_MESSAGE_LINE6 = Teamplay Mode estah \rENABLED!\w +WELCOME_MESSAGE_LINE7 = There are \y%i\w levels this round! +WELCOME_MESSAGE_LINE8 : +Digite !rules para instrucoes de como jogar e uma lista de comandos^n +Digite !level para ver seu posto e quem esta liderando^n +Digite !score para ver uma lista de todos os jogadores e vitoriasa no seu console^n +: +WIN_MOTD_LINE1 = %s won! +WIN_MOTD_LINE2 = the %s team +WIN_MOTD_LINE3 = is the winner! +WIN_MOTD_LINE4A = The final %s kill was made against %s +WIN_MOTD_LINE4B = The final %s kill was made against %s by %s +WIN_MOTD_LINE5A = This is %s's %i%s win,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_REG = This is %s's %i%s regular win,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_TP = This is %s's %i%s teamplay win,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE5B = %s now has a total of %i points. +WIN_MOTD_LINE5B_REG = %s now has a total of %i regular points. +WIN_MOTD_LINE5B_TP = %s now has a total of %i teamplay points. +WIN_MOTD_LINE5C = This is %s's %i%s win, for a total of %i points,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_REG = This is %s's %i%s regular win, for a total of %i points,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_TP = This is %s's %i%s teamplay win, for a total of %i points,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE6 = You spent %i%% of your time contributing to the winning team. +WIN_MOTD_LINE7A = You now have a total of %i wins.

This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_REG = You now have a total of %i regular wins.

This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_TP = You now have a total of %i teamplay wins.

This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_LINE7B = You have a total of %i wins. +WIN_MOTD_LINE7B_REG = You have a total of %i regular wins. +WIN_MOTD_LINE7B_TP = You have a total of %i teamplay wins. +WIN_MOTD_LINE7C = You have just gained %i points, for a total of %i points with %i wins! +WIN_MOTD_LINE7C_REG = You have just gained %i regular points, for a total of %i points with %i wins! +WIN_MOTD_LINE7C_TP = You have just gained %i teamplay points, for a total of %i points with %i wins! +WIN_MOTD_LINE8A = The next map will be %s +WIN_MOTD_LINE8B = There is one round of this map left. +WIN_MOTD_LINE8C = There are %i rounds of this map left. +WIN_MOTD_STREAK1 = This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_REG = This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_TP = This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_STREAK2 = Your record streak is %i wins in a row. +WIN_MOTD_STREAK2_REG = Your record regular streak is %i wins in a row. +WIN_MOTD_STREAK2_TP = Your record teamplay streak is %i wins in a row. +WIN_MOTD_STREAK3 = The all-time record streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_REG = The all-time record regular streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_TP = The all-time record teamplay streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK4 = %s just set a new all-time record streak with %i wins in a row! +WIN_MOTD_STREAK4_REG = %s just set a new all-time record regular streak with %i wins in a row! +WIN_MOTD_STREAK4_TP = %s just set a new all-time record teamplay streak with %i wins in a row! +WINS = vitorias +WON = %%n%s%%e ganhou +WON_TEAM = The %%n%s%%e team won +YES_REGULAR = Sim, modo normal +YES_TEAMPLAY = Sim, modo em equipe + +[es] +AFK_KILL = Tu frag no conto ya que %%n%s%%e estaba AFK +AUTOVOTE_RES1 = Jugando GunGame en modo de equipo +AUTOVOTE_RES2 = Jugando GunGame en modo individual +AUTOVOTE_RES3 = No se esta jugando GunGame +CANCEL = Cancelar +CLOSE = Cerrar +FRIENDLYFIRE_ON = %%gFuego Amigo Activado!!!%%e Cuidado donde disparas! +GAINED_POINTS = Has ganado %%g%i%%e puntos, haciendo un total de %%g%i%%e puntos y %%g%i%%e victorias! +GAINED_POINTS_REG = Has ganado %%g%i%%e puntos individuales, haciendo un total de %%g%i%%e puntos y %%g%i%%e victorias! +GAINED_POINTS_TP = Has ganado %%g%i%%e puntos en equipo, haciendo un total de %%g%i%%e puntos y %%g%i%%e victorias! +GUNGAME = GunGame +HK_LEVEL_DOWN = %%n%s%%e volvio al nivel %%g%i%%e por matar a un rehen +HK_SCORE_DOWN = %%n%s%%e perdio %%g%i%%e puntos por matar a un rehen +HK_LEVEL_DOWN_TEAM = El equipo %%n%s%%e volvio al nivel %%g%i%%e por matar a un rehen +HK_SCORE_DOWN_TEAM = El equipo %%n%s%%e perdio %%g%i%%e puntos por matar a un rehen +IN_A_ROW = %i consecutivas +JUMP_TO_ME = Ir a mi +LEADER = Lider +LEADING_ON_LEVEL = %%n%s%%e esta liderando en el nivel %%g%i%%e :: %%g%s%%e +LEADING_ON_LEVEL_TEAM = El equipo %%n%s%%e esta liderando en el nivel %%g%i%%e :: %%g%s%%e +LEVEL = Nivel +LEVEL_MESSAGE_LINE1A = Has hecho %i/%i de tus frags requeridos +LEVEL_MESSAGE_LINE1B = Tu equipo ha hecho %i/%i de sus frags requeridos +LEVEL_MESSAGE_LINE2A = Estas liderando +LEVEL_MESSAGE_LINE2B = Estas empatado en primer puesto +LEVEL_MESSAGE_LINE2C = Estas %i niveles detras del lider +LEVEL_MESSAGE_LINE3A = Has ganado %i veces +LEVEL_MESSAGE_LINE3A_REG = Tienes %i victorias individuales +LEVEL_MESSAGE_LINE3A_TP = Tienes %i victorias en equipo +LEVEL_MESSAGE_LINE3B = Has acumulado %i puntos en %i victorias +LEVEL_MESSAGE_LINE3B_REG = Has acumulado %i puntos individuales en %i victorias +LEVEL_MESSAGE_LINE3B_TP = Has acumulado %i puntos en equipo en %i victorias +LEVEL_MESSAGE_LINE3C = Has ganado %i veces (rankeado %i%s) +LEVEL_MESSAGE_LINE3D = Has acumulado %i puntos en %i victorias (rankeado %i%s) +LEVEL_MESSAGE_LINE4 = Tu record es de %i victorias consecutivas +LEVEL_MESSAGE_LINE4_REG = Tu record individual es de %i victorias consecutivas +LEVEL_MESSAGE_LINE4_TP = Tu record en equipo es de %i victorias consecutivas +LEVEL_MESSAGE_LINE5A = Lideres actuales: %s +LEVEL_MESSAGE_LINE5B = Lider actual: %s +LEVEL_MESSAGE_LINE6 = Nivel del Lider: %i (%s) +LEVELS_BEHIND_LEADER = Estas %%g%i%%e niveles detras del lider +NEXT = Siguiente +NONE = ninguno +NO_ONE = nadie +NO_WIN_LOGGING = El servidor ha desactivado esta opcion +NOW_ON_LEVEL = Estas ahora en el nivel +ON_LEVEL = Estas en el nivel +ON_LEVEL_TEAM = Tu equipo esta en el nivel +PLAY_GUNGAME = Jugar GunGame en: +PLAYER_RESET = %%n%s%%e se reseteo al nivel %%g1%%e +POINTS = puntos +POINTS_ABBR = pts +PRESS_KEY_TO_CONTINUE = Presiona cualquier numero para continuar +PREVIOUS = Anterior +PROGRESS_DISPLAY = Necesitas %%n%i%%e frags para avanzar. Puntaje: %%n%i / %i%%e +PROGRESS_DISPLAY1 = Estas liderando por %i niveles +PROGRESS_DISPLAY2 = Estas empatado en primer puesto con %s +PROGRESS_DISPLAY3 = Estas empatado en primer puesto con %s mas +PROGRESS_DISPLAY4 = Estas %i niveles detras del lider +PROGRESS_DISPLAY_TEAM1 = Tu equipo esta liderando por %i niveles +PROGRESS_DISPLAY_TEAM2 = Los equipos estan empatados +PROGRESS_DISPLAY_TEAM3 = Tu equipo esta %i niveles detras del otro +PRUNING = Limpiando %s: %i entradas removidas +RECORD_STREAK = Record de victorias: %s (%i consecutivas) +REQUIRED_KILLS = Frags requeridos +RESET_NOT_ALLOWED = No puedes resetear tu nivel durante un Juego en Equipo! +RESET_QUERY = Estas SEGURO de que^nquieres regresar al nivel 1? +RESPAWN_COUNTDOWN = Reapareceras en %i segundos +RULES = Reglas +RULES_CONSOLE_LINE1 = %i) Debes matar a alguien con tu arma actual para subir de nivel. +RULES_CONSOLE_LINE2 = %i) Si matas a alguien con un arma incorrecta, no contara y seguiras en el mismo nivel. +RULES_CONSOLE_LINE3 = %i) Puedes ganar niveles PLANTANDO y DESACTIVANDO la bomba. +RULES_CONSOLE_LINE4 = %i) Si te suicidas, perderas un nivel. +RULES_CONSOLE_LINE5 = %i) El Fuego Amigo se ACTIVA cuando alguien llega al nivel de GRANADA. +RULES_CONSOLE_LINE6A = %i) PUEDES ganar mas de un nivel por ronda. +RULES_CONSOLE_LINE6B = %i) Solo puedes ganar un nivel por ronda. +RULES_CONSOLE_LINE6C = %i) Puedes ganar hasta %i niveles por ronda. +RULES_CONSOLE_LINE7 = %i) Hay un periodo de tiempo al final de cada ronda para que los jugadores puedan cambiar de equipo. +RULES_CONSOLE_LINE8 = %i) Ya que Knife Pro esta activado, puedes robar un nivel de tus oponentes matandolos con cuchillo. +RULES_CONSOLE_LINE9 = %i) Ya que Modo Turbo esta activado, recibiras tu arma siguiente inmediatamente al subir de nivel. +RULES_CONSOLE_LINE10 = %i) Ya que Modo Knife Elite esta activado, al subir de nivel solo podras usar el cuchillo hasta la siguiente ronda. +RULES_CONSOLE_LINE11 = %i) Ya que Modo Deathmatch esta activado, reapareceras infinitamente. +RULES_CONSOLE_LINE12 = %i) Ya que Modo Teamplay esta activado, ganaras puntos como equipo y no individualmente. +RULES_CONSOLE_LINE13 = Escribe !level para ver tus estadisticas +RULES_CONSOLE_LINE14 = Escribe !weapons para ver el orden de las armas +RULES_CONSOLE_LINE15 = Escribe !score para ver tu nivel y el de todos los jugadores +RULES_CONSOLE_LINE16 = Escribe !top10 para ver el ranking del server +RULES_CONSOLE_LINE17 = Escribe !restart para regresar al nivel 1 +RULES_MESSAGE_LINE1 = Las reglas del juego y los comandos de chat estan listados en tu consola +RULES_MESSAGE_LINE2 = Algunos comandos utiles de chat: +RULES_MESSAGE_LINE3 : +Escribe !top10 para ver el ranking del server^n +Escribe !level para ver tus estadisticas^n +Escribe !weapons para ver el orden de las armas^n +Escribe !score para ver tu nivel y el de todos los jugadores +: +SCORE_CAPS = PUNTAJE +SCORES = Niveles +SLOW_DOWN = Tranquilo! Esta solo es la ronda de calentamiento! +SPAWNPROTECTED_KILL = Tu frag no conto ya que %%n%s%%e aparecio en los ultimos %%g%i%%e segundos +STATS = Ranking +STATS_REGULAR = Estadisticas individuales +STATS_TEAMPLAY = Estadisticas en equipo +STILL_LEVEL_ONE = Aun no has pasado el nivel 1 +STOLE_LEVEL = %%n%s%%e le robo un nivel a %%g%s%%e +STOLE_LEVEL_TEAM = %%n%s%%e le robo %%g%i%%e puntos a %%g%s%%e (ganados %%g%i%%e) +SUICIDE_LEVEL_DOWN = %%n%s%%e perdio un nivel por suicidio +SUICIDE_LEVEL_DOWN_TEAM = El equipo %%n%s%%e volvio a nivel %%g%i%%e por un suicidio +SUICIDE_SCORE_DOWN_TEAM = El equipo %%n%s%%e perdio %%g%i%%e puntos por un suicidio +TEAM = equipo +TIED_LEADER_MULTI = %%n%s%%e esta empatado en el nivel %%g%i%%e :: %%g%s%%e con otros %%g%s%%e +TIED_LEADER_ONE = %%n%s%%e esta empatado en el nivel %%g%i%%e :: %%g%s%%e con %%g%s%%e +TIED_LEADER_TEAM = Los equipos estan empatados en el nivel %%g%i%%e :: %%g%s%%e +TK_LEVEL_DOWN = %%n%s%%e volvio al nivel %%g%i%%e por matar a un miembro de su equipo +TK_LEVEL_DOWN_TEAM = El equipo %%n%s%%e volvio al nivel %%g%i%%e por matar a un miembro de su equipo +TK_SCORE_DOWN = %%n%s%%e perdio %%g%i%%e puntos por matar a un miembro de su equipo +TK_SCORE_DOWN_TEAM = El equipo %%n%s%%e perdio %%g%i%%e puntos por matar a un miembro de su equipo +TOP_10 = Top 10 +TRAILING_ON_LEVEL_TEAM = El equipo %%n%s%%e se esta quedando en el nivel %%g%i%%e :: %%g%s%%e +TRIPLE_LEVELED = %%n%s%%e subio tres niveles!!! +UNRANKED = no rankeado +WARMUP_ROUND = Ronda de Calentamiento +WARMUP_ROUND_OVER = Fin de la Ronda de calentamiento! +WARMUP_ROUND_DISPLAY = Ronda de Calentamiento: %i segundos restantes +WEAPONS = Armas +WELCOME_MESSAGE_LINE1 = Este servidor esta usando GunGame %s por Avalanche +WELCOME_MESSAGE_LINE2 = Knife Pro \rACTIVADO!\w +WELCOME_MESSAGE_LINE3 = Modo Turbo \rACTIVADO!\w +WELCOME_MESSAGE_LINE4 = Modo Knife Elite \rACTIVADO!\w +WELCOME_MESSAGE_LINE5 = Modo Deathmatch \rACTIVADO!\w +WELCOME_MESSAGE_LINE6 = Modo Teamplay \rACTIVADO!\w +WELCOME_MESSAGE_LINE7 = Hay \y%i\w niveles en este juego! +WELCOME_MESSAGE_LINE8 : +Escribe !rules para ver instrucciones del juego y una lista de comandos^n +Escribe !level para ver tus estadisticas^n +Escribe !score para ver tu nivel y el de todos los jugadores^n +: +WIN_MOTD_LINE1 = %s es el ganador! +WIN_MOTD_LINE2 = el equipo %s +WIN_MOTD_LINE3 = es el ganador! +WIN_MOTD_LINE4A = El frag final :: %s fue hecho contra %s +WIN_MOTD_LINE4B = El frag final :: %s fue hecho contra %s por %s +WIN_MOTD_LINE5A = %s consiguio su %i%s victoria,
y su %i%s victoria consecutiva (su record: %i victorias consecutivas). +WIN_MOTD_LINE5A_REG = %s consiguio su %i%s victoria individual,
y su %i%s victoria individual consecutiva (su record: %i victorias consecutivas). +WIN_MOTD_LINE5A_TP = %s consiguio su %i%s victoria en equipo,
y su %i%s victoria en equipo consecutiva (su record: %i victorias consecutivas). +WIN_MOTD_LINE5B = %s tiene ahora un total de %i puntos. +WIN_MOTD_LINE5B_REG = %s tiene ahora un total de %i puntos individuales. +WIN_MOTD_LINE5B_TP = %s tiene ahora un total de %i puntos en equipo. +WIN_MOTD_LINE5C = Esta es la %i%s victoria de %s, haciendo un total de %i puntos,
y su %i%s victoria consecutiva (su record: %i victorias consecutivas). +WIN_MOTD_LINE5C_REG = Esta es %s's %i%s victoria individual, haciendo un total de %i puntos,
y su %i%s victoria individual consecutiva (su record: %i consecutivas). +WIN_MOTD_LINE5C_TP = Esta es %s's %i%s victoria en equipo, haciendo un total de %i puntos,
ay su %i%s victoria en equipo consecutiva (su record: %i consecutivas). +WIN_MOTD_LINE6 = Has usado %i%% de tu tiempo contribuyendo al equipo ganador. +WIN_MOTD_LINE7A = Tienes ahora un total de %i victorias.

Esta es tu %i%s victoria consecutiva (tu record: %i victorias consecutivas). +WIN_MOTD_LINE7A_REG = Tienes ahora un total de %i victorias individuales.

Esta es tu %i%s victoria individual consecutiva (tu record: %i victorias consecutivas). +WIN_MOTD_LINE7A_TP = Tienes ahora un total de %i victorias en equipo.

Esta es tu %i%s victoria en equipo consecutiva (tu record: %i victorias consecutivas). +WIN_MOTD_LINE7B = Tienes un total de %i victorias. +WIN_MOTD_LINE7B_REG = Tienes un total de %i victorias individuales. +WIN_MOTD_LINE7B_TP = Tienes un total de %i victorias en equipo. +WIN_MOTD_LINE7C = Acabas de ganar %i puntos, haciendo un total de %i puntos y %i victorias! +WIN_MOTD_LINE7C_REG = Acabas de ganar %i puntos individuales, haciendo un total de %i puntos y %i victorias! +WIN_MOTD_LINE7C_TP = Acabas de ganar %i puntos en equipo, haciendo un total de %i puntos y %i victorias! +WIN_MOTD_LINE8A = El proximo mapa sera %s +WIN_MOTD_LINE8B = Hay una ronda restante en este mapa. +WIN_MOTD_LINE8C = Hay %i rondas restantes en este mapa. +WIN_MOTD_STREAK1 = Esta es tu %i%s victoria consecutiva (tu record: %i victorias consecutivas). +WIN_MOTD_STREAK1_REG = Esta es tu %i%s victoria individual consecutiva (tu record: %i victorias consecutivas). +WIN_MOTD_STREAK1_TP = Esta es tu %i%s victoria en equipo consecutiva (tu record: %i conecutivo). +WIN_MOTD_STREAK2 = Tu record es de %i victorias consecutivas. +WIN_MOTD_STREAK2_REG = Tu record individual es %i victorias consecutivas. +WIN_MOTD_STREAK2_TP = Tu record en equipo es %i victorias consecutivas. +WIN_MOTD_STREAK3 = El record de todos los tiempos, %i victorias consecutivas, fue establecido por %s. +WIN_MOTD_STREAK3_REG = El record individual de todos los tiempos, %i victorias consecutivas, fue establecido por %s. +WIN_MOTD_STREAK3_TP = El record en equipo de todos los tiempos, %i victorias consecutivas, fue establecido por %s. +WIN_MOTD_STREAK4 = %s acaba de establecer un nuevo record con %i victorias consecutivas! +WIN_MOTD_STREAK4_REG = %s acaba de establecer un nuevo record de victorias individuales con %i victorias consecutivas! +WIN_MOTD_STREAK4_TP = %s acaba de establecer un nuevo record en equipo con %i victorias consecutivas! +WINS = victorias +WON = %%n%s%%e es el ganador +WON_TEAM = El equipo %%n%s%%e es el ganador +YES_REGULAR = Modo individual +YES_TEAMPLAY = Modo de equipo + +[sv] +AFK_KILL = Your kill did not count because %%n%s%%e was AFK +AUTOVOTE_RES1 = Playing GunGame with teamplay mode +AUTOVOTE_RES2 = Playing regular GunGame +AUTOVOTE_RES3 = Not playing GunGame +CANCEL = Avbryt +CLOSE = Stang +FRIENDLYFIRE_ON = %%CVanskaplig Eld ar aktiverad!!!%%e Var forsiktig!!! +GAINED_POINTS = You have just gained %%g%i%%e points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_REG = You have just gained %%g%i%%e regular points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_TP = You have just gained %%g%i%%e teamplay points, for a total of %%g%i%%e points with %%g%i%%e wins! +GUNGAME = GunGame +HK_LEVEL_DOWN = %%n%s%%e went back down to level %%g%i%%e for killing a hostage +HK_SCORE_DOWN = %%n%s%%e lost %%g%i%%e points for killing a hostage +HK_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for a hostage kill +HK_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for a hostage kill +IN_A_ROW = %i in a row +JUMP_TO_ME = Jump to me +LEADER = Leder +LEADING_ON_LEVEL = %%n%s%%e leder pa niva %%g%i%%e :: %%g%s%%e +LEADING_ON_LEVEL_TEAM = The %%n%s%%e team is leading on level %%g%i%%e :: %%g%s%%e +LEVEL = Niva +LEVEL_MESSAGE_LINE1A = Du har dodat %i/%i +LEVEL_MESSAGE_LINE1B = Your team has made %i/%i of its required kills +LEVEL_MESSAGE_LINE2A = Du leder +LEVEL_MESSAGE_LINE2B = Du ar bunden vid forsta plats +LEVEL_MESSAGE_LINE2C = Du ligger %i nivaer efter den som leder +LEVEL_MESSAGE_LINE3A = Du har vunnit %i ganger +LEVEL_MESSAGE_LINE3A_REG = You have %i regular wins +LEVEL_MESSAGE_LINE3A_TP = You have %i teamplay wins +LEVEL_MESSAGE_LINE3B = You have accumulated %i points over %i wins +LEVEL_MESSAGE_LINE3B_REG = You have accumulated %i regular points over %i wins +LEVEL_MESSAGE_LINE3B_TP = You have accumulated %i teamplay points over %i wins +LEVEL_MESSAGE_LINE4 = Your record streak is %i wins in a row +LEVEL_MESSAGE_LINE4_REG = Your record regular streak is %i wins in a row +LEVEL_MESSAGE_LINE4_TP = Your record teamplay streak is %i wins in a row +LEVEL_MESSAGE_LINE5A = Nuvarande ledare: %s +LEVEL_MESSAGE_LINE5B = Nuvarande ledare: %s +LEVEL_MESSAGE_LINE6 = Den som leder ligger pa niva: %i (%s) +LEVELS_BEHIND_LEADER = Du ligger nu %%g%i%%e nivaer efter den som leder +NEXT = Nasta +NONE = ingen +NO_ONE = no one +NO_WIN_LOGGING = Denna server har vunnit inloggning nekad +NOW_ON_LEVEL = Du ligger nu pa niva +ON_LEVEL = Du ligger pa niva +ON_LEVEL_TEAM = Your team is on level +PLAY_GUNGAME = Play GunGame? +PLAYER_RESET = %%n%s%%e startade om till niva %%g1%%e +POINTS = points +POINTS_ABBR = pts +PRESS_KEY_TO_CONTINUE = Tryck in seriekod for att fortsatta +PREVIOUS = Foregaende +PROGRESS_DISPLAY = Du maste doda %%n%i%%e till for att bli befodrad. Resultat: %%n%i / %i%%e +PROGRESS_DISPLAY1 = You are in the lead by %i levels +PROGRESS_DISPLAY2 = You are tied for the lead with %s +PROGRESS_DISPLAY3 = You are tied for the lead with %s others +PROGRESS_DISPLAY4 = You are %i levels behind the leader +PROGRESS_DISPLAY_TEAM1 = Your team is in the lead by %i levels +PROGRESS_DISPLAY_TEAM2 = Your team is tied with the other team +PROGRESS_DISPLAY_TEAM3 = Your team is %i levels behind the other team +PRUNING = Bortklippta %s: %i anmalan borttagna +RECORD_STREAK = Record Streak: %s (%i in a row) +REQUIRED_KILLS = Kravda mord +RESET_NOT_ALLOWED = You cannot reset your level during Teamplay Mode! +RESET_QUERY = Ar du SAKER pa att du vill^nstarta om pa niva 1? +RESPAWN_COUNTDOWN = Du kommer respawna om %i sekunder +RULES = Regler +RULES_CONSOLE_LINE1 = %i) Du maste doda en med ditt nuvarande vapen for att bli befodrad. +RULES_CONSOLE_LINE2 = %i) Om du lyckas doda en med ett vapen utan ammo, raknas det inte och din nuvarande niva bestar. +RULES_CONSOLE_LINE3 = %i) Du kan bli befodrad genom PLANTNING och DEFUSANDE. +RULES_CONSOLE_LINE4 = %i) Om du begar sjalvmord, kommer alla nivaer ga forlorade. +RULES_CONSOLE_LINE5 = %i) CVanskaplig Eld aktiveras da nagon nar GRANAT nivan. +RULES_CONSOLE_LINE6A = %i) Du KAN uppna mer an en niva per runda. +RULES_CONSOLE_LINE6B = %i) Du kan endast uppna en niva per runda. +RULES_CONSOLE_LINE6C = %i) Du kan uppna upp till %i nivaer per runda. +RULES_CONSOLE_LINE7 = %i) Det finns tillfalle vid slutet av varje runda att byta lag. +RULES_CONSOLE_LINE8 = %i) Eftersom Knife Pro ar aktiverat, kan du stjala en niva fran motstandaren genom att kniva dem. +RULES_CONSOLE_LINE9 = %i) Eftersom Turbo Mode ar aktiverat, kommer du omedelbart fa ditt nasta vapen da du graderas. +RULES_CONSOLE_LINE10 = %i) Because Knife Elite Mode is enabled, once you level up you will have to use a knife until the next round. +RULES_CONSOLE_LINE11 = %i) Eftersom Deathmatch Mode ar aktiverat, kommer du inte respawna. +RULES_CONSOLE_LINE12 = %i) Because Teamplay Mode is enabled, you will gain points as a team instead of individually. +RULES_CONSOLE_LINE13 = Skriv !level for att se din nuvarande niva och vem som leder. +RULES_CONSOLE_LINE14 = Skriv !weapons for att se vapen forbrukningen. +RULES_CONSOLE_LINE15 = Skriv !score for att se alla spelares nuvarande statistik. +RULES_CONSOLE_LINE16 = Skriv !top10 for att se topp 10 pa denna server. +RULES_CONSOLE_LINE17 = Skriv !restart for att starta om pa niva 1. +RULES_MESSAGE_LINE1 = Spelregler och alla kommandon finns nu i din console +RULES_MESSAGE_LINE2 = Nagra anvandbara kommandon: +RULES_MESSAGE_LINE3 : +Skriv !top10 for att se topp 10 pa denna server^n +Skriv !level for att se din nuvarande niva och vem som vinner^n +Skriv !weapons for att se forbrukningen av vapen^n +Skriv !score for att se spelar resultat +: +SCORES = Resultat +SLOW_DOWN = Ta't lugnt! Det ar fortfarande uppvarmning! +SPAWNPROTECTED_KILL = Dina kills raknades inte pga att %%n%s%%e spawnade under de sista %%g%i%%e sekunderna +STATS = Stats +STATS_REGULAR = Regular Stats +STATS_TEAMPLAY = Teamplay Stats +STILL_LEVEL_ONE = Du har inte passerat niva 1 annu! +STOLE_LEVEL = %%n%s%%e stal en niva fran %%g%s%%e +STOLE_LEVEL_TEAM = %%n%s%%e stole %%g%i%%e points from %%g%s%%e (gained %%g%i%%e) +SUICIDE_LEVEL_DOWN = %%n%s%%e degraderades en niva pga sjalvmord +SUICIDE_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for a suicide +SUICIDE_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for a suicide +TEAM = team +TIED_LEADER_MULTI = %%n%s%%e is tied on level %%g%i%%e :: %%g%s%%e with %%g%s%%e others +TIED_LEADER_ONE = %%n%s%%e is tied on level %%g%i%%e :: %%g%s%%e with %%g%s%%e +TIED_LEADER_TEAM = The teams are tied on level %%g%i%%e :: %%g%s%%e +TK_LEVEL_DOWN = %%n%s%%e degraderades till niva %%g%i%%e pga dodande av lagkamrater +TK_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for team killing +TK_SCORE_DOWN = %%n%s%%e forlorade %%g%i%%e poang pga dodande i eget lag +TK_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for team killing +TOP_10 = Topp 10 +TRAILING_ON_LEVEL_TEAM = The %%n%s%%e team is trailing on level %%g%i%%e :: %%g%s%%e +TRIPLE_LEVELED = %%n%s%%e gjorde en trippel befodring!!! +UNRANKED = unranked +WARMUP_ROUND = Uppvarmnings runda +WARMUP_ROUND_OVER = Uppvarmningen ar over! +WARMUP_ROUND_DISPLAY = Uppvarmnings runda: %i sekunder kvar +WEAPONS = Vapen +WELCOME_MESSAGE_LINE1 = Den har servern anvander GunGame %s av Avalanche +WELCOME_MESSAGE_LINE2 = Kniv Pro ar \rAKTIVERAT!\w +WELCOME_MESSAGE_LINE3 = Turbo Mod ar \rAKTIVERAT!\w +WELCOME_MESSAGE_LINE4 = Knife Elite Mode is \rENABLED!\w +WELCOME_MESSAGE_LINE5 = Deathmatch Mod ar \rAKTIVERAT!\w +WELCOME_MESSAGE_LINE6 = Teamplay Mode is \rENABLED!\w +WELCOME_MESSAGE_LINE7 = There are \y%i\w levels this round! +WELCOME_MESSAGE_LINE8 : +Skriv !rules i consolen for instruktioner av hur du spelar och en lista med kommandon^n +Skriv !level i consolen for att se info om din niva och vem som leder^n +Skriv !score i consolen for att se alla spelares resultat och vinster^n +: +WIN_MOTD_LINE1 = %s won! +WIN_MOTD_LINE2 = the %s team +WIN_MOTD_LINE3 = is the winner! +WIN_MOTD_LINE4A = The final %s kill was made against %s +WIN_MOTD_LINE4B = The final %s kill was made against %s by %s +WIN_MOTD_LINE5A = This is %s's %i%s win,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_REG = This is %s's %i%s regular win,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_TP = This is %s's %i%s teamplay win,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE5B = %s now has a total of %i points. +WIN_MOTD_LINE5B_REG = %s now has a total of %i regular points. +WIN_MOTD_LINE5B_TP = %s now has a total of %i teamplay points. +WIN_MOTD_LINE5C = This is %s's %i%s win, for a total of %i points,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_REG = This is %s's %i%s regular win, for a total of %i points,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_TP = This is %s's %i%s teamplay win, for a total of %i points,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE6 = You spent %i%% of your time contributing to the winning team. +WIN_MOTD_LINE7A = You now have a total of %i wins.

This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_REG = You now have a total of %i regular wins.

This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_TP = You now have a total of %i teamplay wins.

This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_LINE7B = You have a total of %i wins. +WIN_MOTD_LINE7B_REG = You have a total of %i regular wins. +WIN_MOTD_LINE7B_TP = You have a total of %i teamplay wins. +WIN_MOTD_LINE7C = You have just gained %i points, for a total of %i points with %i wins! +WIN_MOTD_LINE7C_REG = You have just gained %i regular points, for a total of %i points with %i wins! +WIN_MOTD_LINE7C_TP = You have just gained %i teamplay points, for a total of %i points with %i wins! +WIN_MOTD_LINE8A = The next map will be %s +WIN_MOTD_LINE8B = There is one round of this map left. +WIN_MOTD_LINE8C = There are %i rounds of this map left. +WIN_MOTD_STREAK1 = This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_REG = This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_TP = This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_STREAK2 = Your record streak is %i wins in a row. +WIN_MOTD_STREAK2_REG = Your record regular streak is %i wins in a row. +WIN_MOTD_STREAK2_TP = Your record teamplay streak is %i wins in a row. +WIN_MOTD_STREAK3 = The all-time record streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_REG = The all-time record regular streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_TP = The all-time record teamplay streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK4 = %s just set a new all-time record streak with %i wins in a row! +WIN_MOTD_STREAK4_REG = %s just set a new all-time record regular streak with %i wins in a row! +WIN_MOTD_STREAK4_TP = %s just set a new all-time record teamplay streak with %i wins in a row! +WINS = vinster +WON = %%n%s%%e vann +WON_TEAM = The %%n%s%%e team won +YES_REGULAR = Yes, regular mode +YES_TEAMPLAY = Yes, teamplay mode + +[fi] +AFK_KILL = Your kill did not count because %%n%s%%e was AFK +AUTOVOTE_RES1 = Playing GunGame with teamplay mode +AUTOVOTE_RES2 = Playing regular GunGame +AUTOVOTE_RES3 = Not playing GunGame +CANCEL = Peruuta +CLOSE = Sulje +FRIENDLYFIRE_ON = %%gFriendly Fire is ON!!!%%e Watch your fire! +GAINED_POINTS = You have just gained %%g%i%%e points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_REG = You have just gained %%g%i%%e regular points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_TP = You have just gained %%g%i%%e teamplay points, for a total of %%g%i%%e points with %%g%i%%e wins! +GUNGAME = GunGame +HK_LEVEL_DOWN = %%n%s%%e tasosi putosi %%g%i%%e koska tapoit panttivangin +HK_SCORE_DOWN = %%n%s%%e menetti %%g%i%%e pistett'a' koska tappoi panttivangin +HK_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for a hostage kill +HK_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for a hostage kill +IN_A_ROW = %i in a row +JUMP_TO_ME = Jump to me +LEADER = Johdossa +LEADING_ON_LEVEL = %%n%s%%e johtaa tasolla %%g%i%%e :: %%g%s%%e +LEADING_ON_LEVEL_TEAM = The %%n%s%%e team is leading on level %%g%i%%e :: %%g%s%%e +LEVEL = Taso +LEVEL_MESSAGE_LINE1A = Olet saavuttanut %i/%i tarvittavista tapoista +LEVEL_MESSAGE_LINE1B = Your team has made %i/%i of its required kills +LEVEL_MESSAGE_LINE2A = Sin'a' johdat +LEVEL_MESSAGE_LINE2B = Olet jaetussaa johtoasemassa +LEVEL_MESSAGE_LINE2C = Olet %i tasoa j'a'jess'a' johtajaa +LEVEL_MESSAGE_LINE3A = Olet voittanut %i kertaa +LEVEL_MESSAGE_LINE3A_REG = You have %i regular wins +LEVEL_MESSAGE_LINE3A_TP = You have %i teamplay wins +LEVEL_MESSAGE_LINE3B = You have accumulated %i points over %i wins +LEVEL_MESSAGE_LINE3B_REG = You have accumulated %i regular points over %i wins +LEVEL_MESSAGE_LINE3B_TP = You have accumulated %i teamplay points over %i wins +LEVEL_MESSAGE_LINE3C = You have won %i times (ranked %i%s) +LEVEL_MESSAGE_LINE3D = You have accumulated %i points over %i wins (ranked %i%s) +LEVEL_MESSAGE_LINE4 = Your record streak is %i wins in a row +LEVEL_MESSAGE_LINE4_REG = Your record regular streak is %i wins in a row +LEVEL_MESSAGE_LINE4_TP = Your record teamplay streak is %i wins in a row +LEVEL_MESSAGE_LINE5A = T'a'n hetkiset johtajat: %s +LEVEL_MESSAGE_LINE5B = Johdossa: %s +LEVEL_MESSAGE_LINE6 = Johtajan taso: %i (%s) +LEVELS_BEHIND_LEADER = Olet nyt %%g%i%%e tasoa j'a'ljessa johtajaa +NEXT = Seuravaa +NONE = ei mit'a'a'n +NO_ONE = no one +NO_WIN_LOGGING = Voittojen logaus ei ole k'a'ytoss'a' t'a'll'a' servulla +NOW_ON_LEVEL = Olet nyt tasolla +ON_LEVEL = Olet tasolla +ON_LEVEL_TEAM = Your team is on level +PLAY_GUNGAME = Pelaa GunGame? +PLAYER_RESET = %%n%s%%e resetoi itsens'a' takaisin tasolle %%g1%%e +POINTS = pistett'a' +POINTS_ABBR = pts +PRESS_KEY_TO_CONTINUE = Paina jotain numeron'a'pp'a'int'a' jatkaaksesi +PREVIOUS = Edellinen +PROGRESS_DISPLAY = Tarvitset %%n%i%%e tappoa edet'a'ksesi. Pisteet: %%n%i / %i%%e +PROGRESS_DISPLAY1 = You are in the lead by %i levels +PROGRESS_DISPLAY2 = You are tied for the lead with %s +PROGRESS_DISPLAY3 = You are tied for the lead with %s others +PROGRESS_DISPLAY4 = You are %i levels behind the leader +PROGRESS_DISPLAY_TEAM1 = Your team is in the lead by %i levels +PROGRESS_DISPLAY_TEAM2 = Your team is tied with the other team +PROGRESS_DISPLAY_TEAM3 = Your team is %i levels behind the other team +PRUNING = Tyhjennet'a'a'n %s: %i merkinn'a't poistettu +RECORD_STREAK = Record Streak: %s (%i in a row) +REQUIRED_KILLS = Vaaditut tapot +RESET_NOT_ALLOWED = You cannot reset your level during Teamplay Mode! +RESET_QUERY = Oletko VARMA ett'a',^nhaluat resetoida takaisin tasolle 1? +RESPAWN_COUNTDOWN = Ilmestyt takaisin %i sekunnissa +RULES = Rules +RULES_CONSOLE_LINE1 = %i) Sinun pit'a'a' saada tappo nykyisell'a' asella, jotta voit edet'a'. +RULES_CONSOLE_LINE2 = %i) Jos saat tapon v'a'a'r'a'll'a' aseella, tappoa ei lasketa ja j'a'a't nykyiselle tasolle. +RULES_CONSOLE_LINE3 = %i) Voit ansaita tasoja ASETTAMALLA ja PURKAMALLA pommeja. +RULES_CONSOLE_LINE4 = %i) Jos tapat itsesti menet'a't tason. +RULES_CONSOLE_LINE5 = %i) Friendly Fire pistet'a'a'n p'a'a'lle, kun joku saavuttaa KRANAATTI tason. +RULES_CONSOLE_LINE6A = %i) Voit saada enemm'a'nkin kuin yhden tason kierroksen aikana. +RULES_CONSOLE_LINE6B = %i) Voit saada vain yhden tason kierroksen aikana. +RULES_CONSOLE_LINE6C = %i) Voit saada jopa %i tasoa kierroksen aikana. +RULES_CONSOLE_LINE7 = %i) Jokaisen kierroksen j'a'lkeen on armonaika, jonka aikana pelaajat voivat vaithaa joukkuetta. +RULES_CONSOLE_LINE8 = %i) Koska Knife Pro on p'a'a'll'a', voit varastaa tason vastustajalta puukottamlla h'a'nt'a'. +RULES_CONSOLE_LINE9 = %i) Koska Turbo Mode on p'a'a'll'a', saat seuravaan aseen v'a'litt'o'm'a'sti tason edetess'a'. +RULES_CONSOLE_LINE10 = %i) Because Knife Elite Mode is enabled, once you level up you will have to use a knife until the next round. +RULES_CONSOLE_LINE11 = %i) Koska Deathmatch Mode on p'a'a'll'a', ilmestyt uudelleen loputtomasti. +RULES_CONSOLE_LINE12 = %i) Because Teamplay Mode is enabled, you will gain points as a team instead of individually. +RULES_CONSOLE_LINE13 = Kirjoittamalla !level n'a'et tasosi ja johtajan. +RULES_CONSOLE_LINE14 = Kirjoitamalla !weapons n'a'et aseiden j'a'rjestyksen. +RULES_CONSOLE_LINE15 = Kirjoitamalla !score n'a'et pistetilastot. +RULES_CONSOLE_LINE16 = Kirjoitamalla !top10 n'a'et servun top-10 voittajaa. +RULES_CONSOLE_LINE17 = Kirjoita !restart resetoidaksesi levelille 1. +RULES_MESSAGE_LINE1 = Pelin s'a'a'nn'o't ja komennot n'a'kyv'a't nyt konsolissa. +RULES_MESSAGE_LINE2 = Pari hy'o'dyllist'a' komentoa: +RULES_MESSAGE_LINE3 : +Kirjoitamalla !top10 n'a'et servun top-10 voittajaa^n +Kirjoittamalla !level n'a'et tasosi ja johtajan^n +Kirjoitamalla !weapons n'a'et aseiden j'a'rjestyksen^n +Kirjoitamalla !score n'a'et pistetilastot +: +SCORES = Pisteet +SLOW_DOWN = Hidasta v'a'h'a'n! T'a'm'a' on viel'a' l'a'mmittelykierros! +SPAWNPROTECTED_KILL = Tappoasi ei laskettu koska %%n%s%%e ilmesty %%g%i%%e sekunttia sitten +STATS = Stats +STATS_REGULAR = Regular Stats +STATS_TEAMPLAY = Teamplay Stats +STILL_LEVEL_ONE = Et ole edes viel'a' ylitt'a'nyt tasoa 1! +STOLE_LEVEL = %%n%s%%e varasti tason %%g%s%%e +STOLE_LEVEL_TEAM = %%n%s%%e stole %%g%i%%e points from %%g%s%%e (gained %%g%i%%e) +SUICIDE_LEVEL_DOWN = %%n%s%%e menetti tason koska tappoi itsens'a' +SUICIDE_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for a suicide +SUICIDE_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for a suicide +TEAM = team +TIED_LEADER_MULTI = %%n%s%%e is tied on level %%g%i%%e :: %%g%s%%e with %%g%s%%e others +TIED_LEADER_ONE = %%n%s%%e is tied on level %%g%i%%e :: %%g%s%%e with %%g%s%%e +TIED_LEADER_TEAM = The teams are tied on level %%g%i%%e :: %%g%s%%e +TK_LEVEL_DOWN = %%n%s%%e joutui takaisin tasolle %%g%i%%e oman joukkueen pelaajan taposta +TK_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for team killing +TK_SCORE_DOWN = %%n%s%%e menetti %%g%i%%e pistett'a' koska tappoi oman joukkoeen pelaajan +TK_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for team killing +TOP_10 = Top 10 +TRAILING_ON_LEVEL_TEAM = The %%n%s%%e team is trailing on level %%g%i%%e :: %%g%s%%e +TRIPLE_LEVELED = %%n%s%%e sai kolme tasoa kerralla!!! +UNRANKED = unranked +WARMUP_ROUND = L'a'mmittelykierros +WARMUP_ROUND_OVER = L'a'mmittelykierros on ohi! +WARMUP_ROUND_DISPLAY = L'a'mmittelykierros: %i sekunttia j'a'ljell'a' +WEAPONS = Weapons +WELCOME_MESSAGE_LINE1 = T'a'm'a' servu py'o'ritt'a'a' GunGame %s koodaaja: Avalanche +WELCOME_MESSAGE_LINE2 = Knife Pro on \rP'A'LL'A'!\w +WELCOME_MESSAGE_LINE3 = Turbo Mode on \rP'A'LL'A'!\w +WELCOME_MESSAGE_LINE4 = Knife Elite Mode is \rENABLED!\w +WELCOME_MESSAGE_LINE5 = Deathmatch Mode on \rP'A'LL'A'!\w +WELCOME_MESSAGE_LINE6 = Teamplay Mode is \rENABLED!\w +WELCOME_MESSAGE_LINE7 = There are \y%i\w levels this round! +WELCOME_MESSAGE_LINE8 : +Kirjoittamalla !rules n'a'et pelin s'a'a'nn'o't ja komennot^n +Kirjoittamalla !level n'a'et tasosi ja johtajan^n +Kirjoitamalla !score n'a'et pistetilastot voittajista ja h'a'vij'a'jist'a'^n +: +WIN_MOTD_LINE1 = %s won! +WIN_MOTD_LINE2 = the %s team +WIN_MOTD_LINE3 = is the winner! +WIN_MOTD_LINE4A = The final %s kill was made against %s +WIN_MOTD_LINE4B = The final %s kill was made against %s by %s +WIN_MOTD_LINE5A = This is %s's %i%s win,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_REG = This is %s's %i%s regular win,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_TP = This is %s's %i%s teamplay win,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE5B = %s now has a total of %i points. +WIN_MOTD_LINE5B_REG = %s now has a total of %i regular points. +WIN_MOTD_LINE5B_TP = %s now has a total of %i teamplay points. +WIN_MOTD_LINE5C = This is %s's %i%s win, for a total of %i points,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_REG = This is %s's %i%s regular win, for a total of %i points,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_TP = This is %s's %i%s teamplay win, for a total of %i points,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE6 = You spent %i%% of your time contributing to the winning team. +WIN_MOTD_LINE7A = You now have a total of %i wins.

This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_REG = You now have a total of %i regular wins.

This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_TP = You now have a total of %i teamplay wins.

This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_LINE7B = You have a total of %i wins. +WIN_MOTD_LINE7B_REG = You have a total of %i regular wins. +WIN_MOTD_LINE7B_TP = You have a total of %i teamplay wins. +WIN_MOTD_LINE7C = You have just gained %i points, for a total of %i points with %i wins! +WIN_MOTD_LINE7C_REG = You have just gained %i regular points, for a total of %i points with %i wins! +WIN_MOTD_LINE7C_TP = You have just gained %i teamplay points, for a total of %i points with %i wins! +WIN_MOTD_LINE8A = The next map will be %s +WIN_MOTD_LINE8B = There is one round of this map left. +WIN_MOTD_LINE8C = There are %i rounds of this map left. +WIN_MOTD_STREAK1 = This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_REG = This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_TP = This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_STREAK2 = Your record streak is %i wins in a row. +WIN_MOTD_STREAK2_REG = Your record regular streak is %i wins in a row. +WIN_MOTD_STREAK2_TP = Your record teamplay streak is %i wins in a row. +WIN_MOTD_STREAK3 = The all-time record streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_REG = The all-time record regular streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_TP = The all-time record teamplay streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK4 = %s just set a new all-time record streak with %i wins in a row! +WIN_MOTD_STREAK4_REG = %s just set a new all-time record regular streak with %i wins in a row! +WIN_MOTD_STREAK4_TP = %s just set a new all-time record teamplay streak with %i wins in a row! +WINS = voitot +WON = %%n%s%%e voitto +WON_TEAM = The %%n%s%%e team won +YES_REGULAR = Yes, regular mode +YES_TEAMPLAY = Yes, teamplay mode + +[ro] +AFK_KILL = Your kill did not count because %%n%s%%e was AFK +AUTOVOTE_RES1 = Playing GunGame with teamplay mode +AUTOVOTE_RES2 = Playing regular GunGame +AUTOVOTE_RES3 = Not playing GunGame +CANCEL = Anuleaza +CLOSE = Inchide +FRIENDLYFIRE_ON = %%gFriendly Fire este ON!!!%%e Ai grija in cine tragi! +GAINED_POINTS = You have just gained %%g%i%%e points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_REG = You have just gained %%g%i%%e regular points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_TP = You have just gained %%g%i%%e teamplay points, for a total of %%g%i%%e points with %%g%i%%e wins! +GUNGAME = GunGame +HK_LEVEL_DOWN = %%n%s%%e s-a intors cu un level mai jos %%g%i%%e pentru ca a omorat un ostatec +HK_SCORE_DOWN = %%n%s%%e a pierdut %%g%i%%e puncte pentru ca a omorat un ostatec +HK_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for a hostage kill +HK_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for a hostage kill +IN_A_ROW = %i in a row +JUMP_TO_ME = Jump to me +LEADER = Lider +LEADING_ON_LEVEL = %%n%s%%e a crescut la nivelul %%g%i%%e :: %%g%s%%e +LEADING_ON_LEVEL_TEAM = The %%n%s%%e team is leading on level %%g%i%%e :: %%g%s%%e +LEVEL = Nivel +LEVEL_MESSAGE_LINE1A = Ai facut %i/%i din victime cerute +LEVEL_MESSAGE_LINE1B = Your team has made %i/%i of its required kills +LEVEL_MESSAGE_LINE2A = Este cel mai avansat in nivel +LEVEL_MESSAGE_LINE2B = Ai ajuns la acelasi nivel cu liderul +LEVEL_MESSAGE_LINE2C = Esti %i nivele in spatele liderului +LEVEL_MESSAGE_LINE3A = Ai castigat de %i ori +LEVEL_MESSAGE_LINE3A_REG = You have %i regular wins +LEVEL_MESSAGE_LINE3A_TP = You have %i teamplay wins +LEVEL_MESSAGE_LINE3B = You have accumulated %i points over %i wins +LEVEL_MESSAGE_LINE3B_REG = You have accumulated %i regular points over %i wins +LEVEL_MESSAGE_LINE3B_TP = You have accumulated %i teamplay points over %i wins +LEVEL_MESSAGE_LINE3C = You have won %i times (ranked %i%s) +LEVEL_MESSAGE_LINE3D = You have accumulated %i points over %i wins (ranked %i%s) +LEVEL_MESSAGE_LINE4 = Your record streak is %i wins in a row +LEVEL_MESSAGE_LINE4_REG = Your record regular streak is %i wins in a row +LEVEL_MESSAGE_LINE4_TP = Your record teamplay streak is %i wins in a row +LEVEL_MESSAGE_LINE5A = Lideri acum: %s +LEVEL_MESSAGE_LINE5B = Lider acum: %s +LEVEL_MESSAGE_LINE6 = Nivelul liderului: %i (%s) +LEVELS_BEHIND_LEADER = Esti cu %%g%i%%e nivele in spatele liderului +NEXT = Urmatorul +NO = Nu +NONE = nimic +NO_ONE = no one +NO_WIN_LOGGING = Acest server nu salveaza castigarea +NOW_ON_LEVEL = Esti la nivelul +ON_LEVEL = Esti la nivelul +ON_LEVEL_TEAM = Your team is on level +PLAY_GUNGAME = Joci GunGame? +PLAYER_RESET = %%n%s%%e si-a resetat nivelul intorcandu-se la nivelul %%g1%%e +POINTS = puncte +POINTS_ABBR = pts +PRESS_KEY_TO_CONTINUE = Apasa orice numar pentru a continua +PREVIOUS = Anterior +PROGRESS_DISPLAY = Ai nevoie de %%n%i%%e victime sa avansezi. Scor: %%n%i / %i%%e +PROGRESS_DISPLAY1 = You are in the lead by %i levels +PROGRESS_DISPLAY2 = You are tied for the lead with %s +PROGRESS_DISPLAY3 = You are tied for the lead with %s others +PROGRESS_DISPLAY4 = You are %i levels behind the leader +PROGRESS_DISPLAY_TEAM1 = Your team is in the lead by %i levels +PROGRESS_DISPLAY_TEAM2 = Your team is tied with the other team +PROGRESS_DISPLAY_TEAM3 = Your team is %i levels behind the other team +PRUNING = Pruning %s: %i intrari sterse +RECORD_STREAK = Record Streak: %s (%i in a row) +REQUIRED_KILLS = Victime necesare +RESET_NOT_ALLOWED = You cannot reset your level during Teamplay Mode! +RESET_QUERY = Esti sigur ca vrei^nsa revii la nivelul 1? +RESPAWN_COUNTDOWN = Vei reaparea in %i secunde +RULES = Reguli +RULES_CONSOLE_LINE1 = %i) Trebuie sa faci victime cu arm ape care o ai pentru a avansa la nivelul urmator +RULES_CONSOLE_LINE2 = %i) Daca esti omorat nu pierzi nici un nivel (in afara de cutit). +RULES_CONSOLE_LINE3 = %i) Poti lua nivele PLANTAND BOMBA sau DEFUZAND +RULES_CONSOLE_LINE4 = %i) Daca te sinucizi, vei pierde un nivel +RULES_CONSOLE_LINE5 = %i) Friendly Fire este ON cand cineva ajunge la nivelul GRENADA +RULES_CONSOLE_LINE6A = %i) Poti lua mai mult de un nivel / runda. +RULES_CONSOLE_LINE6B = %i) Poti lua doar un nivel / runda +RULES_CONSOLE_LINE6C = %i) Poti lua pana la %i nivele / runda. +RULES_CONSOLE_LINE7 = %i) Exista o perioada de gratie la fiecare sfarsit d erunda in care jucatorii pot sa se mute. +RULES_CONSOLE_LINE8 = %i) Pentru ca Knife Pro este activat, poti fura un nivel de la adversari omorandu-i cu cutitul. +RULES_CONSOLE_LINE9 = %i) Pentru ca Turbo Mode este activat, vei primi arma urmatoare imediat ce vei face nivel. +RULES_CONSOLE_LINE10 = %i) Because Knife Elite Mode is enabled, once you level up you will have to use a knife until the next round. +RULES_CONSOLE_LINE11 = %i) Pentru ca Deathmatch este activat, vei reaparea mereu dupa ce vei fi ucis. +RULES_CONSOLE_LINE12 = %i) Because Teamplay Mode is enabled, you will gain points as a team instead of individually. +RULES_CONSOLE_LINE13 = Tasteaza !level pentru a vedea nivelul tau current si cine este cel mai avansat nivel +RULES_CONSOLE_LINE14 = Tasteaza !weapons pentru a vedea armele in ordine. +RULES_CONSOLE_LINE15 = Tasteaza !score pentru a vedea scorul jucatorilor. +RULES_CONSOLE_LINE16 = Tasteaza !top10 pentru a vedea topul primilor 10 jucatori de pe server. +RULES_CONSOLE_LINE17 = Tasteaza !restart pentru a reveni la nivelul 1. +RULES_MESSAGE_LINE1 = Regulile jocului si toate comenzile sunt aratate in consola +RULES_MESSAGE_LINE2 = Cateva comenzi folosite: +RULES_MESSAGE_LINE3 : +Tasteaza !top10 pentru a vedea topul primilor 10 jucatori de pe server. +Tasteaza !level pentru a vedea nivelul tau current si cine este cel mai avansat nivel +Tasteaza !weapons pentru a vedea armele in ordine. +Tasteaza !score pentru a vedea scorul jucatorilor +: +SCORES = Scor +SLOW_DOWN = Relaxeaza-tea-te! E runda de incalzire! +SPAWNPROTECTED_KILL = Fragul tau nu a fost socotit pentru ca %%n%s%%e a aparut in %%g%i%%e secunde +STATS = Stats +STATS_REGULAR = Regular Stats +STATS_TEAMPLAY = Teamplay Stats +STILL_LEVEL_ONE = Nici nu ai trecut inca de nivelul 1! +STOLE_LEVEL = %%n%s%%e a furat un nivel lui %%g%s%%e +STOLE_LEVEL_TEAM = %%n%s%%e stole %%g%i%%e points from %%g%s%%e (gained %%g%i%%e) +SUICIDE_LEVEL_DOWN = %%n%s%%e a pierdut un nivel pt ca s-a sinucis +SUICIDE_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for a suicide +SUICIDE_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for a suicide +TEAM = team +TIED_LEADER_MULTI = %%n%s%%e is tied on level %%g%i%%e :: %%g%s%%e with %%g%s%%e others +TIED_LEADER_ONE = %%n%s%%e is tied on level %%g%i%%e :: %%g%s%%e with %%g%s%%e +TIED_LEADER_TEAM = The teams are tied on level %%g%i%%e :: %%g%s%%e +TK_LEVEL_DOWN = %%n%s%%e a coborat un nivel %%g%i%%e pentru ca si-a ucis un coechipier +TK_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for team killing +TK_SCORE_DOWN = %%n%s%%e a pierdut %%g%i%%e puncte pentru ca si-a ucis un coechipier +TK_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for team killing +TOP_10 = Top 10 +TRAILING_ON_LEVEL_TEAM = The %%n%s%%e team is trailing on level %%g%i%%e :: %%g%s%%e +TRIPLE_LEVELED = %%n%s%%e triplu nivel!!! +UNRANKED = unranked +WARMUP_ROUND = Runda de incalzire +WARMUP_ROUND_OVER = Runda de incalzire s-a terminat! +WARMUP_ROUND_DISPLAY = Runda de incalzire: %i secunde ramase +WEAPONS = Arme +WELCOME_MESSAGE_LINE1 = Acest server ruleaza GunGame %s by Avalanche +WELCOME_MESSAGE_LINE2 = Knife Pro este \rACTIVAT!\w +WELCOME_MESSAGE_LINE3 = Turbo Mode este \rACTIVAT!\w +WELCOME_MESSAGE_LINE4 = Knife Elite Mode is \rENABLED!\w +WELCOME_MESSAGE_LINE5 = Deathmatch Mode este \rACTIVAT!\w +WELCOME_MESSAGE_LINE6 = Teamplay Mode is \rENABLED!\w +WELCOME_MESSAGE_LINE7 = There are \y%i\w levels this round! +WELCOME_MESSAGE_LINE8 : +Tasteaza !rules pentru instructiuni, cum sa joci si o lista de comenzi +Tasteaza !level pentru a sti ce nivel esti si cine e cel mai avansat nivel +Tasteaza !score pentru a primi o lista a tuturor jucatorilor si castigatorilor in consola +: +WIN_MOTD_LINE1 = %s won! +WIN_MOTD_LINE2 = the %s team +WIN_MOTD_LINE3 = is the winner! +WIN_MOTD_LINE4A = The final %s kill was made against %s +WIN_MOTD_LINE4B = The final %s kill was made against %s by %s +WIN_MOTD_LINE5A = This is %s's %i%s win,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_REG = This is %s's %i%s regular win,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_TP = This is %s's %i%s teamplay win,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE5B = %s now has a total of %i points. +WIN_MOTD_LINE5B_REG = %s now has a total of %i regular points. +WIN_MOTD_LINE5B_TP = %s now has a total of %i teamplay points. +WIN_MOTD_LINE5C = This is %s's %i%s win, for a total of %i points,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_REG = This is %s's %i%s regular win, for a total of %i points,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_TP = This is %s's %i%s teamplay win, for a total of %i points,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE6 = You spent %i%% of your time contributing to the winning team. +WIN_MOTD_LINE7A = You now have a total of %i wins.

This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_REG = You now have a total of %i regular wins.

This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_TP = You now have a total of %i teamplay wins.

This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_LINE7B = You have a total of %i wins. +WIN_MOTD_LINE7B_REG = You have a total of %i regular wins. +WIN_MOTD_LINE7B_TP = You have a total of %i teamplay wins. +WIN_MOTD_LINE7C = You have just gained %i points, for a total of %i points with %i wins! +WIN_MOTD_LINE7C_REG = You have just gained %i regular points, for a total of %i points with %i wins! +WIN_MOTD_LINE7C_TP = You have just gained %i teamplay points, for a total of %i points with %i wins! +WIN_MOTD_LINE8A = The next map will be %s +WIN_MOTD_LINE8B = There is one round of this map left. +WIN_MOTD_LINE8C = There are %i rounds of this map left. +WIN_MOTD_STREAK1 = This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_REG = This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_TP = This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_STREAK2 = Your record streak is %i wins in a row. +WIN_MOTD_STREAK2_REG = Your record regular streak is %i wins in a row. +WIN_MOTD_STREAK2_TP = Your record teamplay streak is %i wins in a row. +WIN_MOTD_STREAK3 = The all-time record streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_REG = The all-time record regular streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_TP = The all-time record teamplay streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK4 = %s just set a new all-time record streak with %i wins in a row! +WIN_MOTD_STREAK4_REG = %s just set a new all-time record regular streak with %i wins in a row! +WIN_MOTD_STREAK4_TP = %s just set a new all-time record teamplay streak with %i wins in a row! +WINS = castigate +WON = %%n%s%%e castigat +WON_TEAM = The %%n%s%%e team won +YES = Da +YES_REGULAR = Yes, regular mode +YES_TEAMPLAY = Yes, teamplay mode + +[da] +AFK_KILL = Your kill did not count because %%n%s%%e was AFK +AUTOVOTE_RES1 = Playing GunGame with teamplay mode +AUTOVOTE_RES2 = Playing regular GunGame +AUTOVOTE_RES3 = Not playing GunGame +CANCEL = Cancel +CLOSE = Close +FRIENDLYFIRE_ON = %%gFriendly Fire is ON!!!%%e Pas paa ikke at skyde dine holdkammerater! +GAINED_POINTS = You have just gained %%g%i%%e points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_REG = You have just gained %%g%i%%e regular points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_TP = You have just gained %%g%i%%e teamplay points, for a total of %%g%i%%e points with %%g%i%%e wins! +GUNGAME = GunGame +HK_LEVEL_DOWN = %%n%s%%e blev sat tilbage til niveau %%g%i%%e for at slaa et gidsel ihjel +HK_SCORE_DOWN = %%n%s%%e tabte %%g%i%%e points for at slaa et gidsel ihjel +HK_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for a hostage kill +HK_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for a hostage kill +IN_A_ROW = %i in a row +JUMP_TO_ME = Jump to me +LEADER = FQrer +LEADING_ON_LEVEL = %%n%s%%e fQrer paa niveau %%g%i%%e :: %%g%s%%e +LEADING_ON_LEVEL_TEAM = The %%n%s%%e team is leading on level %%g%i%%e :: %%g%s%%e +LEVEL = Niveau +LEVEL_MESSAGE_LINE1A = Du har lavet %i/%i af de nQdvendige drab +LEVEL_MESSAGE_LINE1B = Your team has made %i/%i of its required kills +LEVEL_MESSAGE_LINE2A = Du er paa fQrste pladsen +LEVEL_MESSAGE_LINE2B = Du er paa en delt fQrste plads +LEVEL_MESSAGE_LINE2C = Du er %i niveauer bag den som fQrer +LEVEL_MESSAGE_LINE3A = Du har vundet %i gange +LEVEL_MESSAGE_LINE3A_REG = You have %i regular wins +LEVEL_MESSAGE_LINE3A_TP = You have %i teamplay wins +LEVEL_MESSAGE_LINE3B = You have accumulated %i points over %i wins +LEVEL_MESSAGE_LINE3B_REG = You have accumulated %i regular points over %i wins +LEVEL_MESSAGE_LINE3B_TP = You have accumulated %i teamplay points over %i wins +LEVEL_MESSAGE_LINE3C = You have won %i times (ranked %i%s) +LEVEL_MESSAGE_LINE3D = You have accumulated %i points over %i wins (ranked %i%s) +LEVEL_MESSAGE_LINE4 = Your record streak is %i wins in a row +LEVEL_MESSAGE_LINE4_REG = Your record regular streak is %i wins in a row +LEVEL_MESSAGE_LINE4_TP = Your record teamplay streak is %i wins in a row +LEVEL_MESSAGE_LINE5A = De spillere som fQrer er: %s +LEVEL_MESSAGE_LINE5B = Den spiller som fQrer er: %s +LEVEL_MESSAGE_LINE6 = Niveauet paa den som fQrer er: %i (%s) +LEVELS_BEHIND_LEADER = Du er nu %%g%i%%e niveauer efter den som fQrer +NEXT = Naeste +NONE = Intet/ingen +NO_ONE = no one +NO_WIN_LOGGING = Denne server gemmer/husker ikke data om vundne spil +NOW_ON_LEVEL = Du er nu paa niveau +ON_LEVEL = Du er paa niveau +ON_LEVEL_TEAM = Your team is on level +PLAY_GUNGAME = Leg GunGame? +PLAYER_RESET = %%n%s%%e nul stiller dit nuvaerende niveau %%g1%%e +POINTS = points +POINTS_ABBR = pts +PRESS_KEY_TO_CONTINUE = Tryk en tast for at fortsaette +PREVIOUS = Tidligere +PROGRESS_DISPLAY = Du behQver %%n%i%%e drab for at avancere. Score: %%n%i / %i%%e +PROGRESS_DISPLAY1 = You are in the lead by %i levels +PROGRESS_DISPLAY2 = You are tied for the lead with %s +PROGRESS_DISPLAY3 = You are tied for the lead with %s others +PROGRESS_DISPLAY4 = You are %i levels behind the leader +PROGRESS_DISPLAY_TEAM1 = Your team is in the lead by %i levels +PROGRESS_DISPLAY_TEAM2 = Your team is tied with the other team +PROGRESS_DISPLAY_TEAM3 = Your team is %i levels behind the other team +PRUNING = Oprydning %s: %i posteringer fjernet +RECORD_STREAK = Record Streak: %s (%i in a row) +REQUIRED_KILLS = NQdvendige drab +RESET_NOT_ALLOWED = You cannot reset your level during Teamplay Mode! +RESET_QUERY = Er du sikker paa at du^nvil starte forfra paa level 1? +RESPAWN_COUNTDOWN = Du genstarter i spawn om %i sekunder +RULES = Regler +RULES_CONSOLE_LINE1 = %i) Du skal draebe en modspiller fQr du kan avancere til naeste niveau. +RULES_CONSOLE_LINE2 = %i) Hvis du draeber en med et vaaben uden for den normale vaeben raekkefQlge, virker det ikke og du forbliver paa dit nuvaerende niveau. +RULES_CONSOLE_LINE3 = %i) Du kan avancere ved at plante eller defuse bomben. +RULES_CONSOLE_LINE4 = %i) Begaar du selvmord mister du et niveau. +RULES_CONSOLE_LINE5 = %i) Friendly Fire saettes automatisk igang naar en spiller naar til GRANAT niveau. +RULES_CONSOLE_LINE6A = %i) Du kan avancere flere niveauer i en runde. +RULES_CONSOLE_LINE6B = %i) Du kan kun avancere et niveau pr runde. +RULES_CONSOLE_LINE6C = %i) Du kan avancere op til %i niveauer pr runde. +RULES_CONSOLE_LINE7 = %i) Der er en inaktiv periode efter hver runde hvor spillere kan bytte hold. +RULES_CONSOLE_LINE8 = %i) Fordi Knife Pro indstillingen er aktiv, kan du stjaele et niveau fra en modspiller ved at draebe dem med kniv. +RULES_CONSOLE_LINE9 = %i) Fordi Turbo Mode indstillingen er aktiv , faar du et nyt vaaben starks efter at du stiger et niveau. +RULES_CONSOLE_LINE10 = %i) Because Knife Elite Mode is enabled, once you level up you will have to use a knife until the next round. +RULES_CONSOLE_LINE11 = %i) Fordi Deathmatch Mode indstillingen er aktiv, vil du respawne hele tiden. +RULES_CONSOLE_LINE12 = %i) Because Teamplay Mode is enabled, you will gain points as a team instead of individually. +RULES_CONSOLE_LINE13 = Skriv !level for at se hvad niveau du befinder dig paa og hvem der ser ud til at vinde runden. +RULES_CONSOLE_LINE14 = Skriv !weapons for at se hvilken raekkefQlge du vil modtage nyt vaaben. +RULES_CONSOLE_LINE15 = Skriv !score for at se alle spillers nuvaerende score. +RULES_CONSOLE_LINE16 = Skriv !top10 for at se de 10 bedste spillere paa serveren. +RULES_CONSOLE_LINE17 = Skriv !restart for at genstarte dig selv fra level 1. +RULES_MESSAGE_LINE1 = Spilleregler og alle kommandoer er nu oplistet i din consol. +RULES_MESSAGE_LINE2 = Her er nogle anvendelige say kommandoer: +RULES_MESSAGE_LINE3 : +Skriv !top10 for at se de 10 bedste spillere paa serveren^n +Skriv !level for at se hvilket niveau du befinder dig paa og hvem der ser ud til at vinde runden^n +Skriv !weapons for at se hvilken raekkefQlge du vil modtage nye vaaben ^n +Skriv !score for at se alle spilleres nuvaerende score +: +SCORES = Scores +SLOW_DOWN = Rolig nu! Dette er kun opvarmningsrunden! +SPAWNPROTECTED_KILL = Dit drab talte ikke med fordi %%n%s%%e spawnede i det sidste %%g%i%%e sekund +STATS = Stats +STATS_REGULAR = Regular Stats +STATS_TEAMPLAY = Teamplay Stats +STILL_LEVEL_ONE = Du er stadig kun paa niveau 1! +STOLE_LEVEL = %%n%s%%e stjal et niveau fra %%g%s%%e +STOLE_LEVEL_TEAM = %%n%s%%e stole %%g%i%%e points from %%g%s%%e (gained %%g%i%%e) +SUICIDE_LEVEL_DOWN = %%n%s%%e mister et niveau pga selvmord +SUICIDE_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for a suicide +SUICIDE_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for a suicide +TEAM = team +TIED_LEADER_MULTI = %%n%s%%e is tied on level %%g%i%%e :: %%g%s%%e with %%g%s%%e others +TIED_LEADER_ONE = %%n%s%%e is tied on level %%g%i%%e :: %%g%s%%e with %%g%s%%e +TIED_LEADER_TEAM = The teams are tied on level %%g%i%%e :: %%g%s%%e +TK_LEVEL_DOWN = %%n%s%%e blev sat tilbage til niveau %%g%i%%e pga drab paa en fra eget hold +TK_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for team killing +TK_SCORE_DOWN = %%n%s%%e mistede %%g%i%%e point pga drab paa en fra eget hold +TK_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for team killing +TOP_10 = Top 10 +TRAILING_ON_LEVEL_TEAM = The %%n%s%%e team is trailing on level %%g%i%%e :: %%g%s%%e +TRIPLE_LEVELED = %%n%s%%e tre dobbelt niveau!!! +UNRANKED = unranked +WARMUP_ROUND = Opvarmningsrunde +WARMUP_ROUND_OVER = Opvarmningsrunden er overstaaet! +WARMUP_ROUND_DISPLAY = Opvarmningsrunden: %i sekunder tilbage +WEAPONS = Vaaben +WELCOME_MESSAGE_LINE1 = Denne server kQrer GunGame %s lavet af Avalanche +WELCOME_MESSAGE_LINE2 = Knife Pro er \rENABLED!\w +WELCOME_MESSAGE_LINE3 = Turbo Mode er \rENABLED!\w +WELCOME_MESSAGE_LINE4 = Knife Elite Mode is \rENABLED!\w +WELCOME_MESSAGE_LINE5 = Deathmatch Mode er \rENABLED!\w +WELCOME_MESSAGE_LINE6 = Teamplay Mode is \rENABLED!\w +WELCOME_MESSAGE_LINE7 = There are \y%i\w levels this round! +WELCOME_MESSAGE_LINE8 : +Skriv !rules for at faa instruction om hvordan spillet virker samt en liste over kommandoer som du kan skrive^n +Skriv !level for at se hvilket niveau du befinder dig paa og hvem der ser ud til at vinde i Qjeblikket^n +Skriv !score for at se alle spilleres nuvaerende score i din consol^n +: +WIN_MOTD_LINE1 = %s won! +WIN_MOTD_LINE2 = the %s team +WIN_MOTD_LINE3 = is the winner! +WIN_MOTD_LINE4A = The final %s kill was made against %s +WIN_MOTD_LINE4B = The final %s kill was made against %s by %s +WIN_MOTD_LINE5A = This is %s's %i%s win,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_REG = This is %s's %i%s regular win,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_TP = This is %s's %i%s teamplay win,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE5B = %s now has a total of %i points. +WIN_MOTD_LINE5B_REG = %s now has a total of %i regular points. +WIN_MOTD_LINE5B_TP = %s now has a total of %i teamplay points. +WIN_MOTD_LINE5C = This is %s's %i%s win, for a total of %i points,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_REG = This is %s's %i%s regular win, for a total of %i points,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_TP = This is %s's %i%s teamplay win, for a total of %i points,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE6 = You spent %i%% of your time contributing to the winning team. +WIN_MOTD_LINE7A = You now have a total of %i wins.

This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_REG = You now have a total of %i regular wins.

This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_TP = You now have a total of %i teamplay wins.

This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_LINE7B = You have a total of %i wins. +WIN_MOTD_LINE7B_REG = You have a total of %i regular wins. +WIN_MOTD_LINE7B_TP = You have a total of %i teamplay wins. +WIN_MOTD_LINE7C = You have just gained %i points, for a total of %i points with %i wins! +WIN_MOTD_LINE7C_REG = You have just gained %i regular points, for a total of %i points with %i wins! +WIN_MOTD_LINE7C_TP = You have just gained %i teamplay points, for a total of %i points with %i wins! +WIN_MOTD_LINE8A = The next map will be %s +WIN_MOTD_LINE8B = There is one round of this map left. +WIN_MOTD_LINE8C = There are %i rounds of this map left. +WIN_MOTD_STREAK1 = This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_REG = This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_TP = This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_STREAK2 = Your record streak is %i wins in a row. +WIN_MOTD_STREAK2_REG = Your record regular streak is %i wins in a row. +WIN_MOTD_STREAK2_TP = Your record teamplay streak is %i wins in a row. +WIN_MOTD_STREAK3 = The all-time record streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_REG = The all-time record regular streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_TP = The all-time record teamplay streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK4 = %s just set a new all-time record streak with %i wins in a row! +WIN_MOTD_STREAK4_REG = %s just set a new all-time record regular streak with %i wins in a row! +WIN_MOTD_STREAK4_TP = %s just set a new all-time record teamplay streak with %i wins in a row! +WINS = wins +WON = %%n%s%%e won +WON_TEAM = The %%n%s%%e team won +YES_REGULAR = Yes, regular mode +YES_TEAMPLAY = Yes, teamplay mode + +[ru] +AFK_KILL = Your kill did not count because %%n%s%%e was AFK +AUTOVOTE_RES1 = Playing GunGame with teamplay mode +AUTOVOTE_RES2 = Playing regular GunGame +AUTOVOTE_RES3 = Not playing GunGame +CANCEL = Îòìåíà +CLOSE = Çàêðûòü +FRIENDLYFIRE_ON = %%gFriendly Fire ÂÊËÞ×ÅÃ!!!%%e ÃÃ¥ ïàëè ïî ñâîèì!!! +GAINED_POINTS = You have just gained %%g%i%%e points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_REG = You have just gained %%g%i%%e regular points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_TP = You have just gained %%g%i%%e teamplay points, for a total of %%g%i%%e points with %%g%i%%e wins! +GUNGAME = GunGame +HK_LEVEL_DOWN = %%n%s%%e îïóñòèëñÿ íà óðîâåíü %%g%i%%e óáèâ çàëîæíèêà +HK_SCORE_DOWN = %%n%s%%e ïîòåðÿë %%g%i%%e î÷êîâ óáèâ çàëîæíèêà +HK_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for a hostage kill +HK_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for a hostage kill +IN_A_ROW = %i in a row +JUMP_TO_ME = Jump to me +LEADER = ëèäåð +LEADING_ON_LEVEL = %%n%s%%e ëèäèðóåò ñ óðîâíåì %%g%i%%e :: %%g%s%%e +LEADING_ON_LEVEL_TEAM = The %%n%s%%e team is leading on level %%g%i%%e :: %%g%s%%e +LEVEL = Óðîâåíü +LEVEL_MESSAGE_LINE1A = Âû âûïîëíèëè %i/%i èç íåîáõîáõîäèìûõ óáèéñòâ +LEVEL_MESSAGE_LINE1B = Your team has made %i/%i of its required kills +LEVEL_MESSAGE_LINE2A = Âû ëèäèðóåòå +LEVEL_MESSAGE_LINE2B = Âû ïðåòåíäóåòå íà çâàíèå ëèäåðà +LEVEL_MESSAGE_LINE2C = Âû íà %i óðîâíåé îòñòà¸òå îò ëèäåðà +LEVEL_MESSAGE_LINE3A = Âû ïîïåäèëè %i ðàç +LEVEL_MESSAGE_LINE3A_REG = You have %i regular wins +LEVEL_MESSAGE_LINE3A_TP = You have %i teamplay wins +LEVEL_MESSAGE_LINE3B = You have accumulated %i points over %i wins +LEVEL_MESSAGE_LINE3B_REG = You have accumulated %i regular points over %i wins +LEVEL_MESSAGE_LINE3B_TP = You have accumulated %i teamplay points over %i wins +LEVEL_MESSAGE_LINE3C = You have won %i times (ranked %i%s) +LEVEL_MESSAGE_LINE3D = You have accumulated %i points over %i wins (ranked %i%s) +LEVEL_MESSAGE_LINE4 = Your record streak is %i wins in a row +LEVEL_MESSAGE_LINE4_REG = Your record regular streak is %i wins in a row +LEVEL_MESSAGE_LINE4_TP = Your record teamplay streak is %i wins in a row +LEVEL_MESSAGE_LINE5A = Ãûíåøíèå ëèäåðû: %s +LEVEL_MESSAGE_LINE5B = Ãûíåøíèé ëèäåð: %s +LEVEL_MESSAGE_LINE6 = Óðîâåíü ëèäåðà: %i (%s) +LEVELS_BEHIND_LEADER = Ñåé÷àñ âû íà %%g%i%%e óðîâíåé îòñòà¸òå îò ëèäåðà +NEXT = Ñëåäóþùàÿ +NO = No +NONE = Ãèêàêóþ +NO_ONE = no one +NO_WIN_LOGGING = Ëîã ïîáåä íà ñåðâåðå îòêëþ÷åí +NOW_ON_LEVEL = Âàø íûíåøíèé óðîâåíü +ON_LEVEL = Âàø óðîâåíü +ON_LEVEL_TEAM = Your team is on level +PLAY_GUNGAME = Игра GunGame? +PLAYER_RESET = %%n%s%%e ñáðîñèë ñâîé óðîâåíü äî óðîâíÿ %%g1%%e +POINTS = Î÷êè +POINTS_ABBR = pts +PRESS_KEY_TO_CONTINUE = Ãàæìèòå ëþáóþ öèôðîâóþ êëàâèøó, ÷òîáû ïðîäîëæèòü +PREVIOUS = Ãðåäûäóùèé +PROGRESS_DISPLAY = Âàì òðåáóåòñÿ %%n%i%%e óáèéñòâ äëÿ ïîâûøåíèÿ óðîâíÿ. Ñ÷¸ò: %%n%i / %i%%e +PROGRESS_DISPLAY1 = You are in the lead by %i levels +PROGRESS_DISPLAY2 = You are tied for the lead with %s +PROGRESS_DISPLAY3 = You are tied for the lead with %s others +PROGRESS_DISPLAY4 = You are %i levels behind the leader +PROGRESS_DISPLAY_TEAM1 = Your team is in the lead by %i levels +PROGRESS_DISPLAY_TEAM2 = Your team is tied with the other team +PROGRESS_DISPLAY_TEAM3 = Your team is %i levels behind the other team +PRUNING = Ëèøíèå %s: %i çàïèñåé óäàëåíû +RECORD_STREAK = Record Streak: %s (%i in a row) +REQUIRED_KILLS = Ãåîáõîäèìî óáèéñòâ +RESET_NOT_ALLOWED = You cannot reset your level during Teamplay Mode! +RESET_QUERY = Âû ÓÂÅÃÃ…ÃÛ ^n÷òî õîòèòå^nñáðîñèòü ñâîé óðîâåíü äî íà÷àëüíîãî? +RESPAWN_COUNTDOWN = Âû ïîÿâèòåñü ÷åðåç %i ñåêóíä +RULES = Ãðàâèëà +RULES_CONSOLE_LINE1 = %i) Âû äîëæíû ñîâåðøèòü óáèéñòâî ñ âàøèì íûíåøíèì îðóæèåì, ÷òîáû ïîâûñèòü óðîâåíü. +RULES_CONSOLE_LINE2 = %i) Åñëè âû ñîâåðøàåòå óáèéñòâî ñ äðóãèì îðóæèåì, òî óáèéñòâî íå çàñ÷èòûâàåòñÿ è óðîâåíü íå ïîâûøàåòñÿ. +RULES_CONSOLE_LINE3 = %i) Âû ìîæåòå ïîâûñèòü óðîâåíü ÇÀÌÈÃÈÃÎÂÀ èëè ÃÀÇÌÈÃÈÃÎÂÀ áîìáó. +RULES_CONSOLE_LINE4 = %i) Ñîâåðøèâ ñàìîóáèéñòâî, òåðÿåøü îäèí óðîâåíü. +RULES_CONSOLE_LINE5 = %i) Friendly Fire ÂÊËÞ×ÀÅÒÑß êîãäà êòî-íèáóäü äîñòèãàåò óðîâíÿ ñ ÃÃÀÃÀÒÀÌÈ. +RULES_CONSOLE_LINE6A = %i) Âû ìîæåòå ïîâûøàòü óðîâåíü áîëåå îäíîãî ðàçà çà ðàóíä. +RULES_CONSOLE_LINE6B = %i) Âû ìîæåòå ïîâûñèò óðîâåíü òîëüêî îäèí ðàç çà ðàóíä. +RULES_CONSOLE_LINE6C = %i) Âû ìîæåòå çàðàáîòàòü äî %i óðîâíåé çà ðàóíä. +RULES_CONSOLE_LINE7 = %i)  êîíöå êàæäîãî ðàóíäà äàåòñÿ âðåìÿ ÷òîáû èãðîêè ìîãëè ïîìåíÿòü êîìàíäó. +RULES_CONSOLE_LINE8 = %i) Òàê êàê Knife Pro âêëþ÷¸í, âû ìîæåòå óêðàñòü óðîâåíü ó äðóãîãî èãðîêà, çàðåçàâ ýòîãî óáëþäêà. +RULES_CONSOLE_LINE9 = %i) Òàê êàê Turbo Mode âêëþ÷¸í, âû ïîëó÷èòå ñëåäóþùåå îðóæèå ñðàçó ïîñëå ïîâûøåíèÿ óðîâíÿ. +RULES_CONSOLE_LINE10 = %i) Because Knife Elite Mode is enabled, once you level up you will have to use a knife until the next round. +RULES_CONSOLE_LINE11 = %i) Òàê êàê Deathmatch Mode âêëþ÷¸í, âû áóäåòå ïîñòîÿííî ðåñïàóíèòñÿ. +RULES_CONSOLE_LINE12 = %i) Because Teamplay Mode is enabled, you will gain points as a team instead of individually. +RULES_CONSOLE_LINE13 = Ãèøè !level ÷òîáû ïîñìîòðåòü ñâîé óðîâåíü è êòî ïîáåæäàåò. +RULES_CONSOLE_LINE14 = Ãèøè !weapons ÷òîáû ïîñìîòðåòü ïîðÿäîê ïîÿâëåíèÿ îðóæèÿ. +RULES_CONSOLE_LINE15 = Ãèøè !score ÷òîáû ïîñìîòðåòü î÷êè äðóãèõ èãðîêîâ. +RULES_CONSOLE_LINE16 = Ãèøè !top10 ÷òîáû ïîñìîòðåòü 10 ëó÷øèõ èãðîêîâ ýòîãî ñåðâåðà. +RULES_CONSOLE_LINE17 = Ãèøè !restart ÷òîáû ñáðîñèòü óðîâåíü äî íà÷àëüíîãî. +RULES_MESSAGE_LINE1 = Ãðàâèëà èãðû è âñå êîììàíäû òåïåðü ïðèâåäåíû â êîíñîëè +RULES_MESSAGE_LINE2 = Ãåêîòîðûå ïîëåçíûå êîììàíäû: +RULES_MESSAGE_LINE3 : +Ãèøè !top10 ÷òîáû ïîñìîòðåòü 10 ëó÷øèõ èãðîêîâ ýòîãî ñåðâåðà^n +Ãèøè !level ÷òîáû ïîñìîòðåòü ñâîé óðîâåíü è êòî ïîáåæäàåò^n +Ãèøè !weapons ÷òîáû ïîñìîòðåòü ïîðÿäîê ïîÿâëåíèÿ îðóæèÿ^n +Ãèøè !score ÷òîáû ïîñìîòðåòü î÷êè äðóãèõ èãðîêîâ^n +: +SCORES = Î÷êè +SLOW_DOWN = Åé!!! Ãðèòîðìîçè!!! Ãòî âñåãî ëèøü ðàçîãðåâî÷íûé ðàóíä!!! +SPAWNPROTECTED_KILL = Óáèéñòâî íå çàñ÷èòûâàåòñÿ ïîòîìó, ÷òî %%n%s%%e ïîÿâèëñÿ â ïîñëåäíèå %%g%i%%e ñåêóíäû +STATS = Stats +STATS_REGULAR = Regular Stats +STATS_TEAMPLAY = Teamplay Stats +STILL_LEVEL_ONE = Åé!!! Òû âñ¸ åùå íà ïåðâîì óðîâíå!!! íóóóóá!!! +STOLE_LEVEL = %%n%s%%e óêðàë óðîâåíü ó %%g%s%%e +STOLE_LEVEL_TEAM = %%n%s%%e stole %%g%i%%e points from %%g%s%%e (gained %%g%i%%e) +SUICIDE_LEVEL_DOWN = %%n%s%%e ïîòåðÿë óðîâåíü ñîâåðøèâ ñàìîóáèéñòâî +SUICIDE_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for a suicide +SUICIDE_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for a suicide +TEAM = team +TIED_LEADER_MULTI = %%n%s%%e is tied on level %%g%i%%e :: %%g%s%%e with %%g%s%%e others +TIED_LEADER_ONE = %%n%s%%e is tied on level %%g%i%%e :: %%g%s%%e with %%g%s%%e +TIED_LEADER_TEAM = The teams are tied on level %%g%i%%e :: %%g%s%%e +TK_LEVEL_DOWN = %%n%s%%e îïóñòèëñÿ íà óðîâåíü %%g%i%%e çà óáèéñòâî èãðîêà ñâîåé êîìàíäû +TK_LEVEL_DOWN_TEAM = The %%n%s%%e team went back down to level %%g%i%%e for team killing +TK_SCORE_DOWN = %%n%s%%e ïîòåðÿë %%g%i%%e î÷êîâ çà óáèéñòâî èãðîêà ñâîåé êîìàíäû +TK_SCORE_DOWN_TEAM = The %%n%s%%e team lost %%g%i%%e points for team killing +TOP_10 = Ëó÷øèå 10 èãðîêîâ +TRAILING_ON_LEVEL_TEAM = The %%n%s%%e team is trailing on level %%g%i%%e :: %%g%s%%e +TRIPLE_LEVELED = %%n%s%%e òðîéíîå ïîâûøåíèå óðîâíÿ!!! +UNRANKED = unranked +WARMUP_ROUND = Ãàçîãðåâî÷íûé ðàóíä +WARMUP_ROUND_OVER = Ãàçîãðåâî÷íûé ðàóíä çàêîí÷åí! +WARMUP_ROUND_DISPLAY = Ãàçîãðåâî÷íûé ðàóíä: îñòàëîñü %i ñåêóíä +WEAPONS = Îðóæèå +WELCOME_MESSAGE_LINE1 = Ãòîò ñåðâåð èñïîëüçóåò GunGame %s by Avalanche +WELCOME_MESSAGE_LINE2 = Knife Pro \rÂÊËÞרÃ!\w +WELCOME_MESSAGE_LINE3 = Turbo Mode \rÂÊËÞרÃ!\w +WELCOME_MESSAGE_LINE4 = Knife Elite Mode is \rENABLED!\w +WELCOME_MESSAGE_LINE5 = Deathmatch Mode \rÂÊËÞרÃ!\w +WELCOME_MESSAGE_LINE6 = Teamplay Mode is \rENABLED!\w +WELCOME_MESSAGE_LINE7 = There are \y%i\w levels this round! +WELCOME_MESSAGE_LINE8 : +Ãèøè !rules äëÿ äàëüíåéøèõ èíñòðóêöèè ïî èãðå è ñïèñêà êîìàíä^n +Ãèøè !level ÷òîá óçíàòü íà êàêîì òû óðîâíå è êòî ëèäèðóåò^n +Ãèøè !score ÷òîá ïîëó÷èòü ñïèñîê î÷êîâ è ïîáåä âñåõ èãðîêîâ â êîíñîëè^n +: +WIN_MOTD_LINE1 = %s won! +WIN_MOTD_LINE2 = the %s team +WIN_MOTD_LINE3 = is the winner! +WIN_MOTD_LINE4A = The final %s kill was made against %s +WIN_MOTD_LINE4B = The final %s kill was made against %s by %s +WIN_MOTD_LINE5A = This is %s's %i%s win,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_REG = This is %s's %i%s regular win,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_TP = This is %s's %i%s teamplay win,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE5B = %s now has a total of %i points. +WIN_MOTD_LINE5B_REG = %s now has a total of %i regular points. +WIN_MOTD_LINE5B_TP = %s now has a total of %i teamplay points. +WIN_MOTD_LINE5C = This is %s's %i%s win, for a total of %i points,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_REG = This is %s's %i%s regular win, for a total of %i points,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_TP = This is %s's %i%s teamplay win, for a total of %i points,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE6 = You spent %i%% of your time contributing to the winning team. +WIN_MOTD_LINE7A = You now have a total of %i wins.

This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_REG = You now have a total of %i regular wins.

This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_TP = You now have a total of %i teamplay wins.

This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_LINE7B = You have a total of %i wins. +WIN_MOTD_LINE7B_REG = You have a total of %i regular wins. +WIN_MOTD_LINE7B_TP = You have a total of %i teamplay wins. +WIN_MOTD_LINE7C = You have just gained %i points, for a total of %i points with %i wins! +WIN_MOTD_LINE7C_REG = You have just gained %i regular points, for a total of %i points with %i wins! +WIN_MOTD_LINE7C_TP = You have just gained %i teamplay points, for a total of %i points with %i wins! +WIN_MOTD_LINE8A = The next map will be %s +WIN_MOTD_LINE8B = There is one round of this map left. +WIN_MOTD_LINE8C = There are %i rounds of this map left. +WIN_MOTD_STREAK1 = This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_REG = This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_TP = This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_STREAK2 = Your record streak is %i wins in a row. +WIN_MOTD_STREAK2_REG = Your record regular streak is %i wins in a row. +WIN_MOTD_STREAK2_TP = Your record teamplay streak is %i wins in a row. +WIN_MOTD_STREAK3 = The all-time record streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_REG = The all-time record regular streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_TP = The all-time record teamplay streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK4 = %s just set a new all-time record streak with %i wins in a row! +WIN_MOTD_STREAK4_REG = %s just set a new all-time record regular streak with %i wins in a row! +WIN_MOTD_STREAK4_TP = %s just set a new all-time record teamplay streak with %i wins in a row! +WINS = ïîáåä +WON = %%n%s%%e ïîáåäèëè +WON_TEAM = The %%n%s%%e team won +YES = äà ¸ïò +YES_REGULAR = Yes, regular mode +YES_TEAMPLAY = Yes, teamplay mode + +[pl] +AFK_KILL = Ten frag nie zostal zaliczony poniewaz %%n%s%%e byl AFK +AUTOVOTE_RES1 = Gramy GunGame z Teamplay Modem +AUTOVOTE_RES2 = Gramy Normalny GunGame +AUTOVOTE_RES3 = Nie gramy GunGame +CANCEL = Anuluj +CLOSE = Zamknij +FRIENDLYFIRE_ON = %%gFriendly Fire jest WLACZONY!!!%%e Uwazaj jak strzelasz! +GAINED_POINTS = Wlasnie zdobyles %%g%i%%e punktow, w sumie masz %%g%i%%e punktow z %%g%i%%e zwyciestw! +GAINED_POINTS_REG = Wlasnie zdobyles %%g%i%%e punktow. W sumie masz %%g%i%%e punktow i %%g%i%%e zwyciestw! +GAINED_POINTS_TP = Wlasnie zdobyles %%g%i%%e druzynowych punktow. W sumie masz %%g%i%%e punktow i %%g%i%%e zwyciestw! +GUNGAME = GunGame +HK_LEVEL_DOWN = %%n%s%%e spadl do poziomu %%g%i%%e za zabicie zakladnika +HK_SCORE_DOWN = %%n%s%%e stracil %%g%i%%e punktow za zabicie zakladnika +HK_LEVEL_DOWN_TEAM = %%n%s%%e wrocil do poziomu %%g%i%%e za zabicie zakladnika +HK_SCORE_DOWN_TEAM = %%n%s%%e team stracil %%g%i%%e punktow za zabicie hostow +IN_A_ROW = %i z rzedu +JUMP_TO_ME = Znajdz mnie +LEADER = Lider +LEADING_ON_LEVEL = %%n%s%%e jest liderem na poziomie %%g%i%%e :: %%g%s%%e +LEADING_ON_LEVEL_TEAM = TEAM %%n%s%%e jest liderem z levelem %%g%i%%e :: %%g%s%%e +LEVEL = Poziom +LEVEL_MESSAGE_LINE1A = Wykonales %i/%i z potrzebnych zabojstw +LEVEL_MESSAGE_LINE1B = Twoj team dokonal %i/%i z wymaganych zabojstw +LEVEL_MESSAGE_LINE2A = Jestes na prowadzeniu +LEVEL_MESSAGE_LINE2B = Wyszedles na prowadzenie +LEVEL_MESSAGE_LINE2C = Jestes %i poziomow za liderem +LEVEL_MESSAGE_LINE3A = Wygrales %i razy +LEVEL_MESSAGE_LINE3A_REG = Masz %i zwyciestw +LEVEL_MESSAGE_LINE3A_TP = Masz %i druzynowych zwyciestw +LEVEL_MESSAGE_LINE3B = Masz zdobyte %i punktow z ponad %i wygranych +LEVEL_MESSAGE_LINE3B_REG = Masz zgromadzonych %i punktow, %i zwyciestw +LEVEL_MESSAGE_LINE3B_TP = Zgromadziles %i druzynowych punktow z %i wygranych +LEVEL_MESSAGE_LINE3C = Musisz wygrac %i w czasie (ranking %i%s) +LEVEL_MESSAGE_LINE3D = Masz zgromadzonych %i punktow %i zwyciestw (ranking%i%s) +LEVEL_MESSAGE_LINE4 = Twoj rekord zwyciestw %i z rzedu! +LEVEL_MESSAGE_LINE4_REG = Twoj rekord zwyciestw %i z rzedu +LEVEL_MESSAGE_LINE4_TP = Twoj rekord druzynowych %i zwyciestw z rzedu +LEVEL_MESSAGE_LINE5A = Aktualni liderzy: %s +LEVEL_MESSAGE_LINE5B = Aktualny lider: %s +LEVEL_MESSAGE_LINE6 = Poziom lidera: %i (%s) +LEVELS_BEHIND_LEADER = Jestes teraz %%g%i%%e poziomow za liderem +NEXT = Dalej +NONE = brak +NO_ONE = Nikt nie wygral +NO_WIN_LOGGING = Na tym serwerze logi zwyciestw zostaly wylaczone +NOW_ON_LEVEL = Jestes teraz na poziomie +ON_LEVEL = Jestes na poziomie +ON_LEVEL_TEAM = Twoj team jest na poziomie +PLAY_GUNGAME = Uruchomic GunGame? +PLAYER_RESET = %%n%s%%e zresetowal sie do poziomu %%g1%%e +POINTS = punkty +POINTS_ABBR = pts +PRESS_KEY_TO_CONTINUE = Nacisnij dowolny klawisz aby kontynuowac +PREVIOUS = Wstecz +PROGRESS_DISPLAY = Potrzebujesz %%n%i%%e zabojstw by awansowac Wynik: %%n%i / %i%%e +PROGRESS_DISPLAY1 = Jestes na prowadzeniu %i levelami +PROGRESS_DISPLAY2 = Dzielisz prowadzenie z %s +PROGRESS_DISPLAY3 = Dzielisz prowadzenie z %s innymi +PROGRESS_DISPLAY4 = Jestes %i levei za liderem +PROGRESS_DISPLAY_TEAM1 = Twoj team jest na prowadzeniu %i levelami +PROGRESS_DISPLAY_TEAM2 = Twoj team dzieli prowadzenie z drugim teamem +PROGRESS_DISPLAY_TEAM3 = Twoj team jest %i leveli za drugim teamem +PRUNING = Okrojenie %s: %i wpisy usuniete +RECORD_STREAK = Rekord zwyciestw: %s (%i z rzedu) +REQUIRED_KILLS = Wymagane zabojstwa +RESET_NOT_ALLOWED = Nie mozesz zresetowac poziomu podczac rozgrywki druzynowej! +RESET_QUERY = Czy NA PEWNO chcesz^nzresetowac sie do poziomu 1? +RESPAWN_COUNTDOWN = Odzyjesz za %i sekund +RULES = Zasady +RULES_CONSOLE_LINE1 = %i) Musisz wykonac zabojstwo obecna bronia aby zdobyc poziom +RULES_CONSOLE_LINE2 = %i) Jesli wykonasz zabojstwo bronia niezgodnie z kolejnoscia, nie zostanie to uznane i pozostaniesz na obecnym poziomie. +RULES_CONSOLE_LINE3 = %i) Mozesz zdobywac poziomy przez podkladanie bomby i jej rozbrajanie. +RULES_CONSOLE_LINE4 = %i) Jesli popelnisz samobojstwo stracisz poziom. +RULES_CONSOLE_LINE5 = %i) Friendly Fire zostaje WLACZONY gdy ktos osiagnie poziom GRANATOW. +RULES_CONSOLE_LINE6A = %i) Mozesz zdobywac wiecej niz 1 poziom w czasie jednej rundy. +RULES_CONSOLE_LINE6B = %i) Mozesz zdobywac jeden poziom na runde. +RULES_CONSOLE_LINE6C = %i) Mozesz zdobywac %i poziomow na runde. +RULES_CONSOLE_LINE7 = %i) Jest zaszczytna mozliwosc na koncu kazdej rundy, pozwalajaca graczom zmieniac druzyny. +RULES_CONSOLE_LINE8 = %i) Poniewaz Knife Pro jest zalaczone, mozesz UKRASC przeciwnikowi poziom zabijajac go nozem. +RULES_CONSOLE_LINE9 = %i) Poniewaz Turbo Mode jest wlaczony, otrzymasz nowa bron od razu po zdobyciu kolejnego poziomu. +RULES_CONSOLE_LINE10 = %i) Because Knife Elite Mode is enabled, once you level up you will have to use a knife until the next round. +RULES_CONSOLE_LINE11 = %i) Poniewaz Deathmatch Mode jest wlaczony, bedziesz ciagle odzywal. +RULES_CONSOLE_LINE12 = %i) Poniewaz Teamplay Mode jest wlaczony, zdobywasz punkty jako team zamiast indywidualnie. +RULES_CONSOLE_LINE13 = Wpisz w say !level by zobaczyc aktualny poziom i sprawdzic kto wygrywa. +RULES_CONSOLE_LINE14 = Wpisz w say !weapons by zobaczyc kolejnosc broni. +RULES_CONSOLE_LINE15 = Wpisz w say !score by zobaczyc aktualna punktacje graczy. +RULES_CONSOLE_LINE16 = Wpisz w say !top10 by zobaczyc najlepszych 10 graczy na serwerze. +RULES_CONSOLE_LINE17 = Wpisz w say !restart by zresetowac poziom do pierwszego. +RULES_MESSAGE_LINE1 = Zasady i komendy say sa wyswietlone aktualnie w konsoli. +RULES_MESSAGE_LINE2 = Niektore przydatne komendy: +RULES_MESSAGE_LINE3 : +Wpisz w say !top10 by zobaczyc najlepszych 10 graczy na serwerze^n +Wpisz w say !level by zobaczyc aktualny poziom i sprawdzic kto wygrywa^n +Wpisz w say !weapons by zobaczyc kolejnosc broni^n +Wpisz w say !score by zobaczyc aktualna punktacje graczy +: +SCORES = Punktacja +SLOW_DOWN = Zwolnij! To jest ciagle rozgrzewka! +SPAWNPROTECTED_KILL = Twoje zabojstwo nie zostalo zaliczone poniewaz %%n%s%%e odrodzil sie w ciaglu ostatnich %%g%i%%e sekund +STATS = Statystyki +STATS_REGULAR = Statystyki Normalne +STATS_TEAMPLAY = Statystyki Druzynowe +STILL_LEVEL_ONE = Nie przekroczyłeś jeszcze nawet 1 poziomu! +STOLE_LEVEL = %%n%s%%e ukradl poziom od %%g%s%%e +STOLE_LEVEL_TEAM = %%n%s%%e ukradl %%g%i%%e punkty od %%g%s%%e (zdobyl %%g%i%%e) +SUICIDE_LEVEL_DOWN = %%n%s%%e stracil poziom za samobojstwo +SUICIDE_LEVEL_DOWN_TEAM = TEAM %%n%s%%e spadla do poziomu %%g%i%%e przez samobojstwo +SUICIDE_SCORE_DOWN_TEAM = TEAM %%n%s%%e stracil %%g%i%%e punktow za samobojstwo gracza +TEAM = team +TIED_LEADER_MULTI = %%n%s%%e dzieli prowadzenie na levelu %%g%i%%e :: %%g%s%%e z %%g%s%%e innymi +TIED_LEADER_ONE = %%n%s%%e dzieli prowadzenie na levelu %%g%i%%e :: %%g%s%%e z %%g%s%%e +TIED_LEADER_TEAM = TEAMY dziela prowadzenie na levelu %%g%i%%e :: %%g%s%%e +TK_LEVEL_DOWN = %%n%s%%e spadl do poziomu %%g%i%%e za Team Kill +TK_LEVEL_DOWN_TEAM = TEAM %%n%s%%e spadl do levelu %%g%i%%e za Team Kill +TK_SCORE_DOWN = %%n%s%%e stracil %%g%i%%e punktow za Team Kill +TK_SCORE_DOWN_TEAM = %%n%s%%e team stracil %%g%i%%e punkty za Team Kill +TOP_10 = Top 10 +TRAILING_ON_LEVEL_TEAM = TEAM %%n%s%%e jest dopiero na poziomie %%g%i%%e :: %%g%s%%e +TRIPLE_LEVELED = %%n%s%%e przeskoczyl 3 poziomy! +UNRANKED = bez rankingu +WARMUP_ROUND = Runda rozgrzewkowa +WARMUP_ROUND_OVER = Koniec rundy rozgrzewkowej! +WARMUP_ROUND_DISPLAY = Runda rozgrzewkowa: %i sekund do konca +WEAPONS = Bronie +WELCOME_MESSAGE_LINE1 = Na tym serwerze dziala GunGame %s by Avalanche +WELCOME_MESSAGE_LINE2 = Knife Pro jest \rWLACZONY!\w +WELCOME_MESSAGE_LINE3 = Turbo Mode jest \rWLACZONY!\w +WELCOME_MESSAGE_LINE4 = Knife Elite Mode jest \rWLACZONY!\w +WELCOME_MESSAGE_LINE5 = Deathmatch Mode jest \rWLACZONY!\w +WELCOME_MESSAGE_LINE6 = Teamplay Mode jest \rWLACZONY!\w +WELCOME_MESSAGE_LINE7 = Jest \y%i\w leveli na tej mapie +WELCOME_MESSAGE_LINE8 : +Wpisz !rules by dostac wskazowki jak grac i liste przydatnych komend^n +Wpisz !level by zobaczyc swoj poziom i sprawdzic kto wygrywa^n +Wpisz !score by otrzymac punktacje graczy i wygrane w konsoli^n +: +WIN_MOTD_LINE1 = %s wygral! +WIN_MOTD_LINE2 = %s TEAM +WIN_MOTD_LINE3 = wygrywa! +WIN_MOTD_LINE4A = Ostatni %s zostal wykonany na %s +WIN_MOTD_LINE4B = Ostatni %s zostal wykonany na %s przez %s +WIN_MOTD_LINE5A = To jest %s'a %i%s zwyciestwo
To jest jego%i%s zwyciestwo z rzedu (jego rekord: %i zwyciestw z rzedu) +WIN_MOTD_LINE5A_REG = To jest %s'a %i%s zwyciestwo
To jest jego %i%s zwyciestwo z rzedu (jego rekord: %i zwyciestw z rzedu) +WIN_MOTD_LINE5A_TP = To jest %s'a %i%s druzynowe zwyciestwo.
Nastepnie %i%s druzynowe zwyciestwo z rzedu (jego rekord: %i zwyciestw z rzedu) +WIN_MOTD_LINE5B = %s teraz ma w sumie %i punktow +WIN_MOTD_LINE5B_REG = %s teraz ma w sumie %i punktow +WIN_MOTD_LINE5B_TP = %s teraz ma w sumie %i druzynowych punktow +WIN_MOTD_LINE5C = To jest %s'a %i%s zwyciestwo, w sumie ma %i punktow.
Jest to jego aktualnie %i%s zwyciestwo z rzedu (jego rekord: %i wygranych z rzedu) +WIN_MOTD_LINE5C_REG = To jest %s'a %i%s zwyciestwo, w sumie ma %i punktow.
Jest to jego aktualnie %i%s zwyciestwo z rzedu (jego rekord: %i zwyciestw z rzedu) +WIN_MOTD_LINE5C_TP = To jest %s'a %i%s druzynowe zwyciestwo, w sumie ma %i punktow.
Jest to jego aktualnie %i%s druzynowe zwyciestwo z rzedu (jego rekord: %i z rzedu) +WIN_MOTD_LINE6 = Spedziles %i%% swojego czasu przyczyniajac sie do wygranej! +WIN_MOTD_LINE7A = Masz teraz w sumie %i zwyciestw.

To jest Twoje %i%s zwyciestwo z rzedu (Twoj rekord: %i z rzedu)
+WIN_MOTD_LINE7A_REG = Masz teraz w sumie %i zwyciestw.

To jest Twoje %i%s zwyciestwo z rzedu (Twoj rekord: %i z rzedu) +WIN_MOTD_LINE7A_TP = Masz teraz w sumie %i druzynowych wygranych.

To jest Twoje %i%s druzynowe zwyciestwo z rzedu(Twoj rekord: %i zwyciestw z rzedu) +WIN_MOTD_LINE7B = Masz w sumie %i zwyciestw. +WIN_MOTD_LINE7B_REG = Masz w sumie %i zwyciestw. +WIN_MOTD_LINE7B_TP = Masz w sumie %i druzynowych zwyciestw. +WIN_MOTD_LINE7C = Wlasnie zdobyles %i punktow. Lacznie %i punktow z %i zwyciestw! +WIN_MOTD_LINE7C_REG = Wlasnie zdobyles %i punktow. Lacznie %i punktow z %i zwyciestw! +WIN_MOTD_LINE7C_TP = Wlasnie zdobyles %i druzynowych punktow. Lacznie %i punktow z %i wygranych! +WIN_MOTD_LINE8A = Nastepna mapa to %s +WIN_MOTD_LINE8B = Jest ostania runda do konca. +WIN_MOTD_LINE8C = Jest %i rund do konca mapy +WIN_MOTD_STREAK1 = To jest Twoje %i%s zwyciestwo z rzedu (Twoj rekord: %i zwyciestw z rzedu). +WIN_MOTD_STREAK1_REG = To jest Twoje %i%s zwyciestwo z rzedu (Twoj rekord: %i zwyciestw z rzedu). +WIN_MOTD_STREAK1_TP = To jest Twoja %i%s druzynowa wygrana z rzedu (Twoj rekord: %i zwyciestw z rzedu). +WIN_MOTD_STREAK2 = Twoj rekord to %i zwyciestw z rzedu. +WIN_MOTD_STREAK2_REG = Twoj rekord zwyciestw to %i zwyciestw z rzedu +WIN_MOTD_STREAK2_TP = Twoj rekord to %i druzynowych zwyciestw z rzedu. +WIN_MOTD_STREAK3 = Rekord %i zwyciestw z rzedu zostal ustalony przez %s
+WIN_MOTD_STREAK3_REG = Rekord %i zwyciestw z rzedu zostal ustalony przez %s +WIN_MOTD_STREAK3_TP = Rekord %i druzynowych zwyciestw z rzedu zostal ustalony przez %s. +WIN_MOTD_STREAK4 = %s ustanowil nowy rekord z %i zwyciestwami z rzedu!!! +WIN_MOTD_STREAK4_REG = %s ustanowil nowy rekord z %i zwyciestwami z rzedu! +WIN_MOTD_STREAK4_TP = %s ustanowil nowy rekord druzynowych zwyciestw z %i wygranymi z rzedu! +WINS = zwyciestw +WON = %%n%s%%e zwyciezyl +WON_TEAM = %%n%s%%e Team +YES_REGULAR = GunGame Normalny +YES_TEAMPLAY = GunGame Druzynowy + +[sr] +AFK_KILL = Ubistvo ti se ne racuna jer je %%n%s%%e bio AFK +AUTOVOTE_RES1 = Playing GunGame with teamplay mode +AUTOVOTE_RES2 = Playing regular GunGame +AUTOVOTE_RES3 = Not playing GunGame +CANCEL = Prekini +CLOSE = Zatvori +FRIENDLYFIRE_ON = %%gFriendly Fire je Ukljucen!!!%%e Pazi gde pucas! +GAINED_POINTS = You have just gained %%g%i%%e points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_REG = You have just gained %%g%i%%e regular points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_TP = You have just gained %%g%i%%e teamplay points, for a total of %%g%i%%e points with %%g%i%%e wins! +GUNGAME = GunGame +HK_LEVEL_DOWN = %%n%s%%e se spustio na nivo %%g%i%%e jer je ubio taoca +HK_SCORE_DOWN = %%n%s%%e je izgubio %%g%i%%e poena jer je ubio taoca +HK_LEVEL_DOWN_TEAM = Nivo %%n%s%%e tima je pao %%g%i%%e jer je ubijen taoc +HK_SCORE_DOWN_TEAM = %%n%s%%e tim je izgubio %%g%i%%e poena zbog ubistva taoca +IN_A_ROW = %i in a row +JUMP_TO_ME = Skoci na mene +LEADER = Vodi +LEADING_ON_LEVEL = %%n%s%%e vodi i ima nivo %%g%i%%e :: %%g%s%%e +LEADING_ON_LEVEL_TEAM = %%n%s%%e tim vodi na nivou %%g%i%%e :: %%g%s%%e +LEVEL = Level +LEVEL_MESSAGE_LINE1A = Imas %i/%i potrebnih ubistava +LEVEL_MESSAGE_LINE1B = Tvoj tim je napravio %i/%i od potrebnih ubistava +LEVEL_MESSAGE_LINE2A = Vodish, imas najvishi nivo! +LEVEL_MESSAGE_LINE2B = Izjednacen si za prvo mesto +LEVEL_MESSAGE_LINE2C = %i si nivoa iza vodeceg igraca +LEVEL_MESSAGE_LINE3A = Dobio si %i puta +LEVEL_MESSAGE_LINE3A_REG = You have %i regular wins +LEVEL_MESSAGE_LINE3A_TP = You have %i teamplay wins +LEVEL_MESSAGE_LINE3B = You have accumulated %i points over %i wins +LEVEL_MESSAGE_LINE3B_REG = You have accumulated %i regular points over %i wins +LEVEL_MESSAGE_LINE3B_TP = You have accumulated %i teamplay points over %i wins +LEVEL_MESSAGE_LINE3C = Pobedio si %i puta (rank %i%s) +LEVEL_MESSAGE_LINE3D = Akumulirao si %i poena tokom %i pobeda (rank %i%s) +LEVEL_MESSAGE_LINE4 = Your record streak is %i wins in a row +LEVEL_MESSAGE_LINE4_REG = Your record regular streak is %i wins in a row +LEVEL_MESSAGE_LINE4_TP = Your record teamplay streak is %i wins in a row +LEVEL_MESSAGE_LINE5A = Trenutno vode: %s +LEVEL_MESSAGE_LINE5B = Trenutno vodi: %s +LEVEL_MESSAGE_LINE6 = Vodeci igrac ima nivo: %i (%s) +LEVELS_BEHIND_LEADER = Sada si %%g%i%%e nivoa iza vodeceg igraca +NEXT = Sledeca +NONE = Nista +NO_ONE = niko +NO_WIN_LOGGING = Server ima ukljuceno logovanje pobeda +NOW_ON_LEVEL = Sada si na nivou +ON_LEVEL = Sada si na nivou +ON_LEVEL_TEAM = Tvoj tim je na nivou +PLAY_GUNGAME = Da igramo GunGame? +PLAYER_RESET = %%n%s%%e se resetovao nazad na nivo %%g1%%e +POINTS = poena +POINTS_ABBR = pts +PRESS_KEY_TO_CONTINUE = Pritisni bilo koji broj da nastavis +PREVIOUS = Prosli +PROGRESS_DISPLAY = You need %%n%i%%e kills to advance. Score: %%n%i / %i%%e +PROGRESS_DISPLAY1 = Vodis na %i nivou +PROGRESS_DISPLAY2 = Izjednacen si u vodjstvu sa %s +PROGRESS_DISPLAY3 = Izjednacen si u vodjstvu sa %s drugih +PROGRESS_DISPLAY4 = %i nivoa zaostajes za prvim +PROGRESS_DISPLAY_TEAM1 = Tvoj tim vodi sa %i nivoa +PROGRESS_DISPLAY_TEAM2 = Tvoj tim je izjednacen sa drugim timom +PROGRESS_DISPLAY_TEAM3 = Tvoj tim jw %i nivoa iza vodeceg tima +PRUNING = Cistim %s: %i stavki ocisceno +RECORD_STREAK = Record Streak: %s (%i in a row) +REQUIRED_KILLS = Potrebno ubistava +RESET_NOT_ALLOWED = Ne mozes resetovati svoj nivo tokom Timske igre! +RESET_QUERY = Da li si siguran da zelis da se^nresetujes nazad na nivo 1? +RESPAWN_COUNTDOWN = Respawnovaces se za %i sekundi +RULES = Rules +RULES_CONSOLE_LINE1 = %i) Moras napraviti 3 ubistva sa trenutnim oruzjem, da bi napredovao na sledeci nivo. +RULES_CONSOLE_LINE2 = %i) Ako napravis ubistvo sa oruzjem koje nije tvoj nivo, ne racuna se za napredovanje. +RULES_CONSOLE_LINE3 = %i) Mozes napredovati nivo ako PUKNE C4 ili ako ga DEFUZIRAS. +RULES_CONSOLE_LINE4 = %i) Ako uradis samoubistvo, gubis nivo. +RULES_CONSOLE_LINE5 = %i) Friendly Fire se ukljucuje ako neko dostigne GRENADE nivo. +RULES_CONSOLE_LINE6A = %i) Mozes napredovati vise nivoa po rundi. +RULES_CONSOLE_LINE6B = %i) Mozes napredovati samo 1 nivo po rundi. +RULES_CONSOLE_LINE6C = %i) Mozes napredovati max %i nivoa po rundi. +RULES_CONSOLE_LINE7 = %i) Postoji grace period na kraju runde koji dozvoljava igracima da zamenu tim. +RULES_CONSOLE_LINE8 = %i) Posto je Knife Pro ukljucen, mozes ukrasti nivo igracu ako ga zakoljes. +RULES_CONSOLE_LINE9 = %i) Posto je Turbo Mode ukljucen, dobijas novo oruzje cim napredujes nivo. +RULES_CONSOLE_LINE10 = %i) Posto je Knife Elite Mod ukljucen, jednom kad podignes nivo, moraces koristiti noz do pocetka sledece runde. +RULES_CONSOLE_LINE11 = %i) Posto je Deathmatch Mode ukljucen, respawnujes se neprestano. +RULES_CONSOLE_LINE12 = %i) Posto je ukljucen Teamplay Mod, dobijaces poene timski a ne individualno. +RULES_CONSOLE_LINE13 = Say !level da vidis svoj trenutni nivo i ko vodi. +RULES_CONSOLE_LINE14 = Say !weapons da vidis redosled oruzja(nivoa). +RULES_CONSOLE_LINE15 = Say !score da vidis rezultate svih igraca. +RULES_CONSOLE_LINE16 = Say !top10 da vidis 10 naj pobednika na serveru. +RULES_CONSOLE_LINE17 = Say !restart da se restartujes na nivo 1. +RULES_MESSAGE_LINE1 = Pravila igre i say komande su ti izlistane u konzoli +RULES_MESSAGE_LINE2 = Neke korisne say komande: +RULES_MESSAGE_LINE3 : +Say !top10 da vidis 10 naj pobednika na serveru^n +Say !level da vidis svoj trenutni nivo i ko vodi^n +Say !weapons da vidis redosled oruzja(nivoa)^n +Say !score da vidis rezultate svih igraca^n +: +SCORE_CAPS = REZULTAT +SCORES = Rezultati +SLOW_DOWN = Uspori! Ovo je i dalje warmup runda! +SPAWNPROTECTED_KILL = Tvoje ubistvo se ne racuna jer se %%n%s%%e spawnovao zadnjih %%g%i%%e sekundi +STATS = Stats +STATS_REGULAR = Regular Stats +STATS_TEAMPLAY = Teamplay Stats +STILL_LEVEL_ONE = Nisi jos prosao ni nivo 1! +STOLE_LEVEL = %%n%s%%e je ukrao nivo od %%g%s%%e +STOLE_LEVEL_TEAM = %%n%s%%e stole %%g%i%%e points from %%g%s%%e (gained %%g%i%%e) +SUICIDE_LEVEL_DOWN = %%n%s%%e je izgubio nivo zbog samoubistva +SUICIDE_LEVEL_DOWN_TEAM = %%n%s%%e tim se spustio na nivo %%g%i%%e zbog samoubistva +SUICIDE_SCORE_DOWN_TEAM = %%n%s%%e tim je izgubio %%g%i%%e poena zbog samoubistva +TEAM = tim +TIED_LEADER_MULTI = %%n%s%%e je izjednacen na nivou %%g%i%%e :: %%g%s%%e sa %%g%s%%e drugih +TIED_LEADER_ONE = %%n%s%%e je izjednacen na nivou %%g%i%%e :: %%g%s%%e da %%g%s%%e +TIED_LEADER_TEAM = Timovi su izjednaceni na nivou %%g%i%%e :: %%g%s%%e +TK_LEVEL_DOWN = %%n%s%%e se spustio na nivo %%g%i%%e jer je ubio saugraca +TK_LEVEL_DOWN_TEAM = %%n%s%%e tim se spustio na nivo %%g%i%%e zbog team kill-a +TK_SCORE_DOWN = %%n%s%%e je izgubio %%g%i%%e poena za ubistvo saigraca +TK_SCORE_DOWN_TEAM = %%n%s%%e tim je izgubio %%g%i%%e poena za team kill +TOP_10 = Top 10 +TRAILING_ON_LEVEL_TEAM = The %%n%s%%e team is trailing on level %%g%i%%e :: %%g%s%%e +TRIPLE_LEVELED = %%n%s%%e je trostruko napredovao!!! +UNRANKED = unranked +WARMUP_ROUND = GunGame Warmup runda +WARMUP_ROUND_OVER = GunGame Warmup Runda Zavrsena! +WARMUP_ROUND_DISPLAY = Warmup Runda: %i jos sekundi +WEAPONS = Oruzja +WELCOME_MESSAGE_LINE1 = Ovaj server koristi GunGame %s by Avalanche +WELCOME_MESSAGE_LINE2 = Knife Pro je \rUKLJUCEN!\w +WELCOME_MESSAGE_LINE3 = Turbo Mode je \rUKLJUCEN!\w +WELCOME_MESSAGE_LINE4 = Knife Elite Mode is \rUKLJUCEN!\w +WELCOME_MESSAGE_LINE5 = Deathmatch Mode je \rUKLJUCEN!\w +WELCOME_MESSAGE_LINE6 = Teamplay Mode is \rUKLJUCEN!\w +WELCOME_MESSAGE_LINE7 = Ima \y%i\w nivoa u ovoj rundi! +WELCOME_MESSAGE_LINE8 : +Say !rules za instrukcije kako se igra GunGame i spisak komandi^n +Say !level da vidis svoj trenutni nivo i ko vodi^n +Say !score da u konzoli dobijes rezultate svih igraca i pobeda^n +: +WIN_MOTD_LINE1 = %s je pobednik! +WIN_MOTD_LINE2 = %s tim +WIN_MOTD_LINE3 = je pobednik! +WIN_MOTD_LINE4A = Poslednje ubistvo %s je sacinjeno protiv %s +WIN_MOTD_LINE4B = Poslednje %s ubistvo je sacinjeno protiv %s od strane %s +WIN_MOTD_LINE5A = Ovo je %s's %i%s pobeda,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_REG = This is %s's %i%s regular win,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_TP = This is %s's %i%s teamplay win,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE5B = %s sada ima ukupno %i poena. +WIN_MOTD_LINE5B_REG = %s now has a total of %i regular points. +WIN_MOTD_LINE5B_TP = %s now has a total of %i teamplay points. +WIN_MOTD_LINE5C = Ovo je %s's %i%s pobeda, za ukupno %i poena,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_REG = This is %s's %i%s regular win, for a total of %i points,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_TP = This is %s's %i%s teamplay win, for a total of %i points,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE6 = Potrosio si %i%% svoga vremena doprinoseci pobedi tima. +WIN_MOTD_LINE7A = Sada imas ukupno %i pobeda.

This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_REG = You now have a total of %i regular wins.

This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_TP = You now have a total of %i teamplay wins.

This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_LINE7B = Imas ukupno %i pobeda. +WIN_MOTD_LINE7B_REG = You have a total of %i regular wins. +WIN_MOTD_LINE7B_TP = You have a total of %i teamplay wins. +WIN_MOTD_LINE7C = Postigao si %i poena, za ukupno %i poena sa %i pobeda! +WIN_MOTD_LINE7C_REG = You have just gained %i regular points, for a total of %i points with %i wins! +WIN_MOTD_LINE7C_TP = You have just gained %i teamplay points, for a total of %i points with %i wins! +WIN_MOTD_LINE8A = Sledeca mapa ce biti %s +WIN_MOTD_LINE8B = Ima jos jedna runda na ovoj mapi. +WIN_MOTD_LINE8C = Ima jos %i rundi na ovoj mapi. +WIN_MOTD_STREAK1 = This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_REG = This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_TP = This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_STREAK2 = Your record streak is %i wins in a row. +WIN_MOTD_STREAK2_REG = Your record regular streak is %i wins in a row. +WIN_MOTD_STREAK2_TP = Your record teamplay streak is %i wins in a row. +WIN_MOTD_STREAK3 = The all-time record streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_REG = The all-time record regular streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_TP = The all-time record teamplay streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK4 = %s just set a new all-time record streak with %i wins in a row! +WIN_MOTD_STREAK4_REG = %s just set a new all-time record regular streak with %i wins in a row! +WIN_MOTD_STREAK4_TP = %s just set a new all-time record teamplay streak with %i wins in a row! +WINS = pobedjuje +WON = %%n%s%%e je pobednik! +WON_TEAM = %%n%s%%e tim je pobedio +YES_REGULAR = Yes, regular mode +YES_TEAMPLAY = Yes, teamplay mode + +[lv] +AFK_KILL = Your kill did not count because %%n%s%%e was AFK +AUTOVOTE_RES1 = Playing GunGame with teamplay mode +AUTOVOTE_RES2 = Playing regular GunGame +AUTOVOTE_RES3 = Not playing GunGame +CANCEL = Atcelt +CLOSE = SlÄ“gt +FRIENDLYFIRE_ON = %%gKomandas uguns IESLÄ’GTS!!!%%e Uzmanies kur Å¡auj! +GAINED_POINTS = You have just gained %%g%i%%e points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_REG = You have just gained %%g%i%%e regular points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_TP = You have just gained %%g%i%%e teamplay points, for a total of %%g%i%%e points with %%g%i%%e wins! +GUNGAME = GunGame +HK_LEVEL_DOWN = %%n%s%%e nokrita uz lÄ«meni %%g%i%%e par Ä·Ä«lnieka nogalinÄÅ¡anu +HK_LEVEL_DOWN_TEAM = %%n%s%%e komanda nokrita par lÄ«meni %%g%i%%e par Ä·Ä«lnieka nogalinÄÅ¡anu +HK_SCORE_DOWN = %%n%s%%e pazaudÄ“ja %%g%i%%e punktus par Ä·Ä«lnieka nogalinÄÅ¡anu +HK_SCORE_DOWN_TEAM = %%n%s%%e komanda pazaudÄ“ja %%g%i%%e punktus par Ä·Ä«lnieka nogalinÄÅ¡anu +IN_A_ROW = %i in a row +JUMP_TO_ME = Lec uz manis +LEADER = Leader +LEADING_ON_LEVEL = %%n%s%%e ir lÄ«deris ar lÄ«meni %%g%i%%e :: %%g%s%%e +LEADING_ON_LEVEL_TEAM = The %%n%s%%e team is leading on level %%g%i%%e :: %%g%s%%e +LEVEL = LÄ«menis +LEVEL_MESSAGE_LINE1A = Tu esi veicis %i/%i no nepiecieÅ¡amajÄm slepkavÄ«bÄm +LEVEL_MESSAGE_LINE1B = Tava komanda ir izdarÄ«jusi %i/%i no nepiecieÅ¡amajÄm slepkavÄ«bÄm +LEVEL_MESSAGE_LINE2A = Tu esi vadÄ«bÄ +LEVEL_MESSAGE_LINE2B = Tu esi saistÄ«ts vadÄ«bÄ pirmo vietu +LEVEL_MESSAGE_LINE2C = Tu esi %i lÄ«meņus aiz lÄ«dera +LEVEL_MESSAGE_LINE3A = Tu esi vinnÄ“jis %i reizes +LEVEL_MESSAGE_LINE3A_REG = You have %i regular wins +LEVEL_MESSAGE_LINE3A_TP = You have %i teamplay wins +LEVEL_MESSAGE_LINE3B = Tu esi uzkrÄjis %i punktus par %i uzvarÄm +LEVEL_MESSAGE_LINE3B_REG = You have accumulated %i regular points over %i wins +LEVEL_MESSAGE_LINE3B_TP = You have accumulated %i teamplay points over %i wins +LEVEL_MESSAGE_LINE3C = Tu esi vinnÄ“jis %i reizes (ierindots %i%s) +LEVEL_MESSAGE_LINE3D = Tu esi uzkrÄjis %i punktus par %i uzvarÄm (ierindots %i%s) +LEVEL_MESSAGE_LINE4 = Your record streak is %i wins in a row +LEVEL_MESSAGE_LINE4_REG = Your record regular streak is %i wins in a row +LEVEL_MESSAGE_LINE4_TP = Your record teamplay streak is %i wins in a row +LEVEL_MESSAGE_LINE5A = PaÅ¡reizÄ“jie lÄ«deri: %s +LEVEL_MESSAGE_LINE5B = PaÅ¡reizÄ“jais lÄ«deris: %s +LEVEL_MESSAGE_LINE6 = LÄ«dera lÄ«menis: %i (%s) +LEVELS_BEHIND_LEADER = Tu esi %%g%i%%e lÄ«meņus aiz lÄ«dera +NEXT = NÄkoÅ¡ais +NO = NÄ“ +NONE = neviens +NO_ONE = neviens +NO_WIN_LOGGING = Å im serverim ir izslÄ“gta uzvarÄ“tÄju reÄ£istrÄcija. +NOW_ON_LEVEL = JÅ«s patreiz esat lÄ«menÄ« +ON_LEVEL = JÅ«s esat lÄ«menÄ« +ON_LEVEL_TEAM = Tava komanda ir lÄ«menÄ« +PLAY_GUNGAME = SpÄ“lÄ“t GunGame? +PLAYER_RESET = %%n%s%%e atgrieza sevi %%g1%%e lÄ«menÄ« +POINTS = punkti +POINTS_ABBR = pts +PRESS_KEY_TO_CONTINUE = Nospiediet jebkuru cipara taustiņu +PREVIOUS = IepriekÅ¡Ä“jais +PROGRESS_DISPLAY = You need %%n%i%%e kills to advance. Score: %%n%i / %i%%e +PROGRESS_DISPLAY1 = Tu esi vadÄ«bÄ ar %i lÄ«meni +PROGRESS_DISPLAY2 = Tu esi saistÄ«ts vadÄ«bÄ ar %s +PROGRESS_DISPLAY3 = Tu esi saistÄ«ts vadÄ«bÄ ar %s citiem +PROGRESS_DISPLAY4 = Tu esi %i lÄ«meņus aiz lÄ«dera +PROGRESS_DISPLAY_TEAM1 = Tava komanda ir vadÄ«bÄ ar %i lÄ«meņiem +PROGRESS_DISPLAY_TEAM2 = Tava komanda ir saistÄ«ta vadÄ«bÄ ar otru komandu +PROGRESS_DISPLAY_TEAM3 = Tava komanda ir %i lÄ«meņus aiz otras komandas +PRUNING = SaÄ«sinÄts %s: %i ieraksti dzÄ“sti. +RECORD_STREAK = Record Streak: %s (%i in a row) +REQUIRED_KILLS = NepiecieÅ¡amÄs slepkavÄ«bas +RESET_QUERY = Vai TU esi PÄ€RLIECINÄ€TS^nka vÄ“lies atgriezties 1 lÄ«menÄ«? +RESET_NOT_ALLOWED = Tu nevari dzÄ“st lÄ«meni Komandas Moda laikÄ! +RESPAWN_COUNTDOWN = Tu atdzimsi %i sekundÄ“s +RULES = Noteikumi +RULES_CONSOLE_LINE1 = %i) Tev ir kÄds jÄnogalina ar Å¡o ieroci lai iegÅ«tu nÄkoÅ¡o lÄ«meni. +RULES_CONSOLE_LINE2 = %i) Ja Tu nogalini kÄdu ar ieroci kurÅ¡ nav paredzÄ“tajÄ kÄrtÄ«bÄ, tas neskaitÄs un lÄ«meni neiegÅ«sti. +RULES_CONSOLE_LINE3 = %i) Tu vari paaugstinÄt lÄ«meni UZSTÄ€DOT un ATMĪNÄ’JOT C4. +RULES_CONSOLE_LINE4 = %i) Ja tu izdarÄ«si paÅ¡nÄvÄ«bu, tu zaudÄ“si lÄ«meni. +RULES_CONSOLE_LINE5 = %i) Komandas uguns tiks IESLÄ’GTS kad sasniegs GRANÄ€DES lÄ«meni. +RULES_CONSOLE_LINE6A = %i) Tu VARI iegÅ«t vairÄk par vienu lÄ«meni raundÄ. +RULES_CONSOLE_LINE6B = %i) Tu vari iegÅ«t tikai vienu lÄ«meni raundÄ. +RULES_CONSOLE_LINE6C = %i) Tu vari iegÅ«t %i lÄ«meņus raunda laikÄ. +RULES_CONSOLE_LINE7 = %i) Å is ir pagarinajums, katra raunda beigÄs spÄ“lÄ“tajs var mainÄ«t komandu. +RULES_CONSOLE_LINE8 = %i) JÅ«s varat nozag lÄ«meni nodurot pretinieku, jo ir aktivizÄ“ts Nazis Pro. +RULES_CONSOLE_LINE9 = %i) Turbo Mods ir ieslÄ“gts, TU iegÅ«si nÄkoÅ¡o ieroci nekavÄ“joties pÄ“c slepkavÄ«bÄs. +RULES_CONSOLE_LINE10 = %i) Knife Elite Mods ir ieslÄ“gts, tiklÄ«dz iegÅ«si nÄkoÅ¡o lÄ«meni tev bÅ«s jÄlieto nazis lÄ«dz nÄkoÅ¡Ä raunda sÄkumam. +RULES_CONSOLE_LINE11 = %i) NÄvesmaÄs Mods ir ieslÄ“gts, tu atdzimsi nekavÄ“joties. +RULES_CONSOLE_LINE12 = %i) Komandas Mods ir ieslÄ“gts, tu iegÅ«si punktus kÄ komanda nevis personiski. +RULES_CONSOLE_LINE13 = Raksti !level lai redzÄ“tu tavu paÅ¡reizÄ“jo lÄ«meni un lÄ«deri. +RULES_CONSOLE_LINE14 = Raksti !weapons lai redzÄ“tu ieroÄu kÄrtÄ«bu. +RULES_CONSOLE_LINE15 = Raksti !score lai redzÄ“tu visu spÄ“lÄ“taju punktu skaitu. +RULES_CONSOLE_LINE16 = Raksti !top10 lai redzÄ“tu top 10 spÄ“lÄ“tajus Å¡ajÄ serverÄ«. +RULES_CONSOLE_LINE17 = Raksti !restart lai atgrieztu sevi uz lÄ«meni 1. +RULES_MESSAGE_LINE1 = SpÄ“les noteikumi un visas say komandas ir tagad uzskaitÄ«tas tavÄ konsolÄ“ +RULES_MESSAGE_LINE2 = Dažas noderÄ«gas say komandas: +RULES_MESSAGE_LINE3 : +Raksti !top10 lai redzÄ“tu top 10 spÄ“lÄ“tajus Å¡ajÄ serverÄ«^n +Raksti !level lai redzÄ“tu tavu paÅ¡reizÄ“jo lÄ«meni un lÄ«deri^n +Raksti !weapons lai redzÄ“tu ieroÄu kÄrtÄ«bu^n +Raksti !score lai redzÄ“tu spÄ“lÄ“tÄju punktu skaitu +: +SCORE_CAPS = PUNKTU SKAITS +SCORES = Punktu skaits +SLOW_DOWN = PiebremzÄ“! Å is ir tikai iesildÄ«Å¡anÄs raunds! +SPAWNPROTECTED_KILL = Tava slepkavÄ«ba neskaitÄ«jÄs jo %%n%s%%e atdzima pÄ“dÄ“jÄs %%g%i%%e sekundes +STATS = Stats +STATS_REGULAR = Regular Stats +STATS_TEAMPLAY = Teamplay Stats +STILL_LEVEL_ONE = Tu vÄ“l joprojÄm neesi ticis pÄri pirmajam lÄ«menim! +STOLE_LEVEL = %%n%s%%e nozaga lÄ«meni no %%g%s%%e +STOLE_LEVEL_TEAM = %%n%s%%e stole %%g%i%%e points from %%g%s%%e (gained %%g%i%%e) +SUICIDE_LEVEL_DOWN = %%n%s%%e zaudÄ“ja lÄ«meni dēļ paÅ¡nÄvÄ«bas +SUICIDE_LEVEL_DOWN_TEAM = %%n%s%%e komanda nokrita par lÄ«meni %%g%i%%e par paÅ¡nÄvÄ«bu +SUICIDE_SCORE_DOWN_TEAM = %%n%s%%e komanda pazaudÄ“ja %%g%i%%e punktus par paÅ¡nÄvÄ«bu +TEAM = komanda +TIED_LEADER_MULTI = %%n%s%%e ir saistÄ«ts vadÄ«bÄ ar lÄ«meni %%g%i%%e :: %%g%s%%e ar %%g%s%%e citiem +TIED_LEADER_ONE = %%n%s%%e ir saistÄ«ts vadÄ«bÄ ar lÄ«meni %%g%i%%e :: %%g%s%%e ar %%g%s%%e +TIED_LEADER_TEAM = Komandas ir saistÄ«tas ar lÄ«meni %%g%i%%e :: %%g%s%%e +TK_LEVEL_DOWN = %%n%s%%e atkrita uz %%g%i%%e lÄ«meni par komandas biedra nogalinÄÅ¡anu +TK_LEVEL_DOWN_TEAM = %%n%s%%e komanda nokrita par lÄ«meni %%g%i%%e dēļ komandas biedra nogalinÄÅ¡anu +TK_SCORE_DOWN = %%n%s%%e pazaudÄ“ja %%g%i%%e punktus par komandas biedra nogalinÄÅ¡anu +TK_SCORE_DOWN_TEAM = %%n%s%%e komanda pazaudÄ“ja %%g%i%%e punktus par komandas biedra nogalinÄÅ¡anu +TOP_10 = Top 10 +TRAILING_ON_LEVEL_TEAM = %%n%s%%e komanda seko ar lÄ«meni %%g%i%%e :: %%g%s%%e +TRIPLE_LEVELED = %%n%s%%e trÄ«skÄrÅ¡ots lÄ«menis!!! +UNRANKED = nav ierindots +WARMUP_ROUND = IesildÄ«Å¡anÄs rounds +WARMUP_ROUND_OVER = IesildÄ«Å¡anÄs raunda beigas! +WARMUP_ROUND_DISPLAY = IesildÄ«Å¡anÄs rounds: %i sekundes atlikuÅ¡as +WEAPONS = IeroÄi +WELCOME_MESSAGE_LINE1 = Å is serveris lieto GunGame %s no Avalanche +WELCOME_MESSAGE_LINE2 = Nazis Pro ir \rIeslÄ“gts!\w +WELCOME_MESSAGE_LINE3 = Turbo Mods ir \rIeslÄ“gts!\w +WELCOME_MESSAGE_LINE4 = NÄvesmaÄs Mods ir \rIeslÄ“gts!\w +WELCOME_MESSAGE_LINE5 = Deathmatch Mods ir \rIeslÄ“gts!\w +WELCOME_MESSAGE_LINE6 = Komandas Mods ir \rIeslÄ“gts!\w +WELCOME_MESSAGE_LINE7 = Å eit ir \y%i\w lÄ«meņi raundÄ! +WELCOME_MESSAGE_LINE8 : +Raksti !rules instrukcija kÄ spÄ“lÄ“t un komandu saraksts ^n +Raksti !level lai iegÅ«tu tava lÄ«meņa un lÄ«dera info^n +Raksti !score lai iegÅ«tu sarakstu ar spÄ“lÄ“taju punktiem un uzvarÄm jÅ«su konsolÄ“^n +: +WIN_MOTD_LINE1 = %s vinnÄ“ja! +WIN_MOTD_LINE2 = %s komanda +WIN_MOTD_LINE3 = ir uzvarÄ“taji! +WIN_MOTD_LINE4A = PÄ“dÄ“jo %s slepkavÄ«bu veica pret %s +WIN_MOTD_LINE4B = PÄ“dÄ“jo %s klepkavÄ«bu veica pret %s no %s +WIN_MOTD_LINE5A = Å Ä« ir %s's %i%s uzvara,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_REG = This is %s's %i%s regular win,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_TP = This is %s's %i%s teamplay win,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE5B = %s tagad kopÄ %i punkti. +WIN_MOTD_LINE5B_REG = %s now has a total of %i regular points. +WIN_MOTD_LINE5B_TP = %s now has a total of %i teamplay points. +WIN_MOTD_LINE5C = Å Ä« ir %s's %i%s uzvara, kopÄ %i punkti,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_REG = This is %s's %i%s regular win, for a total of %i points,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_TP = This is %s's %i%s teamplay win, for a total of %i points,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE6 = Tu patÄ“rÄ“ji %i%% sava laika veicot to vinnÄ“taju komandÄ. +WIN_MOTD_LINE7A = Tev tagad kopÄ ir %i uzvaras.

This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_REG = You now have a total of %i regular wins.

This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_TP = You now have a total of %i teamplay wins.

This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_LINE7B = Tev kopÄ ir %i uzvaras. +WIN_MOTD_LINE7B_REG = You have a total of %i regular wins. +WIN_MOTD_LINE7B_TP = You have a total of %i teamplay wins. +WIN_MOTD_LINE7C = Tu tikko ieguvi %i punktus, kopÄ %i punktus ar %i uzvarÄm! +WIN_MOTD_LINE7C_REG = You have just gained %i regular points, for a total of %i points with %i wins! +WIN_MOTD_LINE7C_TP = You have just gained %i teamplay points, for a total of %i points with %i wins! +WIN_MOTD_LINE8A = NÄkoÅ¡Ä mape bÅ«s %s +WIN_MOTD_LINE8B = Te ir one raunds palicis mapÄ“. +WIN_MOTD_LINE8C = Te ir %i raundi palikuÅ¡i mapÄ“. +WIN_MOTD_STREAK1 = This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_REG = This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_TP = This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_STREAK2 = Your record streak is %i wins in a row. +WIN_MOTD_STREAK2_REG = Your record regular streak is %i wins in a row. +WIN_MOTD_STREAK2_TP = Your record teamplay streak is %i wins in a row. +WIN_MOTD_STREAK3 = The all-time record streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_REG = The all-time record regular streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_TP = The all-time record teamplay streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK4 = %s just set a new all-time record streak with %i wins in a row! +WIN_MOTD_STREAK4_REG = %s just set a new all-time record regular streak with %i wins in a row! +WIN_MOTD_STREAK4_TP = %s just set a new all-time record teamplay streak with %i wins in a row! +WINS = uzvaras +WON = %%n%s%%e vinnÄ“ja +WON_TEAM = %%n%s%%e komanda vinnÄ“ja +YES = JÄ +YES_REGULAR = Yes, regular mode +YES_TEAMPLAY = Yes, teamplay mode + +[bg] +AFK_KILL = УбийÑтвото ти не е зачетено защото %%n%s%%e беше AFK +AUTOVOTE_RES1 = Playing GunGame with teamplay mode +AUTOVOTE_RES2 = Playing regular GunGame +AUTOVOTE_RES3 = Not playing GunGame +CANCEL = Отказ +CLOSE = Затвори +FRIENDLYFIRE_ON = %%gFriendly Fire е включен!!!%%e Гледай къде ÑтрелÑш! +GAINED_POINTS = Ти Ñпечели %%g%i%%e точки, от общо %%g%i%%e точки ,ÑÑŠÑ %%g%i%%e победи! +GAINED_POINTS_REG = You have just gained %%g%i%%e regular points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_TP = You have just gained %%g%i%%e teamplay points, for a total of %%g%i%%e points with %%g%i%%e wins! +GUNGAME = GunGame +HK_LEVEL_DOWN = %%n%s%%e Ñе върна едно ниво надолу %%g%i%%e защото уби заложник. +HK_SCORE_DOWN = %%n%s%%e загуби %%g%i%%e защото уби заложник. +HK_LEVEL_DOWN_TEAM = %%n%s%%e отборът Ñе върна до ниво %%g%i%%e защото уби заложник. +HK_SCORE_DOWN_TEAM = %%n%s%%e отборът загуби %%g%i%%e точки защото уби заложник. +IN_A_ROW = %i in a row +JUMP_TO_ME = Jump to me +LEADER = Лидер +LEADING_ON_LEVEL = %%n%s%%e е лидер на ниво %%g%i%%e :: %%g%s%%e +LEADING_ON_LEVEL_TEAM = %%n%s%%e отборът е лидер на ниво %%g%i%%e :: %%g%s%%e +LEVEL = Ðиво +LEVEL_MESSAGE_LINE1A = До тук Ñи направил %i/%i от необходимите убийÑтва. +LEVEL_MESSAGE_LINE1B = ТвоÑÑ‚ отбор е направил %i/%i от необходимите убийÑтва. +LEVEL_MESSAGE_LINE2A = Ти Ñи лидерът. +LEVEL_MESSAGE_LINE2B = You are tied for first place +LEVEL_MESSAGE_LINE2C = Ти Ñи на %i нива Ñлед лидера. +LEVEL_MESSAGE_LINE3A = Ти победи %i пъти +LEVEL_MESSAGE_LINE3A_REG = You have %i regular wins +LEVEL_MESSAGE_LINE3A_TP = You have %i teamplay wins +LEVEL_MESSAGE_LINE3B = Ти натрупа %i точки от %i победи +LEVEL_MESSAGE_LINE3B_REG = You have accumulated %i regular points over %i wins +LEVEL_MESSAGE_LINE3B_TP = You have accumulated %i teamplay points over %i wins +LEVEL_MESSAGE_LINE3C = Ти победи %i пъти (ranked %i%s) +LEVEL_MESSAGE_LINE3D = Ти натрупа %i точки от %i победи (ranked %i%s) +LEVEL_MESSAGE_LINE4 = Your record streak is %i wins in a row +LEVEL_MESSAGE_LINE4_REG = Your record regular streak is %i wins in a row +LEVEL_MESSAGE_LINE4_TP = Your record teamplay streak is %i wins in a row +LEVEL_MESSAGE_LINE5A = Текущи лидери: %s +LEVEL_MESSAGE_LINE5B = Текущ лидер: %s +LEVEL_MESSAGE_LINE6 = Лидерът е на ниво: %i (%s) +LEVELS_BEHIND_LEADER = Сега Ñи %%g%i%%e нива Ñлед лидера. +NEXT = Следващ +NONE = нищо +NO_ONE = никой +NO_WIN_LOGGING = This server has win logging disabled +NOW_ON_LEVEL = Сега Ñи на ниво +ON_LEVEL = Ти Ñи на ниво +ON_LEVEL_TEAM = ТвоÑÑ‚ отбор е на ниво +PLAY_GUNGAME = Да играем GunGame? +PLAYER_RESET = %%n%s%%e Ñе върна Ñам до ниво %%g1%%e +POINTS = точки +POINTS_ABBR = pts +PRESS_KEY_TO_CONTINUE = ÐатиÑни нÑкой цифров клавиш за да продължиш +PREVIOUS = Предишен +PROGRESS_DISPLAY = You need %%n%i%%e kills to advance. Score: %%n%i / %i%%e +PROGRESS_DISPLAY1 = Ти Ñи лидер ÑÑŠÑ %i нива +PROGRESS_DISPLAY2 = Ти Ñи Ñ Ñ€Ð°Ð²ÐµÐ½ брой точки Ñ %s за лидерÑтво +PROGRESS_DISPLAY3 = Ти Ñи Ñ Ñ€Ð°Ð²ÐµÐ½ брой точки Ñ %s други +PROGRESS_DISPLAY4 = Ти Ñи %i нива Ñлед лидера +PROGRESS_DISPLAY_TEAM1 = ТвоÑÑ‚ отбор е лидер Ñ %i нива +PROGRESS_DISPLAY_TEAM2 = ТвоÑÑ‚ отбор има равен брой точки Ñ Ð´Ñ€ÑƒÐ³Ð¸ÑÑ‚ отбор +PROGRESS_DISPLAY_TEAM3 = ТвоÑÑ‚ отбор е %i нива Ñлед другиÑÑ‚ отбор +PRUNING = Pruning %s: %i entries removed +RECORD_STREAK = Record Streak: %s (%i in a row) +REQUIRED_KILLS = Ðеобходими убийÑтва +RESET_NOT_ALLOWED = Ðе можеш да нулираш нивото Ñи по време на Teamplay режим! +RESET_QUERY = СИГУРЕРли Ñи че иÑкаш^nда Ñе върнеш до 1-во ниво? +RESPAWN_COUNTDOWN = Ще Ñе преродиш Ñлед %i Ñекунди +RULES = Правила +RULES_CONSOLE_LINE1 = %i) ТрÑбва да убиеш Ñ Ñ‚ÐµÐºÑƒÑ‰Ð¾Ñ‚Ð¾ Ñи оръжие за да вдигнеш нивото Ñи. +RULES_CONSOLE_LINE2 = %i) Ðко убиеш Ñ Ð¾Ñ€ÑŠÐ¶Ð¸Ðµ което не е на ред,то нÑма да ти Ñе зачете и ще Ñи оÑтанеш на текущото ниво. +RULES_CONSOLE_LINE3 = %i) Можеш да вдигаш нивото Ñи като ЗÐЛÐГÐШ или ОБЕЗВРЕЖДÐШ бомбата. +RULES_CONSOLE_LINE4 = %i) Ðко Ñе Ñамоубиеш,ще загубиш нивото Ñи. +RULES_CONSOLE_LINE5 = %i) Friendly Fire Ñе включва когато нÑкой доÑтигне GRENADE нивото. +RULES_CONSOLE_LINE6A = %i) МОЖЕШ да вигаш повече от едно ниво за рунд. +RULES_CONSOLE_LINE6B = %i) Можеш да вдигаш Ñамо по едно ниво за рунд. +RULES_CONSOLE_LINE6C = %i) Можеш да качваш до %i нива за рунд. +RULES_CONSOLE_LINE7 = %i) Има период за отÑрочка в ÐºÑ€Ð°Ñ Ð½Ð° вÑеки рунд в който играчите могат да ÑменÑÑ‚ отборите Ñи. +RULES_CONSOLE_LINE8 = %i) Тъй като Knife Pro е включен,можеш да откраднеш ниво от опонент като го заколиш. +RULES_CONSOLE_LINE9 = %i) Тъй като Turbo Mode е включен,ще получиш Ñледващото Ñи оръжие веднага щом вдигнеш нивото Ñи. +RULES_CONSOLE_LINE10 = %i) Тъй като Knife Elite Mode е включен,веднъж като Ñи вдигнеш нивото,ще Ñ‚Ñ€Ñбва да използваш Ñамо ножа Ñи до ÑÐ»ÐµÐ´Ð²Ð°Ñ‰Ð¸Ñ Ñ€ÑƒÐ½Ð´. +RULES_CONSOLE_LINE11 = %i) Тъй като Deathmatch Mode е включен,ще Ñе прераждаш непрекъÑнато. +RULES_CONSOLE_LINE12 = %i) Тъй като Teamplay Mode е включен,ще трупаш точки за отбора вмеÑто за Ñебе Ñи. +RULES_CONSOLE_LINE13 = Say !level за да видиш текущото Ñи ниво и кой води. +RULES_CONSOLE_LINE14 = Say !weapons за да видиш реда на оръжиÑта. +RULES_CONSOLE_LINE15 = Say !score за да видиш резултатът на вÑички играчи. +RULES_CONSOLE_LINE16 = Say !top10 за да видиш 10-те най добри в Ñървъра. +RULES_CONSOLE_LINE17 = Say !restart за да Ñе върнеш на 1-во ниво. +RULES_MESSAGE_LINE1 = Правилата на играта и вÑички команди Ñа изпиÑани в конзолата ти. +RULES_MESSAGE_LINE2 = ÐÑкои полезни say команди: +RULES_MESSAGE_LINE3 : +Ðапиши !top10 за да видиш 10-те най добри в Ñървъра^n +Ðапиши !level за да видиш текущото Ñи ниво и кой води^n +Ðапиши !weapons за да видиш реда на оръжиÑта^n +Ðапиши !score за да видиш резултатът на вÑички играчи +: +SCORE_CAPS = РЕЗУЛТÐТ +SCORES = Резултати +SLOW_DOWN = Опаа,по-полека де!Още Ñме на загрÑващото ниво! +SPAWNPROTECTED_KILL = УбийÑтвото ти не е зачетено защото %%n%s%%e Ñе роди в поÑледните %%g%i%%e Ñекунди +STATS = Stats +STATS_REGULAR = Regular Stats +STATS_TEAMPLAY = Teamplay Stats +STILL_LEVEL_ONE = Ð’Ñе още не Ñи преминал 1-во ниво! +STOLE_LEVEL = %%n%s%%e открадна ниво от %%g%s%%e +STOLE_LEVEL_TEAM = %%n%s%%e открадна %%g%i%%e точки от %%g%s%%e (вдигна %%g%i%%e) +SUICIDE_LEVEL_DOWN = %%n%s%%e загуби ниво за ÑамоубийÑтво +SUICIDE_LEVEL_DOWN_TEAM = %%n%s%%e отборът Ñе върна до ниво %%g%i%%e за ÑамоубийÑтво +SUICIDE_SCORE_DOWN_TEAM = %%n%s%%e отборът загуби %%g%i%%e точки за ÑмоубийÑтво +TEAM = отбор +TIED_LEADER_MULTI = %%n%s%%e Ñе изравни до ниво %%g%i%%e :: %%g%s%%e Ñ %%g%s%%e други +TIED_LEADER_ONE = %%n%s%%e Ñе изравни до ниво %%g%i%%e :: %%g%s%%e Ñ %%g%s%%e +TIED_LEADER_TEAM = Отборите Ñе изравниха до ниво %%g%i%%e :: %%g%s%%e +TK_LEVEL_DOWN = %%n%s%%e Ñе върна ниво надолу до %%g%i%%e за убийÑтво на Ñъотборник +TK_LEVEL_DOWN_TEAM = %%n%s%%e отборът Ñе върна ниво надолу до %%g%i%%e за убийÑтво на Ñъотборник +TK_SCORE_DOWN = %%n%s%%e изгуби %%g%i%%e точки за убийÑтво на Ñъотборник +TK_SCORE_DOWN_TEAM = %%n%s%%e отборът загуби %%g%i%%e точки за убийÑтво на Ñъотборник +TOP_10 = Top 10 +TRAILING_ON_LEVEL_TEAM = %%n%s%%e отборът Ñеди на %%g%i%%e :: %%g%s%%e +TRIPLE_LEVELED = %%n%s%%e тройно вдигане!!! +UNRANKED = unranked +WARMUP_ROUND = ЗагрÑващ рунд +WARMUP_ROUND_OVER = ЗагрÑващиÑÑ‚ рунд приключи! +WARMUP_ROUND_DISPLAY = ЗагрÑващ рунд: %i Ñекунди оÑтават +WEAPONS = ÐžÑ€ÑŠÐ¶Ð¸Ñ +WELCOME_MESSAGE_LINE1 = Този Ñървър работи Ñ GunGame %s от Avalanche +WELCOME_MESSAGE_LINE2 = Knife Pro е \rВКЛЮЧЕÐ!\w +WELCOME_MESSAGE_LINE3 = Turbo Mode е \rВКЛЮЧЕÐ!\w +WELCOME_MESSAGE_LINE4 = Knife Elite Mode е \rВКЛЮЧЕÐ!\w +WELCOME_MESSAGE_LINE5 = Deathmatch Mode е \rВКЛЮЧЕÐ!\w +WELCOME_MESSAGE_LINE6 = Teamplay Mode е \rВКЛЮЧЕÐ!\w +WELCOME_MESSAGE_LINE7 = Този рунд има \y%i\w нива! +WELCOME_MESSAGE_LINE8 : +Ðапиши !rules за инÑтрукции как Ñе играе и лиÑÑ‚ ÑÑŠÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸Ñ‚Ðµ^n +Ðапиши !level за да видиш нивото Ñи и кой е лидерът^n +Ðапиши !score за да видиш резултатът на вÑички играчи^n +: +WIN_MOTD_LINE1 = %s ПОБЕДИ! +WIN_MOTD_LINE2 = %s отборът +WIN_MOTD_LINE3 = е победител! +WIN_MOTD_LINE4A = ПоÑледното %s убийÑтво бе Ñрещу %s +WIN_MOTD_LINE4B = ПоÑледното %s убийÑтво бе Ñрещу %s от %s +WIN_MOTD_LINE5A = Това е %s %i%s победа,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_REG = This is %s's %i%s regular win,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5A_TP = This is %s's %i%s teamplay win,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE5B = %s има общо %i точки. +WIN_MOTD_LINE5B_REG = %s now has a total of %i regular points. +WIN_MOTD_LINE5B_TP = %s now has a total of %i teamplay points. +WIN_MOTD_LINE5C = Това е %s %i%s победа, за вÑичко %i точки,
and their %i%s win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_REG = This is %s's %i%s regular win, for a total of %i points,
and their %i%s regular win in a row (their record: %i in a row). +WIN_MOTD_LINE5C_TP = This is %s's %i%s teamplay win, for a total of %i points,
and their %i%s teamplay win in a row (their record: %i in a row). +WIN_MOTD_LINE6 = Ти отдаде %i%% от времето Ñи запобедата на отбора. +WIN_MOTD_LINE7A = Сега имаш общо %i победи.

This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_REG = You now have a total of %i regular wins.

This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_LINE7A_TP = You now have a total of %i teamplay wins.

This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_LINE7B = Имаш общо %i победи. +WIN_MOTD_LINE7B_REG = You have a total of %i regular wins. +WIN_MOTD_LINE7B_TP = You have a total of %i teamplay wins. +WIN_MOTD_LINE7C = Ти Ñпечели %i точки,от общо %i точки Ñ %i победи! +WIN_MOTD_LINE7C_REG = You have just gained %i regular points, for a total of %i points with %i wins! +WIN_MOTD_LINE7C_TP = You have just gained %i teamplay points, for a total of %i points with %i wins! +WIN_MOTD_LINE8A = Следващата карта ще е %s +WIN_MOTD_LINE8B = Има още one рунд на тази карта. +WIN_MOTD_LINE8C = Има още %i рунда на тази карта. +WIN_MOTD_STREAK1 = This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_REG = This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_TP = This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_STREAK2 = Your record streak is %i wins in a row. +WIN_MOTD_STREAK2_REG = Your record regular streak is %i wins in a row. +WIN_MOTD_STREAK2_TP = Your record teamplay streak is %i wins in a row. +WIN_MOTD_STREAK3 = The all-time record streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_REG = The all-time record regular streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_TP = The all-time record teamplay streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK4 = %s just set a new all-time record streak with %i wins in a row! +WIN_MOTD_STREAK4_REG = %s just set a new all-time record regular streak with %i wins in a row! +WIN_MOTD_STREAK4_TP = %s just set a new all-time record teamplay streak with %i wins in a row! +WINS = победи +WON = %%n%s%%e победа +WON_TEAM = %%n%s%%e отборът победи +YES_REGULAR = Yes, regular mode +YES_TEAMPLAY = Yes, teamplay mode + +[hr] +AFK_KILL = Ubojstvo ti se ne racuna jer je %%n%s%%e bio AFK +AUTOVOTE_RES1 = Igra se GunGame sa teamplay modom +AUTOVOTE_RES2 = Igra se regularni GunGame +AUTOVOTE_RES3 = Ne igra se GunGame +CANCEL = Prekini +CLOSE = Zatvori +FRIENDLYFIRE_ON = %%gFriendly Fire je Ukljucen!!!%%e Pazi gdje pucas! +GAINED_POINTS = You have just gained %%g%i%%e points, for a total of %%g%i%%e points with %%g%i%%e wins! +GAINED_POINTS_REG = Skupio si %%g%i%%e osobnih bodova, za ukupno %%g%i%%e bodova u %%g%i%%e pobjeda! +GAINED_POINTS_TP = Skupio si %%g%i%%e timskih bodova, za ukupno %%g%i%%e bodova u %%g%i%%e pobjeda! +GUNGAME = GunGame +HK_LEVEL_DOWN = %%n%s%%e se spustio na nivo %%g%i%%e jer je ubio taoca +HK_SCORE_DOWN = %%n%s%%e je izgubio %%g%i%%e bodova jer je ubio taoca +HK_LEVEL_DOWN_TEAM = Nivo %%n%s%%e tima je pao %%g%i%%e jer je ubijen taoc +HK_SCORE_DOWN_TEAM = %%n%s%%e tim je izgubio %%g%i%%e bodova zbog ubistva taoca +IN_A_ROW = %i u nizu +JUMP_TO_ME = Skoci na mene +LEADER = Vodi +LEADING_ON_LEVEL = %%n%s%%e vodi i ima nivo %%g%i%%e :: %%g%s%%e +LEADING_ON_LEVEL_TEAM = %%n%s%%e tim vodi na nivou %%g%i%%e :: %%g%s%%e +LEVEL = Level +LEVEL_CAPS = LEVEL +LEVEL_MESSAGE_LINE1A = Imas %i/%i potrebnih ubojstava +LEVEL_MESSAGE_LINE1B = Tvoj tim je napravio %i/%i od potrebnih ubojstava +LEVEL_MESSAGE_LINE2A = Vodis, imas najvisi nivo! +LEVEL_MESSAGE_LINE2B = Izjednacen si za prvo mjesto +LEVEL_MESSAGE_LINE2C = %i si nivoa iza vodeceg igraca +LEVEL_MESSAGE_LINE3A = Dobio si %i puta +LEVEL_MESSAGE_LINE3A_REG = Imas %i osobnih pobjeda +LEVEL_MESSAGE_LINE3A_TP = Imas %i timskih pobjeda +LEVEL_MESSAGE_LINE3B = Akumulirao si %i bodova tokom %i pobjeda +LEVEL_MESSAGE_LINE3B_REG = Skupio si %i osobnih bodova u %i pobjeda +LEVEL_MESSAGE_LINE3B_TP = Skupio si %i timskih bodova u %i pobjeda +LEVEL_MESSAGE_LINE4 = Vas rekord je %i pobjeda u nizu +LEVEL_MESSAGE_LINE4_REG = Vas rekord je %i osobnih pobjeda u nizu +LEVEL_MESSAGE_LINE4_TP = Vas rekord je %i timskih pobjeda u nizu +LEVEL_MESSAGE_LINE5A = Trenutno vode: %s +LEVEL_MESSAGE_LINE5B = Trenutno vodi: %s +LEVEL_MESSAGE_LINE6 = Vodeci igrac ima nivo: %i (%s) +LEVELS_BEHIND_LEADER = Sada si %%g%i%%e nivoa iza vodeceg igraca +NAME_CAPS = IME +NEXT = Sljedeca +NONE = Nista +NO_ONE = nitko +NO_WIN_LOGGING = Server ima ukljuceno logiranje pobjeda +NOW_ON_LEVEL = Sada si na nivou +ON_LEVEL = Sada si na nivou +ON_LEVEL_TEAM = Tvoj tim je na nivou +PLAY_GUNGAME = Da igramo GunGame? +PLAYER_RESET = %%n%s%%e se resetirao nazad na nivo %%g1%%e +POINTS = bodova +POINTS_ABBR = pts +PRESS_KEY_TO_CONTINUE = Pritisni bilo koji broj da nastavis +PREVIOUS = Prosli +PROGRESS_DISPLAY = You need %%n%i%%e kills to advance. Score: %%n%i / %i%%e +PROGRESS_DISPLAY1 = Vodis na %i nivou +PROGRESS_DISPLAY2 = Izjednacen si u vodstvu sa %s +PROGRESS_DISPLAY3 = Izjednacen si u vodstvu sa %s drugih +PROGRESS_DISPLAY4 = %i nivoa zaostajes za prvim +PROGRESS_DISPLAY_TEAM1 = Tvoj tim vodi sa %i nivoa +PROGRESS_DISPLAY_TEAM2 = Tvoj tim je izjednacen sa drugim timom +PROGRESS_DISPLAY_TEAM3 = Tvoj tim je %i nivoa iza vodeceg tima +PRUNING = Cistim %s: %i stavki ocisceno +RECORD_STREAK = Record Streak: %s (%i in a row) +REQUIRED_KILLS = Potrebno ubojstava +RESET_NOT_ALLOWED = Ne mozes resetirati svoj nivo tokom Timske igre! +RESET_QUERY = Da li si siguran da zelis^nresetirati nazad na nivo 1? +RESPAWN_COUNTDOWN = Respawnovati ces se za %i sekundi +RULES = Pravila +RULES_CONSOLE_LINE1 = %i) Moras napraviti 3 ubojtva sa trenutnim oruzjem, da bi napredovao na sljedeci nivo. +RULES_CONSOLE_LINE2 = %i) Ako napravis ubojstvo sa oruzjem koje nije tvoj nivo, ne racuna se za napredovanje. +RULES_CONSOLE_LINE3 = %i) Mozes napredovati nivo ako PUKNE C4 ili ako ga DEFUZAS. +RULES_CONSOLE_LINE4 = %i) Ako napravis samoubistvo, gubis nivo. +RULES_CONSOLE_LINE5 = %i) Friendly Fire se ukljucuje ako neko dostigne GRANATA nivo. +RULES_CONSOLE_LINE6A = %i) Mozes napredovati vise nivoa po rundi. +RULES_CONSOLE_LINE6B = %i) Mozes napredovati samo 1 nivo po rundi. +RULES_CONSOLE_LINE6C = %i) Mozes napredovati max %i nivoa po rundi. +RULES_CONSOLE_LINE7 = %i) Postoji period milosti na kraju runde koji dozvoljava igracima da zamijene tim. +RULES_CONSOLE_LINE8 = %i) Posto je ukljucen Knife Pro mod, mozes ukrasti nivo igracu ako ga zakoljes nozem. +RULES_CONSOLE_LINE9 = %i) Posto je ukljucen Turbo mod, dobivas novo oruzje cim napredujes nivo. +RULES_CONSOLE_LINE10 = %i) Posto je ukljucen Knife Elite mod, jednom kad napredujes nivo, morati ces koristiti noz do pocetka sledece runde. +RULES_CONSOLE_LINE11 = %i) Posto je ukljucen Deathmatch mod, respawnas se neprestano. +RULES_CONSOLE_LINE12 = %i) Posto je ukljucen Teamplay mod, dobvati ces bodove timski a ne individualno. +RULES_CONSOLE_LINE13 = Say !level da vidis svoj trenutni nivo i ko vodi. +RULES_CONSOLE_LINE14 = Say !weapons da vidis redoslijed oruzja(nivoa). +RULES_CONSOLE_LINE15 = Say !score da vidis rezultate svih igraca. +RULES_CONSOLE_LINE16 = Say !top10 da vidis 10 naj pobjednika na serveru. +RULES_CONSOLE_LINE17 = Say !restart da se restartas na 1. nivo. +RULES_MESSAGE_LINE1 = Pravila igre i say komande su ti izlistane u konzoli. +RULES_MESSAGE_LINE2 = Neke korisne say komande: +RULES_MESSAGE_LINE3 : +Say !top10 da vidis 10 naj pobjednika na serveru^n +Say !level da vidis svoj trenutni nivo i tko vodi^n +Say !weapons da vidis redoslijed oruzja(nivoa)^n +Say !score da vidis rezultate svih igraca^n +: +SCORE_CAPS = REZULTAT +SCORES = Rezultati +SLOW_DOWN = Uspori! Ovo je i dalje warmup runda! +SPAWNPROTECTED_KILL = Tvoje ubistvo se ne racuna jer se %%n%s%%e spawnovao zadnjih %%g%i%%e sekundi +STATS = Stats +STATS_REGULAR = Normalni stats +STATS_TEAMPLAY = Timski stats +STILL_LEVEL_ONE = Nisi jos prosao ni 1. nivo! +STOLE_LEVEL = %%n%s%%e je ukrao nivo od %%g%s%%e +STOLE_LEVEL_TEAM = %%n%s%%e je ukrao %%g%i%%e bodova od %%g%s%%e (skupio %%g%i%%e) +SUICIDE_LEVEL_DOWN = %%n%s%%e je izgubio nivo zbog samoubojstva +SUICIDE_LEVEL_DOWN_TEAM = %%n%s%%e tim se spustio na nivo %%g%i%%e zbog samoubojstva +SUICIDE_SCORE_DOWN_TEAM = %%n%s%%e tim je izgubio %%g%i%%e poena zbog samoubojstva +TEAM = tim +TEAM_CAPS = TIM +TIED_LEADER_MULTI = %%n%s%%e je izjednacen na nivou %%g%i%%e :: %%g%s%%e sa %%g%s%%e drugih +TIED_LEADER_ONE = %%n%s%%e je izjednacen na nivou %%g%i%%e :: %%g%s%%e da %%g%s%%e +TIED_LEADER_TEAM = Timovi su izjednaceni na nivou %%g%i%%e :: %%g%s%%e +TK_LEVEL_DOWN = %%n%s%%e se spustio na nivo %%g%i%%e jer je ubio suigraca +TK_LEVEL_DOWN_TEAM = %%n%s%%e tim se spustio na nivo %%g%i%%e zbog team kill-a +TK_SCORE_DOWN = %%n%s%%e je izgubio %%g%i%%e bodova za ubojstvo saigraca +TK_SCORE_DOWN_TEAM = %%n%s%%e tim je izgubio %%g%i%%e bodova za team kill +TOP_10 = Top 10 +TRAILING_ON_LEVEL_TEAM = %%n%s%%e tim se popeo na level %%g%i%%e :: %%g%s%%e +TRIPLE_LEVELED = %%n%s%%e je trostruko napredovao!!! +UNRANKED = unranked +WARMUP_ROUND = GunGame Warmup runda +WARMUP_ROUND_OVER = GunGame Warmup Runda Zavrsena! +WARMUP_ROUND_DISPLAY = Warmup Runda: %i jos sekundi +WEAPONS = Oruzja +WELCOME_MESSAGE_LINE1 = Ovaj server koristi GunGame %s by Avalanche +WELCOME_MESSAGE_LINE2 = Knife Pro mod je \rUKLJUCEN!\w +WELCOME_MESSAGE_LINE3 = Turbo mode je \rUKLJUCEN!\w +WELCOME_MESSAGE_LINE4 = Knife Elite mode is \rUKLJUCEN!\w +WELCOME_MESSAGE_LINE5 = Deathmatch mode je \rUKLJUCEN!\w +WELCOME_MESSAGE_LINE6 = Teamplay mode is \rUKLJUCEN!\w +WELCOME_MESSAGE_LINE7 = Ima \y%i\w nivoa u ovoj rundi! +WELCOME_MESSAGE_LINE8 : +Say !rules za instrukcije kako se igra GunGame i spisak komandi^n +Say !level da vidis svoj trenutni nivo i tko vodi^n +Say !score da u konzoli dobijes rezultate svih igraca i pobjeda^n +: +WIN_MOTD_LINE1 = %s je pobjednik! +WIN_MOTD_LINE2 = %s tim +WIN_MOTD_LINE3 = je pobjednik! +WIN_MOTD_LINE4A = Posljednje ubojstvo %s je napravljeno protiv %s +WIN_MOTD_LINE4B = Posljednje %s ubistvo je napravljeno protiv %s od strane %s +WIN_MOTD_LINE5A = Ovo je %s's %i%s. pobjeda,
te %i%s. pobjeda u nizu (njegov rekord: %i u nizu). +WIN_MOTD_LINE5A_REG = Ovo je %s's %i%s. osobna pobjeda,
te %i%s. osobna pobjeda u nizu (njegov rekord: %i u nizu). +WIN_MOTD_LINE5A_TP = Ovo je %s's %i%s. timska pobjeda,
te %i%s. timska pobjeda u nizu (njegov rekord: %i u nizu). +WIN_MOTD_LINE5B = %s sada ima ukupno %i bodova. +WIN_MOTD_LINE5B_REG = %s sada ukupno ima %i osobnih bodova. +WIN_MOTD_LINE5B_TP = %s sada ukupno ima %i timskih bodova. +WIN_MOTD_LINE5C = Ovo je %s's %i%s. pobjeda za %i bodova,
te %i%s. pobjeda u nizu (njegov rekord: %i u nizu). +WIN_MOTD_LINE5C_REG = Ovo je %s's %i%s. osobna pobjeda za %i bodova,
te %i%s. osobna pobjeda u nizu (njegov rekord: %i u nizu). +WIN_MOTD_LINE5C_TP = Ovo je%s's %i%s. timska pobjeda za %i bodova,
te %i%s. timska pobjeda u nizu (njegov rekord: %i u nizu). +WIN_MOTD_LINE6 = Potrosio si %i%% svoga vremena doprinoseci pobjedi tima. +WIN_MOTD_LINE7A = Sada imas %i pobjeda.

Ovo ti je %i%s. pobjeda u nizu (tvoj rekord: %i u nizu). +WIN_MOTD_LINE7A_REG = Sada imas %i osobnih pobjeda.

Ovo ti je %i%s. osobna pobjeda u nizu (tvoj rekord: %i u nizu). +WIN_MOTD_LINE7A_TP = Sada imas %i timskih pobjeda.

>Ovo ti je %i%s. timska pobjeda u nizu (tvoj rekord: %i u nizu). +WIN_MOTD_LINE7B = Imas ukupno %i pobjeda. +WIN_MOTD_LINE7B_REG = Sada imas %i osobnih pobjeda. +WIN_MOTD_LINE7B_TP = Sada imas %i timskih pobjeda. +WIN_MOTD_LINE7C = Postigao si %i bodova, za ukupno %i bodova sa %i pobjeda! +WIN_MOTD_LINE7C_REG = Skupio si %i osobnih bodova, za ukupno %i bodova u %i pobjeda! +WIN_MOTD_LINE7C_TP = Skupio si %i timskih bodova, za ukupno %i bodova u %i pobjeda! +WIN_MOTD_LINE8A = Sljedeca mapa ce biti %s +WIN_MOTD_LINE8B = Biti ce jos jedna runda na ovoj mapi. +WIN_MOTD_LINE8C = Biti ce jos %i rundi na ovoj mapi. +WIN_MOTD_STREAK1 = This is your %i%s win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_REG = This is your %i%s regular win in a row (your record: %i in a row). +WIN_MOTD_STREAK1_TP = This is your %i%s teamplay win in a row (your record: %i in a row). +WIN_MOTD_STREAK2 = Your record streak is %i wins in a row. +WIN_MOTD_STREAK2_REG = Your record regular streak is %i wins in a row. +WIN_MOTD_STREAK2_TP = Your record teamplay streak is %i wins in a row. +WIN_MOTD_STREAK3 = The all-time record streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_REG = The all-time record regular streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK3_TP = The all-time record teamplay streak, %i wins in a row, was set by %s. +WIN_MOTD_STREAK4 = %s just set a new all-time record streak with %i wins in a row! +WIN_MOTD_STREAK4_REG = %s just set a new all-time record regular streak with %i wins in a row! +WIN_MOTD_STREAK4_TP = %s just set a new all-time record teamplay streak with %i wins in a row! +WINS = pobjedjuje +WON = %%n%s%%e je pobjednik! +WON_TEAM = %%n%s%%e tim je pobjedio +YES_REGULAR = Da, regularan mod +YES_TEAMPLAY = Da, teamplay mod + +[lt] +AFK_KILL = Jusu nuzudymas nepriskaiciuotas kadangi %%n%s%%e yra AFK +AUTOVOTE_RES1 = Zaidziamas GunGame komandos rezime +AUTOVOTE_RES2 = Zaidziamas paprastas Gungame +AUTOVOTE_RES3 = Nezaidziamas GunGame +CANCEL = Atsaukti +CLOSE = Uzdaryti +FRIENDLYFIRE_ON = %%gSaviskiu saudymas IJUNGTAS!!!%%e Ziurek kur saudai! +GAINED_POINTS = Jus katik gavote %%g%i%%e taskus(-a), is viso turite %%g%i%%e taskus su %%g%i%%e pergalemis! +GAINED_POINTS_REG = Jus katik gavote %%g%i%%e taskus(-a), is viso turite %%g%i%%e taskus su %%g%i%%e pergalemis! +GAINED_POINTS_TP = Jus katik gavote %%g%i%%e komandos taskus(-a), is viso turite %%g%i%%e taskus su %%g%i%%e pergalemis! +GUNGAME = GunGame +HK_LEVEL_DOWN = %%n%s%%e nukrito lygiu zemiau %%g%i%%e uz ikaitu zudyma +HK_SCORE_DOWN = %%n%s%%e parardo %%g%i%%e uz ikaitu zudyma +HK_LEVEL_DOWN_TEAM = Komanda %%n%s%%e nukrito i lygi %%g%i%%e uz ikaitu zudyma +HK_SCORE_DOWN_TEAM = Komanda %%n%s%%e pararado %%g%i%%e taskus(-a) uz ikaitu zudyma +IN_A_ROW = %i is eiles +JUMP_TO_ME = Persokti prie manes +LEADER = Lyderis +LEADING_ON_LEVEL = %%n%s%%e yra lyderis %%g%i%%e :: %%g%s%%e +LEADING_ON_LEVEL_TEAM = Komanda %%n%s%%e lyderiauja %%g%i%%e :: %%g%s%%e +LEVEL = Lygis +LEVEL_MESSAGE_LINE1A = Tu pasiekiai %i/%i is taves reikalaujamu nuzudymu +LEVEL_MESSAGE_LINE1B = Tavo komanda pasieke %i/%i reikalautu nuzudymu +LEVEL_MESSAGE_LINE2A = Jus esate tarp lyderiu +LEVEL_MESSAGE_LINE2B = Tu patekai i pirma vieta +LEVEL_MESSAGE_LINE2C = Tu esi %i lygiais zemiau nei lyderis +LEVEL_MESSAGE_LINE3A = Jus laimejote %i kartus(-a) +LEVEL_MESSAGE_LINE3A_REG = Jus laimejote %i kartus(-a) +LEVEL_MESSAGE_LINE3A_TP = Jus turite %i komandinius laimejimus +LEVEL_MESSAGE_LINE3B = Jus sukaupete %i taskus per %i pergales(-e) +LEVEL_MESSAGE_LINE3B_REG = Jus sukaupete %i taskus per %i pergales(-e) +LEVEL_MESSAGE_LINE3B_TP = Jus sukaupete %i komandinius taskus per %i pergales(-e) +LEVEL_MESSAGE_LINE4 = Tavo laimejimu rekordas yra %i pergales is eiles +LEVEL_MESSAGE_LINE4_REG = Tavo laimejimu rekordas yra %i pergales is eiles +LEVEL_MESSAGE_LINE4_TP = Tavo komandinio zaidimo laimejimu rekordas yra %i pergales is eiles +LEVEL_MESSAGE_LINE5A = Dabartinis lyderis: %s +LEVEL_MESSAGE_LINE5B = Current leader: %s +LEVEL_MESSAGE_LINE6 = Lyderio lygis: %i (%s) +LEVELS_BEHIND_LEADER = Tu dabar esi %%g%i%%e lygiais zemiau nei lyderis +NEXT = Kitas +NONE = nera +NO_ONE = niekas +NO_WIN_LOGGING = Sis serveris yra isjunges pergaliu skaiciavima +NOW_ON_LEVEL = Jusu lygis dabar yra +ON_LEVEL = Jus lygis dabar yra +ON_LEVEL_TEAM = Tavo komandos lygis yra +PLAY_GUNGAME = Zaisti GunGame? +PLAYER_RESET = %%n%s%%e sugryzo pats prie lygio %%g1%%e +POINTS = taskai +POINTS_ABBR = tsk +PRESS_KEY_TO_CONTINUE = Spauskite bet kuri skaiciu pratesimui +PREVIOUS = Anksciau +PROGRESS_DISPLAY = Jums reikia %%n%i%%e nuzudymus pereiti toliau. Taskai: %%n%i / %i%%e +PROGRESS_DISPLAY1 = Jus esate lyderis su %i lygiu +PROGRESS_DISPLAY2 = Jus esate tarp lyderiu su %s +PROGRESS_DISPLAY3 = Jus esate tarp lyderiu su %s kitais +PROGRESS_DISPLAY4 = Jus esate %i lygiais zemiau nei lyderis +PROGRESS_DISPLAY_TEAM1 = Tavo komanda lyderiauja su %i lygiu +PROGRESS_DISPLAY_TEAM2 = Tavo komanda lyderiauja su kita komanda +PROGRESS_DISPLAY_TEAM3 = Tavo komanda yra %i lygiu(-iais) zemiau nei lyderiu komanda +PRUNING = Isvalymas %s: %i irasai pasalinti +RECORD_STREAK = Laimejimu rekordas: %s (%i is eiles) +REQUIRED_KILLS = Reikalingi nuzudymai +RESET_NOT_ALLOWED = Jus negalite istrinti savo lygio zaisdami Komandini zaidima! +RESET_QUERY = Ar jus isitikines kad norite^nsumazinti savo lygi iki 1? +RESPAWN_COUNTDOWN = Jus atsigausite po %i sekundziu(-es) +RULES = Taisykles +RULES_CONSOLE_LINE1 = %i) Jus turite nuzudyti priesininka su dabartiniu ginklu kad pereitume i kita lygi. +RULES_CONSOLE_LINE2 = %i) jeigu nuzudysite priesininka su kitu ginklu nei jums priklaus, taskai neprisikaiciuos. +RULES_CONSOLE_LINE3 = %i) Jus galite gauti taskus uz bombos PADEJIMA ir ISMINAVIMA. +RULES_CONSOLE_LINE4 = %i) Jeigu jus nusizudysite, jus prarasite lygi. +RULES_CONSOLE_LINE5 = %i) Saviskiu saudymas isijungia tuomet kai kas nors pasiekia Granatos lygi. +RULES_CONSOLE_LINE6A = %i) Jus galite gauti daugiau nei 1 lygi per rounda. +RULES_CONSOLE_LINE6B = %i) Jus galite gauti tik 1 lygi per rounda. +RULES_CONSOLE_LINE6C = %i) Jus galite gauti %i lygius per rounda. +RULES_CONSOLE_LINE7 = %i) There is a grace period at the end of each round to allow players to switch teams. +RULES_CONSOLE_LINE8 = %i) Kadangi Peilio Pro yra ijuntas, jus galite gauti lygi nuzude priesininka su peiliu. +RULES_CONSOLE_LINE9 = %i) kadangi yra ijuntas Turbo rezimas, jus gausite kita ginkla iskart kai tik pasieksite kita lygi. +RULES_CONSOLE_LINE10 = %i) Kadangi Peilio Elite yra ijungtas, gave nauja lygi turesite zaisti su peiliu iki kito roundo. +RULES_CONSOLE_LINE11 = %i) Kadangi Deathmatch rezimas yra ijungtas, jus atsirasite neribotai kartu. +RULES_CONSOLE_LINE12 = %i) Kadangi Komandos rezimas yra ijungtas, jus gausite lygi tik su komanda, o ne atskirai. +RULES_CONSOLE_LINE13 = Say !level perziureti jusu lygi ir kas laimi. +RULES_CONSOLE_LINE14 = Say !weapons perziureti ginklu isdestyma. +RULES_CONSOLE_LINE15 = Say !score perziureti dabartiniu zaideju taskus. +RULES_CONSOLE_LINE16 = Say !top10 perziureti Top10 laimetoju sarasa. +RULES_CONSOLE_LINE17 = Say !restart nuzeminti lygi iki 1. +RULES_MESSAGE_LINE1 = Zaidimo taisykles ir visos komandos yra surasytos jusu konsoleje +RULES_MESSAGE_LINE2 = Keletas naudingu komandu: +RULES_MESSAGE_LINE3 : +Rasykite !top10 pamatyti Top10 serverio zaideju^n +Rasykite !level perziureti savo lygi ir kas laimi^n +Rasykite !weapons perziureti ginklu isdestyma^n +Rasykite !score perziureti zaidejo taskus +: +SCORES = Taskai +SLOW_DOWN = Ramiau! Tai tik apsilimo roundas! +SPAWNPROTECTED_KILL = Jusu taskai neuzskaityti kadangi %%n%s%%e zaidejas atsirado tik pries %%g%i%%e sekundes +STATS = Statistika +STATS_REGULAR = Statistika +STATS_TEAMPLAY = Komandine statistika +STILL_LEVEL_ONE = Jus dar net nepraejote ne 1 lygio! +STOLE_LEVEL = %%n%s%%e ateme lygi is %%g%s%%e +STOLE_LEVEL_TEAM = %%n%s%%e ateme %%g%i%%e taskus is %%g%s%%e (gavo %%g%i%%e) +SUICIDE_LEVEL_DOWN = %%n%s%%e prarado lygi del nusizudymo +SUICIDE_LEVEL_DOWN_TEAM = Komanda %%n%s%%e nukrito lygiu zemiau iki %%g%i%%e uz nusizudyma +SUICIDE_SCORE_DOWN_TEAM = Komanda %%n%s%%e prarado %%g%i%%e taskus uz nusizudyma +TEAM = komanda +TIED_LEADER_MULTI = %%n%s%%e lyderiauja %%g%i%%e :: %%g%s%%e su %%g%s%%e kitais +TIED_LEADER_ONE = %%n%s%%e lyderiauja su lygiu %%g%i%%e :: %%g%s%%e su %%g%s%%e +TIED_LEADER_TEAM = Komandos lyderiauja %%g%i%%e :: %%g%s%%e +TK_LEVEL_DOWN = %%n%s%%e nukrito i lygi %%g%i%%e uz komandos zudyma +TK_LEVEL_DOWN_TEAM = Komanda %%n%s%%e nukrito i lygi %%g%i%%e uz komandos zudyma +TK_SCORE_DOWN = %%n%s%%e prarado %%g%i%%e uz komandos zudyma +TK_SCORE_DOWN_TEAM = Komanda %%n%s%%e parado %%g%i%%e taskus(-a) uz komandos zudyma +TOP_10 = Top 10 +TRAILING_ON_LEVEL_TEAM = Komanda %%n%s%%e vejesi su lygiu %%g%i%%e :: %%g%s%%e +TRIPLE_LEVELED = %%n%s%%e trigubas lygis!!! +UNRANKED = neivertintas +WARMUP_ROUND = Apsilimo roundas +WARMUP_ROUND_OVER = Apsilimo roundas baigtas! +WARMUP_ROUND_DISPLAY = Apsilimo roundas: Liko %i sekundes +WEAPONS = Ginklai +WELCOME_MESSAGE_LINE1 = Sis serveris veikia su GunGame %s sukurtas pagal Avalanche +WELCOME_MESSAGE_LINE2 = Peiliu Pro yra \rIJUNGTAS!\w +WELCOME_MESSAGE_LINE3 = Turbo Rezimas yra \rIJUNGTAS!\w +WELCOME_MESSAGE_LINE4 = Peilio Elite Rezimas yra \rIJUNGTAS!\w +WELCOME_MESSAGE_LINE5 = Deathmatch Rezimas yra \rIJUNGTAS!\w +WELCOME_MESSAGE_LINE6 = Komandinis rezimas yra \rIJUNGTAS!\w +WELCOME_MESSAGE_LINE7 = isviso yra \y%i\w lygiai siame rounde! +WELCOME_MESSAGE_LINE8 : +Rasykite !rules gauti instrukcijoms kaip zaisti ir kokios komandos yra^n +Rasykite !level gauti savo lygio informacija ir kas pirmiauja^n +Rasykite !score gauti visu zaideju lygius ir taskus^n +: +WIN_MOTD_LINE1 = Laimejo %s! +WIN_MOTD_LINE2 = komanda %s +WIN_MOTD_LINE3 = yra laimetojas! +WIN_MOTD_LINE4A = Paskutinis %s nuzudymas buvo atliktas %s +WIN_MOTD_LINE4B = Paskutinis %s buvo atliktas %s zaidejo %s +WIN_MOTD_LINE5A = Tai yra %s %i%s pergale,
ir laimejo %i%s kartus is eiles (jo rekordas yra: %i laimejimai is eiles). +WIN_MOTD_LINE5A_REG = Tai yra %s %i%s laimejimas,
ir laimejo %i%s kartus is eiles (jo rekordas yra: %i laimejimai is eiles). +WIN_MOTD_LINE5A_TP = Tai yra %s %i%s komandinis laimejimas,
ir tai yra %i%s komandinis laimejimas is eiles (rekordas yra: %i laimejimai is eiles). +WIN_MOTD_LINE5B = %s dabar isviso turi %i taskus. +WIN_MOTD_LINE5B_REG = %s dabar isviso turi %i taskus. +WIN_MOTD_LINE5B_TP = %s dabar isviso turi %i komandinius taskus. +WIN_MOTD_LINE5C = Tai yra %s %i%s pergale, is viso %i taskai,
ir tai yra %i%s pergales(-e) is eiles (rekordas yra: %i pergales(-e) is eiles). +WIN_MOTD_LINE5C_REG = Tai yra %s %i%s pergale, is viso %i taskai,
ir tai yra %i%s pergales(-e) is eiles (rekordas yra: %i pergales(-e) is eiles). +WIN_MOTD_LINE5C_TP = Tai yra %s %i%s komandinis laimejimas, is viso %i taskai,
ir tai yra %i%s komandines pergales is eiles (rekordas yra: %i pergales(-e) is eiles). +WIN_MOTD_LINE6 = Jus praleidote %i%% laimejusioje komandoje. +WIN_MOTD_LINE7A = Jus dabar turite %i pergales(-e).

Tai yra tavo %i%s pergale is eiles (tavo rekordas: %i pergales(-e) is eiles). +WIN_MOTD_LINE7A_REG = Jus dabar turite %i pergales(-e).

Tai yra tavo %i%s pergale is eiles (tavo rekordas: %i pergales(-e) is eiles). +WIN_MOTD_LINE7A_TP = Jus dabar turite %i komandines pergales.

Tai yra tavo %i%s komandines pergales(-e) is eiles (tavo rekordas: %i pergales(-e) is eiles). +WIN_MOTD_LINE7B = Jus isviso turite %i pergales(-e). +WIN_MOTD_LINE7B_REG = Jus isviso turite %i pergales(-e). +WIN_MOTD_LINE7B_TP = jus isviso turite %i komandines pergales. +WIN_MOTD_LINE7C = Jus gavote %i taskus, isviso turite %i taskus su %i pergalemis(-e)! +WIN_MOTD_LINE7C_REG = Jus gavote %i taskus, isviso turite %i taskus su %i pergalemis(-e)! +WIN_MOTD_LINE7C_TP = Jus gavote %i komandinius taskus, isviso turite %i taskus su %i pergalemis(-e)! +WIN_MOTD_LINE8A = Kitas zemelapis bus %s +WIN_MOTD_LINE8B = Liko vienas roundas siame zemelapyje. +WIN_MOTD_LINE8C = Liko %i roundai siame zemelapyje. +WIN_MOTD_STREAK1 = Tai yra tavo %i%s pergale is eiles (tavo rekordas: %i pergales(-e) is eiles). +WIN_MOTD_STREAK1_REG = Tai yra tavo %i%s pergale is eiles (tavo rekordas: %i pergales(-e) is eiles). +WIN_MOTD_STREAK1_TP = Tai yra tavo %i%s komandine pergale is eiles (tavo rekordas: %i pergales(-e) is eiles). +WIN_MOTD_STREAK2 = Tavo rekordas yra %i pergales is eiles. +WIN_MOTD_STREAK2_REG = Tavo rekordas yra %i pergales is eiles. +WIN_MOTD_STREAK2_TP = Tavo rekordas yra %i komandines pergales is eiles. +WIN_MOTD_STREAK3 = Geriausias rekordas yra, %i pergales is eiles, buvo atliktas pagal %s. +WIN_MOTD_STREAK3_REG = Geriausias rekordas yra, %i pergales is eiles, buvo atliktas pagal %s. +WIN_MOTD_STREAK3_TP = Geriausias rekordas yra, %i komandines pergales is eiles, buvo atliktas pagal %s. +WIN_MOTD_STREAK4 = %s katik nustate geriausia pergaliu skaiciu su %i pergalemis is eiles! +WIN_MOTD_STREAK4_REG = %s katik nustate geriausia pergaliu skaiciu su %i pergalemis is eiles! +WIN_MOTD_STREAK4_TP = %s katik nustate geriausia pergaliu skaiciu su %i komandinemis pergalemis is eiles! +WINS = laimejimai +WON = %%n%s%%e laimejo +WON_TEAM = Laimejo %%n%s%%e komanda +YES_REGULAR = Taip, paprastas rezimas +YES_TEAMPLAY = Taip, komandinis rezimas diff --git a/addons/amxmodx/plugins/gungame.amxx b/addons/amxmodx/plugins/gungame.amxx new file mode 100644 index 0000000..1efb81b Binary files /dev/null and b/addons/amxmodx/plugins/gungame.amxx differ diff --git a/addons/amxmodx/scripting/gungame.sma b/addons/amxmodx/scripting/gungame.sma new file mode 100644 index 0000000..7786f5e --- /dev/null +++ b/addons/amxmodx/scripting/gungame.sma @@ -0,0 +1,9718 @@ +/* Uncomment the below define to use SQL stats intead of flat-file stats. */ + +//#define SQL + +/* Uncomment the below define to have a player's timestamp get refreshed right away as soon as they join, instead of only when they play to the end of a game. +** There is a slight overhead for flat-file stats, but it's fairly speedy. When using SQL stats, you might as well uncomment this -- it'll be speedy. */ + +//#define REFRESH_TIMESTAMP_ON_JOIN + +// Thanks a lot to 3volution for helping me iron out some +// bugs and for giving me some helpful suggestions. +// +// Thanks a lot to raa for helping me pinpoint the crash, +// and discovering the respawn bug. +// +// Thanks a lot to BAILOPAN for binary logging, and for +// CSDM spawn files that I could leech off of. Oh, and +// also AMXX, etcetera. +// +// Thanks to VEN for Fakemeta Utilities to ease development. +// +// Thanks a lot to all of my supporters, but especially: +// 3volution, aligind4h0us3, arkshine, bmp, Curryking, +// Gunny, IdiotSavant, Mordekay, polakpolak, raa, Silver +// Dragon, Smileypt, Tomek Kalkowski, ToT | V!PER, and Vm|Mayhem. +// +// Thanks especially to all of the translators: +// arkshine, b!orn, commonbullet, Curryking, Deviance, +// D o o m, eD., e-N-z, Fr3ak0ut, godlike, harbu, iggy_bus, +// jopmako, jozzz, KylixMynxAltoLAG, MeRcyLeZZ, Min2liz, +// Mordekay, Morpheus759, rpm, SAMURAI16, Simbad, TEG, +// ToT | V!PER, trawiator, Twilight Suzuka, webpsiho, and +// others that I surely forgot (sorry!). +// +// Thanks to SeNz0r for many of the new sounds! +// +// If I missed you, please yell at me. + +#pragma dynamic 8192 // just a little bit extra, not too much + +#include +#include +#include +#include +#include +#include + +// defines to be left alone +new const GG_VERSION[] = "2.13c"; +#define LANG_PLAYER_C -76 // for gungame_print (arbitrary number) +#define TNAME_SAVE pev_noise3 // for blocking game_player_equip and player_weaponstrip +#define WINSOUNDS_SIZE (MAX_WINSOUNDS*MAX_WINSOUND_LEN)+1 // for gg_sound_winner + +// more customizable-friendly defines +#define TOP_PLAYERS 10 // for !top10 +#define MAX_WEAPONS 36 // for gg_weapon_order +#define MAX_WINSOUNDS 12 // for gg_sound_winnner +#define MAX_WINSOUND_LEN 48 // for gg_sound_winner +#define TEMP_SAVES 32 // for gg_save_temp +#define MAX_WEAPON_ORDERS 10 // for random gg_weapon_order +#define LEADER_DISPLAY_RATE 10.0 // for gg_leader_display +#define MAX_SPAWNS 128 // for gg_dm_spawn_random +#define MAX_STATS_RANK 1000 // cap of 1000 = 0.0063495ish sec for longest stats_get_position, cap of 5000 = 0.0327655ish sec + +// returns which of the two stats files we should be using currently (si stands for Stats Index) +#define get_gg_si() (get_pcvar_num(gg_stats_split) && get_pcvar_num(gg_teamplay)) + +// cs_set_user_money +#if cellbits == 32 +#define OFFSET_CSMONEY 115 +#else +#define OFFSET_CSMONEY 140 +#endif +#define OFFSET_LINUX 5 + +// animations +#define USP_DRAWANIM 6 +#define M4A1_DRAWANIM 5 + +// saves memory??? +new const WEAPON_HEGRENADE[] = "weapon_hegrenade"; +new const WEAPON_KNIFE[] = "weapon_knife"; +new const WEAPON_GLOCK18[] = "weapon_glock18"; +new const HEGRENADE[] = "hegrenade"; +new const KNIFE[] = "knife"; +new const BRASS_BELL_SOUND[] = "gungame/gg_brass_bell.wav"; +new const KILL_DING_SOUND[] = "buttons/bell1.wav"; + +// toggle_gungame +enum +{ + TOGGLE_FORCE = -1, + TOGGLE_DISABLE, + TOGGLE_ENABLE +}; + +// gg_status_display +enum +{ + STATUS_LEADERWPN = 1, + STATUS_YOURWPN, + STATUS_KILLSLEFT, + STATUS_KILLSDONE +}; + +// value of bombStatus[3] +enum +{ + BOMB_PICKEDUP = -1, + BOMB_DROPPED, + BOMB_PLANTED +}; + +// for gg_messages +#define MSGS_CLASSIC 2 +#define MSGS_NOCOLOR 4 +#define MSGS_HIDETEXT 8 +#define MSGS_HIDEHUD 16 + +// task ids +#define TASK_END_STAR 200 +#define TASK_RESPAWN 300 +#define TASK_CLEAR_SAVE 500 +#define TASK_CHECK_DEATHMATCH 600 +#define TASK_REMOVE_PROTECTION 700 +#define TASK_TOGGLE_GUNGAME 800 +#define TASK_WARMUP_CHECK 900 +#define TASK_VERIFY_WEAPON 1000 +#define TASK_DELAYED_SUICIDE 1100 +#define TASK_REFRESH_NADE 1200 +#define TASK_LEADER_DISPLAY 1300 +#define TASK_PLAY_LEAD_SOUNDS 1400 +#define TASK_CHECK_JOINCLASS 1500 +#define TASK_AUTOVOTE_RESULT 1600 +#define TASK_GET_TOP_PLAYERS 1700 + +//********************************************************************** +// VARIABLE DEFINITIONS +//********************************************************************** + +// pcvar holders +new gg_enabled, gg_ff_auto, gg_vote_setting, gg_map_setup, gg_join_msg, +gg_weapon_order, gg_max_lvl, gg_triple_on, gg_turbo, gg_knife_pro, +gg_worldspawn_suicide, gg_handicap_on, gg_top10_handicap, gg_warmup_timer_setting, +gg_warmup_weapon, gg_sound_levelup, gg_sound_leveldown, gg_sound_levelsteal, +gg_sound_nade, gg_sound_knife, gg_sound_welcome, gg_sound_triple, gg_sound_winner, +gg_kills_per_lvl, gg_vote_custom, gg_changelevel_custom, gg_ammo_amount, +gg_stats_prune, gg_refill_on_kill, gg_messages, gg_tk_penalty, +gg_save_temp, gg_stats_mode, gg_pickup_others, gg_stats_winbonus, gg_map_iterations, +gg_warmup_multi, gg_stats_ip, gg_extra_nades, gg_endmap_setup, gg_autovote_rounds, +gg_autovote_ratio, gg_autovote_delay, gg_autovote_time, gg_autovote_mode, gg_ignore_bots, gg_nade_refresh, +gg_block_equips, gg_leader_display, gg_leader_display_x, gg_leader_display_y, +gg_sound_takenlead, gg_sound_tiedlead, gg_sound_lostlead, gg_lead_sounds, gg_knife_elite, +gg_teamplay, gg_teamplay_knife_mod, gg_teamplay_nade_mod, gg_suicide_penalty, gg_winner_motd, +gg_bomb_defuse_lvl, gg_nade_glock, gg_nade_smoke, gg_nade_flash, gg_give_armor, gg_give_helmet, +gg_dm, gg_dm_sp_time, gg_dm_sp_mode, gg_dm_spawn_random, gg_dm_spawn_delay, gg_dm_corpses, gg_awp_oneshot, +gg_host_touch_reward, gg_host_rescue_reward, gg_host_kill_reward, gg_dm_countdown, gg_status_display, +gg_dm_spawn_afterplant, gg_block_objectives, gg_host_kill_penalty, gg_dm_start_random, gg_allow_changeteam, +gg_teamplay_timeratio, gg_disable_money, gg_kills_botmod, gg_bots_skipnade, gg_bots_knifeable, +gg_afk_protection, gg_stats_split, gg_top10_ppp; + +// weapon information +new maxClip[31] = { -1, 13, -1, 10, 1, 7, -1, 30, 30, 1, 30, 20, 25, 30, 35, 25, 12, 20, + 10, 30, 100, 8, 30, 30, 20, 2, 7, 30, 30, -1, 50 }; + +new maxAmmo[31] = { -1, 52, -1, 90, -1, 32, 1, 100, 90, -1, 120, 100, 100, 90, 90, 90, 100, 100, + 30, 120, 200, 32, 90, 120, 60, -1, 35, 90, 90, -1, 100 }; + +new weaponSlots[31] = { -1, 2, -1, 1, 4, 1, 5, 1, 1, 4, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, + 4, 2, 1, 1, 3, 1 }; + +enum statsData +{ + sdAuthid[32], + sdWins[2], + sdName[32], + sdTimestamp, // [1] + sdPoints[2], + sdStreak[2] +}; // size = 71 + +enum saveData +{ + svAuthid[32], + svLevel, // [1] + svScore, // [1] + svStatsPosition[2], + svTeamTimes[2], + svTime // [1] +}; // size = 39 + +// misc +new weapons_menu, scores_menu, level_menu, warmup = -1, warmupWeapon[24], voted, won, trailSpr, roundEnded, +menuText[512], dummy[2], tempSave[TEMP_SAVES][saveData], czero, maxPlayers, mapIteration = 1, cfgDir[32], +autovoted, autovotes[3], autovote_mode, roundsElapsed, gameCommenced, cycleNum = -1, czbot_hams, mp_friendlyfire, +winSounds[MAX_WINSOUNDS][MAX_WINSOUND_LEN+1], numWinSounds, currentWinSound, hudSyncWarmup, hudSyncReqKills, +hudSyncLDisplay, shouldWarmup, ggActive, teamLevel[3], teamLvlWeapon[3][24], teamScore[3], bombMap, hostageMap, +bombStatus[4], c4planter, Float:spawns[MAX_SPAWNS][9], spawnCount, csdmSpawnCount, hudSyncCountdown, +weaponName[MAX_WEAPONS+1][24], Float:weaponGoal[MAX_WEAPONS+1], weaponNum, initTeamplayStr[32], initTeamplayInt = -1, +bot_quota, spareName[32], sqlInit, galileoID = -1; + +// stats file stuff +new sfStatsStruct[statsData], lastStatsMode = -909; + +// event ids +new gmsgSayText, gmsgCurWeapon, gmsgStatusIcon, gmsgBombDrop, gmsgBombPickup, gmsgHideWeapon, +gmsgCrosshair, gmsgScenario; + +// player values +new level[33], levelsThisRound[33], score[33], lvlWeapon[33][24], star[33], welcomed[33], +page[33], lastKilled[33], hosties[33][2], silenced[33], respawn_timeleft[33], Float:lastSwitch[33], lastTeam[33], +spawnSounds[33], spawnProtected[33], statsPosition[33][2], Float:teamTimes[33][2], pointsExtraction[33][5], +Float:spawnOrigin[33][3], Float:spawnAngles[33][3], afkCheck[33], playerStats[33][statsData]; + +#if defined SQL + #include + + // flags for the "flags" field in the gg_sql_winmotd table + #define WON 1 + #define LOST 2 + #define LASTKILL 4 + #define NEWRECORD 8 + + new gg_sql_host, gg_sql_user, gg_sql_pass, gg_sql_db, gg_sql_table, gg_sql_streak_table, gg_sql_winmotd_table, + sqlTable[128], sqlStreakTable[128], sqlPlayersTable[128], serverip[64], Handle:tuple, Handle:db, Handle:query, safeName[64], mkQuery[1536]; +#else + new gg_stats_file, gg_stats_streak_file; + + new sfFile[64], sfLineData[112], sfAuthid[32], sfTimestamp[12], Array:statsArray, Array:statsPointers[2], statsSize[2]; +#endif + +//********************************************************************** +// INITIATION FUNCTIONS +//********************************************************************** + +// plugin load +public plugin_init() +{ + register_plugin("GunGame AMXX",GG_VERSION,"Avalanche"); + register_cvar("gg_version",GG_VERSION,FCVAR_SERVER); + set_cvar_string("gg_version",GG_VERSION); + + // mehrsprachige unterstützung (nein, spreche ich nicht Deutsches) + register_dictionary("gungame.txt"); + register_dictionary("common.txt"); + register_dictionary("adminvote.txt"); + + // event ids + gmsgSayText = get_user_msgid("SayText"); + gmsgCurWeapon = get_user_msgid("CurWeapon"); + gmsgStatusIcon = get_user_msgid("StatusIcon"); + gmsgScenario = get_user_msgid("Scenario"); + gmsgBombDrop = get_user_msgid("BombDrop"); + gmsgBombPickup = get_user_msgid("BombPickup"); + gmsgHideWeapon = get_user_msgid("HideWeapon"); + gmsgCrosshair = get_user_msgid("Crosshair"); + + // events + register_event("ResetHUD","event_resethud","be"); + register_event("HLTV","event_new_round","a","1=0","2=0"); + register_event("CurWeapon","event_curweapon","be","1=1"); + register_event("AmmoX","event_ammox","be"); + register_event("30","event_intermission","a"); + register_event("TextMsg","event_round_restart","a","2=#Game_Commencing","2=#Game_will_restart_in"); + register_event("23","event_bomb_detonation","a","1=17","6=-105","7=17"); // planted bomb exploded + + // forwards + register_forward(FM_SetModel,"fw_setmodel"); + register_forward(FM_EmitSound,"fw_emitsound"); + + // logevents + register_logevent("event_bomb_detonation",6,"3=Target_Bombed"); // another bomb exploded event, for security + register_logevent("logevent_bomb_planted",3,"2=Planted_The_Bomb"); // bomb planted + register_logevent("logevent_bomb_defused",3,"2=Defused_The_Bomb"); // bomb defused + register_logevent("logevent_round_end",2,"1=Round_End"); // round ended + register_logevent("logevent_hostage_touched",3,"2=Touched_A_Hostage"); + register_logevent("logevent_hostage_rescued",3,"2=Rescued_A_Hostage"); + register_logevent("logevent_hostage_killed",3,"2=Killed_A_Hostage"); + register_logevent("logevent_team_join",3,"1=joined team"); + + // messages + register_message(gmsgScenario,"message_scenario"); + register_message(get_user_msgid("ClCorpse"),"message_clcorpse"); + register_message(get_user_msgid("Money"),"message_money"); + register_message(gmsgBombDrop,"message_bombdrop"); + register_message(gmsgBombPickup,"message_bombpickup"); + register_message(get_user_msgid("WeapPickup"),"message_weappickup"); // for gg_block_objectives + register_message(get_user_msgid("AmmoPickup"),"message_ammopickup"); // for gg_block_objectives + register_message(get_user_msgid("TextMsg"),"message_textmsg"); // for gg_block_objectives + register_message(get_user_msgid("HostagePos"),"message_hostagepos"); // for gg_block_objectives + + // hams + RegisterHam(Ham_Touch,"weaponbox","ham_weapon_touch",0); + RegisterHam(Ham_Touch,"armoury_entity","ham_weapon_touch",0); + RegisterHam(Ham_Spawn,"player","ham_player_spawn",1); + RegisterHam(Ham_Killed,"player","ham_player_killed_pre",0); + RegisterHam(Ham_Killed,"player","ham_player_killed_post",1); + + // commands + register_clcmd("joinclass","cmd_joinclass"); // new menus + register_menucmd(register_menuid("Terrorist_Select",1),511,"cmd_joinclass"); // old menus + register_menucmd(register_menuid("CT_Select",1),511,"cmd_joinclass"); // old menus + register_concmd("amx_gungame","cmd_gungame",ADMIN_CVAR,"<0|1> - toggles the functionality of GunGame."); + register_concmd("amx_gungame_level","cmd_gungame_level",ADMIN_BAN," - sets target's level. use + or - for relative, otherwise it's absolute."); + register_concmd("amx_gungame_score","cmd_gungame_score",ADMIN_BAN," [dont_refill] - sets target's score. use + or - for relative, otherwise it's absolute."); + register_concmd("amx_gungame_vote","cmd_gungame_vote",ADMIN_VOTE,"[mode] - starts a vote to toggle GunGame."); + register_concmd("amx_gungame_win","cmd_gungame_win",ADMIN_BAN,"[target] - if target, forces target to win. if no target, forces highest level player to win."); + register_concmd("amx_gungame_teamplay","cmd_gungame_teamplay",ADMIN_BAN,"<0|1> [killsperlvl] [suicidepenalty] - toggles teamplay mode. optionally specify new cvar values."); + register_concmd("amx_gungame_restart","cmd_gungame_restart",ADMIN_BAN,"[delay] [full] - restarts GunGame. optionally specify a delay, in seconds. if full, reloads config and everything."); + register_srvcmd("gg_reloadweapons","cmd_reloadweapons",ADMIN_CVAR,"- reloads the weapon order and kills per level from cvars"); + register_clcmd("say","cmd_say"); + register_clcmd("say_team","cmd_say"); + + // menus + register_menucmd(register_menuid("autovote_menu"),MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_0,"autovote_menu_handler"); + register_menucmd(register_menuid("welcome_menu"),1023,"welcome_menu_handler"); + register_menucmd(register_menuid("restart_menu"),MENU_KEY_1|MENU_KEY_0,"restart_menu_handler"); + weapons_menu = register_menuid("weapons_menu"); + register_menucmd(weapons_menu,MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_0,"weapons_menu_handler"); + register_menucmd(register_menuid("top10_menu"),MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_0,"top10_menu_handler"); + scores_menu = register_menuid("scores_menu"); + register_menucmd(scores_menu,MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_0,"scores_menu_handler"); + level_menu = register_menuid("level_menu"); + register_menucmd(level_menu,1023,"level_menu_handler"); + + // basic cvars + gg_enabled = register_cvar("gg_enabled","1"); + gg_vote_setting = register_cvar("gg_vote_setting","2"); + gg_vote_custom = register_cvar("gg_vote_custom",""); + gg_changelevel_custom = register_cvar("gg_changelevel_custom",""); + gg_map_setup = register_cvar("gg_map_setup","mp_timelimit 45; mp_winlimit 0; sv_alltalk 0; mp_chattime 10; mp_c4timer 25"); + gg_endmap_setup = register_cvar("gg_endmap_setup",""); + gg_join_msg = register_cvar("gg_join_msg","1"); + gg_messages = register_cvar("gg_messages","1"); + gg_save_temp = register_cvar("gg_save_temp","300"); // = 5 * 60 = 5 minutes + gg_status_display = register_cvar("gg_status_display","1"); + gg_map_iterations = register_cvar("gg_map_iterations","1"); + gg_ignore_bots = register_cvar("gg_ignore_bots","0"); + gg_block_equips = register_cvar("gg_block_equips","2"); + gg_leader_display = register_cvar("gg_leader_display","1"); + gg_leader_display_x = register_cvar("gg_leader_display_x","-1.0"); + gg_leader_display_y = register_cvar("gg_leader_display_y","0.0"); + gg_allow_changeteam = register_cvar("gg_allow_changeteam","2"); + gg_disable_money = register_cvar("gg_disable_money","1"); + gg_winner_motd = register_cvar("gg_winner_motd","1"); + gg_afk_protection = register_cvar("gg_afk_protection","0"); + gg_top10_ppp = register_cvar("gg_top10_ppp","8"); + + // autovote cvars + gg_autovote_mode = register_cvar("gg_autovote_mode","0"); + gg_autovote_rounds = register_cvar("gg_autovote_rounds","1"); + gg_autovote_delay = register_cvar("gg_autovote_delay","8.0"); + gg_autovote_ratio = register_cvar("gg_autovote_ratio","0.51"); + gg_autovote_time = register_cvar("gg_autovote_time","10.0"); + + // stats cvars +#if !defined SQL + gg_stats_file = register_cvar("gg_stats_file","gungame.stats"); + gg_stats_streak_file = register_cvar("gg_stats_streak_file","gungame.streaks"); +#endif + gg_stats_ip = register_cvar("gg_stats_ip","0"); + gg_stats_prune = register_cvar("gg_stats_prune","2592000"); // = 60 * 60 * 24 * 30 = 30 days + gg_stats_mode = register_cvar("gg_stats_mode","2"); + gg_stats_split = register_cvar("gg_stats_split","0"); + gg_stats_winbonus = register_cvar("gg_stats_winbonus","1.5"); + + // deathmatch cvars + gg_dm = register_cvar("gg_dm","1"); + gg_dm_sp_time = register_cvar("gg_dm_sp_time","1.0"); + gg_dm_sp_mode = register_cvar("gg_dm_sp_mode","1"); + gg_dm_spawn_random = register_cvar("gg_dm_spawn_random","2"); + gg_dm_start_random = register_cvar("gg_dm_start_random","1"); + gg_dm_spawn_delay = register_cvar("gg_dm_spawn_delay","3.0"); + gg_dm_spawn_afterplant = register_cvar("gg_dm_spawn_afterplant","1"); + gg_dm_corpses = register_cvar("gg_dm_corpses","1"); + gg_dm_countdown = register_cvar("gg_dm_countdown","2"); + + // objective cvars + gg_block_objectives = register_cvar("gg_block_objectives","0"); + gg_bomb_defuse_lvl = register_cvar("gg_bomb_defuse_lvl","1"); + gg_host_touch_reward = register_cvar("gg_host_touch_reward","2"); + gg_host_rescue_reward = register_cvar("gg_host_rescue_reward","2"); + gg_host_kill_reward = register_cvar("gg_host_kill_reward","1"); + gg_host_kill_penalty = register_cvar("gg_host_kill_penalty","1"); + + // teamplay cvars + gg_teamplay = register_cvar("gg_teamplay","0"); + gg_teamplay_knife_mod = register_cvar("gg_teamplay_knife_mod","0.33"); + gg_teamplay_nade_mod = register_cvar("gg_teamplay_nade_mod","0.50"); + gg_teamplay_timeratio = register_cvar("gg_teamplay_timeratio","1"); + + // gameplay cvars + gg_ff_auto = register_cvar("gg_ff_auto","1"); + gg_weapon_order = register_cvar("gg_weapon_order","glock18,usp,p228,deagle,fiveseven,elite,m3,xm1014,tmp,mac10,mp5navy,ump45,p90,galil,famas,ak47,scout,m4a1,sg552,aug,m249,hegrenade,knife"); + gg_max_lvl = register_cvar("gg_max_lvl","3"); + gg_triple_on = register_cvar("gg_triple_on","0"); + gg_turbo = register_cvar("gg_turbo","1"); + gg_knife_pro = register_cvar("gg_knife_pro","1"); + gg_knife_elite = register_cvar("gg_knife_elite","0"); + gg_suicide_penalty = register_cvar("gg_suicide_penalty","1"); + gg_worldspawn_suicide = register_cvar("gg_worldspawn_suicide","1"); + gg_pickup_others = register_cvar("gg_pickup_others","0"); + gg_handicap_on = register_cvar("gg_handicap_on","1"); + gg_top10_handicap = register_cvar("gg_top10_handicap","1"); + gg_warmup_timer_setting = register_cvar("gg_warmup_timer_setting","60"); + gg_warmup_weapon = register_cvar("gg_warmup_weapon",KNIFE); + gg_warmup_multi = register_cvar("gg_warmup_multi","0"); + gg_nade_glock = register_cvar("gg_nade_glock","1"); + gg_nade_smoke = register_cvar("gg_nade_smoke","0"); + gg_nade_flash = register_cvar("gg_nade_flash","0"); + gg_extra_nades = register_cvar("gg_extra_nades","1"); + gg_nade_refresh = register_cvar("gg_nade_refresh","5.0"); + gg_kills_per_lvl = register_cvar("gg_kills_per_lvl","2"); + gg_kills_botmod = register_cvar("gg_kills_botmod","1.0"); + gg_give_armor = register_cvar("gg_give_armor","100"); + gg_give_helmet = register_cvar("gg_give_helmet","1"); + gg_ammo_amount = register_cvar("gg_ammo_amount","200"); + gg_refill_on_kill = register_cvar("gg_refill_on_kill","1"); + gg_tk_penalty = register_cvar("gg_tk_penalty","1"); + gg_awp_oneshot = register_cvar("gg_awp_oneshot","1"); + gg_bots_skipnade = register_cvar("gg_bots_skipnade","0"); + gg_bots_knifeable = register_cvar("gg_bots_knifeable","1"); + +#if defined SQL + // SQL cvars + gg_sql_host = register_cvar("gg_sql_host","127.0.0.1",FCVAR_PROTECTED); + gg_sql_user = register_cvar("gg_sql_user","root",FCVAR_PROTECTED); + gg_sql_pass = register_cvar("gg_sql_pass","",FCVAR_PROTECTED); + gg_sql_db = register_cvar("gg_sql_db","amx",FCVAR_PROTECTED); + gg_sql_table = register_cvar("gg_sql_table","gg_stats",FCVAR_PROTECTED); + gg_sql_streak_table = register_cvar("gg_sql_streak_table","gg_streaks",FCVAR_PROTECTED); + gg_sql_winmotd_table = register_cvar("gg_sql_winmotd_table","gg_winmotd",FCVAR_PROTECTED); + + get_user_ip(0,serverip,63,0); // with port +#else + sqlInit = 1; +#endif + + // sound cvars done in plugin_precache now + + // random weapon order cvars + new i, cvar[20]; + for(i=1;i<=MAX_WEAPON_ORDERS;i++) + { + formatex(cvar,19,"gg_weapon_order%i",i); + register_cvar(cvar,""); + } + + // update status immediately + ggActive = get_pcvar_num(gg_enabled); + + // make sure to setup amx_nextmap incase nextmap.amxx isn't running + if(!cvar_exists("amx_nextmap")) register_cvar("amx_nextmap","",FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY); + + // make sure we have this to trick mapchooser.amxx into working + if(!cvar_exists("mp_maxrounds")) register_cvar("mp_maxrounds","0",FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY); + + // collect some other information that would be handy + maxPlayers = get_maxplayers(); + + // create hud sync objects + hudSyncWarmup = CreateHudSyncObj(); + hudSyncReqKills = CreateHudSyncObj(); + hudSyncLDisplay = CreateHudSyncObj(); + hudSyncCountdown = CreateHudSyncObj(); + + // remember the mod + new modName[7]; + get_modname(modName,6); + if(equal(modName,"czero")) + { + czero = 1; + bot_quota = get_cvar_pointer("bot_quota"); + } + + // identify this as a bomb map + if(fm_find_ent_by_class(maxPlayers,"info_bomb_target") || fm_find_ent_by_class(1,"func_bomb_target")) + bombMap = 1; + + // identify this as a hostage map + if(fm_find_ent_by_class(maxPlayers,"hostage_entity")) + hostageMap = 1; + + // get spawns for deathmatch + init_spawns(); + + // delay for server.cfg + set_task(1.0,"toggle_gungame",TASK_TOGGLE_GUNGAME + TOGGLE_FORCE); + + // manage pruning (longer delay for toggle_gungame) + set_task(2.0,"manage_pruning"); + + // map configs take 6.1 seconds to load + set_task(6.2,"setup_weapon_order"); + set_task(6.2,"stats_get_top_players",TASK_GET_TOP_PLAYERS); +} + +// plugin precache +public plugin_precache() +{ + // used in precache_sounds_from_config() + get_configsdir(cfgDir,31); + + // sound cvars + gg_sound_levelup = register_cvar("gg_sound_levelup","sound/gungame/gg_levelup.wav"); + gg_sound_leveldown = register_cvar("gg_sound_leveldown","sound/ambience/xtal_down1(e70)"); + gg_sound_levelsteal = register_cvar("gg_sound_levelsteal","sound/turret/tu_die.wav"); + gg_sound_nade = register_cvar("gg_sound_nade","sound/gungame/gg_nade_level.wav"); + gg_sound_knife = register_cvar("gg_sound_knife","sound/gungame/gg_knife_level.wav"); + gg_sound_welcome = register_cvar("gg_sound_welcome","sound/gungame/gg_welcome.wav"); + gg_sound_triple = register_cvar("gg_sound_triple","sound/gungame/gg_triple.wav"); + gg_sound_winner = register_cvar("gg_sound_winner","media/Half-Life03.mp3;media/Half-Life08.mp3;media/Half-Life11.mp3;media/Half-Life17.mp3"); + gg_sound_takenlead = register_cvar("gg_sound_takenlead","sound/gungame/gg_takenlead.wav"); + gg_sound_tiedlead = register_cvar("gg_sound_tiedlead","sound/gungame/gg_tiedlead.wav"); + gg_sound_lostlead = register_cvar("gg_sound_lostlead","sound/gungame/gg_lostlead.wav"); + gg_lead_sounds = register_cvar("gg_lead_sounds","0.9"); + + mp_friendlyfire = get_cvar_pointer("mp_friendlyfire"); + + // precache everything in the config (regular and teamplay) -- we might need them + precache_sounds_from_config(); + + // also precache what we have now, in case the server doesn't have a GunGame config + precache_sound_by_cvar(gg_sound_levelup); + precache_sound_by_cvar(gg_sound_leveldown); + precache_sound_by_cvar(gg_sound_levelsteal); + precache_sound_by_cvar(gg_sound_nade); + precache_sound_by_cvar(gg_sound_knife); + precache_sound_by_cvar(gg_sound_welcome); + precache_sound_by_cvar(gg_sound_triple); + precache_sound_by_cvar(gg_sound_takenlead); + precache_sound_by_cvar(gg_sound_tiedlead); + precache_sound_by_cvar(gg_sound_lostlead); + + get_pcvar_string(gg_sound_winner,dummy,1); + if(dummy[0]) // win sounds enabled + { + // gg_sound_winner might contain multiple sounds + new buffer[WINSOUNDS_SIZE], temp[MAX_WINSOUND_LEN+1], pos; + get_pcvar_string(gg_sound_winner,buffer,WINSOUNDS_SIZE-1); + + while(numWinSounds < MAX_WINSOUNDS) + { + pos = contain_char(buffer,';'); + + // no more after this, precache what we have left + if(pos == -1) + { + if(buffer[0]) + { + precache_sound_special(buffer); + copy(winSounds[numWinSounds++],MAX_WINSOUND_LEN,buffer); + } + break; + } + + // copy up to the semicolon and precache that + copy(temp,pos,buffer); + + if(temp[0]) + { + precache_sound_special(temp); + copy(winSounds[numWinSounds++],MAX_WINSOUND_LEN,temp); + } + + // copy everything after the semicolon + copy(buffer,WINSOUNDS_SIZE-1,buffer[pos+1]); + } + } + + // some generic, non-changing things + precache_sound(BRASS_BELL_SOUND); + precache_sound(KILL_DING_SOUND); + precache_sound("common/null.wav"); + + // for the star + trailSpr = precache_model("sprites/laserbeam.spr"); +} + +public plugin_cfg() +{ + galileoID = is_plugin_loaded("Galileo"); +} + +public plugin_end() +{ +#if defined SQL + sql_uninit(); +#endif + + // run endmap setup on plugin close + if(ggActive) + { + // reset random teamplay + if(initTeamplayInt != -1) set_pcvar_string(gg_teamplay,initTeamplayStr); + + new setup[512]; + get_pcvar_string(gg_endmap_setup,setup,511); + if(setup[0]) server_cmd(setup); + } +} + +//********************************************************************** +// FORWARDS +//********************************************************************** + +// client gets a steamid +public client_authorized(id) +{ + clear_values(id); + + static authid[32]; + get_gg_authid(id,authid,31); + + // load temporary save + if(ggActive && get_pcvar_num(gg_save_temp)) + { + new i, save = -1; + + // find our possible temp save + for(i=0;i -1) + { + if(!get_pcvar_num(gg_teamplay)) + { + // these are solo-only + level[id] = tempSave[save][svLevel]; + score[id] = tempSave[save][svScore]; + get_level_weapon(level[id],lvlWeapon[id],23); + } + + statsPosition[id][0] = tempSave[save][svStatsPosition][0]; + statsPosition[id][1] = tempSave[save][svStatsPosition][1]; + teamTimes[id][0] = Float:tempSave[save][svTeamTimes][0]; + teamTimes[id][1] = Float:tempSave[save][svTeamTimes][1]; + + // clear it + clear_save(TASK_CLEAR_SAVE+save); + } + } + +#if defined SQL + if(!statsPosition[id][0]) stats_get_position(id,authid,0); + if(!statsPosition[id][1]) stats_get_position(id,authid,1); +#else + // cache our position if we didn't get it from a save + if(!statsPosition[id][0] || !statsPosition[id][1]) + { + if(statsArray) // we've set up the stats array + { + recheck_stats_sorting(); // see if anything changed + + // if nothing happened, get my position + if(!statsPosition[id][0]) stats_get_position(id,authid,0); + if(!statsPosition[id][1]) stats_get_position(id,authid,1); + } + } +#endif + +#if defined REFRESH_TIMESTAMP_ON_JOIN + stats_refresh_timestamp(authid); +#endif +} + +// client leaves, reset values +public client_disconnect(id) +{ + // remove certain tasks + remove_task(TASK_VERIFY_WEAPON+id); + remove_task(TASK_REFRESH_NADE+id); + remove_task(TASK_RESPAWN+id); + remove_task(TASK_CHECK_DEATHMATCH+id); + remove_task(TASK_REMOVE_PROTECTION+id); + remove_task(TASK_DELAYED_SUICIDE+id); + + // don't bother saving if in winning period or warmup + if(!won && warmup <= 0) + { + new save_temp = get_pcvar_num(gg_save_temp); + + // temporarily save values + if(ggActive && save_temp && (level[id] > 1 || score[id] > 0)) + { + // keep track of times + new team = get_user_team(id); + if(team == 1 || team == 2) teamTimes[id][team-1] += get_gametime() - lastSwitch[id]; + + new freeSave = -1, oldestSave = -1, i; + + for(i=0;i 0) + set_task(0.1,"czbot_hook_ham",id); + + // bots don't call joinclass + if(is_user_bot(id)) cmd_joinclass(id); +} + +// delay for private data to initialize -- +// here is the problem: registering a ham hook for "player" won't +// register it for CZ bots, for some reason. so we have to register +// it by entity. so we do this ridiculous thing in order to do so. +public czbot_hook_ham(id) +{ + if(czbot_hams || !is_user_connected(id)) return; + + // probably a czero bot + if(is_user_bot(id) && get_pcvar_num(bot_quota) > 0) + { + RegisterHamFromEntity(Ham_Spawn,id,"ham_player_spawn",1); + RegisterHamFromEntity(Ham_Killed,id,"ham_player_killed_pre",0); + RegisterHamFromEntity(Ham_Killed,id,"ham_player_killed_post",1); + + czbot_hams = 1; + + // bug fix for mid-round spawning, thanks to MeRcyLeZZ + if(is_user_alive(id)) ham_player_spawn(id); + } +} + +// remove a save +public clear_save(taskid) +{ + remove_task(taskid); + tempSave[taskid-TASK_CLEAR_SAVE][svAuthid][0] = 0; +} + +// my info... it's changed! +public client_infochanged(id) +{ + if(!ggActive || !is_user_connected(id)) + return PLUGIN_CONTINUE; + + new oldTeam = lastTeam[id], newTeam = _:cs_get_user_team(id); + + // this means it was caught by logevent_team_join, or wasn't a team change + if(oldTeam == newTeam) return PLUGIN_CONTINUE; + + player_teamchange(id,oldTeam,newTeam); + + // invalid team + if((newTeam != 1 && newTeam != 2) || !get_pcvar_num(gg_teamplay)) + return PLUGIN_CONTINUE; + + // something is out of synch + if(teamLevel[newTeam] && (level[id] != teamLevel[newTeam] || score[id] != teamScore[newTeam] || !equal(lvlWeapon[id],teamLvlWeapon[newTeam]))) + { + // set them directly + level[id] = teamLevel[newTeam]; + lvlWeapon[id] = teamLvlWeapon[newTeam]; + score[id] = teamScore[newTeam]; + + // gimme mah weapon! + if(is_user_alive(id)) give_level_weapon(id); + } + + return PLUGIN_CONTINUE; +} + +//********************************************************************** +// FORWARD HOOKS +//********************************************************************** + +// an entity is given a model, check for silenced/burst status +public fw_setmodel(ent,model[]) +{ + if(!ggActive) return FMRES_IGNORED; + + new owner = pev(ent,pev_owner); + + // no owner + if(!is_user_connected(owner)) return FMRES_IGNORED; + + static classname[24]; // the extra space is used later + pev(ent,pev_classname,classname,10); + + // not a weapon + // checks for weaponbox, weapon_shield + if(classname[8] != 'x' && !(classname[6] == '_' && classname[7] == 's' && classname[8] == 'h')) + return FMRES_IGNORED; + + // makes sure we don't get memory access error, + // but also helpful to narrow down matches + new len = strlen(model); + + // ignore weaponboxes whose models haven't been set to correspond with their weapon types yet + // checks for models/w_weaponbox.mdl + if(len == 22 && model[17] == 'x') return FMRES_IGNORED; + + // ignore C4 + // checks for models/w_backpack.mdl + if(len == 21 && model[9] == 'b') return FMRES_IGNORED; + + // checks for models/w_usp.mdl, usp, models/w_m4a1.mdl, m4a1 + if((len == 16 && model[10] == 's' && lvlWeapon[owner][1] == 's') + || (len == 17 && model[10] == '4' && lvlWeapon[owner][1] == '4') ) + { + copyc(model,len-1,model[contain_char(model,'_')+1],'.'); // strips off models/w_ and .mdl + formatex(classname,23,"weapon_%s",model); + + // remember silenced status + new wEnt = fm_find_ent_by_owner(maxPlayers,classname,ent); + if(pev_valid(wEnt)) silenced[owner] = cs_get_weapon_silen(wEnt); + } + + // checks for models/w_glock18.mdl, glock18, models/w_famas.mdl, famas + else if((len == 20 && model[15] == '8' && lvlWeapon[owner][6] == '8') + || (len == 18 && model[9] == 'f' && model[10] == 'a' && lvlWeapon[owner][0] == 'f' && lvlWeapon[owner][1] == 'a') ) + { + copyc(model,len-1,model[contain_char(model,'_')+1],'.'); // strips off models/w_ and .mdl + formatex(classname,23,"weapon_%s",model); + + // remember burst status + new wEnt = fm_find_ent_by_owner(maxPlayers,classname,ent); + if(pev_valid(wEnt)) silenced[owner] = cs_get_weapon_burst(wEnt); + } + + // if owner is dead, remove it if we need to + if(get_user_health(owner) <= 0 && get_pcvar_num(gg_dm) && !get_pcvar_num(gg_pickup_others)) + { + dllfunc(DLLFunc_Think,ent); + return FMRES_SUPERCEDE; + } + + return FMRES_IGNORED; +} + +// HELLO HELLo HELlo HEllo Hello hello +public fw_emitsound(ent,channel,sample[],Float:volume,Float:atten,flags,pitch) +{ + if(!ggActive || !is_user_connected(ent) || !get_pcvar_num(gg_dm) || spawnSounds[ent]) + return FMRES_IGNORED; + + // used to stop spawn sounds in deathmatch + return FMRES_SUPERCEDE; +} + +//********************************************************************** +// EVENT HOOKS +//********************************************************************** + +// our HUD gets reset (obviously) +public event_resethud(id) +{ + if(ggActive && is_user_connected(id)) + set_task(0.1,"reset_hud",id); +} + +// fix the leader display and hide money +public reset_hud(id) +{ + if(is_user_connected(id)) + { + status_display(id); + if(get_pcvar_num(gg_disable_money)) hide_money(id); + } +} + +// someone changes weapons +public event_curweapon(id) +{ + if(!ggActive || !is_user_connected(id)) return; + + // keep star speed + if(star[id]) fm_set_user_maxspeed(id,fm_get_user_maxspeed(id)*1.5); + + // monitor weapon activity + if(afkCheck[id] && is_user_alive(id)) afkCheck[id]++; + + // have at least one bullet in AWP clip + if(get_pcvar_num(gg_awp_oneshot) && read_data(2) == CSW_AWP && read_data(3) > 1) + { + new wEnt = get_weapon_ent(id,CSW_AWP); + if(pev_valid(wEnt)) cs_set_weapon_ammo(wEnt,1); + + message_begin(MSG_ONE,gmsgCurWeapon,_,id); + write_byte(1); // current? + write_byte(CSW_AWP); // weapon + write_byte(1); // clip + message_end(); + } +} + +// a new round has begun +public event_new_round() +{ + static armourysHidden = 0; + + roundEnded = 0; + roundsElapsed++; + + c4planter = 0; + bombStatus[3] = BOMB_PICKEDUP; + + if(gameCommenced && !autovoted) + { + // don't check mode until vote starts, so map configs have chance to execute + if(/*autovote_mode &&*/ roundsElapsed >= get_pcvar_num(gg_autovote_rounds)) + { + autovoted = 1; + autovote_mode = -1; // signal to check in autovote_start + set_task(get_pcvar_float(gg_autovote_delay),"autovote_start"); + } + } + + // game_player_equip + manage_equips(); + + if(!ggActive) return; + + // we should probably warmup... + // don't ask me where I'm getting this from. + if(shouldWarmup) + { + shouldWarmup = 0; + start_warmup(); + } + + if(warmup <= 0) + { + new leader = get_leader(); + + if(equal(lvlWeapon[leader],HEGRENADE)) play_sound_by_cvar(0,gg_sound_nade); + else if(equal(lvlWeapon[leader],KNIFE)) play_sound_by_cvar(0,gg_sound_knife); + } + + // reset leader display + remove_task(TASK_LEADER_DISPLAY); + set_task(0.5,"show_leader_display"); // wait to initialize levels + + new pickup_others = get_pcvar_num(gg_pickup_others); + if(!pickup_others /*&& !armourysHidden*/) // they show up again on new round + { + set_task(0.1,"hide_armory_entitys"); + armourysHidden = 1; + } + else if(pickup_others && armourysHidden) + { + set_task(0.1,"show_armory_entitys"); + armourysHidden = 0; + } + + // block hostages + if(hostageMap) + { + // block hostages + if(get_pcvar_num(gg_block_objectives)) + set_task(0.1,"move_hostages"); + else + { + // reset hostage info + new i; + for(i=0;i<33;i++) + { + hosties[i][0] = 0; + hosties[i][1] = 0; + } + } + } + + // start in random positions at round start + if(get_pcvar_num(gg_dm) && get_pcvar_num(gg_dm_start_random)) + set_task(0.1,"randomly_place_everyone"); +} + +// hide the armoury_entity's so players cannot pick them up +public hide_armory_entitys() +{ + new ent = maxPlayers; + while((ent = fm_find_ent_by_class(ent,"armoury_entity"))) + { + set_pev(ent,pev_solid,SOLID_NOT); + fm_set_entity_visibility(ent,0); + } +} + +// reveal the armoury_entity's so players CAN pick them up +public show_armory_entitys() +{ + new ent = maxPlayers; + while((ent = fm_find_ent_by_class(ent,"armoury_entity"))) + { + set_pev(ent,pev_solid,SOLID_TRIGGER); + fm_set_entity_visibility(ent,1); + } +} + +// move the hostages so that CTs can't get to them +public move_hostages() +{ + new ent = maxPlayers; + while((ent = fm_find_ent_by_class(ent,"hostage_entity"))) + set_pev(ent,pev_origin,Float:{8192.0,8192.0,8192.0}); +} + +// round is restarting (TAG: sv_restartround) +public event_round_restart() +{ + // re-entrancy fix + static Float:lastThis; + new Float:now = get_gametime(); + if(now == lastThis) return; + lastThis = now; + + static message[17]; + read_data(2,message,16); + + if(equal(message,"#Game_Commencing")) + { + // don't reset values on game commencing, + // if it has already commenced once + if(gameCommenced) return; + gameCommenced = 1; + + // start warmup + if(ggActive) + { + clear_all_values(); + + shouldWarmup = 0; + start_warmup(); + + return; + } + } + /*else if(ggActive) // #Game_will_restart_in + { + read_data(3,message,4); // time to restart in + new Float:time = floatstr(message) - 0.1; + set_task((time < 0.1) ? 0.1 : time,"clear_all_values"); + }*/ +} + +// a delayed clearing +public clear_all_values() +{ + new player; + for(player=1;player<=maxPlayers;player++) + { + if(is_user_connected(player)) clear_values(player,1); + } + + clear_team_values(1); + clear_team_values(2); +} + +// the bomb explodes +public event_bomb_detonation() +{ + if(!ggActive || get_pcvar_num(gg_bomb_defuse_lvl) != 2 || !c4planter) + return; + + // re-entrancy fix + static Float:lastThis; + new Float:now = get_gametime(); + if(now == lastThis) return; + lastThis = now; + + new id = c4planter; + c4planter = 0; + + if(!is_user_connected(id)) return; + + if(!equal(lvlWeapon[id],HEGRENADE) && !equal(lvlWeapon[id],KNIFE) && level[id] < weaponNum) + { + change_level(id,1); + //score[id] = 0; + } + else if(is_user_alive(id)) refill_ammo(id); +} + +// ammo amount changes +public event_ammox(id) +{ + new type = read_data(1); + + // not HE grenade ammo, or not on the grenade level + if(type != 12 || !equal(lvlWeapon[id],HEGRENADE)) return; + + new amount = read_data(2); + + // still have some left, ignore + if(amount > 0) + { + remove_task(TASK_REFRESH_NADE+id); + return; + } + + new Float:refresh = get_pcvar_float(gg_nade_refresh); + + // refreshing is disabled, or we are already giving one out + if(refresh <= 0.0 || task_exists(TASK_REFRESH_NADE+id)) return; + + // start the timer for the new grenade + set_task(refresh,"refresh_nade",TASK_REFRESH_NADE+id); +} + +// map is changing +public event_intermission() +{ + if(!ggActive) return; + + if(won) + { + if(set_nextmap()) set_task(1.0,"goto_nextmap"); + return; + } + + new player, found; + for(player=1;player<=maxPlayers;player++) + { + if(is_user_connected(player) && on_valid_team(player)) + { + found = 1; + break; + } + } + + // did not find any players on a valid team, game over man + if(!found) + { + if(set_nextmap()) set_task(1.0,"goto_nextmap"); + return; + } + + // teamplay, easier to decide + if(get_pcvar_num(gg_teamplay)) + { + new winner; + + // clear winner + if(teamLevel[1] > teamLevel[2]) winner = 1; + else if(teamLevel[2] > teamLevel[1]) winner = 2; + else + { + // tied for level, check score + if(teamScore[1] > teamScore[2]) winner = 1; + else if(teamScore[2] > teamScore[1]) winner = 2; + else + { + // tied for level and score, pick random + winner = random_num(1,2); + } + } + + // grab a player from the winning and losing teams + new plWinner, plLoser, team; + for(player=1;player<=maxPlayers;player++) + { + if(is_user_connected(player) && on_valid_team(player)) + { + team = _:cs_get_user_team(player); + + if(!plWinner && team == winner) plWinner = player; + else if(!plLoser && team != winner) plLoser = player; + + if(plWinner && plLoser) break; + } + } + + win(plWinner,plLoser); + if(set_nextmap()) set_task(1.0,"goto_nextmap"); + + return; + } + + // grab highest level + new leaderLevel; + get_leader(leaderLevel); + + // grab player list + new players[32], pNum, winner, i; + get_players(players,pNum); + + // no one here + if(pNum <= 0) + { + if(set_nextmap()) set_task(1.0,"goto_nextmap"); + return; + } + + new topLevel[32], tlNum; + + // get all of the highest level players + for(i=0;i= highestKills) + highestKills = frags; + } + + new topKillers[32], tkNum; + + // get all of the players with highest kills + for(i=0;i 1 && get_pcvar_num(gg_block_objectives)) + { + new sprite[8]; + get_msg_arg_string(2,sprite,7); + + if(equal(sprite,"hostage")) + return PLUGIN_HANDLED; + } + + return PLUGIN_CONTINUE; +} + +// remove c4 if we disabled objectives +public message_weappickup(msg_id,msg_dest,msg_entity) +{ + if(!bombMap || !ggActive || !get_pcvar_num(gg_block_objectives)) + return PLUGIN_CONTINUE; + + if(get_msg_arg_int(1) == CSW_C4) + { + set_task(0.1,"strip_c4",msg_entity); + return PLUGIN_HANDLED; + } + + return PLUGIN_CONTINUE; +} + +// delay, since weappickup is slightly before we actually get the weapon +public strip_c4(id) +{ + if(!is_user_connected(id)) return; + + ham_strip_weapon(id,"weapon_c4"); + + // remove it from HUD + message_begin(MSG_ONE,gmsgStatusIcon,_,id); + write_byte(0); + write_string("c4"); + message_end(); +} + +// block c4 ammo message if we disabled objectives +public message_ammopickup(msg_id,msg_dest,msg_entity) +{ + if(!bombMap || !ggActive || !get_pcvar_num(gg_block_objectives)) + return PLUGIN_CONTINUE; + + if(get_msg_arg_int(1) == 14) // C4 + return PLUGIN_HANDLED; + + return PLUGIN_CONTINUE; +} + +// block dropped the bomb message if we disabled objectives +public message_textmsg(msg_id,msg_dest,msg_entity) +{ + if(!bombMap || !ggActive || !get_pcvar_num(gg_block_objectives)) + return PLUGIN_CONTINUE; + + static message[16]; + get_msg_arg_string(2,message,15); + + if(equal(message,"#Game_bomb_drop")) + return PLUGIN_HANDLED; + + return PLUGIN_CONTINUE; +} + +// block hostages from appearing on radar if we disabled objectives +public message_hostagepos(msg_id,msg_dest,msg_entity) +{ + if(!ggActive || !get_pcvar_num(gg_block_objectives)) + return PLUGIN_CONTINUE; + + return PLUGIN_HANDLED; +} + +// a corpse is to be set, stop player shells bug (thanks sawce) +public message_clcorpse(msg_id,msg_dest,msg_entity) +{ + if(!ggActive || get_msg_args() < 12) + return PLUGIN_CONTINUE; + + if(get_pcvar_num(gg_dm) && !get_pcvar_num(gg_dm_corpses)) + return PLUGIN_HANDLED; + + return PLUGIN_CONTINUE; +} + +// money money money! +public message_money(msg_id,msg_dest,msg_entity) +{ + if(!ggActive || !is_user_connected(msg_entity) || !is_user_alive(msg_entity) || !get_pcvar_num(gg_disable_money)) + return PLUGIN_CONTINUE; + + // this now just changes the value of the message, passes it along, + // and then modifies the pdata, instead of calling another cs_set_user_money + // and sending out more messages than needed. + + set_msg_arg_int(1,ARG_LONG,0); // money + set_msg_arg_int(2,ARG_BYTE,0); // flash + + set_pdata_int(msg_entity,OFFSET_CSMONEY,0,OFFSET_LINUX); + return PLUGIN_CONTINUE; +} + +//********************************************************************** +// LOG EVENT HOOKS +//********************************************************************** + +// someone planted the bomb +public logevent_bomb_planted() +{ + if(!ggActive || !get_pcvar_num(gg_bomb_defuse_lvl) || roundEnded) + return; + + new id = get_loguser_index(); + if(!is_user_connected(id)) return; + + if(get_pcvar_num(gg_bomb_defuse_lvl) == 2) c4planter = id; + else + { + if(!equal(lvlWeapon[id],HEGRENADE) && !equal(lvlWeapon[id],KNIFE) && level[id] < weaponNum) + { + change_level(id,1); + } + else refill_ammo(id); + } + +} + +// someone defused the bomb +public logevent_bomb_defused() +{ + if(!ggActive || !get_pcvar_num(gg_bomb_defuse_lvl)) + return; + + new id = get_loguser_index(); + if(!is_user_connected(id)) return; + + if(!equal(lvlWeapon[id],HEGRENADE) && !equal(lvlWeapon[id],KNIFE) && level[id] < weaponNum) + { + change_level(id,1); + } + else refill_ammo(id); +} + +// the round ends +public logevent_round_end() +{ + roundEnded = 1; +} + +// hostage is touched +public logevent_hostage_touched() +{ + new reward = get_pcvar_num(gg_host_touch_reward); + + if(!ggActive || !reward || roundEnded) + return; + + new id = get_loguser_index(); + if(!is_user_connected(id) || hosties[id][0] == -1) return; + + hosties[id][0]++; + + if(hosties[id][0] >= reward) + { + if((!equal(lvlWeapon[id],HEGRENADE) && !equal(lvlWeapon[id],KNIFE) && level[id] < weaponNum) + || score[id] + 1 < get_level_goal(level[id],id)) + { + // didn't level off of it + if(!change_score(id,1)) show_required_kills(id); + } + else refill_ammo(id); + + hosties[id][0] = -1; + + if(get_pcvar_num(gg_teamplay)) + { + new CsTeams:team = cs_get_user_team(id), i; + for(i=1;i<=maxPlayers;i++) + { + // one per team + if(is_user_connected(i) && cs_get_user_team(i) == team) + hosties[i][0] = -1; + } + } + } +} + +// hostage is rescued +public logevent_hostage_rescued() +{ + new reward = get_pcvar_num(gg_host_rescue_reward); + + if(!ggActive || !reward || roundEnded) + return; + + new id = get_loguser_index(); + if(!is_user_connected(id) || hosties[id][1] == -1) return; + + hosties[id][1]++; + + if(hosties[id][1] >= reward) + { + if(!equal(lvlWeapon[id],HEGRENADE) && !equal(lvlWeapon[id],KNIFE) && level[id] < weaponNum) + change_level(id,1); + else + refill_ammo(id); + + hosties[id][1] = -1; + + if(get_pcvar_num(gg_teamplay)) + { + new CsTeams:team = cs_get_user_team(id), i; + for(i=1;i<=maxPlayers;i++) + { + // one per team + if(is_user_connected(i) && cs_get_user_team(i) == team) + hosties[i][1] = -1; + } + } + } +} + +// hostage is killed +public logevent_hostage_killed() +{ + new penalty = get_pcvar_num(gg_host_kill_penalty); + + if(!ggActive || !penalty) + return; + + new id = get_loguser_index(); + if(!is_user_connected(id)) return; + + new teamplay = get_pcvar_num(gg_teamplay), name[32]; + + if(teamplay) get_user_team(id,name,9); + else get_user_name(id,name,31); + + if(score[id] - penalty < 0) + gungame_print(0,id,1,"%L",LANG_PLAYER_C,(teamplay) ? "HK_LEVEL_DOWN_TEAM" : "HK_LEVEL_DOWN",name,(level[id] > 1) ? level[id]-1 : level[id]); + else + gungame_print(0,id,1,"%L",LANG_PLAYER_C,(teamplay) ? "HK_SCORE_DOWN_TEAM" : "HK_SCORE_DOWN",name,penalty); + + change_score(id,-penalty); +} + +// someone joins a team +public logevent_team_join() +{ + if(!ggActive) return; + + new id = get_loguser_index(); + if(!is_user_connected(id)) return; + + new oldTeam = get_user_team(id), newTeam = _:cs_get_user_team(id); + player_teamchange(id,oldTeam,newTeam); + + // teamplay, team switch allowed + if(get_pcvar_num(gg_teamplay)) + { + remove_task(TASK_DELAYED_SUICIDE+id); + + // I was the one who planted the bomb + if(c4planter == id) + { + // clear in case we don't find anyone + c4planter = 0; + + new player; + for(player=1;player<=maxPlayers;player++) + { + if(player != id && is_user_connected(player) && cs_get_user_team(player) == CS_TEAM_T) + { + // assign it to someone else so terrorists get points + c4planter = player; + break; + } + } + } + + return; + } + + // no (valid) previous team or didn't switch teams, ignore (suicide) + if(oldTeam < 1 || oldTeam > 2 || newTeam < 1 || newTeam > 2 || oldTeam == newTeam) + return; + + // check to see if the team change was beneficial + if(get_pcvar_num(gg_allow_changeteam) == 2) + { + new teamCount[2], i; + for(i=1;i<=maxPlayers;i++) + { + if(!is_user_connected(i)) + continue; + + switch(cs_get_user_team(i)) + { + case CS_TEAM_T: teamCount[0]++; + case CS_TEAM_CT: teamCount[1]++; + } + } + + if(teamCount[newTeam-1] <= teamCount[oldTeam-1]) + remove_task(TASK_DELAYED_SUICIDE+id); + } + else remove_task(TASK_DELAYED_SUICIDE+id); +} + +//********************************************************************** +// HAM HOOKS +//********************************************************************** + +// a player respawned +public ham_player_spawn(id) +{ + if(ggActive && is_user_alive(id) && cs_get_user_team(id)) // do team check here for bots + spawned(id); + + return HAM_IGNORED; +} + +// what do you think happened here? +public ham_player_killed_pre(victim,killer,gib) +{ + if(!ggActive || won || !is_user_connected(victim)) return HAM_IGNORED; + + // stops defusal kits from dropping in deathmatch mode + if(bombMap && get_pcvar_num(gg_dm)) cs_set_user_defuse(victim,0); + + // remember victim's silenced status + if(equal(lvlWeapon[victim],"usp") || equal(lvlWeapon[victim],"m4a1")) + { + new wEnt = get_weapon_ent(victim,_,lvlWeapon[victim]); + if(pev_valid(wEnt)) silenced[victim] = cs_get_weapon_silen(wEnt); + } + + // or, remember burst status + else if(equal(lvlWeapon[victim],"glock18") || equal(lvlWeapon[victim],"famas")) + { + new wEnt = get_weapon_ent(victim,_,lvlWeapon[victim]); + if(pev_valid(wEnt)) silenced[victim] = cs_get_weapon_burst(wEnt); + } + + // some sort of death that we don't want to count + if(killer == victim || !is_user_connected(killer) || cs_get_user_team(killer) == cs_get_user_team(victim)) + return HAM_IGNORED; + + // award for killing hostage carrier + new host_kill_reward = get_pcvar_num(gg_host_kill_reward); + + // note that this doesn't work with CZ hostages + if(hostageMap && !czero && host_kill_reward && !equal(lvlWeapon[killer],HEGRENADE) && !equal(lvlWeapon[killer],KNIFE)) + { + // check for hostages following this player + new hostage = maxPlayers; + while((hostage = fm_find_ent_by_class(hostage,"hostage_entity"))) + { + if(cs_get_hostage_foll(hostage) == victim && pev(hostage,pev_deadflag) == DEAD_NO) + break; + } + + // award bonus score if victim had hostages + if(hostage) + { + if(!equal(lvlWeapon[killer],HEGRENADE) && !equal(lvlWeapon[killer],KNIFE) && level[killer] < weaponNum) + { + // didn't level off of it + if(!change_score(killer,host_kill_reward) || score[killer]) + show_required_kills(killer); + } + } + } + + return HAM_IGNORED; +} + +// it's just that easy (multiplay_gamerules.cpp, ln 709) +public ham_player_killed_post(victim,killer,gib) +{ + if(!ggActive || won) return HAM_IGNORED; + + // log in bounds + if(killer > 0 && killer < 33 && victim > 0 && victim < 33) + lastKilled[killer] = victim; + + if(!is_user_connected(victim)) return HAM_IGNORED; + + // moved the below from killed_pre to killed_post because sometimes user is still alive in pre. + // don't know why this wasn't here before, but just in case I need to change it back... (thanks addam) + + // allow us to join in on deathmatch + if(!get_pcvar_num(gg_dm)) + { + remove_task(TASK_CHECK_DEATHMATCH+victim); + set_task(10.0,"check_deathmatch",TASK_CHECK_DEATHMATCH+victim); + } + + // respawn us + else + { + remove_task(TASK_RESPAWN+victim); + remove_task(TASK_REMOVE_PROTECTION+victim); + begin_respawn(victim); + fm_set_user_rendering(victim); // clear spawn protection + } + + remove_task(TASK_VERIFY_WEAPON+victim); + + star[victim] = 0; + remove_task(TASK_END_STAR+victim); + + static wpnName[24]; + get_killer_weapon(killer,pev(victim,pev_dmg_inflictor),wpnName,23); + + // grenade death + if(equal(wpnName,"grenade")) + { + new inflictor = pev(victim,pev_dmg_inflictor); + + if(pev_valid(inflictor)) + { + new Float:dmgtime; + pev(inflictor,pev_dmgtime,dmgtime); + + // a C4 kill will be reported as hegrenade. however, C4 has no + // pev_dmgtime, while a real hegrenade does. so distinguish between hegrenade + // and C4, and ignore C4 kills. also note that we can't compare models, + // because at this stage both an hegrenade and C4 have no model. + if(!dmgtime) + { + afkCheck[victim] = 0; + return HAM_IGNORED; + } + } + + // fix name + formatex(wpnName,23,HEGRENADE); + } + + // killed self with world + if(killer == victim && equal(wpnName,"world") && is_user_connected(killer)) + { + // this might be a valid team switch, wait it out + if(!roundEnded && get_pcvar_num(gg_allow_changeteam)) + { + set_task(0.1,"delayed_suicide",TASK_DELAYED_SUICIDE+victim); + afkCheck[victim] = 0; + + return HAM_IGNORED; // in the meantime, don't penalize the suicide + } + + player_suicided(killer); + afkCheck[victim] = 0; + + return HAM_IGNORED; + } + + // afk checker + if(afkCheck[victim] && afkCheck[victim] < 3) // 0 = no afk check, 3+ = they did something with a weapon (it is set to 1, and it goes to 2 when they get their new weapon) + { + new Float:origin[3], Float:angles[3], afk; + pev(victim,pev_origin,origin); + pev(victim,pev_v_angle,angles); + + if(get_pcvar_num(gg_afk_protection) == 2) + { + // this mode requires that your origin and angles be exactly as they were when you spawned, + // but it ignores the z-component because often players spawn a few units above ground + afk = (origin[0] == spawnOrigin[victim][0]) && (origin[1] == spawnOrigin[victim][1]) && (angles[0] == spawnAngles[victim][0]) && (angles[1] == spawnAngles[victim][1]) && (angles[2] == spawnAngles[victim][2]); + } + else + { + // this mode allows a slight XY shift due to pushback from getting shot by certain weapons, + // and also ignores the Y-component of the angle, because it sometimes inexplicably doesn't match up + origin[2] = spawnOrigin[victim][2]; // ignore Z-component, they fall + afk = (vector_distance(origin,spawnOrigin[victim]) < 28.0) && (angles[0] == spawnAngles[victim][0]) && (angles[2] == spawnAngles[victim][2]); + } + + if(afk) + { + new name[32]; + get_user_name(victim,name,31); + + gungame_print(killer,victim,1,"%L",killer,"AFK_KILL",name); + afkCheck[victim] = 0; + + return HAM_IGNORED; + } + } + + afkCheck[victim] = 0; + + // other player had spawn protection + if(spawnProtected[victim]) + { + new name[32]; + get_user_name(victim,name,31); + gungame_print(killer,victim,1,"%L",killer,"SPAWNPROTECTED_KILL",name,floatround(get_pcvar_float(gg_dm_sp_time))); + + spawnProtected[victim] = 0; + return HAM_IGNORED; + } + + // killed self with worldspawn (fall damage usually) + if(equal(wpnName,"worldspawn")) + { + if(get_pcvar_num(gg_worldspawn_suicide)) player_suicided(victim); + return HAM_IGNORED; + } + + // killed self not with worldspawn + if(!killer || killer == victim) + { + player_suicided(victim); + return HAM_IGNORED; + } + + // a non-player entity killed this man! + if(!is_user_connected(killer)) + { + // not linked so return is hit either way + if(pev_valid(killer)) + { + static classname[14]; + pev(killer,pev_classname,classname,13); + + // killed by a trigger_hurt, count as suicide + if(equal(classname,"trigger_hurt")) + player_suicided(victim); + } + + return HAM_IGNORED; + } + + new teamplay = get_pcvar_num(gg_teamplay), penalty = get_pcvar_num(gg_tk_penalty); + + // team kill + if(is_user_connected(victim) && cs_get_user_team(killer) == cs_get_user_team(victim) && penalty >= 0) + { + if(penalty > 0) + { + new name[32]; + if(teamplay) get_user_team(killer,name,9); + else get_user_name(killer,name,31); + + if(warmup <= 0 || !warmupWeapon[0]) + { + if(score[killer] - penalty < 0) + gungame_print(0,killer,1,"%L",LANG_PLAYER_C,(teamplay) ? "TK_LEVEL_DOWN_TEAM" : "TK_LEVEL_DOWN",name,(level[killer] > 1) ? level[killer]-1 : level[killer]); + else + gungame_print(0,killer,1,"%L",LANG_PLAYER_C,(teamplay) ? "TK_SCORE_DOWN_TEAM" : "TK_SCORE_DOWN",name,penalty); + } + + change_score(killer,-penalty); + } + + return HAM_IGNORED; + } + + new canLevel = 1, scored; + + // already reached max levels this round + new max_lvl = get_pcvar_num(gg_max_lvl); + if(!teamplay && !get_pcvar_num(gg_turbo) && max_lvl > 0 && levelsThisRound[killer] >= max_lvl) canLevel = 0; + + new nade = equal(lvlWeapon[killer],HEGRENADE), knife_pro = get_pcvar_num(gg_knife_pro), + victimIsBot = is_user_bot(victim), knifeLevel = equal(lvlWeapon[killer],KNIFE), bots_knifeable = get_pcvar_num(gg_bots_knifeable); + + // knife_pro: + // 0 - nothing + // 1 - killer +1 level, victim -1 level + // 2 - killer +1 level, victim stays + // 3 - killer +1 point, victim -1 level + + // was it a melee kill, and does it matter? + if( !(victimIsBot && !bots_knifeable) && !knifeLevel && knife_pro && equal(wpnName,KNIFE)) + { + static killerName[32], victimName[32], authid[24], teamName[10]; + get_user_name(killer,killerName,31); + get_user_name(victim,victimName,31); + get_user_authid(killer,authid,23); + get_user_team(killer,teamName,9); + + log_message("^"%s<%i><%s><%s>^" triggered ^"Stole_Level^"",killerName,get_user_userid(killer),authid,teamName); + + new tpGainPoints, tpLosePoints, tpOverride; + if(teamplay) + { + tpGainPoints = (knife_pro == 3) ? 1 : get_level_goal(level[killer],0); + tpLosePoints = (knife_pro == 2) ? 0 : get_level_goal(level[victim],0); + + if(warmup <= 0 || !warmupWeapon[0]) gungame_print(0,killer,1,"%L",LANG_PLAYER_C,"STOLE_LEVEL_TEAM",killerName,tpLosePoints,victimName,tpGainPoints); + + // allow points awarded on nade or final level if it won't level us + tpOverride = (score[killer] + tpGainPoints < get_level_goal(level[killer],killer)); + } + else // solo play + { + if(warmup <= 0 || !warmupWeapon[0]) gungame_print(0,killer,1,"%L",LANG_PLAYER_C,"STOLE_LEVEL",killerName,victimName); // not a knife warmup + if(nade && knife_pro == 3 && score[killer] + 1 < get_level_goal(level[killer],killer)) tpOverride = 1; // if I'm just getting 1 point and it won't level me, it's okay for the nade level + } + + if(tpOverride || (canLevel && !nade)) + { + if(tpOverride || level[killer] < weaponNum) + { + if(teamplay) + { + if(!change_score(killer,tpGainPoints,_,0)) show_required_kills(killer); // don't play sounds + } + else + { + if(knife_pro == 3) + { + if(!change_score(killer,1,_,0)) show_required_kills(killer); // don't play sounds + } + else + { + change_level(killer,1,_,_,_,0); // don't play sounds + } + } + } + } + + play_sound_by_cvar(killer,gg_sound_levelsteal); // use this one instead! + + // knife pro 2 = victim doesn't lose a level + if(knife_pro != 2 && (level[victim] > 1 || teamplay)) + { + if(teamplay) change_score(victim,-tpLosePoints); + else change_level(victim,-1); + } + } + + // otherwise, if he killed with his appropiate weapon, give him a point + else if( !(victimIsBot && !bots_knifeable && knifeLevel) && canLevel && equal(lvlWeapon[killer],wpnName)) + { + scored = 1; + + // didn't level off of it + if(!change_score(killer,1)) show_required_kills(killer); + } + + // refresh grenades + if(nade && get_pcvar_num(gg_extra_nades)) + { + remove_task(TASK_REFRESH_NADE+killer); + + // instant refresh, and refresh_nade makes sure we don't already have a nade + refresh_nade(TASK_REFRESH_NADE+killer); + } + + if((!scored || !get_pcvar_num(gg_turbo)) && get_pcvar_num(gg_refill_on_kill)) + refill_ammo(killer,1); + + return HAM_IGNORED; +} + +// a player is touching a weaponbox or armoury_entity, possibly disallow +public ham_weapon_touch(weapon,other) +{ + // gungame off and non-player or dead-player + if(!ggActive || !is_user_alive(other)) return HAM_IGNORED; + + new knife_elite = get_pcvar_num(gg_knife_elite); + + // pickup others enabled, and no conflict with knife elite, stop here + if(get_pcvar_num(gg_pickup_others) && (!knife_elite || !levelsThisRound[other])) return HAM_IGNORED; + + static model[24]; + pev(weapon,pev_model,model,23); + + // strips off models/w_ and .mdl + copyc(model,23,model[contain_char(model,'_')+1],'.'); + + // weaponbox model is no good, but C4 is okay + // checks for weaponbox, backpack + if(model[8] == 'x' || model[0] == 'b') return HAM_IGNORED; + + // now that we allowed C4, check for knife elite again + if(knife_elite && levelsThisRound[other]) return HAM_SUPERCEDE; + + // weapon is weapon_mp5navy, but model is w_mp5.mdl + // checks for mp5 + if(model[1] == 'p' && model[2] == '5') model = "mp5navy"; + + // check hegrenade exceptions + // checks for hegrenade + if(lvlWeapon[other][0] == 'h') + { + // checks for glock18, smokegrenade, flashbang + if((model[6] == '8' && get_pcvar_num(gg_nade_glock)) + || (model[0] == 's' && model[1] == 'm' && get_pcvar_num(gg_nade_smoke)) + || (model[0] == 'f' && model[1] == 'l' && get_pcvar_num(gg_nade_flash))) + return HAM_IGNORED; + } + + // this is our weapon, don't mess with it + if(equal(lvlWeapon[other],model)) return HAM_IGNORED; + + return HAM_SUPERCEDE; +} + +//********************************************************************** +// COMMAND HOOKS +//********************************************************************** + +// turning GunGame on or off +public cmd_gungame(id,level,cid) +{ + // no access, or GunGame ending anyway + if(!cmd_access(id,level,cid,2) || won) + return PLUGIN_HANDLED; + + // already working on toggling GunGame + if(task_exists(TASK_TOGGLE_GUNGAME + TOGGLE_FORCE) + || task_exists(TASK_TOGGLE_GUNGAME + TOGGLE_DISABLE) + || task_exists(TASK_TOGGLE_GUNGAME + TOGGLE_ENABLE)) + { + console_print(id,"[GunGame] GunGame is already being turned on or off"); + return PLUGIN_HANDLED; + } + + new arg[32], oldStatus = ggActive, newStatus; + read_argv(1,arg,31); + + if(equali(arg,"on") || str_to_num(arg)) + newStatus = 1; + + // no change + if((!oldStatus && !newStatus) || (oldStatus && newStatus)) + { + console_print(id,"[GunGame] GunGame is already %s!",(newStatus) ? "on" : "off"); + return PLUGIN_HANDLED; + } + + restart_round(5); + set_task(4.8,"toggle_gungame",TASK_TOGGLE_GUNGAME+newStatus); + + if(!newStatus) + { + set_pcvar_num(gg_enabled,0); + ggActive = 0; + } + + console_print(id,"[GunGame] Turned GunGame %s",(newStatus) ? "on" : "off"); + + return PLUGIN_HANDLED; +} + +// voting for GunGame +public cmd_gungame_vote(id,lvl,cid) +{ + if(!cmd_access(id,lvl,cid,1)) + return PLUGIN_HANDLED; + + if(autovotes[0] || autovotes[1] || autovotes[2] || task_exists(TASK_AUTOVOTE_RESULT)) + { + console_print(id,"[GunGame] Could not start vote: another vote is already in progress!"); + return PLUGIN_HANDLED; + } + + new arg[8]; + read_argv(1,arg,7); + + // override our autovote mode, but default to our autovote setting, then to 1 + autovote_mode = str_to_num(arg); + //if(autovote_mode < 1 || autovote_mode > 3) autovote_mode = get_pcvar_num(gg_autovote_mode); // won't work with autovote rotation, so forget it for now + if(autovote_mode < 1 || autovote_mode > 3) autovote_mode = 1; + + console_print(id,"[GunGame] Started a vote to play GunGame (mode %i)",autovote_mode); + autovote_start(); + + return PLUGIN_HANDLED; +} + +// setting players levels +public cmd_gungame_level(id,lvl,cid) +{ + if(!cmd_access(id,lvl,cid,3)) + return PLUGIN_HANDLED; + + new arg1[32], arg2[8], targets[32], name[32], tnum, i; + read_argv(1,arg1,31); + read_argv(2,arg2,7); + + if(equali(arg1,"@T")) arg1 = "@TERRORIST"; + + // get player list + if(equali(arg1,"*") || equali(arg1,"@ALL")) + { + get_players(targets,tnum); + name = "ALL PLAYERS"; + } + else if(arg1[0] == '@') + { + new players[32], team[10], pnum; + get_players(players,pnum); + + for(i=0;i 0.0) + { + server_cmd("gg_kills_per_lvl %f",killsperlvl); + len += formatex(result[len],127-len,", set kills per level to %f",killsperlvl); + } + if(arg3[0]) + { + server_cmd("gg_suicide_penalty %i",suicideloselvl); + len += formatex(result[len],127-len,", set suicide penalty to %i",suicideloselvl); + } + + console_print(id,"%s",result); + + return PLUGIN_HANDLED; +} + +// restarts GunGame +public cmd_gungame_restart(id,lvl,cid) +{ + if(!cmd_access(id,lvl,cid,1)) + return PLUGIN_HANDLED; + + new arg[8]; + read_argv(1,arg,7); + + new Float:time = floatstr(arg); + if(time < 0.2) time = 0.2; + + restart_round(floatround(time,floatround_ceil)); + console_print(id,"[GunGame] Restarting GunGame in %i seconds",floatround(time,floatround_ceil)); + + read_argv(2,arg,1); + if(str_to_num(arg)) set_task(time-0.1,"toggle_gungame",TASK_TOGGLE_GUNGAME+TOGGLE_ENABLE); + + return PLUGIN_HANDLED; +} + +// reload weapon order +public cmd_reloadweapons(id,lvl,cid) +{ + if(!cmd_access(id,lvl,cid,1)) + return PLUGIN_HANDLED; + + setup_weapon_order(); + console_print(id,"* Reloaded the weapon order"); + + return PLUGIN_HANDLED; +} + +// hook say +public cmd_say(id) +{ + if(!ggActive) return PLUGIN_CONTINUE; + + static message[10]; + read_argv(1,message,9); + + // doesn't begin with !, ignore + if(message[0] != '!') return PLUGIN_CONTINUE; + + if(equali(message,"!rules") || equali(message,"!help")) + { + new num = 1, max_lvl = get_pcvar_num(gg_max_lvl), turbo = get_pcvar_num(gg_turbo); + + console_print(id,"-----------------------------"); + console_print(id,"-----------------------------"); + console_print(id,"*** Avalanche's %L %s %L ***",id,"GUNGAME",GG_VERSION,id,"RULES"); + console_print(id,"%L",id,"RULES_CONSOLE_LINE1",num++); + console_print(id,"%L",id,"RULES_CONSOLE_LINE2",num++); + if(get_pcvar_num(gg_bomb_defuse_lvl)) console_print(id,"%L",id,"RULES_CONSOLE_LINE3",num++); + console_print(id,"%L",id,"RULES_CONSOLE_LINE4",num++); + if(get_pcvar_num(gg_ff_auto)) console_print(id,"%L",id,"RULES_CONSOLE_LINE5",num++); + if(turbo || !max_lvl) console_print(id,"%L",id,"RULES_CONSOLE_LINE6A",num++); + else if(max_lvl == 1) console_print(id,"%L",id,"RULES_CONSOLE_LINE6B",num++); + else if(max_lvl > 1) console_print(id,"%L",id,"RULES_CONSOLE_LINE6C",num++,max_lvl); + console_print(id,"%L",id,"RULES_CONSOLE_LINE7",num++); + if(get_pcvar_num(gg_knife_pro)) console_print(id,"%L",id,"RULES_CONSOLE_LINE8",num++); + if(turbo) console_print(id,"%L",id,"RULES_CONSOLE_LINE9",num++); + if(get_pcvar_num(gg_knife_elite)) console_print(id,"%L",id,"RULES_CONSOLE_LINE10",num++); + if(get_pcvar_num(gg_dm) || get_cvar_num("csdm_active")) console_print(id,"%L",id,"RULES_CONSOLE_LINE11",num++); + if(get_pcvar_num(gg_teamplay)) console_print(id,"%L",id,"RULES_CONSOLE_LINE12",num++); + console_print(id,"****************************************************************"); + console_print(id,"%L",id,"RULES_CONSOLE_LINE13"); + console_print(id,"%L",id,"RULES_CONSOLE_LINE14"); + console_print(id,"%L",id,"RULES_CONSOLE_LINE15"); + console_print(id,"%L",id,"RULES_CONSOLE_LINE16"); + console_print(id,"%L",id,"RULES_CONSOLE_LINE17"); + console_print(id,"-----------------------------"); + console_print(id,"-----------------------------"); + + new len = formatex(menuText,511,"%L^n",id,"RULES_MESSAGE_LINE1"); + len += formatex(menuText[len],511-len,"\d----------\w^n"); + len += formatex(menuText[len],511-len,"%L^n",id,"RULES_MESSAGE_LINE2"); + len += formatex(menuText[len],511-len,"\d----------\w^n"); + len += formatex(menuText[len],511-len,"%L^n",id,"RULES_MESSAGE_LINE3"); + len += formatex(menuText[len],511-len,"\d----------\w^n%L",id,"PRESS_KEY_TO_CONTINUE"); + + show_menu(id,1023,menuText); + + return PLUGIN_HANDLED; + } + else if(equali(message,"!weapons") || equali(message,"!guns")) + { + page[id] = 1; + //show_weapons_menu(id); + weapons_menu_handler(id,2); // jump to me + + return PLUGIN_HANDLED; + } + else if(equali(message,"!top",4) && !str_count(message,' ')) // !topANYTHING + { + if(!sqlInit || !get_pcvar_num(gg_stats_mode)) + { + client_print(id,print_chat,"%L",id,"NO_WIN_LOGGING"); + return PLUGIN_HANDLED; + } + + page[id] = 1; + + if(get_pcvar_num(gg_stats_split) && get_pcvar_num(gg_teamplay)) + page[id] *= -1; // use negative page numbers to denote teamplay stats + + show_top10_menu(id); + //top10_menu_handler(id,2); // jump to me + + return PLUGIN_HANDLED; + } + else if(equali(message,"!score") || equali(message,"!scores")) + { + page[id] = 1; + //show_scores_menu(id); + scores_menu_handler(id,2); // jump to me + + return PLUGIN_HANDLED; + } + else if(equali(message,"!level")) + { + show_level_menu(id); + + return PLUGIN_HANDLED; + } + else if(equali(message,"!restart") || equali(message,"!reset")) + { + if(level[id] <= 1) + { + client_print(id,print_chat,"%L",id,"STILL_LEVEL_ONE"); + return PLUGIN_HANDLED; + } + + new len = formatex(menuText,511,"%L^n^n",id,"RESET_QUERY"); + len += formatex(menuText[len],511-len,"1. %L^n",id,"YES"); + len += formatex(menuText[len],511-len,"0. %L",id,"CANCEL"); + show_menu(id,MENU_KEY_1|MENU_KEY_0,menuText,-1,"restart_menu"); + + return PLUGIN_HANDLED; + } + + return PLUGIN_CONTINUE; +} + +// joining a team +public cmd_joinclass(id) +{ + if(!ggActive) return PLUGIN_CONTINUE; + + // allow us to join in on deathmatch + if(!get_pcvar_num(gg_dm)) + { + remove_task(TASK_CHECK_DEATHMATCH+id); + set_task(10.0,"check_deathmatch",TASK_CHECK_DEATHMATCH+id); + return PLUGIN_CONTINUE; + } + + if(roundEnded || (bombStatus[3] == BOMB_PLANTED && !get_pcvar_num(gg_dm_spawn_afterplant))) + return PLUGIN_CONTINUE; + + set_task(5.0,"check_joinclass",TASK_CHECK_JOINCLASS+id); + return PLUGIN_CONTINUE; +} + +// wait a bit after joinclass to see if we should jump in +public check_joinclass(taskid) +{ + new id = taskid-TASK_CHECK_JOINCLASS; + + if(!is_user_connected(id)) return; + + // already respawning + if(task_exists(TASK_RESPAWN+id) || is_user_alive(id) || !on_valid_team(id)) + return; + + respawn(TASK_RESPAWN+id); +} + +//********************************************************************** +// RESPAWN FUNCTIONS +//********************************************************************** + +// get all of our spawns into their arrays +init_spawns() +{ + // grab CSDM file + new mapName[32], csdmFile[64], lineData[64]; + get_configsdir(cfgDir,31); + get_mapname(mapName,31); + formatex(csdmFile,63,"%s/csdm/%s.spawns.cfg",cfgDir,mapName); + + // collect CSDM spawns + if(file_exists(csdmFile)) + { + new csdmData[10][6]; + + new file = fopen(csdmFile,"rt"); + while(file && !feof(file)) + { + fgets(file,lineData,63); + + // invalid spawn + if(!lineData[0] || str_count(lineData,' ') < 2) + continue; + + // BREAK IT UP! + parse(lineData,csdmData[0],5,csdmData[1],5,csdmData[2],5,csdmData[3],5,csdmData[4],5,csdmData[5],5,csdmData[6],5,csdmData[7],5,csdmData[8],5,csdmData[9],5); + + // origin + spawns[spawnCount][0] = floatstr(csdmData[0]); + spawns[spawnCount][1] = floatstr(csdmData[1]); + spawns[spawnCount][2] = floatstr(csdmData[2]); + + // angles + spawns[spawnCount][3] = floatstr(csdmData[3]); + spawns[spawnCount][4] = floatstr(csdmData[4]); + spawns[spawnCount][5] = floatstr(csdmData[5]); + + // team, csdmData[6], unused + + // vangles + spawns[spawnCount][6] = floatstr(csdmData[7]); + spawns[spawnCount][7] = floatstr(csdmData[8]); + spawns[spawnCount][8] = floatstr(csdmData[9]); + + spawnCount++; + csdmSpawnCount++; + if(spawnCount >= MAX_SPAWNS) break; + } + if(file) fclose(file); + } + + // collect regular, boring spawns + else + { + collect_spawns("info_player_deathmatch"); + collect_spawns("info_player_start"); + } +} + +// collect boring spawns into our spawn data +collect_spawns(classname[]) +{ + new ent = maxPlayers, Float:spawnData[3]; + while((ent = fm_find_ent_by_class(ent,classname))) + { + // origin + pev(ent,pev_origin,spawnData); + spawns[spawnCount][0] = spawnData[0]; + spawns[spawnCount][1] = spawnData[1]; + spawns[spawnCount][2] = spawnData[2]; + + // angles + pev(ent,pev_angles,spawnData); + spawns[spawnCount][3] = spawnData[0]; + spawns[spawnCount][4] = spawnData[1]; + spawns[spawnCount][5] = spawnData[2]; + + // vangles + spawns[spawnCount][6] = spawnData[0]; + spawns[spawnCount][7] = spawnData[1]; + spawns[spawnCount][8] = spawnData[2]; + + spawnCount++; + if(spawnCount >= MAX_SPAWNS) break; + } +} + +// bring someone back to life +public begin_respawn(id) +{ + if(!ggActive || !get_pcvar_num(gg_dm) || !is_user_connected(id)) + return; + + // now on spectator + if(!on_valid_team(id)) return; + + // alive, and not in the broken sort of way + if(is_user_alive(id) && !pev(id,pev_iuser1)) + return; + + // round is over, or bomb is planted + if(roundEnded || (bombStatus[3] == BOMB_PLANTED && !get_pcvar_num(gg_dm_spawn_afterplant))) + return; + + new Float:delay = get_pcvar_float(gg_dm_spawn_delay); + if(delay < 0.1) delay = 0.1; + + new dm_countdown = get_pcvar_num(gg_dm_countdown); + + if((dm_countdown & 1) || (dm_countdown & 2)) + { + respawn_timeleft[id] = floatround(delay); + respawn_countdown(id); + } + + remove_task(TASK_RESPAWN+id); + set_task(delay,"respawn",TASK_RESPAWN+id); +} + +// show the respawn countdown to a player +public respawn_countdown(id) +{ + if(!is_user_connected(id) || is_user_alive(id)) + { + respawn_timeleft[id] = 0; + return; + } + + new dm_countdown = get_pcvar_num(gg_dm_countdown); + + if(dm_countdown & 1) + client_print(id,print_center,"%L",id,"RESPAWN_COUNTDOWN",respawn_timeleft[id]); + + if(dm_countdown & 2) + { + set_hudmessage(255,255,255,-1.0,0.75,0,6.0,1.0,0.1,0.5); + ShowSyncHudMsg(id,hudSyncCountdown,"%L",id,"RESPAWN_COUNTDOWN",respawn_timeleft[id]); + } + + if(--respawn_timeleft[id] >= 1) set_task(1.0,"respawn_countdown",id); +} + +// REALLY bring someone back to life +public respawn(taskid) +{ + new id = taskid-TASK_RESPAWN; + if(!is_user_connected(id) || !ggActive) return; + + // round is over, or bomb is planted + if(roundEnded || (bombStatus[3] == BOMB_PLANTED && !get_pcvar_num(gg_dm_spawn_afterplant))) + return; + + // now on spectator + if(!on_valid_team(id)) return; + + // clear countdown + new dm_countdown = get_pcvar_num(gg_dm_countdown); + if(dm_countdown & 1) client_print(id,print_center," "); + if(dm_countdown & 2) ClearSyncHud(id,hudSyncCountdown); + + // alive, and not in the broken sort of way + if(is_user_alive(id)) return; + + static model[22]; + + // remove his dropped weapons from before + new ent = maxPlayers; + while((ent = fm_find_ent_by_class(ent,"weaponbox"))) + { + pev(ent,pev_model,model,21); + + // don't remove the bomb!! (thanks ToT | V!PER) + if(equal(model,"models/w_c4.mdl",15) || equal(model,"models/w_backpack.mdl")) + continue; + + // this is mine + if(pev(ent,pev_owner) == id) dllfunc(DLLFunc_Think,ent); + } + + new spawn_random = get_pcvar_num(gg_dm_spawn_random); + if(spawn_random) spawnSounds[id] = 0; + + ExecuteHamB(Ham_CS_RoundRespawn,id); // note the B + + if(spawn_random) + { + do_random_spawn(id,spawn_random); + spawnSounds[id] = 1; + + // to be fair, play a spawn noise at new location + engfunc(EngFunc_EmitSound,id,CHAN_ITEM,"items/gunpickup2.wav",VOL_NORM,ATTN_NORM,0,PITCH_NORM); + } + + new Float:time = get_pcvar_float(gg_dm_sp_time); + new mode = get_pcvar_num(gg_dm_sp_mode); + + // spawn protection + if(time > 0.0 && mode) + { + spawnProtected[id] = 1; + if(mode == 2) + { + fm_set_user_godmode(id,1); + fm_set_rendering(id,kRenderFxGlowShell,200,200,100,kRenderNormal,8); // goldenish + } + else fm_set_rendering(id,kRenderFxGlowShell,100,100,100,kRenderNormal,8); // gray/white + + set_task(time,"remove_spawn_protection",TASK_REMOVE_PROTECTION+id); + } +} + +// place a user at a random spawn +do_random_spawn(id,spawn_random) +{ + // not even alive, don't bother + if(!is_user_alive(id)) return; + + // no spawns??? + if(spawnCount <= 0) return; + + // no CSDM spawns, mode 2 + if(spawn_random == 2 && !csdmSpawnCount) + return; + + static Float:vecHolder[3]; + new sp_index = random_num(0,spawnCount-1); + + // get origin for comparisons + vecHolder[0] = spawns[sp_index][0]; + vecHolder[1] = spawns[sp_index][1]; + vecHolder[2] = spawns[sp_index][2]; + + // this one is taken + if(!is_hull_vacant(vecHolder,HULL_HUMAN) && spawnCount > 1) + { + // attempt to pick another random one up to three times + new i; + for(i=0;i<3;i++) + { + sp_index = random_num(0,spawnCount-1); + + vecHolder[0] = spawns[sp_index][0]; + vecHolder[1] = spawns[sp_index][1]; + vecHolder[2] = spawns[sp_index][2]; + + if(is_hull_vacant(vecHolder,HULL_HUMAN)) break; + } + + // we made it through the entire loop, no free spaces + if(i == 3) + { + // just find the first available + for(i=sp_index+1;i!=sp_index;i++) + { + // start over when we reach the end + if(i >= spawnCount) i = 0; + + vecHolder[0] = spawns[i][0]; + vecHolder[1] = spawns[i][1]; + vecHolder[2] = spawns[i][2]; + + // free space! office space! + if(is_hull_vacant(vecHolder,HULL_HUMAN)) + { + sp_index = i; + break; + } + } + } + } + + // origin + vecHolder[0] = spawns[sp_index][0]; + vecHolder[1] = spawns[sp_index][1]; + vecHolder[2] = spawns[sp_index][2]; + engfunc(EngFunc_SetOrigin,id,vecHolder); + + // angles + vecHolder[0] = spawns[sp_index][3]; + vecHolder[1] = spawns[sp_index][4]; + vecHolder[2] = spawns[sp_index][5]; + set_pev(id,pev_angles,vecHolder); + + // vangles + vecHolder[0] = spawns[sp_index][6]; + vecHolder[1] = spawns[sp_index][7]; + vecHolder[2] = spawns[sp_index][8]; + set_pev(id,pev_v_angle,vecHolder); + + set_pev(id,pev_fixangle,1); +} + +// get rid of the spawn protection effects +public remove_spawn_protection(taskid) +{ + new id = taskid-TASK_REMOVE_PROTECTION; + spawnProtected[id] = 0; + + if(!is_user_connected(id)) return; + + if(get_pcvar_num(gg_dm_sp_mode) == 2) fm_set_user_godmode(id,0); + fm_set_rendering(id); // reset back to normal +} + +// keep checking if a player needs to rejoin +public check_deathmatch(taskid) +{ + new id = taskid-TASK_CHECK_DEATHMATCH; + + // left the game, or gungame is now disabled + if(!is_user_connected(id) || !ggActive) return; + + // now on spectator, or spawned already + if(!on_valid_team(id) || is_user_alive(id)) return; + + // DM still not enabled, keep waiting (or: we are still on choose-a-class screen) + if(!get_pcvar_num(gg_dm) || !pev(id,pev_iuser1)) + { + set_task(10.0,"check_deathmatch",taskid); + return; + } + + // DM is enabled, respawn + respawn(TASK_RESPAWN+id); +} + +// what do you think?? +public randomly_place_everyone() +{ + // count number of legitimate players + new player, validNum; + for(player=1;player<=maxPlayers;player++) + { + if(is_user_connected(player) && on_valid_team(player)) + validNum++; + } + + // not enough CSDM spawns for everyone + if(validNum > csdmSpawnCount) + return; + + // now randomly place them + for(player=1;player<=maxPlayers;player++) + { + // not spectator or unassigned + if(is_user_connected(player) && on_valid_team(player)) + do_random_spawn(player,2); + } +} + +//********************************************************************** +// MENU FUNCTIONS +//********************************************************************** + +// handle the welcome menu +public welcome_menu_handler(id,key) +{ + // just save welcomed status and let menu close + welcomed[id] = 1; + return PLUGIN_HANDLED; +} + +// this menu does nothing but display stuff +public level_menu_handler(id,key) +{ + return PLUGIN_HANDLED; +} + +// handle the reset level menu +public restart_menu_handler(id,key) +{ + if(get_pcvar_num(gg_teamplay)) + { + client_print(id,print_chat,"%L",id,"RESET_NOT_ALLOWED"); + return PLUGIN_HANDLED; + } + + if(level[id] <= 1) + { + client_print(id,print_chat,"%L",id,"STILL_LEVEL_ONE"); + return PLUGIN_HANDLED; + } + + // 1. Yes + if(key == 0) + { + new name[32]; + get_user_name(id,name,31); + + change_level(id,-(level[id]-1),_,_,1); // back to level 1 -- always score + gungame_print(0,id,1,"%L",LANG_PLAYER_C,"PLAYER_RESET",name); + } + + return PLUGIN_HANDLED; +} + +// show the level display +show_level_menu(id) +{ +#if !defined SQL + recheck_stats_sorting(); +#endif + + new goal, tied, leaderNum, leaderList[128], name[32]; + + new leaderLevel, numLeaders, leader, runnerUp, len; + new teamplay = get_pcvar_num(gg_teamplay), team; + + if(teamplay) leader = teamplay_get_lead_team(leaderLevel,numLeaders,runnerUp); + else leader = get_leader(leaderLevel,numLeaders,runnerUp); + + if(numLeaders > 1) tied = 1; + + if(teamplay) + { + team = _:cs_get_user_team(id); + + if(numLeaders == 1) + { + new team1[10]; + get_team_name(CsTeams:leader,team1,9); + len += formatex(leaderList[len],127-len,"%s %L",team1,id,"TEAM"); + } + else + { + new team1[10], team2[10]; + get_team_name(CS_TEAM_T,team1,9); + get_team_name(CS_TEAM_CT,team2,9); + len += formatex(leaderList[len],127-len,"%s %L, %s %L",team1,id,"TEAM",team2,id,"TEAM"); + } + } + else + { + new players[32], num, i, player; + get_players(players,num); + + // check for multiple leaders + for(i=0;i 0) // show rank + { + new statsSuffix[3]; + get_number_suffix(statsPosition[id][0],statsSuffix,2); + + if(stats_mode == 1) len += formatex(menuText[len],511-len,"%L (%i%s)^n",id,keyLINE3A,playerStats[id][sdWins][0],statsPosition[id][0],statsSuffix); + else len += formatex(menuText[len],511-len,"%L (%i%s)^n",id,keyLINE3B,playerStats[id][sdPoints][0],playerStats[id][sdWins][0],statsPosition[id][0],statsSuffix); + } + else // don't show rank + { + if(stats_mode == 1) len += formatex(menuText[len],511-len,"%L^n",id,keyLINE3A,playerStats[id][sdWins][0]); + else len += formatex(menuText[len],511-len,"%L^n",id,keyLINE3B,playerStats[id][sdPoints][0],playerStats[id][sdWins][0]); + } + + len += formatex(menuText[len],511-len,"%L^n",id,keyLINE4,playerStats[id][sdStreak][0]); + + // now show teamplay if we can/should + if(stats_split) + { + if(statsPosition[id][1] > 0) // show rank + { + new statsSuffix[3]; + get_number_suffix(statsPosition[id][1],statsSuffix,2); + + if(stats_mode == 1) len += formatex(menuText[len],511-len,"%L (%i%s)^n",id,"LEVEL_MESSAGE_LINE3A_TP",playerStats[id][sdWins][1],statsPosition[id][1],statsSuffix); + else len += formatex(menuText[len],511-len,"%L (%i%s)^n",id,"LEVEL_MESSAGE_LINE3B_TP",playerStats[id][sdPoints][1],playerStats[id][sdWins][1],statsPosition[id][1],statsSuffix); + } + else // don't show rank + { + if(stats_mode == 1) len += formatex(menuText[len],511-len,"%L^n",id,"LEVEL_MESSAGE_LINE3A_TP",playerStats[id][sdWins][1]); + else len += formatex(menuText[len],511-len,"%L^n",id,"LEVEL_MESSAGE_LINE3B_TP",playerStats[id][sdPoints][1],playerStats[id][sdWins][1]); + } + + len += formatex(menuText[len],511-len,"%L^n",id,"LEVEL_MESSAGE_LINE4_TP",playerStats[id][sdStreak][1]); + } + + len += formatex(menuText[len],511-len,"\d----------\w^n"); + } + + if(leaderNum > 1) len += formatex(menuText[len],511-len,"%L^n",id,"LEVEL_MESSAGE_LINE5A",leaderList); + else len += formatex(menuText[len],511-len,"%L^n",id,"LEVEL_MESSAGE_LINE5B",leaderList); + + if(teamplay) + { + if(teamLevel[leader]) copy(displayWeapon,15,teamLvlWeapon[leader]); + else formatex(displayWeapon,15,"%L",id,"NONE"); + } + else + { + if(level[leader]) copy(displayWeapon,15,lvlWeapon[leader]); + else formatex(displayWeapon,15,"%L",id,"NONE"); + } + + len += formatex(menuText[len],511-len,"%L^n",id,"LEVEL_MESSAGE_LINE6",leaderLevel,displayWeapon); + len += formatex(menuText[len],511-len,"\d----------\w^n"); + + len += formatex(menuText[len],511-len,"%L",id,"PRESS_KEY_TO_CONTINUE"); + + show_menu(id,1023,menuText,-1,"level_menu"); +} + +// show the top10 list menu +show_top10_menu(id) +{ + new pppString[74], len = get_pcvar_string(gg_top10_ppp,pppString,63); + + // URL specified + if(pppString[0] && !isdigit(pppString[0])) + { + new header[32], lang[3]; + formatex(header,31,"%L %L",id,"GUNGAME",id,"STATS"); + get_user_info(id,"lang",lang,2); + + formatex(pppString[len],73-len,"?i=%i&l=%s",id,lang); + show_motd(id,pppString,header); + + return; + } + +#if !defined SQL + recheck_stats_sorting(); +#endif + + new absPage = abs(page[id]), stats_split = get_pcvar_num(gg_stats_split), si = (page[id] < 0); + + new playersPerPage = str_to_num(pppString), stats_mode = get_pcvar_num(gg_stats_mode); + //if(stats_split == 2) playersPerPage = 7; + +#if defined SQL + new winsColumn[8], pointsColumn[10], streakColumn[10], totalPlayers, numRows; + + if(si == 0) + { + winsColumn = "wins"; + pointsColumn = "points"; + streakColumn = "streak"; + } + else + { + winsColumn = "wins_tp"; + pointsColumn = "points_tp"; + streakColumn = "streak_tp"; + } + + if(stats_mode == 2) query = SQL_PrepareQuery(db,"SELECT NULL FROM `%s` WHERE serverip='%s' AND (%s > 0 OR %s > 0);",sqlTable,serverip,winsColumn,pointsColumn); + else query = SQL_PrepareQuery(db,"SELECT NULL FROM `%s` WHERE serverip='%s' AND %s > 0;",sqlTable,serverip,winsColumn); + + if(SQL_ExecuteAndLog(query)) + { + numRows = SQL_NumRows(query); + totalPlayers = playersPerPage * floatround(float(numRows+1) / float(playersPerPage),floatround_ceil); + } + + SQL_FreeHandle(query); +#else + new totalPlayers = playersPerPage * floatround(float(statsSize[si]+1) / float(playersPerPage),floatround_ceil); // +1 for streak display +#endif + + new pageTotal = floatround(float(totalPlayers) / float(playersPerPage),floatround_ceil); + + if(pageTotal < 1) pageTotal = 1; + if(totalPlayers < playersPerPage) totalPlayers = playersPerPage; + + if(absPage > pageTotal) + { + new negative = (page[id] < 0); + page[id] = absPage = pageTotal; + if(negative) page[id] *= -1; + } + + if(stats_split) len = formatex(menuText,511,"\y%L %L (%i/%i)^n",id,"GUNGAME",id,(page[id] < 0) ? "STATS_TEAMPLAY" : "STATS_REGULAR",absPage,pageTotal); + else len = formatex(menuText,511,"\y%L %L (%i/%i)^n",id,"GUNGAME",id,"STATS",absPage,pageTotal); + + new start = (playersPerPage * (absPage-1)), i; + + // show the top streak for the first page + new topStreak, champName[32], champAuthid[32]; + if(absPage == 1) + { +#if defined SQL + query = SQL_PrepareQuery(db,"SELECT authid,streak,name FROM `%s` WHERE type='%iR' AND serverip='%s' LIMIT 1;",sqlStreakTable,si,serverip); + if(SQL_ExecuteAndLog(query) && SQL_NumResults(query)) + { + SQL_ReadResult(query,0,champAuthid,31); + topStreak = SQL_ReadResult(query,1); + SQL_ReadResult(query,2,champName,31); + } + SQL_FreeHandle(query); +#else + new sfStreak[4], stats_streak_file[64]; + get_pcvar_string(gg_stats_streak_file,stats_streak_file,63); + + if(file_exists(stats_streak_file)) + { + new file = fopen(stats_streak_file,"rt"); + while(file && !feof(file)) + { + fgets(file,sfLineData,82); + + // blank, not for our stats mode, or not the record + if(!sfLineData[0] || str_to_num(sfLineData[0]) != si || sfLineData[1] != 'R') continue; + + strtok(sfLineData[3],champAuthid,31,sfLineData,82,'^t'); // cut off prefix and authid from the left + strtok(sfLineData,sfStreak,3,champName,31,'^t'); // get our streak, and the name as well + + new pos = contain_char(champName,'^t'); + if(pos != -1) champName[pos] = 0; // cut off the name at the tab + + topStreak = str_to_num(sfStreak); + } + if(file) fclose(file); + } +#endif + + if(!champName[0]) formatex(champName,31,"%L",id,"NO_ONE"); + } + + //len += formatex(menuText[len],511-len,"\d-----------\w^n"); + + new authid[32]; + get_gg_authid(id,authid,31); + +#if defined SQL + if(numRows) + { + // do this to account for the streak display in our LIMIT clause + if(absPage == 1) playersPerPage--; + else start--; + + if(stats_mode == 2) + { + query = SQL_PrepareQuery(db,"SELECT authid,name,%s,%s,%s,(SELECT COUNT(*)+1 FROM `%s` y WHERE y.%s > x.%s AND serverip='%s' AND (y.%s > 0 OR y.%s > 0) LIMIT 1) AS ranking FROM `%s` x WHERE x.serverip='%s' AND (x.%s > 0 OR x.%s > 0) ORDER BY %s DESC, %s DESC LIMIT %i, %i;", + winsColumn,pointsColumn,streakColumn,sqlTable,pointsColumn,pointsColumn,serverip,winsColumn,pointsColumn,sqlTable,serverip,winsColumn,pointsColumn,pointsColumn,winsColumn,start,playersPerPage); + } + else + { + query = SQL_PrepareQuery(db,"SELECT authid,name,%s,%s,%s,(SELECT COUNT(*)+1 FROM `%s` y WHERE y.%s > x.%s AND serverip='%s' AND y.%s > 0 LIMIT 1) AS ranking FROM `%s` x WHERE x.serverip='%s' AND x.%s > 0 ORDER BY %s DESC LIMIT %i, %i;", + winsColumn,pointsColumn,streakColumn,sqlTable,winsColumn,winsColumn,serverip,winsColumn,sqlTable,serverip,winsColumn,winsColumn,start,playersPerPage); + } + + // reverse changes made above for LIMIT + if(absPage == 1) playersPerPage++; + else start++; + } + + if(!numRows || SQL_ExecuteAndLog(query)) + { + new ranking, moreResults, lastRanking = start; + if(numRows) moreResults = SQL_MoreResults(query); + + for(i=start;i= totalPlayers) break; + + // use the first slot to display the record streak + if(i == 0) + { + len += formatex(menuText[len],511-len,"%s%L^n",(equal(authid,champAuthid)) ? "\r" : "\w",id,"RECORD_STREAK",champName,topStreak); + continue; + } + + // all out of rows + if(!moreResults) + { + lastRanking++; + len += formatex(menuText[len],511-len,"\w#%i \d%L^n",lastRanking,id,"NONE"); + continue; + } + + SQL_ReadResult(query,0,sfStatsStruct[sdAuthid],31); + SQL_ReadResult(query,1,sfStatsStruct[sdName],31); + sfStatsStruct[sdWins][si] = SQL_ReadResult(query,2); + sfStatsStruct[sdPoints][si] = SQL_ReadResult(query,3); + sfStatsStruct[sdStreak][si] = SQL_ReadResult(query,4); + ranking = SQL_ReadResult(query,5); + + if(stats_mode == 1) + { + if(sfStatsStruct[sdStreak][si] > 1) len += formatex(menuText[len],511-len,"%s#%i %s (%i %L, %L)^n",(equal(authid,sfStatsStruct[sdAuthid])) ? "\r" : "\w",ranking,sfStatsStruct[sdName],sfStatsStruct[sdWins][si],id,"WINS",id,"IN_A_ROW",sfStatsStruct[sdStreak][si]); + else len += formatex(menuText[len],511-len,"%s#%i %s (%i %L)^n",(equal(authid,sfStatsStruct[sdAuthid])) ? "\r" : "\w",ranking,sfStatsStruct[sdName],sfStatsStruct[sdWins][si],id,"WINS"); + } + else + { + if(sfStatsStruct[sdStreak][si] > 1) len += formatex(menuText[len],511-len,"%s#%i %s (%i %L, %i %L, %L)^n",(equal(authid,sfStatsStruct[sdAuthid])) ? "\r" : "\w",ranking,sfStatsStruct[sdName],sfStatsStruct[sdPoints][si],id,"POINTS",sfStatsStruct[sdWins][si],id,"WINS",id,"IN_A_ROW",sfStatsStruct[sdStreak][si]); + else len += formatex(menuText[len],511-len,"%s#%i %s (%i %L, %i %L)^n",(equal(authid,sfStatsStruct[sdAuthid])) ? "\r" : "\w",ranking,sfStatsStruct[sdName],sfStatsStruct[sdPoints][si],id,"POINTS",sfStatsStruct[sdWins][si],id,"WINS"); + } + + SQL_NextRow(query); + moreResults = SQL_MoreResults(query); + + lastRanking = ranking; + } + } + + if(numRows) SQL_FreeHandle(query); +#else + for(i=start;i= totalPlayers) break; + + // use the first slot to display the record streak + if(i == 0) + { + len += formatex(menuText[len],511-len,"%s%L^n",(equal(authid,champAuthid)) ? "\r" : "\w",id,"RECORD_STREAK",champName,topStreak); + continue; + } + + // blank + if(i-1 >= statsSize[si]) + { + len += formatex(menuText[len],511-len,"\w#%i \d%L^n",i/*+1-1*/,id,"NONE"); + continue; + } + + ArrayGetArray(statsArray,ArrayGetCell(statsPointers[si],i-1),sfStatsStruct); + + if(stats_mode == 1) + { + if(sfStatsStruct[sdStreak][si] > 1) len += formatex(menuText[len],511-len,"%s#%i %s (%i %L, %L)^n",(equal(authid,sfStatsStruct[sdAuthid])) ? "\r" : "\w",i/*+1-1*/,sfStatsStruct[sdName],sfStatsStruct[sdWins][si],id,"WINS",id,"IN_A_ROW",sfStatsStruct[sdStreak][si]); + else len += formatex(menuText[len],511-len,"%s#%i %s (%i %L)^n",(equal(authid,sfStatsStruct[sdAuthid])) ? "\r" : "\w",i/*+1-1*/,sfStatsStruct[sdName],sfStatsStruct[sdWins][si],id,"WINS"); + } + else + { + if(sfStatsStruct[sdStreak][si] > 1) len += formatex(menuText[len],511-len,"%s#%i %s (%i %L, %i %L, %L)^n",(equal(authid,sfStatsStruct[sdAuthid])) ? "\r" : "\w",i/*+1-1*/,sfStatsStruct[sdName],sfStatsStruct[sdPoints][si],id,"POINTS",sfStatsStruct[sdWins][si],id,"WINS",id,"IN_A_ROW",sfStatsStruct[sdStreak][si]); + else len += formatex(menuText[len],511-len,"%s#%i %s (%i %L, %i %L)^n",(equal(authid,sfStatsStruct[sdAuthid])) ? "\r" : "\w",i/*+1-1*/,sfStatsStruct[sdName],sfStatsStruct[sdPoints][si],id,"POINTS",sfStatsStruct[sdWins][si],id,"WINS"); + } + } +#endif + + len += formatex(menuText[len],511-len,"\d-----------\w^n"); + + new keys = MENU_KEY_0; + + if(absPage > 1) + { + len += formatex(menuText[len],511-len,"1. %L^n",id,"PREVIOUS"); + keys |= MENU_KEY_1; + } + if(absPage < pageTotal) + { + len += formatex(menuText[len],511-len,"2. %L^n",id,"NEXT"); + keys |= MENU_KEY_2; + } + if(statsPosition[id][si] > 0) + { + len += formatex(menuText[len],511-len,"3. %L^n",id,"JUMP_TO_ME"); + keys |= MENU_KEY_3; + } + if(stats_split) + { + len += formatex(menuText[len],511-len,"4. %L^n",id,(page[id] < 0) ? "STATS_REGULAR" : "STATS_TEAMPLAY"); + keys |= MENU_KEY_4; + } + len += formatex(menuText[len],511-len,"0. %L",id,"CLOSE"); + + show_menu(id,keys,menuText,-1,"top10_menu"); +} + +// someone pressed a key on the top10 list menu page +public top10_menu_handler(id,key) +{ +#if !defined SQL + recheck_stats_sorting(); +#endif + + new si = (page[id] < 0); + + new playersPerPage = get_pcvar_num(gg_top10_ppp); + //if(get_pcvar_num(gg_stats_split) == 2) playersPerPage = 7; + +#if defined SQL + new winsColumn[8], pointsColumn[10], totalPlayers, stats_mode = get_pcvar_num(gg_stats_mode); + + if(si == 0) + { + winsColumn = "wins"; + pointsColumn = "points"; + } + else + { + winsColumn = "wins_tp"; + pointsColumn = "points_tp"; + } + + if(stats_mode == 2) query = SQL_PrepareQuery(db,"SELECT NULL FROM `%s` WHERE serverip='%s' AND (%s > 0 OR %s > 0);",sqlTable,serverip,winsColumn,pointsColumn); + else query = SQL_PrepareQuery(db,"SELECT NULL FROM `%s` WHERE serverip='%s' AND %s > 0;",sqlTable,serverip,winsColumn); + + if(SQL_ExecuteAndLog(query)) totalPlayers = playersPerPage * floatround(float(SQL_NumRows(query)+1) / float(playersPerPage),floatround_ceil); + SQL_FreeHandle(query); +#else + new totalPlayers = playersPerPage * floatround(float(statsSize[si]+1) / float(playersPerPage),floatround_ceil); // +1 for streak display +#endif + + new pageTotal = floatround(float(totalPlayers) / float(playersPerPage),floatround_ceil); + if(pageTotal < 1) pageTotal = 1; + + if(!page[id] || page[id] > pageTotal) return; + + // 1. Previous + if(key == 0) + { + if(page[id] < 0) page[id]++; + else page[id]--; + + show_top10_menu(id); + } + + // 2. Next + else if(key == 1) + { + if(page[id] < 0) page[id]--; + else page[id]++; + + show_top10_menu(id); + } + + // 3. Jump to me + else if(key == 2) + { +#if defined SQL + if(statsPosition[id][si] > 0) + { + // using SQL stats, players can have tied rankings (ie: 1st, 1st, 3rd). so, if we know a player's ranking, we don't necessarily know + // what page they're on (they could be the last of 20 players all tied for 1st, for example). however, we do know what position (and + // therefore also the page) that their ranking starts on. then we can select everyone with an equal score, and process the results + // until we find their authid, to see how many positions off they are from the start of their ranking. then find the page for that. + + new authid[32], myPoints; + get_gg_authid(id,authid,31); + + stats_get_data(authid,playerStats[id],id); + + if(stats_mode == 2) + { + myPoints = playerStats[id][sdPoints][si]; + query = SQL_PrepareQuery(db,"SELECT authid FROM `%s` WHERE %s='%i' AND serverip='%s' ORDER BY %s, %s DESC;",sqlTable,pointsColumn,myPoints,serverip,pointsColumn,winsColumn); + } + else + { + myPoints = playerStats[id][sdWins][si]; + query = SQL_PrepareQuery(db,"SELECT authid FROM `%s` WHERE %s='%i' AND serverip='%s' ORDER BY %s DESC;",sqlTable,winsColumn,myPoints,serverip,winsColumn); + } + + if(SQL_ExecuteAndLog(query)) + { + new position = statsPosition[id][si]; // start at my position + + if(SQL_NumRows(query) > 1) // if I'm the only one with my score, no searching is necessary + { + new rowAuthid[32]; + while(SQL_MoreResults(query)) + { + SQL_ReadResult(query,0,rowAuthid,31); + if(equal(authid,rowAuthid)) break; + + position++; + SQL_NextRow(query); + } + } + + new negative = (page[id] < 0); + page[id] = floatround(float(position) / float(playersPerPage),floatround_floor) + 1; + if(negative) page[id] *= -1; + } + + SQL_FreeHandle(query); + } +#else + if(statsPosition[id][si] > 0) + { + // this method of finding the page is slightly different from the weapons and scores menu because + // this listing is 0-based, because we use the 0th index to display the record win streak. also, + // because we use negative numbers for the teamplay stats index. + + new negative = (page[id] < 0); + page[id] = floatround(float(statsPosition[id][si]) / float(playersPerPage),floatround_floor) + 1; + if(negative) page[id] *= -1; + } +#endif + show_top10_menu(id); + } + + // 4. Regular Stats / Teamplay Stats + else if(key == 3) + { + page[id] *= -1; + show_top10_menu(id); + } + + // 0. Close + // do nothing, menu closes automatically +} + +// show the weapon list menu +show_weapons_menu(id) +{ + new totalWeapons = weaponNum, wpnsPerPage = 10; + new pageTotal = floatround(float(totalWeapons) / float(wpnsPerPage),floatround_ceil); + + if(page[id] < 1) page[id] = 1; + if(page[id] > pageTotal) page[id] = pageTotal; + + new len = formatex(menuText,511,"\y%L %L (%i/%i)\w^n",id,"GUNGAME",id,"WEAPONS",page[id],pageTotal); + //len += formatex(menuText[len],511-len,"\d-----------\w^n"); + + new start = (wpnsPerPage * (page[id]-1)) + 1, i; + + // are there any custom kill requirements? + new customKills, Float:expected, Float:killsperlvl = get_pcvar_float(gg_kills_per_lvl); + for(i=0;i totalWeapons) break; + + if(customKills) + len += formatex(menuText[len],511-len,"%s%L %i: %s (%i)^n",(i == level[id]) ? "\r" : "\w",id,"LEVEL",i,weaponName[i-1],get_level_goal(i)); + else + len += formatex(menuText[len],511-len,"%s%L %i: %s^n",(i == level[id]) ? "\r" : "\w",id,"LEVEL",i,weaponName[i-1]); + } + + len += formatex(menuText[len],511-len,"\d-----------\w^n"); + + new keys = MENU_KEY_0; + + if(page[id] > 1) + { + len += formatex(menuText[len],511-len,"1. %L^n",id,"PREVIOUS"); + keys |= MENU_KEY_1; + } + if(page[id] < pageTotal) + { + len += formatex(menuText[len],511-len,"2. %L^n",id,"NEXT"); + keys |= MENU_KEY_2; + } + + len += formatex(menuText[len],511-len,"3. %L^n",id,"JUMP_TO_ME"); + keys |= MENU_KEY_3; + + len += formatex(menuText[len],511-len,"0. %L",id,"CLOSE"); + + show_menu(id,keys,menuText,-1,"weapons_menu"); +} + +// someone pressed a key on the weapon list menu page +public weapons_menu_handler(id,key) +{ + new wpnsPerPage = 10, pageTotal = floatround(float(weaponNum) / float(wpnsPerPage),floatround_ceil); + + if(page[id] < 1 || page[id] > pageTotal) return; + + // 1. Previous + if(key == 0) + { + page[id]--; + show_weapons_menu(id); + return; + } + + // 2. Next + else if(key == 1) + { + page[id]++; + show_weapons_menu(id); + return; + } + + // 3. Jump to me + else if(key == 2) + { + page[id] = clamp(floatround(float(level[id]) / float(wpnsPerPage),floatround_ceil),1,pageTotal); + show_weapons_menu(id); + } + + // 0. Close + // do nothing, menu closes automatically +} + +// show the score list menu +show_scores_menu(id) +{ +#if !defined SQL + recheck_stats_sorting(); +#endif + + new keys, len, teamplay = get_pcvar_num(gg_teamplay); + + if(teamplay) + { + if(page[id] != 1) page[id] = 1; + + new leader = teamplay_get_lead_team(), otherTeam = (leader == 1) ? 2 : 1; + new displayWeapon[24], teamName[10]; + + len = formatex(menuText,511,"\y%L %L (%i/%i)\w^n",id,"GUNGAME",id,"SCORES",page[id],1); + + new team, myTeam = _:cs_get_user_team(id); + for(team=leader;team>0;team=otherTeam) + { + if(teamLevel[team] && teamLvlWeapon[team][0]) copy(displayWeapon,23,teamLvlWeapon[team]); + else formatex(displayWeapon,23,"%L",id,"NONE"); + + get_team_name(CsTeams:team,teamName,9); + len += formatex(menuText[len],511-len,"%s#%i %s %L, %L %i (%s) %i/%i^n",(team == myTeam) ? "\r" : "\w",(team == leader) ? 1 : 2,teamName,id,"TEAM",id,"LEVEL",teamLevel[team],displayWeapon,teamScore[team],teamplay_get_team_goal(team)); + + // finished + if(team == otherTeam) break; + } + + // nice separator! + len += formatex(menuText[len],511-len,"\d-----------\w^n"); + + keys = MENU_KEY_0; + len += formatex(menuText[len],511-len,"0. %L",id,"CLOSE"); + } + else + { + new totalPlayers = get_playersnum(), playersPerPage = 7, stats_mode = get_pcvar_num(gg_stats_mode); + new pageTotal = floatround(float(totalPlayers) / float(playersPerPage),floatround_ceil); + + if(page[id] < 1) page[id] = 1; + if(page[id] > pageTotal) page[id] = pageTotal; + + new players[32], num; + get_players(players,num); + + // order by highest level first + SortCustom1D(players,num,"score_custom_compare"); + + if(get_pcvar_num(gg_stats_split)) len = formatex(menuText,511,"\y%L %L (%i/%i) %L\w^n",id,"GUNGAME",id,"SCORES",page[id],pageTotal,id,"STATS_REGULAR"); + else len = formatex(menuText,511,"\y%L %L (%i/%i)\w^n",id,"GUNGAME",id,"SCORES",page[id],pageTotal); + //len += formatex(menuText[len],511-len,"\d-----------\w^n"); + + new start = (playersPerPage * (page[id]-1)), i, name[32], player, authid[32]; + new stats_ip = get_pcvar_num(gg_stats_ip), displayWeapon[24], statsSuffix[3]; + new si = get_gg_si(); + + for(i=start;i= totalPlayers) break; + + player = players[i]; + get_user_name(player,name,31); + + if(level[player] && lvlWeapon[player][0]) copy(displayWeapon,23,lvlWeapon[player]); + else formatex(displayWeapon,23,"%L",id,"NONE"); + + if(sqlInit && stats_mode) + { + get_gg_authid(player,authid,31,stats_ip); + stats_get_data(authid,playerStats[player],player); + + if(statsPosition[player][si] > 0) + { + get_number_suffix(statsPosition[player][si],statsSuffix,2); + len += formatex(menuText[len],511-len,"%s#%i %s, %L %i (%s) %i/%i, %i %L (%i%s)^n",(player == id) ? "\r" : "\w",i+1,name,id,"LEVEL",level[player],displayWeapon,score[player],get_level_goal(level[player],player),(stats_mode == 1) ? playerStats[player][sdWins][si] : playerStats[player][sdPoints][si],id,(stats_mode == 1) ? "WINS" : "POINTS_ABBR",statsPosition[player][si],statsSuffix); + } + else len += formatex(menuText[len],511-len,"%s#%i %s, %L %i (%s) %i/%i, %i %L^n",(player == id) ? "\r" : "\w",i+1,name,id,"LEVEL",level[player],displayWeapon,score[player],get_level_goal(level[player],player),(stats_mode == 1) ? playerStats[player][sdWins][si] : playerStats[player][sdPoints][si],id,(stats_mode == 1) ? "WINS" : "POINTS_ABBR"); + } + else len += formatex(menuText[len],511-len,"#%i %s, %L %i (%s) %i/%i^n",i+1,name,id,"LEVEL",level[player],displayWeapon,score[player],get_level_goal(level[player],player)); + } + + len += formatex(menuText[len],511-len,"\d-----------\w^n"); + + keys = MENU_KEY_0; + + if(page[id] > 1) + { + len += formatex(menuText[len],511-len,"1. %L^n",id,"PREVIOUS"); + keys |= MENU_KEY_1; + } + if(page[id] < pageTotal) + { + len += formatex(menuText[len],511-len,"2. %L^n",id,"NEXT"); + keys |= MENU_KEY_2; + } + + len += formatex(menuText[len],511-len,"3. %L^n",id,"JUMP_TO_ME"); + keys |= MENU_KEY_3; + + len += formatex(menuText[len],511-len,"0. %L",id,"CLOSE"); + } + + show_menu(id,keys,menuText,-1,"scores_menu"); +} + +// sort list of players with their level first +public score_custom_compare(elem1,elem2) +{ + // invalid players + if(elem1 < 1 || elem1 > 32 || elem2 < 1 || elem2 > 32) + return 0; + + // tied levels, compare scores + if(level[elem1] == level[elem2]) + { + if(score[elem1] > score[elem2]) return -1; + else if(score[elem1] < score[elem2]) return 1; + else return 0; + } + + // compare levels + else if(level[elem1] > level[elem2]) return -1; + else if(level[elem1] < level[elem2]) return 1; + + return 0; // equal +} + +// someone pressed a key on the score list menu page +public scores_menu_handler(id,key) +{ + new totalPlayers = get_playersnum(), playersPerPage = 7; + new pageTotal = floatround(float(totalPlayers) / float(playersPerPage),floatround_ceil); + + if(page[id] < 1 || page[id] > pageTotal) return; + + // 1. Previous + if(key == 0) + { + page[id]--; + show_scores_menu(id); + return; + } + + // 2. Next + else if(key == 1) + { + page[id]++; + show_scores_menu(id); + return; + } + + // 3. Jump to me + else if(key == 2) + { + new players[32], num, i; + get_players(players,num); + SortCustom1D(players,num,"score_custom_compare"); + + for(i=0;i 0) ClearSyncHud(0,hudSyncWarmup); + + warmup = -1; + warmupWeapon[0] = 0; + voted = 0; + won = 0; + + remove_task(TASK_WARMUP_CHECK); + } + + // we need to get these stats (GunGame is on, we don't have them, and we aren't in the process of getting them) +#if defined SQL + if(ggActive && !task_exists(TASK_GET_TOP_PLAYERS)) stats_get_top_players(); // there is no statsArray for SQL +#else + if(ggActive && !statsArray && !task_exists(TASK_GET_TOP_PLAYERS)) stats_get_top_players(); +#endif + + // game_player_equip + manage_equips(); + + // start (or stop) the leader display + remove_task(TASK_LEADER_DISPLAY); + show_leader_display(); + + // warmup weapon may've change + if(warmup > 0) get_pcvar_string(gg_warmup_weapon,warmupWeapon,23); + +#if defined SQL + // fire up the engines!! + if(!sqlInit) + { + sql_init(); + + // because we can't refresh timestamps before SQL is initiated, refresh timestamps for people who joined before this +#if defined REFRESH_TIMESTAMP_ON_JOIN + new authid[32]; + for(new i=1;i<=maxPlayers;i++) + { + if(is_user_connected(i)) + { + get_gg_authid(i,authid,31); + stats_refresh_timestamp(authid); + } + } +#endif // REFRESH_TIMESTAMP_ON_JOIN + } +#endif // SQL +} + +// run cvars that should be run on map start +// +// see declaration of d_rOrder for explanation of keepTeamplay +public map_start_cvars(keepTeamplay) +{ + new setup[512]; + + // gungame is disabled, run endmap_setup + if(!ggActive) + { + get_pcvar_string(gg_endmap_setup,setup,511); + if(setup[0]) server_cmd(setup); + } + else + { + // run map setup + get_pcvar_string(gg_map_setup,setup,511); + if(setup[0]) server_cmd(setup); + + do_rOrder(keepTeamplay); // also does random teamplay + setup_weapon_order(); + + // random win sounds + currentWinSound = do_rWinSound(); + } +} + +precache_sounds_from_config() +{ + new cfgFile[64], command[WINSOUNDS_SIZE+32], cvar[32], value[WINSOUNDS_SIZE], file, i, pos, len; + for(i=0;i<2;i++) + { + get_gg_config_file(i,cfgFile,63); + + if(cfgFile[0] && file_exists(cfgFile)) + { + file = fopen(cfgFile,"rt"); + while(file && !feof(file)) + { + fgets(file,command,WINSOUNDS_SIZE+31); + len = strlen(command) - 2; + + // stop at coding-style (//) comments + for(pos=0;pos 0 || won) return 0; + + new leaderLevel, numLeaders, leader, teamplay = get_pcvar_num(gg_teamplay); + + if(teamplay) leader = teamplay_get_lead_team(leaderLevel,numLeaders); + else leader = get_leader(leaderLevel,numLeaders); + + if(!leader || leaderLevel <= 0) return 0; + + // we just displayed the same message, don't flood + new Float:now = get_gametime(); + if(lastLevel == leaderLevel && lastLeader == leader && lastDisplay == now) return 0; + + // remember for later + lastDisplay = now; + lastLeader = leader; + lastLevel = leaderLevel; + + if(teamplay) get_team_name(CsTeams:leader,leaderName,9); + else get_user_name(leader,leaderName,31); + + set_hudmessage(200,200,200,get_pcvar_float(gg_leader_display_x),get_pcvar_float(gg_leader_display_y),_,_,LEADER_DISPLAY_RATE+0.5,0.0,0.0); + + if(numLeaders > 1) + { + if(teamplay) + { + static otherName[10]; + get_team_name((leader == 1) ? CS_TEAM_CT : CS_TEAM_T,otherName,9); + + ShowSyncHudMsg(0,hudSyncLDisplay,"%L: %s + %s (%i - %s)",LANG_PLAYER,"LEADER",leaderName,otherName,leaderLevel,teamLvlWeapon[leader]) + } + else ShowSyncHudMsg(0,hudSyncLDisplay,"%L: %s +%i (%i - %s)",LANG_PLAYER,"LEADER",leaderName,numLeaders-1,leaderLevel,lvlWeapon[leader]); + } + else ShowSyncHudMsg(0,hudSyncLDisplay,"%L: %s (%i - %s)",LANG_PLAYER,"LEADER",leaderName,leaderLevel,(teamplay) ? teamLvlWeapon[leader] : lvlWeapon[leader]); + + return 1; +} + +// show the nice HUD progress display +show_progress_display(id) +{ + static statusString[48]; + + // weapon-specific warmup + if(warmup > 0 && warmupWeapon[0]) return; + + new teamplay = get_pcvar_num(gg_teamplay); + + // old-school: sweet and simple + if((get_pcvar_num(gg_messages) & MSGS_CLASSIC)) + { + new goal; + if(teamplay) goal = get_level_goal(teamLevel[_:cs_get_user_team(id)],id); + else goal = get_level_goal(level[id],id); + + gungame_print(id,0,1,"%L %%n%i%%e :: %%n%s%%e",id,(teamplay) ? "ON_LEVEL_TEAM" : "ON_LEVEL",level[id],lvlWeapon[id]); + gungame_print(id,0,1,"%L",id,"PROGRESS_DISPLAY",goal-score[id],score[id],goal); + + return; + } + + if(teamplay) + { + new team = _:cs_get_user_team(id), otherTeam = (team == 1) ? 2 : 1; + if(team != 1 && team != 2) return; + + new leaderLevel, numLeaders, leader = teamplay_get_lead_team(leaderLevel,numLeaders); + + // tied + if(numLeaders > 1) formatex(statusString,47,"%L",id,"PROGRESS_DISPLAY_TEAM2"); + + // leading + else if(leader == team) formatex(statusString,47,"%L",id,"PROGRESS_DISPLAY_TEAM1",teamLevel[team]-teamLevel[otherTeam]); + + // losing + else formatex(statusString,47,"%L",id,"PROGRESS_DISPLAY_TEAM3",teamLevel[otherTeam]-teamLevel[team]); + } + else + { + new leaderLevel, numLeaders, runnerUp; + new leader = get_leader(leaderLevel,numLeaders,runnerUp); + + if(level[id] == leaderLevel) + { + if(numLeaders == 1) formatex(statusString,47,"%L",id,"PROGRESS_DISPLAY1",leaderLevel-level[runnerUp]); + else if(numLeaders == 2) + { + new otherLeader; + if(leader != id) otherLeader = leader; + else + { + new player; + for(player=1;player<=maxPlayers;player++) + { + if(is_user_connected(player) && level[player] == leaderLevel && player != id) + { + otherLeader = player; + break; + } + } + } + + static otherName[32]; + get_user_name(otherLeader,otherName,31); + + formatex(statusString,47,"%L",id,"PROGRESS_DISPLAY2",otherName); + } + else + { + static numWord[16], lang[3]; + + // if english, use words, otherwise use digits + get_user_info(id,"lang",lang,2); + if(equali(lang,"en")) + { + num_to_word(numLeaders-1,numWord,15); + trim(numWord); + } + else formatex(numWord,15,"%i",numLeaders-1); + + formatex(statusString,47,"%L",id,"PROGRESS_DISPLAY3",numWord); + } + } + else formatex(statusString,47,"%L",id,"PROGRESS_DISPLAY4",leaderLevel-level[id]); + } + + gungame_hudmessage(id,5.0,"%L %i (%s)^n%s",id,(teamplay) ? "ON_LEVEL_TEAM" : "ON_LEVEL",level[id],lvlWeapon[id],statusString); +} + +// play the taken/tied/lost lead sounds +public play_lead_sounds(id,oldLevel,Float:playDelay) +{ + // id: the player whose level changed + // oldLevel: his level before it changed + // playDelay: how long to wait until we play id's sounds + + if(get_pcvar_num(gg_teamplay)) + { + // redirect to other function + teamplay_play_lead_sounds(id,oldLevel,Float:playDelay); + return; + } + + // warmup or game over, no one cares + if(warmup > 0 || won) return; + + // no level change + if(level[id] == oldLevel) return; + + // + // monitor MY stuff first + // + + new leaderLevel, numLeaders; + get_leader(leaderLevel,numLeaders); + + // I'm now on the leader level + if(level[id] == leaderLevel) + { + // someone else here? + if(numLeaders > 1) + { + new params[2]; + params[0] = id; + params[1] = gg_sound_tiedlead; + + remove_task(TASK_PLAY_LEAD_SOUNDS+id); + set_task(playDelay,"play_sound_by_cvar_task",TASK_PLAY_LEAD_SOUNDS+id,params,2); + } + + // just me, I'm the winner! + else + { + // did I just pass someone? + if(level[id] > oldLevel && num_players_on_level(oldLevel)) + { + new params[2]; + params[0] = id; + params[1] = gg_sound_takenlead; + + remove_task(TASK_PLAY_LEAD_SOUNDS+id); + set_task(playDelay,"play_sound_by_cvar_task",TASK_PLAY_LEAD_SOUNDS+id,params,2); + } + } + } + + // WAS I on the leader level? + else if(oldLevel == leaderLevel) + { + new params[2]; + params[0] = id; + params[1] = gg_sound_lostlead; + + remove_task(TASK_PLAY_LEAD_SOUNDS+id); + set_task(playDelay,"play_sound_by_cvar_task",TASK_PLAY_LEAD_SOUNDS+id,params,2); + + //return; // will not effect other players + } + + // nothing of importance + else return; // will not effect other players + + // + // now monitor other players. + // if we get this far, id is now in the lead level + // + + new player; + for(player=1;player<=maxPlayers;player++) + { + if(!is_user_connected(player) || player == id) continue; + + // PLAYER tied with ID + if(level[player] == level[id]) + { + // don't tell him if he already got it from another player + if(num_players_on_level(level[id]) <= 2 + || (oldLevel > level[id] && leaderLevel == level[id])) // dropped into tied position + { + new params[2]; + params[0] = player; + params[1] = gg_sound_tiedlead; + + remove_task(TASK_PLAY_LEAD_SOUNDS+player); + set_task(0.1,"play_sound_by_cvar_task",TASK_PLAY_LEAD_SOUNDS+player,params,2); + } + + continue; + } + + // PLAYER passed by ID + else if(level[id] > level[player] && level[player] == oldLevel) + { + // don't tell him if he already got it from another player + if(num_players_on_level(level[id]) <= 1) + { + new params[2]; + params[0] = player; + params[1] = gg_sound_lostlead; + + remove_task(TASK_PLAY_LEAD_SOUNDS+player); + set_task(0.1,"play_sound_by_cvar_task",TASK_PLAY_LEAD_SOUNDS+player,params,2); + } + + continue; + } + + // ID passed by PLAYER + else if(level[player] > level[id] && leaderLevel == level[player]) + { + // I stand alone! + if(num_players_on_level(level[player]) <= 1) + { + new params[2]; + params[0] = player; + params[1] = gg_sound_takenlead; + + remove_task(TASK_PLAY_LEAD_SOUNDS+player); + set_task(0.1,"play_sound_by_cvar_task",TASK_PLAY_LEAD_SOUNDS+player,params,2); + } + + continue; + } + } +} + +// manage game_player_equip and player_weaponstrip entities +public manage_equips() +{ + static classname[20], targetname[24]; + new ent, i, block_equips = get_pcvar_num(gg_block_equips), enabled = ggActive; + + // go through both entities to monitor + for(i=0;i<4;i++) + { + // get classname for current iteration + switch(i) + { + case 0: classname = "game_player_equip"; + case 1: classname = "game_player_equip2"; + case 2: classname = "player_weaponstrip"; + default: classname = "player_weaponstrip2"; + } + + // go through whatever entity + ent = 0; + while((ent = fm_find_ent_by_class(ent,classname))) + { + // allowed to have this, reverse possible changes + if(!enabled || !block_equips || (i >= 2 && block_equips < 2)) // player_weaponstrip switch + { + pev(ent,pev_targetname,targetname,23); + + // this one was blocked + if(equal(targetname,"gg_block_equips")) + { + pev(ent,TNAME_SAVE,targetname,23); + + set_pev(ent,pev_targetname,targetname); + set_pev(ent,TNAME_SAVE,""); + + switch(i) + { + case 0, 1: set_pev(ent,pev_classname,"game_player_equip"); + default: set_pev(ent,pev_classname,"player_weaponstrip"); + } + } + } + + // not allowed to pickup others, make possible changes + else + { + pev(ent,pev_targetname,targetname,23); + + // needs to be blocked, but hasn't been yet + if(targetname[0] && !equal(targetname,"gg_block_equips")) + { + set_pev(ent,TNAME_SAVE,targetname); + set_pev(ent,pev_targetname,"gg_block_equips"); + + // classname change is required sometimes for some reason + switch(i) + { + case 0, 1: set_pev(ent,pev_classname,"game_player_equip2"); + default: set_pev(ent,pev_classname,"player_weaponstrip2"); + } + } + } + } + } +} + +// someone respawned +spawned(id) +{ + // should be filtered in ham hook + if(/*!ggActive || !is_user_connected(id) ||*/ !on_valid_team(id)) + return; + + remove_task(TASK_CHECK_DEATHMATCH+id); + + // should be frozen? + if(won) + { + new iterations = get_pcvar_num(gg_map_iterations); + if(mapIteration < iterations || !iterations) + { + // not done yet, just freeze players + set_pev(id,pev_flags,pev(id,pev_flags) | FL_FROZEN); + fm_set_user_godmode(id,1); + } + + // done, make sure HUD is hidden + emessage_begin(MSG_ALL,gmsgHideWeapon); + ewrite_byte((1<<0)|(1<<1)|(1<<3)|(1<<4)|(1<<5)|(1<<6)); // can't use (1<<2) or text disappears + emessage_end(); + + emessage_begin(MSG_ALL,gmsgCrosshair); + ewrite_byte(0); // hide + emessage_end(); + + return; + } + + if(get_pcvar_num(gg_pickup_others)) strip_starting_pistols(id); + + afkCheck[id] = 0; + levelsThisRound[id] = 0; + + // just joined + if(!level[id]) + { + new teamplay = get_pcvar_num(gg_teamplay); + + // warming up + if(warmup > 0 && !teamplay) + { + change_level(id,1,1,_,1); // just joined, always score + } + else + { + // handicap + new handicapMode = get_pcvar_num(gg_handicap_on); + if(handicapMode && !teamplay) + { + new rcvHandicap = 1; + + // top10 doesn't receive handicap -- also make sure we are using top10 + if(sqlInit && !get_pcvar_num(gg_top10_handicap) && get_pcvar_num(gg_stats_mode)) + { + static authid[32]; + get_gg_authid(id,authid,31); + + new si = get_gg_si(); +#if defined SQL + if(!statsPosition[id][si]) statsPosition[id][si] = stats_get_position(id,authid,si); + if(0 < statsPosition[id][si] && statsPosition[id][si] <= TOP_PLAYERS) rcvHandicap = 0; // I'm in the top10 +#else + for(new i=0;i= statsSize[si]) continue; + ArrayGetArray(statsArray,ArrayGetCell(statsPointers[si],i),sfStatsStruct); + + // I'm in top10, don't give me handicap + if(equal(authid,sfStatsStruct[sdAuthid])) + { + rcvHandicap = 0; + break; + } + } +#endif + } + + if(rcvHandicap) + { + new player; + + // find lowest level (don't use bots unless we have to) + if(handicapMode == 2) + { + new isBot, myLevel, lowestLevel, lowestBotLevel; + for(player=1;player<=maxPlayers;player++) + { + if(!is_user_connected(player) || player == id) + continue; + + isBot = is_user_bot(player); + myLevel = level[player]; + + if(!myLevel) continue; + + if(!isBot && (!lowestLevel || myLevel < lowestLevel)) + lowestLevel = myLevel; + else if(isBot && (!lowestBotLevel || myLevel < lowestBotLevel)) + lowestBotLevel = myLevel; + } + + // CLAMP! + if(!lowestLevel) lowestLevel = 1; + if(!lowestBotLevel) lowestBotLevel = 1; + + change_level(id,(lowestLevel > 1) ? lowestLevel : lowestBotLevel,1,_,1); // just joined, always score + } + + // find average level + else + { + new Float:average, num; + for(player=1;player<=maxPlayers;player++) + { + if(is_user_connected(player) && level[player]) + { + average += float(level[player]); + num++; + } + } + + average /= float(num); + change_level(id,(average >= 0.5) ? floatround(average) : 1,1,_,1); // just joined, always score + } + } + + // not eligible for handicap (in top10 with gg_top10_handicap disabled) + else change_level(id,1,1,_,1); // just joined, always score + } + + // no handicap enabled or playing teamplay + else + { + if(teamplay) + { + new team = _:cs_get_user_team(id); + + if(team == 1 || team == 2) + { + // my team has a level already + if(teamLevel[team]) + { + change_level(id,teamLevel[team],1,_,1,_,0); // just joined, always score, don't effect team + if(score[id] != teamScore[team]) change_score(id,teamScore[team]-score[id],_,_,0); // don't effect team + } + + // my team just started + else + { + // initialize its values + teamplay_update_level(team,1,id); + teamplay_update_score(team,0,id); + + change_level(id,teamLevel[team],1,_,1,_,0); // just joined, always score, don't effect team + } + } + } + + // solo-play + else change_level(id,1,1,_,1); // just joined, always score + } + } + } + + // didn't just join + else + { + if(star[id]) + { + end_star(TASK_END_STAR+id); + remove_task(TASK_END_STAR+id); + } + + if(get_pcvar_num(gg_teamplay)) + { + new team = _:cs_get_user_team(id); + + // my team just started + if((team == 1 || team == 2) && !teamLevel[team]) + { + // initialize its values + teamplay_update_level(team,1,id); + teamplay_update_score(team,0,id); + + change_level(id,teamLevel[team]-level[id],_,_,1,_,0); // always score, don't effect team + change_score(id,teamScore[team]-score[id],_,_,0); // don't effect team + } + } + + give_level_weapon(id); + refill_ammo(id); + } + + // show welcome message + if(!welcomed[id] && get_pcvar_num(gg_join_msg)) + show_welcome(id); + + // update bomb for DM + if(cs_get_user_team(id) == CS_TEAM_T && !get_pcvar_num(gg_block_objectives) && get_pcvar_num(gg_dm)) + { + if(bombStatus[3] == BOMB_PICKEDUP) + { + message_begin(MSG_ONE,gmsgBombPickup,_,id); + message_end(); + } + else if(bombStatus[0] || bombStatus[1] || bombStatus[2]) + { + message_begin(MSG_ONE,gmsgBombDrop,_,id); + write_coord(bombStatus[0]); + write_coord(bombStatus[1]); + write_coord(bombStatus[2]); + write_byte(bombStatus[3]); + message_end(); + } + } + + if(get_pcvar_num(gg_disable_money)) hide_money(id); + + // switch to our appropiate weapon, for those without the switch to new weapon option + if((warmup > 0 && warmupWeapon[0] && equal(warmupWeapon,KNIFE)) || equal(lvlWeapon[id],KNIFE) /* || (get_pcvar_num(gg_knife_elite) && levelsThisRound[id] > 0)*/) + { + engclient_cmd(id,WEAPON_KNIFE); + client_cmd(id,WEAPON_KNIFE); + } + else if(get_pcvar_num(gg_nade_glock) && equal(lvlWeapon[id],HEGRENADE)) + { + engclient_cmd(id,WEAPON_GLOCK18); + client_cmd(id,WEAPON_GLOCK18); + } + else if(lvlWeapon[id][0]) + { + static wpnName[24]; + formatex(wpnName,23,"weapon_%s",lvlWeapon[id]); + + engclient_cmd(id,wpnName); + client_cmd(id,wpnName); + } + + // remember spawn info for AFK protection + if(get_pcvar_num(gg_afk_protection)) + { + pev(id,pev_origin,spawnOrigin[id]); + pev(id,pev_v_angle,spawnAngles[id]); + afkCheck[id] = 1; + } +} + +// player changed his team +player_teamchange(id,oldTeam,newTeam) +{ + if(!ggActive) return 0; + + // remember for crazy team switches + lastTeam[id] = newTeam; + + // allow us to join in on deathmatch + if(oldTeam == 0 && (newTeam == 1 || newTeam == 2) && !roundEnded && get_pcvar_num(gg_dm) && !task_exists(TASK_CHECK_JOINCLASS+id)) + { + remove_task(TASK_CHECK_DEATHMATCH+id); + set_task(5.0,"check_deathmatch",TASK_CHECK_DEATHMATCH+id); + } + + // keep track of time + new Float:now = get_gametime(); + if(oldTeam == 1 || oldTeam == 2) teamTimes[id][oldTeam-1] += now - lastSwitch[id]; + lastSwitch[id] = now; + + // we already have a level, set our values to our new team's + if(level[id] && get_pcvar_num(gg_teamplay) && (newTeam == 1 || newTeam == 2)) + { + // set them directly + level[id] = teamLevel[newTeam]; + lvlWeapon[id] = teamLvlWeapon[newTeam]; + score[id] = teamScore[newTeam]; + } + + return 1; +} + +// restart the round +public restart_round(delay) +{ + // clear values + /*new player; + for(player=1;player<=maxPlayers;player++) + { + if(is_user_connected(player)) clear_values(player,1); // ignore welcome + } + + // reset teams as well + clear_team_values(1); + clear_team_values(2);*/ + + if(delay < 1) delay = 1; + + set_cvar_num("sv_restartround",delay); + set_task(float(delay)-0.1,"clear_all_values"); +} + +// select a random weapon order +// +// in cmd_gungame_teamplay we call map_start_cvars which leads to d_rOrder. +// when called this way we don't want to let it change teamplay or run teamplay +// configs, so we added the keepTeamplay parameter. +do_rOrder(keepTeamplay) +{ + // manage random teamplay + if(initTeamplayInt == -1) + { + get_pcvar_string(gg_teamplay,initTeamplayStr,31); + initTeamplayInt = str_to_num(initTeamplayStr[0]); + } + + new amount; + + // if we are allowed to change teamplay, and our initial teamplay value was either a + // sequence, or it was just 2 (so select one randomly), then sort through it and pick a value + if(!keepTeamplay && ((amount = str_count(initTeamplayStr,',')+1) > 1 || initTeamplayInt == 2)) + { + new info[6], rotation[32]; + get_localinfo("gg_tp_iter",info,5); + copy(rotation,31,initTeamplayStr); // store initTeamplayStr in a variable that we can break apart, so on map end we can set gg_teamplay back to initTeamplayStr + + new iter = str_to_num(info), teamplay; + + if(iter <= 0 || iter > amount) + { + iter = 1; + set_localinfo("gg_tp_iter","1"); + } + + // no rotation, just use the given value + if(amount <= 1) + { + if(iter != 1) set_localinfo("gg_tp_iter","1"); + // initTeamplayInt should still be set to the one we want to use + } + else + { + for(new i=1;i<=amount;i++) + { + if(contain(rotation,",") != -1) + { + strtok(rotation,info,5,rotation,31,','); + if(i == iter) // this is the one we're looking for + { + initTeamplayInt = str_to_num(info); + break; + } + } + else // we've stripped away everything else and are left with the last one, so use it + { + initTeamplayInt = str_to_num(rotation); + break; + } + } + + iter++; + if(iter > amount) iter = 1; + num_to_str(iter,info,5); + set_localinfo("gg_tp_iter",info); + } + + if(initTeamplayInt == 2) teamplay = random_num(0,1); + else teamplay = initTeamplayInt; + + set_pcvar_num(gg_teamplay,teamplay); + + // re-run config files based on teamplay, don't allow toggling + exec_gg_config_file(0,0); + if(teamplay) exec_gg_config_file(1,0); + } + + new i, maxRandom, cvar[20], weaponOrder[(MAX_WEAPONS*16)+1]; + for(i=1;i<=MAX_WEAPON_ORDERS+1;i++) // +1 so we can detect final + { + formatex(cvar,19,"gg_weapon_order%i",i); + get_cvar_string(cvar,weaponOrder,MAX_WEAPONS*16); + trim(weaponOrder); + + // found a blank one, stop here + if(!weaponOrder[0]) + { + maxRandom = i - 1; + break; + } + } + + // there is just one + if(maxRandom == 1) + { + // get its weapon order and set as current + formatex(cvar,19,"gg_weapon_order1"); + get_cvar_string(cvar,weaponOrder,MAX_WEAPONS*16); + set_pcvar_string(gg_weapon_order,weaponOrder); + return; + } + + // we found some random ones + if(maxRandom) + { + new randomOrder[30], lastOIstr[6], lastOI, orderAmt; + get_localinfo("gg_rand_order",randomOrder,29); + get_localinfo("gg_last_oi",lastOIstr,5); + lastOI = str_to_num(lastOIstr); + orderAmt = get_rOrder_amount(randomOrder); + + // no random order yet, or amount of random orders changed + if(!randomOrder[0] || orderAmt != maxRandom) + { + shuffle_rOrder(randomOrder,29,maxRandom); + lastOI = 0; + } + + // reached the end, reshuffle while avoiding this one + else if(get_rOrder_index_val(orderAmt,randomOrder) == get_rOrder_index_val(lastOI,randomOrder)) + { + shuffle_rOrder(randomOrder,29,maxRandom,lastOI); + lastOI = 0; + } + + new choice = get_rOrder_index_val(lastOI+1,randomOrder); + + // get its weapon order + formatex(cvar,19,"gg_weapon_order%i",choice); + get_cvar_string(cvar,weaponOrder,MAX_WEAPONS*16); + + // set as current + set_pcvar_string(gg_weapon_order,weaponOrder); + + // remember for next time + num_to_str(lastOI+1,lastOIstr,5); + set_localinfo("gg_last_oi",lastOIstr); + } +} + +// get the value of an order index in an order string +get_rOrder_index_val(index,randomOrder[]) +{ + // only one listed + if(str_count(randomOrder,',') < 1) + return str_to_num(randomOrder); + + // find preceding comma + new search = str_find_num(randomOrder,',',index-1); + + // go until succeeding comma + new extract[6]; + copyc(extract,5,randomOrder[search+1],','); + + return str_to_num(extract); +} + +// gets the amount of orders in an order string +get_rOrder_amount(randomOrder[]) +{ + return str_count(randomOrder,',')+1; +} + +// shuffle up our random order +stock shuffle_rOrder(randomOrder[],len,maxRandom,avoid=-1) +{ + randomOrder[0] = 0; + + // fill up array with order indexes + new order[MAX_WEAPON_ORDERS], i; + for(i=0;i 0 && order[0] == avoid) + SortCustom1D(order,maxRandom,"sort_shuffle"); + + // get them into a string + for(i=0;i0) ? "," : "",order[i]); + set_localinfo("gg_rand_order",randomOrder); + } +} + +// play a random win sound +do_rWinSound() +{ + // just one, no one cares + if(numWinSounds <= 1) + { + return 0; // 1 minus 1 + } + + new randomOrder[30], lastWSIstr[6], lastWSI, orderAmt; + get_localinfo("gg_winsound_order",randomOrder,29); + get_localinfo("gg_last_wsi",lastWSIstr,5); + lastWSI = str_to_num(lastWSIstr); + orderAmt = get_rWinSound_amount(randomOrder); + + // no random order yet, or amount of random orders changed + if(!randomOrder[0] || orderAmt != numWinSounds) + { + shuffle_rWinSound(randomOrder,29); + lastWSI = 0; + } + + // reached the end, reshuffle while avoiding this one + else if(get_rWinSound_index_val(orderAmt,randomOrder) == get_rWinSound_index_val(lastWSI,randomOrder)) + { + shuffle_rWinSound(randomOrder,29,lastWSI); + lastWSI = 0; + } + + new choice = get_rWinSound_index_val(lastWSI+1,randomOrder); + + // remember for next time + num_to_str(lastWSI+1,lastWSIstr,5); + set_localinfo("gg_last_wsi",lastWSIstr); + + return choice-1; +} + +// get the value of an order index in an order string +get_rWinSound_index_val(index,randomOrder[]) +{ + // only one listed + if(str_count(randomOrder,',') < 1) + return str_to_num(randomOrder); + + // find preceding comma + new search = str_find_num(randomOrder,',',index-1); + + // go until succeeding comma + new extract[6]; + copyc(extract,5,randomOrder[search+1],','); + + return str_to_num(extract); +} + +// gets the amount of orders in an order string +get_rWinSound_amount(randomOrder[]) +{ + return str_count(randomOrder,',')+1; +} + +// shuffle up our random order +stock shuffle_rWinSound(randomOrder[],len,avoid=-1) +{ + randomOrder[0] = 0; + + // fill up array with order indexes + new order[MAX_WINSOUNDS], i; + for(i=0;i 0 && order[0] == avoid) + SortCustom1D(order,numWinSounds,"sort_shuffle"); + + // get them into a string + for(i=0;i0) ? "," : "",order[i]); + set_localinfo("gg_winsound_order",randomOrder); + } +} + +// shuffle an array +public sort_shuffle(elem1,elem2) +{ + return random_num(-1,1); +} + +// clear all saved values +clear_values(id,ignoreWelcome=0) +{ + level[id] = 0; + levelsThisRound[id] = 0; + score[id] = 0; + lvlWeapon[id][0] = 0; + star[id] = 0; + if(!ignoreWelcome) welcomed[id] = 0; + page[id] = 0; + lastKilled[id] = 0; + respawn_timeleft[id] = 0; + silenced[id] = 0; + spawnSounds[id] = 1; + spawnProtected[id] = 0; + teamTimes[id][0] = 0.0; + teamTimes[id][1] = 0.0; + lastSwitch[id] = get_gametime(); + lastTeam[id] = 0; + + if(c4planter == id) c4planter = 0; + + remove_task(TASK_RESPAWN+id); + remove_task(TASK_CHECK_DEATHMATCH+id); + remove_task(TASK_REMOVE_PROTECTION+id); + + if(is_user_connected(id)) fm_set_rendering(id); + + return 1; +} + +// clears a TEAM's values +clear_team_values(team) +{ + if(team != 1 && team != 2) return; + + teamLevel[team] = 0; + teamLvlWeapon[team][0] = 0; + teamScore[team] = 0; +} + +// possibly start a warmup round +start_warmup() +{ + new warmup_value = get_pcvar_num(gg_warmup_timer_setting); + + // warmup is set to -13 after its finished if gg_warmup_multi is 0, + // so this stops multiple warmups for multiple map iterations + if(warmup_value > 0 && warmup != -13) + { + warmup = warmup_value; + get_pcvar_string(gg_warmup_weapon,warmupWeapon,23); + set_task(0.1,"warmup_check",TASK_WARMUP_CHECK); + + // now that warmup is in effect, reset player weapons + new player; + for(player=1;player<=maxPlayers;player++) + { + if(is_user_connected(player)) + { + // just joined for all intents and purposes + change_level(player,-MAX_WEAPONS,1,_,1,0,0); // just joined, always score, don't play sounds, don't effect team + } + } + + // a single team update instead of for everyone + if(get_pcvar_num(gg_teamplay)) + { + teamplay_update_score(1,0); + teamplay_update_score(2,0); + teamplay_update_level(1,1); + teamplay_update_level(2,1); + } + + // clear leader display for warmup + if(warmup > 0) ClearSyncHud(0,hudSyncLDisplay); + } +} + +// refresh a player's hegrenade stock +public refresh_nade(taskid) +{ + new id = taskid-TASK_REFRESH_NADE; + + // player left, player died, or GunGame turned off + if(!is_user_connected(id) || !is_user_alive(id) || !ggActive) return; + + // on the grenade level, and lacking that aforementioned thing + if(equal(lvlWeapon[id],HEGRENADE) && !user_has_weapon(id,CSW_HEGRENADE)) + ham_give_weapon(id,WEAPON_HEGRENADE); + + // get bots to use the grenade (doesn't work very well) + if(is_user_bot(id)) + { + engclient_cmd(id,WEAPON_HEGRENADE); + client_cmd(id,WEAPON_HEGRENADE); + } +} + +// refill a player's ammo +stock refill_ammo(id,current=0) +{ + if(!is_user_alive(id)) return 0; + + // weapon-specific warmup, no ammo for knives only + if(warmup > 0 && warmupWeapon[0] && equal(warmupWeapon,KNIFE)) + return 0; + + // get weapon name and index + static fullName[24], curWpnName[24]; + new wpnid, curWpnMelee, curweapon = get_user_weapon(id); + + // re-init start of strings + fullName[0] = 0; + curWpnName[0] = 0; + + // we have a valid current weapon (stupid runtime errors) + if(curweapon) + { + get_weaponname(curweapon,curWpnName,23); + curWpnMelee = equal(curWpnName,WEAPON_KNIFE); + } + + // if we are refilling our current weapon instead of our level weapon, + // we actually have a current weapon, and this isn't a melee weapon or the + // other alternative, our level weapon, is a melee weapon + if(current && curweapon && (!curWpnMelee || equal(lvlWeapon[id],KNIFE))) + { + // refill our current weapon + get_weaponname(curweapon,fullName,23); + wpnid = curweapon; + } + else + { + // refill our level weapon + formatex(fullName,23,"weapon_%s",lvlWeapon[id]); + wpnid = get_weaponid(fullName); + + // so that we know for sure + current = 0; + } + + new armor = get_pcvar_num(gg_give_armor), helmet = get_pcvar_num(gg_give_helmet); + + // giving armor and helmets away like candy + if(helmet) cs_set_user_armor(id,armor,CS_ARMOR_VESTHELM); + else cs_set_user_armor(id,armor,CS_ARMOR_KEVLAR); + + // didn't find anything valid to refill somehow + if(wpnid < 1 || wpnid > 30 || !fullName[0]) + return 0; + + // no reason to refill a melee weapon, or a bomb. + // make use of our curWpnMelee cache here + if((current && curWpnMelee) || wpnid == CSW_KNIFE || wpnid == CSW_C4) + return 1; + + new ammo, wEnt; + ammo = get_pcvar_num(gg_ammo_amount); + + // don't give away hundreds of grenades + if(wpnid != CSW_HEGRENADE) + { + // set clip ammo + wEnt = get_weapon_ent(id,wpnid); + if(pev_valid(wEnt)) cs_set_weapon_ammo(wEnt,maxClip[wpnid]); + + // glock on the nade level + if(wpnid == CSW_GLOCK18 && equal(lvlWeapon[id],HEGRENADE)) + cs_set_user_bpammo(id,CSW_GLOCK18,50); + else + { + // set backpack ammo + if(ammo > 0) cs_set_user_bpammo(id,wpnid,ammo); + else cs_set_user_bpammo(id,wpnid,maxAmmo[wpnid]); + } + + // update display if we need to + if(curweapon == wpnid) + { + message_begin(MSG_ONE,gmsgCurWeapon,_,id); + write_byte(1); + write_byte(wpnid); + write_byte(maxClip[wpnid]); + message_end(); + } + } + + // now do stupid grenade stuff + else + { + // we don't have this nade yet + if(!user_has_weapon(id,wpnid)) + { + ham_give_weapon(id,fullName); + remove_task(TASK_REFRESH_NADE+id); + } + + if(get_pcvar_num(gg_nade_glock)) + { + // set clip ammo + new wEnt = get_weapon_ent(id,CSW_GLOCK18); + if(pev_valid(wEnt)) cs_set_weapon_ammo(wEnt,20); + + // set backpack ammo + cs_set_user_bpammo(id,CSW_GLOCK18,50); + + new curweapon = get_user_weapon(id); + + // update display if we need to + if(curweapon == CSW_GLOCK18) + { + message_begin(MSG_ONE,gmsgCurWeapon,_,id); + write_byte(1); + write_byte(CSW_GLOCK18); + write_byte(20); + message_end(); + } + } + + if(get_pcvar_num(gg_nade_smoke) && !cs_get_user_bpammo(id,CSW_SMOKEGRENADE)) + ham_give_weapon(id,"weapon_smokegrenade"); + + if(get_pcvar_num(gg_nade_flash) && !cs_get_user_bpammo(id,CSW_FLASHBANG)) + ham_give_weapon(id,"weapon_flashbang"); + } + + // keep melee weapon out if we had it out + if(curweapon && curWpnMelee) + { + engclient_cmd(id,curWpnName); + client_cmd(id,curWpnName); + } + + return 1; +} + +// show someone a welcome message +public show_welcome(id) +{ + if(welcomed[id]) return; + + new menuid, keys; + get_user_menu(id,menuid,keys); + + // another old-school menu opened + if(menuid > 0) + { + // wait and try again + set_task(3.0,"show_welcome",id); + return; + } + + play_sound_by_cvar(id,gg_sound_welcome); + + new len = formatex(menuText,511,"\y%L\w^n",id,"WELCOME_MESSAGE_LINE1",GG_VERSION); + len += formatex(menuText[len],511-len,"\d---------------\w^n"); + + new special; + if(get_pcvar_num(gg_knife_pro)) + { + len += formatex(menuText[len],511-len,"%L^n",id,"WELCOME_MESSAGE_LINE2"); + special = 1; + } + if(get_pcvar_num(gg_turbo)) + { + len += formatex(menuText[len],511-len,"%L^n",id,"WELCOME_MESSAGE_LINE3"); + special = 1; + } + if(get_pcvar_num(gg_knife_elite)) + { + len += formatex(menuText[len],511-len,"%L^n",id,"WELCOME_MESSAGE_LINE4"); + special = 1; + } + if(get_pcvar_num(gg_dm) || get_cvar_num("csdm_active")) + { + len += formatex(menuText[len],511-len,"%L^n",id,"WELCOME_MESSAGE_LINE5"); + special = 1; + } + if(get_pcvar_num(gg_teamplay)) + { + len += formatex(menuText[len],511-len,"%L^n",id,"WELCOME_MESSAGE_LINE6"); + special = 1; + } + + if(special) len += formatex(menuText[len],511-len,"\d---------------\w^n"); + len += formatex(menuText[len],511-len,"%L^n",id,"WELCOME_MESSAGE_LINE7",weaponNum); + len += formatex(menuText[len],511-len,"\d---------------\w^n"); + len += formatex(menuText[len],511-len,"%L",id,"WELCOME_MESSAGE_LINE8"); + len += formatex(menuText[len],511-len,"\d---------------\w^n"); + len += formatex(menuText[len],511-len,"%L",id,"PRESS_KEY_TO_CONTINUE"); + + show_menu(id,1023,menuText,-1,"welcome_menu"); +} + +// show the required kills message +stock show_required_kills(id,always_individual=0) +{ + // weapon-specific warmup, who cares + if(warmup > 0 && warmupWeapon[0]) return 0; + + if(always_individual || !get_pcvar_num(gg_teamplay)) + return gungame_hudmessage(id,3.0,"%L: %i / %i",id,"REQUIRED_KILLS",score[id],get_level_goal(level[id],id)); + + new player, myTeam = _:cs_get_user_team(id), goal = get_level_goal(teamLevel[myTeam],id); + for(player=1;player<=maxPlayers;player++) + { + if(player == id || (is_user_connected(player) && _:cs_get_user_team(player) == myTeam)) + gungame_hudmessage(player,3.0,"%L: %i / %i",player,"REQUIRED_KILLS",teamScore[myTeam],goal); + } + + return 1; +} + +// player killed himself +player_suicided(id) +{ + static name[32]; + + // we still have protection (round ended, new one hasn't started yet) + // or, suicide level downs are disabled + if(roundEnded || !get_pcvar_num(gg_suicide_penalty)) return 0; + + // weapon-specific warmup, no one cares + if(warmup > 0 && warmupWeapon[0]) return 0; + + if(!get_pcvar_num(gg_teamplay)) + { + get_user_name(id,name,31); + + gungame_print(0,id,1,"%L",LANG_PLAYER_C,"SUICIDE_LEVEL_DOWN",name); + + // this is going to start a respawn counter HUD message + if(get_pcvar_num(gg_dm) && (get_pcvar_num(gg_dm_countdown) & 2)) + return change_level(id,-1,_,0,1); // don't show message, always score + + // show with message + return change_level(id,-1,_,_,1); // always score + } + else + { + new team = _:cs_get_user_team(id); + if(team != 1 && team != 2) return 0; + + new penalty = get_level_goal(teamLevel[team],0); + if(penalty > 0) + { + get_user_team(id,name,9); + + if(teamScore[team] - penalty < 0) + gungame_print(0,id,1,"%L",LANG_PLAYER_C,"SUICIDE_LEVEL_DOWN_TEAM",name,(teamLevel[team] > 1) ? teamLevel[team]-1 : teamLevel[team]); + else + gungame_print(0,id,1,"%L",LANG_PLAYER_C,"SUICIDE_SCORE_DOWN_TEAM",name,penalty); + + return change_score(id,-penalty); + } + } + + return 0; +} + +// player scored or lost a point +stock change_score(id,value,refill=1,play_sounds=1,effect_team=1,always_score=0) +{ + // don't bother scoring up on weapon-specific warmup + if(warmup > 0 && warmupWeapon[0] && value > 0) + return 0; + + // can't score! + if(!always_score && !can_score(id)) + return 0; + + // already won, isn't important + if(level[id] > weaponNum) return 0; + + new oldScore = score[id], goal = get_level_goal(level[id],id); + + new teamplay = get_pcvar_num(gg_teamplay), team; + if(teamplay) team = _:cs_get_user_team(id); + + // if this is going to level us + if(score[id] + value >= goal) + { + new max_lvl = get_pcvar_num(gg_max_lvl); + + // already reached max levels this round + if(!teamplay && !get_pcvar_num(gg_turbo) && max_lvl > 0 && levelsThisRound[id] >= max_lvl) + { + // put it as high as we can without leveling + score[id] = goal - 1; + } + else score[id] += value; + } + else score[id] += value; + + // check for level up + if(score[id] >= goal) + { + score[id] = 0; + + if(teamplay && effect_team && (team == 1 || team == 2) && teamScore[team] != score[id]) + teamplay_update_score(team,score[id],id,1); // direct + + change_level(id,1,_,_,always_score,play_sounds); + return 1; + } + + // check for level down + if(score[id] < 0) + { + // can't go down below level 1 + if(level[id] <= 1) + { + score[id] = 0; + + if(teamplay && effect_team && (team == 1 || team == 2) && teamScore[team] != score[id]) + teamplay_update_score(team,score[id],id,1); // direct + + new sdisplay = get_pcvar_num(gg_status_display); + if(sdisplay == STATUS_KILLSLEFT || sdisplay == STATUS_KILLSDONE) + status_display(id); + + if(value < 0) show_required_kills(id); + return 0; + } + else + { + goal = get_level_goal(level[id] > 1 ? level[id]-1 : 1,id); + + score[id] = (oldScore + value) + goal; // carry over points + if(score[id] < 0) score[id] = 0; + + if(teamplay && effect_team && (team == 1 || team == 2) && teamScore[team] != score[id]) + teamplay_update_score(team,score[id],id,1); // direct + + change_level(id,-1,_,_,always_score); + return -1; + } + } + + // refresh menus + new menu; + get_user_menu(id,menu,dummy[0]); + if(menu == level_menu) show_level_menu(id); + + if(refill && get_pcvar_num(gg_refill_on_kill)) refill_ammo(id); + + if(teamplay && effect_team && (team == 1 || team == 2) && teamScore[team] != score[id]) + teamplay_update_score(team,score[id],id,1); // direct + + if(value < 0) show_required_kills(id); + else if(play_sounds) client_cmd(id,"spk ^"%s^"",KILL_DING_SOUND); + + new sdisplay = get_pcvar_num(gg_status_display); + if(sdisplay == STATUS_KILLSLEFT || sdisplay == STATUS_KILLSDONE) + status_display(id); + + return 0; +} + +// player gained or lost a level +stock change_level(id,value,just_joined=0,show_message=1,always_score=0,play_sounds=1,effect_team=1) +{ + // can't score + if(level[id] > 0 && !always_score && !can_score(id)) + return 0; + + // don't bother leveling up on weapon-specific warmup + if(level[id] > 0 && warmup > 0 && warmupWeapon[0] && value > 0) + return 0; + + new oldLevel = level[id], oldValue = value; + + new teamplay = get_pcvar_num(gg_teamplay), team; + if(teamplay) team = _:cs_get_user_team(id); + + // teamplay, on a valid team + if(teamplay && (team == 1 || team == 2) && value != -MAX_WEAPONS) // ignore warmup reset + { + // not effecting team, but setting me to something that doesn't match team + // OR + // effecting team, and not even starting on same thing as team + if((!effect_team && level[id] + value != teamLevel[team]) || (effect_team && level[id] != teamLevel[team])) + { + log_amx("MISSYNCH -- id: %i, value: %i, just_joined: %i, show_message: %i, always_score: %i, play_sounds: %i, effect_team: %i, team: %i, level: %i, teamlevel: %i, usertime: %i, score: %i, teamscore: %i, lvlweapon: %s, teamlvlweapon: %s", + id,value,just_joined,show_message,always_score,play_sounds,effect_team,team,level[id],teamLevel[team],get_user_time(id,1),score[id],teamScore[team],lvlWeapon[id],teamLvlWeapon[team]); + + log_message("MISSYNCH -- id: %i, value: %i, just_joined: %i, show_message: %i, always_score: %i, play_sounds: %i, effect_team: %i, team: %i, level: %i, teamlevel: %i, usertime: %i, score: %i, teamscore: %i, lvlweapon: %s, teamlvlweapon: %s", + id,value,just_joined,show_message,always_score,play_sounds,effect_team,team,level[id],teamLevel[team],get_user_time(id,1),score[id],teamScore[team],lvlWeapon[id],teamLvlWeapon[team]); + } + } + + // this will put us below level 1 + if(level[id] + value < 1) + { + value = 1 - level[id]; // go down only to level 1 + + // bottom out the score + score[id] = 0; + + if(teamplay && effect_team && (team == 1 || team == 2) && teamScore[team] != score[id]) + teamplay_update_score(team,score[id],id,1); // direct + } + + // going up + if(value > 0) + { + new max_lvl = get_pcvar_num(gg_max_lvl); + + // already reached max levels for this round + if(!teamplay && !get_pcvar_num(gg_turbo) && max_lvl > 0 && levelsThisRound[id] >= max_lvl) + return 0; + } + + // can't win on the warmup round + if(level[id] + value > weaponNum && warmup > 0) + { + score[id] = get_level_goal(level[id],id) - 1; + + if(teamplay && effect_team && (team == 1 || team == 2) && teamScore[team] != score[id]) + teamplay_update_score(team,score[id],id,1); // direct + + return 0; + } + + level[id] += value; + if(!just_joined) levelsThisRound[id] += value; + + silenced[id] = 0; // for going to Glock->USP, for example + + // win??? + if(level[id] > weaponNum) + { + // already won, ignore this + if(won) return 1; + + // bot, and not allowed to win + if(is_user_bot(id) && get_pcvar_num(gg_ignore_bots) == 2 && !only_bots()) + { + change_level(id,-value,just_joined,_,1); // always score + return 1; + } + + // cap out score + score[id] = get_level_goal(level[id],id); + + if(teamplay && effect_team && (team == 1 || team == 2) && teamScore[team] != score[id]) + teamplay_update_score(team,score[id],id,1); // direct + + if(teamplay && effect_team && (team == 1 || team == 2) && teamLevel[team] != level[id]) + teamplay_update_level(team,level[id],id,1); // direct + + // crown the winner + win(id,lastKilled[id]); + + return 1; + } + + // set weapon based on it + get_level_weapon(level[id],lvlWeapon[id],23); + + // update the status display + new sdisplay = get_pcvar_num(gg_status_display); + if(sdisplay == STATUS_LEADERWPN) status_display(0); // to all + else if(sdisplay) status_display(id); // only to me + + new nade = equal(lvlWeapon[id],HEGRENADE); + + // I'm a leader! + if(warmup <= 0 && level[get_leader()] == level[id]) + { + new sound_cvar; + if(nade) sound_cvar = gg_sound_nade; + else if(equal(lvlWeapon[id],KNIFE)) sound_cvar = gg_sound_knife; + + if(sound_cvar) + { + // only play sound if we reached this level first + if(num_players_on_level(level[id]) == 1) play_sound_by_cvar(0,sound_cvar); + } + } + + // NOW play level up sounds, so that they potentially + // override the global "Player is on X level" sounds + + if(play_sounds) + { + // level up! + if(oldValue >= 0) play_sound_by_cvar(id,gg_sound_levelup); + + // level down :( + else play_sound_by_cvar(id,gg_sound_leveldown); + } + + // remember to modify changes + new oldTeamLevel; + if(team == 1 || team == 2) oldTeamLevel = teamLevel[team]; + + if(teamplay && effect_team && (team == 1 || team == 2) && teamLevel[team] != level[id]) + teamplay_update_level(team,level[id],id); + + // refresh menus + new player, menu; + for(player=1;player<=maxPlayers;player++) + { + if(!is_user_connected(player)) continue; + get_user_menu(player,menu,dummy[0]); + + if(menu == scores_menu) show_scores_menu(player); + else if(menu == level_menu) show_level_menu(player); + else if(player == id && menu == weapons_menu) show_weapons_menu(player); + } + + // make sure we don't have more than required now + new goal = get_level_goal(level[id],id); + if(score[id] >= goal) + { + score[id] = goal-1; // 1 under + + if(teamplay && effect_team && (team == 1 || team == 2) && teamScore[team] != score[id]) + teamplay_update_score(team,score[id],id,1); // direct + } + + new turbo = get_pcvar_num(gg_turbo); + + // give weapon right away? + if((turbo || just_joined) && is_user_alive(id)) give_level_weapon(id); + else show_progress_display(id); // still show display anyway + + // update the leader display (cvar check done in that function) + if(!just_joined) + { + remove_task(TASK_LEADER_DISPLAY); + show_leader_display(); + + new Float:lead_sounds = get_pcvar_float(gg_lead_sounds); + if(lead_sounds > 0.0 && (!teamplay || effect_team)) play_lead_sounds(id,oldLevel,lead_sounds); + } + + new vote_setting = get_pcvar_num(gg_vote_setting), map_iterations = get_pcvar_num(gg_map_iterations); + + // the level to start a map vote on + if(!voted && warmup <= 0 && vote_setting > 0 + && level[id] >= weaponNum - (vote_setting - 1) + && mapIteration >= map_iterations && map_iterations > 0) + { + new mapCycleFile[64]; + get_gg_mapcycle_file(mapCycleFile,63); + + // start map vote? + if(!mapCycleFile[0] || !file_exists(mapCycleFile)) + { + voted = 1; + + // check for a custom vote + new custom[256]; + get_pcvar_string(gg_vote_custom,custom,255); + + if(custom[0]) server_cmd(custom); + else start_mapvote(); + } + } + + // grab my name + static name[32]; + if(!teamplay) get_user_name(id,name,31); + + // only calculate position if we didn't just join + if(!just_joined && show_message) + { + if(teamplay) + { + // is the first call for this level change + if((team == 1 || team == 2) && teamLevel[team] != oldTeamLevel) + { + new leaderLevel, numLeaders, leader = teamplay_get_lead_team(leaderLevel,numLeaders); + + // tied + if(numLeaders > 1) gungame_print(0,id,1,"%L",LANG_PLAYER_C,"TIED_LEADER_TEAM",leaderLevel,teamLvlWeapon[team]); + + // leading + else if(leader == team) + { + get_user_team(id,name,9); + gungame_print(0,id,1,"%L",LANG_PLAYER_C,"LEADING_ON_LEVEL_TEAM",name,leaderLevel,teamLvlWeapon[team]); + } + + // trailing + else + { + get_user_team(id,name,9); + gungame_print(0,id,1,"%L",LANG_PLAYER_C,"TRAILING_ON_LEVEL_TEAM",name,teamLevel[team],teamLvlWeapon[team]); + } + } + } + else + { + new leaderLevel, numLeaders, leader = get_leader(leaderLevel,numLeaders); + + // tied + if(level[id] == leaderLevel && numLeaders > 1 && level[id] > 1) + { + if(numLeaders == 2) + { + new otherLeader; + if(leader != id) otherLeader = leader; + else + { + new player; + for(player=1;player<=maxPlayers;player++) + { + if(is_user_connected(player) && level[player] == leaderLevel && player != id) + { + otherLeader = player; + break; + } + } + } + + static otherName[32]; + get_user_name(otherLeader,otherName,31); + + gungame_print(0,id,1,"%L",LANG_PLAYER_C,"TIED_LEADER_ONE",name,leaderLevel,lvlWeapon[id],otherName); + } + else + { + static numWord[16], digiWord[3], lang[3]; + num_to_word(numLeaders-1,numWord,15); + trim(numWord); + formatex(digiWord,2,"%i",numLeaders-1); + + new player; + for(player=1;player<=maxPlayers;player++) + { + if(is_user_connected(player)) + { + // use word for english, digit otherwise + get_user_info(player,"lang",lang,2); + gungame_print(player,id,1,"%L",player,"TIED_LEADER_MULTI",name,leaderLevel,lvlWeapon[id],equali(lang,"en") ? numWord : digiWord); + } + } + } + } + + // I'M THE BEST!!!!!!! + else if(leader == id && level[id] > 1) + { + gungame_print(0,id,1,"%L",LANG_PLAYER_C,"LEADING_ON_LEVEL",name,level[id],lvlWeapon[id]); + } + } + } + + // teamplay, didn't grab name yet + if(teamplay) get_user_name(id,name,31); + + // triple bonus! + if(levelsThisRound[id] == 3) + { + new triple_on = get_pcvar_num(gg_triple_on); + + if(triple_on == 2 || (triple_on && !turbo)) + { + star[id] = 1; + + new sound[64]; + get_pcvar_string(gg_sound_triple,sound,63); + + fm_set_user_maxspeed(id,fm_get_user_maxspeed(id)*1.5); + + if(sound[0]) engfunc(EngFunc_EmitSound,id,CHAN_VOICE,sound[6],VOL_NORM,ATTN_NORM,0,PITCH_NORM); // ignore sound/ prefix + else engfunc(EngFunc_EmitSound,id,CHAN_VOICE,sound,VOL_NORM,ATTN_NORM,0,PITCH_NORM); + + set_pev(id,pev_effects,pev(id,pev_effects) | EF_BRIGHTLIGHT); + fm_set_rendering(id,kRenderFxGlowShell,255,255,100,kRenderNormal,1); + fm_set_user_godmode(id,1); + + message_begin(MSG_BROADCAST,SVC_TEMPENTITY); + write_byte(22); // TE_BEAMFOLLOW + write_short(id); // entity + write_short(trailSpr); // sprite + write_byte(20); // life + write_byte(10); // width + write_byte(255); // r + write_byte(255); // g + write_byte(100); // b + write_byte(100); // brightness + message_end(); + + gungame_print(0,id,1,"%L",LANG_PLAYER_C,"TRIPLE_LEVELED",name); + set_task(10.0,"end_star",TASK_END_STAR+id); + } + } + + new ff_auto = get_pcvar_num(gg_ff_auto), ff = get_pcvar_num(mp_friendlyfire); + + // turn on FF? + if(ff_auto && !ff && nade) + { + server_cmd("mp_friendlyfire 1"); // so console is notified + set_pcvar_num(mp_friendlyfire,1); // so it changes instantly + + gungame_print(0,0,1,"%L",LANG_PLAYER_C,"FRIENDLYFIRE_ON"); + + client_cmd(0,"spk ^"%s^"",BRASS_BELL_SOUND); + } + + // turn off FF? + else if(ff_auto && ff) + { + new keepFF, player; + + for(player=1;player<=maxPlayers;player++) + { + if(equal(lvlWeapon[player],HEGRENADE) || equal(lvlWeapon[player],KNIFE)) + { + keepFF = 1; + break; + } + } + + // no one is on nade or knife level anymore + if(!keepFF) + { + server_cmd("mp_friendlyfire 0"); // so console is notified + set_pcvar_num(mp_friendlyfire,0); // so it changes instantly + } + } + + // some bots are actually allergic to the chemicals used in HE grenades + if(is_user_bot(id) && get_pcvar_num(gg_bots_skipnade) && !get_pcvar_num(gg_teamplay) && equal(lvlWeapon[id],HEGRENADE)) + change_level(id,1); + + return 1; +} + +// forces a player to a level, skipping a lot of important stuff. +// it's assumed that this is used as a result of "id" being leveled +// up because his teammate leveled up in teamplay. +stock set_level_noifandsorbuts(id,newLevel,play_sounds=1) +{ + // okay, this is our only but + if(!is_user_connected(id)) return 0; + + new oldLevel = level[id]; + + level[id] = newLevel; + get_level_weapon(level[id],lvlWeapon[id],23); + + if(play_sounds) + { + // level up! + if(newLevel >= oldLevel) play_sound_by_cvar(id,gg_sound_levelup); + + // level down :( + else play_sound_by_cvar(id,gg_sound_leveldown); + } + + // refresh menus + new player, menu; + for(player=1;player<=maxPlayers;player++) + { + if(!is_user_connected(player)) continue; + get_user_menu(player,menu,dummy[0]); + + if(menu == scores_menu) show_scores_menu(player); + else if(menu == level_menu) show_level_menu(player); + } + + // give weapon right away? + if(get_pcvar_num(gg_turbo) && is_user_alive(id)) give_level_weapon(id); + else show_progress_display(id); // still show display anyway + + return 1; +} + +// get rid of a player's star +public end_star(taskid) +{ + new id = taskid - TASK_END_STAR; + if(!star[id]) return; + + star[id] = 0; + //gungame_print(id,0,1,"Your star has run out!"); + + if(is_user_alive(id)) + { + fm_set_user_maxspeed(id,fm_get_user_maxspeed(id)/1.5); + engfunc(EngFunc_EmitSound,id,CHAN_VOICE,"common/null.wav",VOL_NORM,ATTN_NORM,0,PITCH_NORM); // stop sound + set_pev(id,pev_effects,pev(id,pev_effects) & ~EF_BRIGHTLIGHT); + fm_set_rendering(id); + fm_set_user_godmode(id,0); + + message_begin(MSG_BROADCAST,SVC_TEMPENTITY); + write_byte(99); // TE_KILLBEAM + write_short(id); // entity + message_end(); + } +} + +// give a player a weapon based on his level +stock give_level_weapon(id,notify=1,verify=1) +{ + if(!is_user_alive(id) || level[id] <= 0) return 0; + + // not warming up, didn't just win + if(notify && warmup <= 0 && level[id] > 0 && level[id] <= weaponNum) + show_progress_display(id); + + // stop attacks from bleeding over into the new weapon + //client_cmd(id,"-attack;-attack2"); + + // give CTs defuse kits on bomb maps + if(bombMap && !get_pcvar_num(gg_block_objectives) && cs_get_user_team(id) == CS_TEAM_CT) + cs_set_user_defuse(id,1); + + new armor = get_pcvar_num(gg_give_armor), helmet = get_pcvar_num(gg_give_helmet); + + // giving armor and helmets away like candy + if(helmet) cs_set_user_armor(id,armor,CS_ARMOR_VESTHELM); + else cs_set_user_armor(id,armor,CS_ARMOR_KEVLAR); + + new oldWeapon = get_user_weapon(id); + + static wpnName[24]; + new weapons = pev(id,pev_weapons), wpnid, alright, myCategory, hasMain; + + new ammo = get_pcvar_num(gg_ammo_amount), + knife_elite = get_pcvar_num(gg_knife_elite), + pickup_others = (get_pcvar_num(gg_pickup_others) && (!knife_elite || !levelsThisRound[id])), + mainCategory = get_weapon_category(_,lvlWeapon[id]); + + new hasGlock, hasSmoke, hasFlash, + nade_level = (equal(lvlWeapon[id],HEGRENADE)), + nade_glock = get_pcvar_num(gg_nade_glock), + nade_smoke = get_pcvar_num(gg_nade_smoke), + nade_flash = get_pcvar_num(gg_nade_flash); + + new melee_only = ((warmup > 0 && warmupWeapon[0] && equal(warmupWeapon,KNIFE)) || (knife_elite && levelsThisRound[id] > 0)); + + // remove stuff first + for(wpnid=1;wpnid<31;wpnid++) + { + // don't have this, or it's the C4 + if(!(weapons & (1< 0) cs_set_user_bpammo(id,wpnid,ammo); + else cs_set_user_bpammo(id,wpnid,maxAmmo[wpnid]); + } + } + else cs_set_user_bpammo(id,wpnid,1); // grenades + } + + // we should probably remove this weapon + else + { + myCategory = get_weapon_category(wpnid); + + // pistol in the way of glock, remove it + if(nade_level && nade_glock && myCategory == 2) ham_strip_weapon(id,wpnName); + else + { + // we aren't allowed to have any other weapons, + // or this is in the way of the weapon that I want. + if(!pickup_others || myCategory == mainCategory) + ham_strip_weapon(id,wpnName); + } + }/*not alright*/ + }/*not a knife*/ + }/*wpnid for-loop*/ + + // I should have a weapon but don't + if(lvlWeapon[id][0] && !hasMain) + { + formatex(wpnName,23,"weapon_%s",lvlWeapon[id]); + + // give a player his weapon + ham_give_weapon(id,wpnName); + + remove_task(TASK_REFRESH_NADE+id); + + if(!equal(lvlWeapon[id],HEGRENADE) && !equal(lvlWeapon[id],KNIFE)) + { + wpnid = get_weaponid(wpnName); + + if(!wpnid) log_amx("INVALID WEAPON ID FOR ^"%s^"",lvlWeapon[id]); + else + { + if(ammo > 0) cs_set_user_bpammo(id,wpnid,ammo); + else cs_set_user_bpammo(id,wpnid,maxAmmo[wpnid]); + } + } + } + + if(nade_level) + { + if(nade_glock && !hasGlock) + { + ham_give_weapon(id,WEAPON_GLOCK18); + cs_set_user_bpammo(id,CSW_GLOCK18,50); + } + if(nade_smoke && !hasSmoke) ham_give_weapon(id,"weapon_smokegrenade"); + if(nade_flash && !hasFlash) ham_give_weapon(id,"weapon_flashbang"); + } + + new weapon = get_user_weapon(id); + + // using a knife probably + if(melee_only || equal(lvlWeapon[id],KNIFE)) + { + // draw knife on knife warmup and knife level... this is so that + // the terrorist that spawns with the C4 won't be spawned with his + // C4 selected, but instead his knife + engclient_cmd(id,WEAPON_KNIFE); + client_cmd(id,WEAPON_KNIFE); + } + + // switch back to knife if we had it out. also don't do this when called + // by the verification check, because their old weapon will obviously be + // a knife and they will want to use their new one. + else if(verify /*&& !notify*/ && oldWeapon) + { + get_weaponname(oldWeapon,wpnName,23); + if(wpnName[0] && equal(wpnName,WEAPON_KNIFE)) + { + engclient_cmd(id,wpnName); + client_cmd(id,wpnName); + } + else if(lvlWeapon[id][0]) + { + formatex(wpnName,23,"weapon_%s",lvlWeapon[id]); + engclient_cmd(id,wpnName); + client_cmd(id,wpnName); + } + } + + // switch to glock for nade level + else if(weapon != CSW_KNIFE && equal(lvlWeapon[id],HEGRENADE) && nade_glock) + { + engclient_cmd(id,WEAPON_GLOCK18); + client_cmd(id,WEAPON_GLOCK18); + } + + // otherwise, switch to our new weapon + else if(lvlWeapon[id][0]) + { + formatex(wpnName,23,"weapon_%s",lvlWeapon[id]); + engclient_cmd(id,wpnName); + client_cmd(id,wpnName); + } + + // make sure that we get this... + if(verify) + { + remove_task(TASK_VERIFY_WEAPON+id); + set_task(1.0,"verify_weapon",TASK_VERIFY_WEAPON+id); + } + + // remember burst or silenced status + if(silenced[id]) + { + if(equal(lvlWeapon[id],"usp") || equal(lvlWeapon[id],"m4a1")) + { + new wEnt = get_weapon_ent(id,_,lvlWeapon[id]); + if(pev_valid(wEnt)) + { + cs_set_weapon_silen(wEnt,1,0); + + // play draw with silencer animation + if(lvlWeapon[id][0] == 'u') set_pev(id,pev_weaponanim,USP_DRAWANIM); + else set_pev(id,pev_weaponanim,M4A1_DRAWANIM); + } + } + else if(equal(lvlWeapon[id],"glock18") || equal(lvlWeapon[id],"famas")) + { + new wEnt = get_weapon_ent(id,_,lvlWeapon[id]); + if(pev_valid(wEnt)) cs_set_weapon_burst(wEnt,1); + } + + silenced[id] = 0; + } + + return 1; +} + +// verify that we have our stupid weapon +public verify_weapon(taskid) +{ + new id = taskid-TASK_VERIFY_WEAPON; + + if(!is_user_alive(id)) return; + + static wpnName[24]; + formatex(wpnName,23,"weapon_%s",lvlWeapon[id]); + new wpnid = get_weaponid(wpnName); + + if(!wpnid) return; + + // we don't have it, but we want it + if(!user_has_weapon(id,wpnid)) give_level_weapon(id,0,0); +} + +// crown a winner +win(winner,loser) +{ + // we have an invalid winner here + if(won || !is_user_connected(winner) || !can_score(winner)) + return; + + won = 1; + roundEnded = 1; + + server_cmd("sv_alltalk 1"); + client_cmd(0,"stopsound;speak null;mp3 stop"); + play_sound(0,winSounds[currentWinSound]); + + new map_iterations = get_pcvar_num(gg_map_iterations), restart, + player, Float:chattime = get_cvar_float("mp_chattime"); + + // final playthrough, get ready for next map + if(mapIteration >= map_iterations && map_iterations > 0) + { + set_nextmap(); + set_task(floatmax(chattime,2.5),"goto_nextmap"); + + // as of GG1.16, we always send a non-emessage intermission, because + // other map changing plugins (as well as StatsMe) intercepting it + // was causing problems. + + // as of GG1.20, we no longer do this because it closes the MOTD. + + // as of GG2.10, we use finale, which freezes players like the + // intermission but doesn't otherwise do any intermission stuff. + message_begin(MSG_ALL,SVC_FINALE); + write_string(""); // although you could put a nice typewrite-style centersay here + message_end(); + + // godmode everyone + new fullName[32]; + for(player=1;player<=maxPlayers;player++) + { + if(!is_user_alive(player)) continue; + + // finale won't stop players from shooting technically + formatex(fullName,31,"weapon_%s",lvlWeapon[player]); + ham_strip_weapon(player,fullName); + + fm_set_user_godmode(player,1); + } + } + + // get ready to go again!! + else + { + restart = 1; + + // freeze and godmode everyone + for(player=1;player<=maxPlayers;player++) + { + if(!is_user_connected(player)) continue; + + client_cmd(player,"-attack;-attack2"); + set_pev(player,pev_flags,pev(player,pev_flags) | FL_FROZEN); + fm_set_user_godmode(player,1); + set_pev(player,pev_viewmodel2,""); + } + } + + emessage_begin(MSG_ALL,gmsgHideWeapon); + ewrite_byte((1<<0)|(1<<1)|(1<<3)|(1<<4)|(1<<5)|(1<<6)); // can't use (1<<2) or text disappears + emessage_end(); + + emessage_begin(MSG_ALL,gmsgCrosshair); + ewrite_byte(0); // hide + emessage_end(); + + new winnerName[32], i, teamplay = get_pcvar_num(gg_teamplay); + if(teamplay) get_user_team(winner,winnerName,9); + else get_user_name(winner,winnerName,31); + + // old-fashioned + for(i=0;i<5;i++) + { + if(teamplay) gungame_print(0,winner,1,"%L!!",LANG_PLAYER_C,"WON_TEAM",winnerName); + else gungame_print(0,winner,1,"%L!",LANG_PLAYER_C,"WON",winnerName); + } + + // our new super function + stats_award_points(winner); + + // finally show it off + new winner_motd[64]; + get_pcvar_string(gg_winner_motd,winner_motd,63); + if(winner_motd[0] && winner_motd[0] != '0') + { + new params[66]; + params[0] = winner; + params[1] = loser; + copy(params[2],63,winner_motd); + set_task(1.0,"show_win_screen",_,params,65); + } + + // we can restart now (do it after calculations because points might get reset) + if(restart) + { + // delay it, because it will reset stuff + set_task(1.1,"restart_round",floatround(chattime-1.1)); + + set_task(floatmax(chattime-0.1,1.2),"restart_gungame",czero ? get_cvar_num("bot_stop") : 0); + set_task(floatmax(chattime+5.0,0.1),"stop_win_sound",currentWinSound); + + if(czero) server_cmd("bot_stop 1"); // freeze CZ bots + } +} + +// restart gungame, for the next map iteration +public restart_gungame(old_bot_stop_value) +{ + won = 0; + mapIteration++; + + /*new i; + for(i=0;i= 1200) // getting too close for comfort, cash in what we have and start a new query + { + motd[len] = ';'; + motd[len+1] = 0; + + // thread this to prevent weird connection errors??? only solution I could find + SQL_ThreadQuery(tuple,"sql_qhandler_dummy",motd); + + len = origLen = formatex(motd,1535,"INSERT INTO `%s` VALUES ",sqlPlayersTable); + } + + flags = 0; + team = _:cs_get_user_team(player); + + if(team == winningTeam) + { + flags |= WON; + if(player == winner) flags |= LASTKILL; + } + else if(team > 0 && team < 3) + { + flags |= LOST; + if(player == loser) flags |= LASTKILL; + } + + if(player == pointsExtraction[0][1]) flags |= NEWRECORD; + + get_gg_authid(player,playerAuthid,31); + get_user_name(player,playerName,31); + + // get new stats position + stats_clear_struct(playerStats[player]); + stats_get_position(player,playerAuthid,si); + + SQL_QuoteString(db,playerSafeName,63,playerName); + SQL_QuoteString(db,playerSafeAuthid,63,playerAuthid); + + len += formatex(motd[len],1535-len,"%s('%i','%s','%s','%i','%i','%s','%i','%i','%i','%i','%i','%i','%i','%i','%i','%i','%s')",(len != origLen) ? "," : "", + player,playerSafeAuthid,playerSafeName,team,level[player],lvlWeapon[player],flags,pointsExtraction[player][0],pointsExtraction[player][2],pointsExtraction[player][1],pointsExtraction[player][4],pointsExtraction[player][3],statsPosition[player][si],floatround(teamTimes[player][winningTeam-1]),floatround(teamTimes[player][losingTeam-1]),systime,serverip); + } + + // if we actually added someone + if(len > origLen) + { + motd[len] = ';'; + motd[len+1] = 0; + + query = SQL_PrepareQuery(db,motd); + SQL_ExecuteAndLog(query); + SQL_FreeHandle(query); + } + + // an actual web page + if(winner_motd[0] != '2') + { + new url[74], lang[3]; + for(player=1;player<=maxPlayers;player++) + { + if(!is_user_connected(player)) continue; + + get_user_info(player,"lang",lang,2); + + formatex(header,31,"%L",player,"WIN_MOTD_LINE1",winnerName); + formatex(url,73,"%s?i=%i&l=%s",winner_motd,player,lang); + + show_motd(player,url,header); + } + + return 1; + } + } +#endif + + if(sqlInit && stats_mode && is_user_connected(pointsExtraction[0][1])) + get_team_color(CsTeams:get_user_team(pointsExtraction[0][1]),streakChampColor,7); + + get_user_team(winner,winnerTeam,9); + get_user_name(winner,winnerName,31); + get_team_color(CsTeams:winningTeam,winnerColor,7); + get_number_suffix(pointsExtraction[winner][0],winnerWinSuffix,2); + get_number_suffix(pointsExtraction[winner][3],winnerStreakSuffix,2); + + // pointsExtraction[player][0] = total wins + // pointsExtraction[player][1] = points from this round + // pointsExtraction[player][2] = total points + // pointsExtraction[player][3] = current streak + // pointsExtraction[player][4] = previous record streak + + // pointsExtraction[0][0] = old record (0 = no old record) + // pointsExtraction[0][1] = record holder (-1 = old guy) + // pointsExtraction[0][2] = new record (0 = no new record) + + new loserName[32], loserColor[8]; + if(!loserDC) + { + get_user_name(loser,loserName,31); + get_team_color(cs_get_user_team(loser),loserColor,7); + } + else loserColor = "gray"; + + // figure out which lines to use based on stats split stuff + new key_LINE5A[20], key_LINE5B[20], key_LINE5C[20], key_LINE7A[20], key_LINE7B[20], key_LINE7C[20], + key_STREAK1[21], key_STREAK2[21], key_STREAK3[21], key_STREAK4[21]; + + if(stats_split) + { + if(teamplay) + { + key_LINE5A = "WIN_MOTD_LINE5A_TP"; + key_LINE5B = "WIN_MOTD_LINE5B_TP"; + key_LINE5C = "WIN_MOTD_LINE5C_TP"; + key_LINE7A = "WIN_MOTD_LINE7A_TP"; + key_LINE7B = "WIN_MOTD_LINE7B_TP"; + key_LINE7C = "WIN_MOTD_LINE7C_TP"; + key_STREAK1 = "WIN_MOTD_STREAK1_TP"; + key_STREAK2 = "WIN_MOTD_STREAK2_TP"; + key_STREAK3 = "WIN_MOTD_STREAK3_TP"; + key_STREAK4 = "WIN_MOTD_STREAK4_TP"; + } + else + { + key_LINE5A = "WIN_MOTD_LINE5A_REG"; + key_LINE5B = "WIN_MOTD_LINE5B_REG"; + key_LINE5C = "WIN_MOTD_LINE5C_REG"; + key_LINE7A = "WIN_MOTD_LINE7A_REG"; + key_LINE7B = "WIN_MOTD_LINE7B_REG"; + key_LINE7C = "WIN_MOTD_LINE7C_REG"; + key_STREAK1 = "WIN_MOTD_STREAK1_REG"; + key_STREAK2 = "WIN_MOTD_STREAK2_REG"; + key_STREAK3 = "WIN_MOTD_STREAK3_REG"; + key_STREAK4 = "WIN_MOTD_STREAK4_REG"; + } + } + else + { + key_LINE5A = "WIN_MOTD_LINE5A"; + key_LINE5B = "WIN_MOTD_LINE5B"; + key_LINE5C = "WIN_MOTD_LINE5C"; + key_LINE7A = "WIN_MOTD_LINE7A"; + key_LINE7B = "WIN_MOTD_LINE7B"; + key_LINE7C = "WIN_MOTD_LINE7C"; + key_STREAK1 = "WIN_MOTD_STREAK1"; + key_STREAK2 = "WIN_MOTD_STREAK2"; + key_STREAK3 = "WIN_MOTD_STREAK3"; + key_STREAK4 = "WIN_MOTD_STREAK4"; + } + + // format for each language + new player; + for(player=1;player<=maxPlayers;player++) + { + if(!is_user_connected(player)) continue; + + if(loserDC) formatex(loserName,31,"%L",player,"NO_ONE"); + formatex(header,31,"%L",player,"WIN_MOTD_LINE1",winnerName); + + len = formatex(motd,1535,""); + len += formatex(motd[len],1535-len,"

[GUNGAME] AMXX

"); + + len += formatex(motd[len],1535-len,"",winnerColor); + len += formatex(motd[len],1535-len,"

",winnerColor); + if(teamplay) len += formatex(motd[len],1535-len,"%L",player,"WIN_MOTD_LINE2",winnerTeam); else len += formatex(motd[len],1535-len,"%s",winnerName); + len += formatex(motd[len],1535-len,"
",winnerColor); + len += formatex(motd[len],1535-len,"%L

",player,"WIN_MOTD_LINE3"); + + if(!teamplay) len += formatex(motd[len],1535-len,"%L.

",player,"WIN_MOTD_LINE4A",lvlWeapon[winner],loserColor,loserName); + else len += formatex(motd[len],1535-len,"%L.

",player,"WIN_MOTD_LINE4B",lvlWeapon[winner],loserColor,loserName,winnerColor,winnerName); + + if(sqlInit && stats_mode == 1) + { + if(teamplay && timeratio) + { + // not enough for a win + if(teamTimes[winner][winningTeam-1]/(teamTimes[winner][winningTeam-1]+teamTimes[winner][losingTeam-1]) < 0.5) + len += formatex(motd[len],1535-len,"

"); + else + len += formatex(motd[len],1535-len,"%L

",player,key_LINE5A,winnerColor,winnerName,pointsExtraction[winner][0],winnerWinSuffix,pointsExtraction[winner][3],winnerStreakSuffix,pointsExtraction[winner][4]); + + // no play time + if(teamTimes[player][winningTeam-1] < 1.0 && teamTimes[player][losingTeam-1] < 1.0) + len += formatex(motd[len],1535-len,"%L
",player,"WIN_MOTD_LINE6",0); + else + len += formatex(motd[len],1535-len,"%L
",player,"WIN_MOTD_LINE6",floatround(teamTimes[player][winningTeam-1]/(teamTimes[player][winningTeam-1]+teamTimes[player][losingTeam-1])*100.0)); + } + else len += formatex(motd[len],1535-len,"%L

",player,key_LINE5A,winnerColor,winnerName,pointsExtraction[winner][0],winnerWinSuffix,pointsExtraction[winner][3],winnerStreakSuffix,pointsExtraction[winner][4]); + + // we won somehow + if( (!teamplay && winner == player) || (teamplay && !timeratio && winningTeam == _:cs_get_user_team(player)) || + (teamplay && timeratio && teamTimes[player][winningTeam-1]/(teamTimes[player][winningTeam-1]+teamTimes[player][losingTeam-1]) >= 0.5) ) + { + get_number_suffix(pointsExtraction[player][3],myStreakSuffix,2); + len += formatex(motd[len],1535-len,"%L
",player,key_LINE7A,pointsExtraction[player][0],pointsExtraction[player][3],myStreakSuffix,pointsExtraction[player][4]); + } + + // we didn't get a win + else len += formatex(motd[len],1535-len,"%L

",player,key_LINE7B,pointsExtraction[player][0]); + + } + else if(sqlInit && stats_mode == 2) + { + if(teamplay && timeratio) + { + // winner didn't play enough to get a win + if(teamTimes[winner][winningTeam-1]/(teamTimes[winner][winningTeam-1]+teamTimes[winner][losingTeam-1]) < 0.5) + len += formatex(motd[len],1535-len,"%L

",player,key_LINE5B,winnerColor,winnerName,pointsExtraction[winner][2]); + else + len += formatex(motd[len],1535-len,"%L

",player,key_LINE5C,winnerColor,winnerName,pointsExtraction[winner][0],winnerWinSuffix,pointsExtraction[winner][2],pointsExtraction[winner][3],winnerStreakSuffix,pointsExtraction[winner][4]); + + // no play time + if(teamTimes[player][winningTeam-1] < 1.0 && teamTimes[player][losingTeam-1] < 1.0) + len += formatex(motd[len],1535-len,"%L
",player,"WIN_MOTD_LINE6",0); + else + len += formatex(motd[len],1535-len,"%L
",player,"WIN_MOTD_LINE6",floatround(teamTimes[player][winningTeam-1]/(teamTimes[player][winningTeam-1]+teamTimes[player][losingTeam-1])*100.0)); + } + else len += formatex(motd[len],1535-len,"%L

",player,key_LINE5C,winnerColor,winnerName,pointsExtraction[winner][0],winnerWinSuffix,pointsExtraction[winner][2],pointsExtraction[winner][3],winnerStreakSuffix,pointsExtraction[winner][4]); + + len += formatex(motd[len],1535-len,"%L<%s>",player,key_LINE7C,pointsExtraction[player][1],pointsExtraction[player][2],pointsExtraction[player][0],(pointsExtraction[player][3]) ? "p" : "p"); + + if(pointsExtraction[player][3]) + { + get_number_suffix(pointsExtraction[player][3],myStreakSuffix,2); + len += formatex(motd[len],1535-len,"%L
",player,key_STREAK1,pointsExtraction[player][3],myStreakSuffix,pointsExtraction[player][4]); + } + } + else len += formatex(motd[len],1535-len,"

"); + + if(sqlInit && stats_mode) + { + if(!pointsExtraction[player][3] && pointsExtraction[player][4]) // I'm not on a streak, but I do have a record + { + len += formatex(motd[len],1535-len,"%L
",player,key_STREAK2,pointsExtraction[player][4]); + } + + if(pointsExtraction[0][1] == -1) // champion is the previous record holder + { + // there actually was a previous record + if(pointsExtraction[0][0]) len += formatex(motd[len],1535-len,"%L

",player,key_STREAK3,pointsExtraction[0][0],spareName); + } + else len += formatex(motd[len],1535-len,"%L

",player,key_STREAK4,streakChampColor,spareName,pointsExtraction[0][2]); + } + + if(iterations > 0) + { + if(roundsleft <= 0) len += formatex(motd[len],1535-len,"%L",player,"WIN_MOTD_LINE8A",nextmap); + else if(roundsleft == 1) len += formatex(motd[len],1535-len,"%L",player,"WIN_MOTD_LINE8B"); + else len += formatex(motd[len],1535-len,"%L",player,"WIN_MOTD_LINE8C",roundsleft); + } + + show_motd(player,motd,header); + } + + return 1; +} + +//********************************************************************** +// TEAMPLAY FUNCTIONS +//********************************************************************** + +// change the score of a team +stock teamplay_update_score(team,newScore,exclude=0,direct=0) +{ + if(team != 1 && team != 2) return; + + teamScore[team] = newScore; + + new player, sdisplay = get_pcvar_num(gg_status_display); + for(player=1;player<=maxPlayers;player++) + { + if(is_user_connected(player) && player != exclude && _:cs_get_user_team(player) == team) + { + if(direct) + { + score[player] = newScore; + if(sdisplay == STATUS_KILLSLEFT || sdisplay == STATUS_KILLSDONE) + status_display(player); + } + else change_score(player,newScore-score[player],0); // don't refill + } + } +} + +// change the level of a team +stock teamplay_update_level(team,newLevel,exclude=0,direct=1) +{ + if(team != 1 && team != 2) return; + + teamLevel[team] = newLevel; + get_level_weapon(teamLevel[team],teamLvlWeapon[team],23); + + new player; + for(player=1;player<=maxPlayers;player++) + { + if(is_user_connected(player) && player != exclude && _:cs_get_user_team(player) == team) + { + //if(direct) level[player] = newLevel; + if(direct) set_level_noifandsorbuts(player,newLevel); + else change_level(player,newLevel-level[player],_,_,1); // always score + } + } +} + +// play the taken/tied/lost lead sounds +public teamplay_play_lead_sounds(id,oldLevel,Float:playDelay) +{ + // both teams not initialized yet + if(!teamLevel[1] || !teamLevel[2]) return; + + // id: the player whose level changed + // oldLevel: his level before it changed + // playDelay: how long to wait until we play id's sounds + + // warmup or game over, no one cares + if(warmup > 0 || won) return; + + // no level change + if(level[id] == oldLevel) return; + + new team = _:cs_get_user_team(id), otherTeam = (team == 1) ? 2 : 1, thisTeam, player, params[2]; + if(team != 1 && team != 2) return; + + new leaderLevel, numLeaders, leader = teamplay_get_lead_team(leaderLevel,numLeaders); + + // this team is leading + if(leader == team) + { + // the other team here? + if(numLeaders > 1) + { + params[1] = gg_sound_tiedlead; + + // play to both teams + for(player=1;player<=maxPlayers;player++) + { + if(!is_user_connected(player)) continue; + + thisTeam = _:cs_get_user_team(player); + if(thisTeam == team || thisTeam == otherTeam) + { + params[0] = player; + remove_task(TASK_PLAY_LEAD_SOUNDS+player); + set_task((thisTeam == team) ? playDelay : 0.1,"play_sound_by_cvar_task",TASK_PLAY_LEAD_SOUNDS+player,params,2); + } + } + } + + // just us, we are the winners! + else + { + // did we just pass the other team? + if(level[id] > oldLevel && teamLevel[otherTeam] == oldLevel) + { + // play to both teams (conditional) + for(player=1;player<=maxPlayers;player++) + { + if(!is_user_connected(player)) continue; + + thisTeam = _:cs_get_user_team(player); + + if(thisTeam == team) params[1] = gg_sound_takenlead; + else if(thisTeam == otherTeam) params[1] = gg_sound_lostlead; + else continue; + + params[0] = player; + remove_task(TASK_PLAY_LEAD_SOUNDS+player); + set_task((thisTeam == team) ? playDelay : 0.1,"play_sound_by_cvar_task",TASK_PLAY_LEAD_SOUNDS+player,params,2); + } + } + } + } + + // WAS this team on the leader level? + else if(oldLevel == leaderLevel) + { + // play to entire team + for(player=1;player<=maxPlayers;player++) + { + if(!is_user_connected(player)) continue; + + thisTeam = _:cs_get_user_team(player); + + if(thisTeam == team) params[1] = gg_sound_lostlead; + else if(thisTeam == otherTeam) params[1] = gg_sound_takenlead; + else continue; + + params[0] = player; + remove_task(TASK_PLAY_LEAD_SOUNDS+player); + set_task((thisTeam == team) ? playDelay : 0.1,"play_sound_by_cvar_task",TASK_PLAY_LEAD_SOUNDS+player,params,2); + } + } +} + +// find the highest level team and such +stock teamplay_get_lead_team(&retLevel=0,&retNumLeaders=0,&retRunnerUp=0) +{ + new leader, numLeaders, runnerUp; + + if(teamLevel[1] >= teamLevel[2]) leader = 1; + else leader = 2; + + if(teamLevel[1] == teamLevel[2]) numLeaders = 2; + else + { + numLeaders = 1; + runnerUp = (leader == 1) ? 2 : 1; + } + + retLevel = teamLevel[leader]; + retNumLeaders = numLeaders; + retRunnerUp = runnerUp; + + return leader; +} + +// gets the team's level goal without a player passed +teamplay_get_team_goal(team) +{ + if(team != 1 && team != 2) return 0; + + new player; + for(player=1;player<=maxPlayers;player++) + { + if(is_user_connected(player) && _:cs_get_user_team(player) == team) + return get_level_goal(teamLevel[team],player); + } + + return 0; +} + +//********************************************************************** +// AUTOVOTE FUNCTIONS +//********************************************************************** + +// start the autovote +public autovote_start() +{ + // vote in progress + if(autovotes[0] || autovotes[1] || autovotes[2] || task_exists(TASK_AUTOVOTE_RESULT)) return 0; + + // if autovote_mode < 0, we haven't actually checked it yet + if(autovote_mode < 0) + { + new info[6]; + get_localinfo("gg_av_iter",info,5); + new iter = str_to_num(info); + + new rotation[32]; + get_pcvar_string(gg_autovote_mode,rotation,31); + new amount = str_count(rotation,',')+1; + + if(iter <= 0 || iter > amount) + { + iter = 1; + set_localinfo("gg_av_iter","1"); + } + + // no rotation, just use the given value + if(amount <= 1) + { + if(iter != 1) set_localinfo("gg_av_iter","1"); + autovote_mode = str_to_num(rotation); + } + else + { + for(new i=1;i<=amount;i++) + { + if(contain(rotation,",") != -1) + { + strtok(rotation,info,5,rotation,31,','); + if(i == iter) // this is the one we're looking for + { + autovote_mode = str_to_num(info); + break; + } + } + else // we've stripped away everything else and are left with the last one, so use it + { + autovote_mode = str_to_num(rotation); + break; + } + } + + iter++; + if(iter > amount) iter = 1; + num_to_str(iter,info,5); + set_localinfo("gg_av_iter",info); + } + } + + // turns out it's disabled + if(autovote_mode <= 0) return 0; + + new Float:autovote_time = get_pcvar_float(gg_autovote_time); + + new i; + for(i=1;i<=maxPlayers;i++) + { + if(!is_user_connected(i)) continue; + + switch(autovote_mode) + { + case 1: + { + formatex(menuText,511,"\y%L^n^n\w1. %L^n2. %L^n^n0. %L",i,"PLAY_GUNGAME",i,"YES",i,"NO",i,"CANCEL"); + show_menu(i,MENU_KEY_1|MENU_KEY_2|MENU_KEY_0,menuText,floatround(autovote_time),"autovote_menu"); + } + case 2: + { + formatex(menuText,511,"\y%L^n^n\w1. %L^n2. %L^n^n0. %L",i,"PLAY_GUNGAME",i,"YES_TEAMPLAY",i,"YES_REGULAR",i,"CANCEL"); + show_menu(i,MENU_KEY_1|MENU_KEY_2|MENU_KEY_0,menuText,floatround(autovote_time),"autovote_menu"); + } + default: + { + formatex(menuText,511,"\y%L^n^n\w1. %L^n2. %L^n3. %L^n^n0. %L",i,"PLAY_GUNGAME",i,"YES_TEAMPLAY",i,"YES_REGULAR",i,"NO",i,"CANCEL"); + show_menu(i,MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_0,menuText,floatround(autovote_time),"autovote_menu"); + } + } + } + + gungame_print(0,0,1,"%L",LANG_PLAYER_C,"VOTING_STARTED"); + set_task(autovote_time,"autovote_result",TASK_AUTOVOTE_RESULT); + + return 1; +} + +// take in votes +public autovote_menu_handler(id,key) +{ + switch(key) + { + case 0: // 1. + { + /* MODE 1- YES + MODE 2- YES_TEAMPLAY + MODE 3- YES_TEAMPLAY */ + + autovotes[0]++; + } + case 1: // 2. + { + /* MODE 1- NO + MODE 2- YES_REGULAR + MODE 3- YES_REGULAR */ + + if(autovote_mode == 1) autovotes[2]++; + else autovotes[1]++; + } + case 2: // 3. + { + /* MODE 1- + MODE 2- + MODE 3- NO */ + + autovotes[2]++; + } + //case 9: 0. /* ALL MODES- CANCEL */ let menu close + } + + return PLUGIN_HANDLED; +} + +// calculate end of vote, some of this was thanks to VEN +public autovote_result() +{ + new vYes = autovotes[0] + autovotes[1], vNo = autovotes[2], vTotal = vYes + vNo, vSuccess, teamplay = get_pcvar_num(gg_teamplay), key[16]; + + switch(autovote_mode) + { + case 1: // this mode asks if they want to play GunGame, yes/no + { + if(vTotal) + { + if(float(vYes) / float(vTotal) >= get_pcvar_float(gg_autovote_ratio)) + vSuccess = 1; + + // the choice that changes the current game mode is the one that needs to meet the ratio. so if you are + // playing GunGame, at least however many people as defined by the ratio need to vote for it off to switch it, + // and vice-versa. + if( ( ggActive && (float(vNo) / float(vTotal)) < get_pcvar_float(gg_autovote_ratio)) + || (!ggActive && (float(vYes) / float(vTotal)) >= get_pcvar_float(gg_autovote_ratio)) ) + vSuccess = 1; // means that we will be playing GunGame + } + else if(ggActive) vSuccess = 1; + + if(vSuccess && !ggActive) + { + restart_round(5); + set_task(4.8,"toggle_gungame",TASK_TOGGLE_GUNGAME+TOGGLE_ENABLE); + } + else if(!vSuccess && ggActive) + { + restart_round(5); + set_task(4.8,"toggle_gungame",TASK_TOGGLE_GUNGAME+TOGGLE_DISABLE); + + set_pcvar_num(gg_enabled,0); + ggActive = 0; + } + + if(vSuccess && teamplay) key = "AUTOVOTE_RES1"; + else if(vSuccess && !teamplay) key = "AUTOVOTE_RES2"; + else key = "AUTOVOTE_RES3"; + + gungame_print(0,0,1,"%L %i %L - %i %L - %L :: %L",LANG_PLAYER_C,"PLAY_GUNGAME",vYes,LANG_PLAYER_C,"YES",vNo,LANG_PLAYER_C,"NO",LANG_PLAYER_C,"THE_RESULT",LANG_PLAYER_C,key); + } + case 2: // this mode asks if they want to play teamplay, yes/no + { + if(!ggActive) + { + restart_round(5); + set_task(4.8,"toggle_gungame",TASK_TOGGLE_GUNGAME+TOGGLE_ENABLE); + } + + if(vTotal) + { + // see above comment + if( ( teamplay && (float(autovotes[1]) / float(vTotal)) < get_pcvar_float(gg_autovote_ratio)) + || (!teamplay && (float(autovotes[0]) / float(vTotal)) >= get_pcvar_float(gg_autovote_ratio)) ) + vSuccess = 1; // means that we will be playing teamplay mode + } + else if(teamplay) vSuccess = 1; + + if(vSuccess) + { + if(!teamplay) + { + set_pcvar_num(gg_teamplay,1); + if(ggActive && warmup <= 0) restart_round(3); + + exec_gg_config_file(0,0); + exec_gg_config_file(1,0); + } + + set_task(4.9,"force_teamplay",1); + } + else if(!vSuccess) + { + if(teamplay) + { + set_pcvar_num(gg_teamplay,0); + if(ggActive && warmup <= 0) restart_round(3); + + exec_gg_config_file(0,0); + } + + set_task(4.9,"force_teamplay",0); + } + + if(vSuccess) key = "AUTOVOTE_RES1"; + else key = "AUTOVOTE_RES2"; + + gungame_print(0,0,1,"%L %i %L - %i %L - %L :: %L",LANG_PLAYER_C,"PLAY_GUNGAME",autovotes[0],LANG_PLAYER_C,"YES_TEAMPLAY",autovotes[1],LANG_PLAYER_C,"YES_REGULAR",LANG_PLAYER_C,"THE_RESULT",LANG_PLAYER_C,key); + } + default: // this mode asks if they want to play, teamplay/regular/no + { + if(vTotal) + { + // see above comment + if( ( ggActive && (float(vNo) / float(vTotal)) < get_pcvar_float(gg_autovote_ratio)) + || (!ggActive && (float(vYes) / float(vTotal)) >= get_pcvar_float(gg_autovote_ratio)) ) + vSuccess = 1; // means that we will be playing GunGame + } + else if(ggActive) vSuccess = 1; + + if(vSuccess) + { + if(!ggActive) + { + restart_round(5); + set_task(4.8,"toggle_gungame",TASK_TOGGLE_GUNGAME+TOGGLE_ENABLE); + } + + // pick a random value for teamplay if we need it, then see if we should be using it. + // use it in the case that we have a tie, and we are using random teamplay mode. + new rand_val = random_num(0,1); + new use_rand = (autovotes[0] == autovotes[1] && (teamplay == 2 || initTeamplayInt == 2)); + + if(autovotes[0] > autovotes[1] || (use_rand && rand_val == 1)) // more votes for teamplay + { + if(!teamplay) + { + set_pcvar_num(gg_teamplay,1); + if(ggActive && warmup <= 0) restart_round(3); + + exec_gg_config_file(0,0); + exec_gg_config_file(1,0); + } + + key = "AUTOVOTE_RES1"; + set_task(4.9,"force_teamplay",1); + } + else if(autovotes[0] < autovotes[1] || (use_rand && rand_val == 0)) // more votes for regular + { + if(teamplay) + { + set_pcvar_num(gg_teamplay,0); + if(ggActive && warmup <= 0) restart_round(3); + + exec_gg_config_file(0,0); + } + + key = "AUTOVOTE_RES2"; + set_task(4.9,"force_teamplay",0); + } + else // if equal, leave it be + { + if(teamplay) + { + key = "AUTOVOTE_RES1"; + set_task(4.9,"force_teamplay",1); + } + else + { + key = "AUTOVOTE_RES2"; + set_task(4.9,"force_teamplay",0); + } + } + } + else if(!vSuccess && ggActive) + { + restart_round(5); + set_task(4.8,"toggle_gungame",TASK_TOGGLE_GUNGAME+TOGGLE_DISABLE); + + set_pcvar_num(gg_enabled,0); + ggActive = 0; + } + + if(!vSuccess) key = "AUTOVOTE_RES3"; + gungame_print(0,0,1,"%L %i %L - %i %L - %i %L - %L :: %L",LANG_PLAYER_C,"PLAY_GUNGAME",autovotes[0],LANG_PLAYER_C,"YES_TEAMPLAY",autovotes[1],LANG_PLAYER_C,"YES_REGULAR",vNo,LANG_PLAYER_C,"NO",LANG_PLAYER_C,"THE_RESULT",LANG_PLAYER_C,key); + } + } + + autovotes[0] = 0; + autovotes[1] = 0; + autovotes[2] = 0; +} + +// force teamplay mode to what we want after a vote has been completed. +// otherwise, when switching from GunGame off to on, it will be overwritten by gungame.cfg. +public force_teamplay(teamplay) +{ + set_pcvar_num(gg_teamplay,teamplay); + + exec_gg_config_file(0,0); + if(teamplay) exec_gg_config_file(1,0); +} + +//********************************************************************** +// STAT FUNCTIONS +//********************************************************************** + +// clear out everything about our stats +stats_clear_all() +{ +#if !defined SQL + // destroy large array + if(statsArray) ArrayDestroy(statsArray); + + // destroy the two "pointer" arrays + if(statsPointers[0]) + { + ArrayDestroy(statsPointers[0]); + statsSize[0] = 0; + } + if(statsPointers[1]) + { + ArrayDestroy(statsPointers[1]); + statsSize[1] = 0; + } +#endif + + // clear out saved stats data for the players + for(new i=1;i<=maxPlayers;i++) + { + statsPosition[i][0] = 0; + statsPosition[i][1] = 0; + stats_clear_struct(playerStats[i]); + } + + // clear out saved stats data from the temp saves + for(new i=0;i= 12) + { + fseek(file,start_of_line+q,SEEK_SET); + fwrite_blocks(file,sfTimestamp,10,BLOCK_CHAR); // overwrite timestamp with current one + } + + break; + } + + fclose(file); + + return (q != 255); +} +#endif + +// we now have a super-duper function so that we only have to go through +// the stats file once, instead of rereading and rewriting it for every +// single player in a points match. +// +// also, timestamps are refreshed here, instead of every time you join. +public stats_award_points(winner) +{ + new stats_mode = get_pcvar_num(gg_stats_mode); + if(!sqlInit || !stats_mode) return; + + new teamplay = get_pcvar_num(gg_teamplay), winningTeam =_:cs_get_user_team(winner), + losingTeam = _:(!(winningTeam-1)) + 1, stats_ip = get_pcvar_num(gg_stats_ip), + timeratio = get_pcvar_num(gg_teamplay_timeratio), ignore_bots = get_pcvar_num(gg_ignore_bots); + + new si = get_gg_si(); + + new player, playerWins[32], playerPoints[32], playerStreak[32], playerAuthid[32][32], playerName[32][32], + playerTotalPoints[32], players[32], intStreak, playerNum, i, team, Float:time = get_gametime(), systime = get_systime(); + +#if defined SQL + new playerSafeName[32][64], playerSafeAuthid[32][64]; +#endif + + //new botid; + + get_players(players,playerNum); + for(i=0;i= 0.5) + { + flPoints *= winbonus; + wins = 1; + } + } + else + { + flPoints = float(level[player]) - 1.0; // calculate points and add + + // winner gets bonus points plus a win + if(player == winner || (teamplay && _:cs_get_user_team(player) == winningTeam)) + { + flPoints *= winbonus; + wins = 1; + } + } + + // unnecessary + if(flPoints < 0.5 && !wins) continue; + + playerWins[i] = wins; + playerPoints[i] = floatround(flPoints); + if(playerPoints[i] < 0) playerPoints[i] = 0; + } + } + + // regular wins teamplay (solo regular wins is above) + else if(teamplay) + { + for(i=0;i= 0.5) + playerWins[i] = 1; + } + } + } + + // + // START MANAGING STREAKS + // + + new streakToBeat = 0, streakChamp = -1; + +#if defined SQL + new champRowExists; + + // find current champion's info + query = SQL_PrepareQuery(db,"SELECT streak,name FROM `%s` WHERE type='%iR' AND serverip='%s' LIMIT 1;",sqlStreakTable,si,serverip); + if(SQL_ExecuteAndLog(query)) + { + if(SQL_NumResults(query)) + { + champRowExists = 1; + streakToBeat = SQL_ReadResult(query,0); + SQL_ReadResult(query,1,spareName,31); + } + } + SQL_FreeHandle(query); + + pointsExtraction[0][0] = streakToBeat; // record old record + pointsExtraction[0][1] = -1; // record champion + + new len, origLen; + + // form query to delete players who did not win this round from the cache + origLen = len = formatex(mkQuery,1535,"DELETE FROM `%s` WHERE type='%iC' AND serverip='%s' AND authid NOT IN (",sqlStreakTable,si,serverip); + for(i=0;i streakToBeat || (streakChamp != -1 && playerStreak[i] == streakToBeat && players[i] == winner)) + { + streakToBeat = playerStreak[i]; + streakChamp = i; + } + + // didn't find one with previous loop + if(playerStreak[i] == 1) // because of increment above, will be 1 at minimum + { + // insert a new row. note that the streak is inserted as 0 because it gets incremented below. + len += formatex(mkQuery[len],1535-len,"('%iC','%s','0','%s','%i','%s'),",si,playerSafeAuthid[i],playerSafeName[i],systime,serverip); + + // cash in if we get too close + if(len >= 1200) + { + mkQuery[len-1] = ';'; + mkQuery[len] = 0; + + query = SQL_PrepareQuery(db,mkQuery); + SQL_ExecuteAndLog(query); + SQL_FreeHandle(query); + + len = origLen = formatex(mkQuery,1535,"INSERT INTO `%s` VALUES ",sqlStreakTable); + } + } + } + } + + // if we have some leftover query + if(len > origLen) + { + mkQuery[len-1] = ';'; + mkQuery[len] = 0; + + query = SQL_PrepareQuery(db,mkQuery); + SQL_ExecuteAndLog(query); + SQL_FreeHandle(query); + } + + // update everyone's current streaks by +1 + query = SQL_PrepareQuery(db,"UPDATE `%s` SET streak=streak+1 WHERE type='%iC' AND serverip='%s';",sqlStreakTable,si,serverip); + SQL_ExecuteAndLog(query); + SQL_FreeHandle(query); + + // somebody beat the champion! + if(streakToBeat && streakChamp != -1) + { + if(champRowExists) query = SQL_PrepareQuery(db,"UPDATE `%s` SET authid='%s', streak='%i', name='%s', timestamp='%i' WHERE type='%iR' AND serverip='%s' LIMIT 1;",sqlStreakTable,playerSafeAuthid[streakChamp],streakToBeat,playerSafeName[streakChamp],systime,si,serverip); + else query = SQL_PrepareQuery(db,"INSERT INTO `%s` VALUES ('%iR','%s','%i','%s',%i,'%s');",sqlStreakTable,si,playerSafeAuthid[streakChamp],streakToBeat,playerSafeName[streakChamp],systime,serverip); + + SQL_ExecuteAndLog(query); + SQL_FreeHandle(query); + } +#else + // go through and copy down the list of players who got a win last round + new sfStreak[2][4], tempFileName[65], streakRecord[53], streakFile, stats_streak_file[64]; + get_pcvar_string(gg_stats_streak_file,stats_streak_file,63); + + if(file_exists(stats_streak_file)) + { + formatex(tempFileName,64,"%s2",stats_streak_file); // our temp file, append 2 + rename_file(stats_streak_file,tempFileName,1); // copy it over to the temp name (relative flag) + + // there are two basic types of lines: + // a record line, ie: 0R AUTHID STREAK NAME TIMESTAMP + // a "cache" line (a player with a running streak), ie: 0C AUTHID STREAK + // the first digit is the stats index (0 for regular, 1 for teamplay) + + new streakTempFile = fopen(tempFileName,"rt"); + streakFile = fopen(stats_streak_file,"wt"); + + // go through the old file, copy over unimportant lines, figure out the record, and distribute streaks + while(!feof(streakTempFile)) + { + fgets(streakTempFile,sfLineData,82); + if(!sfLineData[0]) continue; + + // not for our stats mode + if(str_to_num(sfLineData[0]) != si) + { + fprintf(streakFile,sfLineData); // just copy it over + continue; + } + + // this is the record + if(sfLineData[1] == 'R') + { + copy(streakRecord,82,sfLineData); // just save it for now + continue; + } + + // this is a cache (a player who got a win last game) + if(sfLineData[1] == 'C') + { + // use sfLineData[3] to skip characters "0C " (should be a tab) + strtok(sfLineData[3],sfAuthid,31,sfStreak[0],3,'^t'); // split them up + + for(i=0;i streakToBeat || (streakChamp != -1 && playerStreak[i] == streakToBeat && players[i] == winner)) + { + streakToBeat = playerStreak[i]; + streakChamp = i; + } + + if(streakFile) + { + fprintf(streakFile,"%iC^t%s^t%i",si,playerAuthid[i],playerStreak[i]); + fputc(streakFile,'^n'); + } + } + } + + if(streakFile) + { + if(streakToBeat) + { + if(streakChamp == -1) fprintf(streakFile,"%s",streakRecord); // no one here beat the champ, reprint old champ + else // otherwise, give the new guy credit + { + fprintf(streakFile,"%iR^t%s^t%i^t%s^t%i",si,playerAuthid[streakChamp],playerStreak[streakChamp],playerName[streakChamp],systime); + fputc(streakFile,'^n'); + } + } + + fclose(streakFile); + } +#endif + + // we have a new champion, record their stuff + if(streakChamp != -1) + { + pointsExtraction[0][1] = players[streakChamp]; // record champion + pointsExtraction[0][2] = playerStreak[streakChamp]; // record new record + copy(spareName,31,playerName[streakChamp]); + } + + // + // NOW GO THROUGH THE FILE + // + +#if defined SQL + new sfWins[2], sfPoints[2], sfStreak[2]; + + // do one query to grab all stats we need + len = formatex(mkQuery,1535,"SELECT authid,wins,points,streak,wins_tp,points_tp,streak_tp FROM `%s` WHERE serverip='%s' AND authid IN(",sqlTable,serverip); + for(i=0;i intStreak) intStreak = playerStreak[i]; + + // so we can reference this for the MOTD + playerTotalPoints[i] = playerPoints[i] + sfPoints[si]; + pointsExtraction[players[i]][0] = sfWins[si] + playerWins[i]; + pointsExtraction[players[i]][1] = playerPoints[i]; + pointsExtraction[players[i]][2] = playerTotalPoints[i]; + pointsExtraction[players[i]][3] = playerStreak[i]; + //pointsExtraction[players[i]][4] = intStreak; // uncomment to show new record + + // something worth updating + if(playerWins[i] || playerPoints[i]) + { + if(si == 0) query2 = SQL_PrepareQuery(db,"UPDATE `%s` SET wins=wins+'%i',name='%s',timestamp='%i',points=points+'%i',streak='%i' WHERE authid='%s' AND serverip='%s' LIMIT 1;",sqlTable,playerWins[i],playerSafeName[i],systime,playerPoints[i],intStreak,playerSafeAuthid[i],serverip); + else query2 = SQL_PrepareQuery(db,"UPDATE `%s` SET wins_tp=wins_tp+'%i',name='%s',timestamp='%i',points_tp=points_tp+'%i',streak_tp='%i' WHERE authid='%s' AND serverip='%s' LIMIT 1;",sqlTable,playerWins[i],playerSafeName[i],systime,playerPoints[i],intStreak,playerSafeAuthid[i],serverip); + + SQL_ExecuteAndLog(query2); + SQL_FreeHandle(query2); + } + + break; + } + + SQL_NextRow(query); + } + } + SQL_FreeHandle(query); + + len = 0; + + // go through again for people we didn't find + for(i=0;i= 1200) + { + mkQuery[len-1] = ';'; + mkQuery[len] = 0; + + query = SQL_PrepareQuery(db,mkQuery); + SQL_ExecuteAndLog(query); + SQL_FreeHandle(query); + + len = 0; + } + } + + // if we have some leftover query + if(len && len > origLen) + { + mkQuery[len-1] = ';'; + mkQuery[len] = 0; + + query = SQL_PrepareQuery(db,mkQuery); + SQL_ExecuteAndLog(query); + SQL_FreeHandle(query); + } +#else + new file; + get_pcvar_string(gg_stats_file,sfFile,63); + formatex(tempFileName,64,"%s2",sfFile); // our temp file, append 2 + + // create file if it does not exist (thanks Min2liz) + if(!file_exists(sfFile)) + { + file = fopen(sfFile,"wt"); + fclose(file); + } + + rename_file(sfFile,tempFileName,1); // copy over current stat file (relative flag) + if(!file_exists(tempFileName)) return; // rename failed? + + new sfWins[2][6], sfPoints[2][8], set[32], setNum; + + new tempFile = fopen(tempFileName,"rt"), lastSetNum; + file = fopen(sfFile,"wt"); + + // go through our old copy and rewrite entries + while(tempFile && file && !feof(tempFile)) + { + fgets(tempFile,sfLineData,111); + if(!sfLineData[0]) continue; + + // still have scores to add to + lastSetNum = setNum; + if(setNum < playerNum) + { + strtok(sfLineData,sfAuthid,31,sfLineData,111,'^t'); // isolate authid + + // see if we need to change this one + for(i=0;i intStreak) intStreak = playerStreak[i]; + + playerTotalPoints[i] = playerPoints[i] + str_to_num(sfPoints[si]); // AUTHID WINS NAME TIMESTAMP POINTS STREAK TPWINS TPPOINTS TPSTREAK + + if(si == 0) fprintf(file,"%s^t%i^t%s^t%i^t%i^t%i^t%i^t%i^t%i",sfAuthid,str_to_num(sfWins[0])+playerWins[i],playerName[i],systime,playerTotalPoints[i],intStreak,str_to_num(sfWins[1]),str_to_num(sfPoints[1]),str_to_num(sfStreak[1])); + else fprintf(file,"%s^t%i^t%s^t%i^t%i^t%i^t%i^t%i^t%i",sfAuthid,str_to_num(sfWins[0]),playerName[i],systime,str_to_num(sfPoints[0]),str_to_num(sfStreak[0]),str_to_num(sfWins[1])+playerWins[i],playerTotalPoints[i],intStreak); + + fputc(file,'^n'); + + // so we can reference this for the MOTD + pointsExtraction[players[i]][0] = str_to_num(sfWins[si])+playerWins[i]; + pointsExtraction[players[i]][1] = playerPoints[i]; + pointsExtraction[players[i]][2] = playerTotalPoints[i]; + pointsExtraction[players[i]][3] = playerStreak[i]; + //pointsExtraction[players[i]][4] = intStreak; // uncomment to show new record + + break; + } + } + + // nothing to replace, just copy it over (newline is already included) + if(lastSetNum == setNum) fprintf(file,"%s^t%s",sfAuthid,sfLineData); // we cut authid earlier + } + else fprintf(file,"%s",sfLineData); // nothing to replace, just copy it over (newline is already included) + } + + for(i=0;i<%s><%s>^" triggered ^"Won_GunGame^"",playerName[i],get_user_userid(players[i]),playerAuthid[i],teamName); + + if(stats_mode == 2 && playerPoints[i]) + { + log_message("^"%s<%i><%s><%s>^" triggered ^"GunGame_Points^" amount ^"%i^"",playerName[i],get_user_userid(players[i]),playerAuthid[i],teamName,playerPoints[i]); + gungame_print(players[i],0,1,"%L",players[i],key_GAINED_POINTS,playerPoints[i],playerTotalPoints[i],pointsExtraction[players[i]][0]); + } + } +} + +stock stats_clear_struct(struct[statsData],clearAuthid=1) +{ + if(clearAuthid) struct[sdAuthid][0] = 0; + struct[sdWins][0] = 0; + struct[sdName][0] = 0; + struct[sdTimestamp] = 0; + struct[sdPoints][0] = 0; + struct[sdStreak][0] = 0; + struct[sdWins][1] = 0; + struct[sdPoints][1] = 0; + struct[sdStreak][1] = 0; +} + +#if defined SQL +// sql version] get a player's last used name and wins from save file +stock stats_get_data(authid[],struct[statsData],id=0) +{ + if(!sqlInit || !get_pcvar_num(gg_stats_mode)) + { + stats_clear_struct(struct); + return 0; + } + + if(id > 0 && playerStats[id][sdAuthid][0]) // already saved my stats + { + struct = playerStats[id]; + return 1; + } + + stats_clear_struct(struct); + + SQL_QuoteString(db,safeName,63,authid); + query = SQL_PrepareQuery(db,"SELECT wins,name,points,streak,wins_tp,points_tp,streak_tp FROM `%s` WHERE authid='%s' AND serverip='%s' LIMIT 1;",sqlTable,safeName,serverip); + + if(!SQL_ExecuteAndLog(query)) + { + SQL_FreeHandle(query); + return 0; + } + + copy(struct[sdAuthid],31,authid); // setting authid will cache it if this is playerStats + + new found = SQL_NumResults(query); + if(found) + { + struct[sdWins][0] = SQL_ReadResult(query,0); + SQL_ReadResult(query,1,struct[sdName],31); + struct[sdPoints][0] = SQL_ReadResult(query,2); + struct[sdStreak][0] = SQL_ReadResult(query,3); + struct[sdWins][1] = SQL_ReadResult(query,4); + struct[sdPoints][1] = SQL_ReadResult(query,5); + struct[sdStreak][1] = SQL_ReadResult(query,6); + } + + if(id > 0) playerStats[id] = struct; // if this is a connected player, save it + + SQL_FreeHandle(query); + return found; +} +#else +// get a player's last used name and wins from save file +stock stats_get_data(authid[],struct[statsData],id=0) +{ + if(!get_pcvar_num(gg_stats_mode)) + { + stats_clear_struct(struct); + return 0; + } + + get_pcvar_string(gg_stats_file,sfFile,63); + if(!file_exists(sfFile)) + { + stats_clear_struct(struct); + return 0; + } + + if(id > 0) + { + if(playerStats[id][sdAuthid][0]) // already saved my stats + { + struct = playerStats[id]; + return 1; + } + else if(statsPosition[id][0] > 0) // check top regular players + { + ArrayGetArray(statsArray,ArrayGetCell(statsPointers[0],statsPosition[id][0]-1),playerStats[id]); + struct = playerStats[id]; + return 1; + } + else if(statsPosition[id][1] > 0) // check top teamplay players + { + ArrayGetArray(statsArray,ArrayGetCell(statsPointers[1],statsPosition[id][1]-1),playerStats[id]); + struct = playerStats[id]; + return 1; + } + } + + stats_clear_struct(struct); + + // now we have to go through the file + + // open 'er up, boys! + new found, file = fopen(sfFile,"rt"); + if(!file) return 0; + + // go through it + while(!feof(file)) + { + fgets(file,sfLineData,111); + strtok(sfLineData,sfAuthid,31,dummy,1,'^t'); // isolate authid + + // this is it, stop now because our data is already stored in sfLineData + if(equal(authid,sfAuthid)) + { + found = 1; + break; + } + } + + // close 'er up, boys! (hmm....) + fclose(file); + + copy(struct[sdAuthid],31,authid); // setting authid will cache it if this is playerStats + + // couldn't find + if(found) + { + stats_str_to_struct(sfLineData,struct); // convert line from file to a struct + } + + if(id > 0) playerStats[id] = struct; // if this is a connected player, save it + + return found; +} +#endif + +#if defined SQL +public stats_get_top_players() +{ + if(!ggActive || !sqlInit) return 0; + + lastStatsMode = get_pcvar_num(gg_stats_mode); + if(!lastStatsMode) return 0; + + // assign stat position to players already in the game + new i, authid[32], stats_ip = get_pcvar_num(gg_stats_ip); + for(i=1;i<=maxPlayers;i++) + { + if(is_user_connected(i)) + { + get_gg_authid(i,authid,31,stats_ip); + if(!statsPosition[i][0]) stats_get_position(i,authid,0); + if(!statsPosition[i][1]) stats_get_position(i,authid,1); + } + } + + return 1; +} +#else +public stats_get_top_players() +{ + if(!ggActive || !sqlInit) return 0; + + lastStatsMode = get_pcvar_num(gg_stats_mode); + if(!lastStatsMode) return 0; + + // we never made the array + if(!statsArray) + { + get_pcvar_string(gg_stats_file,sfFile,63); + if(!file_exists(sfFile)) return 0; + + statsArray = ArrayCreate(statsData,100); + statsPointers[0] = ArrayCreate(1,100); + statsPointers[1] = ArrayCreate(1,100); + + new file = fopen(sfFile,"rt"); + if(file) + { + new entryNum; + + while(!feof(file)) + { + fgets(file,sfLineData,111); + if(!sfLineData[0]) continue; + stats_str_to_struct(sfLineData,sfStatsStruct); + + // put all of our stats entries, with all of the info and stuff, into our big stats array + ArrayPushArray(statsArray,sfStatsStruct); + + // and then put just their indexes into our "pointer" cell arrays + if(sfStatsStruct[sdWins][0] || sfStatsStruct[sdPoints][0]) + { + ArrayPushCell(statsPointers[0],entryNum); + statsSize[0]++; + } + if(sfStatsStruct[sdWins][1] || sfStatsStruct[sdPoints][1]) + { + ArrayPushCell(statsPointers[1],entryNum); + statsSize[1]++; + } + + entryNum++; + } + fclose(file); + + ArraySort(statsPointers[0],"stats_pointer_sort_reg"); + ArraySort(statsPointers[1],"stats_pointer_sort_tp"); + + if(statsSize[0] > MAX_STATS_RANK) statsSize[0] = MAX_STATS_RANK; + if(statsSize[1] > MAX_STATS_RANK) statsSize[1] = MAX_STATS_RANK; + } + } + + // if we were able to get anything put together + if(statsSize[0] || statsSize[1]) + { + // assign stat position to players already in the game + new i, authid[32], stats_ip = get_pcvar_num(gg_stats_ip); + for(i=1;i<=maxPlayers;i++) + { + if(is_user_connected(i)) + { + get_gg_authid(i,authid,31,stats_ip); + if(!statsPosition[i][0]) stats_get_position(i,authid,0); // these only work if statsSize[si] > 0 + if(!statsPosition[i][1]) stats_get_position(i,authid,1); + } + } + } + + return 1; +} + +// seems to be slightly faster without passing in extra data, and this is how we used to do it, so we'll continue to use two functions to sort +public stats_pointer_sort_reg(Array:array,item1,item2) +{ + static score[2]; + + if(lastStatsMode == 1) // sort by wins + { + ArrayGetArray(statsArray,ArrayGetCell(array,item1),sfStatsStruct); + score[0] = sfStatsStruct[sdWins][0]; + + ArrayGetArray(statsArray,ArrayGetCell(array,item2),sfStatsStruct); + score[1] = sfStatsStruct[sdWins][0]; + } + else // sort by points + { + ArrayGetArray(statsArray,ArrayGetCell(array,item1),sfStatsStruct); + score[0] = sfStatsStruct[sdPoints][0]; + + ArrayGetArray(statsArray,ArrayGetCell(array,item2),sfStatsStruct); + score[1] = sfStatsStruct[sdPoints][0]; + } + + return score[1] - score[0]; +} + +// seems to be slightly faster without passing in extra data, and this is how we used to do it, so we'll continue to use two functions to sort +public stats_pointer_sort_tp(Array:array,item1,item2) +{ + static score[2]; + + if(lastStatsMode == 1) // sort by wins + { + ArrayGetArray(statsArray,ArrayGetCell(array,item1),sfStatsStruct); + score[0] = sfStatsStruct[sdWins][1]; + + ArrayGetArray(statsArray,ArrayGetCell(array,item2),sfStatsStruct); + score[1] = sfStatsStruct[sdWins][1]; + } + else // sort by points + { + ArrayGetArray(statsArray,ArrayGetCell(array,item1),sfStatsStruct); + score[0] = sfStatsStruct[sdPoints][1]; + + ArrayGetArray(statsArray,ArrayGetCell(array,item2),sfStatsStruct); + score[1] = sfStatsStruct[sdPoints][1]; + } + + return score[1] - score[0]; +} +#endif + +// gather up our players +/*public stats_get_top_players() +{ + if(!ggActive) return 0; + + glStatsMode = get_pcvar_num(gg_stats_mode); + if(!glStatsMode) return 0; + + get_pcvar_string(gg_stats_file,sfFile,63); + if(!file_exists(sfFile)) return 0; + + new buildMe[2], stats_split = get_pcvar_num(gg_stats_split); + + // figure out if we need to build any of the arrays still + if(!statsArray[0]) + { + statsArray[0] = ArrayCreate(statsData,100); + statsSize[0] = 0; + buildMe[0] = 1; + } + if(!statsArray[1] && stats_split) + { + statsArray[1] = ArrayCreate(statsData,100); + statsSize[1] = 0; + buildMe[1] = 1; + } + + // if we do have an array or two to build + if(buildMe[0] || buildMe[1]) + { + // storage format: + // AUTHID WINS LAST_USED_NAME TIMESTAMP POINTS STREAK TPWINS TPPOINTS TPSTREAK + + new file = fopen(sfFile,"rt"); + if(file) + { + while(!feof(file)) + { + fgets(file,sfLineData,111); + if(!sfLineData[0]) continue; + stats_str_to_struct(sfLineData,sfStatsStruct); + + // if we are working on this array, and we have some wins or points for it + if(buildMe[0] && (sfStatsStruct[sdWins][0] || sfStatsStruct[sdPoints][0])) + { + ArrayPushArray(statsArray[0],sfStatsStruct); + statsSize[0]++; + } + if(buildMe[1] && (sfStatsStruct[sdWins][1] || sfStatsStruct[sdPoints][1])) + { + ArrayPushArray(statsArray[1],sfStatsStruct); + statsSize[1]++; + } + } + fclose(file); + + if(buildMe[0] && statsSize[0] > 1) // if we were working on this array and we have something to sort + { + ArraySort(statsArray[0],"stats_custom_compare_regular"); + if(statsSize[0] > 1000) statsSize[0] = 1000; // arbitrarily limit because we have to look through this every time someone connects + } + if(buildMe[1] && statsSize[1] > 1) + { + ArraySort(statsArray[1],"stats_custom_compare_teamplay"); + if(statsSize[1] > 1000) statsSize[1] = 1000; + } + } + + // clear any saved stats positions out of the tempsaves, so no one rejoins with the wrong position + for(new i=0;i %i AND serverip='%s' AND (%s > 0 OR %s > 0);", + sqlTable,pointsColumn,myPoints,serverip,winsColumn,pointsColumn); + } + else + { + query = SQL_PrepareQuery(db,"SELECT COUNT(*)+1 AS ranking FROM `%s` WHERE %s > %i AND serverip='%s';", + sqlTable,winsColumn,myPoints,serverip); + } + + if(SQL_ExecuteAndLog(query)) + { + new result = SQL_ReadResult(query,0); + SQL_FreeHandle(query); + + statsPosition[id][si] = result; + return result; + } + + SQL_FreeHandle(query); + return -1; +} +#else +// get a player's overall position +stats_get_position(id,authid[],si) +{ + if(statsArray && statsPointers[si] && statsSize[si]) + { + statsPosition[id][si] = -1; // mark that we've at least attempted to find it + + for(new i=0;i 0) + { + // don't send to bots + if(dest == MSG_BROADCAST || !is_user_bot(id)) + { + message_begin(dest,gmsgScenario,_,id); + write_byte(0); + message_end(); + } + + return; + } + + // weapon display + if(sdisplay == STATUS_LEADERWPN || sdisplay == STATUS_YOURWPN) + { + if(sdisplay == STATUS_LEADERWPN) + { + new ldrLevel; + get_leader(ldrLevel); + + // get leader's weapon + if(ldrLevel <= 0) return; + copy(sprite,31,weaponName[ldrLevel-1]); + } + else + { + // get your weapon + if(level[id] <= 0) return; + copy(sprite,31,lvlWeapon[id]); + } + + strtolower(sprite); + + // sprite is d_grenade, not d_hegrenade + if(sprite[0] == 'h') sprite = "grenade"; + + // get true sprite name + format(sprite,31,"d_%s",sprite); + } + + // kill display + else if(sdisplay == STATUS_KILLSLEFT) + { + new goal = get_level_goal(level[id],id); + formatex(sprite,31,"number_%i",goal-score[id]); + } + else if(sdisplay == STATUS_KILLSDONE) + { + formatex(sprite,31,"number_%i",score[id]); + } + + // don't send to bots + if(!id || !is_user_bot(id)) + { + message_begin(dest,gmsgScenario,_,id); + write_byte(1); + write_string(sprite); + write_byte(150); + message_end(); + } +} + +// hide someone's money display +public hide_money(id) +{ + // hide money + emessage_begin(MSG_ONE,gmsgHideWeapon,_,id); + ewrite_byte(1<<5); + emessage_end(); + + // hide crosshair that appears from hiding money + emessage_begin(MSG_ONE,gmsgCrosshair,_,id); + ewrite_byte(0); + emessage_end(); +} + +//********************************************************************** +// SUPPORT FUNCTIONS +//********************************************************************** + +// gets a players info, intended for other plugins to callfunc +public get_player_info(id,&rf_level,&rf_score,rf_lvlWeapon[],len,&rf_spawnProtected,rf_statsPosition[2]) +{ + rf_level = level[id]; + rf_score = score[id]; + copy(rf_lvlWeapon,len,lvlWeapon[id]); + rf_spawnProtected = spawnProtected[id]; + rf_statsPosition = statsPosition[id]; + return 1; +} + +// analyzes the weapon order and saves it into our variables +public setup_weapon_order() +{ + new weaponOrder[(MAX_WEAPONS*16)+1], temp[27]; + get_pcvar_string(gg_weapon_order,weaponOrder,MAX_WEAPONS*16); + + new Float:killsperlvl = get_pcvar_float(gg_kills_per_lvl), i, done, colon, goal[6]; + + // cut them apart + for(i=0;i 1.0) ? 1.0 : killsperlvl; + else weaponGoal[i] = killsperlvl; + } + else + { + copyc(weaponName[i],23,temp,':'); + copy(goal,5,temp[colon+1]); + weaponGoal[i] = floatstr(goal); + } + + if(done) break; + } + + // we break to end our loop, so "i" will be where we left it. but it's 0-based. + weaponNum = i+1; +} + +// gets the goal for a level, taking into account default and custom values +stock get_level_goal(level,id=0) +{ + if(level < 1) return 1; + + // no teamplay, return preset goal + if(!is_user_connected(id) || !get_pcvar_num(gg_teamplay)) + { + if(is_user_bot(id)) return floatround(weaponGoal[level-1]*get_pcvar_float(gg_kills_botmod),floatround_ceil); + return floatround(weaponGoal[level-1],floatround_ceil); + } + + // one of this for every player on team + new Float:result = weaponGoal[level-1] * float(team_player_count(cs_get_user_team(id))); + + // modifiers for nade and knife levels + if(equal(weaponName[level-1],HEGRENADE)) result *= get_pcvar_float(gg_teamplay_nade_mod); + else if(equal(weaponName[level-1],KNIFE)) result *= get_pcvar_float(gg_teamplay_knife_mod); + + if(result <= 0.0) result = 1.0; + return floatround(result,floatround_ceil); +} + +// gets the level a player should use for his level +stock get_level_weapon(theLevel,var[],varLen) +{ + if(warmup > 0 && warmupWeapon[0]) copy(var,varLen,warmupWeapon); + else if(theLevel > 0) copy(var,varLen,weaponName[theLevel-1]); + else var[0] = 0; +} + +// easy function to precache sound via cvar +stock precache_sound_by_cvar(pcvar) +{ + new value[64]; + get_pcvar_string(pcvar,value,63); + precache_sound_special(value); +} + +// precache sounds with a little bit of magic +stock precache_sound_special(sound[]) +{ + if(!sound[0]) return; + + if(containi(sound,".mp3") != -1) precache_generic(sound); + else + { + // stop at ( character to allow precaching sounds that use speak's special functions, eg sound/ambience/xtal_down1(e70) + new value[64], len = copyc(value,63,sound,'('); + + // make sure we have a suffix for precaching + if(containi(value,".wav") == -1) formatex(value[len],63-len,".wav"); + + // precache_sound doesn't take the "sound/" prefix + if(equali(value,"sound/",6)) precache_sound(value[6]); + else precache_sound(value); + } +} + +// gets a player's "authid", or whatever token we want to identify them with. +// if you already know the value of gg_stats_ip, you can pass it in and save a cvar check. +stock get_gg_authid(id,ret[],len,stats_ip=-777) +{ + new mode = stats_ip; + if(mode == -777) mode = get_pcvar_num(gg_stats_ip); + + switch(mode) + { + case 0: return get_user_authid(id,ret,len); // 0 = by authid + case -1, 2: return get_user_name(id,ret,len); // 2 = by name + } + + return get_user_ip(id,ret,len); // 1 = by ip +} + +// figure out which gungame.cfg (or gungame_teamplay.cfg) file to use +stock get_gg_config_file(teamplay=0,filename[],len) +{ + formatex(filename,len,"%s/gungame%s.cfg",cfgDir,(teamplay) ? "_teamplay" : ""); + + if(!file_exists(filename)) + { + formatex(filename,len,"gungame%s.cfg",(teamplay) ? "_teamplay" : ""); + if(!file_exists(filename)) filename[0] = 0; + } +} + +// executes what's inside of the config file +stock exec_gg_config_file(teamplay=0,allowToggling=0) +{ + new oldActive = ggActive, oldTeamplay = get_pcvar_num(gg_teamplay); + + new cfgFile[64]; + get_gg_config_file(teamplay,cfgFile,63); + if(cfgFile[0] && file_exists(cfgFile)) + { + server_cmd("exec ^"%s^"",cfgFile); + server_exec(); + } + + // remember old values of gg_enabled and gg_teamplay if toggling is not allowed. + // this is like we just turned teamplay on via command and we want to make sure + // the configs get run appropriately, but obviously teamplay should still be on afterwards. + if(!allowToggling) + { + set_pcvar_num(gg_enabled,oldActive); + set_pcvar_num(gg_teamplay,oldTeamplay); + } + + // reselect random weapon order + new lastOIstr[6], lastOI; + + get_localinfo("gg_last_oi",lastOIstr,5); + lastOI = str_to_num(lastOIstr); + + // decrement it 1 b/c we probably already did do_rOrder + // and don't want to end up skipping orders + if(lastOI > 0) + { + num_to_str(lastOI-1,lastOIstr,5); + set_localinfo("gg_last_oi",lastOIstr); + } + + do_rOrder(1); // thanks for pointing this out Tomek Kalkowski + + // in case cvars changed. thanks BbIX! + setup_weapon_order(); +} + +// figure out which gungame_mapcycle file to use +stock get_gg_mapcycle_file(filename[],len) +{ + static testFile[64]; + + // cstrike/addons/amxmodx/configs/gungame_mapcycle.cfg + formatex(testFile,63,"%s/gungame_mapcycle.cfg",cfgDir); + if(file_exists(testFile)) + { + copy(filename,len,testFile); + return 1; + } + + // cstrike/addons/amxmodx/configs/gungame_mapcycle.txt + formatex(testFile,63,"%s/gungame_mapcycle.txt",cfgDir); + if(file_exists(testFile)) + { + copy(filename,len,testFile); + return 1; + } + + // cstrike/gungame_mapcycle.cfg + testFile = "gungame_mapcycle.cfg"; + if(file_exists(testFile)) + { + copy(filename,len,testFile); + return 1; + } + + // cstrike/gungame_mapcycle.txt + testFile = "gungame_mapcycle.txt"; + if(file_exists(testFile)) + { + copy(filename,len,testFile); + return 1; + } + + return 0; +} + +// another easy function to play sound via cvar +stock play_sound_by_cvar(id,pcvar) +{ + static value[64]; + get_pcvar_string(pcvar,value,63); + + if(!value[0]) return; + + if(containi(value,".mp3") != -1) client_cmd(id,"mp3 play ^"%s^"",value); + else client_cmd(id,"spk ^"%s^"",value); +} + +// a taskable play_sound_by_cvar +public play_sound_by_cvar_task(params[2]) +{ + play_sound_by_cvar(params[0],params[1]); +} + +// this functions take a filepath, but manages speak/mp3 play +stock play_sound(id,value[]) +{ + if(!value[0]) return; + + if(containi(value,".mp3") != -1) client_cmd(id,"mp3 play ^"%s^"",value); + else + { + if(equali(value,"sound/",6)) client_cmd(id,"spk ^"%s^"",value[6]); + else client_cmd(id,"spk ^"%s^"",value); + } +} + +// find the highest level player and his level +stock get_leader(&retLevel=0,&retNumLeaders=0,&retRunnerUp=0) +{ + new player, leader, numLeaders, runnerUp; + + // locate highest player + for(player=1;player<=maxPlayers;player++) + { + if(!is_user_connected(player)) continue; + + if(leader == 0 || level[player] > level[leader]) + { + // about to dethrown leader, monitor runnerup + if(leader && (runnerUp == 0 || level[leader] > level[runnerUp])) + runnerUp = leader; + + leader = player; + numLeaders = 1; // reset tied count + } + else if(level[player] == level[leader]) + numLeaders++; + else + { + // monitor runnerup + if(runnerUp == 0 || level[player] > level[runnerUp]) + runnerUp = player; + } + } + + retLevel = level[leader]; + retNumLeaders = numLeaders; + retRunnerUp = runnerUp; + + return leader; +} + +// gets the number of players on a particular level +stock num_players_on_level(checkLvl) +{ + new player, result; + for(player=1;player<=maxPlayers;player++) + { + if(is_user_connected(player) && level[player] == checkLvl) + result++; + } + return result; +} + +// a butchered version of teame06's CS Color Chat Function. +// actually it's now almost completely different, but that's +// where I started from. +gungame_print(id,custom,tag,msg[],any:...) +{ + new messages = get_pcvar_num(gg_messages); + if(!messages || (messages & MSGS_HIDETEXT)) return 0; + + new changeCount, num, i, j, argnum = numargs(), player, colored_messages = !(messages & MSGS_NOCOLOR); + static newMsg[191], message[191], changed[8], players[32]; + + if(id) + { + players[0] = id; + num = 1; + } + else get_players(players,num); + + for(i=0;i 0) ? custom : player); + write_string(message); + message_end(); + } + + return 1; +} + +// show a HUD message to a user +gungame_hudmessage(id,Float:holdTime,msg[],any:...) +{ + new messages = get_pcvar_num(gg_messages); + if(!messages || (messages & MSGS_HIDEHUD)) return 0; + + // user formatting + static newMsg[191]; + vformat(newMsg,190,msg,4); + + // show it + set_hudmessage(255,255,255,-1.0,0.8,0,6.0,holdTime,0.1,0.5); + return ShowSyncHudMsg(id,hudSyncReqKills,newMsg); +} + +// start a map vote +stock start_mapvote() +{ + new dmmName[24], plugin; + + // Galileo - galileo.amxx + if(galileoID != -1) + { + log_amx("Starting a map vote from Galileo"); + + server_cmd("gal_startvote -nochange"); + } + + // AMXX Nextmap Chooser - mapchooser.amxx + else if((plugin = is_plugin_loaded("Nextmap Chooser")) != -1) + { + log_amx("Starting a map vote from Nextmap Chooser"); + + new oldWinLimit = get_cvar_num("mp_winlimit"), oldMaxRounds = get_cvar_num("mp_maxrounds"); + set_cvar_num("mp_winlimit",0); // skip winlimit check + set_cvar_num("mp_maxrounds",-1); // trick plugin to think game is almost over + + // call the vote + if(callfunc_begin_i(get_func_id("voteNextmap",plugin),plugin) == 1) + callfunc_end(); + + // set maxrounds back + set_cvar_num("mp_winlimit",oldWinLimit); + set_cvar_num("mp_maxrounds",oldMaxRounds); + } + + // Deagles' Map Management 2.30b - deagsmapmanage230b.amxx + else if((plugin = is_plugin_loaded("DeagsMapManage")) != -1) + { + dmmName = "DeagsMapManage"; + } + + // Deagles' Map Management 2.40 - deagsmapmanager.amxx + else if((plugin = is_plugin_loaded("DeagsMapManager")) != -1) + { + dmmName = "DeagsMapManager"; + } + + // Mapchooser4 - mapchooser4.amxx + else if((plugin = is_plugin_loaded("Nextmap Chooser 4")) != -1) + { + log_amx("Starting a map vote from Nextmap Chooser 4"); + + new oldWinLimit = get_cvar_num("mp_winlimit"), oldMaxRounds = get_cvar_num("mp_maxrounds"); + set_cvar_num("mp_winlimit",0); // skip winlimit check + set_cvar_num("mp_maxrounds",1); // trick plugin to think game is almost over + + // deactivate g_buyingtime variable + if(callfunc_begin_i(get_func_id("buyFinished",plugin),plugin) == 1) + callfunc_end(); + + // call the vote + if(callfunc_begin_i(get_func_id("voteNextmap",plugin),plugin) == 1) + { + callfunc_push_str("",false); + callfunc_end(); + } + + // set maxrounds back + set_cvar_num("mp_winlimit",oldWinLimit); + set_cvar_num("mp_maxrounds",oldMaxRounds); + } + + // NOTHING? + else log_amx("Using gg_vote_setting without any compatible plugins: could not start a vote!"); + + // do DMM stuff + if(dmmName[0]) + { + log_amx("Starting a map vote from %s",dmmName); + + // allow voting + /*if(callfunc_begin("dmapvotemode",dmmName) == 1) + { + callfunc_push_int(0); // server + callfunc_end(); + }*/ + + new oldWinLimit = get_cvar_num("mp_winlimit"), Float:oldTimeLimit = get_cvar_float("mp_timelimit"); + set_cvar_num("mp_winlimit",99999); // don't allow extending + set_cvar_float("mp_timelimit",0.0); // don't wait for buying + set_cvar_num("enforce_timelimit",1); // don't change map after vote + + // call the vote + if(callfunc_begin_i(get_func_id("startthevote",plugin),plugin) == 1) + callfunc_end(); + + set_cvar_num("mp_winlimit",oldWinLimit); + set_cvar_float("mp_timelimit",oldTimeLimit); + + // disallow further voting + /*if(callfunc_begin("dmapcyclemode",dmmName) == 1) + { + callfunc_push_int(0); // server + callfunc_end(); + }*/ + + set_task(20.1,"dmm_stop_mapchange"); + } +} + +// stop DMM from changing maps after the vote has been tallied +public dmm_stop_mapchange() +{ + remove_task(333333,1); // outside +} + +// set amx_nextmap to the next map +stock set_nextmap() +{ + new mapCycleFile[64]; + get_gg_mapcycle_file(mapCycleFile,63); + + // no mapcycle, leave amx_nextmap alone + if(!mapCycleFile[0] || !file_exists(mapCycleFile)) + { + set_localinfo("gg_cycle_num","0"); + return 0; + } + + new strVal[10]; + + // have not gotten cycleNum yet (only get it once, because + // set_nextmap is generally called at least twice per map, and we + // don't want to change it twice) + if(cycleNum == -1) + { + get_localinfo("gg_cycle_num",strVal,9); + cycleNum = str_to_num(strVal); + } + + new firstMap[32], currentMap[32], lineData[32], i, line, foundMap; + get_mapname(currentMap,31); + + new file = fopen(mapCycleFile,"rt"); + while(file && !feof(file)) + { + fgets(file,lineData,31); + + trim(lineData); + replace(lineData,31,".bsp",""); // remove extension + new len = strlen(lineData) - 2; + + // stop at a comment + for(i=0;i= strLen) string[i] = 0; + else string[i] = string[newpos]; + } + + return 1; +} + +// gets a player id that triggered certain logevents, by VEN +stock get_loguser_index() +{ + static loguser[80], name[32]; + read_logargv(0,loguser,79); + parse_loguser(loguser,name,31); + + return get_user_index(name); +} + +// checks if a space is vacant, by VEN +stock bool:is_hull_vacant(const Float:origin[3],hull) +{ + new tr = 0; + engfunc(EngFunc_TraceHull,origin,origin,0,hull,0,tr); + + if(!get_tr2(tr,TR_StartSolid) && !get_tr2(tr,TR_AllSolid) && get_tr2(tr,TR_InOpen)) + return true; + + return false; +} + +// gets a weapon's category, just a shortcut to the weaponSlots table basically +stock get_weapon_category(id=0,name[]="") +{ + if(name[0]) + { + if(equal(name,"weapon_",7)) id = get_weaponid(name); + else + { + static newName[24]; + formatex(newName,23,"weapon_%s",name); + id = get_weaponid(newName); + } + } + + if(id < 1 || id > 30) return -1; + return weaponSlots[id]; +} + +// if a player is allowed to score (at least 1 rival player) +stock can_score(id) +{ + if(!is_user_connected(id)) return 0; + + new penalty = get_pcvar_num(gg_tk_penalty); + for(new player=1;player<=maxPlayers;player++) + { + // this player is on a real team, and he's on the opposite team, or we are playing FFA + if( player != id && is_user_connected(player) && on_valid_team(player) && (penalty < 0 || cs_get_user_team(id) != cs_get_user_team(player)) ) + return 1; + } + + return 0; +} + +// returns 1 if there are only bots in the server, 0 if not +stock only_bots() +{ + new player; + for(player=1;player<=maxPlayers;player++) + { + if(is_user_connected(player) && !is_user_bot(player)) + return 0; + } + + // didn't find any humans + return 1; +} + +// gives a player a weapon efficiently +stock ham_give_weapon(id,const weapon[]) +{ + if(!equal(weapon,"weapon_",7)) return 0; + + new wEnt = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,weapon)); + if(!pev_valid(wEnt)) return 0; + + set_pev(wEnt,pev_spawnflags,SF_NORESPAWN); + dllfunc(DLLFunc_Spawn,wEnt); + + if(!ExecuteHamB(Ham_AddPlayerItem,id,wEnt)) + { + if(pev_valid(wEnt)) set_pev(wEnt,pev_flags,pev(wEnt,pev_flags) | FL_KILLME); + return 0; + } + + ExecuteHamB(Ham_Item_AttachToPlayer,wEnt,id) + return 1; +} + +// takes a weapon from a player efficiently +stock ham_strip_weapon(id,const weapon[]) +{ + if(!equal(weapon,"weapon_",7)) return 0; + + new wId = get_weaponid(weapon); + if(!wId) return 0; + + new wEnt; + while((wEnt = engfunc(EngFunc_FindEntityByString,wEnt,"classname",weapon)) && pev(wEnt,pev_owner) != id) {} + if(!wEnt) return 0; + + if(get_user_weapon(id) == wId) ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt); + + if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt)) return 0; + ExecuteHamB(Ham_Item_Kill,wEnt); + + set_pev(id,pev_weapons,pev(id,pev_weapons) & ~(1<= 10 && str[len-2] == '1') // second to last digit + return formatex(ret,retLen,"th"); // 10-19 end in 'th + + switch(str[len-1]) // last digit + { + case '1': return formatex(ret,retLen,"st"); + case '2': return formatex(ret,retLen,"nd"); + case '3': return formatex(ret,retLen,"rd"); + } + + return formatex(ret,retLen,"th"); +} diff --git a/sound/gungame/gg_brass_bell.wav b/sound/gungame/gg_brass_bell.wav new file mode 100644 index 0000000..bd61da0 Binary files /dev/null and b/sound/gungame/gg_brass_bell.wav differ diff --git a/sound/gungame/gg_knife_level.wav b/sound/gungame/gg_knife_level.wav new file mode 100644 index 0000000..e0667e7 Binary files /dev/null and b/sound/gungame/gg_knife_level.wav differ diff --git a/sound/gungame/gg_levelup.wav b/sound/gungame/gg_levelup.wav new file mode 100644 index 0000000..875a05a Binary files /dev/null and b/sound/gungame/gg_levelup.wav differ diff --git a/sound/gungame/gg_lostlead.wav b/sound/gungame/gg_lostlead.wav new file mode 100644 index 0000000..31f6003 Binary files /dev/null and b/sound/gungame/gg_lostlead.wav differ diff --git a/sound/gungame/gg_nade_level.wav b/sound/gungame/gg_nade_level.wav new file mode 100644 index 0000000..67b7494 Binary files /dev/null and b/sound/gungame/gg_nade_level.wav differ diff --git a/sound/gungame/gg_takenlead.wav b/sound/gungame/gg_takenlead.wav new file mode 100644 index 0000000..c5b2b49 Binary files /dev/null and b/sound/gungame/gg_takenlead.wav differ diff --git a/sound/gungame/gg_tiedlead.wav b/sound/gungame/gg_tiedlead.wav new file mode 100644 index 0000000..00f4742 Binary files /dev/null and b/sound/gungame/gg_tiedlead.wav differ diff --git a/sound/gungame/gg_triple.wav b/sound/gungame/gg_triple.wav new file mode 100644 index 0000000..bc4c553 Binary files /dev/null and b/sound/gungame/gg_triple.wav differ diff --git a/sound/gungame/gg_welcome.wav b/sound/gungame/gg_welcome.wav new file mode 100644 index 0000000..4c122a0 Binary files /dev/null and b/sound/gungame/gg_welcome.wav differ