Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Переделка Effects_Killer

zhenia96
сообщение 23.6.2012, 11:49
Сообщение #1
Стаж: 15 лет

Сообщений: 19
Благодарностей: 2
Полезность: 0

Всем привет!
Проблема следующая, хочу поставить на сервер эффекты после убийства зомби но все знают что в Effects_Killer есть проблема с hud.txt. Так вот я хочу убрать из плагина эти спрайты, а сделать простой хад по середине экрана с надписью "1 kill", "2 kill"... и тд. и чтобы проигрывало звуки "First Kill", "Double Kill"... (звуки есть)

И желательно удалить ещё звуки от убийства гранатой/ножом и тд.

Кода даю 2, потому что нашёл два разных:
Код
#include <amxmodx>
#include <amxmisc>
//#include <hamsandwich>
//#include <engine>
#include <fakemeta>
#include <cssb/messages.inc>

#define PLUGIN "CSSB CSO Effect Kills"
#define VERSION "1.0"
#define AUTHOR "CSSB"

#pragma semicolon 1

/*
Флаги:
cssb_MultiKillMode < флаги >
"a" - показывать сообщение
"b" - звуковое сопровождение
"c" - отображение спрайтов
По умолчанию: "cssb_MultiKillMode" "abc"

Какие звуки будут проигрываться, зависит от флагов
"cssb_sound_flags" < флаги >
"a" - звук MULTIKILL
"b" - звук ULTRAKILL
"c" - звук IMPRESSIVE
"d" - звук MONSTERKILL
"e" - звук KILLINGSPREE
"f" - звук RAMPAGE
"g" - звук DOMINATING
"h" - звук HOLYSHIT
"i" - звук GODLIKE
По умолчанию: "cssb_sound_flags" "abcdefghi"

CVARS:
Эффекты появления текста:
0 - Плавный переход
1 - Мерцание + Плавный переход
2 - Печатная машинка
По умолчанию: "cssb_message_effect" "1"

//Показывать текст разными цветами
По умолчанию: "cssb_random_color" "0"


Флаги:
cssb_HeadshotKillMode < flags >
"a" - показывать сообщение
"b" - звуковое сопровождение
"c" - отображение спрайтов
По умолчанию: "cssb_HeadshotKillMode" "abc"

Флаги:
cssb_KnifeKillMode < flags >
"a" - показывать сообщение
"b" - звуковое сопровождение
"c" - отображение спрайтов
По умолчанию: "cssb_KnifeKillMode" "abc"

*/    

new g_FM_Running;

enum(+= 100)
{
    TASK_HIDESPR = 2000
};
#define ID_HIDESPR (taskid - TASK_HIDESPR)

enum
{
    KILL_FIRST = 1,
    C4_DEFUSE,
    C4_SET,
    MULTIKILL,
    ULTRAKILL,
    IMPRESSIVE,
    MONSTERKILL,
    KILLINGSPREE,
    RAMPAGE,
    DOMINATING,
    HOLYSHIT,
    GODLIKE
};

enum
{
    KILL_NONE = 51,
    KILL_HEGRENADE,
    KILL_HEADSHOT,
    KILL_KNIFE,
    WALLSHOT,
    WALLSHOT_HEADSHOT
};

new arrHeadshot[33][1];

new arrKills[33] = {0,...};
new arrDeaths[33] = {0,...};
new arrLevels[9] = {3, 5, 7, 9, 11,13,15,17,19};

new arrMultiKillSounds[9][] = {
"CSSB/UltS/multikill",
"CSSB/UltS/ultrakill",
"CSSB/UltS/impressive",
"CSSB/UltS/monsterkill",
"CSSB/UltS/killingspree",
"CSSB/UltS/rampage",
"CSSB/UltS/dominating",
"CSSB/UltS/holyshit",
"CSSB/UltS/godlike"};
/*
new arrMultiKillSprites[9][] = {
"sprites/mark/cssb_multikill.spr",
"sprites/mark/cssb_ultrakill.spr",
"sprites/mark/cssb_impressive.spr",
"sprites/mark/cssb_monsterkill.spr",
"sprites/mark/cssb_killingspree.spr",
"sprites/mark/cssb_rampage.spr",
"sprites/mark/cssb_dominating.spr",
"sprites/mark/cssb_holyshit.spr",
"sprites/mark/cssb_godlike.spr"};
*/
new arrMultiKillMessages[9][] = {
"UKILL_MULTIKILL",
"UKILL_ULTRAKILL",
"UKILL_IMPRESSIVE",
"UKILL_MONSTERKILL",
"UKILL_KILLINGSPREE",
"UKILL_RAMPAGE",
"UKILL_DOMINATING",
"UKILL_HOLYSHIT",
"UKILL_GODLIKE"
};

new iStatusIconMsg;
new iFirstKill;

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    
    register_dictionary("cssbUltimateSound.txt");
    
    register_event("DeathMsg", "evDeathMsg", "a");
//    register_event("DeathMsg","evDeathMsg","a","3=1");
//    register_event("DeathMsg","evDeathMsg","a","4&kni");
//    register_event("DeathMsg","evDeathMsg","a","4&gre");
    
    register_event("HLTV", "evNewRound", "a", "1=0", "2=0");
    
    iStatusIconMsg = get_user_msgid("StatusIcon");

    register_cvar("cssb_HeadshotKillMode","abc");
    register_cvar("cssb_KnifeKillMode","abc");
    register_cvar("cssb_MultiKillMode","abc");
    // Эффекты
    // 0 - Плавный переход
    // 1 - Мерцание + Плавный переход
    // 2 - Печатная машинка
    register_cvar("cssb_message_effect","1");
    register_cvar("cssb_random_color","0");
    
    register_cvar("cssb_sound_flags","abcdefghi");
    
    g_FM_Running = is_module_loaded("FakeMeta");

  
    return PLUGIN_CONTINUE;
}


