Звук при убийстве

Broudy Rose

Участник
Сообщения
157
Реакции
22
Нужно прикрутить Kill Sound к KillMessages.
При том, что Kill Sound не работает, как я не пытался.
Просто не проигрывается звук.
Как проиграть заданный звук(EmitSoundToClient) игроку, который убил другого игрока?

Помогите, пожалуйста:)

PHP:
#include <sourcemod>
#include <sdktools>

#define PLUGIN_VERSION "2.3"

new Handle:_atCleanTimer[MAXPLAYERS+1] = INVALID_HANDLE
new Handle:_hTimerLength;
new Float:_dTimerLength;

public Plugin:myinfo =
{
    name = "Kill Message Overlays Framework",
    author = "Siang Chun & Black Haze & Xeon",
    description = "Framework for Kill Message Overlays",
    version = PLUGIN_VERSION,
    url = "bslw.co.uk & beernweed.com & csgo-astra.ru"
}

public OnPluginStart()
{
    _hTimerLength = CreateConVar("sm_killmessage_overlays_length", "3.0", "Length of time an overlay is showed", FCVAR_PLUGIN|FCVAR_REPLICATED, true, 1.0);
    _dTimerLength = GetConVarFloat(_hTimerLength);

    RegServerCmd("sm_killmessage_show", ShowKillMessage);
    RegServerCmd("sm_killmessage_prepare", PrepareOverlay);
}

public Action:ShowKillMessage(args)
{
    if (args < 2)
    {
        return Plugin_Handled;
    }

    decl String: client_id[192];
    GetCmdArg(1, client_id, sizeof(client_id));
    new client = GetClientOfUserId(StringToInt(client_id));

    if(client>0)
    {
        decl String: sOverLay[192];
        GetCmdArg(2, sOverLay, sizeof(sOverLay));
   
        if(_atCleanTimer[client] !=INVALID_HANDLE)
        {
            KillTimer(_atCleanTimer[client]);
            _atCleanTimer[client] =INVALID_HANDLE;
        }
   
        _atCleanTimer[client] = CreateTimer(_dTimerLength,CleanTimer,client);
   
        ClearScreen(client);
        ClientCommand(client, "r_screenoverlay \"killkaboom/%s.vtf\"",sOverLay);
    }
    return Plugin_Handled;
}

public ClearScreen(client)
{
    if(client>0)
    {
        ClientCommand(client, "r_screenoverlay \"\"");
    }
}

public Action:CleanTimer(Handle:Timer, any:client)
{
    _atCleanTimer[client] = INVALID_HANDLE;
    ClearScreen(client);
}

public Action:PrepareOverlay(args)
{
    if (args < 1)
    {
        return Plugin_Handled;
    }

    decl String: sOverLay[192];
    GetCmdArg(1, sOverLay, sizeof(sOverLay));

    new String:overlays_file[64];
    new String:overlays_dltable[64];

    Format(overlays_file,sizeof(overlays_file),"killkaboom/%s.vtf",sOverLay);
    PrecacheDecal(overlays_file,true);
    Format(overlays_dltable,sizeof(overlays_dltable),"materials/killkaboom/%s.vtf",sOverLay);
    AddFileToDownloadsTable(overlays_dltable);
    Format(overlays_file,sizeof(overlays_file),"killkaboom/%s.vmt",sOverLay);
    PrecacheDecal(overlays_file,true);
    Format(overlays_dltable,sizeof(overlays_dltable),"materials/killkaboom/%s.vmt",sOverLay);
    AddFileToDownloadsTable(overlays_dltable);

    return Plugin_Handled;
}

PHP:
#include <sourcemod>
#include <sourcemod>
#include <sdktools>

#define PLUGIN_VERSION "2.3"

new Handle:_hGrenadeOverlay;
new Handle:_hHeadShotOverlay;
new Handle:_hKnifeOverlay;
new Handle:_hCTWinsOverlay;
new Handle:_hTWinsOverlay;
new Handle:_hKillOverlayNaming;
new Handle:_hMaxKillStreak;
new String:_sGrenadeOverlay[32];
new String:_sHeadShotOverlay[32];
new String:_sKnifeOverlay[32];
new String:_sCTWinsOverlay[32];
new String:_sTWinsOverlay[32];
new String:_sKillOverlayNaming[32];
new _iMaxKillStreak;
new _aiKillStreak[MAXPLAYERS+1];
new _abClientDead[MAXPLAYERS+1];

public Plugin:myinfo =
{
    name = "Kill Message Overlays Basic Triggers",
    author = "Siang Chun & Black Haze & Xeon",
    description = "Basic Triggers for Kill Message Overlays",
    version = PLUGIN_VERSION,
    url = "bslw.co.uk & beernweed.com"
}

public OnPluginStart()
{
    HookEvent("player_death", Event_PlayerDeath);
    HookEvent("player_spawn", Event_PlayerSpawn);
    HookEvent("round_end", Event_RoundEnd);

    _hGrenadeOverlay = CreateConVar("sm_killmessage_bs_grenade", "ray_grenade", "Материал (убийство с гранаты)");
    _hHeadShotOverlay = CreateConVar("sm_killmessage_bs_headshot", "ray_headshot", "Материал (убийство в голову)");
    _hKnifeOverlay = CreateConVar("sm_killmessage_bs_knife", "ray_knife", "Материал (убийство с ножа)");
    _hCTWinsOverlay = CreateConVar("sm_killmessage_bs_ctwins", "ray_ct_wins", "Материал (Спецназ одержал победу)");
    _hTWinsOverlay = CreateConVar("sm_killmessage_bs_twins", "ray_t_wins", "Материал (Террористы одержали победу)");
    _hKillOverlayNaming = CreateConVar("sm_killmessage_bs_killnaming", "ray_", "Материал (Названия простого убийство под номером 1-10)");
    _hMaxKillStreak = CreateConVar("sm_killmessage_bs_maxkillstreak", "10", "Сколько тут? (Сколько материалов будет подключаться для обычного убийства)");

    AutoExecConfig(true, "killmessages");
}

public OnMapStart()
{
    GetConVarString(_hGrenadeOverlay, _sGrenadeOverlay, sizeof(_sGrenadeOverlay));
    GetConVarString(_hHeadShotOverlay, _sHeadShotOverlay, sizeof(_sHeadShotOverlay));
    GetConVarString(_hKnifeOverlay, _sKnifeOverlay, sizeof(_sKnifeOverlay));
    GetConVarString(_hCTWinsOverlay, _sCTWinsOverlay, sizeof(_sCTWinsOverlay));
    GetConVarString(_hTWinsOverlay, _sTWinsOverlay, sizeof(_sTWinsOverlay));
    GetConVarString(_hKillOverlayNaming, _sKillOverlayNaming, sizeof(_sKillOverlayNaming));
    _iMaxKillStreak = GetConVarInt(_hMaxKillStreak);

    ServerCommand("sm_killmessage_prepare %s",_sGrenadeOverlay);
    ServerCommand("sm_killmessage_prepare %s",_sHeadShotOverlay);
    ServerCommand("sm_killmessage_prepare %s",_sKnifeOverlay);
    ServerCommand("sm_killmessage_prepare %s",_sCTWinsOverlay);
    ServerCommand("sm_killmessage_prepare %s",_sTWinsOverlay);

    new iCounter;
    for (iCounter = 1; iCounter <= _iMaxKillStreak; iCounter++)
    {
        new String:sCounterTemp[64];
        IntToString(iCounter, sCounterTemp,sizeof(sCounterTemp));
        ServerCommand("sm_killmessage_prepare %s%s",_sKillOverlayNaming,sCounterTemp);
    }
}

public OnClientPutInServer(client)
{
    if(client>0)
    {
        _aiKillStreak[client]=0;
        _abClientDead[client]=false;
    }
}

public Event_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
    new client;
    client = GetClientOfUserId(GetEventInt(event, "userid"));
    if(client>0)
    {
        if(_abClientDead[client])
        {
            _aiKillStreak[client]=0;
            _abClientDead[client]=false;
        }
    }
}

public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
    new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
    new String:sAttackerID[32];
    GetEventString(event, "attacker",sAttackerID, sizeof(sAttackerID));

    new victim = GetClientOfUserId(GetEventInt(event, "userid"))

    _abClientDead[victim]=true;

    if(attacker>0)
    {
        if(!IsFakeClient(attacker))
        {
            if(victim != attacker)
            {
                _aiKillStreak[attacker]++;
                if(_aiKillStreak[attacker]>_iMaxKillStreak)
                {
                    _aiKillStreak[attacker]=1;
                }
                new bool:headshot = GetEventBool(event, "headshot");
                new String:weapon[32];
                GetEventString(event, "weapon",weapon, sizeof(weapon));

                if(StrEqual(weapon, "hegrenade"))
                {
                    ServerCommand("sm_killmessage_show %s %s",sAttackerID,_sGrenadeOverlay);
                }
                else if(StrEqual(weapon,"knife"))
                {
                    ServerCommand("sm_killmessage_show %s %s",sAttackerID,_sKnifeOverlay);
                }
                else if(headshot)
                {
                    ServerCommand("sm_killmessage_show %s %s",sAttackerID,_sHeadShotOverlay);
                }
                else
                {
                    new String:sKillStreakTemp[64];
                    IntToString(_aiKillStreak[attacker], sKillStreakTemp,sizeof(sKillStreakTemp));
                    ServerCommand("sm_killmessage_show %s %s%s",sAttackerID,_sKillOverlayNaming,sKillStreakTemp);
                }
            }
        }
    }
}

public Event_RoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
{
    new iWinningTeam = GetEventInt(event, "winner");

    if (iWinningTeam == 2)
    {
        for (new iClientCounter = 1; iClientCounter <= MaxClients; iClientCounter++)
        {
            if(IsClientInGame(iClientCounter))
            {
                ServerCommand("sm_killmessage_show %i %s",GetClientUserId(iClientCounter),_sTWinsOverlay);
            }
        }
    }
    else if (iWinningTeam == 3)
    {
        for (new iClientCounter = 1; iClientCounter <= MaxClients; iClientCounter++)
        {
            if(IsClientInGame(iClientCounter))
            {
                ServerCommand("sm_killmessage_show %i %s",GetClientUserId(iClientCounter),_sCTWinsOverlay);
            }
        }
    }
}

Как просто сделать звук игроку, который убил противника?)
 
Последнее редактирование:
Сверху Снизу