Как сделать отдельный нож для снайпера? - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: [CM]OlegEhtler, Getbackthere, Phoenixxx_Czar  
Как сделать отдельный нож для снайпера?
revcrew Дата: Вторник, 17.01.2017, 18:24 | Сообщение # 1
Новичок
Сообщений: 1
Статус: Offline
Хотел сделать ещё отдельной нож для Снайпера. Но не получилось smile
Можете помочь?

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

#define KNIFE_NAME                    ARRAY_knife_name[knife]
#define KNIFE_DESC                    ARRAY_knife_desc[knife]
#define KNIFE_SPEED                    ARRAY_knife_speed[knife]
#define KNIFE_GRAV                    ARRAY_knife_grav[knife]
#define KNIFE_JUMP                    ARRAY_knife_jump[knife]
#define KNIFE_KNOCK                    ARRAY_knife_knock[knife]
#define KNIFE_DMG                    ARRAY_knife_dmg[knife]
#define KNIFE_PRIMATTRATE                        ARRAY_knife_primattrate[knife]
#define KNIFE_SECATTRATE                        ARRAY_knife_secattrate[knife]
#define KNIFE_FLAGS                    ARRAY_knife_flags[knife]
#define KNIFE_HITSOUNDS                            ARRAY_knife_hitsounds[knife]
#define KNIFE_SLASHSOUNDS                        ARRAY_knife_slashsounds[knife]
#define KNIFE_MODEL_V                            ARRAY_knife_model_v[knife]
#define KNIFE_MODEL_P                            ARRAY_knife_model_p[knife]
#define KNIFE_SOUND_DEPLOY                        ARRAY_knife_sound_deploy[knife]
#define KNIFE_SOUND_HIT(%1)                        ARRAY_knife_sound_hit[knife][%1]
#define KNIFE_SOUND_HITWALL                        ARRAY_knife_sound_hitwall[knife]
#define KNIFE_SOUND_SLASH(%1)                    ARRAY_knife_sound_slash[knife][%1]
#define KNIFE_SOUND_STAB                        ARRAY_knife_sound_stab[knife]
#define KNIFE_SAVED_AUTHID                        ARRAY_knife_saved_authid[i]
#define KNIFE_SAVED_ID                            ARRAY_knife_saved_id[i]
#define KNIFES_TOTAL                            INT_knifes_total
#define KNIFES_TOTAL_SAVED                        INT_knifes_total_saved
#define KNIFE_SURV                    INT_knife_surv
#define KNIFE_USER(%1)                            PSZ_knife{%1}

#define KNIFE_SURVIVOR                            9

#define USE_STOPPED                    0

#define m_pPlayer                    41
#define m_flNextPrimaryAttack                    46
#define m_flNextSecondaryAttack                    47

#define m_pActiveItem                            373

#define LINUXDIFF                    5
#define LINUXDIFFWEAP                            4

#define get_user_weapon_entity(%1)                get_pdata_cbase(%1, m_pActiveItem, LINUXDIFF)
#define get_weapon_owner(%1)                    get_pdata_cbase(%1, m_pPlayer, LINUXDIFFWEAP)
#define get_weapon_nextprimatt(%1)                get_pdata_float(%1, m_flNextPrimaryAttack, LINUXDIFFWEAP)
#define get_weapon_nextsecatt(%1)                get_pdata_float(%1, m_flNextSecondaryAttack, LINUXDIFFWEAP)
#define set_weapon_nextprimatt(%1,%2)            set_pdata_float(%1, m_flNextPrimaryAttack, %2, LINUXDIFFWEAP)
#define set_weapon_nextsecatt(%1,%2)            set_pdata_float(%1, m_flNextSecondaryAttack, %2, LINUXDIFFWEAP)

#define register_menu(%1,%2,%3)                    register_menucmd(register_menuid(%1), %2, %3)

#define MENU_KNIFES_KEYS                        MENU_KEY_1 | MENU_KEY_2 | MENU_KEY_3 | MENU_KEY_4 | MENU_KEY_5 | MENU_KEY_6 | MENU_KEY_7 | MENU_KEY_8 | MENU_KEY_9 | MENU_KEY_0
#define MENU_KNIFES                    "/knife"

new PSZ_knife[33 char]

new Float:ARRAY_knife_speed[10]
new Float:ARRAY_knife_grav[10]
new Float:ARRAY_knife_jump[10]
new Float:ARRAY_knife_knock[10]
new Float:ARRAY_knife_dmg[10]
new Float:ARRAY_knife_primattrate[10]
new Float:ARRAY_knife_secattrate[10]
new ARRAY_knife_flags[10]
new ARRAY_knife_hitsounds[10]
new ARRAY_knife_slashsounds[10]
new ARRAY_knife_name[10][64]
new ARRAY_knife_desc[10][64]
new ARRAY_knife_model_v[10][64]
new ARRAY_knife_model_p[10][64]
new ARRAY_knife_sound_deploy[10][64]
new ARRAY_knife_sound_hit[10][4][64]
new ARRAY_knife_sound_hitwall[10][64]
new ARRAY_knife_sound_slash[10][2][64]
new ARRAY_knife_sound_stab[10][64]
new ARRAY_knife_saved_authid[1024][32]
new ARRAY_knife_saved_id[1024]

new INT_knifes_total
new INT_knifes_total_saved
new INT_knife_surv

new Float:FL_gravity
new Float:FL_gravity_surv

public plugin_precache()
{
    register_srvcmd("register_knife", "SRVCMD__register_knife")
    
    server_cmd("exec addons/amxmodx/configs/cso_knifes.cfg")
    server_exec()
}

public SRVCMD__register_knife()
{
    new data[17][64]
    read_argv(1, data[0], 63)
    read_argv(2, data[1], 63)
    read_argv(3, data[2], 63)
    read_argv(4, data[3], 63)
    read_argv(5, data[4], 63)
    read_argv(6, data[5], 63)
    read_argv(7, data[6], 63)
    read_argv(8, data[7], 63)
    read_argv(9, data[8], 63)
    read_argv(10, data[9], 63)
    read_argv(11, data[10], 63)
    read_argv(12, data[11], 63)
    read_argv(13, data[12], 63)
    read_argv(14, data[13], 63)
    read_argv(15, data[14], 63)
    read_argv(16, data[15], 63)
    read_argv(17, data[16], 63)
    
    for (new i = 0; i < 17; i++) remove_quotes(data[i])
    
    new knife
    (data[9][0] == 'S') ? (knife = KNIFE_SURVIVOR) : (knife = KNIFES_TOTAL)
    
    formatex(KNIFE_NAME, 63, data[0])
    formatex(KNIFE_DESC, 63, data[1])
    KNIFE_SPEED = floatstr(data[2])
    KNIFE_GRAV = floatstr(data[3])
    KNIFE_JUMP = floatstr(data[4])
    KNIFE_KNOCK = floatstr(data[5])
    KNIFE_DMG = floatstr(data[6])
    KNIFE_PRIMATTRATE = floatstr(data[7])
    KNIFE_SECATTRATE = floatstr(data[8])
    if (data[9][0] > 0 && knife != KNIFE_SURVIVOR) KNIFE_FLAGS = read_flags(data[9])
    
    formatex(KNIFE_MODEL_V, 63, data[10])
    precache_model(KNIFE_MODEL_V)
    formatex(KNIFE_MODEL_P, 63, data[11])
    precache_model(KNIFE_MODEL_P)
    formatex(KNIFE_SOUND_DEPLOY, 63, data[12])
    precache_sound(KNIFE_SOUND_DEPLOY)
    if (containi(data[13], ",") != -1)
    {
        KNIFE_HITSOUNDS = 2
        strtok(data[13], KNIFE_SOUND_HIT(0), 63, KNIFE_SOUND_HIT(1), 63, ',')
        precache_sound(KNIFE_SOUND_HIT(0))
        precache_sound(KNIFE_SOUND_HIT(1))
    }
    else
    {
        KNIFE_HITSOUNDS = 1
        formatex(KNIFE_SOUND_HIT(0), 63, data[13])
        precache_sound(KNIFE_SOUND_HIT(0))
    }
    formatex(KNIFE_SOUND_HITWALL, 63, data[14])
    precache_sound(KNIFE_SOUND_HITWALL)
    if (containi(data[15], ",") != -1)
    {
        KNIFE_SLASHSOUNDS = 2
        strtok(data[15], KNIFE_SOUND_SLASH(0), 63, KNIFE_SOUND_SLASH(1), 63, ',')
        precache_sound(KNIFE_SOUND_SLASH(0))
        precache_sound(KNIFE_SOUND_SLASH(1))
    }
    else
    {
        KNIFE_SLASHSOUNDS = 1
        formatex(KNIFE_SOUND_SLASH(0), 63, data[15])
        precache_sound(KNIFE_SOUND_SLASH(0))
    }
    formatex(KNIFE_SOUND_STAB, 63, data[16])
    precache_sound(KNIFE_SOUND_STAB)
    
    if (knife != KNIFE_SURVIVOR) KNIFES_TOTAL++
    else KNIFE_SURV = 1
}