public client_connect(idUser)
{
    arrHeadshot[idUser][0] = 0;

    arrKills[idUser] = 0;
    arrDeaths[idUser] = 0;

}

public client_disconnect(idUser)
{
    arrHeadshot[idUser][0] = 0;

    arrKills[idUser] = 0;
    arrDeaths[idUser] = 0;

}

public plugin_precache()
{
    
    precache_generic("sprites/hud.txt");
    
    //Звуки
    precache_sound( "CSSB/UltS/multikill.wav");
    precache_sound( "CSSB/UltS/ultrakill.wav");
    precache_sound( "CSSB/UltS/impressive.wav");
    precache_sound( "CSSB/UltS/monsterkill.wav");
    precache_sound( "CSSB/UltS/killingspree.wav");
    precache_sound( "CSSB/UltS/rampage.wav");
    precache_sound( "CSSB/UltS/dominating.wav");
    precache_sound( "CSSB/UltS/holyshit.wav");
    precache_sound( "CSSB/UltS/godlike.wav");
    precache_sound( "CSSB/UltS/headshot.wav");
    precache_sound( "CSSB/UltS/humiliation.wav");
    precache_sound( "CSSB/UltS/firstblood.wav");
    precache_sound( "CSSB/UltS/nade_kill.wav");
    precache_sound( "CSSB/UltS/c4set.wav");
    precache_sound( "CSSB/UltS/c4defuse.wav");
        
    //Спрайты
    precache_model("sprites/mark/kill_first.spr");
    precache_model("sprites/mark/c4_defuse.spr");
    precache_model("sprites/mark/c4_set.spr");
    precache_model("sprites/mark/kill_none.spr");
    precache_model("sprites/mark/kill_he.spr");
    precache_model("sprites/mark/kill_headshot.spr");
    precache_model("sprites/mark/kill_knife.spr");
    precache_model("sprites/mark/wall_shot.spr");
    precache_model("sprites/mark/wall_shot_hs.spr");
    precache_model("sprites/mark/cssb_multikill.spr");
    precache_model("sprites/mark/cssb_ultrakill.spr");
    precache_model("sprites/mark/cssb_impressive.spr");
    precache_model("sprites/mark/cssb_monsterkill.spr");
    precache_model("sprites/mark/cssb_killingspree.spr");
    precache_model("sprites/mark/cssb_rampage.spr");
    precache_model("sprites/mark/cssb_dominating.spr");
    precache_model("sprites/mark/cssb_holyshit.spr");
    precache_model("sprites/mark/cssb_godlike.spr");
        
    return PLUGIN_CONTINUE;
}

public evNewRound()
{
    iFirstKill = 1;
    /*
    static iPlayers[32], iPlayersNum, i;
    get_players(iPlayers, iPlayersNum, "a");
    for (i = 0; i <= iPlayersNum; ++i)
    {
        arrHeadshot[iPlayers[i]][0] = 0;

        arrKills[iPlayers[i]] = 0;
        arrDeaths[iPlayers[i]] = 0;    
    }*/

}

public evDeathMsg()
{
    new idKiller = read_data(1);
    new idVictim = read_data(2);
            
    if (!is_user_connected(idKiller) || !is_user_connected(idVictim))
        return PLUGIN_CONTINUE;

    if (get_user_team(idKiller) == get_user_team(idVictim) && get_cvar_num("mp_friendlyfire") == 1)
//     if (idKiller && get_user_team(idKiller) == get_user_team(idVictim))
        return PLUGIN_CONTINUE;
        
    new iHeadshot = read_data(3);

    new szWeapon[32], iWpnIndex;
    read_data(4, szWeapon, charsmax(szWeapon));

    new szWeaponARG[4];
    read_data(4,szWeaponARG,3);
    
//    if(equal( szWeaponARG, "gre" ) || equal( szWeaponARG, "wor" ))
    if(equal( szWeaponARG, "gre" ))
        format(szWeapon, charsmax(szWeapon), "hegrenade");

    format(szWeapon, charsmax(szWeapon), "weapon_%s", szWeapon);
    iWpnIndex = get_weaponid(szWeapon);
        
//    client_print(0,print_chat,"szWeaponARG: %s | iWpnIndex: %d",szWeaponARG,iWpnIndex);
    
    
    arrHeadshot[idKiller][0] += read_data(3);/* headshot */
    arrHeadshot[idVictim][0] = 0;

    arrKills[idKiller] += 1;
    arrKills[idVictim] = 0;
    arrDeaths[idKiller] = 0;
    arrDeaths[idVictim] += 1;
        
    if ((iWpnIndex != CSW_KNIFE) && (iWpnIndex != CSW_HEGRENADE) && !can_see_fm(idKiller, idVictim))
    {
        if (iHeadshot)//Если убил в голову и через стену
        {
            show_hud(idKiller, WALLSHOT_HEADSHOT);
        }
        else
        {
            show_hud(idKiller, WALLSHOT);
        }
    }
    else if (iHeadshot && iWpnIndex)//В голову и видя своего противника
    {
        fHeadshotKill(idKiller,idVictim);
    }
    else if (iWpnIndex == CSW_KNIFE)
    {
        fKnifeKill(idKiller,idVictim);
    }
    else if (iWpnIndex == CSW_HEGRENADE)//CSW_HEGRENADE
    {
        show_hud(idKiller, KILL_HEGRENADE);
        client_cmd(0,"spk CSSB/UltS/nade_kill");
    }
    else
    {
        show_hud(idKiller, KILL_NONE);
    }
    
    
    // Первая кровь
    if (iFirstKill)
    {
        iFirstKill = 0;
        show_hud(idKiller, KILL_FIRST);
        client_cmd(0,"spk CSSB/UltS/firstblood");
    }

    for (new i = 0; i < 9; i++)
    {
        if (arrKills[idKiller] == arrLevels[i])
        {
            fMultiKill(idKiller,i,arrKills[idKiller] ,arrHeadshot[idKiller][0]);
            return PLUGIN_CONTINUE;
        }
    }

    return PLUGIN_CONTINUE;
}

