Veteran Member
Join Date: Oct 2008
Location: 🎧Music World
03-05-2020
, 11:45
D7 Kill Announcer: Dota 2
#1
D i 5 7 i n c T's Kill Announcer: Dota 2
Replicates the Dota 2 killing spree and multi-kill announcer.
Also works on Counter-Strike: Condition Zero.
Fully compatible with ZP 5, 4, and older.
Short video:
VIDEO
CVar : D7AnnouncerKillsD2IgnoreBots
Don't play sounds or show announcements when bots make kills.
0 - disabled
1 - enabled
Client chat command : d2s - turns sound playing ON/OFF
Client chat command : d2t - turns text showing ON/OFF
None.
This plug-in requires the following :
- BitSum stocks include file (
bitsums.inc ).
- DHUD messages include file (
dhudmessage.inc ) ONLY IF compiling with AMXX 1.8.2 or older.
- SoundInfo include file (
soundinfo.inc ).
- Sound resources. Extract the zip file contents in the mod's main directory.
Everything is attached along below.
Known issues :
- SoundInfo include file fails to read sound duration for mp3 files. If you plan on using mp3 files, manually specify the sound durations in the area below their names.
Get source and compile locally .
MeRcyLeZZ - For his
Zombie Plague Mod .
dorin2oo7 - For his images I used to style up my post.
NiHiLaNTh ,
schmurgel1983 ,
KliPPy ,
meTaLiCroSS - For being true friends and always helping and teaching me new stuff.
Code:
T = needs testing
X = done
- = cancelled
[X] remember kills and multis on global variables
[T] make sounds not play over eachother
[X] ownage message?
[X] reset kills on map restart
[X] stop announcements on new round?
[X] stop announcements on map restart?
[X] a single chat message for both kill count and multi?
[X] a single task for all announcements
[-] fix ownage sound playing when it shouldn't
[X] fix g_iMulti not resetting
[T] force visual announcement of previous player if not announced when another player makes a kill
[T] only do it when the new player has something to announce
[T] fix first blood triggering wrong(add first blood bit info)
[T] optimize multi text showing conditions
[T] optimize multi sound playing conditions
[T] death hook with DeathMsg instead of Ham_Killed
[T] ownage announcement for team kills difference instead of >= 5 player kills
[T] don't force print last killer's ownage unless the new killer is from a different team
[T] ignore spectator kills for both victim and attacker
[T] don't add sound folder before precaching wavs
[X] zp 4.3 and lower infection support
[T] only print ownage message once
[X] don't count team kills
[ ] decrease kills on team kill?
v0.2.2
[X] properly detect name change
[T] announce ownage even if no player specific event happens
[T] only add delay from inside the announce task if necessary
[T] delay the other announcements even if first blood sound doesn't exist
v0.2.5
[T] task on client_putinserver for renaming plugins compatibility
v0.2.6
[T] ignore bots + cvar
v0.2.7
[-] fix ownage chat message printing multiple times
[-] cache sound type instead of checking for extension every time
[-] fix bomb kills counting (for planter?)
[-] don't allow ownage sounds to interrupt spree or multi announcements?
[-] implement rpg api team code
[X] HUD
[T] don't reset multis on death or spawn and add multi only messages
[X] reset kills and multis on round start
[X] hud hold time equal to the total sound duration
[X] precache_generic for all the sounds since we're not playing them on server side
[X] optimize plugin_precache
[X] fix hud positioning system
[T] delay the initial hud show by 0.1 to avoid spamming too many messages on instant multiple kills
[X] full zp support
[X] use natives instead of team cache
[T] server interogation cvar
v0.3.8
[T] minimize or eliminate hud flicker (use multiplier of 0.1 for g_fConstTaskAnnounceTextDelay)
[T] don't get sound duration if manually specified
[T] fix first blood duration variable being used for all sounds duration storage
v0.4.1
[T] disable sound and text options for players + temporary memory while same map running
v0.4.2
[ ] multilang
[ ] dynamic max simultaneous announcers
[ ] external configuration
[ ] improve hud spacing
[ ] fix soundinfo mp3 issues
Code(for easy readability) :
PHP Code:
// Modules - global
#include <amxmodx>
#include <fakemeta>
// Modules - mod specific
#include <cstrike>
// Stocks
#include <bitsums>
#if AMXX_VERSION_NUM <= 182//!defined set_dhudmessage
#include <dhudmessage>
#endif
#include <soundinfo>
//#include <D7Debug>
new const g_szConstVersion [] = "0.4.2" ;
// Custom forwards
forward zp_user_infected_post ( id , infector , nemesis );
//forward zp_user_humanized_post(id, survivor);
forward zp_fw_core_infect_post ( id , attacker );
forward zp_fw_core_cure_post ( id , attacker );
// Custom natives
native zp_get_user_zombie ( id );
native zp_core_is_zombie ( id );
const g_iSizeSzSound = 64 ;
new g_szSoundFirstBlood [ g_iSizeSzSound ] = "D7/Announcers/Dota2/Kill/Announcer_1stblood_01.wav" ;
new Float : g_fSoundFirstBloodDuration = 1.647891 ; //1.645714
new const g_szConstTextFirstBlood [] = "drew first blood by killing" ;
new const g_iConstTextFirstBloodColor [ 3 ] = { 255 , 255 , 255 };
new g_szSoundsCount [][ g_iSizeSzSound ] =
{
"D7/Announcers/Dota2/Kill/Announcer_kill_spree_01.wav" ,
"D7/Announcers/Dota2/Kill/Announcer_kill_dominate_01.wav" ,
"D7/Announcers/Dota2/Kill/Announcer_kill_mega_01.wav" ,
"D7/Announcers/Dota2/Kill/Announcer_kill_unstop_01.wav" ,
"D7/Announcers/Dota2/Kill/Announcer_kill_wicked_01.wav" ,
"D7/Announcers/Dota2/Kill/Announcer_kill_monster_01.wav" ,
"D7/Announcers/Dota2/Kill/Announcer_kill_godlike_01.wav" ,
"D7/Announcers/Dota2/Kill/Announcer_kill_holy_01.wav"
}
new Float : g_fSoundsCountDuration [ sizeof g_szSoundsCount ] =
{
2.378684 , //2.377143
1.803990 , //1.802449
2.613786 , //2.612245
2.039093 , //2.037551
2.613786 , //2.612245
3.345215 , //3.343673
1.830113 , //1.828571
2.326439 //2.324898
}
new const g_szConstTextCount [ sizeof g_szSoundsCount ][] =
{
"is on a killing spree" ,
"is dominating" ,
"is on a mega kill streak" ,
"is unstoppable" ,
"is wicked sick" ,
"is on a monster kill streak" ,
"is GODLIKE" ,
"is beyond GODLIKE, someone kill them!!"
}
new const g_iConstTextCountColor [ sizeof g_szConstTextCount ][ 3 ] =
{
{ 0 , 255 , 64 },
{ 94 , 0 , 189 }, //{ 35, 0, 160 },
{ 255 , 0 , 128 },
{ 255 , 128 , 0 },
{ 128 , 128 , 0 },
{ 255 , 128 , 255 },
{ 255 , 0 , 0 },
{ 255 , 128 , 0 }
}
new g_szSoundsMulti [][ g_iSizeSzSound ] =
{
"D7/Announcers/Dota2/Kill/Announcer_kill_double_01.wav" ,
"D7/Announcers/Dota2/Kill/Announcer_kill_triple_01.wav" ,
"D7/Announcers/Dota2/Kill/Announcer_kill_ultra_01.wav" ,
"D7/Announcers/Dota2/Kill/Announcer_kill_rampage_01.wav"
}
new Float : g_fSoundsMultiDuration [ sizeof g_szSoundsMulti ] =
{
2.012970 , //2.011429
1.908480 , //1.906939
2.588299 , //2.586122
1.961360 //1.959184
}
new const g_szConstTextMulti [ sizeof g_szSoundsMulti ][] =
{
"got a double kill!" ,
"has a TRIPLE kill!" ,
"earned an ULTRA KILL!" ,
"IS ON A RAMPAGE!!"
}
new const g_iConstTextMultiColor [ sizeof g_szConstTextMulti ][ 3 ] =
{
{ 255 , 255 , 255 },
{ 255 , 255 , 255 },
{ 255 , 255 , 255 },
{ 255 , 0 , 0 }
}
new const g_szConstTextMultiAdd [][] =
{
"with a double kill!" ,
"with a TRIPLE kill!" ,
"with an ULTRA KILL!" ,
"RAMPAGE!!!"
}
new g_szSoundOwnage [ g_iSizeSzSound ] = "D7/Announcers/Dota2/Kill/Announcer_ownage_01.wav" ;
//new Float:g_fSoundOwnageDuration = 2.586122;
const Float : g_fConstTaskMultiDelay = 5.0 ;
const Float : g_fConstTaskAnnounceTextDelay = 0.3 ;
const g_iConstSizeName = 31 ;
new g_iSizeArray , Array: g_iIDArrayAuthID , Array: g_iIDArrayText , Array: g_iIDArraySound ;
new g_iMaxPlayers , g_szName [ 33 ][ g_iConstSizeName ], g_iIDFirstBlood ,
g_iKills [ 33 ], g_iMulti [ 33 ], g_iCountKillsTeam , g_iIDPCVarIgnoreBots ,
g_iCountAnnouncersText , g_iIDAnnouncersText [ 2 ], g_iBsAuthorized ,
g_bSetDisableText [ 33 ], g_bSetDisableSound [ 33 ], g_iIDArray [ 33 ] = { - 1 , ... };
new g_iZPRunning = 4 ;
enum (+= 33 )
{
g_iIDTaskResetMulti = 8000 ,
g_iIDTaskUpdateName ,
g_iIDTaskAnnounceText ,
g_iIDTaskAnnounceTextRemove ,
g_iIDTaskAnnounceSound ,
g_iIDTaskAd
}
enum _ : g_iConstTaskAnnounceTextInfo
{
g_iConstInfoCount ,
g_iConstInfoMulti ,
g_iConstInfoVictim ,
g_iConstInfoColorR ,
g_iConstInfoColorG ,
g_iConstInfoColorB
}
enum _ : g_iExtResults
{
g_iConstExtResultShort = - 2 ,
g_iConstExtResultNone = - 1
}
stock iFtExtPosReturn (const szFile [])
{
new iTemp ;
for ( iTemp = strlen ( szFile ) - 2 ; iTemp >= - 1 ; iTemp --)
{
if ( iTemp == - 1 )
break;
//log_to_file(szFile, "iTemp: %d. Processing character: ^"%c^".", iTemp, szFile[iTemp])
if ( szFile [ iTemp ] == '.' )
{
iTemp ++;
//log_to_file(szFile, "iTemp: %d. Found extension: ^"%s^".", iTemp, szFile[iTemp])
break;
}
else if ( szFile [ iTemp ] == '/' || szFile [ iTemp ] == '\' || szFile[iTemp] == ' ')
{
iTemp = -1;
break;
}
}
return iTemp;
}
bFtContainsFolderStart(const szDirectory[], const szFolder[])
{
new iPosFolderNameStart,
iStrlLenDirectory = strlen(szDirectory);
while (iPosFolderNameStart < iStrlLenDirectory && (szDirectory[iPosFolderNameStart] == ' / ' || szDirectory[iPosFolderNameStart] == ' \ '))
iPosFolderNameStart++;
new iStrLenFolder = strlen(szFolder);
if (iStrlLenDirectory - (iPosFolderNameStart + 1) < iStrLenFolder + 1
|| szDirectory[iPosFolderNameStart + iStrLenFolder + 1] != ' / '
&& szDirectory[iPosFolderNameStart + iStrLenFolder + 1] != ' \ ')
{
//ftD7Log(_, _, "[bFtContainsFolderStart] szDirectory: ^"%s^". szFolder: ^"%s^". False.", szDirectory, szFolder)
return 0;
}
for (new iID; iID < iStrLenFolder; iID++)
{
if (szDirectory[iPosFolderNameStart + iID] != szFolder[iID])
{
//ftD7Log(_, _, "[bFtContainsFolderStart] szDirectory: ^"%s^". szFolder: ^"%s^". False.", szDirectory, szFolder)
return 0;
}
else if (iID == iStrLenFolder - 1)
{
//ftD7Log(_, _, "[bFtContainsFolderStart] szDirectory: ^"%s^". szFolder: ^"%s^". True.", szDirectory, szFolder)
return 1;
}
}
//ftD7Log(_, _, "[bFtContainsFolderStart] szDirectory: ^"%s^". szFolder: ^"%s^". False.", szDirectory, szFolder)
return 0;
}
enum (<<= 1)
{
g_iConstBitStopWAV = 1,
g_iConstBitStopMp3
}
ftPlaySound(const szSound[], const iID = 0, const iBsStopSounds = 0, const bSpeak = 1)
{
new iPosExt = iFtExtPosReturn(szSound)
if (equali(szSound[iPosExt], "mp3"))
client_cmd(iID, "%s%smp3 play ^"%s^"", !(iBsStopSounds & g_iConstBitStopWAV) ? "" : "stopsound; ", !(iBsStopSounds & g_iConstBitStopMp3) ? "" : "mp3 stop; ", szSound)
else
client_cmd(iID, "%s%s%s ^"%s^"", !(iBsStopSounds & g_iConstBitStopWAV) ? "" : "stopsound; ", !(iBsStopSounds & g_iConstBitStopMp3) ? "" : "mp3 stop; ", !bSpeak ? "spk" : "speak", szSound)
}
ftClientPrintChatColor(const iIDTarget = 0, const iIDSender = 0, const szMessage[], any:...)
{
if (iIDTarget && !is_user_connected(iIDTarget))
return;
new szBuffer[192];
vformat(szBuffer, charsmax(szBuffer), szMessage, 4)
static const szChatTag[] = "^1[^4D7 Kill Announcer: Dota 2^1] ";
format(szBuffer, charsmax(szBuffer), "%s%s", szChatTag, szBuffer)
static iIDMsgSayText;
if (!iIDMsgSayText)
iIDMsgSayText = get_user_msgid("SayText");
if (iIDTarget)
message_begin(MSG_ONE, iIDMsgSayText, _, iIDTarget)
else
message_begin(MSG_ALL, iIDMsgSayText)
write_byte(!iIDSender ? iIDTarget : iIDSender)
write_string(szBuffer)
message_end()
}
public plugin_natives()
{
set_native_filter("fwNativeFilter")
}
public fwNativeFilter(const szName[], const iID, const iTrap)
{
// Credits to Schmurgel
/* it' s a trap ? */
if ( equal ( szName , "zp_get_user_zombie" ) && iTrap )
{
/* yes it's a trap, zp is not running */
g_iZPRunning = 0 ;
return PLUGIN_HANDLED
}
return (! iTrap ) ? PLUGIN_HANDLED : PLUGIN_CONTINUE
}
public plugin_init ()
{
register_plugin ( "D7 Announcer Kills: Dota 2" , g_szConstVersion , "D i 5 7 i n c T" )
register_event ( "HLTV" , "fwEventHltvRoundStart" , "a" , "1=0" , "2=0" )
register_message ( get_user_msgid ( "SayText" ), "fwMsgSayTextPre" )
register_message ( get_user_msgid ( "DeathMsg" ), "fwMsgDeathPre" )
register_cvar ( "D7AnnouncerKillsD2Version" , g_szConstVersion , FCVAR_SERVER | FCVAR_SPONLY )
set_cvar_string ( "D7AnnouncerKillsD2Version" , g_szConstVersion )
g_iMaxPlayers = get_maxplayers ();
g_iIDPCVarIgnoreBots = register_cvar ( "D7AnnouncerKillsD2IgnoreBots" , "0" );
/* Check if Zombie Plague is running */
if ( LibraryExists ( "zp50_core" , LibType_Library ))
{
/* zp50 is running */
g_iZPRunning = 5 ;
}
else if ( get_cvar_pointer ( "zp_on" )) /* Cvar is registered! */
{
/* Check if ZP is really running! */
zp_get_user_zombie ( 1 ) /* trigger: native_filter. */
}
else
g_iZPRunning = 0 ;
/*
for (new i; i <= 256; i++)
{
ftD7Log("a", _, "[plugin_init] Character %d: ^"%c^".", i, i)
}*/
set_task ( random_float ( 30.0 , 60.0 ), "fwTaskAd" , g_iIDTaskAd )
g_iIDArrayAuthID = ArrayCreate ( 35 , 1 );
g_iIDArrayText = ArrayCreate ( 1 , 1 );
g_iIDArraySound = ArrayCreate ( 1 , 1 );
register_clcmd ( "say" , "fwClCmdSay" )
}
public fwTaskAd (const iIDTask )
{
ftClientPrintChatColor ( 0 , 33 , "Type in chat to turn ^3OFF^1/^4ON^1: ^4d2s^1 - ^4sounds^1, ^4d2t^1 - ^4text^1." )
set_task ( random_float ( 180.0 , 300.0 ), "fwTaskAd" , g_iIDTaskAd )
}
public fwClCmdSay (const iID )
{
if ( is_user_bot ( iID ))
return PLUGIN_CONTINUE ;
new szArg [ 5 ];
read_argv ( 1 , szArg , charsmax ( szArg ))
//client_print(0, print_chat, szArg)
trim ( szArg )
remove_quotes ( szArg )
replace ( szArg , charsmax ( szArg ), "/" , "" )
if ( equali ( szArg , "d2s" ))
{
g_bSetDisableSound [ iID ] = g_bSetDisableSound [ iID ] ? 0 : 1 ;
ftClientPrintChatColor ( iID , 33 , "Sound: %s^1." , g_bSetDisableSound [ iID ] ? "^3OFF" : "^4ON" )
if (! bitsum_get ( g_iBsAuthorized , iID ))
return PLUGIN_HANDLED_MAIN ;
if ( g_iIDArray [ iID ] >= 0 )
{
ArraySetCell ( g_iIDArraySound , g_iIDArray [ iID ], g_bSetDisableSound [ iID ])
}
else
{
new szAuthID [ 35 ];
get_user_authid ( iID , szAuthID , charsmax ( szAuthID ))
ArrayPushString ( g_iIDArrayAuthID , szAuthID )
ArrayPushCell ( g_iIDArraySound , g_bSetDisableSound [ iID ])
ArrayPushCell ( g_iIDArrayText , g_bSetDisableText [ iID ])
g_iIDArray [ iID ] = g_iSizeArray ;
g_iSizeArray ++;
}
}
else if ( equali ( szArg , "d2t" ))
{
g_bSetDisableText [ iID ] = g_bSetDisableText [ iID ] ? 0 : 1 ;
ftClientPrintChatColor ( iID , 33 , "Text: %s^1." , g_bSetDisableText [ iID ] ? "^3OFF" : "^4ON" )
if (! bitsum_get ( g_iBsAuthorized , iID ))
return PLUGIN_HANDLED_MAIN ;
if ( g_iIDArray [ iID ] >= 0 )
{
ArraySetCell ( g_iIDArrayText , g_iIDArray [ iID ], g_bSetDisableText [ iID ])
}
else
{
new szAuthID [ 35 ];
get_user_authid ( iID , szAuthID , charsmax ( szAuthID ))
ArrayPushString ( g_iIDArrayAuthID , szAuthID )
ArrayPushCell ( g_iIDArraySound , g_bSetDisableSound [ iID ])
ArrayPushCell ( g_iIDArrayText , g_bSetDisableText [ iID ])
g_iIDArray [ iID ] = g_iSizeArray ;
g_iSizeArray ++;
}
}
return PLUGIN_CONTINUE ;
}
public fwEventHltvRoundStart ()
{
g_iIDFirstBlood = 0 ;
g_iCountKillsTeam = 0 ;
/* remove_task(g_iIDTaskAnnounceSound)
while (g_iCountAnnouncersText)
{
remove_task(g_iIDAnnouncersText[g_iCountAnnouncersText - 1] + g_iIDTaskAnnounceTextRemove)
fwTaskAnnounceTextRemove(g_iIDAnnouncersText[g_iCountAnnouncersText - 1] + g_iIDTaskAnnounceTextRemove)
}
*/
for (new iID = 1 ; iID <= g_iMaxPlayers ; iID ++)
{
g_iKills [ iID ] = 0 ;
remove_task ( iID + g_iIDTaskResetMulti )
fwTaskResetMulti ( iID + g_iIDTaskResetMulti )
}
}
public fwTaskUpdateName ( iID )
{
iID -= g_iIDTaskUpdateName ;
// client_disconnect doesn't cover all the disconnect cases
// so we need to be sure the player is still connected
if (! is_user_connected ( iID ))
return;
get_user_name ( iID , g_szName [ iID ], charsmax ( g_szName []))
}
// Credits to Johnny got his gun
public fwMsgSayTextPre ()
{
if ( get_msg_args () != 4 )
return;
static szBuffer [ 21 ];
get_msg_arg_string ( 2 , szBuffer , charsmax ( szBuffer ))
if (! equali ( szBuffer , "#Cstrike_Name_Change" ))
return;
new iID = get_msg_arg_int ( 1 );
remove_task ( iID + g_iIDTaskUpdateName )
set_task ( 0.1 , "fwTaskUpdateName" , iID + g_iIDTaskUpdateName )
}
public client_connect ( iID )
{
bitsum_del ( g_iBsAuthorized , iID )
g_bSetDisableText [ iID ] = 0 ;
g_bSetDisableSound [ iID ] = 0 ;
}
public client_authorized ( iID )
{
if ( is_user_bot ( iID ))
{
g_bSetDisableText [ iID ] = 1 ;
g_bSetDisableSound [ iID ] = 1 ;
return;
}
bitsum_add ( g_iBsAuthorized , iID )
if (! g_iSizeArray )
return;
new szAuthID [ 35 ], szAuthID2 [ 35 ];
get_user_authid ( iID , szAuthID , charsmax ( szAuthID ))
for (new i ; i < g_iSizeArray ; i ++)
{
ArrayGetString ( g_iIDArrayAuthID , i , szAuthID2 , charsmax ( szAuthID2 ))
if (! equali ( szAuthID , szAuthID2 ))
continue;
g_iIDArray [ iID ] = i ;
g_bSetDisableText [ iID ] = ArrayGetCell ( g_iIDArrayText , i );
g_bSetDisableSound [ iID ] = ArrayGetCell ( g_iIDArraySound , i );
break;
}
}
public client_putinserver ( iID )
{
remove_task ( iID + g_iIDTaskUpdateName )
set_task ( 0.1 , "fwTaskUpdateName" , iID + g_iIDTaskUpdateName )
}
#if AMXX_VERSION_NUM <= 182
public client_disconnect ( iID )
#else
public client_disconnected ( iID )
#endif
{
remove_task ( iID + g_iIDTaskUpdateName )
g_iKills [ iID ] = 0 ;
remove_task ( iID + g_iIDTaskResetMulti )
fwTaskResetMulti ( iID + g_iIDTaskResetMulti )
remove_task ( iID + g_iIDTaskAnnounceTextRemove )
fwTaskAnnounceTextRemove ( iID + g_iIDTaskAnnounceTextRemove )
}
public fwTaskResetMulti ( iID )
{
iID -= g_iIDTaskResetMulti ;
g_iMulti [ iID ] = 0 ;
//ftD7Log(_, _, "[fwTaskResetMulti] ^"%s^".", g_szName[iID])
}
public fwTaskAnnounceText (const szInfo [], iID )
{
iID -= g_iIDTaskAnnounceText ;
//ftD7Log(_, iID, "iID: %s. K: %d. M: %d. iIDVictim: %d.", g_szName[iID], szInfo[g_iConstInfoCount], szInfo[g_iConstInfoMulti], szInfo[g_iConstInfoVictim])
new szTemp [ 128 ], iTemp , iIDsPlayers [ 32 ], iCountPlayers ;
get_players ( iIDsPlayers , iCountPlayers , "c" )
if ( szInfo [ g_iConstInfoCount ] >= 0 )
{
for ( iTemp = 0 ; iTemp < strlen ( g_szConstTextCount [ szInfo [ g_iConstInfoCount ]]); iTemp ++)
copy ( szTemp [ iTemp ], charsmax ( szTemp ) - iTemp , " " ); //szTemp[iTemp] = ' '
//replace_all(szTemp, charsmax(szTemp), "", "")
//replace_all(szTemp, charsmax(szTemp), "", "")
// red = 0, green = 160, blue = 0, Float:x = -1.0, Float:y = 0.65,
// effects = 2, Float:fxtime = 6.0, Float:holdtime = 3.0,
// Float:fadeintime = 0.1, Float:fadeouttime = 1.5, bool:reliable = true
#if defined _dhudmessage_included
set_dhudmessage
(
szInfo [ g_iConstInfoColorR ], szInfo [ g_iConstInfoColorG ], szInfo [ g_iConstInfoColorB ], - 1.0 , 0.15 , 0 , 0.0 ,
g_fConstTaskAnnounceTextDelay + (( g_fConstTaskAnnounceTextDelay >= 0.2 ) ? 0.1 : 0.05 ), 0.0 , 0.0 , false
)
#else
set_dhudmessage
(
szInfo [ g_iConstInfoColorR ], szInfo [ g_iConstInfoColorG ], szInfo [ g_iConstInfoColorB ], - 1.0 , 0.15 , 0 , 0.0 ,
g_fConstTaskAnnounceTextDelay + (( g_fConstTaskAnnounceTextDelay >= 0.2 ) ? 0.1 : 0.05 ), 0.0 , 0.0
)
#endif
for ( iTemp = 0 ; iTemp < iCountPlayers ; iTemp ++)
{
if ( g_bSetDisableText [ iIDsPlayers [ iTemp ]])
continue;
show_dhudmessage ( iIDsPlayers [ iTemp ], "%s%s%s" , ( iID == g_iIDAnnouncersText [ 1 ]) ? "^n^n" : "" , g_szName [ iID ], szTemp )
}
//ftD7Log("a", iID, "%s%s", g_szName[iID], szTemp)
szTemp = "" ;
for ( iTemp = 0 ; iTemp < strlen ( g_szName [ iID ]); iTemp ++)
copy ( szTemp [ iTemp ], charsmax ( szTemp ) - iTemp , " " );
//replace_all(szTemp, charsmax(szTemp), "", "")
//replace_all(szTemp, charsmax(szTemp), "", "")
#if defined _dhudmessage_included
set_dhudmessage
(
g_iConstTextCountColor [ szInfo [ g_iConstInfoCount ]][ 0 ], g_iConstTextCountColor [ szInfo [ g_iConstInfoCount ]][ 1 ], g_iConstTextCountColor [ szInfo [ g_iConstInfoCount ]][ 2 ],
- 1.0 , 0.15 , 0 , 0.0 , g_fConstTaskAnnounceTextDelay + (( g_fConstTaskAnnounceTextDelay >= 0.2 ) ? 0.1 : 0.05 ), 0.0 , 0.0 , false
)
#else
set_dhudmessage
(
g_iConstTextCountColor [ szInfo [ g_iConstInfoCount ]][ 0 ], g_iConstTextCountColor [ szInfo [ g_iConstInfoCount ]][ 1 ], g_iConstTextCountColor [ szInfo [ g_iConstInfoCount ]][ 2 ],
- 1.0 , 0.15 , 0 , 0.0 , g_fConstTaskAnnounceTextDelay + (( g_fConstTaskAnnounceTextDelay >= 0.2 ) ? 0.1 : 0.05 ), 0.0 , 0.0
)
#endif
for ( iTemp = 0 ; iTemp < iCountPlayers ; iTemp ++)
{
if ( g_bSetDisableText [ iIDsPlayers [ iTemp ]])
continue;
show_dhudmessage ( iIDsPlayers [ iTemp ], "%s%s %s" , ( iID == g_iIDAnnouncersText [ 1 ]) ? "^n^n" : "" , szTemp , g_szConstTextCount [ szInfo [ g_iConstInfoCount ]])
}
//ftD7Log("a", iID, "%s %s", szTemp, g_szConstTextCount[szInfo[g_iConstInfoCount]])
if ( szInfo [ g_iConstInfoMulti ] >= 0 )
{
#if defined _dhudmessage_included
set_dhudmessage
(
g_iConstTextMultiColor [ szInfo [ g_iConstInfoMulti ]][ 0 ], g_iConstTextMultiColor [ szInfo [ g_iConstInfoMulti ]][ 1 ], g_iConstTextMultiColor [ szInfo [ g_iConstInfoMulti ]][ 2 ],
- 1.0 , 0.15 , 0 , 0.0 , g_fConstTaskAnnounceTextDelay + (( g_fConstTaskAnnounceTextDelay >= 0.2 ) ? 0.1 : 0.05 ), 0.0 , 0.0 , false
)
#else
set_dhudmessage
(
g_iConstTextMultiColor [ szInfo [ g_iConstInfoMulti ]][ 0 ], g_iConstTextMultiColor [ szInfo [ g_iConstInfoMulti ]][ 1 ], g_iConstTextMultiColor [ szInfo [ g_iConstInfoMulti ]][ 2 ],
- 1.0 , 0.15 , 0 , 0.0 , g_fConstTaskAnnounceTextDelay + (( g_fConstTaskAnnounceTextDelay >= 0.2 ) ? 0.1 : 0.05 ), 0.0 , 0.0
)
#endif
for ( iTemp = 0 ; iTemp < iCountPlayers ; iTemp ++)
{
if ( g_bSetDisableText [ iIDsPlayers [ iTemp ]])
continue;
show_dhudmessage ( iIDsPlayers [ iTemp ], "%s%s" , ( iID == g_iIDAnnouncersText [ 1 ]) ? "^n^n^n" : "^n" , g_szConstTextMultiAdd [ szInfo [ g_iConstInfoMulti ]])
}
}
}
else if ( szInfo [ g_iConstInfoMulti ] >= 0 )
{
for ( iTemp = 0 ; iTemp < strlen ( g_szConstTextMulti [ szInfo [ g_iConstInfoMulti ]]); iTemp ++)
copy ( szTemp [ iTemp ], charsmax ( szTemp ) - iTemp , " " );
//replace_all(szTemp, charsmax(szTemp), "", "")
//replace_all(szTemp, charsmax(szTemp), "", "")
#if defined _dhudmessage_included
set_dhudmessage
(
szInfo [ g_iConstInfoColorR ], szInfo [ g_iConstInfoColorG ], szInfo [ g_iConstInfoColorB ], - 1.0 , 0.15 , 0 , 0.0 ,
g_fConstTaskAnnounceTextDelay + (( g_fConstTaskAnnounceTextDelay >= 0.2 ) ? 0.1 : 0.05 ), 0.0 , 0.0 , false
)
#else
set_dhudmessage
(
szInfo [ g_iConstInfoColorR ], szInfo [ g_iConstInfoColorG ], szInfo [ g_iConstInfoColorB ], - 1.0 , 0.15 , 0 , 0.0 ,
g_fConstTaskAnnounceTextDelay + (( g_fConstTaskAnnounceTextDelay >= 0.2 ) ? 0.1 : 0.05 ), 0.0 , 0.0
)
#endif
for ( iTemp = 0 ; iTemp < iCountPlayers ; iTemp ++)
{
if ( g_bSetDisableText [ iIDsPlayers [ iTemp ]])
continue;
show_dhudmessage ( iIDsPlayers [ iTemp ], "%s%s%s" , ( iID == g_iIDAnnouncersText [ 1 ]) ? "^n^n" : "" , g_szName [ iID ], szTemp )
}
//ftD7Log("a", iID, "%s%s", g_szName[iID], szTemp)
szTemp = "" ;
for ( iTemp = 0 ; iTemp < strlen ( g_szName [ iID ]); iTemp ++)
copy ( szTemp [ iTemp ], charsmax ( szTemp ) - iTemp , " " );
//replace_all(szTemp, charsmax(szTemp), "", "")
//replace_all(szTemp, charsmax(szTemp), "", "")
#if defined _dhudmessage_included
set_dhudmessage
(
g_iConstTextMultiColor [ szInfo [ g_iConstInfoMulti ]][ 0 ], g_iConstTextMultiColor [ szInfo [ g_iConstInfoMulti ]][ 1 ], g_iConstTextMultiColor [ szInfo [ g_iConstInfoMulti ]][ 2 ],
- 1.0 , 0.15 , 0 , 0.0 , g_fConstTaskAnnounceTextDelay + (( g_fConstTaskAnnounceTextDelay >= 0.2 ) ? 0.1 : 0.05 ), 0.0 , 0.0 , false
)
#else
set_dhudmessage
(
g_iConstTextMultiColor [ szInfo [ g_iConstInfoMulti ]][ 0 ], g_iConstTextMultiColor [ szInfo [ g_iConstInfoMulti ]][ 1 ], g_iConstTextMultiColor [ szInfo [ g_iConstInfoMulti ]][ 2 ],
- 1.0 , 0.15 , 0 , 0.0 , g_fConstTaskAnnounceTextDelay + (( g_fConstTaskAnnounceTextDelay >= 0.2 ) ? 0.1 : 0.05 ), 0.0 , 0.0
)
#endif
for ( iTemp = 0 ; iTemp < iCountPlayers ; iTemp ++)
{
if ( g_bSetDisableText [ iIDsPlayers [ iTemp ]])
continue;
show_dhudmessage ( iIDsPlayers [ iTemp ], "%s%s %s" , ( iID == g_iIDAnnouncersText [ 1 ]) ? "^n^n" : "" , szTemp , g_szConstTextMulti [ szInfo [ g_iConstInfoMulti ]])
}
//ftD7Log("a", iID, "%s %s", szTemp, g_szConstTextMulti[szInfo[g_iConstInfoMulti]])
}
else if ( szInfo [ g_iConstInfoVictim ])
{
for ( iTemp = 0 ; iTemp < strlen ( g_szConstTextFirstBlood ) + 1 + strlen ( g_szName [ szInfo [ g_iConstInfoVictim ]]); iTemp ++)
copy ( szTemp [ iTemp ], charsmax ( szTemp ) - iTemp , " " );
//replace_all(szTemp, charsmax(szTemp), "", "")
//replace_all(szTemp, charsmax(szTemp), "", "")
#if defined _dhudmessage_included
set_dhudmessage
(
szInfo [ g_iConstInfoColorR ], szInfo [ g_iConstInfoColorG ], szInfo [ g_iConstInfoColorB ], - 1.0 , 0.15 , 0 , 0.0 ,
g_fConstTaskAnnounceTextDelay + (( g_fConstTaskAnnounceTextDelay >= 0.2 ) ? 0.1 : 0.05 ), 0.0 , 0.0 , false
)
#else
set_dhudmessage
(
szInfo [ g_iConstInfoColorR ], szInfo [ g_iConstInfoColorG ], szInfo [ g_iConstInfoColorB ], - 1.0 , 0.15 , 0 , 0.0 ,
g_fConstTaskAnnounceTextDelay + (( g_fConstTaskAnnounceTextDelay >= 0.2 ) ? 0.1 : 0.05 ), 0.0 , 0.0
)
#endif
for ( iTemp = 0 ; iTemp < iCountPlayers ; iTemp ++)
{
if ( g_bSetDisableText [ iIDsPlayers [ iTemp ]])
continue;
show_dhudmessage ( iIDsPlayers [ iTemp ], "%s%s%s" , ( iID == g_iIDAnnouncersText [ 1 ]) ? "^n^n" : "" , g_szName [ iID ], szTemp )
}
//ftD7Log("a", iID, "%s%s", g_szName[iID], szTemp)
szTemp = "" ;
for ( iTemp = 0 ; iTemp < strlen ( g_szName [ iID ]); iTemp ++)
copy ( szTemp [ iTemp ], charsmax ( szTemp ) - iTemp , " " );
//replace_all(szTemp, charsmax(szTemp), "", "")
//replace_all(szTemp, charsmax(szTemp), "", "")
#if defined _dhudmessage_included
set_dhudmessage
(
g_iConstTextFirstBloodColor [ 0 ], g_iConstTextFirstBloodColor [ 1 ], g_iConstTextFirstBloodColor [ 2 ],
- 1.0 , 0.15 , 0 , 0.0 , g_fConstTaskAnnounceTextDelay + (( g_fConstTaskAnnounceTextDelay >= 0.2 ) ? 0.1 : 0.05 ), 0.0 , 0.0 , false
)
#else
set_dhudmessage
(
g_iConstTextFirstBloodColor [ 0 ], g_iConstTextFirstBloodColor [ 1 ], g_iConstTextFirstBloodColor [ 2 ],
- 1.0 , 0.15 , 0 , 0.0 , g_fConstTaskAnnounceTextDelay + (( g_fConstTaskAnnounceTextDelay >= 0.2 ) ? 0.1 : 0.05 ), 0.0 , 0.0
)
#endif
for ( iTemp = 0 ; iTemp < iCountPlayers ; iTemp ++)
{
if ( g_bSetDisableText [ iIDsPlayers [ iTemp ]])
continue;
show_dhudmessage ( iIDsPlayers [ iTemp ], "%s%s %s %s" , ( iID == g_iIDAnnouncersText [ 1 ]) ? "^n^n" : "" , szTemp , g_szConstTextFirstBlood , g_szName [ szInfo [ g_iConstInfoVictim ]])
}
//ftD7Log("a", iID, "%s %s %s", szTemp, g_szConstTextFirstBlood, g_szName[szInfo[g_iConstInfoVictim]])
}
}
public fwTaskAnnounceSound (const szSound [], iIDTask )
{
new iIDsPlayers [ 32 ], iCountPlayers ;
get_players ( iIDsPlayers , iCountPlayers , "c" )
for (new iID ; iID < iCountPlayers ; iID ++)
{
if ( g_bSetDisableSound [ iIDsPlayers [ iID ]])
continue;
ftPlaySound ( szSound , iIDsPlayers [ iID ])
}
}
public fwTaskAnnounceTextRemove ( iID )
{
iID -= g_iIDTaskAnnounceTextRemove ;
remove_task ( iID + g_iIDTaskAnnounceText )
if ( iID == g_iIDAnnouncersText [ 0 ])
{
g_iCountAnnouncersText --;
g_iIDAnnouncersText [ 0 ] = g_iIDAnnouncersText [ 1 ];
g_iIDAnnouncersText [ 1 ] = 0 ;
}
else if ( iID == g_iIDAnnouncersText [ 1 ])
{
g_iCountAnnouncersText --;
g_iIDAnnouncersText [ 1 ] = 0 ;
}
}
// After fwHamKilledPlayerPre
// Before fwHamKilledPlayer
public fwMsgDeathPre () //const iIDMsg, const iMsgDest, const iIDEnt
{
fwKilledPlayer ( get_msg_arg_int ( 2 ), get_msg_arg_int ( 1 ))
}
public zp_user_infected_post ( iID , iIDAttacker )
{
if ( g_iZPRunning != 4 )
return;
fwKilledPlayer ( iID , iIDAttacker )
}
public zp_fw_core_infect_post ( iID , iIDAttacker )
{
if ( g_iZPRunning != 5 )
return;
fwKilledPlayer ( iID , iIDAttacker )
}
public zp_fw_core_cure_post ( iID , iIDAttacker )
{
if ( g_iZPRunning != 5 )
return;
fwKilledPlayer ( iID , iIDAttacker )
}
public fwKilledPlayer (const iIDVictim , const iIDAttacker )
{
if (! iIDAttacker || iIDVictim == iIDAttacker )
return;
g_iKills [ iIDVictim ] = 0 ;
if (! is_user_connected ( iIDAttacker ))
return;
new CsTeams : iTeamAttacker = cs_get_user_team ( iIDAttacker );
if ( iTeamAttacker == CS_TEAM_SPECTATOR || iTeamAttacker == CS_TEAM_UNASSIGNED )
return;
new CsTeams : iTeamVictim ;
if (! g_iZPRunning )
{
iTeamVictim = cs_get_user_team ( iIDVictim );
}
else if ( g_iZPRunning == 4 )
{
iTeamAttacker = zp_get_user_zombie ( iIDAttacker ) ? CS_TEAM_T : CS_TEAM_CT ;
iTeamVictim = ( iTeamAttacker == CS_TEAM_CT ) ? CS_TEAM_T : CS_TEAM_CT ;
}
else if ( g_iZPRunning == 5 )
{
iTeamAttacker = zp_core_is_zombie ( iIDAttacker ) ? CS_TEAM_T : CS_TEAM_CT ;
iTeamVictim = ( iTeamAttacker == CS_TEAM_CT ) ? CS_TEAM_T : CS_TEAM_CT ;
}
//ftD7Log(_, _, "[fwKilledPlayer] iIDVictim(team): ^"%s^"(%d). iIDAttacker(team): ^"%s^"(%d).", g_szName[iIDVictim], iTeamVictim, g_szName[iIDAttacker], iTeamAttacker)
if ( iTeamAttacker == CS_TEAM_T )
{
if ( g_iCountKillsTeam >= 0 )
g_iCountKillsTeam = - 1 ;
else
g_iCountKillsTeam --;
}
else if ( iTeamAttacker == CS_TEAM_CT )
{
if ( g_iCountKillsTeam <= 0 )
g_iCountKillsTeam = 1 ;
else
g_iCountKillsTeam ++;
}
if ( iTeamAttacker == iTeamVictim || get_pcvar_num ( g_iIDPCVarIgnoreBots ) && is_user_bot ( iIDAttacker ))
return;
if ( g_iKills [ iIDAttacker ] < sizeof g_szSoundsCount + 2 )
g_iKills [ iIDAttacker ]++;
if ( g_iMulti [ iIDAttacker ] < sizeof g_szSoundsMulti + 1 )
g_iMulti [ iIDAttacker ]++;
remove_task ( iIDAttacker + g_iIDTaskResetMulti )
set_task ( g_fConstTaskMultiDelay , "fwTaskResetMulti" , iIDAttacker + g_iIDTaskResetMulti )
new Float : fTemp ;
if ( g_iKills [ iIDAttacker ] >= 3 || g_iMulti [ iIDAttacker ] >= 2 || ! g_iIDFirstBlood )
{
remove_task ( g_iIDTaskAnnounceSound )
if (! g_iIDFirstBlood )
{
set_task ( 0.1 , "fwTaskAnnounceSound" , g_iIDTaskAnnounceSound , g_szSoundFirstBlood , charsmax ( g_szSoundFirstBlood ))
fTemp += g_fSoundFirstBloodDuration ;
}
if ( g_iKills [ iIDAttacker ] >= 3 )
{
if ( fTemp <= 0 )
set_task ( 0.1 , "fwTaskAnnounceSound" , g_iIDTaskAnnounceSound , g_szSoundsCount [ g_iKills [ iIDAttacker ] - 3 ], charsmax ( g_szSoundsCount []))
else
set_task ( fTemp , "fwTaskAnnounceSound" , g_iIDTaskAnnounceSound , g_szSoundsCount [ g_iKills [ iIDAttacker ] - 3 ], charsmax ( g_szSoundsCount []))
fTemp += g_fSoundsCountDuration [ g_iKills [ iIDAttacker ] - 3 ];
}
if ( g_iMulti [ iIDAttacker ] >= 2 )
{
if ( fTemp <= 0 )
set_task ( 0.1 , "fwTaskAnnounceSound" , g_iIDTaskAnnounceSound , g_szSoundsMulti [ g_iMulti [ iIDAttacker ] - 2 ], charsmax ( g_szSoundsMulti []))
else
set_task ( fTemp , "fwTaskAnnounceSound" , g_iIDTaskAnnounceSound , g_szSoundsMulti [ g_iMulti [ iIDAttacker ] - 2 ], charsmax ( g_szSoundsMulti []))
fTemp += g_fSoundsMultiDuration [ g_iMulti [ iIDAttacker ] - 2 ];
}
remove_task ( iIDAttacker + g_iIDTaskAnnounceTextRemove )
fwTaskAnnounceTextRemove ( iIDAttacker + g_iIDTaskAnnounceTextRemove )
set_task ( fTemp , "fwTaskAnnounceTextRemove" , iIDAttacker + g_iIDTaskAnnounceTextRemove )
if (! g_iCountAnnouncersText )
{
g_iCountAnnouncersText ++;
g_iIDAnnouncersText [ g_iCountAnnouncersText - 1 ] = iIDAttacker ;
}
else if ( g_iCountAnnouncersText == 1 )
{
if ( g_iIDAnnouncersText [ g_iCountAnnouncersText - 1 ] != iIDAttacker )
{
g_iCountAnnouncersText ++;
g_iIDAnnouncersText [ g_iCountAnnouncersText - 1 ] = iIDAttacker ;
}
}
else if ( g_iCountAnnouncersText == 2 )
{
if ( g_iIDAnnouncersText [ g_iCountAnnouncersText - 1 ] != iIDAttacker )
{
remove_task ( g_iIDAnnouncersText [ g_iCountAnnouncersText - 2 ] + g_iIDTaskAnnounceText )
g_iIDAnnouncersText [ g_iCountAnnouncersText - 2 ] = g_iIDAnnouncersText [ g_iCountAnnouncersText - 1 ];
g_iIDAnnouncersText [ g_iCountAnnouncersText - 1 ] = iIDAttacker ;
}
}
new szTemp [ g_iConstTaskAnnounceTextInfo ];
szTemp [ g_iConstInfoCount ] = g_iKills [ iIDAttacker ] - 3 ;
szTemp [ g_iConstInfoMulti ] = g_iMulti [ iIDAttacker ] - 2 ;
szTemp [ g_iConstInfoVictim ] = g_iIDFirstBlood ? 0 : iIDVictim ;
szTemp [ g_iConstInfoColorR ] = ( iTeamAttacker == CS_TEAM_T ) ? 255 : 0 ;
szTemp [ g_iConstInfoColorG ] = 0 ;
szTemp [ g_iConstInfoColorB ] = ( iTeamAttacker == CS_TEAM_T ) ? 0 : 255 ;
remove_task ( iIDAttacker + g_iIDTaskAnnounceText )
if ( g_fConstTaskAnnounceTextDelay >= 0.2 )
set_task ( 0.1 , "fwTaskAnnounceText" , iIDAttacker + g_iIDTaskAnnounceText , szTemp , g_iConstTaskAnnounceTextInfo )
set_task ( g_fConstTaskAnnounceTextDelay , "fwTaskAnnounceText" , iIDAttacker + g_iIDTaskAnnounceText , szTemp , g_iConstTaskAnnounceTextInfo , "b" )
//ftD7Log(_, iIDAttacker, "[fwKilledPlayer] Announcers: %d. 1: ^"%s^". 2: ^"%s^".", g_iCountAnnouncersText, g_szName[g_iIDAnnouncersText[0]], (g_iCountAnnouncersText > 1) ? g_szName[g_iIDAnnouncersText[1]] : "")
}
if ( g_iCountKillsTeam <= - 5 || g_iCountKillsTeam >= 5 )
{
if ( fTemp <= 0 )
{
remove_task ( g_iIDTaskAnnounceSound )
set_task ( 0.1 , "fwTaskAnnounceSound" , g_iIDTaskAnnounceSound , g_szSoundOwnage , charsmax ( g_szSoundOwnage ))
}
else
set_task ( fTemp , "fwTaskAnnounceSound" , g_iIDTaskAnnounceSound , g_szSoundOwnage , charsmax ( g_szSoundOwnage ))
}
if (! g_iIDFirstBlood )
{
g_iIDFirstBlood = iIDAttacker ;
}
}
public plugin_precache ()
{
new iTemp , iID ;
if ( g_szSoundFirstBlood [ 0 ])
{
if (! bFtContainsFolderStart ( g_szSoundFirstBlood , "sound" ))
format ( g_szSoundFirstBlood , charsmax ( g_szSoundFirstBlood ), "sound/%s" , g_szSoundFirstBlood )
precache_generic ( g_szSoundFirstBlood )
if ( g_fSoundFirstBloodDuration <= 0 )
g_fSoundFirstBloodDuration = sfile_get_duration ( g_szSoundFirstBlood );
iTemp = iFtExtPosReturn ( g_szSoundFirstBlood );
if ( iTemp >= 0 && equali ( g_szSoundFirstBlood [ iTemp ], "wav" ))
{
replace ( g_szSoundFirstBlood , charsmax ( g_szSoundFirstBlood ), g_szSoundFirstBlood [ iTemp - 1 ], "" )
}
}
if ( g_szSoundOwnage [ 0 ])
{
if (! bFtContainsFolderStart ( g_szSoundOwnage , "sound" ))
format ( g_szSoundOwnage , charsmax ( g_szSoundOwnage ), "sound/%s" , g_szSoundOwnage )
precache_generic ( g_szSoundOwnage )
//if (g_fSoundOwnageDuration <= 0)
// g_fSoundOwnageDuration = sfile_get_duration(g_szSoundOwnage);
iTemp = iFtExtPosReturn ( g_szSoundOwnage );
if ( iTemp >= 0 && equali ( g_szSoundOwnage [ iTemp ], "wav" ))
{
replace ( g_szSoundOwnage , charsmax ( g_szSoundOwnage ), g_szSoundOwnage [ iTemp - 1 ], "" )
}
}
for ( iID = 0 ; iID < sizeof g_szSoundsCount ; iID ++)
{
if (! g_szSoundsCount [ iID ][ 0 ])
continue;
if (! bFtContainsFolderStart ( g_szSoundsCount [ iID ], "sound" ))
format ( g_szSoundsCount [ iID ], charsmax ( g_szSoundsCount []), "sound/%s" , g_szSoundsCount [ iID ])
precache_generic ( g_szSoundsCount [ iID ])
if ( g_fSoundsCountDuration [ iID ] <= 0 )
g_fSoundsCountDuration [ iID ] = sfile_get_duration ( g_szSoundsCount [ iID ]);
iTemp = iFtExtPosReturn ( g_szSoundsCount [ iID ]);
if ( iTemp >= 0 && equali ( g_szSoundsCount [ iID ][ iTemp ], "wav" ))
{
replace ( g_szSoundsCount [ iID ], charsmax ( g_szSoundsCount []), g_szSoundsCount [ iID ][ iTemp - 1 ], "" )
}
}
for ( iID = 0 ; iID < sizeof g_szSoundsMulti ; iID ++)
{
if (! g_szSoundsMulti [ iID ][ 0 ])
continue;
if (! bFtContainsFolderStart ( g_szSoundsMulti [ iID ], "sound" ))
format ( g_szSoundsMulti [ iID ], charsmax ( g_szSoundsMulti []), "sound/%s" , g_szSoundsMulti [ iID ])
precache_generic ( g_szSoundsMulti [ iID ])
if ( g_fSoundsMultiDuration [ iID ] <= 0 )
g_fSoundsMultiDuration [ iID ] = sfile_get_duration ( g_szSoundsMulti [ iID ]);
iTemp = iFtExtPosReturn ( g_szSoundsMulti [ iID ]);
if ( iTemp >= 0 && equali ( g_szSoundsMulti [ iID ][ iTemp ], "wav" ))
{
replace ( g_szSoundsMulti [ iID ], charsmax ( g_szSoundsMulti []), g_szSoundsMulti [ iID ][ iTemp - 1 ], "" )
}
}
}
bitsums.inc
__________________
Last edited by georgik57; 04-04-2020 at 12:43 .
Reason: updated