Участник
Пользователь
- Сообщения
- 213
- Реакции
- 71
- Помог
- 2 раз(а)
- Ошибка
-
L 05/23/2019 - 12:02:13: Start of error session.
L 05/23/2019 - 12:02:13: Info (map "de_inferno") (file "addons/amxmodx/logs/error_20190523.log")
L 05/23/2019 - 12:02:13: [CSTRIKE] Invalid player 15 (not in-game)
L 05/23/2019 - 12:02:13: [AMXX] Displaying debug trace (plugin "miscstats.amxx", version "1.9.0.5247")
L 05/23/2019 - 12:02:13: [AMXX] Run time error 10: native error (native "cs_get_user_team")
L 05/23/2019 - 12:02:13: [AMXX] [0] miscstats.sma::client_death (line 538)
- ОС
- Linux
- Amx Mod X
-
AMX Mod X 1.9.0.5247 (http://www.amxmodx.org)
Authors:
David "BAILOPAN" Anderson, Pavol "PM OnoTo" Marko
Felix "SniperBeamer" Geyer, Jonny "Got His Gun" Bergstrom
Lukasz "SidLuke" Wlasinski, Christian "Basic-Master" Hammacher
Borja "faluco" Ferrer, Scott "DS" Ehlert
Compiled: May 16 2019 06:12:49
Built from: https://github.com/alliedmodders/amxmodx/commit/1f09bd5
Build ID: 5247:1f09bd5
Core mode: JIT+ASM32
- Билд
-
Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
ReHLDS version: 3.6.0.671-dev
Build date: 12:52:00 May 7 2019 (1851)
Build from: https://github.com/dreamstalker/rehlds/commit/3f809d0
- ReGamedll
-
ReGameDLL version: 5.7.0.330-dev
Build date: 12:56:40 Apr 23 2019
Build from: https://github.com/s1lentq/ReGameDLL_CS/commit/94f0fdb
- Версия Metamod
-
Metamod v1.21p37 2013/05/30 (5:13)
by Will Day
http://www.metamod.org/
Patch: Metamod-P (mm-p) v37
by Jussi Kivilinna
http://metamod-p.sourceforge.net/
compiled: May 30 2013, 11:41:16 EET (optimized)
- Список метамодулей
-
Currently loaded plugins:
description stat pend file vers src load unlod
[ 1] SafeNameAndChat RUN - SafeNameAndChat. v1.1 ini ANY ANY
[ 2] Reunion RUN - reunion_mm_i386. v0.1.0.1 ini Start Never
[ 3] AMX Mod X RUN - amxmodx_mm_i386. v1.9.0.5 ini Start ANY
[ 4] Revoice RUN - revoice_mm_i386. v0.1.0.3 ini Start Never
[ 5] ReSemiclip RUN - resemiclip_mm_i3 v2.3.9 ini Chlvl ANY
[ 6] WHBlocker RUN - whblocker_mm_i38 v1.5.696 ini Chlvl ANY
[ 7] Fun RUN - fun_amxx_i386.so v1.9.0.5 pl3 ANY ANY
[ 8] Engine RUN - engine_amxx_i386 v1.9.0.5 pl3 ANY ANY
[ 9] FakeMeta RUN - fakemeta_amxx_i3 v1.9.0.5 pl3 ANY ANY
[10] GeoIP RUN - geoip_amxx_i386. v1.9.0.5 pl3 ANY ANY
[11] CStrike RUN - cstrike_amxx_i38 v1.9.0.5 pl3 ANY ANY
[12] CSX RUN - csx_amxx_i386.so v1.9.0.5 pl3 ANY ANY
[13] Ham Sandwich RUN - hamsandwich_amxx v1.9.0.5 pl3 ANY ANY
[14] ReAPI RUN - reapi_amxx_i386. v5.8.0.1 pl3 ANY Never
[15] hackdetector RUN - hackdetector_amx v0.15.32 pl3 ANY ANY
[16] ReAimDetector RUN - reaimdetector_am v0.2.2 pl3 ANY Never
[17] MySQL RUN - mysql_amxx_i386. v1.9.0.5 pl3 ANY ANY
17 plugins, 17 running
- Список плагинов
-
Currently loaded plugins:
name version author file status
[ 1] My Ban System 1.1.2 K@[L]@uz kalauz_ban_syst running
[ 2] Admin Commands Log 1.1 w0w admin_commands_ running
[ 3] ServerNamePlay 1.8.2 Rock Rocky PSL_hostname.am running
[ 4] Task Scheduler 0.2 JustinHoMi task_scheduler. running
[ 5] Admin Base 1.9.0.5247 AMXX Dev Team admin.amxx running
[ 6] Admin Commands 1.9.0.5247 AMXX Dev Team admincmd.amxx running
[ 7] Admin Help 1.9.0.5247 AMXX Dev Team adminhelp.amxx running
[ 8] Multi-Lingual System 1.9.0.5247 AMXX Dev Team multilingual.am running
[ 9] Menus Front-End 1.9.0.5247 AMXX Dev Team menufront.amxx running
[ 10] Commands Menu 1.9.0.5247 AMXX Dev Team cmdmenu.amxx running
[ 11] New KickMenu 2.0 Flash kickmenu.amxx running
[ 12] Players Menu 1.9.0.5247 AMXX Dev Team plmenu.amxx running
[ 13] Maps Menu 1.9.0.5247 AMXX Dev Team mapsmenu.amxx running
[ 14] Plugin Menu 1.9.0.5247 AMXX Dev Team pluginmenu.amxx running
[ 15] AMXX Gag 1.5.0 xPaw & Exolent amx_gag.amxx running
[ 16] Chat Manager 1.1.1-11 Mistrick chatmanager.amx running
[ 17] Chat Manager: Addon 0.0.4-70 Mistrick chatmanager_add running
[ 18] Anti Flood 1.9.0.5247 AMXX Dev Team antiflood.amxx running
[ 19] Admin Votes 1.9.0.5247 AMXX Dev Team adminvote.amxx running
[ 20] Mode 2x2 2.5re s1lent PSL_mode.amxx running
[ 21] NextMap 1.9.0.5247 AMXX Dev Team nextmap.amxx running
[ 22] Roundsleft 0.2 JGHG roundsleft_nosp running
[ 23] Stats Configuration 1.9.0.5247 AMXX Dev Team statscfg.amxx running
[ 24] Restrict Weapons 1.9.0.5247 AMXX Dev Team restmenu.amxx running
[ 25] StatsX 1.9.0.5247 AMXX Dev Team statsx.amxx running
[ 26] CS Misc. Stats 1.9.0.5247 AMXX Dev Team miscstats.amxx debug
[ 27] CS Stats Logging 1.9.0.5247 AMXX Dev Team stats_logging.a running
[ 28] Steam Money Fix 1.3.0 F@nt0M (tnx fl0w steam_money_fix running
[ 29] Team Balancer 1.8b3 Ptahhotep ptb.amxx running
[ 30] Block IP Messages 1.0 Alpha Alik Inline Asla PSL_BlockIpInNi running
[ 31] Admin Spectator ESP 1.3 KoST admin_spec_esp. running
[ 32] FragCounter 1.01 Scarzzurs fragcounter.amx running
[ 33] KGB Bots 2.3 OvidiuS & Desika kgbbots.amxx running
[ 34] Steamers Info 1.0 K@[L]@uz steamers_info.a running
[ 35] [PSL] Admin Color Chat 1.0 Edit By Alber PSL_admin_color running
[ 36] Map Spawns Editor 1.0.16 iG_os Map_Spawns_Edit running
[ 37] [PSL] Reset Score By A 1.0 Alber Soomro PSL_ResetScore. running
[ 38] Autoresponder/Advertis 0.5 MaximusBrood ad_manager5.amx running
[ 39] Ping Faker 1.5a MeRcyLeZZ pingfaker.amxx running
[ 40] Server BETS 1.0 Mi-Ki PSL_bets.amxx running
[ 41] Fast Sniper Switch 1.3 Numb fast_sniper_swi running
[ 42] c4 timer 1.1 cheap_suit c4timer.amxx running
[ 43] Auto Join on Connect 0.1 VEN auto_join_on_co running
[ 44] [PSL] Info Rounds By A 1.0 K@[L]@uz PSL_inforounds. running [ 45] Descriptive 'Fire in t 0.1 VEN colored_radio.a running
[ 46] WalkGuard 1.3.2 mogel walkguard.amxx running
[ 47] VIP Eng Version 3.0 Dunno PSL_VIP_FREE_WO running
[ 48] AMX Client Exec 0.03 v3x amx_exec.amxx running
[ 49] AFK Control ReNew 1.2(a) neygomon afk_control.amx running
[ 50] Boost Server 1.0 K@[L]@UZ boost_server.am running
[ 51] Invisible Spectator 0.2 ConnorMcLeod PSL_Invis_Spec. running
[ 52] unknown unknown unknown pslgamename.amx running
[ 53] [ReAPI] No Team Flash 0.0.2 Vaqtincha no_team_flash.a running
[ 54] ReAimDetector API 0.2.1 ReHLDS Team reaimdetector.a running
[ 55] xREDIRECT 1.0.3.3 x0R xredirect.amxx running
[ 56] Permanent message 1.1 He3aBuCuM permanent_messa running
[ 57] Played Time 1.4 Alka > Edit By A PSL_played_time running
57 plugins, 57 running
- Автор плагина
- AMXX Dev Team
- Версия плагина
- 1.9.0.5247
- Исходный код
-
Attached + In Comments
Код:
// vim: set ts=4 sw=4 tw=99 noet:
//
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
// Copyright (C) The AMX Mod X Development Team.
//
// This software is licensed under the GNU General Public License, version 3 or higher.
// Additional exceptions apply. For full license details, see LICENSE.txt or visit:
// https://alliedmods.net/amxmodx-license
//
// Misc. Stats Plugin
//
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <csx>
public MultiKill
public MultiKillSound
public BombPlanting
public BombDefusing
public BombPlanted
public BombDefused
public BombFailed
public BombPickUp
public BombDrop
public BombCountVoice
public BombCountDef
public BombReached
public ItalyBonusKill
public EnemyRemaining
public LastMan
public LastManHealth
public KnifeKill
public KnifeKillSound
public GrenadeKill
public GrenadeSuicide
public HeadShotKill
public HeadShotKillSound
public RoundCounterSound
public RoundCounter
public KillingStreak
public KillingStreakSound
public DoubleKill
public DoubleKillSound
public PlayerName
public FirstBloodSound
public BombPlantedSound
public BombDefusedSound
public BombFailedSound
public BombCountHUD
public LastManSound
public GrenadeKillSound
public GrenadeSuicideSound
const SOUNDFILE_PATH_MAXLEN = 64
const SOUND_SHORTPATH_MAXLEN = SOUNDFILE_PATH_MAXLEN - 10 // 64 (sound/ [ 54 ] .wav) critical value for fast dl
new g_streakKills[MAX_PLAYERS + 1][2]
new g_multiKills[MAX_PLAYERS + 1][2]
new g_C4Timer
new g_Defusing
new g_Planter
new Float:g_LastOmg
new g_LastAnnounce
new g_roundCount
new Float:g_doubleKill
new g_doubleKillId
new g_friend[MAX_PLAYERS + 1]
new g_firstBlood
new g_center1_sync
new g_announce_sync
new g_status_sync
new g_left_sync
new g_bottom_sync
new g_he_sync
new g_pcvar_mp_c4timer, g_c4timer_value
const TASK_BOMB_TIMER = 8038
const TASK_DELAYED_NEW_ROUND = 98038
new g_connected[MAX_PLAYERS + 1]
new g_msounds[MAX_PLAYERS + 1]
new const _msound[] = "_msound"
new g_MultiKillMsg[7][] =
{
"Multi-Kill! %s^n%L %d %L (%d %L)",
"Ultra-Kill!!! %s^n%L %d %L (%d %L)",
"%s IS ON A KILLING SPREE!!!^n%L %d %L (%d %L)",
"RAMPAGE!!! %s^n%L %d %L (%d %L)",
"%s IS UNSTOPPABLE!!!^n%L %d %L (%d %L)",
"%s IS A MONSTER!^n%L %d %L (%d %L)",
"%s IS GODLIKE!!!!^n%L %d %L (%d %L)"
}
new g_Sounds[7][SOUND_SHORTPATH_MAXLEN] =
{
"misc/multikill",
"misc/ultrakill",
"misc/killingspree",
"misc/rampage",
"misc/unstoppable",
"misc/monsterkill",
"misc/godlike"
}
new g_firstbloodsound[SOUND_SHORTPATH_MAXLEN] = "misc/firstblood"
new g_lastmansound_1vsothers[SOUND_SHORTPATH_MAXLEN] = "misc/oneandonly"
new g_lastmansound_duel[SOUND_SHORTPATH_MAXLEN] = "misc/maytheforce"
new g_hssound_killer[SOUND_SHORTPATH_MAXLEN] = "misc/headshot"
new g_hssound_victim[SOUND_SHORTPATH_MAXLEN] = "misc/headshot"
new g_knifekillsound[SOUND_SHORTPATH_MAXLEN] = "misc/humiliation"
new g_doublekillsound[SOUND_SHORTPATH_MAXLEN] = "misc/doublekill"
new g_roundcountersound[SOUND_SHORTPATH_MAXLEN] = "misc/prepare"
new g_grenadekillsound[SOUND_SHORTPATH_MAXLEN] = "djeyl/grenade"
new g_grenadesuicidesound[SOUND_SHORTPATH_MAXLEN] = "djeyl/witch"
new g_bombplantedsound[SOUND_SHORTPATH_MAXLEN] = "djeyl/c4powa"
new g_bombdefusedsound[SOUND_SHORTPATH_MAXLEN] = "djeyl/laugh"
new g_bombfailedsound[SOUND_SHORTPATH_MAXLEN] = "djeyl/witch"
new g_KillingMsg[7][] =
{
"%s: Multi-Kill!",
"%s: Ultra-Kill!!!",
"%s IS ON A KILLING SPREE!!!",
"%s: RAMPAGE!!!",
"%s IS UNSTOPPABLE!!!",
"%s IS A MONSTER!",
"%s IS GODLIKE!!!"
}
new g_KinfeMsg[4][] =
{
"KNIFE_MSG_1",
"KNIFE_MSG_2",
"KNIFE_MSG_3",
"KNIFE_MSG_4"
}
new g_LastMessages[4][] =
{
"LAST_MSG_1",
"LAST_MSG_2",
"LAST_MSG_3",
"LAST_MSG_4"
}
new g_HeMessages[4][] =
{
"HE_MSG_1",
"HE_MSG_2",
"HE_MSG_3",
"HE_MSG_4"
}
new g_SHeMessages[4][] =
{
"SHE_MSG_1",
"SHE_MSG_2",
"SHE_MSG_3",
"SHE_MSG_4"
}
new g_HeadShots[7][] =
{
"HS_MSG_1",
"HS_MSG_2",
"HS_MSG_3",
"HS_MSG_4",
"HS_MSG_5",
"HS_MSG_6",
"HS_MSG_7"
}
new const g_teamsNames[CsTeams][] = { "", "TERRORIST" , "CT", "" };
public plugin_init()
{
register_plugin("CS Misc. Stats", AMXX_VERSION_STR, "AMXX Dev Team")
register_dictionary("miscstats.txt")
register_dictionary("statsx.txt")
register_event("TextMsg", "eRestart", "a", "2&#Game_C", "2&#Game_w")
register_event("SendAudio", "eEndRound", "a", "2&%!MRAD_terwin", "2&%!MRAD_ctwin", "2&%!MRAD_rounddraw")
register_event("HLTV", "Event_HLTV_New_Round", "a", "1=0", "2=0") // cache c4 timer value
register_logevent("LogEvent_Round_Start", 2, "1=Round_Start") // replaces ugly register_event("RoundTime", "eNewRound", "bc")
register_event("StatusValue", "setTeam", "bef", "1=1")
register_event("StatusValue", "showStatus", "bef", "1=2", "2!0")
register_event("StatusValue", "hideStatus", "bef", "1=1", "2=0")
new mapname[32], n = get_mapname(mapname, charsmax(mapname))
if ((get_map_objectives() & MapObjective_Bomb) || (equali(mapname, "de_", 3) || equali(mapname, "csde_", 5)))
{
register_event("StatusIcon", "eGotBomb", "be", "1=1", "1=2", "2=c4")
register_event("TextMsg", "eBombPickUp", "bc", "2&#Got_bomb")
register_event("TextMsg", "eBombDrop", "bc", "2&#Game_bomb_d")
register_event("BarTime", "eStopDefuse", "b", "1=0")
}
else if (equali(mapname, "cs_italy") || equali(mapname, "cs_italy_cz"))
{
register_event("23", "chickenKill", "a", "1=108", "15=4")
register_event("23", "radioKill", "a", "1=108", n == 8 ? "15=2" : "15=8") // cz radio is wood
}
g_center1_sync = CreateHudSyncObj()
g_announce_sync = CreateHudSyncObj()
g_status_sync = CreateHudSyncObj()
g_left_sync = CreateHudSyncObj()
g_bottom_sync = CreateHudSyncObj()
g_he_sync = CreateHudSyncObj()
g_pcvar_mp_c4timer = get_cvar_pointer("mp_c4timer")
g_c4timer_value = get_pcvar_num( g_pcvar_mp_c4timer )
register_clcmd("say /msounds", "cmdSwitchSounds", _, " - switches sounds on and off")
register_clcmd("say_team /msounds", "cmdSwitchSounds", _, " - switches sounds on and off")
}
public plugin_precache()
{
// parse sounds and precache them
new szConfigsDir[64], szCfgFile[64]
get_configsdir(szConfigsDir, charsmax(szConfigsDir))
formatex(szCfgFile, charsmax(szCfgFile), "%s/stats.ini", szConfigsDir)
new buffer[256]
// initialize xvars so we can know later if sounds have to be precached or not.
// xvars gonna be initialized again in statscfg.amxx plugin_init, this is ok.
new fp = fopen(szCfgFile, "rt")
if( fp )
{
new xvarname[32], xvarid
while( !feof(fp) )
{
fgets(fp, buffer, charsmax(buffer))
trim(buffer)
if( buffer[0] != ';' )
{
parse(buffer, xvarname, charsmax(xvarname))
if ((xvarid = get_xvar_id(xvarname)) != -1)
{
set_xvar_num(xvarid, 1)
}
}
}
fclose(fp)
}
formatex(szCfgFile, charsmax(szCfgFile), "%s/miscstats.ini", szConfigsDir)
fp = fopen(szCfgFile, "rt")
if( fp )
{
new szSoundKey[32], szSoundFile[SOUNDFILE_PATH_MAXLEN]
while( !feof(fp) )
{
fgets(fp, buffer, charsmax(buffer))
trim(buffer)
if( buffer[0] != ';' && parse(buffer, szSoundKey, charsmax(szSoundKey), szSoundFile, charsmax(szSoundFile)) == 2 )
{
if( equal(szSoundKey, "FirstBloodSound") )
{
copy_sound(g_firstbloodsound, charsmax(g_firstbloodsound), szSoundFile)
if( FirstBloodSound ) precache_sound_custom(g_firstbloodsound)
}
else if( equal(szSoundKey, "LastManVsOthersSound") )
{
copy_sound(g_lastmansound_1vsothers, charsmax(g_lastmansound_1vsothers), szSoundFile)
if( LastManSound ) precache_sound_custom(g_lastmansound_1vsothers)
}
else if( equal(szSoundKey, "LastManDuelSound") )
{
copy_sound(g_lastmansound_duel, charsmax(g_lastmansound_duel), szSoundFile)
if( LastManSound ) precache_sound_custom(g_lastmansound_duel)
}
else if( equal(szSoundKey, "HeadShotKillSoundKiller") )
{
copy_sound(g_hssound_killer, charsmax(g_hssound_killer), szSoundFile)
if( HeadShotKillSound ) precache_sound_custom(g_hssound_killer)
}
else if( equal(szSoundKey, "HeadShotKillSoundVictim") )
{
copy_sound(g_hssound_victim, charsmax(g_hssound_victim), szSoundFile)
if( HeadShotKillSound ) precache_sound_custom(g_hssound_victim)
}
else if( equal(szSoundKey, "KnifeKillSound") )
{
copy_sound(g_knifekillsound, charsmax(g_knifekillsound), szSoundFile)
if( KnifeKillSound ) precache_sound_custom(g_knifekillsound)
}
else if( equal(szSoundKey, "DoubleKillSound") )
{
copy_sound(g_doublekillsound, charsmax(g_doublekillsound), szSoundFile)
if( DoubleKillSound ) precache_sound_custom(g_doublekillsound)
}
else if( equal(szSoundKey, "RoundCounterSound") )
{
copy_sound(g_roundcountersound, charsmax(g_roundcountersound), szSoundFile)
if( RoundCounterSound ) precache_sound_custom(g_roundcountersound)
}
else if( equal(szSoundKey, "GrenadeKillSound") )
{
copy_sound(g_grenadekillsound, charsmax(g_grenadekillsound), szSoundFile)
if( GrenadeKillSound ) precache_sound_custom(g_grenadekillsound)
}
else if( equal(szSoundKey, "GrenadeSuicideSound") )
{
copy_sound(g_grenadesuicidesound, charsmax(g_grenadesuicidesound), szSoundFile)
if( GrenadeSuicideSound ) precache_sound_custom(g_grenadesuicidesound)
}
else if( equal(szSoundKey, "BombPlantedSound") )
{
copy_sound(g_bombplantedsound, charsmax(g_bombplantedsound), szSoundFile)
if( BombPlantedSound ) precache_sound_custom(g_bombplantedsound)
}
else if( equal(szSoundKey, "BombDefusedSound") )
{
copy_sound(g_bombdefusedsound, charsmax(g_bombdefusedsound), szSoundFile)
if( BombDefusedSound ) precache_sound_custom(g_bombdefusedsound)
}
else if( equal(szSoundKey, "BombFailedSound") )
{
copy_sound(g_bombfailedsound, charsmax(g_bombfailedsound), szSoundFile)
if( BombFailedSound ) precache_sound_custom(g_bombfailedsound)
}
else
{
// KillingStreakSound and MultiKillSound
if( equal(szSoundKey, "MultiKillSound") )
{
copy_sound(g_Sounds[0], charsmax(g_Sounds[]), szSoundFile)
if( KillingStreakSound || MultiKillSound ) precache_sound_custom(g_Sounds[0])
}
else if( equal(szSoundKey, "UltraKillSound") )
{
copy_sound(g_Sounds[1], charsmax(g_Sounds[]), szSoundFile)
if( KillingStreakSound || MultiKillSound ) precache_sound_custom(g_Sounds[1])
}
else if( equal(szSoundKey, "KillingSpreeSound") )
{
copy_sound(g_Sounds[2], charsmax(g_Sounds[]), szSoundFile)
if( KillingStreakSound || MultiKillSound ) precache_sound_custom(g_Sounds[2])
}
else if( equal(szSoundKey, "RampageSound") )
{
copy_sound(g_Sounds[3], charsmax(g_Sounds[]), szSoundFile)
if( KillingStreakSound || MultiKillSound ) precache_sound_custom(g_Sounds[3])
}
else if( equal(szSoundKey, "UnstopableSound") )
{
copy_sound(g_Sounds[4], charsmax(g_Sounds[]), szSoundFile)
if( KillingStreakSound || MultiKillSound ) precache_sound_custom(g_Sounds[4])
}
else if( equal(szSoundKey, "MonsterKillSound") )
{
copy_sound(g_Sounds[5], charsmax(g_Sounds[]), szSoundFile)
if( KillingStreakSound || MultiKillSound ) precache_sound_custom(g_Sounds[5])
}
else if( equal(szSoundKey, "GodLike") )
{
copy_sound(g_Sounds[6], charsmax(g_Sounds[]), szSoundFile)
if( KillingStreakSound || MultiKillSound ) precache_sound_custom(g_Sounds[6])
}
}
}
}
fclose(fp)
}
}
precache_sound_custom( const sound[] )
{
new fullpathsound[SOUNDFILE_PATH_MAXLEN]
formatex(fullpathsound, charsmax(fullpathsound), "sound/%s.wav", sound)
if( file_exists(fullpathsound) )
{
precache_sound(fullpathsound[6])
}
else
{
log_amx("Could not locate <%s> file", fullpathsound)
}
}
copy_sound(dest[], len, src[])
{
new n = copy(dest, len, src[ 6 * equali(src, "sound/", 6) ])
if( n > 4 && equal(dest[n-4], ".wav") )
{
dest[n-4] = EOS
}
}
public plugin_cfg()
{
new g_addStast[] = "amx_statscfg add ^"%s^" %s"
server_cmd(g_addStast, "ST_MULTI_KILL", "MultiKill")
server_cmd(g_addStast, "ST_MULTI_KILL_SOUND", "MultiKillSound")
server_cmd(g_addStast, "ST_BOMB_PLANTING", "BombPlanting")
server_cmd(g_addStast, "ST_BOMB_DEFUSING", "BombDefusing")
server_cmd(g_addStast, "ST_BOMB_PLANTED", "BombPlanted")
server_cmd(g_addStast, "ST_BOMB_PLANTED_SOUND", "BombPlantedSound")
server_cmd(g_addStast, "ST_BOMB_DEF_SUCC", "BombDefused")
server_cmd(g_addStast, "ST_BOMB_DEF_SUCC_SOUND", "BombDefusedSound")
server_cmd(g_addStast, "ST_BOMB_DEF_FAIL", "BombFailed")
server_cmd(g_addStast, "ST_BOMB_DEF_FAIL_SOUND", "BombFailedSound")
server_cmd(g_addStast, "ST_BOMB_PICKUP", "BombPickUp")
server_cmd(g_addStast, "ST_BOMB_DROP", "BombDrop")
server_cmd(g_addStast, "ST_BOMB_CD_HUD", "BombCountHUD")
server_cmd(g_addStast, "ST_BOMB_CD_VOICE", "BombCountVoice")
server_cmd(g_addStast, "ST_BOMB_CD_DEF", "BombCountDef")
server_cmd(g_addStast, "ST_BOMB_SITE", "BombReached")
server_cmd(g_addStast, "ST_ITALY_BONUS", "ItalyBonusKill")
server_cmd(g_addStast, "ST_LAST_MAN", "LastMan")
server_cmd(g_addStast, "ST_LAST_MAN_HEALTH", "LastManHealth")
server_cmd(g_addStast, "ST_LAST_MAN_SOUND", "LastManSound")
server_cmd(g_addStast, "ST_KNIFE_KILL", "KnifeKill")
server_cmd(g_addStast, "ST_KNIFE_KILL_SOUND", "KnifeKillSound")
server_cmd(g_addStast, "ST_HE_KILL", "GrenadeKill")
server_cmd(g_addStast, "ST_HE_KILL_SOUND", "GrenadeKillSound")
server_cmd(g_addStast, "ST_HE_SUICIDE", "GrenadeSuicide")
server_cmd(g_addStast, "ST_HE_SUICIDE_SOUND", "GrenadeSuicideSound")
server_cmd(g_addStast, "ST_HS_KILL", "HeadShotKill")
server_cmd(g_addStast, "ST_HS_KILL_SOUND", "HeadShotKillSound")
server_cmd(g_addStast, "ST_ROUND_CNT", "RoundCounter")
server_cmd(g_addStast, "ST_ROUND_CNT_SOUND", "RoundCounterSound")
server_cmd(g_addStast, "ST_KILL_STR", "KillingStreak")
server_cmd(g_addStast, "ST_KILL_STR_SOUND", "KillingStreakSound")
server_cmd(g_addStast, "ST_ENEMY_REM", "EnemyRemaining")
server_cmd(g_addStast, "ST_DOUBLE_KILL", "DoubleKill")
server_cmd(g_addStast, "ST_DOUBLE_KILL_SOUND", "DoubleKillSound")
server_cmd(g_addStast, "ST_PLAYER_NAME", "PlayerName")
server_cmd(g_addStast, "ST_FIRST_BLOOD_SOUND", "FirstBloodSound")
}
public client_connect(id)
{
if( is_user_bot(id) )
{
g_msounds[id] = 0
return;
}
new info[2]
if( !get_user_info(id, _msound, info, charsmax(info)) || info[0] != '0' )
{
g_msounds[id] = 1
}
else
{
g_msounds[id] = 0
}
}
public client_putinserver(id)
{
g_multiKills[id] = {0, 0}
g_streakKills[id] = {0, 0}
g_connected[id] = true
}
public client_disconnected(id)
{
g_connected[id] = false
}
public client_death(killer, victim, wpnindex, hitplace, TK)
{
if (wpnindex == CSW_C4)
return
new headshot = (hitplace == HIT_HEAD) ? 1 : 0
new selfkill = (killer == victim) ? 1 : 0
new victim_alive = is_user_alive(victim) // happens on ClientKill
if (g_firstBlood)
{
g_firstBlood = 0
if (FirstBloodSound)
play_sound(0, g_firstbloodsound)
}
if ((KillingStreak || KillingStreakSound) && !TK)
{
g_streakKills[victim][1]++
g_streakKills[victim][0] = 0
if (!selfkill)
{
g_streakKills[killer][0]++
g_streakKills[killer][1] = 0
new a = g_streakKills[killer][0] - 3
if ((a > -1) && !(a % 2))
{
new name[MAX_NAME_LENGTH]
get_user_name(killer, name, charsmax(name))
if ((a >>= 1) > 6)
a = 6
if (KillingStreak)
{
set_hudmessage(0, 100, 255, 0.05, 0.50, 2, 0.02, 6.0, 0.01, 0.1, -1)
ShowSyncHudMsg(0, g_left_sync, g_KillingMsg[a], name)
}
if (KillingStreakSound)
{
play_sound(0, g_Sounds[a])
}
}
}
}
if (MultiKill || MultiKillSound)
{
if (!selfkill && !TK && killer)
{
g_multiKills[killer][0]++
g_multiKills[killer][1] += headshot
new param[2]
param[0] = killer
param[1] = g_multiKills[killer][0]
set_task(4.0 + float(param[1]), "checkKills", killer, param, sizeof(param))
}
}
new const CsTeams:team = cs_get_user_team(victim);
if (EnemyRemaining && CS_TEAM_T <= team <= CS_TEAM_CT && is_user_connected(victim))
{
new const victimTeammatesCount = get_playersnum_ex(GetPlayers_ExcludeDead | GetPlayers_MatchTeam, g_teamsNames[team]);
if (victimTeammatesCount)
{
new killerTeammatesList[MAX_PLAYERS], killerTeammatesCount;
get_players_ex(killerTeammatesList, killerTeammatesCount, GetPlayers_ExcludeDead | GetPlayers_MatchTeam, g_teamsNames[CsTeams:(any:team % 2 + 1)]);
if (killerTeammatesCount)
{
set_hudmessage(255, 255, 255, 0.02, 0.85, 2, 0.05, 0.1, 0.02, 3.0, -1);
for (new teammate; teammate < killerTeammatesCount; ++teammate)
{
victimTeammatesCount > 1 ?
ShowSyncHudMsg(killerTeammatesList[teammate], g_bottom_sync, "%l", "REMAINING_ENEMIES", victimTeammatesCount) :
ShowSyncHudMsg(killerTeammatesList[teammate], g_bottom_sync, "%l","REMAINING_ENEMY");
}
}
}
}
if (LastMan || LastManSound)
{
new cts[MAX_PLAYERS], ts[MAX_PLAYERS], ctsnum, tsnum, b
get_players(cts, ctsnum, "ae", "CT")
get_players(ts, tsnum, "ae", "TERRORIST")
if( victim_alive )
{
switch( team )
{
case CS_TEAM_T:
{
for(b=0; b<tsnum; b++)
{
if( ts[b] == victim )
{
ts[b] = ts[--tsnum]
break
}
}
}
case CS_TEAM_CT:
{
for(b=0; b<ctsnum; b++)
{
if( cts[b] == victim )
{
cts[b] = cts[--ctsnum]
break
}
}
}
}
}
if (ctsnum == 1 && tsnum == 1)
{
if( LastMan )
{
new ctname[MAX_NAME_LENGTH], tname[MAX_NAME_LENGTH]
get_user_name(cts[0], ctname, charsmax(ctname))
get_user_name(ts[0], tname, charsmax(tname))
set_hudmessage(0, 255, 255, -1.0, 0.35, 0, 6.0, 6.0, 0.5, 0.15, -1)
if( LastManHealth )
{
ShowSyncHudMsg(0, g_center1_sync, "%s (%d HP) vs. %s (%d HP)", ctname, get_user_health(cts[0]), tname, get_user_health(ts[0]))
}
else
{
ShowSyncHudMsg(0, g_center1_sync, "%s vs. %s", ctname, tname)
}
}
if( LastManSound )
{
play_sound(0, g_lastmansound_duel)
}
}
else if (!g_LastAnnounce)
{
new oposite = 0, CsTeams:_team
if (ctsnum == 1 && tsnum > 1)
{
g_LastAnnounce = cts[0]
oposite = tsnum
_team = CS_TEAM_T
}
else if (tsnum == 1 && ctsnum > 1)
{
g_LastAnnounce = ts[0]
oposite = ctsnum
_team = CS_TEAM_CT
}
if (g_LastAnnounce)
{
if( LastMan )
{
new name[MAX_NAME_LENGTH]
get_user_name(g_LastAnnounce, name, charsmax(name))
set_hudmessage(0, 255, 255, -1.0, 0.38, 0, 6.0, 6.0, 0.5, 0.15, -1)
if( LastManHealth )
{
ShowSyncHudMsg(0, g_center1_sync, "%s (%d HP) vs. %d %s%s: %L", name, get_user_health(g_LastAnnounce), oposite, g_teamsNames[_team], (oposite == 1) ? "" : "S", LANG_PLAYER, g_LastMessages[random_num(0, 3)])
}
else
{
ShowSyncHudMsg(0, g_center1_sync, "%s vs. %d %s%s: %L", name, oposite, g_teamsNames[_team], (oposite == 1) ? "" : "S", LANG_PLAYER, g_LastMessages[random_num(0, 3)])
}
}
if ( LastManSound && g_connected[g_LastAnnounce] )
{
play_sound(g_LastAnnounce, g_lastmansound_1vsothers)
}
}
}
}
if (wpnindex == CSW_KNIFE && (KnifeKill || KnifeKillSound))
{
if (KnifeKill)
{
new killer_name[MAX_NAME_LENGTH], victim_name[MAX_NAME_LENGTH]
get_user_name(killer, killer_name, charsmax(killer_name))
get_user_name(victim, victim_name, charsmax(victim_name))
set_hudmessage(255, 100, 100, -1.0, 0.25, 1, 6.0, 6.0, 0.5, 0.15, -1)
ShowSyncHudMsg(0, g_he_sync, "%L", LANG_PLAYER, g_KinfeMsg[random_num(0, 3)], killer_name, victim_name)
}
if (KnifeKillSound)
play_sound(0, g_knifekillsound)
}
if (wpnindex == CSW_HEGRENADE)
{
new killer_name[MAX_NAME_LENGTH], victim_name[MAX_NAME_LENGTH]
if( GrenadeKill || GrenadeSuicide )
{
get_user_name(killer, killer_name, charsmax(killer_name))
get_user_name(victim, victim_name, charsmax(victim_name))
set_hudmessage(255, 100, 100, -1.0, 0.25, 1, 6.0, 6.0, 0.5, 0.15, -1)
}
if (!selfkill)
{
if (GrenadeKill)
ShowSyncHudMsg(0, g_he_sync, "%L", LANG_PLAYER, g_HeMessages[random_num(0, 3)], killer_name, victim_name)
if (GrenadeKillSound)
play_sound(0, g_grenadekillsound)
}
else
{
if (GrenadeSuicide)
ShowSyncHudMsg(0, g_he_sync, "%L", LANG_PLAYER, g_SHeMessages[random_num(0, 3)], victim_name)
if (GrenadeSuicideSound)
play_sound(0, g_grenadesuicidesound)
}
}
if (headshot && (HeadShotKill || HeadShotKillSound))
{
if (HeadShotKill && wpnindex)
{
new killer_name[MAX_NAME_LENGTH], victim_name[MAX_NAME_LENGTH], weapon_name[32], message[256], players[MAX_PLAYERS], pnum, plr
xmod_get_wpnname(wpnindex, weapon_name, charsmax(weapon_name))
get_user_name(killer, killer_name, charsmax(killer_name))
get_user_name(victim, victim_name, charsmax(victim_name))
get_players(players, pnum, "ch")
for (new i = 0; i < pnum; i++)
{
plr = players[i]
formatex(message, charsmax(message), "%L", plr, g_HeadShots[random_num(0, 6)])
replace(message, charsmax(message), "$vn", victim_name)
replace(message, charsmax(message), "$wn", weapon_name)
replace(message, charsmax(message), "$kn", killer_name)
set_hudmessage(100, 100, 255, -1.0, 0.30, 0, 6.0, 6.0, 0.5, 0.15, -1)
ShowSyncHudMsg(plr, g_announce_sync, "%s", message)
}
}
if (HeadShotKillSound)
{
play_sound(victim, g_hssound_victim)
if( victim != killer )
play_sound(killer, g_hssound_killer)
}
}
if ((DoubleKill || DoubleKillSound) && !selfkill)
{
new Float:nowtime = get_gametime()
if (g_doubleKill == nowtime && g_doubleKillId == killer)
{
if (DoubleKill)
{
new name[MAX_NAME_LENGTH]
get_user_name(killer, name, charsmax(name))
set_hudmessage(255, 0, 255, -1.0, 0.35, 0, 6.0, 6.0, 0.5, 0.15, -1)
ShowSyncHudMsg(0, g_center1_sync, "%L", LANG_PLAYER, "DOUBLE_KILL", name)
}
if (DoubleKillSound)
play_sound(0, g_doublekillsound)
}
g_doubleKill = nowtime
g_doubleKillId = killer
}
}
public hideStatus(id)
{
if (PlayerName)
{
ClearSyncHud(id, g_status_sync)
}
}
public setTeam(id)
g_friend[id] = read_data(2)
public showStatus(id)
{
if( PlayerName)
{
new name[MAX_NAME_LENGTH], pid = read_data(2)
get_user_name(pid, name, charsmax(name))
new color1 = 0, color2 = 0
if (cs_get_user_team(pid) == CS_TEAM_T)
color1 = 255
else
color2 = 255
if (g_friend[id] == 1) // friend
{
new wpnid = get_user_weapon(pid)
new wpnname[32]
if (wpnid)
xmod_get_wpnname(wpnid, wpnname, charsmax(wpnname))
set_hudmessage(color1, 50, color2, -1.0, 0.60, 1, 0.01, 3.0, 0.01, 0.01, -1)
ShowSyncHudMsg(id, g_status_sync, "%s -- %d HP / %d AP / %s", name, get_user_health(pid), get_user_armor(pid), wpnname)
} else {
set_hudmessage(color1, 50, color2, -1.0, 0.60, 1, 0.01, 3.0, 0.01, 0.01, -1)
ShowSyncHudMsg(id, g_status_sync, "%s", name)
}
}
}
public Event_HLTV_New_Round()
{
g_c4timer_value = get_pcvar_num( g_pcvar_mp_c4timer )
++g_roundCount
g_firstBlood = 1
g_C4Timer = 0
if (RoundCounterSound)
play_sound(0, g_roundcountersound)
if (RoundCounter)
{
set_task(0.2, "Delayed_New_Round", TASK_DELAYED_NEW_ROUND)
}
}
public Delayed_New_Round()
{
set_hudmessage(200, 0, 0, -1.0, 0.30, 0, 6.0, 6.0, 0.5, 0.15, -1)
ShowSyncHudMsg(0, g_announce_sync, "%L", LANG_PLAYER, "PREPARE_FIGHT", g_roundCount)
}
public LogEvent_Round_Start()
{
if (KillingStreak)
{
new appl[MAX_PLAYERS], ppl, i
get_players(appl, ppl, "ac")
for (new a = 0; a < ppl; ++a)
{
i = appl[a]
if (g_streakKills[i][0] >= 2)
client_print(i, print_chat, "* %L", i, "KILLED_ROW", g_streakKills[i][0])
else if (g_streakKills[i][1] >= 2)
client_print(i, print_chat, "* %L", i, "DIED_ROUNDS", g_streakKills[i][1])
}
}
}
public eRestart()
{
eEndRound()
g_roundCount = 0
g_firstBlood = 1
}
public eEndRound()
{
g_C4Timer = -2
g_LastOmg = 0.0
remove_task(TASK_BOMB_TIMER)
g_LastAnnounce = 0
}
public checkKills(param[])
{
new id = param[0]
new a = param[1]
if (a == g_multiKills[id][0])
{
a -= 3
if (a > -1)
{
if (a > 6)
{
a = 6
}
if (MultiKill)
{
new name[MAX_NAME_LENGTH]
get_user_name(id, name, charsmax(name))
set_hudmessage(255, 0, 100, 0.05, 0.50, 2, 0.02, 6.0, 0.01, 0.1, -1)
ShowSyncHudMsg(0, g_left_sync, g_MultiKillMsg[a], name, LANG_PLAYER, "WITH", g_multiKills[id][0], LANG_PLAYER, "KILLS", g_multiKills[id][1], LANG_PLAYER, "HS")
}
if (MultiKillSound)
{
play_sound(0, g_Sounds[a])
}
}
g_multiKills[id] = {0, 0}
}
}
public chickenKill()
{
if (ItalyBonusKill)
announceEvent(0, "KILLED_CHICKEN")
}
public radioKill()
{
if (ItalyBonusKill)
announceEvent(0, "BLEW_RADIO")
}
announceEvent(id, message[])
{
new name[MAX_NAME_LENGTH]
get_user_name(id, name, charsmax(name))
set_hudmessage(255, 100, 50, -1.0, 0.30, 0, 6.0, 6.0, 0.5, 0.15, -1)
ShowSyncHudMsg(0, g_announce_sync, "%L", LANG_PLAYER, message, name)
}
public eBombPickUp(id)
{
if (BombPickUp)
announceEvent(id, "PICKED_BOMB")
}
public eBombDrop()
{
if (BombDrop)
announceEvent(g_Planter, "DROPPED_BOMB")
}
public eGotBomb(id)
{
g_Planter = id
if (BombReached && read_data(1) == 2 && g_LastOmg < get_gametime())
{
g_LastOmg = get_gametime() + 15.0
announceEvent(g_Planter, "REACHED_TARGET")
}
}
public bombTimer()
{
if (--g_C4Timer > 0)
{
if( BombCountHUD )
{
new r, g
if( g_C4Timer < 10 )
{
r = 255, g = 0
}
else
{
r = (((max(g_c4timer_value - g_C4Timer - 10,0)) * 255000) / (g_c4timer_value - 10)) / 1000
g = 255 - r
}
set_hudmessage(r, g, 0, -1.0, 0.75, g_C4Timer <= 10 ? 1 : 0, 0.01, 1.1, 0.001, 0.001, .channel = -1)
show_hudmessage(0, "C4: %ds", g_C4Timer)
}
if (BombCountVoice)
{
if (g_C4Timer == 30 || g_C4Timer == 20)
{
new temp[64]
num_to_word(g_C4Timer, temp, charsmax(temp))
format(temp, charsmax(temp), "^"vox/%s seconds until explosion^"", temp)
play_sound(0, temp)
}
else if (g_C4Timer < 11)
{
new temp[64]
num_to_word(g_C4Timer, temp, charsmax(temp))
format(temp, charsmax(temp), "^"vox/%s^"", temp)
play_sound(0, temp)
}
}
if (BombCountDef && g_Defusing && is_user_alive(g_Defusing))
client_print(g_Defusing, print_center, "%d", g_C4Timer)
}
else
remove_task(TASK_BOMB_TIMER)
}
public eStopDefuse(id)
{
if( id == g_Defusing )
{
g_Defusing = 0
}
}
public bomb_planted(planter)
{
g_Defusing = 0
if (BombPlanted)
announceEvent(planter, "SET_UP_BOMB")
if (BombPlantedSound)
play_sound(0, g_bombplantedsound)
g_C4Timer = g_c4timer_value + 1
bombTimer()
set_task(1.0, "bombTimer", TASK_BOMB_TIMER, "", 0, "b")
}
public bomb_planting(planter)
{
if (BombPlanting)
announceEvent(planter, "PLANT_BOMB")
}
public bomb_defusing(defuser)
{
if (BombDefusing)
announceEvent(defuser, "DEFUSING_BOMB")
g_Defusing = defuser
}
public bomb_defused(defuser)
{
if (BombDefused)
announceEvent(defuser, "DEFUSED_BOMB")
if (BombDefusedSound)
play_sound(0, g_bombdefusedsound)
}
public bomb_explode(planter, defuser)
{
if( defuser )
{
if (BombFailed)
announceEvent(defuser, "FAILED_DEFU")
if (BombFailedSound)
play_sound(0, g_bombfailedsound)
}
}
play_sound(id, sound[])
{
if( id )
{
if( g_msounds[id] )
{
client_cmd(id, "spk %s", sound)
}
}
else
{
new players[MAX_PLAYERS], pnum, id
get_players(players, pnum, "ch")
for(--pnum; pnum>=0; pnum--)
{
id = players[pnum]
if ( g_connected[id] && g_msounds[id] )
client_cmd(id, "spk %s", sound)
}
}
}
public cmdSwitchSounds( id )
{
g_msounds[id] = !g_msounds[id]
client_print(id, print_chat, "MSounds %L", id, g_msounds[id] ? "ENABLED" : "DISABLED")
set_user_info(id, _msound, g_msounds[id] ? "1" : "0") // will this save setting for next map is player has cl_filterstuffcmd 0 ???
client_cmd(id, "setinfo %s %s", _msound, g_msounds[id] ? "1" : "0")
}
В этой теме было размещено решение! Перейти к решению.
Вложения
-
27.6 KB Просмотры: 340