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

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

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

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

Помогите с фиксом плагина для ножей

, Убрать лишние функции
Статус пользователя NeoLeo
сообщение 13.6.2023, 2:39
Сообщение #1
Стаж: 2 года 11 месяцев

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

Всем здравствуйте в 2023, я думаю вы удивлены увидеть здесь мольбы о помощи спустя столько лет, но перейду к делу, восстанавливая ламповый сервер, столкнулся с проблемой плагина по выбору ножей, в данном плагине пытался много чего перекопать, но следующие 2 вещи перекопать не удалось

1 - убрать появление меню в начале раунда (прописал в главном моде вызов данной команды), не ломая ограничение по вызову данного меню (1 за раунд, сейчас работает)
2 - убрать кд и все вытекающее, чтобы меню держалось пока игрок не выберет или сам закроет меню
3 - помочь найти строки, отвечающие за изменение количества хп в первом ноже, за скорость во втором ноже, и гравитацию в третьем ноже, (с примером редактирования в плюс характеристик или минус) мало ли пригодится поменять для баланса
4 - (Оптимально) убрать варнинги при компиляции, чисто для эстетики, и понять в каком месте выдается, этот пункт не обязательно

Очень прошу вас помочь, плохо шарю в плагинах!!!!

Код
#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_knifez/razor/v_razor.mdl"
new KNIFE1_P_MODEL[] = "models/zp_knifez/razor/p_razor.mdl"

new KNIFE2_V_MODEL[] = "models/zp_knifez/combat/v_combat.mdl"
new KNIFE2_P_MODEL[] = "models/zp_knifez/combat/p_combat.mdl"

new KNIFE3_V_MODEL[] = "models/zp_knifez/turkeyk/v_turkeyk.mdl"
new KNIFE3_P_MODEL[] = "models/zp_knifez/turkeyk/p_turkeyk.mdl"

new KNIFE4_V_MODEL[] = "models/zp_knifez/strong/v_strong.mdl"
new KNIFE4_P_MODEL[] = "models/zp_knifez/strong/p_strong.mdl"

new KNIFE5_V_MODEL[] = "models/zp_knifez/kyvalda/v_kyvald.mdl"
new KNIFE5_P_MODEL[] = "models/zp_knifez/kyvalda/p_kyvald.mdl"
new Openmenu[33]

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

new const knife2_sounds[][] =
{
    "knifez/combat/knife_draw.wav",
    "knifez/combat/knife_slash1.wav",
    "knifez/combat/knife_slash2.wav",
    "knifez/combat/knife_wall.wav",
    "knifez/combat/knife_miss.wav",
    "knifez/combat/knife_stab.wav"
}

new const knife3_sounds[][] =
{
    "knifez/turkeyk/draw.wav",
    "knifez/turkeyk/slash1.wav",
    "knifez/turkeyk/slash2.wav",
    "knifez/turkeyk/wall.wav",
    "knifez/turkeyk/miss.wav",
    "knifez/turkeyk/hit.wav"
}

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

new const knife5_sounds[][] =
{
    "knifez/kyvaldaa/knife_draw.wav",
    "knifez/kyvaldaa/knife_slash1.wav",
    "knifez/kyvaldaa/knife_slash2.wav",
    "knifez/kyvaldaa/knife_wall.wav",
    "knifez/kyvaldaa/knife_miss.wav",
    "knifez/kyvaldaa/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");
    register_clcmd("knifezcso","Knifes_Menu" )
    
    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;
        Openmenu[i] = 1
        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_disconnect(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)
{
    if(Openmenu[id] == 1)
   {
   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[Скорость]", "2", 0);
    menu_additem(menu, "\wТурецкий нож \d[Гравитация]", "3", 0);
    menu_additem(menu, "\wСтронг \d[Отбрасывание]", "4", 0);
    menu_additem(menu, "\wКувалда \d[VIP]", "5", 0);
   menu_display( id, menu, 0 );
      
   }
   else{
   client_print(id,print_chat,"Только 1 раз за раунд")
   }
}
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:
        {
            Openmenu[id] = Openmenu[id] -1
            buy_knife1(id)
        }
        case 2:
        {
            if (zp_get_user_zombie(id))
                return PLUGIN_HANDLED;
            Openmenu[id] = Openmenu[id] -1    
            buy_knife2(id)
        }
        case 3:
        {
            Openmenu[id] = Openmenu[id] -1
            buy_knife3(id)
        }
        case 4:
        {        
            Openmenu[id] = Openmenu[id] -1
            buy_knife4(id)
        }
        case 5:
        {    
            if (get_user_flags(id) & ADMIN_LEVEL_H)
                (Openmenu[id] = Openmenu[id] -1 & 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 * 100000 ) / floatround(get_distance_f(vicorigin, attorigin));
        velocity[1] = ( origin2[1] * KNIFE4_KNOCK * 100000 ) / 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;
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: