Переделка плагина Knife Owned

Тема в разделе "Программирование / Скриптинг", создана пользователем cangncan, 12 мар 2014.

  1. cangncan

    cangncan

    Сообщения:
    69
    Симпатии:
    2
    Knife Ownen(hlmod.ru)
    Оригинал

    - изначально плагин проигрывает один и тот же звук.
    - Нужно чтобы проигрывалось несколько звуков (у меня их 6)

    На сервере стоит QuakeSounds 1.8
    В настройках QuakeSounds звук ножа отключил. ("config" "0")

    Ребят помогите допилить плагин.
    "ГореКодер" (Я), сделал вот так:

    PHP:
    /// Based upon Kinfe Mug by FlyingMongoose & sslice
    // When a player is stabbed they get publicly humilated in chat and HAHA or other sound in game

    #pragma semicolon 1
    #include <sourcemod>
    #include <sdktools>
    #include <sdktools_sound>

    #define KO_VERSION "1.2"
    #define MAX_FILE_LEN 80
    new Handle:g_CvarSoundName INVALID_HANDLE;
    new 
    Handle:g_CvarSoundName2 INVALID_HANDLE;
    new 
    Handle:g_CvarSoundName3 INVALID_HANDLE;
    new 
    Handle:g_CvarSoundName4 INVALID_HANDLE;
    new 
    Handle:g_CvarSoundName5 INVALID_HANDLE;
    new 
    Handle:g_CvarSoundName6 INVALID_HANDLE;
    new 
    String:g_soundName[MAX_FILE_LEN];
    new 
    String:g_soundName2[MAX_FILE_LEN];
    new 
    String:g_soundName3[MAX_FILE_LEN];
    new 
    String:g_soundName4[MAX_FILE_LEN];
    new 
    String:g_soundName5[MAX_FILE_LEN];
    new 
    String:g_soundName6[MAX_FILE_LEN];

    // Define author information
    public Plugin:myinfo 
    {
        
    name "Knife Owned",
        
    author "MoggieX",
        
    description "Ownd by Knife",
        
    version KO_VERSION,
        
    url "http://www.UKManDown.co.uk"
    };

    new 
    Handle:cvarEnable;
    new 
    bool:g_isHooked;

    public 
    OnPluginStart()
    {
        
    CreateConVar("sm_knife_Owned_version"KO_VERSION_FCVAR_PLUGIN|FCVAR_NOTIFY|FCVAR_REPLICATED|FCVAR_SPONLY);
        
    cvarEnable CreateConVar("sm_knife_enable","1","Plays sound and gives chat ntoification when a player is knifed",FCVAR_PLUGIN,true,0.0,true,1.0);
        
    g_CvarSoundName CreateConVar("sm_knife_sound""misc/humiliation.mp3""The random sound to play when a player is knifed");
        
    g_CvarSoundName2 CreateConVar("sm_knife_sound2""misc/humiliation2.mp3""The random sound to play when a player is knifed");
        
    g_CvarSoundName3 CreateConVar("sm_knife_sound3""misc/humiliation3.mp3""The random sound to play when a player is knifed");
        
    g_CvarSoundName4 CreateConVar("sm_knife_sound4""misc/humiliation4.mp3""The random sound to play when a player is knifed");
        
    g_CvarSoundName5 CreateConVar("sm_knife_sound5""misc/humiliation5.mp3""The random sound to play when a player is knifed");
        
    g_CvarSoundName6 CreateConVar("sm_knife_sound6""misc/humiliation6.mp3""The random sound to play when a player is knifed");
        
    CreateTimer(3.0OnPluginStart_Delayed);
    }

    // For sounds and its caching
    public OnConfigsExecuted()
    {
        
    GetConVarString(g_CvarSoundNameg_soundNameMAX_FILE_LEN);
        
    decl String:buffer[MAX_FILE_LEN];
        
    PrecacheSound(g_soundNametrue);
        
    Format(buffersizeof(buffer), "sound/%s"g_soundName);
        
    AddFileToDownloadsTable(buffer);
        
    GetConVarString(g_CvarSoundName2g_soundName2MAX_FILE_LEN);
        
    decl String:buffer2[MAX_FILE_LEN];
        
    PrecacheSound(g_soundName2true);
        
    Format(buffersizeof(buffer2), "sound/%s"g_soundName2);
        
    AddFileToDownloadsTable(buffer2);
        
    GetConVarString(g_CvarSoundName3g_soundName3MAX_FILE_LEN);
        
    decl String:buffer3[MAX_FILE_LEN];
        
    PrecacheSound(g_soundName3true);
        
    Format(buffersizeof(buffer3), "sound/%s"g_soundName3);
        
    AddFileToDownloadsTable(buffer3);
        
    GetConVarString(g_CvarSoundName4g_soundName4MAX_FILE_LEN);
        
    decl String:buffer4[MAX_FILE_LEN];
        
    PrecacheSound(g_soundName4true);
        
    Format(buffersizeof(buffer4), "sound/%s"g_soundName4);
        
    AddFileToDownloadsTable(buffer4);
        
    GetConVarString(g_CvarSoundName5g_soundName5MAX_FILE_LEN);
        
    decl String:buffer5[MAX_FILE_LEN];
        
    PrecacheSound(g_soundName5true);
        
    Format(buffersizeof(buffer5), "sound/%s"g_soundName5);
        
    AddFileToDownloadsTable(buffer5);
        
    GetConVarString(g_CvarSoundName6g_soundName6MAX_FILE_LEN);
        
    decl String:buffer6[MAX_FILE_LEN];
        
    PrecacheSound(g_soundName6true);
        
    Format(buffersizeof(buffer6), "sound/%s"g_soundName6);
        
    AddFileToDownloadsTable(buffer6);
    }


    public 
    Action:OnPluginStart_Delayed(Handle:timer){
        if(
    GetConVarInt(cvarEnable) > 0)
        {
            
    g_isHooked true;
            
    HookEvent("player_death",ev_PlayerDeath);
            
            
    HookConVarChange(cvarEnable,KnifeOwnedCvarChange);
            
            
    LogMessage("[Knife Notification] - Loaded");
        }
    }

    public 
    KnifeOwnedCvarChange(Handle:convar, const String:oldValue[], const String:newValue[]){
        if(
    GetConVarInt(cvarEnable) <= 0){
            if(
    g_isHooked){
            
    g_isHooked false;
            
    UnhookEvent("player_death",ev_PlayerDeath);
            }
        }else if(!
    g_isHooked){
            
    g_isHooked true;
            
    HookEvent("player_death",ev_PlayerDeath);
        }
    }

    public 
    ev_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
    {
        
    // Check if enabled, if not bail out

        
    if (GetConVarInt(cvarEnable) == 0)
        {
            return;
        }

        
    decl String:weaponName[100];
        
    decl String:victimName[100];
        
    decl String:killerName[100];

        
    GetEventString(event,"weapon",weaponName,100);

        
    // if the weapon used in death was a knife it continues

        
    if(StrEqual(weaponName"knife"))
        {
            new 
    userid GetEventInt(event"userid");
            new 
    userid2 GetEventInt(event"attacker");

            new 
    victim GetClientOfUserId(userid);
            new 
    killer GetClientOfUserId(userid2);

            if(
    victim != && killer != 0)
            {
                new 
    victimTeam GetClientTeam(victim);
                new 
    killerTeam GetClientTeam(killer);

                if(
    killerTeam!=victimTeam)
                {
                    
    GetClientName(victim,victimName,100);
                    
    GetClientName(killer,killerName,100);
                    new 
    knife_sound GetRandomInt(16);
                    if (
    knife_sound != 1)
                    {
                                    
    EmitSoundToAll(g_soundName);
                    }
                    if (
    knife_sound != 2)
                    {
                                    
    EmitSoundToAll(g_soundName2);
                    }
                    if (
    knife_sound != 3)
                    {
                                    
    EmitSoundToAll(g_soundName3);
                    }
                    if (
    knife_sound != 4)
                    {
                                    
    EmitSoundToAll(g_soundName4);
                    }
                    if (
    knife_sound != 5)
                    {
                                    
    EmitSoundToAll(g_soundName5);
                    }
                    if (
    knife_sound != 6)
                    {
                                    
    EmitSoundToAll(g_soundName6);
                    }
                }
            }
        }
    }

    Итог - проигрывает только один звук ("misc/humiliation.mp3") остальные не хочет, и пишет в лог ошибки:
    [SM] Native "GetConVarString" reported: Invalid convar handle 0 (error 4)
    [SM] Displaying call stack trace for plugin "KnifeOwned.smx":
    [SM] [0] Line 78, KnifeOwned.sp::OnConfigsExecuted()

    Добавлено через 3 часа 49 минут
    Сделал так:
    PHP:
    // Based upon Kinfe Mug by FlyingMongoose & sslice
    // When a player is stabbed they get publicly humilated in chat and HAHA or other sound in game

    #pragma semicolon 1
    #include <sourcemod>
    #include <sdktools>
    #include <sdktools_sound>

    #define KO_VERSION "1.2"
    #define MAX_FILE_LEN 80
    new Handle:g_CvarSoundName INVALID_HANDLE;
    new 
    Handle:g_CvarSoundName2 INVALID_HANDLE;
    new 
    Handle:g_CvarSoundName3 INVALID_HANDLE;
    new 
    Handle:g_CvarSoundName4 INVALID_HANDLE;
    new 
    Handle:g_CvarSoundName5 INVALID_HANDLE;
    new 
    Handle:g_CvarSoundName6 INVALID_HANDLE;
    new 
    String:g_soundName[MAX_FILE_LEN];
    new 
    String:g_soundName2[MAX_FILE_LEN];
    new 
    String:g_soundName3[MAX_FILE_LEN];
    new 
    String:g_soundName4[MAX_FILE_LEN];
    new 
    String:g_soundName5[MAX_FILE_LEN];
    new 
    String:g_soundName6[MAX_FILE_LEN];

    // Define author information
    public Plugin:myinfo 
    {
        
    name "Knife Owned",
        
    author "MoggieX",
        
    description "Ownd by Knife",
        
    version KO_VERSION,
        
    url "http://www.UKManDown.co.uk"
    };

    new 
    Handle:cvarEnable;
    new 
    bool:g_isHooked;

    public 
    OnPluginStart()
    {
        
    CreateConVar("sm_knife_Owned_version"KO_VERSION_FCVAR_PLUGIN|FCVAR_NOTIFY|FCVAR_REPLICATED|FCVAR_SPONLY);
        
    cvarEnable CreateConVar("sm_knife_enable","1","Plays sound and gives chat ntoification when a player is knifed",FCVAR_PLUGIN,true,0.0,true,1.0);
        
    g_CvarSoundName CreateConVar("sm_knife_sound""misc/humiliation.mp3""The random sound to play when a player is knifed");
        
    g_CvarSoundName2 CreateConVar("sm_knife_sound2""misc/humiliation2.mp3""The random sound to play when a player is knifed");
        
    g_CvarSoundName3 CreateConVar("sm_knife_sound3""misc/humiliation3.mp3""The random sound to play when a player is knifed");
        
    g_CvarSoundName4 CreateConVar("sm_knife_sound4""misc/humiliation4.mp3""The random sound to play when a player is knifed");
        
    g_CvarSoundName5 CreateConVar("sm_knife_sound5""misc/humiliation5.mp3""The random sound to play when a player is knifed");
        
    g_CvarSoundName6 CreateConVar("sm_knife_sound6""misc/humiliation6.mp3""The random sound to play when a player is knifed");
        
    CreateTimer(3.0OnPluginStart_Delayed);
    }

    // For sounds and its caching
    public OnConfigsExecuted()
    {
        
    GetConVarString(g_CvarSoundNameg_soundNameMAX_FILE_LEN);
        
    decl String:buffer[MAX_FILE_LEN];
        
    PrecacheSound(g_soundNametrue);
        
    Format(buffersizeof(buffer), "sound/%s"g_soundName);
        
    AddFileToDownloadsTable(buffer);
        
    GetConVarString(g_CvarSoundName2g_soundName2MAX_FILE_LEN);
        
    decl String:buffer2[MAX_FILE_LEN];
        
    PrecacheSound(g_soundName2true);
        
    Format(buffersizeof(buffer2), "sound/%s"g_soundName2);
        
    AddFileToDownloadsTable(buffer2);
        
    GetConVarString(g_CvarSoundName3g_soundName3MAX_FILE_LEN);
        
    decl String:buffer3[MAX_FILE_LEN];
        
    PrecacheSound(g_soundName3true);
        
    Format(buffersizeof(buffer3), "sound/%s"g_soundName3);
        
    AddFileToDownloadsTable(buffer3);
        
    GetConVarString(g_CvarSoundName4g_soundName4MAX_FILE_LEN);
        
    decl String:buffer4[MAX_FILE_LEN];
        
    PrecacheSound(g_soundName4true);
        
    Format(buffersizeof(buffer4), "sound/%s"g_soundName4);
        
    AddFileToDownloadsTable(buffer4);
        
    GetConVarString(g_CvarSoundName5g_soundName5MAX_FILE_LEN);
        
    decl String:buffer5[MAX_FILE_LEN];
        
    PrecacheSound(g_soundName5true);
        
    Format(buffersizeof(buffer5), "sound/%s"g_soundName5);
        
    AddFileToDownloadsTable(buffer5);
        
    GetConVarString(g_CvarSoundName6g_soundName6MAX_FILE_LEN);
        
    decl String:buffer6[MAX_FILE_LEN];
        
    PrecacheSound(g_soundName6true);
        
    Format(buffersizeof(buffer6), "sound/%s"g_soundName6);
        
    AddFileToDownloadsTable(buffer6);
    }


    public 
    Action:OnPluginStart_Delayed(Handle:timer)
    {
        if(
    GetConVarInt(cvarEnable) > 0)
        {
            
    g_isHooked true;
            
    HookEvent("player_death",ev_PlayerDeath);
            
            
    HookConVarChange(cvarEnable,KnifeOwnedCvarChange);
            
            
    LogMessage("[Knife Notification] - Loaded");
        }
    }

    public 
    KnifeOwnedCvarChange(Handle:convar, const String:oldValue[], const String:newValue[])
    {
        if(
    GetConVarInt(cvarEnable) <= 0)
        {
            if(
    g_isHooked)
            {
                
    g_isHooked false;
                
    UnhookEvent("player_death",ev_PlayerDeath);
            }
        }
        else if(!
    g_isHooked)
        {
            
    g_isHooked true;
            
    HookEvent("player_death",ev_PlayerDeath);
        }
    }

    public 
    ev_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
    {
        
    // Check if enabled, if not bail out

        
    if (GetConVarInt(cvarEnable) == 0)
        {
            return;
        }

        
    decl String:weaponName[100];
        
    decl String:victimName[100];
        
    decl String:killerName[100];

        
    GetEventString(event,"weapon",weaponName,100);
        
        
    // if the weapon used in death was a knife it continues

        
    if (StrEqual(weaponName"knife"))
        {
            new 
    userid GetEventInt(event"userid");
            new 
    userid2 GetEventInt(event"attacker");

            new 
    victim GetClientOfUserId(userid);
            new 
    killer GetClientOfUserId(userid2);

            if(
    victim != && killer != 0)
            {
                new 
    victimTeam GetClientTeam(victim);
                new 
    killerTeam GetClientTeam(killer);

                if(
    killerTeam!=victimTeam)
                {
                    
    GetClientName(victim,victimName,100);
                    
    GetClientName(killer,killerName,100);

                    new 
    knife_sound GetRandomInt(16);
                    if (
    knife_sound != 1)
                    {
                                    
    EmitSoundToAll(g_soundName);
                    }
                    else
                    {
                        if (
    knife_sound != 2)
                        {
                                        
    EmitSoundToAll(g_soundName2);
                        }
                        if (
    knife_sound != 3)
                        {
                                        
    EmitSoundToAll(g_soundName3);
                        }
                        if (
    knife_sound != 4)
                        {
                                        
    EmitSoundToAll(g_soundName4);
                        }
                        if (
    knife_sound != 5)
                        {
                                        
    EmitSoundToAll(g_soundName5);
                        }
                        if (
    knife_sound != 6)
                        {
                                        
    EmitSoundToAll(g_soundName6);
                        }
                    }
                }
            }
        }
    }

    Теперь в логах ошибок нет, но качает и проигрывает только один звук ("misc/humiliation.mp3"). Все звуки и пути к ним в порядке, в cs воспроизводятся.
    Подскажите куда копать????
     
    Последнее редактирование: 12 мар 2014
  2. semjef

    semjef semjef.ru

    Сообщения:
    1.031
    Симпатии:
    473
    зачем эти 3 секунды после которых хукается эвент? - глупость же.


    полнейший бред, делай через switch
     
  3. The End Is Near...

    The End Is Near... Russian Roulette

    Сообщения:
    893
    Симпатии:
    659
    Re: Написание плагинов

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

    new String:STRING_SoundFiles[][] = {"music/1.mp3""music/2.mp3""music/3.mp3"};

    #define INT_SizeOfSoundFiles (sizeof(STRING_SoundFiles) - 1)

    public OnPluginStart()
    {
        
    HookEvent("player_death"Event_OnPlayerDeath);
    }

    public 
    OnMapStart()
    {
        
    decl String:buffer[128];
        for (new 
    0INT_SizeOfSoundFilesi++)
        {
            
    PrecacheSound(STRING_SoundFiles[i]);

            
    Format(buffersizeof(buffer), "sound/%s"STRING_SoundFiles[i]);
            
    AddFileToDownloadsTable(buffer);
        }
    }

    public 
    Event_OnPlayerDeath(Handle:event, const String:name[], bool:silent)
    {
        
    decl String:weapon[32];
        
    GetEventString(event"weapon"weaponsizeof(weapon));

        if (
    strcmp(weapon"knife"false) == 0)
        {
            new 
    attacker GetClientOfUserId(GetEventInt(event"attacker"));

            if (
    attacker 0)
            {
                if (
    GetClientTeam(attacker) != GetClientTeam(GetClientOfUserId(GetEventInt(event"userid"))))
                {
                    
    EmitSoundToAll(STRING_SoundFiles[GetRandomInt(0INT_SizeOfSoundFiles)]);
                }
            }
        }
    }
     
    Последнее редактирование: 13 мар 2014
    Dima56, cangncan и Серый™ нравится это.
  4. cangncan

    cangncan

    Сообщения:
    69
    Симпатии:
    2
    The End Is Near..., Спасибо !!!
    НО в конселе ошибки:
    [SM] Plugin encountered error 15: Array index is out of bounds
    [SM] Displaying call stack trace for plugin "KnifeSound.smx":
    [SM] [0] Line 38, KnifeSound.sp::Event_OnPlayerDeath()
     
    Последнее редактирование: 13 мар 2014
  5. The End Is Near...

    The End Is Near... Russian Roulette

    Сообщения:
    893
    Симпатии:
    659
    cangncan
    Исправил, вроде
     
    cangncan нравится это.
  6. cangncan

    cangncan

    Сообщения:
    69
    Симпатии:
    2
    Спасибо большое за помощь.
    Ошибок пока вроде нету - Будут отпишусь.

    P.S. Кто ставит этот плагин вместе с quakesounds(у меня v 1.8) = не забыть в конфиге quakesoundslist поставить на "knife" config "0" и почистить quakeusersettings.txt в папке data.
     
  7. Александр Сергеев

    Александр Сергеев

    Сообщения:
    1
    Симпатии:
    0
    Не работает на Sm 1.7 - build 5290, звуки качает но не воспроизводит. Ошибок в логах нет.

    Добавлено через 48 секунд
    Что сделать, что-бы работал ?
     
    Последнее редактирование: 25 янв 2016