public plugin_init()
{
    register_plugin("[CSO] Knifes", "Omega", "WPMG Team")
    
    RegisterHam(Ham_Spawn,                    "player",            "CPlayer__Spawn_Post",            1)
    RegisterHam(Ham_Item_Deploy,            "weapon_knife",        "CKNIFE__Deploy_Post",            1)
    RegisterHam(Ham_Use,                    "func_tank",        "CStationary__Use_Post",        1)
    RegisterHam(Ham_Use,                    "func_tankmortar",    "CStationary__Use_Post",        1)
    RegisterHam(Ham_Use,                    "func_tankrocket",    "CStationary__Use_Post",        1)
    RegisterHam(Ham_Use,                    "func_tanklaser",    "CStationary__Use_Post",        1)
    RegisterHam(Ham_Weapon_PrimaryAttack,    "weapon_knife",        "CKNIFE__PrimaryAttack_Post",    1)
    RegisterHam(Ham_Weapon_SecondaryAttack,    "weapon_knife",        "CKNIFE__SecondaryAttack_Post",    1)
    RegisterHam(Ham_TakeDamage,                "player",            "CPlayer__TakeDamage")
    RegisterHam(Ham_TakeDamage,                "player",            "CPlayer__TakeDamage_Post",        1)
    RegisterHam(Ham_Player_PreThink,        "player",            "CPlayer__PreThink")
    
    register_forward(FM_EmitSound, "CEntity__EmitSound")
    
    register_srvcmd("load_knife", "SRVCMD__load_knife")
    register_clcmd("/knife", "CMD__knife")
    
    register_menu(MENU_KNIFES, MENU_KNIFES_KEYS, "MENU__Knifes")
}

public plugin_cfg()
{
    server_cmd("exec addons/amxmodx/configs/zombieplague.cfg")
    server_cmd("exec addons/amxmodx/configs/cso_knifes_saved.cfg")
    server_exec()
    
    FL_gravity = get_cvar_float("zp_human_gravity")
    FL_gravity_surv = get_cvar_float("zp_surv_gravity")
}

public client_putinserver(id)
{
    KNIFE_USER(id) = 0
    
    new authid[32]
    get_user_authid(id, authid, 31)
    
    if (authid[5] != '_' || authid[6] == 'I') get_user_ip(id, authid, 31, 1)
    
    for (new i = 0; i < KNIFES_TOTAL_SAVED; i++)
    {
        if (equal(authid, KNIFE_SAVED_AUTHID))
        {
            new knife = KNIFE_SAVED_ID
            (KNIFE_FLAGS > 0) ? (get_user_flags(id) & KNIFE_FLAGS) ? (KNIFE_USER(id) = knife) : (KNIFE_USER(id) = 0) : (KNIFE_USER(id) = knife)
            break
        }
    }
}

public client_disconnect(id)
{
    new authid[32], i
    get_user_authid(id, authid, 31)
    
    if (authid[5] != '_' || authid[6] == 'I') get_user_ip(id, authid, 31, 1)
    
    for (i = 0; i < KNIFES_TOTAL_SAVED; i++)
    {
        if (equal(authid, KNIFE_SAVED_AUTHID))
        {
            KNIFE_SAVED_ID = KNIFE_USER(id)
            return
        }
    }
    
    i = KNIFES_TOTAL_SAVED
    
    formatex(KNIFE_SAVED_AUTHID, 31, authid)
    KNIFE_SAVED_ID = KNIFE_USER(id)
    KNIFES_TOTAL_SAVED++
}