public bomb_defused(id)
{
    new arrIdPlayers[32], iNumPlayers;
    get_players(arrIdPlayers,iNumPlayers,"ah");
    
    for(new i=0; i < iNumPlayers; i++)
        show_hud(arrIdPlayers[i], C4_DEFUSE);

    client_cmd(0,"spk CSSB/UltS/c4defuse");
}
public bomb_planted(id)
{
    new arrIdPlayers[32], iNumPlayers;
    get_players(arrIdPlayers,iNumPlayers,"ah");
    
    for(new i=0; i < iNumPlayers; i++)
        show_hud(arrIdPlayers[i], C4_SET);
        
    client_cmd(0,"spk CSSB/UltS/c4set");
}


public fKnifeKill(idKiller,idVictim)
{
    new szKnifeMode[4];
    get_cvar_string("cssb_KnifeKillMode",szKnifeMode,charsmax(szKnifeMode));
    new bitKnifeMode = read_flags(szKnifeMode);

    new arrIdPlayers[32], iNumPlayers;
    get_players(arrIdPlayers,iNumPlayers,"ah");
        
    if (bitKnifeMode & 1)
    {
        new strNameKiller[33], strNameVictim[33];

        get_user_name(idKiller,strNameKiller,33);
        get_user_name(idVictim,strNameVictim,33);

        formatex(szMessage,charsmax(szMessage), "^x03%s ^x01%L ^x04%s",strNameKiller,LANG_PLAYER,"UKILL_KNF", strNameVictim);
        
        for(new i=0; i < iNumPlayers; i++)
        {
            if (arrIdPlayers[i] == idVictim)
                continue;
            if (arrIdPlayers[i] == idKiller)
                continue;

            message_begin(MSG_ONE, get_user_msgid("SayText"), {0,0,0}, arrIdPlayers[i]);
            write_byte(idKiller);
            write_string(szMessage);
            message_end();
        }

    }
    
    if (bitKnifeMode & 2)
    {
        client_cmd(0,"spk CSSB/UltS/humiliation");
    }
    
    if (bitKnifeMode & 4)
    {
        for(new i=0; i < iNumPlayers; i++)
        {
            if (arrIdPlayers[i] == idVictim)
                continue;

            show_hud(arrIdPlayers[i], KILL_KNIFE);
        }
    }
}

public fHeadshotKill(idKiller,idVictim)
{
    new szMessageHSKill[256];
    new szHeadshotMode[4];
    get_cvar_string("cssb_HeadshotKillMode",szHeadshotMode,charsmax(szHeadshotMode));
    new bitHeadshotMode = read_flags(szHeadshotMode);

    if (bitHeadshotMode & 1)
    {
        new strNameKiller[33], strNameVictim[33];

        get_user_name(idKiller,strNameKiller,33);
        get_user_name(idVictim,strNameVictim,33);

        formatex(szMessageHSKill, charsmax(szMessageHSKill), "^x03%L  ^x04%s",LANG_PLAYER,"UKILL_HEADSHOT", strNameVictim);
        cssbColoredPrint(idKiller,szMessageHSKill);
    }

    if (bitHeadshotMode & 2)
    {
        client_cmd(idKiller,"spk CSSB/UltS/headshot");
        client_cmd(idVictim,"spk CSSB/UltS/headshot");
    }

    if (bitHeadshotMode & 4)
    {
        show_hud(idKiller, KILL_HEADSHOT);
    }  
}

fMultiKill(idKiller,iLevel,iNumKills,iNumHeadshot)
{
    new szMultiKillMode[4];
    get_cvar_string("cssb_MultiKillMode",szMultiKillMode,4);
    new bitMultiKillMode = read_flags(szMultiKillMode);

    new arrIdPlayers[32], iNumPlayers;
    get_players(arrIdPlayers,iNumPlayers,"ah");
    
    if (bitMultiKillMode & 1)//Просто сообщение
    {
        new szNameUser[32];
        get_user_name(idKiller, szNameUser, charsmax(szNameUser));
          
        new szHUDMessage[128];
        format(szHUDMessage,127,"%L",LANG_PLAYER,arrMultiKillMessages[iLevel],szNameUser,iNumKills,iNumHeadshot);

        if(get_cvar_num("cssb_random_color") == 1)
            fHUDMessageRandomColor(szHUDMessage);
        else
            fHUDMessageColor(szHUDMessage,iLevel);
    }

    if (bitMultiKillMode & 2)//С звуковым сопровождением
    {
        new param[1];
        param[0] = iLevel;
        set_task(3.0,"fSoundMultiKill",0,param,1);
    }
    
    if (bitMultiKillMode & 4)//С отображением спрайтов
    {
        //client_print(0,print_chat,"bitMultiKillMode & 4");
        for(new i = 0; i < iNumPlayers; i++)
        {
            if(iNumKills == 3)
                show_hud(arrIdPlayers[i], MULTIKILL);
            if(iNumKills == 5)
                show_hud(arrIdPlayers[i], ULTRAKILL);
            if(iNumKills == 7)
                show_hud(arrIdPlayers[i], IMPRESSIVE);
            if(iNumKills == 9)
                show_hud(arrIdPlayers[i], MONSTERKILL);    
            if(iNumKills == 11)
                show_hud(arrIdPlayers[i], KILLINGSPREE);
            if(iNumKills == 13)
                show_hud(arrIdPlayers[i], RAMPAGE);
            if(iNumKills == 15)
                show_hud(arrIdPlayers[i], DOMINATING);
            if(iNumKills == 17)
                show_hud(arrIdPlayers[i], HOLYSHIT);            
            if(iNumKills == 19)
                show_hud(arrIdPlayers[i], GODLIKE);
        }
    }    

}

public fSoundMultiKill(param[])
{
    
    static flags[26];
    get_cvar_string("cssb_sound_flags", flags, sizeof(flags) - 1);
    new bitFlags = read_flags(flags);

    if ((param[0] == 0) && !(bitFlags & 1))
        return;
        
    if ((param[0] == 1) && !(bitFlags & 2))
        return;    
        
    if ((param[0] == 2) && !(bitFlags & 4))
        return;        
        
    if ((param[0] == 3) && !(bitFlags & 8))
        return;    
        
    if ((param[0] == 4) && !(bitFlags & 16))
        return;
        
    if ((param[0] == 5) && !(bitFlags & 32))
        return;        
        
    if ((param[0] == 6) && !(bitFlags & 64))
        return;
        
    if ((param[0] == 7) && !(bitFlags & 128))
        return;
        
    if ((param[0] == 8) && !(bitFlags & 256))
        return;            
        
    client_cmd(0, "spk %s", arrMultiKillSounds[param[0]]);

}

public fHUDMessageRandomColor(szHUDMessage[128])
{
    new rgbRed, rgbGreen, rgbBlue;
    
    // RANDOM
    rgbRed = random_num(0, 255);
    rgbGreen = random_num(0, 255);
    rgbBlue = random_num(0, 255);
            
    new iEffect, Float:iFadeIn, Float:iFadeOut, Float:iHoldTime;
    
    switch(get_cvar_num("cssb_message_effect"))
    {
        case 1:
        {
            iEffect = 1;
            iFadeIn = 0.2;
            iFadeOut = 0.2;
            iHoldTime = 7.0;
        }
        case 2:
        {
            iEffect = 2;
            iFadeIn = 0.05;
            iFadeOut = 0.5;
            iHoldTime = 7.0;
        }
        default:
        {
            iEffect = 0;
            iFadeIn = 0.5;
            iFadeOut = 0.5;
            iHoldTime = 7.0;
        }
    }

    set_hudmessage(rgbRed, rgbGreen, rgbBlue, 0.05, 0.65, iEffect, 0.1, iHoldTime, iFadeIn, iFadeOut, 3);
    show_hudmessage(0, "%s", szHUDMessage);
    
}

public fHUDMessageColor(szHUDMessage[128],iLevel)
{
    new rgbRed, rgbGreen, rgbBlue;
    
    
    switch(iLevel)
    {
        case 0:
        {
            // GREEN
            rgbRed = 0;
            rgbGreen = 255;
            rgbBlue = 0;
        }
        
        case 1:
        {
            // RED
            rgbRed= 255;
            rgbGreen = 0;
            rgbBlue = 0;
        }

        case 2:
        {
            rgbRed = 79;
            rgbGreen = 30;
            rgbBlue = 255;
        }
        case 3:
        {
            // YELLOW
            rgbRed = 255;
            rgbGreen = 255;
            rgbBlue = 0;
        }
        
        case 4:
        {
            // CYAN
            rgbRed = 0;
            rgbGreen = 255;
            rgbBlue = 255;
        }
        
        case 5:
        {
            // MAGENTA
            rgbRed = 255;
            rgbGreen = 0;
            rgbBlue = 255;
        }
        case 6:
        {
            // ORANGE
            rgbRed = 255;
            rgbGreen = 128;
            rgbBlue = 0;
        }
        case 7:
        {
            // VIOLET
            rgbRed = 0;
            rgbGreen = 128;
            rgbBlue = 255;
        }
        case 8:
        {
            rgbRed = 128;
            rgbGreen = 0;
            rgbBlue = 255;
        }

    }
    
    
    new iEffect, Float:iFadeIn, Float:iFadeOut, Float:iHoldTime;
    
    switch(get_cvar_num("cssb_message_effect"))
    {
        case 1:
        {
            iEffect = 1;
            iFadeIn = 0.2;
            iFadeOut = 0.2;
            iHoldTime = 7.0;
        }
        case 2:
        {
            iEffect = 2;
            iFadeIn = 0.05;
            iFadeOut = 0.5;
            iHoldTime = 7.0;
        }
        default:
        {
            iEffect = 0;
            iFadeIn = 0.5;
            iFadeOut = 0.5;
            iHoldTime = 7.0;
        }
    }

    set_hudmessage(rgbRed, rgbGreen, rgbBlue, 0.05, 0.65, iEffect, 0.1, iHoldTime, iFadeIn, iFadeOut, 3);
    show_hudmessage(0, "%s", szHUDMessage);
}




