Отображение WeaponList при спавне.

Сообщения
67
Реакции
18
Всем доброго времени.
Взялся редачить плагин с ножами, заточенный под ZP, хочу заточить для начала под классику, убрал из кода всё лишнее, добавил счётчик за раунд и WeaponList, всё работает, но не до конца.

Суть проблемы: Игроку при заходе выдаётся кастомный нож, всё работает(меняется модель, звуки и тд), кроме иконки. Мне нужно, чтобы иконка ножа менялась сразу как только игрок заспавнился(не важно за какую команду), потому как сейчас она меняется только когда вызывается меню и выбирается через него, казалось бы просто нужно перетащить команды в функцию выдачи, но пока ничего не получается.
Это нужно только в момент, когда игрок подключается на сервер, дальше уже он может выбрать другой кастомный нож и данная проверка не нужна.

Код плагина:

Код:
#include <amxmodx>
#include <fun>
#include <fakemeta>
#include <hamsandwich>
#include <amxmisc>
#include <xs>

#define PLUGIN_NAME         "Knifes Remake from [ZP] by Classic"
#define PLUGIN_VERSION        "2.3"
#define PLUGIN_AUTHOR         "Core Author - Mr.H, Edited - R1ner"

new gl_iszAllocString_KnifeUID;

#define m_rpgPlayerItems 367

#define PDATA_SAFE 2

#define IsValidEntity(%1) (pev_valid(%1) == PDATA_SAFE)
#define IsCustomItem(%1) (pev(%1, pev_impulse) == gl_iszAllocString_KnifeUID)

#define linux_diff_player 5

//Models

new KNIFE1_V_MODEL[] = "models/cso/knifes/balisong/v_balisong.mdl"
new KNIFE1_P_MODEL[] = "models/cso/knifes/balisong/p_balisong.mdl"

new KNIFE2_V_MODEL[] = "models/cso/knifes/huntsman/v_huntsman.mdl"
new KNIFE2_P_MODEL[] = "models/cso/knifes/huntsman/p_huntsman.mdl"


//WeaponList

new const WEAPON_REFERENCE[] = "weapon_knife";
new gl_iMsgID_WeapPickup, gl_iMsgID_Weaponlist;

new const weapon_weaponlist_balisong[] = "weapon_balisong_knife",
    weapon_weaponlist_huntsman[] = "weapon_huntsman_knife";


//Sound

new const knife1_sounds[][] =
{
    "cso/knifes/balisong/balisong_deploy.wav",
    "cso/knifes/balisong/balisong_hit.wav",
    "cso/knifes/balisong/balisong_hitwall.wav",
    "cso/knifes/balisong/balisong_slash.wav",
    "cso/knifes/balisong/balisong_stab.wav"
}

new const knife2_sounds[][] =
{
    "cso/knifes/combat/combat_deploy.wav",
    "cso/knifes/combat/combat_hit.wav",
    "cso/knifes/combat/combat_hitwall.wav",
    "cso/knifes/combat/combat_slash.wav",
    "cso/knifes/combat/combat_stab.wav"
}

new used_num[33]

new bool:g_has_knife1[33], bool:g_has_knife2[33]


public plugin_init()
{
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)

    register_event("CurWeapon", "Event_Curweapon", "be", "1=1")
    register_event("HLTV", "event_round_start", "a", "1=0", "2=0")

    register_clcmd("bio_wolves_knifes", "wolves_knife_menu")

    register_forward(FM_EmitSound, "CEntity__EmitSound")
    RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage");


    gl_iMsgID_WeapPickup = get_user_msgid("WeapPickup");
    gl_iMsgID_Weaponlist = get_user_msgid("WeaponList");
}

public plugin_precache()
{
    precache_model(KNIFE1_V_MODEL)
    precache_model(KNIFE1_P_MODEL)
    precache_model(KNIFE2_V_MODEL)
    precache_model(KNIFE2_P_MODEL)

    for(new i = 0; i < sizeof knife1_sounds; i++)
        precache_sound(knife1_sounds[i])

    for(new i = 0; i < sizeof knife2_sounds; i++)
        precache_sound(knife2_sounds[i])


    register_clcmd(weapon_weaponlist_huntsman, "Command_HookWeapon");
    register_clcmd(weapon_weaponlist_balisong, "Command_HookWeapon");

    UTIL_PrecacheSpritesFromTxt(weapon_weaponlist_huntsman);
    UTIL_PrecacheSpritesFromTxt(weapon_weaponlist_balisong);

}

public Command_HookWeapon(const pPlayer)
{
    engclient_cmd(pPlayer, WEAPON_REFERENCE);
    return PLUGIN_HANDLED;
}

//Счётчик для будущих нужд
public event_round_start()
{
    for(new i = 0; i < 33; i++)
    {
        used_num[i] = 0;
    }
}

public client_connect(id)
{
    g_has_knife1[id] = true
    g_has_knife2[id] = false
}

public client_disconnected(id)
{
    g_has_knife1[id] = false
    g_has_knife2[id] = false
}

public wolves_knife_menu(id)
{
    new menu = menu_create("Меню ножей: ", "menu_keys")
    menu_additem(menu, "\wНож-бабочка", "1", 0);
    menu_additem(menu, "\wОхотничий-нож", "2", 0);
    menu_setprop(menu, MPROP_EXITNAME, "Выход")
    menu_setprop(menu, MPROP_EXIT,MEXIT_ALL)
    menu_display( id, menu, 0 );
    return PLUGIN_HANDLED
}

public menu_keys(id, menu, item)
{
    if(item == MENU_EXIT)
    {
        menu_destroy(menu)
        return PLUGIN_HANDLED
    }
    if(item < 0)
        return PLUGIN_CONTINUE
    new cmd[2];
    new access, callback;
    menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);
    new choice = str_to_num(cmd)
   
    switch (choice)
    {
        case 1:
        {
            get_knife1(id)
        }
        case 2:
        {  
            get_knife2(id)
        }
    }

    emit_sound(id, CHAN_BODY, "items/gunpickup2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
    remove_task(id)
    return PLUGIN_HANDLED;
}

public get_knife1(id)
{
    g_has_knife1[id] = true
    g_has_knife2[id] = false
    UTIL_WeapPickup(id, CSW_KNIFE);
    UTIL_SetWeaponList(id, weapon_weaponlist_balisong, -1, -1, -1, -1, 2, 1, CSW_KNIFE, 0);
}

public get_knife2(id)
{
    g_has_knife1[id] = false
    g_has_knife2[id] = true
    UTIL_WeapPickup(id, CSW_KNIFE);
    UTIL_SetWeaponList(id, weapon_weaponlist_huntsman, -1, -1, -1, -1, 2, 1, CSW_KNIFE, 0);
}

public delete_user_knife(id)
{
    static pKnife; pKnife = get_pdata_cbase(id, m_rpgPlayerItems + 3, linux_diff_player);
    if(IsValidEntity(pKnife) && IsCustomItem(pKnife))
    {
        set_pev(pKnife, pev_impulse, 0);
    }
}


public Event_Curweapon(id)
{
    if (is_user_connected(id))
    {
        delete_user_knife(id)
        return;
    }
   
    if(get_user_weapon(id) != CSW_KNIFE)
        return;

    if (g_has_knife1[id])
    {
        set_pev(id, pev_viewmodel2, KNIFE1_V_MODEL)
        set_pev(id, pev_weaponmodel2, KNIFE1_P_MODEL)
        UTIL_WeapPickup(id, CSW_KNIFE);
        UTIL_SetWeaponList(id, weapon_weaponlist_balisong, -1, -1, -1, -1, 2, 1, CSW_KNIFE, 0);
    }
    if (g_has_knife2[id])
    {
        set_pev(id, pev_viewmodel2, KNIFE2_V_MODEL)
        set_pev(id, pev_weaponmodel2, KNIFE2_P_MODEL)
        UTIL_WeapPickup(id, CSW_KNIFE);
        UTIL_SetWeaponList(id, weapon_weaponlist_huntsman, -1, -1, -1, -1, 2, 1, CSW_KNIFE, 0);
    }
}

public CEntity__EmitSound(id, channel, const sample[], Float:volume, Float:attn, flags, pitch)
{
    if (!is_user_connected(id))
        return HAM_IGNORED

    if (sample[8] == 'k' && sample[9] == 'n' && sample[10] == 'i')
    {
        if (sample[14] == 'd')
        {
            if(g_has_knife1[id])
                emit_sound(id, channel, knife1_sounds[0], volume, attn, flags, pitch)
            if(g_has_knife2[id])
                emit_sound(id, channel, knife2_sounds[0], volume, attn, flags, pitch)
        }
        else if (sample[14] == 'h')
        {
            if (sample[17] == 'w')
            {
                if(g_has_knife1[id])
                    emit_sound(id, channel, knife1_sounds[2], volume, attn, flags, pitch)
                if(g_has_knife2[id])
                    emit_sound(id, channel, knife2_sounds[2], volume, attn, flags, pitch)
            }
            else
            {
                if(g_has_knife1[id])
                    emit_sound(id, channel, knife1_sounds[1], volume, attn, flags, pitch)
                if(g_has_knife2[id])
                    emit_sound(id, channel, knife2_sounds[1], volume, attn, flags, pitch)
            }
        }
        else
        {
            if (sample[15] == 'l')
            {
                if(g_has_knife1[id])
                    emit_sound(id, channel, knife1_sounds[3], volume, attn, flags, pitch)
                if(g_has_knife2[id])
                    emit_sound(id, channel, knife2_sounds[3], volume, attn, flags, pitch)
            }
            else
            {
                if(g_has_knife1[id])
                    emit_sound(id, channel, knife1_sounds[4], volume, attn, flags, pitch)
                if(g_has_knife2[id] )
                    emit_sound(id, channel, knife2_sounds[4], volume, attn, flags, pitch)
            }
        }
        return HAM_SUPERCEDE
    }
    return HAM_IGNORED
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
    if(!is_user_connected(attacker))
        return HAM_IGNORED
   
    new temp[2], weapon = get_user_weapon(attacker, temp[0], temp[1])

    if(weapon == CSW_KNIFE && (g_has_knife1[attacker] || g_has_knife2[attacker]))
    {
        SetHamParamFloat(4, damage * 1000.0)
    }
    return HAM_IGNORED
}

stock create_velocity_vector(victim,attacker,Float:velocity[3])
{
    if(!is_user_alive(attacker))
        return 0;

    new Float:vicorigin[3];
    new Float:attorigin[3];
    pev(victim, pev_origin , vicorigin);
    pev(attacker, pev_origin , attorigin);

    new Float:origin2[3]
    origin2[0] = vicorigin[0] - attorigin[0];
    origin2[1] = vicorigin[1] - attorigin[1];

    new Float:largestnum = 0.0;

    if(floatabs(origin2[0])>largestnum) largestnum = floatabs(origin2[0]);
    if(floatabs(origin2[1])>largestnum) largestnum = floatabs(origin2[1]);

    origin2[0] /= largestnum;
    origin2[1] /= largestnum;

    if(velocity[0] <= 20.0 || velocity[1] <= 20.0)
        velocity[2] = random_float(200.0 , 275.0);
   
    return 1;
}

stock UTIL_PrecacheSpritesFromTxt(const szWeaponList[])
{
    new szTxtDir[64], szSprDir[64];
    new szFileData[128], szSprName[48], temp[1];

    format(szTxtDir, charsmax(szTxtDir), "sprites/%s.txt", szWeaponList);
    engfunc(EngFunc_PrecacheGeneric, szTxtDir);

    new iFile = fopen(szTxtDir, "rb");
    while(iFile && !feof(iFile))
    {
        fgets(iFile, szFileData, charsmax(szFileData));
        trim(szFileData);

        if(!strlen(szFileData))
            continue;

        new pos = containi(szFileData, "640");
        if(pos == -1)
            continue;
       
        format(szFileData, charsmax(szFileData), "%s", szFileData[pos+3]);  
        trim(szFileData);

        strtok(szFileData, szSprName, charsmax(szSprName), temp, charsmax(temp), ' ', 1);
        trim(szSprName);
   
        format(szSprDir, charsmax(szSprDir), "sprites/%s.spr", szSprName);
        engfunc(EngFunc_PrecacheGeneric, szSprDir);
    }

    if(iFile) fclose(iFile);
}

stock UTIL_WeapPickup(const pPlayer, const iId)
{
    message_begin(MSG_ONE, gl_iMsgID_WeapPickup, _, pPlayer);
    write_byte(iId);
    message_end();
}

stock UTIL_SetWeaponList(const pPlayer, const szWeaponName[], const iPrimaryAmmoID, const iPrimaryAmmoMaxAmount, const iSecondaryAmmoID, const iSecondaryAmmoMaxAmount, const iSlotID, const iNumberInSlot, const iWeaponID, const iFlags)
{
    message_begin(MSG_ONE, gl_iMsgID_Weaponlist, _, pPlayer);
    write_string(szWeaponName);
    write_byte(iPrimaryAmmoID);
    write_byte(iPrimaryAmmoMaxAmount);
    write_byte(iSecondaryAmmoID);
    write_byte(iSecondaryAmmoMaxAmount);
    write_byte(iSlotID);
    write_byte(iNumberInSlot);
    write_byte(iWeaponID);
    write_byte(iFlags);
    message_end();
}
Что я пытался сделать.....

1) Ставить функцию выдачи стартового ножа в client_connect:

Код:
public client_connect(id)
{
    get_knife1(id)
    g_has_knife1[id] = true
    g_has_knife2[id] = false
}

OR

public client_connect(id)
{
    if(is_user_alive(id))
    {
        get_knife1(id)
        g_has_knife1[id] = true
        g_has_knife2[id] = false
    }
}
2) Создавать public client_putinserver():
Код:
public client_putinserver(id)
{
get_knife1(id)
}

3)Дублировал элементы блока замены WeaponList(get_knife1) куда только можно:

Код:
    UTIL_WeapPickup(id, CSW_KNIFE);
    UTIL_SetWeaponList(id, weapon_weaponlist_balisong, -1, -1, -1, -1, 2, 1, CSW_KNIFE, 0);
4) Пытался через реапишный rg_remove_item(id, "weapon_knife)" удалять нож и чтобы игрок без ножа пользовался меню для его приобритение, но тогда плагин конфликтует с плагином меняющим режим игры из-за схожих функций инклюдов. На самом деле, хотел бы такую реализацию, но уж буду рад любой подсказке.


Прошу подсказок - как сделать, чтобы при спавне(сразу как только он выбрал команду) у игрока либо забирался нож, либо сразу менялся WeaponList.
 
Последнее редактирование:
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
А можно глянуть оригинал?
 
Сообщения
67
Реакции
18
Code_0xABC, конечно.


Код:
#include <amxmodx>
#include <fun>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>

#define PLUGIN_NAME         "[ZP]knife Menu"
#define PLUGIN_VERSION        "2.2"
#define PLUGIN_AUTHOR     "Mr.H"

new KNIFE1_V_MODEL[] = "models/zp_knife/Zdorov/v_Zdorov.mdl"
new KNIFE1_P_MODEL[] = "models/zp_knife/Zdorov/p_Zdorov.mdl"

new KNIFE2_V_MODEL[] = "models/zp_knife/CKopocTb/v_CKopocTb.mdl"
new KNIFE2_P_MODEL[] = "models/zp_knife/CKopocTb/p_CKopocTb.mdl"

new KNIFE3_V_MODEL[] = "models/zp_knife/Gravit/v_Gravit.mdl"
new KNIFE3_P_MODEL[] = "models/zp_knife/Gravit/p_Gravit.mdl"

new KNIFE4_V_MODEL[] = "models/zp_knife/Otbros/v_Otbros2.mdl"
new KNIFE4_P_MODEL[] = "models/zp_knife/Otbros/p_Otbros2.mdl"

new KNIFE5_V_MODEL[] = "models/zp_knife/Mega/v_Mega.mdl"
new KNIFE5_P_MODEL[] = "models/zp_knife/Mega/p_Mega.mdl"

new const knife1_sounds[][] =
{
    "knife/Zdorov/knife_draw.wav",
    "knife/Zdorov/knife_slash1.wav",
    "knife/Zdorov/knife_slash2.wav",
    "knife/Zdorov/knife_wall.wav",
    "knife/Zdorov/knife_miss.wav",
    "knife/Zdorov/knife_stab.wav"
}

new const knife2_sounds[][] =
{
    "knife/CKopocTb/knife_draw.wav",
    "knife/CKopocTb/knife_miss.wav",
    "knife/CKopocTb/knife_slash2.wav",
    "knife/CKopocTb/knife_wall.wav",
    "knife/CKopocTb/knife_slash1.wav",
    "knife/CKopocTb/knife_hit.wav"
}

new const knife3_sounds[][] =
{
    "knife/Gravit/knife_draw.wav",
    "knife/Gravit/knife_miss.wav",
    "knife/Gravit/knife_slash2.wav",
    "knife/Gravit/knife_wall.wav",
    "knife/Gravit/knife_slash1.wav",
    "knife/Gravit/knife_hit.wav"
}

new const knife4_sounds[][] =
{
    "knife/Otbros/knife_draw.wav",
    "knife/Otbros/knife_slash1.wav",
    "knife/Otbros/knife_slash2.wav",
    "knife/Otbros/knife_wall.wav",
    "knife/Otbros/knife_miss.wav",
    "knife/Otbros/knife_stab.wav"
}

new const knife5_sounds[][] =
{
    "knife/Mega/knife_draw.wav",
    "knife/Mega/knife_slash1.wav",
    "knife/Mega/knife_slash1.wav",
    "knife/Mega/knife_slash1.wav",
    "knife/Mega/knife_miss.wav",
    "knife/Mega/knife_stab.wav"
}

#define KNIFE1_HEALTH        100
#define KNIFE2_SPEED        270.0
#define KNIFE3_JUMP        350
#define KNIFE4_KNOCK        8.0

new g_maxplayers
new timer[33]

new bool:g_has_knife1[33], bool:g_has_knife2[33], bool:g_has_knife3[33], bool:g_has_knife4[33], bool:g_has_knife5[33]

public plugin_init()
{
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
    
    register_logevent("RoundStart", 2, "1=Round_Start")
    register_event("CurWeapon", "Event_Curweapon", "be", "1=1")
    
    register_forward(FM_EmitSound, "CEntity__EmitSound")
    register_forward(FM_PlayerPreThink, "fw_PlayerPreThink");
    RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage");
    
    g_maxplayers = get_maxplayers()
}

public plugin_precache()
{
    precache_model(KNIFE1_V_MODEL)
    precache_model(KNIFE1_P_MODEL)
    precache_model(KNIFE2_V_MODEL)
    precache_model(KNIFE2_P_MODEL)
    precache_model(KNIFE3_V_MODEL)
    precache_model(KNIFE3_P_MODEL)
    precache_model(KNIFE4_V_MODEL)
    precache_model(KNIFE4_P_MODEL)
    precache_model(KNIFE5_V_MODEL)
    precache_model(KNIFE5_P_MODEL)
    
    for(new i = 0; i < sizeof knife1_sounds; i++)
        precache_sound(knife1_sounds[i])

    for(new i = 0; i < sizeof knife2_sounds; i++)
        precache_sound(knife2_sounds[i])

    for(new i = 0; i < sizeof knife3_sounds; i++)
        precache_sound(knife3_sounds[i])

    for(new i = 0; i < sizeof knife4_sounds; i++)
        precache_sound(knife4_sounds[i])
                
    for(new i = 0; i < sizeof knife5_sounds; i++)
        precache_sound(knife5_sounds[i])
}

public RoundStart()
{
    for (new i = 1; i <= g_maxplayers; i++)
    {
        if(task_exists(i))
        {
            show_menu(i, 0, "^n", 1)
            remove_task(i)
        }
        if (!is_user_alive(i))
            continue;
        
        Knifes_Menu(i)
    }
}

public client_connect(id)
{
    g_has_knife1[id] = true     
    g_has_knife2[id] = false   
    g_has_knife3[id] = false
    g_has_knife4[id] = false
    g_has_knife5[id] = false
}

public client_disconnected(id)
{
    g_has_knife1[id] = false     
    g_has_knife2[id] = false   
    g_has_knife3[id] = false
    g_has_knife4[id] = false
    g_has_knife5[id] = false
}

public zp_user_infected_post(id)
{
    g_has_knife1[id] = false     
    g_has_knife2[id] = false   
    g_has_knife3[id] = false
    g_has_knife4[id] = false
    g_has_knife5[id] = false
}

public Knifes_Menu(id)
{
    timer[id] = 15
    
    set_task(1.0, "destroy_menu", id, _, _, "b")
    
    new menu = menu_create("Меню ножей: ", "menu_keys")
    
    menu_additem(menu, "\wРазор \d[+Здоровье]", "1", 0);
    menu_additem(menu, "\wКомбат \d[Скорость+10]", "2", 0);
    menu_additem(menu, "\wКатана \d[+350 Грава]", "3", 0);
    menu_additem(menu, "\wСтронг \d[Отброс]", "4", 0);
    menu_additem(menu, "\wМега Кувалба \d[Всё вместе]", "5", 0);
    
    menu_display( id, menu, 0 );
    return PLUGIN_HANDLED
}

public destroy_menu(id)
{
    if (timer[id])
    {
        new text_timer[64]
        
        formatex(text_timer, charsmax(text_timer), "Меню закроется через %d секунд", timer[id])
      
        set_hudmessage(255, 255, 255, -1.0, -1.0, 0, 0.0, 1.0, 1.0, 1.0)
        show_hudmessage(id, text_timer)
        
        --timer[id]
    }
    else
    {
        remove_task(id)
        show_menu(id, 0, "^n", 1)
    }
}

public menu_keys(id, menu, item)
{
    if(item < 0)
        return PLUGIN_CONTINUE
        
    new cmd[2];
    new access, callback;
    menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);
    new choice = str_to_num(cmd)
        
    switch (choice)
    {
        case 1:
        {
            buy_knife1(id)
        }
        case 2:
        {
            if (zp_get_user_zombie(id))
                return PLUGIN_HANDLED;
                
            buy_knife2(id)
        }
        case 3:
        {
            buy_knife3(id)
        }
        case 4:
        {       
            buy_knife4(id)
        }
        case 5:
        {   
            if (get_user_flags(id) & ADMIN_LEVEL_H)   
                buy_knife5(id)
            else
                Knifes_Menu(id)
        }   
    }
    
    emit_sound(id, CHAN_BODY, "items/gunpickup2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
    
    remove_task(id)
    return PLUGIN_HANDLED;
}

public buy_knife1(id)
{
    g_has_knife1[id] = true     
    g_has_knife2[id] = false   
    g_has_knife3[id] = false
    g_has_knife4[id] = false
    g_has_knife5[id] = false
    
    set_user_health(id, get_user_health(id) + KNIFE1_HEALTH)
}

public buy_knife2(id)
{
    g_has_knife1[id] = false     
    g_has_knife2[id] = true   
    g_has_knife3[id] = false
    g_has_knife4[id] = false
    g_has_knife5[id] = false
}

public buy_knife3(id)
{
    g_has_knife1[id] = false     
    g_has_knife2[id] = false   
    g_has_knife3[id] = true
    g_has_knife4[id] = false
    g_has_knife5[id] = false
}

public buy_knife4(id)
{
    g_has_knife1[id] = false     
    g_has_knife2[id] = false   
    g_has_knife3[id] = false
    g_has_knife4[id] = true
    g_has_knife5[id] = false
}

public buy_knife5(id)
{
    g_has_knife1[id] = false     
    g_has_knife2[id] = false   
    g_has_knife3[id] = false
    g_has_knife4[id] = false
    g_has_knife5[id] = true
    
    set_user_health(id, get_user_health(id) + KNIFE1_HEALTH)
}

public Event_Curweapon(id)
{
    if(get_user_weapon(id) != CSW_KNIFE)
        return;
    
    if (g_has_knife1[id])
    {
        set_pev(id, pev_viewmodel2, KNIFE1_V_MODEL)
        set_pev(id, pev_weaponmodel2, KNIFE1_P_MODEL)
    }
    else if (g_has_knife2[id])
    {
        set_pev(id, pev_viewmodel2, KNIFE2_V_MODEL)
        set_pev(id, pev_weaponmodel2, KNIFE2_P_MODEL)
    }
    else if (g_has_knife3[id])
    {
        set_pev(id, pev_viewmodel2, KNIFE3_V_MODEL)
        set_pev(id, pev_weaponmodel2, KNIFE3_P_MODEL)
    }
    else if (g_has_knife4[id])
    {
        set_pev(id, pev_viewmodel2, KNIFE4_V_MODEL)
        set_pev(id, pev_weaponmodel2, KNIFE4_P_MODEL)
    }
    else if (g_has_knife5[id])
    {
        set_pev(id, pev_viewmodel2, KNIFE5_V_MODEL)
        set_pev(id, pev_weaponmodel2, KNIFE5_P_MODEL)
    }
        
    return;
}

public CEntity__EmitSound(id, channel, const sample[], Float:volume, Float:attn, flags, pitch)
{
    if (!is_user_connected(id))
        return HAM_IGNORED
    
    if (sample[8] == 'k' && sample[9] == 'n' && sample[10] == 'i')
    {   
        if (sample[14] == 'd')
        {
            if(g_has_knife1[id])
                emit_sound(id, channel, knife1_sounds[0], volume, attn, flags, pitch)
            if(g_has_knife2[id])
                emit_sound(id, channel, knife2_sounds[0], volume, attn, flags, pitch)
            if(g_has_knife3[id])
                emit_sound(id, channel, knife3_sounds[0], volume, attn, flags, pitch)
            if(g_has_knife4[id])
                emit_sound(id, channel, knife4_sounds[0], volume, attn, flags, pitch)   
            if(g_has_knife5[id])
                emit_sound(id, channel, knife5_sounds[0], volume, attn, flags, pitch)
        }
        else if (sample[14] == 'h')
        {
            if (sample[17] == 'w')
            {
                if(g_has_knife1[id])
                    emit_sound(id, channel, knife1_sounds[3], volume, attn, flags, pitch)
                if(g_has_knife2[id])
                    emit_sound(id, channel, knife2_sounds[3], volume, attn, flags, pitch)
                if(g_has_knife3[id])
                    emit_sound(id, channel, knife3_sounds[3], volume, attn, flags, pitch)
                if(g_has_knife4[id])
                    emit_sound(id, channel, knife4_sounds[3], volume, attn, flags, pitch)
                if(g_has_knife5[id] )
                    emit_sound(id, channel, knife5_sounds[3], volume, attn, flags, pitch)
            }
            else
            {
                if(g_has_knife1[id])
                    emit_sound(id, channel, knife1_sounds[random_num(1,2)], volume, attn, flags, pitch)
                if(g_has_knife2[id])
                    emit_sound(id, channel, knife2_sounds[random_num(1,2)], volume, attn, flags, pitch)
                if(g_has_knife3[id])
                    emit_sound(id, channel, knife3_sounds[random_num(1,2)], volume, attn, flags, pitch)
                if(g_has_knife4[id])
                    emit_sound(id, channel, knife4_sounds[random_num(1,2)], volume, attn, flags, pitch)
                if(g_has_knife5[id])
                    emit_sound(id, channel, knife5_sounds[random_num(1,2)], volume, attn, flags, pitch)
            }
        }
        else
        {
            if (sample[15] == 'l')
            {
                if(g_has_knife1[id])
                    emit_sound(id, channel, knife1_sounds[4], volume, attn, flags, pitch)
                if(g_has_knife2[id])
                    emit_sound(id, channel, knife2_sounds[4], volume, attn, flags, pitch)
                if(g_has_knife3[id])
                    emit_sound(id, channel, knife3_sounds[4], volume, attn, flags, pitch)
                if(g_has_knife4[id])
                    emit_sound(id, channel, knife4_sounds[4], volume, attn, flags, pitch)
                if(g_has_knife5[id])
                    emit_sound(id, channel, knife5_sounds[4], volume, attn, flags, pitch)
            }
            else
            {
                if(g_has_knife1[id])
                    emit_sound(id, channel, knife1_sounds[5], volume, attn, flags, pitch)
                if(g_has_knife2[id] )
                    emit_sound(id, channel, knife2_sounds[5], volume, attn, flags, pitch)
                if(g_has_knife3[id] )
                    emit_sound(id, channel, knife3_sounds[5], volume, attn, flags, pitch)
                if(g_has_knife4[id])
                    emit_sound(id, channel, knife4_sounds[5], volume, attn, flags, pitch)
                if(g_has_knife5[id])
                    emit_sound(id, channel, knife5_sounds[5], volume, attn, flags, pitch)
            }
        }
        return HAM_SUPERCEDE
    }
    return HAM_IGNORED
}

public fw_PlayerPreThink(id)
{
    if(!is_user_alive(id))
        return FMRES_IGNORED

    new temp[2], weapon = get_user_weapon(id, temp[0], temp[1])

    if (weapon == CSW_KNIFE && (g_has_knife2[id] || g_has_knife5[id]))
    {
        set_user_maxspeed(id, KNIFE2_SPEED)
    }     
    
    if(weapon == CSW_KNIFE && (g_has_knife3[id] || g_has_knife5[id]))
    {
        if ((pev(id, pev_button) & IN_JUMP) && !(pev(id, pev_oldbuttons) & IN_JUMP))
        {
            new flags = pev(id, pev_flags)
            new waterlvl = pev(id, pev_waterlevel)
                        
            if (!(flags & FL_ONGROUND))
                return FMRES_IGNORED
                
            if (flags & FL_WATERJUMP)
                return FMRES_IGNORED

            if (waterlvl > 1)
                return FMRES_IGNORED
                    
            new Float:fVelocity[3]
            pev(id, pev_velocity, fVelocity)
                        
            fVelocity[2] += KNIFE3_JUMP
                        
            set_pev(id, pev_velocity, fVelocity)
            set_pev(id, pev_gaitsequence, 6)
        }       
    }
    return FMRES_IGNORED
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
    if(!is_user_connected(attacker))
        return HAM_IGNORED
        
    new temp[2], weapon = get_user_weapon(attacker, temp[0], temp[1])
    
    if(weapon == CSW_KNIFE && (g_has_knife4[attacker] || g_has_knife5[attacker]))
    {
        new Float:vec[3];
        new Float:oldvelo[3];
        pev(victim, pev_velocity, oldvelo);
        create_velocity_vector(victim , attacker , vec);
        vec[0] += oldvelo[0] + KNIFE4_KNOCK
        vec[1] += oldvelo[1] + 0;
        set_pev(victim, pev_velocity, vec);   
    }
    return HAM_IGNORED
}

stock create_velocity_vector(victim,attacker,Float:velocity[3])
{
    if(!is_user_alive(attacker))
        return 0;

    new Float:vicorigin[3];
    new Float:attorigin[3];
    pev(victim, pev_origin , vicorigin);
    pev(attacker, pev_origin , attorigin);

    new Float:origin2[3]
    origin2[0] = vicorigin[0] - attorigin[0];
    origin2[1] = vicorigin[1] - attorigin[1];

    new Float:largestnum = 0.0;

    if(floatabs(origin2[0])>largestnum) largestnum = floatabs(origin2[0]);
    if(floatabs(origin2[1])>largestnum) largestnum = floatabs(origin2[1]);

    origin2[0] /= largestnum;
    origin2[1] /= largestnum;
        
    if (g_has_knife4[attacker] || g_has_knife5[attacker])
    {
        velocity[0] = ( origin2[0] * KNIFE4_KNOCK * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
        velocity[1] = ( origin2[1] * KNIFE4_KNOCK * 10000 ) / floatround(get_distance_f(vicorigin, attorigin));
    }
    
    if(velocity[0] <= 20.0 || velocity[1] <= 20.0)
        velocity[2] = random_float(200.0 , 275.0);
        
    return 1;
}
 
Сообщения
67
Реакции
18
Хотя похоже это не самая последняя его версия, я не помню, чтобы добавлял:


Код:
new gl_iszAllocString_KnifeUID;

#define m_rpgPlayerItems 367

#define PDATA_SAFE 2

#define IsValidEntity(%1) (pev_valid(%1) == PDATA_SAFE)
#define IsCustomItem(%1) (pev(%1, pev_impulse) == gl_iszAllocString_KnifeUID)

#define linux_diff_player 5
Но выше 2.2 версий не нашёл. Сам плагин давно у меня лежал на складе переделок (где-то с года полтора)

UPD: Хотя чёт функция delete_user_knife(), где часть вышеперечисленного используется, навевает воспоминания как я уже боролся с этой проблемой, короче хз)
 
Последнее редактирование:
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
R1ner, докинь остальные все файлы, кроме звуков
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
да и модели и если тебе нужно дать нож при спавне игрока, то используй Ham_Spawn
 
Последнее редактирование:
Сообщения
67
Реакции
18
Хорошо, завтра попробую, сейчас уже спать пора, завтра ворк(
Один вопрос - как модели могут влиять на данную проблему?
 

Вложения

Сообщения
67
Реакции
18
Code_0xABC, спасибо, разобрался, теперь работает.
Один только момент, я хочу чтобы он выдавал этот нож только после выбора команды игроком, а сейчас он выдаёт каждый новый раунд этот ноженций. Попытался вставить условие - он его почему-то не читает.


Код:
public plugin_init()
{
RegisterHam(Ham_Spawn, "player", "PlayerSpawn", 1);
}

public PlayerSpawn(id)
{
    //Условие, чтобы выдавалось только один раз - проверка на наличие какого-либо ножа(почему то не работает)
    if(!g_has_knife1[id] || !g_has_knife2[id])
        get_knife2(id)
}
Полагаю, нужно добавить return HAM_IGNORED, но чёт при таком варианте ничего не меняется:

Код:
public PlayerSpawn(id)
{
    //Условие, чтобы выдавалось только один раз - проверка на наличие какого-либо ножа(почему то не работает)
    if(!g_has_knife1[id] || !g_has_knife2[id])
        get_knife2(id)
    return HAM_IGNORED
}
А при таком, вообще весь блок не будет работать:
Код:
public PlayerSpawn(id)
{
    //Условие, чтобы выдавалось только один раз - проверка на наличие какого-либо ножа(почему то не работает)

    if(!g_has_knife1[id] || !g_has_knife2[id])
        get_knife2(id)
    else
        return HAM_IGNORED
}
У меня синтаксическая ошибка?
 
Последнее редактирование:
Сообщения
67
Реакции
18
Отбой, сам разобрался)
По сути ответ был в блоке fw_TakeDamage

Код:
public PlayerSpawn(id)
{
    //Условие, чтобы выдавалось только один раз - проверка на наличие какого-либо ножа
    new weapon = get_user_weapon(id)
    if(weapon != CSW_KNIFE && (!g_has_knife1[id] || !g_has_knife2[id]))
        get_knife2(id)
}
Но мне всё же интересно почему не отрабатывался вариант(без проверки наличия у игрока ножа, ведь и так понятно что он у него будет):
Код:
   if(!g_has_knife1[id] || !g_has_knife2[id])
        get_knife2(id)
По сути же игрок если выберет другой нож, у него будет g_has_knife1 = True, что противоречит условию !g_has_knife1[id], почему же всё равно он пропускает условие как верное и переходит к выдаче базового ножа - get_knife2(id)?
 
Последнее редактирование:
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
R1ner,
get_user_weapon Функция получает id оружия игрока ( в руках), это раз.
Я не понимаю твою задумку, это два
 
Сообщения
67
Реакции
18
Code_0xABC, я хотел чтобы помимо смены спрайта ножа при спавне, в следующем раунде, если игрок выбирает другой нож, ему не бросало снова дефолтный каждый новый раунд и пытался реализовать условие - но я ещё накосячил с оператором(перепутал И(&&) и ИЛИ(||), но в общем теперь всё работает в реализации сообщением выше)
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
В твоем случае, проверять на то что в руках у игрока не нужно, так как в любом случае, в руках ножа не будет
 
Сообщения
67
Реакции
18
Code_0xABC, таак, теперь дошло...
Да, всё решается гораздо проще, протестировал - работает.
Странно, вроде уже так пытался, видимо в куче разных правок, запутался.

Итоговый вариант блока:

Код:
public PlayerSpawn(id)
{
if(!g_has_knife1[id] && !g_has_knife2[id])
        get_knife2(id)
}

Спасибо за подсказки)
 
