Класс зомби, 2 бага.

Статус
В этой теме нельзя размещать новые ответы.

fum

Сообщения
11
Реакции
0
Неверный раздел форума
Первая проблема - зомби класс использует модели людей на сервере. При заражении должна быть у зомби 1 из 8 моделей, но этого не происходит, остается 1 модель на всю карту, а должна меняться при каждом заражении.
Вторая проблема - у зомби имеется способность дропать оружие у людей, но почему-то она работает через раз. Бывает у 1 игрока выкинешь, а у второго уже не можешь.
Прошу помощи, заранее спасибо!

Код:
#include <amxmodx>
#include <amxmisc>
#include <zombieplague>
#include <fakemeta_util>
#include <engine>
#include <cstrike>
#include <fun>
#include <xs>
#include <cstrike>
#include <hamsandwich>

#define fm_get_user_button(%1) pev(%1, pev_button)

new MODEL_NUM[][] =
{
    "zp_human_woman_1",
    "zp_human_man_1",
    "zp_human_woman_2",
    "zp_human_man_2",
    "zp_human_woman_3",
    "zp_human_man_3",
    "zp_human_woman_4",
    "zp_human_woman_5"
}
new zclass_name[] = { "Ассасин" }
new zclass_info[] = { "Неведимка" }
new zclass_clawmodel[] = { "nighthands/hands_assasin.mdl" }
new const model_weapon_usp[] = "models/v_usp.mdl"
const zclass_health = 100
const zclass_speed = 300
const Float:zclass_gravity = 0.70
const Float:zclass_knockback = 3.5
new g_zclass_spy, cvar_ammo
new random_g;
new g_SayText;
new is_first_zombie = 1

public plugin_init() {
    register_plugin("[ZP] Class : Assasin", "1.2.3", "NullWarez");
    //RegisterHam(Ham_Player_Duck, "player", "Fw_PlayerDuck")
    register_forward(FM_PlayerPreThink, "fwd_playerprethink");
    random_g = random_num(0, 8);
    set_task(1.0,"AddHP",_,_,_,"b");
    cvar_ammo = register_cvar("zp_ammo_bullets", "3")
    g_SayText = get_user_msgid("SayText");
}

public plugin_precache() {
    random_g = random_num(0, 8);
    g_zclass_spy = zp_register_zombie_class(zclass_name, zclass_info, MODEL_NUM[random_g], zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback);
    engfunc(EngFunc_PrecacheModel, model_weapon_usp)
}
public zp_user_infected_post(player, infector) {
    if (g_zclass_spy != zp_get_user_zombie_class(player) || !zp_get_user_zombie(player) || zp_get_user_nemesis(player) || player == infector) {
        return ZP_PLUGIN_HANDLED;
    }
    if (is_user_alive(infector)) {
        if (g_zclass_spy == zp_get_user_zombie_class(infector) && zp_get_user_zombie(infector)) {
            new ZM_HP = get_user_health(infector) - 1500;
            set_pev(infector, pev_health, float(ZM_HP));
        }
    }
    if (is_user_alive(player)) {
        cs_set_weapon_ammo(give_item(player,"weapon_usp"), get_pcvar_num(cvar_ammo))
        new weapon = get_user_weapon(player)
        if (weapon == CSW_USP) {
            set_pev(player, pev_viewmodel2, model_weapon_usp)
            Color(player, "!g[ZP] !yПри нажатии Ctrl вы становитесь не видимым.")
            Color(player, "!g[ZP] !yТак же вы можете выбрасывать оружие у людей нажав на Е.")
        }
    }
    return PLUGIN_CONTINUE;
}

public zp_user_last_zombie(id) {
    if (is_first_zombie)
        if (zp_get_user_zombie(id) && (g_zclass_spy == zp_get_user_zombie_class(id)) && !zp_get_user_nemesis(id)) {
        Color(id, "!g[ZP] !yПри нажатии Ctrl вы становитесь не видимым.")
        Color(id, "!g[ZP] !yТак же вы можете выбрасывать оружие у людей нажав на Е.")
        is_first_zombie--;
    }
}

public zp_user_humanized_post(id) {
    if (is_user_alive(id)) {
        fm_set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 0)
        fm_set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 255)
    }
}

public zp_user_unfrozen(id)
{
    if(is_valid_ent(id) && is_user_alive(id) && zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && zp_get_user_zombie_class(id) == g_zclass_spy)
    {
        fm_set_user_rendering(id)
    }
}

/*public Fw_PlayerDuck(id)
{
    if (!is_user_alive(id) || g_zclass_spy != zp_get_user_zombie_class(id) || !zp_get_user_zombie(id) || zp_get_user_nemesis(id))
    {
        return ZP_PLUGIN_HANDLED;
    }
 
    if (pev(id, pev_button) & IN_DUCK)
    {
        // Зомби присел, делаем его невидимым
        fm_set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 0);
    }
    else
    {
        // Зомби встал, делаем его видимым
        fm_set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 0);
    }
 
    return PLUGIN_CONTINUE;
}*/

public fwd_playerprethink(id) {
    if (!is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_zombie_class(id) != g_zclass_spy  || zp_get_user_nemesis(id)) {
        return FMRES_IGNORED;
    }
 
    if(pev( id, pev_flags) & FL_ONGROUND)
    {
        if(pev(id, pev_button) & IN_DUCK)
        {
            if(pev(id, pev_rendermode) != kRenderTransAlpha)
            {
                fm_set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 0);
            }
        }
        else
        {
            if(pev(id, pev_rendermode) != kRenderNormal)
            {
                fm_set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 0);
            }
      
        }
    }
new button = fm_get_user_button(id);

    if(button & IN_USE)
    {
        new target, body;
        get_user_aiming(id, target, body, 9999);
        new P1_origin[3], P2_origin[3];
        get_user_origin(id, P1_origin, 0);
        get_user_origin(target, P2_origin, 0);
      
        new distance = get_distance(P1_origin, P2_origin);

        if (distance <= 120)
        {
            if(is_user_alive(target) && !zp_get_user_zombie(target))
            {
                drop_current_weapon(target)
            }
        }
    }
    return FMRES_IGNORED;
}

drop_current_weapon(id) {
    engclient_cmd(id, "drop");
    return ZP_PLUGIN_HANDLED;
}

public AddHP() {
    for(new id = 0; id<32; id++) {
        if (is_user_connected(id) && is_user_alive(id)) {
            if (zp_get_user_zombie(id) && g_zclass_spy == zp_get_user_zombie_class(id) && !zp_get_user_nemesis(id)) {
                if (get_user_health(id) < zp_get_zombie_maxhealth(id)) {
                    set_user_health(id, get_user_health(id) + 8);
                }
                if (get_user_health(id) > zp_get_zombie_maxhealth(id)) {
                    set_user_health(id, zp_get_zombie_maxhealth(id));
                }
            }
        }
    }
    return PLUGIN_CONTINUE;
}

stock Color(const id, const input[], any:...)
{
    static msg[191]
    vformat(msg, 190, input, 3)
 
    replace_all(msg, 190, "!g", "^4")
    replace_all(msg, 190, "!y", "^1")
    replace_all(msg, 190, "!t", "^3")
 
    message_begin(MSG_ONE_UNRELIABLE, g_SayText, _, id)
    write_byte(id)
    write_string(msg)
    message_end()
}
 
Сообщения
658
Реакции
230
Помог
11 раз(а)
по первому выставляешь модель при заражение в функции zp_override_user_model(id, MODEL_NUM[random_nun(0, 7)]); не забудь конечно запрекешить все модели
тут;
Код:
zp_user_infected_post
zp_user_last_zombie


по второму все ли условии соблюдены?
Дистанция зомби и человека не должно превышать 120 UNIT (около полтора игровых модели)
 
Последнее редактирование:
Сообщения
1,491
Реакции
1,492
Помог
2 раз(а)
В теме должны быть опубликованы попытки (diff кода или последовательность действий) самостоятельного поиска решения.
Если у вас нет наработок и попыток самому вникнуть в проблему, тогда вам в раздел "Покупка",
 
Статус
В этой теме нельзя размещать новые ответы.

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

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