// #################### SHOW HUD ####################
show_hud(id, idhud)
{
    if (!is_user_connected(id))
        return;
    
    show_spr(id, idhud);
}

show_spr(id, idspr)
{
    if (idspr >= KILL_NONE)
        hide_spr(id, 2);
    else
        hide_spr(id, 1);

    spr_action(id, idspr, 1);
    
    if (task_exists(id+TASK_HIDESPR))
        remove_task(id+TASK_HIDESPR);
    
    if(!is_user_bot(id))
        set_task(2.0, "task_hidehud", id + TASK_HIDESPR);

}
hide_spr(id, idspr)
{
    if (idspr == 1)
    {
        for (new i = KILL_FIRST; i <= GODLIKE; i++)
            spr_action(id, i, 0);
    }
    
    if (idspr == 2)
    {
        for (new i = KILL_NONE; i <= WALLSHOT_HEADSHOT; i++)
        {
            spr_action(id, i, 0);
        }
    }
}

spr_action(id, spr, run)
{    
    new sprname[64];
    format(sprname, charsmax(sprname), "%s", get_hud_data(spr));

    message_begin(MSG_ONE,iStatusIconMsg,{0,0,0},id);
    write_byte(run); // status (0=hide, 1=show, 2=flash)
    write_string(sprname); // sprite name
    message_end();
}

get_hud_data(idhud)
{
    new value[64], sprname[33];
    
    switch (idhud)
    {
        case KILL_FIRST:
            sprname = "kill_first";
        case C4_DEFUSE:
            sprname = "c4_defuse";
        case C4_SET:
            sprname = "c4_set";
        case MULTIKILL:
            sprname = "cssb_multikill";
        case ULTRAKILL:
            sprname = "cssb_ultrakill";
        case IMPRESSIVE:
            sprname = "cssb_impressive";
        case MONSTERKILL:
            sprname = "cssb_monsterkill";
        case KILLINGSPREE:
            sprname = "cssb_killingspree";
        case RAMPAGE:
            sprname = "cssb_rampage";
        case DOMINATING:
            sprname = "cssb_dominating";
        case HOLYSHIT:
            sprname = "cssb_holyshit";
        case GODLIKE:
            sprname = "cssb_godlike";
            
        case KILL_NONE:
            sprname = "kill_none";
        case KILL_HEGRENADE:
            sprname = "kill_he";
        case KILL_HEADSHOT:
            sprname = "kill_headshot";
        case KILL_KNIFE:
            sprname = "kill_knife";
        case WALLSHOT:
            sprname = "wall_shot";
        case WALLSHOT_HEADSHOT:
            sprname = "wall_shot_hs";
                    
        
    }

    format(value, charsmax(value), "%s", sprname);
    
    return value;
}

public task_hidehud(taskid)
{
    new id = ID_HIDESPR;
    hide_spr(id, 2);
    hide_spr(id, 1);

}

bool:can_see_fm(entindex1, entindex2)
{
    if ((!g_FM_Running) || !entindex1 || !entindex2)
        return false;
//  new ent1, ent2

    if (pev_valid(entindex1) && pev_valid(entindex1))
    {
        new flags = pev(entindex1, pev_flags);
        if (flags & EF_NODRAW || flags & FL_NOTARGET)
        {
            return false;
        }

        new Float:lookerOrig[3];
        new Float:targetBaseOrig[3];
        new Float:targetOrig[3];
        new Float:temp[3];

        pev(entindex1, pev_origin, lookerOrig);
        pev(entindex1, pev_view_ofs, temp);
        lookerOrig[0] += temp[0];
        lookerOrig[1] += temp[1];
        lookerOrig[2] += temp[2];

        pev(entindex2, pev_origin, targetBaseOrig);
        pev(entindex2, pev_view_ofs, temp);
        targetOrig[0] = targetBaseOrig [0] + temp[0];
        targetOrig[1] = targetBaseOrig [1] + temp[1];
        targetOrig[2] = targetBaseOrig [2] + temp[2];

        engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0); //  checks the had of seen player
        if (get_tr2(0, TraceResult:TR_InOpen) && get_tr2(0, TraceResult:TR_InWater))
        {
            return false;
        }
        else
        {
            new Float:flFraction;
            get_tr2(0, TraceResult:TR_flFraction, flFraction);
            if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
            {
                return true;
            }
            else
            {
                targetOrig[0] = targetBaseOrig [0];
                targetOrig[1] = targetBaseOrig [1];
                targetOrig[2] = targetBaseOrig [2];
                engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0); //  checks the body of seen player
                get_tr2(0, TraceResult:TR_flFraction, flFraction);
                if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
                {
                    return true;
                }
                else
                {
                    targetOrig[0] = targetBaseOrig [0];
                    targetOrig[1] = targetBaseOrig [1];
                    targetOrig[2] = targetBaseOrig [2] - 17.0;
                    engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0); //  checks the legs of seen player
                    get_tr2(0, TraceResult:TR_flFraction, flFraction);
                    if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
                    {
                        return true;
                    }
                }
            }
        }
    }
    return false;
}


Второй:
Код
#include <amxmodx>
#include <fakemeta>

#include <nst_player>
#include <nst_zombie>
#include <nst_wpn>


#define PLUGIN "Effects Killer"
#define VERSION "3.0"
#define AUTHOR "NST"

#define LEVELS 8
new kills[33], Float:timekill[33], revenge[33], oneshot[33]
new iconstatus, g_firstkill, g_lastkill
new g_FM_Running
new cvar_time_kill, cvar_type, cvar_time_show

new const sound_combo[][] =
{
    "vox/kill/%s/kill_1_%s.wav",
    "vox/kill/%s/kill_2_%s.wav",
    "vox/kill/%s/kill_3_%s.wav",
    "vox/kill/%s/kill_4_%s.wav",
    "vox/kill/%s/kill_5_%s.wav",
    "vox/kill/%s/kill_6_%s.wav",
    "vox/kill/%s/kill_7_%s.wav",
    "vox/kill/%s/kill_8_%s.wav",
    "vox/kill/%s/revenge_%s.wav",
    "vox/kill/%s/headshot_%s.wav",
    "vox/kill/%s/knife_%s.wav",
    "vox/kill/%s/grenade_%s.wav"
}
enum(+= 100)
{
    TASK_HIDESPR = 2000
}
#define ID_HIDESPR (taskid - TASK_HIDESPR)
enum
{
    HUD_SOUND = 1,
    HUD_MSGTEXT,
    HUD_SPRNAME
}
enum
{
    KILL_1 = 1,
    KILL_2,
    KILL_3,
    KILL_4,
    KILL_5,
    KILL_6,
    KILL_7,
    KILL_8,
    KILL_FIRST,
    C4_DEFUSE,
    C4_SET
}
enum
{
    KILL_NONE = 51,
    KILL_HEGRENADE,
    KILL_HEADSHOT,
    KILL_KNIFE,
    KILL_LAST,
    KILL_REVENGE,
    WALLSHOT,
    WALLSHOT_HEADSHOT,
    ONESHOT_2KILL,
    ONESHOT_3KILL
}


public plugin_precache()
{
    for (new i = 1; i <= 2; i++)
    {
        new sex[32]
        if (i == 1) sex = "woman"
        else sex = "man"
        
        for (new e = 0; e <= 11; e++)
        {
            new sound_ct[100], sound_t[100], team_ct[32] = "ct", team_t[32] = "t"
            format(sound_ct, 99, sound_combo[e], sex, team_ct)
            format(sound_t, 99, sound_combo[e], sex, team_t)
            //precache_sound(sound_ct)
            //precache_sound(sound_t)
        }
        
    }
    //precache_sound("misc/MultiKill/C4_Defuse.wav")
    //precache_sound("misc/MultiKill/C4_Set.wav")
    
}
public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
    register_event("DeathMsg", "event_DeathMsg", "a")
    
    cvar_time_kill = register_cvar("nst_ek_time_kill","3")
    cvar_type = register_cvar("nst_ek_type","1")
    cvar_time_show = register_cvar("nst_ek_time_show","2.0")
    
    iconstatus = get_user_msgid("StatusIcon")
    g_FM_Running = is_module_loaded("FakeMeta")
}
public event_round_start()
{
    new reset_value[33]

    g_firstkill = 1
    kills = reset_value
    revenge = reset_value
    oneshot = reset_value
}
public event_DeathMsg()
{
    // get value data
    static killer, headshot, weapon[32], wpnindex, victim
    killer = read_data(1)
    victim = read_data(2)
    headshot = read_data(3)
    read_data(4, weapon, charsmax(weapon))
    if (equali(weapon, "grenade")) format(weapon, charsmax(weapon), "hegrenade")
    format(weapon, charsmax(weapon), "weapon_%s", weapon)
    wpnindex = get_weaponid(weapon)
    
    // none killer = victim
    if (!is_user_connected(killer) || !is_user_connected(victim) || killer==victim) return;
    if (get_user_team(killer)==get_user_team(victim) && !get_cvar_num("mp_friendlyfire")) return;
    
    // reset kills of victim
    kills[victim] = 0

    // set revenge of victim
    revenge[victim] = killer

    // get num kill & one shoot multikill
    new Float:timeleft = get_gametime()-timekill[killer]
    if (timeleft <= get_pcvar_float(cvar_time_kill)) kills[killer] += 1
    else kills[killer] = 1
    if (kills[killer]>LEVELS) kills[killer] = 1
    timekill[killer] = get_gametime()

    if (!oneshot[killer]) oneshot[killer] = 1
    if (!timeleft && wpnindex != CSW_HEGRENADE) oneshot[killer] += 1
    else oneshot[killer] = 1
    oneshot[killer] = min(3, oneshot[killer])
    //client_print(killer, print_chat, "%i", oneshot[killer])
    
    // get last kill
    new players_ct[32], players_t[32], ict, ite
    get_players(players_ct,ict,"ae","CT")  
    get_players(players_t,ite,"ae","TERRORIST")
    if (ict == 0 || ite == 0) g_lastkill = 1
    
    // check revenge
    new g_revenge
    if (victim == revenge[killer])
    {
        g_revenge = 1
        revenge[killer] = 0
    }

    // hud 1
    new check_sound
    if (oneshot[killer] > 1)
    {
        if (oneshot[killer] == 2) show_hud(killer, ONESHOT_2KILL)
        else if (oneshot[killer] == 3) show_hud(killer, ONESHOT_3KILL)
    }
    else if (g_lastkill)
    {
        g_lastkill = 0
        show_hud(killer, KILL_LAST)
    }    
    else if (g_revenge)
    {
        play_sound(killer, KILL_REVENGE)
        show_hud(killer, KILL_REVENGE)
    }
    else if ((wpnindex != CSW_KNIFE) && (wpnindex != CSW_HEGRENADE) && !can_see_fm(killer, victim))
    {
        if (headshot)
        {
            if (kills[killer] == 1)
            {
                play_sound(killer, KILL_HEADSHOT)
                check_sound = 1
            }
            show_hud(killer, WALLSHOT_HEADSHOT)
        }
        else show_hud(killer, WALLSHOT)
    }
    else if (headshot && wpnindex)
    {
        if (kills[killer] == 1)
        {
            play_sound(killer, KILL_HEADSHOT)
            check_sound = 1
        }
        show_hud(killer, KILL_HEADSHOT)
    }
    else if (wpnindex == CSW_KNIFE)
    {
        if (kills[killer] == 1)
        {
            play_sound(killer, KILL_KNIFE)
            check_sound = 1
        }
        show_hud(killer, KILL_KNIFE)
    }
    else if (wpnindex == CSW_HEGRENADE)
    {
        if (kills[killer] == 1)
        {
            play_sound(killer, KILL_HEGRENADE)
            check_sound = 1
        }
        show_hud(killer, KILL_HEGRENADE)
    }
    else
    {
        show_hud(killer, KILL_NONE)
    }
    
    
    // hud 2
    if (g_firstkill)
    {
        g_firstkill = 0
        show_hud(killer, KILL_FIRST)
        if (!check_sound) play_sound(killer, KILL_1)
    }
    else
    {
        show_hud(killer, kills[killer])
        if (!check_sound) play_sound(killer, kills[killer])
    }

}
public bomb_defused(id)
{
    show_hud(id, C4_DEFUSE)
    play_sound(id, C4_DEFUSE)
}
public bomb_planted(id)
{
    show_hud(id, C4_SET)
    play_sound(id, C4_SET)
}


// #################### SHOW HUD ####################
show_hud(id, idhud)
{
    if (!is_user_connected(id)) return;
    
    new type_cvar = get_pcvar_num(cvar_type)
    if (type_cvar == 1) show_spr(id, idhud)
    else if (type_cvar == 2) show_msg(id, idhud)
}
play_sound(id, idhud)
{
    if (!is_user_connected(id)) return;
    
    new sound[64], team[32], sex[32], cs_team
    if (nst_get_mod_runing()==NST_MOD_ZB3) cs_team = nst_get_user_team(id)
    else cs_team = get_user_team(id)
        
    if (cs_team==1) team = "T"
    else team = "CT"
    if (get_user_sex(id) == 2) sex = "woman"
    else sex = "man"
    format(sound, charsmax(sound), "%s", get_hud_data(idhud, HUD_SOUND))
    format(sound, charsmax(sound), sound, sex, team)
    
    PlaySound(id, sound)
}

show_msg(id, idhud)
{
    new msg[64]
    format(msg, charsmax(msg), "%s", get_hud_data(idhud, HUD_MSGTEXT))

    set_hudmessage(0, 204, 0, -1.0, 0.65, 1, 0.02, 3.0, 0.3, 0.3, 2)
    show_hudmessage(id, msg)
}
show_spr(id, idspr)
{
    if (idspr >= KILL_NONE) hide_spr(id, 2)
    else hide_spr(id, 1)

    spr_action(id, idspr, 1)
    
    if (idspr < KILL_NONE)
    {
        if (task_exists(id+TASK_HIDESPR)) remove_task(id+TASK_HIDESPR)
        set_task(get_pcvar_float(cvar_time_show), "task_hidehud", id+TASK_HIDESPR)
    }
}
public task_hidehud(taskid)
{
    new id = ID_HIDESPR
    hide_spr(id, 2)
    hide_spr(id, 1)

}
hide_spr(id, idspr)
{
    if (idspr == 1)
    {
        for (new i = KILL_1; i <= C4_SET; i++)
        {
            spr_action(id, i, 0)
        }
    }
    else if (idspr == 2)
    {
        for (new i = KILL_NONE; i <= ONESHOT_3KILL; i++)
        {
            spr_action(id, i, 0)
        }
    }
}  
spr_action(id, spr, run)
{    
    new sprname[64]
    format(sprname, charsmax(sprname), "%s", get_hud_data(spr, HUD_SPRNAME))

    message_begin(MSG_ONE,iconstatus,{0,0,0},id)
    write_byte(run) // status (0=hide, 1=show, 2=flash)
    write_string(sprname) // sprite name
    message_end()
}
get_hud_data(idhud, type)
{
    new value[64], sprname[33], sound[64], msgtext[32]
    
    switch (idhud)
    {
        case KILL_1:
        {
            sprname = "kill_1"
            sound = "vox/kill/%s/kill_1_%s"
            msgtext = "1 KILL"
        }
        case KILL_2:
        {
            sprname = "kill_2"
            sound = "vox/kill/%s/kill_2_%s"
            msgtext = "2 KILL"
        }
        case KILL_3:
        {
            sprname = "kill_3"
            sound = "vox/kill/%s/kill_3_%s"
            msgtext = "3 KILL"
        }
        case KILL_4:
        {
            sprname = "kill_4"
            sound = "vox/kill/%s/kill_4_%s"
            msgtext = "4 KILL"
        }
        case KILL_5:
        {
            sprname = "kill_5"
            sound = "vox/kill/%s/kill_5_%s"
            msgtext = "5 KILL"
        }
        case KILL_6:
        {
            sprname = "kill_6"
            sound = "vox/kill/%s/kill_6_%s"
            msgtext = "6 KILL"
        }
        case KILL_7:
        {
            sprname = "kill_7"
            sound = "vox/kill/%s/kill_7_%s"
            msgtext = "7 KILL"
        }
        case KILL_8:
        {
            sprname = "kill_8"
            sound = "vox/kill/%s/kill_8_%s"
            msgtext = "8 KILL"
        }
        case KILL_FIRST:
        {
            sprname = "kill_first"
            msgtext = "FIRST KILL"
        }
        case C4_DEFUSE:
        {
            sprname = "c4_defuse"
            sound = "vox/kill/c4_defuse"
        }
        case C4_SET:
        {
            sprname = "c4_set"
            sound = "vox/kill/c4_set"
        }
    
    
        case KILL_NONE:
        {
            sprname = "kill_none"
        }
        case KILL_HEGRENADE:
        {
            sprname = "kill_he"
            sound = "vox/kill/%s/grenade_%s"
            msgtext = "GRENADE KILL"
        }
        case KILL_HEADSHOT:
        {
            sprname = "kill_headshot"
            sound = "vox/kill/%s/headshot_%s"
            msgtext = "HEADSHOT"
        }
        case KILL_KNIFE:
        {
            sprname = "kill_knife"
            sound = "vox/kill/%s/knife_%s"
            msgtext = "KNIFE KILL"
        }
        case KILL_LAST:
        {
            sprname = "kill_last"
        }
        case KILL_REVENGE:
        {
            sprname = "kill_revenge"
            sound = "vox/kill/%s/revenge_%s"
            msgtext = "REVENGE"
        }
        case WALLSHOT:
        {
            sprname = "wall_shot"
            msgtext = "WALLSHOOT"
        }
        case WALLSHOT_HEADSHOT:
        {
            sprname = "wall_shot_hs"
            msgtext = "WALLSHOOT HEADSHOT"
        }
        case ONESHOT_2KILL:
        {
            sprname = "1shot_2kill"
            msgtext = "ONE SHOT 2 KILL"
        }
        case ONESHOT_3KILL:
        {
            sprname = "1shot_3kill"
            msgtext = "ONE SHOT MULTIKILL"
        }
    }

    if (type==HUD_SOUND) format(value, charsmax(value), "%s", sound)
    else if (type==HUD_MSGTEXT) format(value, charsmax(value), "%s", msgtext)
    else if (type==HUD_SPRNAME) format(value, charsmax(value), "%s", sprname)
    
    return value;
}
get_user_sex(id)
{
    new mod_runing, sex
    mod_runing = nst_get_mod_runing()
    if ( (mod_runing == NST_MOD_ZB3 || mod_runing == NST_MOD_ZBU || mod_runing == NST_MOD_ZBS) && nst_zb_get_user_zombie(id) )
    {
        sex = nst_zb_get_user_sex(id)
    }
    else
    {
        sex = nst_get_user_sex(id)
    }

    return sex;
}
// Plays a sound on clients
PlaySound(id, const sound[])
{
    if (equal(sound[strlen(sound)-4], ".mp3"))
        client_cmd(id, "mp3 play ^"sound/%s^"", sound)
    else
        client_cmd(id, "spk ^"%s^"", sound)
}
bool:can_see_fm(entindex1, entindex2)
{
    if ((!g_FM_Running) || !entindex1 || !entindex2)
        return false
//  new ent1, ent2

    if (pev_valid(entindex1) && pev_valid(entindex1))
    {
        new flags = pev(entindex1, pev_flags)
        if (flags & EF_NODRAW || flags & FL_NOTARGET)
        {
            return false
        }

        new Float:lookerOrig[3]
        new Float:targetBaseOrig[3]
        new Float:targetOrig[3]
        new Float:temp[3]

        pev(entindex1, pev_origin, lookerOrig)
        pev(entindex1, pev_view_ofs, temp)
        lookerOrig[0] += temp[0]
        lookerOrig[1] += temp[1]
        lookerOrig[2] += temp[2]

        pev(entindex2, pev_origin, targetBaseOrig)
        pev(entindex2, pev_view_ofs, temp)
        targetOrig[0] = targetBaseOrig [0] + temp[0]
        targetOrig[1] = targetBaseOrig [1] + temp[1]
        targetOrig[2] = targetBaseOrig [2] + temp[2]

        engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) //  checks the had of seen player
        if (get_tr2(0, TraceResult:TR_InOpen) && get_tr2(0, TraceResult:TR_InWater))
        {
            return false
        }
        else
        {
            new Float:flFraction
            get_tr2(0, TraceResult:TR_flFraction, flFraction)
            if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
            {
                return true
            }
            else
            {
                targetOrig[0] = targetBaseOrig [0]
                targetOrig[1] = targetBaseOrig [1]
                targetOrig[2] = targetBaseOrig [2]
                engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) //  checks the body of seen player
                get_tr2(0, TraceResult:TR_flFraction, flFraction)
                if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
                {
                    return true
                }
                else
                {
                    targetOrig[0] = targetBaseOrig [0]
                    targetOrig[1] = targetBaseOrig [1]
                    targetOrig[2] = targetBaseOrig [2] - 17.0
                    engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) //  checks the legs of seen player
                    get_tr2(0, TraceResult:TR_flFraction, flFraction)
                    if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
                    {
                        return true
                    }
                }
            }
        }
    }
    return false
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: