Здравствуйте, гость Вход | Регистрация
Наши новости:
|
| Дата поста: | В теме: | За сообщение: | Спасибо сказали: | ||
|---|---|---|---|---|---|
| 28.8.2013, 18:30 | опять я сзаймом | S0m3Th1nG_AwFul! | |||
| 27.8.2013, 10:30 | Выкладываю свои приватные плагины | tenb63rus | |||
| 6.8.2013, 14:37 | Создание биржи расскрутки серверов | ![]() ![]() |
Affl, cs-portal, MaximumEnergy, popen021, user.gameover.user, XyLiGaN, ZiК | ||
| 22.2.2013, 8:56 | Ребята нужна Ваша помощь.. | Например с девушкой поссорился, на грани психического срыва например был, нажрался, сел и поехал. 15-летние школьники такие 15-летние школьники. |
Rejiser | ||
| 13.2.2013, 20:35 | Куплю CP для игрового хостинга | Ты на завтраках сэкономил что ли? Я не пойму вас, у вас всех навязчивая идея сделать ***-хостинг на пне 4, стоящим под столом? У вас в кармане на ваш "мегапроект" 30 000 рублей, а зарплату своей мечты вы считаете 100 000 рублей. (facepalm) Оставьте вы уже свои школьные замашки, сидите и учите уроки, повышая свою будущую зарплату! Копите лучше деньги на уроки частного репетитора и поездки за границу для обучения там. |
terskiys | ||
| 10.2.2013, 21:23 | CS: GO взломали опять :) | http://cs.rin.ru/forum/viewtopic.php?f=10&t=62646 Сам не запускал пока, но все выглядит хотя бы не так ущербно как у Колобка-мудака (кстати, его тему закрыли на ксмании по его просьбе, так как что-то пошло у него не так). Цитата Great! So, this is a fully working standalone with client.dll generator, full game downloader and auto-updater? One more question, are you gonna support this as long as you can or will you abandon this project if you just don't feel like supporting this anymore...? Цитата This is downloader/installer/updater/verifyer/ client.dll generator. And also it downloads emulator from our servers and paches the game. I only forgot to make shortcuts of the game so you must do that by hand. It was little hard because I programmed the whole system PHP/C++/Delphi and it was hard to integrate them to work together but it works. The hard part is finished now I am waiting for suggestions so I can polish the product and move to beta version. :) |
midorfeed | ||
| 9.2.2013, 21:20 | [Раздача] Инвайты на сервис 2ip.ru. | Все пооткрывали: :) http://rghost.ru/private/43677858/c727f3c9...ca3f72f702.view |
Nebo | ||
| 9.2.2013, 21:03 | Выкладываю свои приватные плагины | Начнут орать, что в .amxx бекдор встален, после сами знаете каких инцидентов. Но мне все равно. Antireconnect от PomanoB 0.1.0 http://yadi.sk/d/HGBMEKRg2UkLx AFK Kick от PomanoB 0.1.0 http://yadi.sk/d/uFYkIT6b2UkLD Quake Sounds от hleV (переделывал что-то я, creator_52 и PomanoB 2.0); (.wav и .mp3 звуки) http://yadi.sk/d/RFOYZG1p2UkNP Переделанный TOP15 http://yadi.sk/d/aPzoQysa2UkO7 Плагин для проигрывания музыки в конце раунда в зависимости от стороны выигравших от 3aHyga (он же creator_52) 1.1 http://yadi.sk/d/zIdAy5f72UkNx Плагин для сокрытия серверных переменных от ConnorMcCleod 0.1.0 http://yadi.sk/d/vMkkpBxa2UkN7 Duck Fly 0.1.0 от PomanoB http://yadi.sk/d/PgP2kb6v2UkMP VIP от Flesh http://yadi.sk/d/p9_E2lfX2UkOD Простая веревка/хук для всех http://yadi.sk/d/fxJZYYGx2UkNl |
pulse. | ||
| 9.2.2013, 20:45 | [Раздача] Инвайты на сервис 2ip.ru. | Перейди по этой ссылке, узнаешь. http://2ip.ru/member_photo/98843.gif 09 февраля 2013 22:44 91.224.25.154 не определен Chrome 24.2.0.0 Microsoft Windows 8 осталось 7 инвайтов. |
Nebo | ||
| 28.1.2013, 10:42 | Выкладываю свои приватные плагины | Обновил раздел TOP15. |
adidas2012 | ||
| 28.1.2013, 10:26 | Выкладываю свои приватные плагины | Простые плагины, который я когда-то заказывал давным-давно, ибо остальные мне по религиозным убеждениям не подходили. Плагины работали у меня больше года, никогда ни с одним проблем не было. Надеюсь, вас тоже не будет. Antireconnect от PomanoB 0.1.0 Переменные: Код anti_reconnect_save_type 0 anti_reconnect_immun 0 anti_reconnect_mode 15 Скрытый текст #include <amxmodx> #include <hamsandwich> #define PLUGIN "Anti Reconnect" #define VERSION "0.1.0" #define AUTHOR "PomanoB" new g_round_counter new Trie:g_playersAuth new g_cvar_save_type, g_cvar_immunity, g_cvar_mode public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_event("HLTV", "HLTV_NewRound", "a", "1=0", "2=0") RegisterHam(Ham_Spawn, "player", "fwdSpawn", 1) g_playersAuth = TrieCreate() g_cvar_save_type = register_cvar("anti_reconnect_save_type", "0") g_cvar_immunity = register_cvar("anti_reconnect_immun", "0") g_cvar_mode = register_cvar("anti_reconnect_mode", "15") } public HLTV_NewRound() { g_round_counter++ } public fwdSpawn(id) { if (is_user_alive(id)) { new authid[32] switch (get_pcvar_num(g_cvar_save_type)) { case 0: get_user_authid(id, authid, 31) case 1: get_user_ip(id, authid, 31, 1) default: get_user_name(id, authid, 31) } new mode = get_pcvar_num(g_cvar_mode) if (!mode) TrieSetCell(g_playersAuth, authid, g_round_counter) else TrieSetCell(g_playersAuth, authid, get_systime()) } } /* public client_disconnect(id) { new authid[32] switch (get_pcvar_num(g_cvar_save_type)) { case 0: get_user_authid(id, authid, 31) case 1: get_user_ip(id, authid, 31, 1) default: get_user_name(id, authid, 31) } new mode = get_pcvar_num(g_cvar_mode) if (mode) TrieSetCell(g_playersAuth, authid, get_systime()) } */ public client_authorized(id) { if (!is_user_bot(id) && !(get_pcvar_num(g_cvar_immunity) && (get_user_flags(id)&ADMIN_IMMUNITY))) { new round = -1 new authid[32] switch (get_pcvar_num(g_cvar_save_type)) { case 0: get_user_authid(id, authid, 31) case 1: get_user_ip(id, authid, 31, 1) default: get_user_name(id, authid, 31) } if (TrieKeyExists(g_playersAuth, authid)) TrieGetCell(g_playersAuth, authid, round) new mode = get_pcvar_num(g_cvar_mode) if (mode) { mode = (round + mode) - get_systime() if (mode > 0) server_cmd("kick #%d ^"reconnect is forbidden (wait %d second)^"", get_user_userid(id), mode) } else if (round == g_round_counter) { server_cmd("kick #%d ^"Reconnect is forbidden^"", get_user_userid(id)) } } } public plugin_end() { TrieDestroy(g_playersAuth) } AFK Kick от PomanoB 0.1.0 Переменные: Код afk_time 15 Скрытый текст #include <amxmodx> #include <cstrike> #include <fakemeta> #define PLUGIN "AFK Kick" #define VERSION "0.1.0" #define AUTHOR "PomanoB" new g_maxPlayers new g_cvar_afk_time new g_afkTime[33] new g_lastOrigin[33][3] public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) set_task(5.0, "checkAFK", .flags="b") g_maxPlayers = get_maxplayers() g_cvar_afk_time = register_cvar("afk_time", "15") } public checkAFK() { new i, maxTime, origin[3] maxTime = get_pcvar_num(g_cvar_afk_time) for(i = 1; i < g_maxPlayers; i++) { if (is_user_alive(i) && cs_get_user_buyzone(i) && !(get_user_flags(i)&ADMIN_IMMUNITY)) { get_user_origin(i, origin) if (origin[0] == g_lastOrigin[i][0] && origin[1] == g_lastOrigin[i][1] && origin[2] == g_lastOrigin[i][2]) { g_afkTime[i] += 5 } else { g_afkTime[i] = 0 g_lastOrigin[i][0] = origin[0] g_lastOrigin[i][1] = origin[1] g_lastOrigin[i][2] = origin[2] } if (g_afkTime[i] >= maxTime) { //server_cmd("kick #%d ^"AFK^"", get_user_userid(i)) //server_exec() //set_pev(i,pev_health,0.0); dunno about it -_- set_pev(i,pev_deadflag,DEAD_DEAD); cs_set_user_team(i,CS_TEAM_SPECTATOR); } } } } Quake Sounds от hleV (переделывал что-то я, creator_52 и PomanoB 2.0); (.wav и .mp3 звуки) По коду поймете, какие звуки он произносит. Скажу лишь, что больше звуков в одном плагине вы не встретите. .wav и .mp3 файлы смотрите в внизу в "прикрепленных". Файл "quakesounds.txt" поместить в lang. Переменные: Код qs_enable 1 qs_streak 1 qs_firstblood 1 qs_humiliatingdefeat 1 qs_grenadedefeat 1 qs_hattrick 4 qs_flawlessvictory 6 qs_forcewithyou 1 wav #include <amxmodx> #include <amxmisc> #include <cstrike> #define VERSION "2.0" new g_kills[33] = {0,...} new g_deaths[33] = {0,...} new g_levels[19] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20} new g_roundKills[33], g_top new g_firstBlood new bool:g_died[33] new const forceSound[] = "qs/force.wav"; new streakSounds[19][] = { "qs/doublekill.wav", "qs/triplekill.wav", "qs/multikill.wav", "qs/megakill.wav", "qs/ultrakill.wav", "qs/monsterkill.wav", "qs/assasin.wav", "qs/juggernaut.wav", "qs/biohazard.wav", "qs/blazeofglory.wav", "qs/eradication.wav", "qs/extermination.wav", "qs/maniac.wav", "qs/massacre.wav", "qs/mutualdestruction.wav", "qs/shaftmaster.wav", "qs/unreal.wav", "qs/rocketscientist.wav", "qs/topgun.wav" } new streakMsgs[19][] = { "DOUBLEKILL", "TRIPLEKILL", "MULTIKILL", "MEGAKILL", "ULTRAKILL", "MONSTERKILL", "ASSASIN", "JUGGERNAUT", "BIOHAZARD", "BLAZEOFGLORY", "ERADICATION", "EXTERMINATION", "MANIAC", "MASSACRE", "MUTUALDESTRUCTION", "SHAFTMASTER", "UNREAL", "ROCKETSCIENTIST", "TOPGUN" } new qs_enable, qs_streak, qs_firstblood, qs_humiliatingdefeat, qs_hattrick, qs_flawlessvictory, qs_forcewithyou new qs_grenadedefeat new g_msgHudSync public plugin_init() { register_plugin("Quake Sounds", VERSION, "hleV") register_cvar("qs_version", VERSION, FCVAR_SPONLY|FCVAR_SERVER) register_dictionary("quakesounds.txt") register_dictionary("common.txt") register_concmd("amx_quakesounds", "cmdQuakeSounds", ADMIN_RCON, "<1|0> - enables/disables Quake Sounds") qs_enable = register_cvar("qs_enable", "1") qs_streak = register_cvar("qs_streak", "1") qs_firstblood = register_cvar("qs_firstblood", "1") qs_humiliatingdefeat = register_cvar("qs_humiliatingdefeat", "1") qs_grenadedefeat = register_cvar("qs_grenadedefeat", "1") qs_hattrick = register_cvar("qs_hattrick", "4") qs_flawlessvictory = register_cvar("qs_flawlessvictory", "6") qs_forcewithyou = register_cvar("qs_forcewithyou", "1") register_event("DeathMsg", "death", "a", "1>0") register_event("DeathMsg", "deathHD", "a", "4&kni") register_event("DeathMsg", "deathGrenade", "a", "4&grenade") register_event("SendAudio", "roundEnd", "a", "2=%!MRAD_terwin", "2=%!MRAD_ctwin", "2=%!MRAD_rounddraw") register_event("SendAudio", "soundCTWin", "a", "2=%!MRAD_ctwin") register_event("SendAudio", "soundTWin", "a", "2=%!MRAD_terwin") register_logevent("gameStart", 2, "1=Game_Commencing") register_logevent("roundStart", 2, "1=Round_Start") register_logevent("bombPlanted", 3, "2=Planted_The_Bomb") g_msgHudSync = CreateHudSyncObj() } public cmdQuakeSounds(id, level) { if (!(get_user_flags(id) & level)) { console_print(id, "%L", LANG_SERVER, "NO_ACC_COM") return PLUGIN_HANDLED } new arg[2] read_argv(1, arg, 1) if (equali(arg, "1")) { if (get_pcvar_num(qs_enable)) console_print(id, "%L", LANG_SERVER, "ALREADY_ENABLED") else { set_pcvar_num(qs_enable, 1) console_print(id, "%L", LANG_SERVER, "ENABLED") } } else if (equali(arg, "0")) { if (get_pcvar_num(qs_enable)) { set_pcvar_num(qs_enable, 0) console_print(id, "%L", LANG_SERVER, "DISABLED") } else console_print(id, "%L", LANG_SERVER, "ALREADY_DISABLED") } else console_print(id, "%L: amx_quakesounds <1|0>", LANG_SERVER, "USAGE") return PLUGIN_HANDLED } public client_connect(id) { g_kills[id] = 0 g_deaths[id] = 0 g_roundKills[id] = 0 g_top = 0 } public death() { if (!get_pcvar_num(qs_enable)) return PLUGIN_HANDLED new killer = read_data(1) new victim = read_data(2) g_kills[victim] = 0 g_deaths[victim] += 1 g_died[victim] = true if(get_pcvar_num(qs_streak) && killer != victim) { g_kills[killer] += 1 g_kills[victim] = 0 if(g_kills[killer] > g_levels[18]) streakAnnounce(killer, 18) else { for (new i = 0; i < 19; i++) if (g_kills[killer] == g_levels[i]) streakAnnounce(killer, i) } } if (get_pcvar_num(qs_firstblood) && g_firstBlood && killer != victim) { new name[32] get_user_name(killer, name, 31) set_hudmessage(50,100,227, -1.0, 0.30, 0, 6.0, 6.0) ShowSyncHudMsg(0, g_msgHudSync, "%L", LANG_SERVER, "FIRST_BLOOD", name) client_cmd(0, "spk qs/firstBlood") g_firstBlood = 0 } if (get_pcvar_num(qs_hattrick) && killer != victim) { g_roundKills[killer] = g_roundKills[killer] + 1 topPlayer() } if(get_pcvar_num(qs_forcewithyou)) { new players[32],num,index; get_players(players,num,"ae",(cs_get_user_team(victim) == CS_TEAM_T) ? "TERRORIST" : "CT"); if(num == 1) { index = players[0]; get_players(players,num,"ae", (cs_get_user_team(victim) == CS_TEAM_T) ? "CT" : "TERRORIST"); if(num > 1) { new name[32]; get_user_name(index,name,32); set_hudmessage(50,100,227, 0.08, 0.57, 2, 0.02, 6.0, 0.01, 0.1, 2) ShowSyncHudMsg(0, g_msgHudSync, "%L", LANG_SERVER, "FORCE", name) client_cmd(0, "spk %s", forceSound); } } } return PLUGIN_CONTINUE } streakAnnounce(killer, level) { new name[32] // new r = random(256) // new g = random(256) // new b = random(256) get_user_name(killer, name, 32) set_hudmessage(50,100,227, 0.08, 0.57, 2, 0.02, 6.0, 0.01, 0.1, 2) ShowSyncHudMsg(0, g_msgHudSync, "%L", LANG_SERVER, streakMsgs[level], name) client_cmd(0, "spk %s", streakSounds[level]) } public topPlayer() { new players[32], score, playerNum get_players(players, playerNum) for (new i = 0; i < playerNum; i++) { if (g_roundKills[players[i]] > score) { score = g_roundKills[players[i]] g_top = players[i] } else if (g_roundKills[players[i]] == score) g_top = 0 } } public gameStart() g_firstBlood = 1 public roundStart() { if (get_pcvar_num(qs_firstblood) >= 2) g_firstBlood = 1 for (new i = 1; i <= get_maxplayers(); i++) g_died[i] = false } public deathHD() { if (!get_pcvar_num(qs_enable) || !get_pcvar_num(qs_humiliatingdefeat)) return PLUGIN_HANDLED if (get_pcvar_num(qs_humiliatingdefeat) == 1) client_cmd(read_data(1), "spk qs/humiliatingdefeat") else if (get_pcvar_num(qs_humiliatingdefeat) >= 2) client_cmd(0, "spk qs/humiliation") return PLUGIN_CONTINUE } public deathGrenade() { if (!get_pcvar_num(qs_enable) || !get_pcvar_num(qs_grenadedefeat) || read_data(1) == read_data(2)) return PLUGIN_HANDLED if (get_pcvar_num(qs_grenadedefeat) == 1) client_cmd(read_data(1), "spk qs/grenade_kill") else if (get_pcvar_num(qs_grenadedefeat) >= 2) client_cmd(0, "spk qs/grenade_kill") return PLUGIN_CONTINUE } public roundEnd() { if (!get_pcvar_num(qs_enable) || !get_pcvar_num(qs_hattrick)) return PLUGIN_HANDLED new players[32], playerNum get_players(players, playerNum) if (g_top != 0 && g_roundKills[g_top] >= get_pcvar_num(qs_hattrick)) set_task(3.0, "setHattrick", g_top) for (new i = 0; i < playerNum; i++) { g_roundKills[players[i]] = 0 g_top = 0 } return PLUGIN_CONTINUE } public setHattrick(g_top) { new name[32] get_user_name(g_top, name, 32) set_hudmessage(200, 200, 200, -1.0, 0.27, 0, 6.0, 5.0) ShowSyncHudMsg(0, g_msgHudSync, "%L", LANG_SERVER, "HATTRICK", name) client_cmd(0, "spk qs/biggamehunter") } public soundCTWin() checkAlive("CT") public soundTWin() checkAlive("TERRORIST") checkAlive(const team[]) { if (!get_pcvar_num(qs_enable) || !get_pcvar_num(qs_flawlessvictory)) return PLUGIN_HANDLED new players[32], playerNum, bool:g_flawlessVictory = true get_players(players, playerNum, "e", team) for (new i = 0; i < playerNum; i++) { if (!is_user_alive(players[i]) && g_died[players[i]]) { g_flawlessVictory = false break } } for (new i = get_pcvar_num(qs_flawlessvictory); i <= get_maxplayers(); i++) if (g_flawlessVictory && is_user_connected(i)) set_task(1.5, "setFlawlessVictory", team[0]) return 1 } public setFlawlessVictory(team) { if (team == 'C') { set_hudmessage(200, 200, 200, 0.64, 0.85, 0, 6.0, 10.0) show_hudmessage(0, "%L", LANG_SERVER, "FLAWLESS_VICTORY_CT") client_cmd(0, "speak qs/retribution") } else if (team == 'T') { set_hudmessage(200, 200, 200, 0.64, 0.85, 0, 6.0, 10.0) show_hudmessage(0, "%L", LANG_SERVER, "FLAWLESS_VICTORY_T") client_cmd(0, "speak qs/retribution") } } new const bombPlantedSound[] = "qs/c4powa.wav" public plugin_precache() { new i for (i = 0; i < 19; i++) precache_sound(streakSounds[i]) precache_sound("qs/firstblood.wav") precache_sound("qs/humiliation.wav") precache_sound("qs/biggamehunter.wav") precache_sound("qs/c4powa.wav") precache_sound("qs/retribution.wav") precache_sound("qs/grenade_kill.wav") precache_sound(bombPlantedSound) precache_sound(forceSound); } public bombPlanted() { client_cmd(0, "speak %s", bombPlantedSound) } /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par } */ mp3 #include <amxmodx> #include <amxmisc> #include <cstrike> #define VERSION "2.0" new g_kills[33] = {0,...} new g_deaths[33] = {0,...} new g_levels[19] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20} new g_roundKills[33], g_top new g_firstBlood new bool:g_died[33] new streakMsgs[19][] = { "DOUBLEKILL", "TRIPLEKILL", "MULTIKILL", "MEGAKILL", "ULTRAKILL", "MONSTERKILL", "ASSASIN", "JUGGERNAUT", "BIOHAZARD", "BLAZEOFGLORY", "ERADICATION", "EXTERMINATION", "MANIAC", "MASSACRE", "MUTUALDESTRUCTION", "SHAFTMASTER", "UNREAL", "ROCKETSCIENTIST", "TOPGUN" } new streakSounds[19][] = { "qs/doublekill.mp3", "qs/triplekill.mp3", "qs/multikill.mp3", "qs/megakill.mp3", "qs/ultrakill.mp3", "qs/monsterkill.mp3", "qs/assasin.mp3", "qs/juggernaut.mp3", "qs/biohazard.mp3", "qs/blazeofglory.mp3", "qs/eradication.mp3", "qs/extermination.mp3", "qs/maniac.mp3", "qs/massacre.mp3", "qs/mutualdestruction.mp3", "qs/shaftmaster.mp3", "qs/unreal.mp3", "qs/rocketscientist.mp3", "qs/topgun.mp3" } new qs_enable, qs_streak, qs_firstblood, qs_humiliatingdefeat, qs_hattrick, qs_flawlessvictory, qs_forcewithyou new qs_grenadedefeat new g_msgHudSync public plugin_init() { register_plugin("Quake Sounds", VERSION, "hleV") register_dictionary("quakesounds.txt") register_dictionary("common.txt") register_concmd("amx_quakesounds", "cmdQuakeSounds", ADMIN_RCON, "<1|0> - enables/disables Quake Sounds") qs_enable = register_cvar("qs_enable", "1") qs_streak = register_cvar("qs_streak", "1") qs_firstblood = register_cvar("qs_firstblood", "1") qs_humiliatingdefeat = register_cvar("qs_humiliatingdefeat", "1") qs_grenadedefeat = register_cvar("qs_grenadedefeat", "1") qs_hattrick = register_cvar("qs_hattrick", "4") qs_flawlessvictory = register_cvar("qs_flawlessvictory", "6") qs_forcewithyou = register_cvar("qs_forcewithyou", "1") register_event("DeathMsg", "death", "a", "1>0") register_event("DeathMsg", "deathHD", "a", "4&kni") register_event("DeathMsg", "deathGrenade", "a", "4&grenade") register_event("SendAudio", "roundEnd", "a", "2=%!MRAD_terwin", "2=%!MRAD_ctwin", "2=%!MRAD_rounddraw") register_event("SendAudio", "soundCTWin", "a", "2=%!MRAD_ctwin") register_event("SendAudio", "soundTWin", "a", "2=%!MRAD_terwin") register_logevent("gameStart", 2, "1=Game_Commencing") register_logevent("roundStart", 2, "1=Round_Start") register_logevent("bombPlanted", 3, "2=Planted_The_Bomb") g_msgHudSync = CreateHudSyncObj() } public cmdQuakeSounds(id, level) { if (!(get_user_flags(id) & level)) { console_print(id, "%L", LANG_SERVER, "NO_ACC_COM") return PLUGIN_HANDLED } new arg[2] read_argv(1, arg, 1) if (equali(arg, "1")) { if (get_pcvar_num(qs_enable)) console_print(id, "%L", LANG_SERVER, "ALREADY_ENABLED") else { set_pcvar_num(qs_enable, 1) console_print(id, "%L", LANG_SERVER, "ENABLED") } } else if (equali(arg, "0")) { if (get_pcvar_num(qs_enable)) { set_pcvar_num(qs_enable, 0) console_print(id, "%L", LANG_SERVER, "DISABLED") } else console_print(id, "%L", LANG_SERVER, "ALREADY_DISABLED") } else console_print(id, "%L: amx_quakesounds <1|0>", LANG_SERVER, "USAGE") return PLUGIN_HANDLED } public client_connect(id) { g_kills[id] = 0 g_deaths[id] = 0 g_roundKills[id] = 0 g_top = 0 client_cmd(id,"MP3volume 0.5") } public death() { if (!get_pcvar_num(qs_enable)) return PLUGIN_HANDLED new killer = read_data(1) new victim = read_data(2) g_kills[victim] = 0 g_deaths[victim] += 1 g_died[victim] = true if(get_pcvar_num(qs_streak) && killer != victim) { g_kills[killer] += 1 g_kills[victim] = 0 if(g_kills[killer] > g_levels[18]) streakAnnounce(killer, 18) else { for (new i = 0; i < 19; i++) if (g_kills[killer] == g_levels[i]) streakAnnounce(killer, i) } } if (get_pcvar_num(qs_firstblood) && g_firstBlood && killer != victim) { new name[32] get_user_name(killer, name, 31) set_hudmessage(50,100,227, -1.0, 0.30, 0, 6.0, 6.0) ShowSyncHudMsg(0, g_msgHudSync, "%L", LANG_SERVER, "FIRST_BLOOD", name) client_cmd(0, "mp3 play sound/qs/firstBlood") g_firstBlood = 0 } if (get_pcvar_num(qs_hattrick) && killer != victim) { g_roundKills[killer] = g_roundKills[killer] + 1 topPlayer() } if(get_pcvar_num(qs_forcewithyou)) { new players[32],num,index; get_players(players,num,"ae",(cs_get_user_team(victim) == CS_TEAM_T) ? "TERRORIST" : "CT"); if(num == 1) { index = players[0]; get_players(players,num,"ae", (cs_get_user_team(victim) == CS_TEAM_T) ? "CT" : "TERRORIST"); if(num > 1) { new name[32]; get_user_name(index,name,32); set_hudmessage(50,100,227, 0.08, 0.57, 2, 0.02, 6.0, 0.01, 0.1, 2) ShowSyncHudMsg(0, g_msgHudSync, "%L", LANG_SERVER, "FORCE", name) client_cmd(0, "mp3 play sound/qs/force"); } } } return PLUGIN_CONTINUE } streakAnnounce(killer, level) { new name[32] // new r = random(256) // new g = random(256) // new b = random(256) get_user_name(killer, name, 32) set_hudmessage(50,100,227, 0.08, 0.57, 2, 0.02, 6.0, 0.01, 0.1, 2) ShowSyncHudMsg(0, g_msgHudSync, "%L", LANG_SERVER, streakMsgs[level], name) client_cmd(0, "mp3 play sound/%s", streakSounds[level]) } public topPlayer() { new players[32], score, playerNum get_players(players, playerNum) for (new i = 0; i < playerNum; i++) { if (g_roundKills[players[i]] > score) { score = g_roundKills[players[i]] g_top = players[i] } else if (g_roundKills[players[i]] == score) g_top = 0 } } public gameStart() g_firstBlood = 1 public roundStart() { if (get_pcvar_num(qs_firstblood) >= 2) g_firstBlood = 1 for (new i = 1; i <= get_maxplayers(); i++) g_died[i] = false } public deathHD() { if (!get_pcvar_num(qs_enable) || !get_pcvar_num(qs_humiliatingdefeat)) return PLUGIN_HANDLED if (get_pcvar_num(qs_humiliatingdefeat) == 1) client_cmd(0, "mp3 play sound/qs/humiliatingdefeat") else if (get_pcvar_num(qs_humiliatingdefeat) >= 2) client_cmd(0, "mp3 play sound/qs/humiliation") return PLUGIN_CONTINUE } public deathGrenade() { if (!get_pcvar_num(qs_enable) || !get_pcvar_num(qs_grenadedefeat) || read_data(1) == read_data(2)) return PLUGIN_HANDLED if (get_pcvar_num(qs_grenadedefeat) == 1) client_cmd(0, "mp3 play sound/qs/grenade_kill") else if (get_pcvar_num(qs_grenadedefeat) >= 2) client_cmd(0, "mp3 play sound/qs/grenade_kill") return PLUGIN_CONTINUE } public roundEnd() { if (!get_pcvar_num(qs_enable) || !get_pcvar_num(qs_hattrick)) return PLUGIN_HANDLED new players[32], playerNum get_players(players, playerNum) if (g_top != 0 && g_roundKills[g_top] >= get_pcvar_num(qs_hattrick)) set_task(3.0, "setHattrick", g_top) for (new i = 0; i < playerNum; i++) { g_roundKills[players[i]] = 0 g_top = 0 } return PLUGIN_CONTINUE } public setHattrick(g_top) { new name[32] get_user_name(g_top, name, 32) set_hudmessage(200, 200, 200, -1.0, 0.27, 0, 6.0, 5.0) ShowSyncHudMsg(0, g_msgHudSync, "%L", LANG_SERVER, "HATTRICK", name) client_cmd(0, "mp3 play sound/qs/biggamehunter") } public soundCTWin() checkAlive("CT") public soundTWin() checkAlive("TERRORIST") checkAlive(const team[]) { if (!get_pcvar_num(qs_enable) || !get_pcvar_num(qs_flawlessvictory)) return PLUGIN_HANDLED new players[32], playerNum, bool:g_flawlessVictory = true get_players(players, playerNum, "e", team) for (new i = 0; i < playerNum; i++) { if (!is_user_alive(players[i]) && g_died[players[i]]) { g_flawlessVictory = false break } } for (new i = get_pcvar_num(qs_flawlessvictory); i <= get_maxplayers(); i++) if (g_flawlessVictory && is_user_connected(i)) set_task(1.5, "setFlawlessVictory", team[0]) return 1 } public setFlawlessVictory(team) { if (team == 'C') { set_hudmessage(200, 200, 200, 0.64, 0.85, 0, 6.0, 10.0) show_hudmessage(0, "%L", LANG_SERVER, "FLAWLESS_VICTORY_CT") client_cmd(0, "mp3 play sound/qs/retribution") } else if (team == 'T') { set_hudmessage(200, 200, 200, 0.64, 0.85, 0, 6.0, 10.0) show_hudmessage(0, "%L", LANG_SERVER, "FLAWLESS_VICTORY_T") client_cmd(0, "mp3 play sound/qs/retribution") } } public plugin_precache() { precache_generic("sound/qs/firstblood.mp3") precache_generic("sound/qs/humiliation.mp3") precache_generic("sound/qs/biggamehunter.mp3") precache_generic("sound/qs/c4powa.mp3") precache_generic("sound/qs/retribution.mp3") precache_generic("sound/qs/grenade_kill.mp3") precache_generic("sound/qs/c4powa.mp3") precache_generic("sound/qs/force.mp3") precache_generic("sound/qs/doublekill.mp3") precache_generic("sound/qs/triplekill.mp3") precache_generic("sound/qs/multikill.mp3") precache_generic("sound/qs/megakill.mp3") precache_generic("sound/qs/ultrakill.mp3") precache_generic("sound/qs/monsterkill.mp3") precache_generic("sound/qs/assasin.mp3") precache_generic("sound/qs/juggernaut.mp3") precache_generic("sound/qs/biohazard.mp3") precache_generic("sound/qs/blazeofglory.mp3") precache_generic("sound/qs/eradication.mp3") precache_generic("sound/qs/extermination.mp3") precache_generic("sound/qs/maniac.mp3") precache_generic("sound/qs/massacre.mp3") precache_generic("sound/qs/mutualdestruction.mp3") precache_generic("sound/qs/shaftmaster.mp3") precache_generic("sound/qs/unreal.mp3") precache_generic("sound/qs/rocketscientist.mp3") precache_generic("sound/qs/topgun.mp3") } public bombPlanted() { client_cmd(0, "mp3 play sound/qs/c4powa.mp3") } Переделанный TOP15 (никнейм я забыл). Плагин в таблице лучших добавляет у 1-3 места рядом золотой, серебряный и бронзовый кубки. Смотриться забавно. Необходимо выключить stats.amxx, вроде. Нашел оригинал темы, откуда брал. Там же и скриншот. https://forums.alliedmods.net/showthread.ph...highlight=top15 Отдельно кубки. Скрытый текст #include <amxmodx> #include <amxmisc> #include <csx> // Add colors here, as much as you want new const g_szTopColors[ ][ ] = { "#ff0000", "#07fcff", "#fff007" }; new const g_szCups[ ][ ] = { "http://img69.imageshack.us/img69/7754/golduj.jpg", "http://img696.imageshack.us/img696/9629/silvernh.jpg", "http://img706.imageshack.us/img706/5541/bronse.jpg" }; // Uncomment to activate log debug messages. //#define STATSX_DEBUG // HUD statistics duration in seconds (minimum 1.0 seconds). #define HUD_DURATION_CVAR "amx_statsx_duration" #define HUD_DURATION "12.0" // HUD statistics stop relative freeze end in seconds. // To stop before freeze end use a negative value. #define HUD_FREEZE_LIMIT_CVAR "amx_statsx_freeze" #define HUD_FREEZE_LIMIT "-2.0" // HUD statistics minimum duration, in seconds, to trigger the display logic. #define HUD_MIN_DURATION 0.2 // Config plugin constants. #define MODE_HUD_DELAY 0 // Make a 0.01 sec delay on HUD reset process. // You can also manualy enable or disable these options by setting them to 1 // For example: // public ShowAttackers = 1 // However amx_statscfg command is recommended public KillerChat = 0 // displays killer hp&ap to victim console // and screen public ShowAttackers = 0 // shows attackers public ShowVictims = 0 // shows victims public ShowKiller = 0 // shows killer public ShowTeamScore = 0 // shows team score at round end public ShowTotalStats = 0 // shows round total stats public ShowBestScore = 0 // shows rounds best scored player public ShowMostDisruptive = 0 // shows rounds most disruptive player public EndPlayer = 0 // displays player stats at the end of map public EndTop15 = 0 // displays top15 at the end of map public SayHP = 0 // displays information about user killer public SayStatsMe = 0 // displays user's stats and rank public SayRankStats = 0 // displays user's rank stats public SayMe = 0 // displays user's stats public SayRank = 0 // displays user's rank public SayReport = 0 // report user's weapon status to team public SayScore = 0 // displays team's map score public SayTop15 = 0 // displays first 15 players public SayStatsAll = 0 // displays all players stats and rank public ShowStats = 1 // set client HUD-stats switched off by default public ShowDistHS = 0 // show distance and HS in attackers and // victims HUD lists public ShowFullStats = 0 // show full HUD stats (more than 78 chars) public SpecRankInfo = 0 // displays rank info when spectating // Standard Contstants. #define MAX_TEAMS 2 #define MAX_PLAYERS 32 + 1 #define MAX_NAME_LENGTH 31 #define MAX_WEAPON_LENGTH 31 #define MAX_TEXT_LENGTH 255 #define MAX_BUFFER_LENGTH 2047 // User stats parms id #define STATS_KILLS 0 #define STATS_DEATHS 1 #define STATS_HS 2 #define STATS_TKS 3 #define STATS_SHOTS 4 #define STATS_HITS 5 #define STATS_DAMAGE 6 // Global player flags. new BODY_PART[8][] = { "WHOLEBODY", "HEAD", "CHEST", "STOMACH", "LEFTARM", "RIGHTARM", "LEFTLEG", "RIGHTLEG" } // Killer information, save killer info at the time when player is killed. #define KILLED_KILLER_ID 0 // Killer userindex/user-ID #define KILLED_KILLER_HEALTH 1 // Killer's health #define KILLED_KILLER_ARMOUR 2 // Killer's armour #define KILLED_TEAM 3 // Killer's team #define KILLED_KILLER_STATSFIX 4 // Fix to register the last hit/kill new g_izKilled[MAX_PLAYERS][5] // Menu variables and configuration #define MAX_PPL_MENU_ACTIONS 2 // Number of player menu actions #define PPL_MENU_OPTIONS 7 // Number of player options per displayed menu new g_iPluginMode = 0 new g_izUserMenuPosition[MAX_PLAYERS] = {0, ...} new g_izUserMenuAction[MAX_PLAYERS] = {0, ...} new g_izUserMenuPlayers[MAX_PLAYERS][32] new g_izSpecMode[MAX_PLAYERS] = {0, ...} new g_izShowStatsFlags[MAX_PLAYERS] = {0, ...} new g_izStatsSwitch[MAX_PLAYERS] = {0, ...} new Float:g_fzShowUserStatsTime[MAX_PLAYERS] = {0.0, ...} new Float:g_fShowStatsTime = 0.0 new Float:g_fFreezeTime = 0.0 new Float:g_fFreezeLimitTime = 0.0 new Float:g_fHUDDuration = 0.0 new g_iRoundEndTriggered = 0 new g_iRoundEndProcessed = 0 new Float:g_fStartGame = 0.0 new g_izTeamScore[MAX_TEAMS] = {0, ...} new g_izTeamEventScore[MAX_TEAMS] = {0, ...} new g_izTeamRndStats[MAX_TEAMS][8] new g_izTeamGameStats[MAX_TEAMS][8] new g_izUserUserID[MAX_PLAYERS] = {0, ...} new g_izUserAttackerDistance[MAX_PLAYERS] = {0, ...} new g_izUserVictimDistance[MAX_PLAYERS][MAX_PLAYERS] new g_izUserRndName[MAX_PLAYERS][MAX_NAME_LENGTH + 1] new g_izUserRndStats[MAX_PLAYERS][8] new g_izUserGameStats[MAX_PLAYERS][8] // Common buffer to improve performance, as Small always zero-initializes all vars new g_sBuffer[MAX_BUFFER_LENGTH + 1] = "" new g_sScore[MAX_TEXT_LENGTH + 1] = "" new g_sAwardAndScore[MAX_BUFFER_LENGTH + 1] = "" new t_sText[MAX_TEXT_LENGTH + 1] = "" new t_sName[MAX_NAME_LENGTH + 1] = "" new t_sWpn[MAX_WEAPON_LENGTH + 1] = "" new g_HudSync_EndRound new g_HudSync_SpecInfo //-------------------------------- // Initialize //-------------------------------- public plugin_init() { // Register plugin. register_plugin("StatsX", AMXX_VERSION_STR, "AMXX Dev Team") register_dictionary("statsx.txt") // Register events. register_event("TextMsg", "eventStartGame", "a", "2=#Game_Commencing", "2=#Game_will_restart_in") register_event("ResetHUD", "eventResetHud", "be") register_event("RoundTime", "eventStartRound", "bc") register_event("SendAudio", "eventEndRound", "a", "2=%!MRAD_terwin", "2=%!MRAD_ctwin", "2=%!MRAD_rounddraw") register_event("TeamScore", "eventTeamScore", "a") register_event("30", "eventIntermission", "a") register_event("TextMsg", "eventSpecMode", "bd", "2&ec_Mod") register_event("StatusValue", "eventShowRank", "bd", "1=2") // Register commands. register_clcmd("say /hp", "cmdHp", 0, "- display info. about your killer (chat)") register_clcmd("say /statsme", "cmdStatsMe", 0, "- display your stats (MOTD)") register_clcmd("say /rankstats", "cmdRankStats", 0, "- display your server stats (MOTD)") register_clcmd("say /me", "cmdMe", 0, "- display current round stats (chat)") register_clcmd("say /score", "cmdScore", 0, "- display last score (chat)") register_clcmd("say /rank", "cmdRank", 0, "- display your rank (chat)") register_clcmd("say /report", "cmdReport", 0, "- display weapon status (say_team)") register_clcmd("say /top15", "cmdTop15", 0, "- display top 15 players (MOTD)") register_clcmd("say /stats", "cmdStats", 0, "- display players stats (menu/MOTD)") register_clcmd("say /switch", "cmdSwitch", 0, "- switch client's stats on or off") register_clcmd("say_team /hp", "cmdHp", 0, "- display info. about your killer (chat)") register_clcmd("say_team /statsme", "cmdStatsMe", 0, "- display your stats (MOTD)") register_clcmd("say_team /rankstats", "cmdRankStats", 0, "- display your server stats (MOTD)") register_clcmd("say_team /me", "cmdMe", 0, "- display current round stats (chat)") register_clcmd("say_team /score", "cmdScore", 0, "- display last score (chat)") register_clcmd("say_team /rank", "cmdRank", 0, "- display your rank (chat)") register_clcmd("say_team /report", "cmdReport", 0, "- display weapon status (say_team_team)") register_clcmd("say_team /top15", "cmdTop15", 0, "- display top 15 players (MOTD)") register_clcmd("say_team /stats", "cmdStats", 0, "- display players stats (menu/MOTD)") register_clcmd("say_team /switch", "cmdSwitch", 0, "- switch client's stats on or off") // Register menus. register_menucmd(register_menuid("Server Stats"), 1023, "actionStatsMenu") // Register special configuration setting and default value. register_srvcmd("amx_statsx_mode", "cmdPluginMode", ADMIN_CFG, "<flags> - sets plugin options") #if defined STATSX_DEBUG register_clcmd("say /hudtest", "cmdHudTest") #endif register_cvar(HUD_DURATION_CVAR, HUD_DURATION) register_cvar(HUD_FREEZE_LIMIT_CVAR, HUD_FREEZE_LIMIT) // Init buffers and some global vars. g_sBuffer[0] = 0 save_team_chatscore() g_HudSync_EndRound = CreateHudSyncObj() g_HudSync_SpecInfo = CreateHudSyncObj() } public plugin_cfg() { new addStast[] = "amx_statscfg add ^"%s^" %s" server_cmd(addStast, "ST_SHOW_KILLER_CHAT", "KillerChat") server_cmd(addStast, "ST_SHOW_ATTACKERS", "ShowAttackers") server_cmd(addStast, "ST_SHOW_VICTIMS", "ShowVictims") server_cmd(addStast, "ST_SHOW_KILLER", "ShowKiller") server_cmd(addStast, "ST_SHOW_TEAM_SCORE", "ShowTeamScore") server_cmd(addStast, "ST_SHOW_TOTAL_STATS", "ShowTotalStats") server_cmd(addStast, "ST_SHOW_BEST_SCORE", "ShowBestScore") server_cmd(addStast, "ST_SHOW_MOST_DISRUPTIVE", "ShowMostDisruptive") server_cmd(addStast, "ST_SHOW_HUD_STATS_DEF", "ShowStats") server_cmd(addStast, "ST_SHOW_DIST_HS_HUD", "ShowDistHS") server_cmd(addStast, "ST_STATS_PLAYER_MAP_END", "EndPlayer") server_cmd(addStast, "ST_STATS_TOP15_MAP_END", "EndTop15") server_cmd(addStast, "ST_SAY_HP", "SayHP") server_cmd(addStast, "ST_SAY_STATSME", "SayStatsMe") server_cmd(addStast, "ST_SAY_RANKSTATS", "SayRankStats") server_cmd(addStast, "ST_SAY_ME", "SayMe") server_cmd(addStast, "ST_SAY_RANK", "SayRank") server_cmd(addStast, "ST_SAY_REPORT", "SayReport") server_cmd(addStast, "ST_SAY_SCORE", "SayScore") server_cmd(addStast, "ST_SAY_TOP15", "SayTop15") server_cmd(addStast, "ST_SAY_STATS", "SayStatsAll") server_cmd(addStast, "ST_SPEC_RANK", "SpecRankInfo") // Update local configuration vars with value in cvars. get_config_cvars() } // Set hudmessage format. set_hudtype_killer(Float:fDuration) set_hudmessage(220, 80, 0, 0.05, 0.15, 0, 6.0, fDuration, (fDuration >= g_fHUDDuration) ? 1.0 : 0.0, 1.0, -1) set_hudtype_endround(Float:fDuration) { set_hudmessage(100, 200, 0, 0.05, 0.55, 0, 0.02, fDuration, (fDuration >= g_fHUDDuration) ? 1.0 : 0.0, 1.0) } set_hudtype_attacker(Float:fDuration) set_hudmessage(220, 80, 0, 0.55, 0.35, 0, 6.0, fDuration, (fDuration >= g_fHUDDuration) ? 1.0 : 0.0, 1.0, -1) set_hudtype_victim(Float:fDuration) set_hudmessage(0, 80, 220, 0.55, 0.60, 0, 6.0, fDuration, (fDuration >= g_fHUDDuration) ? 1.0 : 0.0, 1.0, -1) set_hudtype_specmode() { set_hudmessage(255, 255, 255, 0.02, 0.96, 2, 0.05, 0.1, 0.01, 3.0, -1) } #if defined STATSX_DEBUG public cmdHudTest(id) { new i, iLen iLen = 0 for (i = 1; i < 20; i++) iLen += format(g_sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "....x....1....x....2....x....3....x....4....x....^n") set_hudtype_killer(50.0) show_hudmessage(id, "%s", g_sBuffer) } #endif // Stats formulas Float:accuracy(izStats[8]) { if (!izStats[STATS_SHOTS]) return (0.0) return (100.0 * float(izStats[STATS_HITS]) / float(izStats[STATS_SHOTS])) } Float:effec(izStats[8]) { if (!izStats[STATS_KILLS]) return (0.0) return (100.0 * float(izStats[STATS_KILLS]) / float(izStats[STATS_KILLS] + izStats[STATS_DEATHS])) } // Distance formula (metric) Float:distance(iDistance) { return float(iDistance) * 0.0254 } // Get plugin config flags. set_plugin_mode(id, sFlags[]) { if (sFlags[0]) g_iPluginMode = read_flags(sFlags) get_flags(g_iPluginMode, t_sText, MAX_TEXT_LENGTH) console_print(id, "%L", id, "MODE_SET_TO", t_sText) return g_iPluginMode } // Get config parameters. get_config_cvars() { g_fFreezeTime = get_cvar_float("mp_freezetime") if (g_fFreezeTime < 0.0) g_fFreezeTime = 0.0 g_fHUDDuration = get_cvar_float(HUD_DURATION_CVAR) if (g_fHUDDuration < 1.0) g_fHUDDuration = 1.0 g_fFreezeLimitTime = get_cvar_float(HUD_FREEZE_LIMIT_CVAR) } // Get and format attackers header and list. get_attackers(id, sBuffer[MAX_BUFFER_LENGTH + 1]) { new izStats[8], izBody[8] new iAttacker new iFound, iLen new iMaxPlayer = get_maxplayers() iFound = 0 sBuffer[0] = 0 // Get and format header. Add killing attacker statistics if user is dead. // Make sure shots is greater than zero or division by zero will occur. // To print a '%', 4 of them must done in a row. izStats[STATS_SHOTS] = 0 iAttacker = g_izKilled[id][KILLED_KILLER_ID] if (iAttacker) get_user_astats(id, iAttacker, izStats, izBody) if (izStats[STATS_SHOTS] && ShowFullStats) { get_user_name(iAttacker, t_sName, MAX_NAME_LENGTH) iLen = format(sBuffer, MAX_BUFFER_LENGTH, "%L -- %s -- %0.2f%% %L:^n", id, "ATTACKERS", t_sName, accuracy(izStats), id, "ACC") } else iLen = format(sBuffer, MAX_BUFFER_LENGTH, "%L:^n", id, "ATTACKERS") // Get and format attacker list. for (iAttacker = 1; iAttacker <= iMaxPlayer; iAttacker++) { if (get_user_astats(id, iAttacker, izStats, izBody, t_sWpn, MAX_WEAPON_LENGTH)) { iFound = 1 get_user_name(iAttacker, t_sName, MAX_NAME_LENGTH) if (izStats[STATS_KILLS]) { if (!ShowDistHS) iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s -- %d %L / %d %L / %s^n", t_sName, izStats[STATS_HITS], id, "HIT_S", izStats[STATS_DAMAGE], id, "DMG", t_sWpn) else if (izStats[STATS_HS]) iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s -- %d %L / %d %L / %s / %0.0f m / HS^n", t_sName, izStats[STATS_HITS], id, "HIT_S", izStats[STATS_DAMAGE], id, "DMG", t_sWpn, distance(g_izUserAttackerDistance[id])) else iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s -- %d %L / %d %L / %s / %0.0f m^n", t_sName, izStats[STATS_HITS], id, "HIT_S", izStats[STATS_DAMAGE], id, "DMG", t_sWpn, distance(g_izUserAttackerDistance[id])) } else iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s -- %d %L / %d %L^n", t_sName, izStats[STATS_HITS], id, "HIT_S", izStats[STATS_DAMAGE], id, "DMG") } } if (!iFound) sBuffer[0] = 0 return iFound } // Get and format victims header and list get_victims(id, sBuffer[MAX_BUFFER_LENGTH + 1]) { new izStats[8], izBody[8] new iVictim new iFound, iLen new iMaxPlayer = get_maxplayers() iFound = 0 sBuffer[0] = 0 // Get and format header. // Make sure shots is greater than zero or division by zero will occur. // To print a '%', 4 of them must done in a row. izStats[STATS_SHOTS] = 0 get_user_vstats(id, 0, izStats, izBody) if (izStats[STATS_SHOTS]) iLen = format(sBuffer, MAX_BUFFER_LENGTH, "%L -- %0.2f%% %L:^n", id, "VICTIMS", accuracy(izStats), id, "ACC") else iLen = format(sBuffer, MAX_BUFFER_LENGTH, "%L:^n", id, "VICTIMS") for (iVictim = 1; iVictim <= iMaxPlayer; iVictim++) { if (get_user_vstats(id, iVictim, izStats, izBody, t_sWpn, MAX_WEAPON_LENGTH)) { iFound = 1 get_user_name(iVictim, t_sName, MAX_NAME_LENGTH) if (izStats[STATS_DEATHS]) { if (!ShowDistHS) iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s -- %d %L / %d %L / %s^n", t_sName, izStats[STATS_HITS], id, "HIT_S", izStats[STATS_DAMAGE], id, "DMG", t_sWpn) else if (izStats[STATS_HS]) iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s -- %d %L / %d %L / %s / %0.0f m / HS^n", t_sName, izStats[STATS_HITS], id, "HIT_S", izStats[STATS_DAMAGE], id, "DMG", t_sWpn, distance(g_izUserVictimDistance[id][iVictim])) else iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s -- %d %L / %d %L / %s / %0.0f m^n", t_sName, izStats[STATS_HITS], id, "HIT_S", izStats[STATS_DAMAGE], id, "DMG", t_sWpn, distance(g_izUserVictimDistance[id][iVictim])) } else iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%s -- %d %L / %d %L^n", t_sName, izStats[STATS_HITS], id, "HIT_S", izStats[STATS_DAMAGE], id, "DMG") } } if (!iFound) sBuffer[0] = 0 return iFound } // Get and format kill info. get_kill_info(id, iKiller, sBuffer[MAX_BUFFER_LENGTH + 1]) { new iFound, iLen iFound = 0 sBuffer[0] = 0 if (iKiller && iKiller != id) { new izAStats[8], izABody[8], izVStats[8], iaVBody[8] iFound = 1 get_user_name(iKiller, t_sName, MAX_NAME_LENGTH) izAStats[STATS_HITS] = 0 izAStats[STATS_DAMAGE] = 0 t_sWpn[0] = 0 get_user_astats(id, iKiller, izAStats, izABody, t_sWpn, MAX_WEAPON_LENGTH) izVStats[STATS_HITS] = 0 izVStats[STATS_DAMAGE] = 0 get_user_vstats(id, iKiller, izVStats, iaVBody) iLen = format(sBuffer, MAX_BUFFER_LENGTH, "%L^n", id, "KILLED_YOU_DIST", t_sName, t_sWpn, distance(g_izUserAttackerDistance[id])) iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%L^n", id, "DID_DMG_HITS", izAStats[STATS_DAMAGE], izAStats[STATS_HITS], g_izKilled[id][KILLED_KILLER_HEALTH], g_izKilled[id][KILLED_KILLER_ARMOUR]) iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%L^n", id, "YOU_DID_DMG", izVStats[STATS_DAMAGE], izVStats[STATS_HITS]) } return iFound } // Get and format most disruptive. add_most_disruptive(sBuffer[MAX_BUFFER_LENGTH + 1]) { new id, iMaxDamageId, iMaxDamage, iMaxHeadShots iMaxDamageId = 0 iMaxDamage = 0 iMaxHeadShots = 0 // Find player. for (id = 1; id < MAX_PLAYERS; id++) { if (g_izUserRndStats[id][STATS_DAMAGE] >= iMaxDamage && (g_izUserRndStats[id][STATS_DAMAGE] > iMaxDamage || g_izUserRndStats[id][STATS_HS] > iMaxHeadShots)) { iMaxDamageId = id iMaxDamage = g_izUserRndStats[id][STATS_DAMAGE] iMaxHeadShots = g_izUserRndStats[id][STATS_HS] } } // Format statistics. if (iMaxDamageId) { id = iMaxDamageId new Float:fGameEff = effec(g_izUserGameStats[id]) new Float:fRndAcc = accuracy(g_izUserRndStats[id]) format(t_sText, MAX_TEXT_LENGTH, "%L: %s^n%d %L / %d %L -- %0.2f%% %L / %0.2f%% %L^n", LANG_SERVER, "MOST_DMG", g_izUserRndName[id], g_izUserRndStats[id][STATS_HITS], LANG_SERVER, "HIT_S", iMaxDamage, LANG_SERVER, "DMG", fGameEff, LANG_SERVER, "EFF", fRndAcc, LANG_SERVER, "ACC") add(sBuffer, MAX_BUFFER_LENGTH, t_sText) } return iMaxDamageId } // Get and format best score. add_best_score(sBuffer[MAX_BUFFER_LENGTH + 1]) { new id, iMaxKillsId, iMaxKills, iMaxHeadShots iMaxKillsId = 0 iMaxKills = 0 iMaxHeadShots = 0 // Find player for (id = 1; id < MAX_PLAYERS; id++) { if (g_izUserRndStats[id][STATS_KILLS] >= iMaxKills && (g_izUserRndStats[id][STATS_KILLS] > iMaxKills || g_izUserRndStats[id][STATS_HS] > iMaxHeadShots)) { iMaxKillsId = id iMaxKills = g_izUserRndStats[id][STATS_KILLS] iMaxHeadShots = g_izUserRndStats[id][STATS_HS] } } // Format statistics. if (iMaxKillsId) { id = iMaxKillsId new Float:fGameEff = effec(g_izUserGameStats[id]) new Float:fRndAcc = accuracy(g_izUserRndStats[id]) format(t_sText, MAX_TEXT_LENGTH, "%L: %s^n%d %L / %d hs -- %0.2f%% %L / %0.2f%% %L^n", LANG_SERVER, "BEST_SCORE", g_izUserRndName[id], iMaxKills, LANG_SERVER, "KILL_S", iMaxHeadShots, fGameEff, LANG_SERVER, "EFF", fRndAcc, LANG_SERVER, "ACC") add(sBuffer, MAX_BUFFER_LENGTH, t_sText) } return iMaxKillsId } // Get and format team score. add_team_score(sBuffer[MAX_BUFFER_LENGTH + 1]) { new Float:fzMapEff[MAX_TEAMS], Float:fzMapAcc[MAX_TEAMS], Float:fzRndAcc[MAX_TEAMS] // Calculate team stats for (new iTeam = 0; iTeam < MAX_TEAMS; iTeam++) { fzMapEff[iTeam] = effec(g_izTeamGameStats[iTeam]) fzMapAcc[iTeam] = accuracy(g_izTeamGameStats[iTeam]) fzRndAcc[iTeam] = accuracy(g_izTeamRndStats[iTeam]) } // Format round team stats, MOTD format(t_sText, MAX_TEXT_LENGTH, "TERRORIST %d / %0.2f%% %L / %0.2f%% %L^nCT %d / %0.2f%% %L / %0.2f%% %L^n", g_izTeamScore[0], fzMapEff[0], LANG_SERVER, "EFF", fzRndAcc[0], LANG_SERVER, "ACC", g_izTeamScore[1], fzMapEff[1], LANG_SERVER, "EFF", fzRndAcc[1], LANG_SERVER, "ACC") add(sBuffer, MAX_BUFFER_LENGTH, t_sText) } // Get and format team stats, chat version save_team_chatscore() { new Float:fzMapEff[MAX_TEAMS], Float:fzMapAcc[MAX_TEAMS], Float:fzRndAcc[MAX_TEAMS] // Calculate team stats for (new iTeam = 0; iTeam < MAX_TEAMS; iTeam++) { fzMapEff[iTeam] = effec(g_izTeamGameStats[iTeam]) fzMapAcc[iTeam] = accuracy(g_izTeamGameStats[iTeam]) fzRndAcc[iTeam] = accuracy(g_izTeamRndStats[iTeam]) } // Format game team stats, chat format(g_sScore, MAX_BUFFER_LENGTH, "TERRORIST %d / %0.2f%% %L / %0.2f%% %L -- CT %d / %0.2f%% %L / %0.2f%% %L", g_izTeamScore[0], fzMapEff[0], LANG_SERVER, "EFF", fzMapAcc[0], LANG_SERVER, "ACC", g_izTeamScore[1], fzMapEff[1], LANG_SERVER, "EFF", fzMapAcc[1], LANG_SERVER, "ACC") } // Get and format total stats. add_total_stats(sBuffer[MAX_BUFFER_LENGTH + 1]) { format(t_sText, MAX_TEXT_LENGTH, "%L: %d %L / %d hs -- %d %L / %d %L^n", LANG_SERVER, "TOTAL", g_izUserRndStats[0][STATS_KILLS], LANG_SERVER, "KILL_S", g_izUserRndStats[0][STATS_HS], g_izUserRndStats[0][STATS_HITS], LANG_SERVER, "HITS", g_izUserRndStats[0][STATS_SHOTS], LANG_SERVER, "SHOT_S") add(sBuffer, MAX_BUFFER_LENGTH, t_sText) } // Get and format a user's list of body hits from an attacker. add_attacker_hits(id, iAttacker, sBuffer[MAX_BUFFER_LENGTH + 1]) { new iFound = 0 if (iAttacker && iAttacker != id) { new izStats[8], izBody[8], iLen izStats[STATS_HITS] = 0 get_user_astats(id, iAttacker, izStats, izBody) if (izStats[STATS_HITS]) { iFound = 1 iLen = strlen(sBuffer) get_user_name(iAttacker, t_sName, MAX_NAME_LENGTH) iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%L:^n", id, "HITS_YOU_IN", t_sName) for (new i = 1; i < 8; i++) { if (!izBody[i]) continue iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%L: %d^n", id, BODY_PART[i], izBody[i]) } } } return iFound } // Get and format killed stats: killer hp, ap, hits. format_kill_ainfo(id, iKiller, sBuffer[MAX_BUFFER_LENGTH + 1]) { new iFound = 0 if (iKiller && iKiller != id) { new izStats[8], izBody[8] new iLen iFound = 1 get_user_name(iKiller, t_sName, MAX_NAME_LENGTH) izStats[STATS_HITS] = 0 get_user_astats(id, iKiller, izStats, izBody, t_sWpn, MAX_WEAPON_LENGTH) iLen = format(sBuffer, MAX_BUFFER_LENGTH, "%L (%dhp, %dap) >>", id, "KILLED_BY_WITH", t_sName, t_sWpn, distance(g_izUserAttackerDistance[id]), g_izKilled[id][KILLED_KILLER_HEALTH], g_izKilled[id][KILLED_KILLER_ARMOUR]) if (izStats[STATS_HITS]) { for (new i = 1; i < 8; i++) { if (!izBody[i]) continue iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " %L: %d", id, BODY_PART[i], izBody[i]) } } else iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " %L", id, "NO_HITS") } else format(sBuffer, MAX_BUFFER_LENGTH, "%L", id, "YOU_NO_KILLER") return iFound } // Get and format killed stats: hits, damage on killer. format_kill_vinfo(id, iKiller, sBuffer[MAX_BUFFER_LENGTH + 1]) { new iFound = 0 new izStats[8] new izBody[8] new iLen izStats[STATS_HITS] = 0 izStats[STATS_DAMAGE] = 0 get_user_vstats(id, iKiller, izStats, izBody) if (iKiller && iKiller != id) { iFound = 1 get_user_name(iKiller, t_sName, MAX_NAME_LENGTH) iLen = format(sBuffer, MAX_BUFFER_LENGTH, "%L >>", id, "YOU_HIT", t_sName, izStats[STATS_HITS], izStats[STATS_DAMAGE]) } else iLen = format(sBuffer, MAX_BUFFER_LENGTH, "%L >>", id, "LAST_RES", izStats[STATS_HITS], izStats[STATS_DAMAGE]) if (izStats[STATS_HITS]) { for (new i = 1; i < 8; i++) { if (!izBody[i]) continue iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " %L: %d", id, BODY_PART[i], izBody[i]) } } else iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, " %L", id, "NO_HITS") return iFound } // Get and format top 15. format_top15(sBuffer[MAX_BUFFER_LENGTH + 1]) { new iMax = get_statsnum() new izStats[8], izBody[8] new iLen = 0 if (iMax > 15) iMax = 15 new lKills[16], lDeaths[16], lHits[16], lShots[16], lEff[16], lAcc[16] format(lKills, 15, "%L", LANG_SERVER, "KILLS") format(lDeaths, 15, "%L", LANG_SERVER, "DEATHS") format(lHits, 15, "%L", LANG_SERVER, "HITS") format(lShots, 15, "%L", LANG_SERVER, "SHOTS") format(lEff, 15, "%L", LANG_SERVER, "EFF") format(lAcc, 15, "%L", LANG_SERVER, "ACC") ucfirst(lEff) ucfirst(lAcc) iLen = format(sBuffer, MAX_BUFFER_LENGTH, "<body bgcolor=#000000><font color=#FFB000><pre>") iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%2s %-23.23s %6s %7s %6s %6s %4s %4s %4s^n", "#", "Nick", lKills, lDeaths, lHits, lShots, "HS", lEff, lAcc) new iMaxColors = sizeof( g_szTopColors ); for (new i = 0; i < iMax && MAX_BUFFER_LENGTH - iLen > 0; i++) { get_stats(i, izStats, izBody, t_sName, MAX_NAME_LENGTH) replace_all(t_sName, MAX_NAME_LENGTH, "<", "[") replace_all(t_sName, MAX_NAME_LENGTH, ">", "]") if( i < iMaxColors ) { iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "<font color=%s>%2d %-22.22s %6d %6d %6d %6d %4d %3.0f%% %3.0f%% <img src=^"%s^"/></font>^n", g_szTopColors[ i ], i + 1, t_sName, izStats[STATS_KILLS], izStats[STATS_DEATHS], izStats[STATS_HITS], izStats[STATS_SHOTS], izStats[STATS_HS], effec(izStats), accuracy(izStats), g_szCups[ i ]) } else { iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%2d %-22.22s %6d %6d %6d %6d %4d %3.0f%% %3.0f%%^n", i + 1, t_sName, izStats[STATS_KILLS], izStats[STATS_DEATHS], izStats[STATS_HITS], izStats[STATS_SHOTS], izStats[STATS_HS], effec(izStats), accuracy(izStats)) } } } // Get and format rank stats. format_rankstats(id, sBuffer[MAX_BUFFER_LENGTH + 1], iMyId = 0) { new izStats[8] = {0, ...} new izBody[8] new iRankPos, iLen new lKills[16], lDeaths[16], lHits[16], lShots[16], lDamage[16], lEff[16], lAcc[16] format(lKills, 15, "%L", id, "KILLS") format(lDeaths, 15, "%L", id, "DEATHS") format(lHits, 15, "%L", id, "HITS") format(lShots, 15, "%L", id, "SHOTS") format(lDamage, 15, "%L", id, "DAMAGE") format(lEff, 15, "%L", id, "EFF") format(lAcc, 15, "%L", id, "ACC") ucfirst(lEff) ucfirst(lAcc) iRankPos = get_user_stats(id, izStats, izBody) iLen = format(sBuffer, MAX_BUFFER_LENGTH, "<body bgcolor=#000000><font color=#FFB000><pre>") iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%L %L^n^n", id, (!iMyId || iMyId == id) ? "YOUR" : "PLAYERS", id, "RANK_IS", iRankPos, get_statsnum()) iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%6s: %d (%d with hs)^n%6s: %d^n%6s: %d^n%6s: %d^n%6s: %d^n%6s: %0.2f%%^n%6s: %0.2f%%^n^n", lKills, izStats[STATS_KILLS], izStats[STATS_HS], lDeaths, izStats[STATS_DEATHS], lHits, izStats[STATS_HITS], lShots, izStats[STATS_SHOTS], lDamage, izStats[STATS_DAMAGE], lEff, effec(izStats), lAcc, accuracy(izStats)) new L_BODY_PART[8][32] for (new i = 1; i < 8; i++) { format(L_BODY_PART[i], 31, "%L", id, BODY_PART[i]) } iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%10s:^n%10s: %d^n%10s: %d^n%10s: %d^n%10s: %d^n%10s: %d^n%10s: %d^n%10s: %d", "HITS", L_BODY_PART[1], izBody[1], L_BODY_PART[2], izBody[2], L_BODY_PART[3], izBody[3], L_BODY_PART[4], izBody[4], L_BODY_PART[5], izBody[5], L_BODY_PART[6], izBody[6], L_BODY_PART[7], izBody[7]) } // Get and format stats. format_stats(id, sBuffer[MAX_BUFFER_LENGTH + 1]) { new izStats[8] = {0, ...} new izBody[8] new iWeapon, iLen new lKills[16], lDeaths[16], lHits[16], lShots[16], lDamage[16], lEff[16], lAcc[16], lWeapon[16] format(lKills, 15, "%L", id, "KILLS") format(lDeaths, 15, "%L", id, "DEATHS") format(lHits, 15, "%L", id, "HITS") format(lShots, 15, "%L", id, "SHOTS") format(lDamage, 15, "%L", id, "DAMAGE") format(lEff, 15, "%L", id, "EFF") format(lAcc, 15, "%L", id, "ACC") format(lWeapon, 15, "%L", id, "WEAPON") ucfirst(lEff) ucfirst(lAcc) get_user_wstats(id, 0, izStats, izBody) iLen = format(sBuffer, MAX_BUFFER_LENGTH, "<body bgcolor=#000000><font color=#FFB000><pre>") iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%6s: %d (%d with hs)^n%6s: %d^n%6s: %d^n%6s: %d^n%6s: %d^n%6s: %0.2f%%^n%6s: %0.2f%%^n^n", lKills, izStats[STATS_KILLS], izStats[STATS_HS], lDeaths, izStats[STATS_DEATHS], lHits, izStats[STATS_HITS], lShots, izStats[STATS_SHOTS], lDamage, izStats[STATS_DAMAGE], lEff, effec(izStats), lAcc, accuracy(izStats)) iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%-12.12s %6s %6s %6s %6s %6s %4s^n", lWeapon, lKills, lDeaths, lHits, lShots, lDamage, lAcc) for (iWeapon = 1; iWeapon < xmod_get_maxweapons() && MAX_BUFFER_LENGTH - iLen > 0 ; iWeapon++) { if (get_user_wstats(id, iWeapon, izStats, izBody)) { xmod_get_wpnname(iWeapon, t_sWpn, MAX_WEAPON_LENGTH) iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%-12.12s %6d %6d %6d %6d %6d %3.0f%%^n", t_sWpn, izStats[STATS_KILLS], izStats[STATS_DEATHS], izStats[STATS_HITS], izStats[STATS_SHOTS], izStats[STATS_DAMAGE], accuracy(izStats)) } } } // Show round end stats. If gametime is zero then use default duration time. show_roundend_hudstats(id, Float:fGameTime) { // Bail out if there no HUD stats should be shown // for this player or end round stats not created. if (!g_izStatsSwitch[id]) return if (!g_sAwardAndScore[0]) return // If round end timer is zero clear round end stats. if (g_fShowStatsTime == 0.0) { ClearSyncHud(id, g_HudSync_EndRound) #if defined STATSX_DEBUG log_amx("Clear round end HUD stats for #%d", id) #endif } // Set HUD-duration to default or remaining time. new Float:fDuration if (fGameTime == 0.0) fDuration = g_fHUDDuration else { fDuration = g_fShowStatsTime + g_fHUDDuration - fGameTime if (fDuration > g_fFreezeTime + g_fFreezeLimitTime) fDuration = g_fFreezeTime + g_fFreezeLimitTime } // Show stats only if more time left than coded minimum. if (fDuration >= HUD_MIN_DURATION) { set_hudtype_endround(fDuration) ShowSyncHudMsg(id, g_HudSync_EndRound, "%s", g_sAwardAndScore) #if defined STATSX_DEBUG log_amx("Show %1.2fs round end HUD stats for #%d", fDuration, id) #endif } } // Show round end stats. show_user_hudstats(id, Float:fGameTime) { // Bail out if there no HUD stats should be shown // for this player or user stats timer is zero. if (!g_izStatsSwitch[id]) return if (g_fzShowUserStatsTime[id] == 0.0) return // Set HUD-duration to default or remaining time. new Float:fDuration if (fGameTime == 0.0) fDuration = g_fHUDDuration else { fDuration = g_fzShowUserStatsTime[id] + g_fHUDDuration - fGameTime if (fDuration > g_fFreezeTime + g_fFreezeLimitTime) fDuration = g_fFreezeTime + g_fFreezeLimitTime } // Show stats only if more time left than coded minimum. if (fDuration >= HUD_MIN_DURATION) { if (ShowKiller) { new iKiller iKiller = g_izKilled[id][KILLED_KILLER_ID] get_kill_info(id, iKiller, g_sBuffer) add_attacker_hits(id, iKiller, g_sBuffer) set_hudtype_killer(fDuration) show_hudmessage(id, "%s", g_sBuffer) #if defined STATSX_DEBUG log_amx("Show %1.2fs %suser HUD k-stats for #%d", fDuration, g_sBuffer[0] ? "" : "no ", id) #endif } if (ShowVictims) { get_victims(id, g_sBuffer) set_hudtype_victim(fDuration) show_hudmessage(id, "%s", g_sBuffer) #if defined STATSX_DEBUG log_amx("Show %1.2fs %suser HUD v-stats for #%d", fDuration, g_sBuffer[0] ? "" : "no ", id) #endif } if (ShowAttackers) { get_attackers(id, g_sBuffer) set_hudtype_attacker(fDuration) show_hudmessage(id, "%s", g_sBuffer) #if defined STATSX_DEBUG log_amx("Show %1.2fs %suser HUD a-stats for #%d", fDuration, g_sBuffer[0] ? "" : "no ", id) #endif } } } //------------------------------------------------------------ // Plugin commands //------------------------------------------------------------ // Set or get plugin config flags. public cmdPluginMode(id, level, cid) { if (!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED if (read_argc() > 1) read_argv(1, g_sBuffer, MAX_BUFFER_LENGTH) else g_sBuffer[0] = 0 set_plugin_mode(id, g_sBuffer) return PLUGIN_HANDLED } // Display MOTD stats. public cmdStatsMe(id) { if (!SayStatsMe) { client_print(id, print_chat, "%L", id, "DISABLED_MSG") return PLUGIN_HANDLED } format_stats(id, g_sBuffer) get_user_name(id, t_sName, MAX_NAME_LENGTH) show_motd(id, g_sBuffer, t_sName) return PLUGIN_CONTINUE } // Display MOTD rank. public cmdRankStats(id) { if (!SayRankStats) { client_print(id, print_chat, "%L", id, "DISABLED_MSG") return PLUGIN_HANDLED } format_rankstats(id, g_sBuffer) get_user_name(id, t_sName, MAX_NAME_LENGTH) show_motd(id, g_sBuffer, t_sName) return PLUGIN_CONTINUE } // Display MOTD top15 ranked. public cmdTop15(id) { if (!SayTop15) { client_print(id, print_chat, "%L", id, "DISABLED_MSG") return PLUGIN_HANDLED } format_top15(g_sBuffer) show_motd(id, g_sBuffer, "Top 15") return PLUGIN_CONTINUE } // Display killer information. public cmdHp(id) { if (!SayHP) { client_print(id, print_chat, "%L", id, "DISABLED_MSG") return PLUGIN_HANDLED } new iKiller = g_izKilled[id][KILLED_KILLER_ID] format_kill_ainfo(id, iKiller, g_sBuffer) client_print(id, print_chat, "* %s", g_sBuffer) return PLUGIN_CONTINUE } // Display user stats. public cmdMe(id) { if (!SayMe) { client_print(id, print_chat, "%L", id, "DISABLED_MSG") return PLUGIN_HANDLED } format_kill_vinfo(id, 0, g_sBuffer) client_print(id, print_chat, "* %s", g_sBuffer) return PLUGIN_CONTINUE } // Display user rank public cmdRank(id) { if (!SayRank) { client_print(id, print_chat, "%L", id, "DISABLED_MSG") return PLUGIN_HANDLED } new izStats[8], izBody[8] new iRankPos, iRankMax new Float:fEff, Float:fAcc iRankPos = get_user_stats(id, izStats, izBody) iRankMax = get_statsnum() fEff = effec(izStats) fAcc = accuracy(izStats) client_print(id, print_chat, "* %L", id, "YOUR_RANK_IS", iRankPos, iRankMax, izStats[STATS_KILLS], izStats[STATS_HITS], fEff, fAcc) return PLUGIN_CONTINUE } // Report user weapon status to team. public cmdReport(id) { if (!SayReport) { client_print(id, print_chat, "%L", id, "DISABLED_MSG") return PLUGIN_HANDLED } new iWeapon, iClip, iAmmo, iHealth, iArmor iWeapon = get_user_weapon(id, iClip, iAmmo) if (iWeapon != 0) xmod_get_wpnname(iWeapon, t_sWpn, MAX_WEAPON_LENGTH) iHealth = get_user_health(id) iArmor = get_user_armor(id) new lWeapon[16] format(lWeapon, 15, "%L", id, "WEAPON") strtolower(lWeapon) if (iClip >= 0) { format(g_sBuffer, MAX_BUFFER_LENGTH, "%s: %s, %L: %d/%d, %L: %d, %L: %d", lWeapon, t_sWpn, LANG_SERVER, "AMMO", iClip, iAmmo, LANG_SERVER, "HEALTH", iHealth, LANG_SERVER, "ARMOR", iArmor) } else format(g_sBuffer, MAX_BUFFER_LENGTH, "%s: %s, %L: %d, %L: %d", lWeapon, t_sWpn[7], LANG_SERVER, "HEALTH", iHealth, LANG_SERVER, "ARMOR", iArmor) engclient_cmd(id, "say_team", g_sBuffer) return PLUGIN_CONTINUE } // Display team map score public cmdScore(id) { if (!SayScore) { client_print(id, print_chat, "%L", id, "DISABLED_MSG") return PLUGIN_HANDLED } client_print(id, print_chat, "%L: %s", id, "GAME_SCORE", g_sScore) return PLUGIN_CONTINUE } // Client switch to enable or disable stats announcements. public cmdSwitch(id) { g_izStatsSwitch[id] = (g_izStatsSwitch[id]) ? 0 : -1 num_to_str(g_izStatsSwitch[id], t_sText, MAX_TEXT_LENGTH) client_cmd(id, "setinfo _amxstatsx %s", t_sText) new lEnDis[32] format(lEnDis, 31, "%L", id, g_izStatsSwitch[id] ? "ENABLED" : "DISABLED") client_print(id, print_chat, "* %L", id, "STATS_ANNOUNCE", lEnDis) return PLUGIN_CONTINUE } // Player stats menu. public cmdStats(id) { if (!SayStatsAll) { client_print(id, print_chat, "%L", id, "DISABLED_MSG") return PLUGIN_HANDLED } showStatsMenu(id, g_izUserMenuPosition[id] = 0) return PLUGIN_CONTINUE } //-------------------------------- // Menu //-------------------------------- public actionStatsMenu(id, key) { switch (key) { // Key '1' to '7', execute action on this option case 0..6: { new iOption, iIndex iOption = (g_izUserMenuPosition[id] * PPL_MENU_OPTIONS) + key if (iOption >= 0 && iOption < 32) { iIndex = g_izUserMenuPlayers[id][iOption] if (is_user_connected(iIndex)) { switch (g_izUserMenuAction[id]) { case 0: format_stats(iIndex, g_sBuffer) case 1: format_rankstats(iIndex, g_sBuffer, id) default: g_sBuffer[0] = 0 } if (g_sBuffer[0]) { get_user_name(iIndex, t_sName, MAX_NAME_LENGTH) show_motd(id, g_sBuffer, t_sName) } } } showStatsMenu(id, g_izUserMenuPosition[id]) } // Key '8', change action case 7: { g_izUserMenuAction[id]++ if (g_izUserMenuAction[id] >= MAX_PPL_MENU_ACTIONS) g_izUserMenuAction[id] = 0 showStatsMenu(id, g_izUserMenuPosition[id]) } // Key '9', select next page of options case 8: showStatsMenu(id, ++g_izUserMenuPosition[id]) // Key '10', cancel or go back to previous menu case 9: { if (g_izUserMenuPosition[id] > 0) showStatsMenu(id, --g_izUserMenuPosition[id]) } } return PLUGIN_HANDLED } new g_izUserMenuActionText[MAX_PPL_MENU_ACTIONS][] = {"Show stats", "Show rank stats"} showStatsMenu(id, iMenuPos) { new iLen, iKeyMask, iPlayers new iUserIndex, iMenuPosMax, iMenuOption, iMenuOptionMax get_players(g_izUserMenuPlayers[id], iPlayers) iMenuPosMax = ((iPlayers - 1) / PPL_MENU_OPTIONS) + 1 // If menu pos does not excist use last menu (if players has left) if (iMenuPos >= iMenuPosMax) iMenuPos = iMenuPosMax - 1 iUserIndex = iMenuPos * PPL_MENU_OPTIONS iLen = format(g_sBuffer, MAX_BUFFER_LENGTH, "\y%L\R%d/%d^n\w^n", id, "SERVER_STATS", iMenuPos + 1, iMenuPosMax) iMenuOptionMax = iPlayers - iUserIndex if (iMenuOptionMax > PPL_MENU_OPTIONS) iMenuOptionMax = PPL_MENU_OPTIONS for (iMenuOption = 0; iMenuOption < iMenuOptionMax; iMenuOption++) { get_user_name(g_izUserMenuPlayers[id][iUserIndex++], t_sName, MAX_NAME_LENGTH) iKeyMask |= (1<<iMenuOption) iLen += format(g_sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%d. %s^n\w", iMenuOption + 1, t_sName) } iKeyMask |= MENU_KEY_8|MENU_KEY_0 iLen += format(g_sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "^n8. %s^n\w", g_izUserMenuActionText[g_izUserMenuAction[id]]) if (iPlayers > iUserIndex) { iLen += format(g_sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "^n9. %L...", id, "MORE") iKeyMask |= MENU_KEY_9 } if (iMenuPos > 0) iLen += format(g_sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "^n0. %L", id, "BACK") else iLen += format(g_sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "^n0. %L", id, "EXIT") show_menu(id, iKeyMask, g_sBuffer, -1, "Server Stats") return PLUGIN_HANDLED } //------------------------------------------------------------ // Plugin events //------------------------------------------------------------ // Reset game stats on game start and restart. public eventStartGame() { read_data(2, t_sText, MAX_TEXT_LENGTH) if (t_sText[6] == 'w') { read_data(3, t_sText, MAX_TEXT_LENGTH) g_fStartGame = get_gametime() + float(str_to_num(t_sText)) } else g_fStartGame = get_gametime() return PLUGIN_CONTINUE } // Round start public eventStartRound() { new iTeam, id, i new Float:roundtime = get_cvar_float("mp_roundtime"); if (read_data(1) >= floatround(roundtime * 60.0,floatround_floor) || (roundtime == 2.3 && read_data(1) == 137)) // these round too weird for it to work through pawn, have to add an exception for it { #if defined STATSX_DEBUG log_amx("Reset round stats") #endif // Reset game stats on game start and restart. if (g_fStartGame > 0.0 && g_fStartGame <= get_gametime()) { #if defined STATSX_DEBUG log_amx("Reset game stats") #endif g_fStartGame = 0.0 // Clear team and game stats. for (iTeam = 0; iTeam < MAX_TEAMS; iTeam++) { g_izTeamEventScore[iTeam] = 0 for (i = 0; i < 8; i++) g_izTeamGameStats[iTeam][i] = 0 } // Clear game stats, incl '0' that is sum of all users. for (id = 0; id < MAX_PLAYERS; id++) { for (i = 0; i < 8; i++) g_izUserGameStats[id][i] = 0 } } // Update team score with "TeamScore" event values and // clear team round stats. for (iTeam = 0; iTeam < MAX_TEAMS; iTeam++) { g_izTeamScore[iTeam] = g_izTeamEventScore[iTeam] for (i = 0; i < 8; i++) g_izTeamRndStats[iTeam][i] = 0 } // Clear user round stats, incl '0' that is sum of all users. for (id = 0; id < MAX_PLAYERS; id++) { g_izUserRndName[id][0] = 0 for (i = 0; i < 8; i++) g_izUserRndStats[id][i] = 0 g_fzShowUserStatsTime[id] = 0.0 } // Allow end round stats and reset end round triggered indicator. g_iRoundEndTriggered = 0 g_iRoundEndProcessed = 0 g_fShowStatsTime = 0.0 // Update local configuration vars with value in cvars. get_config_cvars() } return PLUGIN_CONTINUE } // Reset killer info on round restart. public eventResetHud(id) { new args[1] args[0] = id if (g_iPluginMode & MODE_HUD_DELAY) set_task(0.01, "delay_resethud", 200 + id, args, 1) else delay_resethud(args) return PLUGIN_CONTINUE } public delay_resethud(args[]) { new id = args[0] new Float:fGameTime // Show user and score round stats after HUD-reset #if defined STATSX_DEBUG log_amx("Reset HUD for #%d", id) #endif fGameTime = get_gametime() show_user_hudstats(id, fGameTime) show_roundend_hudstats(id, fGameTime) // Reset round stats g_izKilled[id][KILLED_KILLER_ID] = 0 g_izKilled[id][KILLED_KILLER_STATSFIX] = 0 g_izShowStatsFlags[id] = -1 // Initialize flags g_fzShowUserStatsTime[id] = 0.0 g_izUserAttackerDistance[id] = 0 for (new i = 0; i < MAX_PLAYERS; i++) g_izUserVictimDistance[id][i] = 0 return PLUGIN_CONTINUE } // Save killer info on death. public client_death(killer, victim, wpnindex, hitplace, TK) { // Bail out if no killer. if (!killer) return PLUGIN_CONTINUE if (killer != victim) { new iaVOrigin[3], iaKOrigin[3] new iDistance get_user_origin(victim, iaVOrigin) get_user_origin(killer, iaKOrigin) g_izKilled[victim][KILLED_KILLER_ID] = killer g_izKilled[victim][KILLED_KILLER_HEALTH] = get_user_health(killer) g_izKilled[victim][KILLED_KILLER_ARMOUR] = get_user_armor(killer) g_izKilled[victim][KILLED_KILLER_STATSFIX] = 0 iDistance = get_distance(iaVOrigin, iaKOrigin) g_izUserAttackerDistance[victim] = iDistance g_izUserVictimDistance[killer][victim] = iDistance } g_izKilled[victim][KILLED_TEAM] = get_user_team(victim) g_izKilled[victim][KILLED_KILLER_STATSFIX] = 1 // Display kill stats for the player if round // end stats was not processed. if (!g_iRoundEndProcessed) kill_stats(victim) return PLUGIN_CONTINUE } // Display hudmessage stats on death. // This will also update all round and game stats. // Must be called at least once per round. kill_stats(id) { // Bail out if user stats timer is non-zero, // ie function already called. if (g_fzShowUserStatsTime[id] > 0.0) { return } new team = get_user_team(id) if (team < 1 || team > 2) { return } // Flag kill stats displayed for this player. g_fzShowUserStatsTime[id] = get_gametime() // Add user death stats to user round stats new izStats[8], izBody[8] new iTeam, i new iKiller iKiller = g_izKilled[id][KILLED_KILLER_ID] // Get user's team (if dead use the saved team) if (iKiller) iTeam = g_izKilled[id][KILLED_TEAM] - 1 else iTeam = get_user_team(id) - 1 get_user_name(id, g_izUserRndName[id], MAX_NAME_LENGTH) if (get_user_rstats(id, izStats, izBody)) { // Update user's team round stats if (iTeam >= 0 && iTeam < MAX_TEAMS) { for (i = 0; i < 8; i++) { g_izTeamRndStats[iTeam][i] += izStats[i] g_izTeamGameStats[iTeam][i] += izStats[i] g_izUserRndStats[0][i] += izStats[i] g_izUserGameStats[0][i] += izStats[i] } } // Update user's round stats if (g_izUserUserID[id] == get_user_userid(id)) { for (i = 0; i < 8; i++) { g_izUserRndStats[id][i] += izStats[i] g_izUserGameStats[id][i] += izStats[i] } } else { g_izUserUserID[id] = get_user_userid(id) for (i = 0; i < 8; i++) { g_izUserRndStats[id][i] = izStats[i] g_izUserGameStats[id][i] = izStats[i] } } } // endif (get_user_rstats()) // Report stats in the chat section, if player is killed. if (KillerChat && iKiller && iKiller != id) { if (format_kill_ainfo(id, iKiller, g_sBuffer)) { client_print(id, print_chat, "* %s", g_sBuffer) format_kill_vinfo(id, iKiller, g_sBuffer) } client_print(id, print_chat, "* %s", g_sBuffer) } // Display player stats info. #if defined STATSX_DEBUG log_amx("Kill stats for #%d", id) #endif show_user_hudstats(id, 0.0) } public eventEndRound() { // Update local configuration vars with value in cvars. get_config_cvars() // If first end round event in the round, calculate team score. if (!g_iRoundEndTriggered) { read_data(2, t_sText, MAX_TEXT_LENGTH) if (t_sText[7] == 't') // Terrorist wins g_izTeamScore[0]++ else if (t_sText[7] == 'c') // CT wins g_izTeamScore[1]++ } set_task(0.3, "ERTask", 997) return PLUGIN_CONTINUE } public ERTask() { // Flag round end triggered. g_iRoundEndTriggered = 1 // Display round end stats to all players. endround_stats() } endround_stats() { // Bail out if end round stats has already been processed // or round end not triggered. if (g_iRoundEndProcessed || !g_iRoundEndTriggered) return new iaPlayers[32], iPlayer, iPlayers, id get_players(iaPlayers, iPlayers) // Display attacker & victim list for all living players. // This will also update all round and game stats for all players // not killed. #if defined STATSX_DEBUG log_amx("End round stats") #endif for (iPlayer = 0; iPlayer < iPlayers; iPlayer++) { id = iaPlayers[iPlayer] if (g_fzShowUserStatsTime[id] == 0.0) { kill_stats(id) } } g_sAwardAndScore[0] = 0 // Create round awards. if (ShowMostDisruptive) add_most_disruptive(g_sAwardAndScore) if (ShowBestScore) add_best_score(g_sAwardAndScore) // Create round score. // Compensate HUD message if awards are disabled. if (ShowTeamScore || ShowTotalStats) { if (ShowMostDisruptive && ShowBestScore) add(g_sAwardAndScore, MAX_BUFFER_LENGTH, "^n^n") else if (ShowMostDisruptive || ShowBestScore) add(g_sAwardAndScore, MAX_BUFFER_LENGTH, "^n^n^n^n") else add(g_sAwardAndScore, MAX_BUFFER_LENGTH, "^n^n^n^n^n^n") if (ShowTeamScore) add_team_score(g_sAwardAndScore) if (ShowTotalStats) add_total_stats(g_sAwardAndScore) } save_team_chatscore() // Get and save round end stats time. g_fShowStatsTime = get_gametime() // Display round end stats to all players. for (iPlayer = 0; iPlayer < iPlayers; iPlayer++) { id = iaPlayers[iPlayer] show_roundend_hudstats(id, 0.0) } // Flag round end processed. g_iRoundEndProcessed = 1 } public eventTeamScore() { new sTeamID[1 + 1], iTeamScore read_data(1, sTeamID, 1) iTeamScore = read_data(2) g_izTeamEventScore[(sTeamID[0] == 'C') ? 1 : 0] = iTeamScore return PLUGIN_CONTINUE } public eventIntermission() { if (EndPlayer || EndTop15) set_task(1.0, "end_game_stats", 900) } public end_game_stats() { new iaPlayers[32], iPlayer, iPlayers, id if (EndPlayer) { get_players(iaPlayers, iPlayers) for (iPlayer = 0; iPlayer < iPlayers; iPlayer++) { id = iaPlayers[iPlayer] if (!g_izStatsSwitch[id]) continue // Do not show any stats cmdStatsMe(iaPlayers[iPlayer]) } } else if (EndTop15) { get_players(iaPlayers, iPlayers) format_top15(g_sBuffer) for (iPlayer = 0; iPlayer < iPlayers; iPlayer++) { id = iaPlayers[iPlayer] if (!g_izStatsSwitch[id]) continue // Do not show any stats show_motd(iaPlayers[iPlayer], g_sBuffer, "Top 15") } } return PLUGIN_CONTINUE } public eventSpecMode(id) { new sData[12] read_data(2, sData, 11) g_izSpecMode[id] = (sData[10] == '2') return PLUGIN_CONTINUE } public eventShowRank(id) { if (SpecRankInfo && g_izSpecMode[id]) { new iPlayer = read_data(2) if (is_user_connected(iPlayer)) { new izStats[8], izBody[8] new iRankPos, iRankMax get_user_name(iPlayer, t_sName, MAX_NAME_LENGTH) iRankPos = get_user_stats(iPlayer, izStats, izBody) iRankMax = get_statsnum() set_hudtype_specmode() ShowSyncHudMsg(id, g_HudSync_SpecInfo, "%L", id, "X_RANK_IS", t_sName, iRankPos, iRankMax) } } return PLUGIN_CONTINUE } public client_connect(id) { if (ShowStats) { get_user_info(id, "_amxstatsx", t_sText, MAX_TEXT_LENGTH) g_izStatsSwitch[id] = (t_sText[0]) ? str_to_num(t_sText) : -1 } else g_izStatsSwitch[id] = 0 g_izKilled[id][KILLED_KILLER_ID] = 0 g_izKilled[id][KILLED_KILLER_STATSFIX] = 0 g_izShowStatsFlags[id] = 0 // Clear all flags g_fzShowUserStatsTime[id] = 0.0 return PLUGIN_CONTINUE } Плагин для проигрывания музыки в конце раунда в зависимости от стороны выигравших от 3aHyga (он же creator_52) 1.1 sounds.ini и папку с музыкой, вроде, надо поместить в configs, точно не помню, ибо давно был сервер. Смотрите, если что код. :) Скрытый текст #include <amxmodx> #include <amxmisc> #define S_PLUGIN "Sounds" #define S_VERSION "1.1" #define S_AUTHOR "3aHyga" #define S_PREFIX "[SOUNDS]" static Array:g_s_AllSounds; static Array:g_s_TSound; static Array:g_s_CTSound; static bool:g_b_SoundStatus[33]; public plugin_init() { register_plugin(S_PLUGIN,S_VERSION,S_AUTHOR); register_clcmd("say /stopsound","stop_sound"); register_event("SendAudio","t_win","a","2&%!MRAD_terwin") register_event("SendAudio","ct_win","a","2&%!MRAD_ctwin") } public client_connect(i_Player) { g_b_SoundStatus[i_Player]=true; } public stop_sound(i_Player) { switch(g_b_SoundStatus[i_Player]) { case true:g_b_SoundStatus[i_Player]=false; case false:g_b_SoundStatus[i_Player]=true; } return PLUGIN_HANDLED; } public plugin_precache() { new i_Num=parse_sounds(); if(!i_Num) { server_print("%s No sounds loaded!",S_PREFIX); } else { server_print("%s Loaded %d sounds.",S_PREFIX,i_Num); } } public t_win() { client_cmd(0,"stopsound"); new i_Size=ArraySize(g_s_TSound); if(!i_Size) { reset_sound_archive_t(); } new i_Num; if(i_Size==1) { i_Num=0; } else { i_Num=random_num(0,i_Size-1); } new s_Buffer[64]; ArrayGetString(g_s_TSound,i_Num,s_Buffer,63); ArrayDeleteItem(g_s_TSound,i_Num); for(new a=1;a<33;a++) { if(!is_user_connected(a)||is_user_bot(a)||is_user_hltv(a)||!g_b_SoundStatus[a]) { continue; } client_cmd(a,"mp3 play sound/%s.mp3",s_Buffer); } } public ct_win() { client_cmd(0,"stopsound"); new i_Size=ArraySize(g_s_CTSound); if(!i_Size) { reset_sound_archive_ct(); } new i_Num; if(i_Size==1) { i_Num=0; } else { i_Num=random_num(0,i_Size-1); } new s_Buffer[64]; ArrayGetString(g_s_CTSound,i_Num,s_Buffer,63); client_cmd(0,"mp3 play sound/%s.mp3",s_Buffer); ArrayDeleteItem(g_s_CTSound,i_Num); } stock parse_sounds() { new s_File[128]; get_configsdir(s_File,127); format(s_File,127,"%s/sounds.ini",s_File); if(!file_exists(s_File)) { return 0; } g_s_AllSounds=ArrayCreate(128); g_s_TSound=ArrayCreate(64); g_s_CTSound=ArrayCreate(64); new i_File=fopen(s_File,"rt"); new s_Buffer[128],s_SoundName[64],s_Team[64]; while(!feof(i_File)) { fgets(i_File,s_Buffer,127); trim(s_Buffer); if(!s_Buffer[0]||s_Buffer[0]==';'||(s_Buffer[0]=='/'&&s_Buffer[1]=='/')) { continue; } ArrayPushString(g_s_AllSounds,s_Buffer); parse(s_Buffer,s_SoundName,64,s_Team,64); if(equali(s_Team,"t")) { ArrayPushString(g_s_TSound,s_SoundName); } else { ArrayPushString(g_s_CTSound,s_SoundName); } format(s_SoundName,63,"%s.mp3",s_SoundName); precache_sound(s_SoundName); } fclose(i_File); new i_Size=ArraySize(g_s_AllSounds); if(!i_Size) { return 0; } return i_Size; } stock reset_sound_archive_t() { new i_Size=ArraySize(g_s_AllSounds); new s_Buffer[128],s_SoundName[64],s_Team[64]; for(new a;a<i_Size;a++) { ArrayGetString(g_s_AllSounds,a,s_Buffer,127); parse(s_Buffer,s_SoundName,63,s_Team,63); if(equali(s_Team,"t")) { ArrayPushString(g_s_TSound,s_SoundName); } } } stock reset_sound_archive_ct() { new i_Size=ArraySize(g_s_AllSounds); new s_Buffer[128],s_SoundName[64],s_Team[64]; for(new a;a<i_Size;a++) { ArrayGetString(g_s_AllSounds,a,s_Buffer,127); parse(s_Buffer,s_SoundName,63,s_Team,63); if(equali(s_Team,"ct")) { ArrayPushString(g_s_CTSound,s_SoundName); } } } Плагин для сокрытия серверных переменных от ConnorMcCleod 0.1.0. http://forums.alliedmods.net/showthread.ph...115#post1148115 Файл nsv.cfg надо положить в configs. Скрытый текст #include <amxmodx> #pragma semicolon 1 #define VERSION "0.1.0" new g_szLogFile[64]; public plugin_init() { register_plugin("No See Vars", VERSION, "ConnorMcLeod"); get_localinfo("amxx_logs", g_szLogFile, charsmax(g_szLogFile)); add(g_szLogFile, charsmax(g_szLogFile), "/no_see_vars.log"); } public plugin_cfg() { new szConfigFile[128]; get_localinfo("amxx_configsdir", szConfigFile, charsmax(szConfigFile)); add(szConfigFile, charsmax(szConfigFile), "/nsv.cfg"); new fp = fopen(szConfigFile, "rt"); if( !fp ) { return 0; } new szText[256], szCvar[128], szFlags[4]; while( !feof(fp) ) { fgets(fp, szText, charsmax(szText)); trim(szText); if(!szText[0] || szText[0] == ';' || szText[0] == '#' || (szText[0] == '/' && szText[1] == '/')) { continue; } parse(szText, szCvar, charsmax(szCvar), szFlags, charsmax(szFlags)); SetCvarFlags(szCvar, str_to_num(szFlags)); } fclose(fp); return 1; } SetCvarFlags( const szCvar[] , const iFlags = 0 ) { new pCvar = get_cvar_pointer(szCvar); if( pCvar ) { new iOldFlags = get_pcvar_flags(pCvar); if( iFlags != iOldFlags ) { new fp = fopen(g_szLogFile, "at"); fprintf(fp, "^nSetting cvar ^"%s^" flags to %s^n", szCvar, Util_FCVAR(iFlags)); fprintf(fp, "Previous ^"%s^" flags were %s^n", szCvar, Util_FCVAR(iOldFlags)); fclose(fp); set_pcvar_flags( pCvar, iFlags ); } return 1; } return 0; } Util_FCVAR( const fCvar ) { new szFlags[256], n; if( fCvar & FCVAR_ARCHIVE ) n += formatex(szFlags[n], charsmax(szFlags)-n, "FCVAR_ARCHIVE | "); if( fCvar & FCVAR_USERINFO ) n += formatex(szFlags[n], charsmax(szFlags)-n, "FCVAR_USERINFO | "); if( fCvar & FCVAR_SERVER ) n += formatex(szFlags[n], charsmax(szFlags)-n, "FCVAR_SERVER | "); if( fCvar & FCVAR_EXTDLL ) n += formatex(szFlags[n], charsmax(szFlags)-n, "FCVAR_EXTDLL | "); if( fCvar & FCVAR_CLIENTDLL ) n += formatex(szFlags[n], charsmax(szFlags)-n, "FCVAR_CLIENTDLL | "); if( fCvar & FCVAR_PROTECTED ) n += formatex(szFlags[n], charsmax(szFlags)-n, "FCVAR_PROTECTED | "); if( fCvar & FCVAR_SPONLY ) n += formatex(szFlags[n], charsmax(szFlags)-n, "FCVAR_SPONLY | "); if( fCvar & FCVAR_PRINTABLEONLY ) n += formatex(szFlags[n], charsmax(szFlags)-n, "FCVAR_PRINTABLEONLY | "); if( fCvar & FCVAR_UNLOGGED ) n += formatex(szFlags[n], charsmax(szFlags)-n, "FCVAR_UNLOGGED | "); if( szFlags[0] ) szFlags[n-2] = 0; else szFlags = "0"; return szFlags; } Duck Fly 0.1.0 от PomanoB. При падении с высоты, можно нажимать много раз ctrl, и скорость падения заметно замедлится. Не знаю, может, для Zm сервером пригодится. И не спрашиваете даже, где у меня этот плагин стоял - это был мод под названием " Скрытый текст #include <amxmodx> #include <fakemeta> #define PLUGIN "Duck Fly" #define VERSION "0.1.0" #define AUTHOR "PomanoB" new g_cvar_disable_speed new g_cvar_ver_speed public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_forward(FM_PlayerPreThink, "fwdPreThink") g_cvar_disable_speed = register_cvar("fly_disable_hor_speed", "1") g_cvar_ver_speed = register_cvar("fly_ver_speed", "-10.0") } public fwdPreThink(id) { static Float:vel[3] if (is_user_alive(id) && !(pev(id, pev_flags)&FL_ONGROUND) && (pev(id, pev_button)&IN_DUCK) && !(pev(id, pev_oldbuttons)&IN_DUCK)) { if (!get_pcvar_num(g_cvar_disable_speed)) { pev(id, pev_velocity, vel) vel[2] = get_pcvar_float(g_cvar_ver_speed) } else { vel[0] = 0.0 vel[1] = 0.0 vel[2] = get_pcvar_float(g_cvar_ver_speed) } set_pev(id, pev_velocity, vel) } } [attachment=18740:Quake_So...wav_mp3_.rar] [attachment=18741:Sounds_от_3aHyga.rar] [attachment=18742:nsv.rar] |
_Skyline, 7RG, artemkyz, Copu4ek, damilurg, etkins, ExtraSens, Gani97Kz, Kain_wrath, kreat1ff, neygomon, orlovich, Quird, samthugg, slava12345, stefkone, sweet, tenb63rus, Tr1sT, user.gameover.user, Евгений_2 | ||
| 21.10.2012, 11:48 | Админские хохмы | Server's under the Protection of MyAC. Меня больше смешит это, чем переписка. |
samthugg | ||
| 24.8.2012, 21:57 | Админские хохмы | [24.08.2012 23:59:43] Sonic: что тебе надо? [24.08.2012 23:59:50] sakeee: дезран Полосу препятствий хочет пройти! |
zermond | ||
| 18.7.2012, 7:29 | Поиск человека для создания сайта по CS: GO | Крайне нуждаемся в 3 человеке, владеющим навыками PHP, для создания сайта по тематике Counter-Strike: Global Offensive. Цель проекта - захват мира, конечно, и создание крупного портала, освещающего новости из мира CS: GO. Давно был еще куплен домен (http://counter-strikego.ru) и самый дешевый хостинг на ihc.ru. Работать пока придется даже не за еду, а на голом энтузиазме. Если вас это заинтересовало, то добро пожаловать в нашу команду . Связь Skype warlock_d. |
Shady | ||
| 15.7.2012, 12:05 | эпичные фразы в cs | [attachment=16848:Безымянный.jpg] Так и живём... |
AndrewZ, by Fan, samthugg | ||
| 22.5.2012, 9:37 | Gm #2 не будет | kupuk96, samthugg | |||
| 16.4.2012, 19:42 | Админские хохмы | kokauHH | |||
| 16.4.2012, 19:25 | Админские хохмы | Бизнесмен, блеать [21:18:59] Дмитрий: Здравствуйте, dexter7150! Я хочу внести Вас в свой список контактов Skype. Дмитрий [21:19:08] Дмитрий: тут? [21:19:20] Дима: Дима отправил контактные данные Дмитрий. [21:19:30] Дима: да слушаю [21:19:35] Дмитрий: написано, что раскручиваешь серверы. тест дашь? [21:19:55] Дима: нет екран показиваю как прога пашит и што без гарени [21:19:59] Дима: а тест нет [21:20:06] Дмитрий: тогда не подходит. [21:20:23] Дима: тогда пока нашол лоха безплатно крутить [21:20:25] Дима: сервак [21:20:48] Дима: у меня такх как ти 1000 били [21:20:50] Дмитрий: лол, я итак знаю, что hlserver работает. мне тест нужен. [21:20:57] Дмитрий: круто. [21:21:08] Дима: без гарени пашит [21:21:12] Дмитрий: и кто сейчас из клиентов? [21:21:27] Дима: за 1 час конетов 45 [21:21:30] Дима: 30 [21:21:40] Дмитрий: ясно. [21:21:45] Дима: чо я сно [21:21:50] Дима: ясно [21:21:53] Дмитрий: и какова цена? [21:21:56] Дима: 200 [21:22:34] Дмитрий: за какой период? [21:22:48] Дима: чо за какой период [21:22:52] Дима: не понял [21:23:07] Дмитрий: 200 рублей за какой период? или за колв-о подключившихся? [21:23:24] Дима: прогу продаю за 200 рублей [21:23:33] Дмитрий: ясно. она бесплатная итак. [21:23:38] Дима: за час конектов 30 40 [21:23:43] Дмитрий: круто:) [21:23:47] Дима: хахаха она з гареной пашит [21:23:53] Дима: а у меня без [21:23:55] Дима: лол [21:24:13] Дима: короче не покупаеш 66 [21:24:21] Дмитрий: ок, покупаю [21:24:26] Дмитрий: но пока почитай это [21:24:36] Дима: не понял [21:24:43] Дмитрий: щас дам ссылку. [21:24:45] Дима: чо читать [21:25:39] Дима: ну [21:25:47] *** Звонит Дима *** [21:25:51] Дима: смотри [21:25:55] Дмитрий: не, не, звонить уже не надо:) [21:25:56] Дмитрий: https://c-s.net.ua/forum/ipb.html?s=&sh...st&p=290963 [21:26:00] Дима: екран чо без гарени пашит [21:26:06] Дмитрий: щас будет набег [21:26:37] Дима: какой набег [21:26:46] Дима: ти покупаеш прогу еле пока [21:27:01] Дмитрий: нет, читай, что тут написано. [21:27:18] Дима: мне оно не надо ти покупаеш прогу [21:27:29] Дмитрий: нет, нет, почитай. там про тебя как раз [21:28:32] Дима: и чо тут променя не *** нет [21:28:42] *** Дима отправил IMG_16042012_202850.png *** [21:28:46] Дима: смотри скрин [21:29:12] Дмитрий: не, есть. последний комментарий https://c-s.net.ua/forum/topic27773s1120.html?p=290963 [21:30:19] Дима: я не чо не понял не покупаеш знвчит пока [21:30:21] Дима: 66 [21:30:35] Дмитрий: ну зря не почитал. ты, может, слепой? [21:30:47] Дима: мне по*** 1 меньше 1 больше хто купит [21:30:57] Дмитрий: тебя уже в ввк нашли:) [21:30:58] Дмитрий: http://vk.com/id88884428 [21:31:05] Дмитрий: сейчас будет набег. [21:31:13] Дима: на чо набег [21:31:19] Дима: ето чо [21:31:23] Дмитрий: на твой VK. [21:31:29] Дима: и чо будет [21:33:07] Дмитрий: ну сейчас, возможно, будет радость у людей, что поймали еще одного "бизсмена" 14 лет:) [21:33:25] Дима: хаха мне не 14 лет лол [21:33:41] Дмитрий: это уже решит сообщество, сколько тебе. [21:33:51] Дима: короче не иди на*** [21:33:57] Дмитрий: не иду [21:34:01] Дима: иди [21:34:19] Дмитрий: да, это тоже было отправлевно в тему:) [21:34:40] Дима: школота иди на*** я сказал [21:35:46] Дмитрий: м, школота? мне так не кажется. это не я с ошибками пишу все время, и не я продаю программу, которая не твоя и которую притом можно взять бесплатно. [21:36:33] Дима: почему ето не моя [21:36:35] Дима: *** [21:36:37] Дима: моя [21:36:45] Дима: у дачи бери [21:36:50] Дмитрий: потому что ее сделал ratwayer [21:36:54] Дима: я чо тибе не даю [21:36:58] Дмитрий: я не у дачи. до дачи моей далеко [21:36:58] Дима: *** [21:37:10] Дима: я покупал лицензию [21:37:28] Дима: лол [21:37:33] Дмитрий: круто. номер-то хоть знаешь его? [21:37:34] Дима: еле не понял [21:37:34] Дима: еле не понял [21:37:54] Дима: короче иди на*** [21:37:56] Дима: из скайпа [21:38:29] Дмитрий: не могу. нет такой функции в Skype. может, с версии 6.0 добавят. [21:38:47] Дима: пока *** [21:39:14] Дмитрий: я не ***. обоснуй оскарбление. [21:40:14] Дима: *** скачай сибе прогу я *** [21:40:28] Дмитрий: ты ***? [21:40:40] Дмитрий: ну, хотя, да, думаю, так и есть. [21:41:21] Дмитрий: докажи, что не ***. ответь, что такое incoterms 2010. [21:41:58] Дима: на*** мне чото доказивать лоху [21:42:19] Дмитрий: почему я ***? [21:42:25] Дмитрий: ты умеешь банить в скайпе? [21:42:51] Дима: Судьба у тибя лоха [21:43:15] Дмитрий: почему? я-то вот знаю, что такое incoterms 2010, а ты нет. [21:43:35] Дмитрий: давай, научись банить в Skype. ты же сможешь! c-s.net.ua верит в тебя! [21:43:38] Дима: малолетка пока иди на*** [21:44:02] Дима: c-s.net.ua чо верит [21:44:09] Дмитрий: я не малолетка. это не я делаю такое количество ошибок. [21:44:23] Дима: иди на*** [21:44:23] Дмитрий: оно верит в то, что ты узнаешь, как банить в SKype. [21:45:04] Дима: Я тебя забаню щас skype [21:45:07] Дима: kj[ [21:45:10] Дима: *** [21:45:58] Дмитрий: ну давай. я, мой чай, c-s.net.ua и даже моя мама в соседней комнате ждут этого. А это он сам http://vk.com/id88884428 |
by Fan, JIokoMoTuB, kokauHH, noskill, samthugg | ||
| 2.4.2012, 18:49 | Админские хохмы | Серег, ты бесподобен |
samthugg | ||
| 2.3.2012, 10:44 | Админские хохмы | Может, и не особо смешно,но поциент стандартный. [03.02.2012 9:14] ? [03.02.2012 10:56] здорова вот я вчера заходил на твой сервак я увидел там табличку требуется админ [03.02.2012 11:11] Так точно. [03.02.2012 11:11] Какой никнейм на сервере? [03.02.2012 11:12] pro [03.02.2012 11:12] Пиши немного грамотное. Я не хочу напрягаться, понимать, что ты там хочешь написать. [03.02.2012 11:13] У тебя один фраг что ли? [03.02.2012 11:14] да [03.02.2012 11:15] Ты после одного фрага хочешь быть админом? [03.02.2012 11:15] да [03.02.2012 11:15] Хорошо. [03.02.2012 11:15] Тогда я задам пару вопросов на проверку [03.02.2012 11:16] Ответь мне, что такое soundhack [03.02.2012 11:17] сонтракт [03.02.2012 11:17] Что это? [03.02.2012 11:18] забыл довай легкие вопросы [03.02.2012 11:18] Это легкий вопрос был. Что такое ESP? [03.02.2012 11:19] аааа [03.02.2012 11:21] Что-то ты мне нравишься. Долго отвечаешь и не знаешь ничего. [03.02.2012 11:22] да я щас тока встал даже немылся исел играть сразу [03.02.2012 11:22] Меня это не волнует. Ты сам вызвался на место админа. [03.02.2012 11:23] Так что отвечай побыстрее, пока у тебя еще есть возможность. [03.02.2012 11:24] AimBot (aim) – даёт возможность попадать всегда в ту часть тела противника, в которую вам нужно, или не всегда, всё зависит от чита, есть читы для CS в которых регулируется AIM, то есть вы сами настраиваете палевность своего чита. [03.02.2012 11:25] Скажи мне, ты дурак или нет? [03.02.2012 11:25] извени нето напесал [03.02.2012 11:25] CSG Aimbot – самый редкий тип. Его фича в том, что аим срабатывает только на первом выстреле. То есть вы увидели врага, зажимаете «огонь», аим сам наводит на противника только для первого выстрела, а дальше вы сами, чтоб аим снова навёл прицел, нужно опять нажать «огонь». Чтобы аим всегда наводил, можно просто постоянно клацать левую кнопку мыши) [03.02.2012 11:25] Вернее я ставлю тебя перед фактом, что дурак. [03.02.2012 11:25] И, да, ты не прошел проверку, играй дальше. [03.02.2012 11:26] нет вроде правельно напесал [03.02.2012 11:26] Нет, ты все-таки дурак:D [03.02.2012 11:26] Или играй. Свободен. [03.02.2012 11:27] почему [03.02.2012 11:28] Тебе не понять. К 17 годам от игр мозг атрофировался. [03.02.2012 11:28] А теперь избавь меня от глупых сообщений. [03.02.2012 11:30] ясно есле я натвоеместе был итоже искал аменистратора насервер ти тоже ктонебуть кмне посту чался тожесамое спросил ия сказалбы щасве сделай тебя админом нестал задовать вапросы [03.02.2012 11:32] У меня не школолосервер, чтобы каждому страждущему давать права лишь по одной его прихоти. И, да, русский тебе неплохо бы выучить, а то пишешь так же, как будто ты его не учил вовсе. [03.02.2012 11:33] я бы тока дин вапрос задалбы ивсе тока легкие не каторые ты задовал [03.02.2012 11:34] Если ты не знаешь элементарных вещей, это не мои проблемы. И хотя я ищу админа, но полным нубам права давать я не собираюсь. [03.02.2012 11:35] Нутогда пошолты куда подальше сасвоим серваком я другова найду пакруче тебя [03.02.2012 11:36] Это легкие были. Я не виноват, что ты ничего не знаешь. Повторюсь еще. Если ты играл на школолосерверах опять же, где админки дают каждому встречному, я так не буду делать. [03.02.2012 11:37] бля я сабыл админом [03.02.2012 11:37] Я и не держал тебя. Странные вы какие. Не по голове шапку хотите носить. [03.02.2012 11:38] Ты написать-то ни одно слово не можешь без ошибок, куда тебе админом-то?.. [03.02.2012 11:38] нехочеш довать тогда удаляй меня и ятебя удалю утебя сервак гавно [03.02.2012 11:38] Если *** зачем тогда хотел стать админом на нем? Где логика? [03.02.2012 11:39] утебя там лаги ***едаже нескем полтаь [03.02.2012 11:40] У меня нет лагов. Ты даже понимаешь, откуда они возникают, но уже судишь. [03.02.2012 11:41] все губай америка [03.02.2012 11:41] Если ты находишься далеко от Москвы, это не значит, что у всех высокий пинг [03.02.2012 11:41] Не надо звонить. Я на работе. [03.02.2012 11:42] да иче сетова [03.02.2012 11:42] Да то. Ты не понимаешь, что такое пинг даже. [03.02.2012 11:42] О чем тогда речь? [03.02.2012 11:43] знаю четакое пинг Удалился. |
_Skyline, Flash, imba, Kirby Magicman, LaFA, Rejiser, samthugg, SaSQuaTcH_Pro | ||