Сообщения
67
Реакции
18
Code_0xABC, ошибся я короче, эта кс играет со мной злые шутки, сначала всё работало, рестартнул сервер ещё раз - перестали работать новые иконки ножей т.е. вариант всё же не работает:

Код:
public PlayerSpawn(id)
{
if(!g_has_knife1[id] && !g_has_knife2[id])
        get_knife2(id)
}
Поэтому прикладываю прежний, нецелевой, но с которым по сути работает.
Код:
#include <amxmodx>
#include <fun>
#include <fakemeta>
#include <hamsandwich>
#include <amxmisc>
#include <xs>
#include <zmb>

#define PLUGIN_NAME         "Knifes Remake from [ZP] by Classic"
#define PLUGIN_VERSION        "2.3"
#define PLUGIN_AUTHOR         "Core Author - Mr.H, Edited - R1ner"

new gl_iszAllocString_KnifeUID;

#define m_rpgPlayerItems 367

#define PDATA_SAFE 2

#define IsValidEntity(%1) (pev_valid(%1) == PDATA_SAFE)
#define IsCustomItem(%1) (pev(%1, pev_impulse) == gl_iszAllocString_KnifeUID)

#define linux_diff_player 5


new KNIFE1_V_MODEL[] = "models/cso/knifes/balisong/v_balisong.mdl"
new KNIFE1_P_MODEL[] = "models/cso/knifes/balisong/p_balisong.mdl"