public plugin_end()
{
    delete_file("addons/amxmodx/configs/cso_knifes_saved.cfg")
    
    new file, data[64], i
    file = fopen("addons/amxmodx/configs/cso_knifes_saved.cfg", "at")
    
    for (i = 0; i < KNIFES_TOTAL_SAVED; i++)
    {
        formatex(data, 63, "load_knife ^"%s^" ^"%d^"^n", KNIFE_SAVED_AUTHID, KNIFE_SAVED_ID)
        fputs(file, data)
    }
    
    fclose(file)
}

public SRVCMD__load_knife()
{
    new data[2][32], i
    read_argv(1, data[0], 31)
    read_argv(2, data[1], 31)
    for (i = 0; i < 2; i++) remove_quotes(data[i])
    
    i = KNIFES_TOTAL_SAVED
    
    formatex(KNIFE_SAVED_AUTHID, 31, data[0])
    KNIFE_SAVED_ID = str_to_num(data[1])
    KNIFES_TOTAL_SAVED++
}

public CPlayer__Spawn_Post(id)
{
    if (!is_user_alive(id)) return
    if (zp_get_user_zombie(id)) return
    
    new entity = get_user_weapon_entity(id)
    
    if (!is_valid_ent(entity)) return
    if (cs_get_weapon_id(entity) != CSW_KNIFE) return
    
    FUNC__replace_knife_models(id)
}

public CKNIFE__Deploy_Post(entity)
{
    if (cs_get_weapon_id(entity) != CSW_KNIFE) return
    
    new id = get_weapon_owner(entity)
    
    if (zp_get_user_zombie(id)) return
    
    FUNC__replace_knife_models(id)
}

public CStationary__Use_Post(entity, caller, activator, use_type)
{
    if (use_type != USE_STOPPED) return
    if (!is_user_connected(caller)) return
    if (zp_get_user_zombie(caller)) return
    if (get_user_weapon(caller) != CSW_KNIFE) return
    
    FUNC__replace_knife_models(caller)
}

public CKNIFE__PrimaryAttack_Post(entity)
{
    new id = get_weapon_owner(entity)
    
    if (zp_get_user_zombie(id)) return
    
    new knife
    (KNIFE_SURV && zp_get_user_survivor(id)) ? (knife = KNIFE_SURVIVOR) : (knife = KNIFE_USER(id))
    
    set_weapon_nextprimatt(entity, get_weapon_nextprimatt(entity) * KNIFE_PRIMATTRATE)
    set_weapon_nextsecatt(entity, get_weapon_nextsecatt(entity) * KNIFE_PRIMATTRATE)
}

public CKNIFE__SecondaryAttack_Post(entity)
{
    new id = get_weapon_owner(entity)
    
    if (zp_get_user_zombie(id)) return
    
    new knife
    (KNIFE_SURV && zp_get_user_survivor(id)) ? (knife = KNIFE_SURVIVOR) : (knife = KNIFE_USER(id))
    
    set_weapon_nextprimatt(entity, get_weapon_nextprimatt(entity) * KNIFE_SECATTRATE)
    set_weapon_nextsecatt(entity, get_weapon_nextsecatt(entity) * KNIFE_SECATTRATE)
}

public CPlayer__TakeDamage(victim, inflictor, attacker, Float:damage)
{
    if (inflictor != attacker || victim == attacker) return
    if (!is_user_connected(attacker)) return
    if (zp_get_user_zombie(attacker)) return
    if (get_user_weapon(attacker) != CSW_KNIFE) return
    
    new knife
    (KNIFE_SURV && zp_get_user_survivor(attacker)) ? (knife = KNIFE_SURVIVOR) : (knife = KNIFE_USER(attacker))
    
    SetHamParamFloat(4, damage * KNIFE_DMG)
}

public CPlayer__TakeDamage_Post(victim, inflictor, attacker, Float:damage)
{
    if (inflictor != attacker || victim == attacker) return
    if (!is_user_connected(attacker)) return
    if (zp_get_user_zombie(attacker)) return
    if (get_user_weapon(attacker) != CSW_KNIFE) return
    
    client_print(attacker, print_center, "%d", floatround(damage, floatround_floor))
    
    new Float:velocity[3], Float:newvelocity[3]
    entity_get_vector(victim, EV_VEC_velocity, velocity)
    
    new Float:victim_origin[3], Float:attacker_origin[3]
    entity_get_vector(victim, EV_VEC_origin, victim_origin)
    entity_get_vector(attacker, EV_VEC_origin, attacker_origin)
    
    newvelocity[0] = victim_origin[0] - attacker_origin[0]
    newvelocity[1] = victim_origin[1] - attacker_origin[1]
    
    new Float:largestnum = 0.0
    
    if (0 <= floatcmp(floatabs(newvelocity[0]), floatabs(newvelocity[1])) <= 1)
    {
        if (floatabs(newvelocity[0]) > 0) largestnum = floatabs(newvelocity[0])
    }
    else
    {
        if (floatabs(newvelocity[1]) > 0) largestnum = floatabs(newvelocity[1])
    }
    
    newvelocity[0] /= largestnum
    newvelocity[1] /= largestnum
    
    new knife
    (KNIFE_SURV && zp_get_user_survivor(attacker)) ? (knife = KNIFE_SURVIVOR) : (knife = KNIFE_USER(attacker))
    
    velocity[0] = newvelocity[0] * KNIFE_KNOCK * 3000 / get_distance_f(victim_origin, attacker_origin)
    velocity[1] = newvelocity[1] * KNIFE_KNOCK * 3000 / get_distance_f(victim_origin, attacker_origin)
    if(newvelocity[0] <= 20.0 || newvelocity[1] <= 20.0)
        newvelocity[2] = random_float(200.0 , 275.0)
    
    newvelocity[0] += velocity[0]
    newvelocity[1] += velocity[1]
    entity_set_vector(victim, EV_VEC_velocity, newvelocity)
}

public CPlayer__PreThink(id)
{
    if (!is_user_alive(id)) return
    if (zp_get_user_zombie(id)) return
    if (get_user_weapon(id) != CSW_KNIFE)
    {
        if (zp_get_user_survivor(id)) set_user_gravity(id, FL_gravity_surv)
        else set_user_gravity(id, FL_gravity)
        return
    }
    
    new knife
    (KNIFE_SURV && zp_get_user_survivor(id)) ? (knife = KNIFE_SURVIVOR) : (knife = KNIFE_USER(id))
    
    set_user_maxspeed(id, KNIFE_SPEED)
    set_user_gravity(id, KNIFE_GRAV)
    
    if (!(entity_get_int(id, EV_INT_button) & IN_JUMP)) return
    if (entity_get_int(id, EV_INT_oldbuttons) & IN_JUMP) return
    
    new flags = entity_get_int(id, EV_INT_flags)
    
    if (!(flags & FL_ONGROUND)) return
    if (flags & FL_WATERJUMP) return
    if (entity_get_int(id, EV_INT_waterlevel) > 1) return
    
    new Float:velocity[3]
    entity_get_vector(id, EV_VEC_velocity, velocity)
    
    velocity[2] += KNIFE_JUMP
    entity_set_vector(id, EV_VEC_velocity, velocity)
    entity_set_int(id, EV_INT_gaitsequence, 6)
}

public CEntity__EmitSound(id, channel, const sample[], Float:volume, Float:attn, flags, pitch)
{
    if (!is_user_connected(id)) return FMRES_IGNORED
    if (zp_get_user_zombie(id)) return FMRES_IGNORED
    
    if (sample[8] == 'k' && sample[9] == 'n' && sample[10] == 'i')
    {
        new knife
        (KNIFE_SURV && zp_get_user_survivor(id)) ? (knife = KNIFE_SURVIVOR) : (knife = KNIFE_USER(id))
        if (sample[14] == 'd') emit_sound(id, channel, KNIFE_SOUND_DEPLOY, volume, attn, flags, pitch)
        else if (sample[14] == 'h')
        {
            if (sample[17] == 'w') emit_sound(id, channel, KNIFE_SOUND_HITWALL, volume, attn, flags, pitch)
            else emit_sound(id, channel, (KNIFE_HITSOUNDS > 1) ? KNIFE_SOUND_HIT(random_num(0, 1)) : KNIFE_SOUND_HIT(0), volume, attn, flags, pitch)
        }
        else
        {
            if (sample[15] == 'l') emit_sound(id, channel, (KNIFE_SLASHSOUNDS > 1) ? KNIFE_SOUND_SLASH(random_num(0, 1)) : KNIFE_SOUND_SLASH(0), volume, attn, flags, pitch)
            else emit_sound(id, channel, KNIFE_SOUND_STAB, volume, attn, flags, pitch)
        }
        return FMRES_SUPERCEDE
    }
    
    return FMRES_IGNORED
}

public CMD__knife(id)
{
    if (zp_has_round_started() == 1) return PLUGIN_HANDLED
    return SHOWMENU__Knifes(id)
}

public SHOWMENU__Knifes(id)
{
    new len, menu[500], keys, flags
    len += formatex(menu, 499, "\r[ \y~ \dВыберите нож \y~ \r]^n^n")
    flags = get_user_flags(id)
    
    for (new knife = 0; knife < KNIFES_TOTAL; knife++)
    {
        if (KNIFE_FLAGS)
        {
            if (flags & KNIFE_FLAGS)
            {
                keys |= (1 << knife)
                if (KNIFE_USER(id) == knife) len += formatex(menu[len], 499 - len, "\r[%d]-\d %s %s^n", knife + 1, KNIFE_NAME, KNIFE_DESC)
                else len += formatex(menu[len], 499 - len, "\y[%d]-\w %s %s^n", knife + 1, KNIFE_NAME, KNIFE_DESC)
            }
            else
                len += formatex(menu[len], 499 - len, "\d[%d]- \d%s \d%s^n", knife + 1, KNIFE_NAME, KNIFE_DESC)
        }
        else
        {
            keys |= (1 << knife)
            if (KNIFE_USER(id) == knife) len += formatex(menu[len], 499 - len, "\r[%d]-\d %s %s^n", knife + 1, KNIFE_NAME, KNIFE_DESC)
            else len += formatex(menu[len], 499 - len, "\y[%d]-\w %s %s^n", knife + 1, KNIFE_NAME, KNIFE_DESC)
        }
    }
    
    keys |= MENU_KEY_0
    len += formatex(menu[len], 499 - len, "^n\y[0]-\w Выход")
    
    return show_menu(id, keys, menu, -1, MENU_KNIFES)
}

public MENU__Knifes(id, key)
{
    if (zp_has_round_started() == 1) return PLUGIN_HANDLED
    if (key != 9)
        if (KNIFE_USER(id) != key)
        {
            KNIFE_USER(id) = key
            if (is_user_alive(id) && !zp_get_user_zombie(id))
                if (get_user_weapon(id) == CSW_KNIFE)
                    FUNC__replace_knife_models(id)
        }
    return PLUGIN_HANDLED
}

public FUNC__replace_knife_models(id)
{
    new knife
    (KNIFE_SURV && zp_get_user_survivor(id)) ? (knife = KNIFE_SURVIVOR) : (knife = KNIFE_USER(id))
    
    entity_set_string(id, EV_SZ_viewmodel, KNIFE_MODEL_V)
    entity_set_string(id, EV_SZ_weaponmodel, KNIFE_MODEL_P)
}
  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума
Лучшие пользователи
Admin [39113]

GеNius [7210]

[CM]Russel [5557]

kenlo763 [4952]

[CM]AGRESSOR [4639]

Snake_Firm [4452]

Сэс [4416]

Artem_Buero [4223]

[CM]Durman [3204]

[CM]Рафаэль [3080]

iMaddy [2855]

sky_Woker [2854]

getrekt [2745]

Новые пользователи
bondarkovasyl [01:24]

DeTruXer [00:16]

NapoleonBonapart [23:46]

Dfgafgwdxz [18:04]

Dominikopon [18:00]

cheatjopa2 [11:58]

gabitovismaismaisma [09:18]

Gotham_ws [03:45]

раре [02:58]

Epiphonexmr [02:38]

ksuexe [01:35]

petrusenko_t [23:29]

shanepk60 [21:19]