Багается невидимость.

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

fum

Сообщения
11
Реакции
0
Вообщем суть такая, есть зомби класс, который невидимый когда приседает, и если встать то он снова видимый.
Все отлично работает, но имеется баг, если присесть не полностью, а только нажать на ctrl и сразу отпустить(присесть не до конца), то он становится невидимый на все время, может спокойно бегать, а должен быть не видимый, только когда сидишь.
Так же баг можно сделать, если приседать через колесико мышки.
как добавить проверку, на приседания, чтобы все отлично работало?

Код:
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;
}
 
Сообщения
3,593
Реакции
1,576
Помог
141 раз(а)
В синке можно проверять на pev_bInDuck
 
  • Нравится
Реакции: Arni
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
fum, если не ошибаюсь
Код:
if(!pev(index, pev_bInDuck)) {
    //code
}
 
Сообщения
673
Реакции
242
Помог
11 раз(а)
типа такого рода
Код:
if(zp_get_user_zombie_class(id) == g_zclass_spy && pev(id, pev_rendermode) != kRenderNormal) && !pev( id, pev_bInDuck ))
{
    fm_set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 0);
}
 

fum

Сообщения
11
Реакции
0
Limbooc, Спасибо, но не хватает навыка.

Код:
public Fw_PlayerDuck(id)

{

if(zp_get_user_zombie_class(id) == g_zclass_spy && pev(id, pev_rendermode) != kRenderNormal) && !pev( id, pev_bInDuck ))

{

    fm_set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 0);

}

   return PLUGIN_CONTINUE;

}

Так должен выглядить?
 
Сообщения
673
Реакции
242
Помог
11 раз(а)
fum, нет, в синке например

client_PostThink
 

fum

Сообщения
11
Реакции
0
@Limbooc,Сможешь исправить плагин, скину денежку?
 
Сообщения
673
Реакции
242
Помог
11 раз(а)
fum, ничего сложного просто отдельным функицием попробуй сделать

Код:
public client_PostThink(id)
{
    //чекаем игрок жив? имеет необходимый класс? он зомби?
    if(zp_get_user_zombie_class(id) != g_zclass_spy && !is_user_alive(id) && !zp_get_user_zombie(id))
        return;
    //Данный момент игрок имеет невидимость?
    if(pev(id, pev_rendermode) != kRenderTransAlpha)
        return;
    //Игрок на земле? игрок сидит?
    if(pev( id, pev_flags) & ~FL_ONGROUND || pev( id, pev_flags) & FL_DUCKING)
        return;
    //Игрок сидит?
    if(pev( id, pev_bInDuck ))
        return;
 
    //тогда збрасываем невидимость
    fm_set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 0);
}
 
Последнее редактирование:
Сообщения
673
Реакции
242
Помог
11 раз(а)
@fum,не тестировал
Код:
#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, 7);
    set_task(1.0,"AddHP",_,_,_,"b");
    cvar_ammo = register_cvar("zp_ammo_bullets", "3")
    g_SayText = get_user_msgid("SayText");
}

public plugin_precache() {
    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 target, body;
    get_user_aiming(id, target, body, 9999);
    if(is_user_alive(target) && !zp_get_user_zombie(target)) {
        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) {
            new button = fm_get_user_button(id);
            if ((button & IN_USE) && !zp_get_user_survivor(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()
}
19 Май 2023
лучше сделай так,

вместо
Код:
new target, body;
    get_user_aiming(id, target, body, 9999);
    if(is_user_alive(target) && !zp_get_user_zombie(target)) {
        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) {
            new button = fm_get_user_button(id);
            if ((button & IN_USE) && !zp_get_user_survivor(target)) {
                drop_current_weapon(target)
            }
        }
    }
=>

Код:
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)
            }
        }
    }

p.s код ужасен, можно конечно оптимизировать....

пример random_g = random_num(0, 7); инициализируется после прикеша, (plugin_init), у тебя всегда будет возвращать 0
 
Последнее редактирование:

fum

Сообщения
11
Реакции
0
@Limbooc,Большое спасибо, все работает!
Скинь номер карты или номер, скину монету
 
Статус
В этой теме нельзя размещать новые ответы.

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

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