new KNIFE2_V_MODEL[] = "models/cso/knifes/huntsman/v_huntsman.mdl"
new KNIFE2_P_MODEL[] = "models/cso/knifes/huntsman/p_huntsman.mdl"

new const WEAPON_REFERENCE[] = "weapon_knife";

new gl_iMsgID_WeapPickup, gl_iMsgID_Weaponlist;

new const weapon_weaponlist_balisong[] = "weapon_balisong_knife",
    weapon_weaponlist_huntsman[] = "weapon_huntsman_knife";




new const knife1_sounds[][] =
{
    "cso/knifes/balisong/balisong_deploy.wav",
    "cso/knifes/balisong/balisong_hit.wav",
    "cso/knifes/balisong/balisong_hitwall.wav",
    "cso/knifes/balisong/balisong_slash.wav",
    "cso/knifes/balisong/balisong_stab.wav"
}

new const knife2_sounds[][] =
{
    "cso/knifes/combat/combat_deploy.wav",
    "cso/knifes/combat/combat_hit.wav",
    "cso/knifes/combat/combat_hitwall.wav",
    "cso/knifes/combat/combat_slash.wav",
    "cso/knifes/combat/combat_stab.wav"
}


#define KNIFE6_KNOCK     2.0

new used_num[33]

new bool:g_has_knife1[33], bool:g_has_knife2[33]

public plugin_init()
{
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
   
    register_event("CurWeapon", "Event_Curweapon", "be", "1=1")
    register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
   
    register_clcmd("bio_wolves_knifes", "wolves_knife_menu")
   
    register_forward(FM_EmitSound, "CEntity__EmitSound")
    RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage");
    RegisterHam(Ham_Spawn, "player", "PlayerSpawn", 1);

    gl_iMsgID_WeapPickup = get_user_msgid("WeapPickup");
    gl_iMsgID_Weaponlist = get_user_msgid("WeaponList");
}

public plugin_precache()
{
    precache_model(KNIFE1_V_MODEL)
    precache_model(KNIFE1_P_MODEL)
    precache_model(KNIFE2_V_MODEL)
    precache_model(KNIFE2_P_MODEL)
   
    for(new i = 0; i < sizeof knife1_sounds; i++)
        precache_sound(knife1_sounds[i])

    for(new i = 0; i < sizeof knife2_sounds; i++)
        precache_sound(knife2_sounds[i])

    register_clcmd(weapon_weaponlist_huntsman, "Command_HookWeapon");
    register_clcmd(weapon_weaponlist_balisong, "Command_HookWeapon");

    UTIL_PrecacheSpritesFromTxt(weapon_weaponlist_huntsman);
    UTIL_PrecacheSpritesFromTxt(weapon_weaponlist_balisong);
   
}

public Command_HookWeapon(const pPlayer)
{
    engclient_cmd(pPlayer, WEAPON_REFERENCE);
    return PLUGIN_HANDLED;
}

public event_round_start()
{  
    for(new i = 0; i < 33; i++)
    {
        used_num[i] = 0;
    }
}

public client_connect(id)
{  
    g_has_knife1[id] = false  
    g_has_knife2[id] = false  
}

public client_disconnected(id)
{
    g_has_knife1[id] = false    
    g_has_knife2[id] = false  
}

public PlayerSpawn(id)
{
    new weapon = get_user_weapon(id)
    if(weapon != CSW_KNIFE && (!g_has_knife1[id] || !g_has_knife2[id]))
        get_knife2(id)
}

public wolves_knife_menu(id)
{  
    new menu = menu_create("Меню ножей: ", "menu_keys")
    menu_additem(menu, "\wНож-бабочка", "1", 0);
    menu_additem(menu, "\wКомбат", "2", 0);
    menu_setprop(menu, MPROP_EXITNAME, "Выход")
    menu_setprop(menu, MPROP_EXIT,MEXIT_ALL)
    menu_display( id, menu, 0 );
    return PLUGIN_HANDLED
}

public menu_keys(id, menu, item)
{  
    if(item == MENU_EXIT)
    {
        menu_destroy(menu)
        return PLUGIN_HANDLED
    }
    if(item < 0)
        return PLUGIN_CONTINUE
    new cmd[2];
    new access, callback;
    menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);
    new choice = str_to_num(cmd)
       
    switch (choice)
    {
        case 1:
        {
            get_knife1(id)
        }
        case 2:
        {      
            get_knife2(id)
        }
    }
   
    emit_sound(id, CHAN_BODY, "items/gunpickup2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
   
    remove_task(id)
    return PLUGIN_HANDLED;
}

public get_knife1(id)
{
    g_has_knife1[id] = true    
    g_has_knife2[id] = false  
    UTIL_WeapPickup(id, CSW_KNIFE);
    UTIL_SetWeaponList(id, weapon_weaponlist_balisong, -1, -1, -1, -1, 2, 1, CSW_KNIFE, 0);
   
}

public get_knife2(id)
{  
    g_has_knife1[id] = false    
    g_has_knife2[id] = true
    UTIL_WeapPickup(id, CSW_KNIFE);
    UTIL_SetWeaponList(id, weapon_weaponlist_huntsman, -1, -1, -1, -1, 2, 1, CSW_KNIFE, 0);
}

public delete_user_knife(id)
{
    static pKnife; pKnife = get_pdata_cbase(id, m_rpgPlayerItems + 3, linux_diff_player);
    if(IsValidEntity(pKnife) && IsCustomItem(pKnife))
    {
        set_pev(pKnife, pev_impulse, 0);
    }
}


public Event_Curweapon(id)
{
    // if (is_user_zombie(id))
    // {  
    //     delete_user_knife(id)
    //     // set_pev(id, pev_weaponmodel2, ZMCLAW_P_MODEL)
    //     return;
    // }
       
    if(get_user_weapon(id) != CSW_KNIFE)
        return;
   
    if (g_has_knife1[id])
    {
        set_pev(id, pev_viewmodel2, KNIFE1_V_MODEL)
        set_pev(id, pev_weaponmodel2, KNIFE1_P_MODEL)
    }
    if (g_has_knife2[id])
    {
        set_pev(id, pev_viewmodel2, KNIFE2_V_MODEL)
        set_pev(id, pev_weaponmodel2, KNIFE2_P_MODEL)
    }
}

public CEntity__EmitSound(id, channel, const sample[], Float:volume, Float:attn, flags, pitch)
{
    if (!is_user_connected(id))
        return HAM_IGNORED
   
    if (sample[8] == 'k' && sample[9] == 'n' && sample[10] == 'i')
    {  
        if (sample[14] == 'd')
        {
            if(g_has_knife1[id])
                emit_sound(id, channel, knife1_sounds[0], volume, attn, flags, pitch)
            if(g_has_knife2[id])
                emit_sound(id, channel, knife2_sounds[0], volume, attn, flags, pitch)
        }
        else if (sample[14] == 'h')
        {
            if (sample[17] == 'w')
            {
                if(g_has_knife1[id])
                    emit_sound(id, channel, knife1_sounds[2], volume, attn, flags, pitch)
                if(g_has_knife2[id])
                    emit_sound(id, channel, knife2_sounds[2], volume, attn, flags, pitch)
            }
            else
            {
                if(g_has_knife1[id])
                    emit_sound(id, channel, knife1_sounds[1], volume, attn, flags, pitch)
                if(g_has_knife2[id])
                    emit_sound(id, channel, knife2_sounds[1], volume, attn, flags, pitch)
            }
        }
        else
        {
            if (sample[15] == 'l')
            {
                if(g_has_knife1[id])
                    emit_sound(id, channel, knife1_sounds[3], volume, attn, flags, pitch)
                if(g_has_knife2[id])
                    emit_sound(id, channel, knife2_sounds[3], volume, attn, flags, pitch)
            }
            else
            {
                if(g_has_knife1[id])
                    emit_sound(id, channel, knife1_sounds[4], volume, attn, flags, pitch)
                if(g_has_knife2[id] )
                    emit_sound(id, channel, knife2_sounds[4], volume, attn, flags, pitch)
            }
        }
        return HAM_SUPERCEDE
    }
    return HAM_IGNORED
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
    if(!is_user_connected(attacker))
        return HAM_IGNORED
       
    new temp[2], weapon = get_user_weapon(attacker, temp[0], temp[1])

    if(weapon == CSW_KNIFE && (g_has_knife1[attacker] || g_has_knife2[attacker]))
    {
        SetHamParamFloat(4, damage * 1000.0)
    }
   
    return HAM_IGNORED
}

stock create_velocity_vector(victim,attacker,Float:velocity[3])
{
    if(!is_user_alive(attacker))
        return 0;

    new Float:vicorigin[3];
    new Float:attorigin[3];
    pev(victim, pev_origin , vicorigin);
    pev(attacker, pev_origin , attorigin);

    new Float:origin2[3]
    origin2[0] = vicorigin[0] - attorigin[0];
    origin2[1] = vicorigin[1] - attorigin[1];

    new Float:largestnum = 0.0;

    if(floatabs(origin2[0])>largestnum) largestnum = floatabs(origin2[0]);
    if(floatabs(origin2[1])>largestnum) largestnum = floatabs(origin2[1]);

    origin2[0] /= largestnum;
    origin2[1] /= largestnum;
   
    if(velocity[0] <= 20.0 || velocity[1] <= 20.0)
        velocity[2] = random_float(200.0 , 275.0);
       
    return 1;
}

stock UTIL_PrecacheSpritesFromTxt(const szWeaponList[])
{
    new szTxtDir[64], szSprDir[64];
    new szFileData[128], szSprName[48], temp[1];

    format(szTxtDir, charsmax(szTxtDir), "sprites/%s.txt", szWeaponList);
    engfunc(EngFunc_PrecacheGeneric, szTxtDir);

    new iFile = fopen(szTxtDir, "rb");
    while(iFile && !feof(iFile))
    {
        fgets(iFile, szFileData, charsmax(szFileData));
        trim(szFileData);

        if(!strlen(szFileData))
            continue;

        new pos = containi(szFileData, "640");  
        if(pos == -1)
            continue;
           
        format(szFileData, charsmax(szFileData), "%s", szFileData[pos+3]);      
        trim(szFileData);

        strtok(szFileData, szSprName, charsmax(szSprName), temp, charsmax(temp), ' ', 1);
        trim(szSprName);
       
        format(szSprDir, charsmax(szSprDir), "sprites/%s.spr", szSprName);
        engfunc(EngFunc_PrecacheGeneric, szSprDir);
    }

    if(iFile) fclose(iFile);
}

stock UTIL_WeapPickup(const pPlayer, const iId)
{
    message_begin(MSG_ONE, gl_iMsgID_WeapPickup, _, pPlayer);
    write_byte(iId);
    message_end();
}

stock UTIL_SetWeaponList(const pPlayer, const szWeaponName[], const iPrimaryAmmoID, const iPrimaryAmmoMaxAmount, const iSecondaryAmmoID, const iSecondaryAmmoMaxAmount, const iSlotID, const iNumberInSlot, const iWeaponID, const iFlags)
{
    message_begin(MSG_ONE, gl_iMsgID_Weaponlist, _, pPlayer);
    write_string(szWeaponName);
    write_byte(iPrimaryAmmoID);
    write_byte(iPrimaryAmmoMaxAmount);
    write_byte(iSecondaryAmmoID);
    write_byte(iSecondaryAmmoMaxAmount);
    write_byte(iSlotID);
    write_byte(iNumberInSlot);
    write_byte(iWeaponID);
    write_byte(iFlags);
    message_end();
}
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу