Передать значение и проверить

Сообщения
182
Реакции
4
Здравствуйте, есть плагин на способности для игроков на кнопки Z - скорость, X - невидимость.
Хотелось в плагине шапок сделать проверку, если человек использует невидимость, чтобы шапка убиралась.

Сделал в плагине с способностями следующее:
C#:
public plugin_natives()
{
    register_native("zp_use_human_skills_invisible", "native_use_invisible", 1)
}

public native_use_invisible(id)
{
    return get_user_skill_invisible(id);
}

public get_user_skill_invisible(id)
{
    return use_skill_invisible[id];
}
В плагине с шапками сделал проверку:

C#:
if(zp_use_human_skills_invisible(id) == 1)
{
    remove_hat(id);
    return
}
И уже сам натив добавил в inc фаил native zp_use_human_skills_invisible(id)

Только вот ничего не работает, что есть странно, можете подсказать пожалуйста, где я ошибся?
 
  • Нравится
Реакции: ssx
Сообщения
893
Реакции
149
Помог
25 раз(а)
А почему в натив сразу не передавать переменную? И когда она устанавливается?
 
Сообщения
182
Реакции
4
ImmortalAmxx, вот плагин:

C#:
#include <amxmodx>
#include <hamsandwich>
#include <fun>
#include <zombieplague>
#include <zp_addons>

#define DHUD

#if !defined DHUD
new g_MsgSync;
#endif

#define semicolon 1

new Ham:Ham_Player_ResetMaxSpeed = Ham_Item_PreFrame;

#define SKILL_SPEED_COMMAND "radio1"  // Key 'Z'
#define SKILL_SPEED_BONUS 440.0
#define SKILL_SPEED_STATIC 0.0
#define SKILL_SPEED_TIME 6.0
#define SKILL_SPEED_TASKID 100

new const SpeedSoundStart[] = "skills/skill_speed_start.wav";
new const SpeedSoundEnd[] = "skills/skill_speed_end.wav";

#define SKILL_INVISIBLE_COMMAND "radio2" // Key 'X'
#define SKILL_INVISIBLE_TIME 6.0
#define SKILL_INVISIBLE_TASKID 200

new const InvisibleSoundStart[] = "skills/skill_invisible_start.wav";
new const InvisibleSoundEnd[] = "skills/skill_invisible_end.wav";

new bool:use_skill_speed[33];
new bool:use_skill_invisible[33];
new bool:active_skill_speed[33];
new bool:active_skill_invisible[33];

new TrailSpriteID;
new bool:g_FreezeTime;

public plugin_init()
{
    register_plugin("[ZPA]: Skill human", "1.0b", "Felix_Font");
    
    register_clcmd(SKILL_SPEED_COMMAND, "ActivateSkill_Speed");
    register_clcmd(SKILL_INVISIBLE_COMMAND, "ActivateSkill_Invisible");
    
    register_event("HLTV", "event_round_start", "a", "1=0", "2=0");
    register_logevent("logevent_round_start", 2, "1=Round_Start"); // Freeze time end
    RegisterHam(Ham_Player_ResetMaxSpeed, "player", "fw_ResetMaxSpeed_Post", 1);
    
    #if !defined DHUD
    g_MsgSync = CreateHudSyncObj();
    #endif
    set_task(1.0, "ShowHud", 0, _, _, "b");
}

public plugin_precache()
{
    TrailSpriteID = precache_model("sprites/3dmflaora.spr");
    precache_sound(SpeedSoundStart);
    precache_sound(SpeedSoundEnd);
    precache_sound(InvisibleSoundStart);
    precache_sound(InvisibleSoundEnd);
}

public event_round_start()
{
    g_FreezeTime = true;
    for(new id = 1; id <= 32; id++) if(is_user_connected(id)) ResetPlayerLimit(id);
}

public logevent_round_start()
{
    if(task_exists(1)) remove_task(1);
    set_task(2.0, "ActivateSkills", 1);
}

public plugin_natives()
{
    register_native("zp_use_human_skills_invisible", "native_use_invisible", 1)
}

public native_use_invisible(id)
{
    return get_user_skill_invisible(id);
}

public ActivateSkills() g_FreezeTime = false;
public client_putinserver(id) ResetPlayerLimit(id);
public zp_user_humanized_pre(id) ResetPlayerLimit(id);
public zp_user_infected_pre(id) ResetPlayerLimit(id);

public ActivateSkill_Speed(id)
{
    if(g_FreezeTime || !is_user_alive(id) || zp_get_user_zombie(id) || zp_get_user_survivor(id) || use_skill_speed[id] == true || active_skill_invisible[id] == true) return PLUGIN_CONTINUE;
    
    new skill_time = floatround(SKILL_SPEED_TIME, floatround_floor);
    use_skill_speed[id] = true;
    active_skill_speed[id] = true;
    emit_sound(id, CHAN_VOICE, SpeedSoundStart, VOL_NORM,  ATTN_NORM, 0, PITCH_NORM);
    ScreenFadeMessage(id, skill_time, {0, 255, 0, 30});
    TrailMessage(id, (skill_time-1));
    ScreenShakeMessage(id);
    
    ExecuteHamB(Ham_Player_ResetMaxSpeed, id);
    set_task(SKILL_SPEED_TIME, "DeActivateSkill_Speed", id+SKILL_SPEED_TASKID);
    return PLUGIN_HANDLED;
}

public DeActivateSkill_Speed(taskid)
{
    new id = (taskid-SKILL_SPEED_TASKID);
    if(!is_user_connected(id)) return;
    active_skill_speed[id]  = false;
    emit_sound(id, CHAN_VOICE, SpeedSoundEnd, VOL_NORM,  ATTN_NORM, 0, PITCH_NORM);
    DeleteTrailMessage(id);
    ExecuteHamB(Ham_Player_ResetMaxSpeed, id);
}

public ActivateSkill_Invisible(id)
{
    if(g_FreezeTime || !is_user_alive(id) || zp_get_user_zombie(id) || zp_get_user_survivor(id) || use_skill_invisible[id] == true || active_skill_speed[id] == true) return PLUGIN_CONTINUE;
    use_skill_invisible[id] = true;
    active_skill_invisible[id] = true;
    set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0)-
    emit_sound(id, CHAN_VOICE, InvisibleSoundStart, VOL_NORM,  ATTN_NORM, 0, PITCH_NORM);
    ScreenFadeMessage(id, floatround(SKILL_INVISIBLE_TIME, floatround_floor), {211, 211, 211, 30});
    
    set_task(SKILL_INVISIBLE_TIME, "DeActivateSkill_Invisible", id+SKILL_INVISIBLE_TASKID);
    return PLUGIN_HANDLED;
}

public DeActivateSkill_Invisible(taskid)
{
    new id = (taskid-SKILL_INVISIBLE_TASKID);
    if(!is_user_connected(id)) return;
    active_skill_invisible[id] = false;
    emit_sound(id, CHAN_VOICE, InvisibleSoundEnd, VOL_NORM,  ATTN_NORM, 0, PITCH_NORM);
    set_user_rendering(id);
}

public get_user_skill_invisible(id)
{
    return use_skill_invisible[id];
}

public ShowHud()
{
    if(g_FreezeTime) return;
    new players[32];
    new count, i, id;
    
    get_players(players, count, "ach");
    for(i = 0; i < count; i++)
    {
        id = players[i];
        if(zp_get_user_zombie(id)) continue;
        if(zp_get_user_survivor(id)) continue;
        if(use_skill_speed[id] == true && use_skill_invisible[id] == true) continue;
        ShowSyncHud(id);
    }
}

public ShowSyncHud(id)
{
    if(use_skill_speed[id] == false && use_skill_invisible[id] == false) ShowHudMessage(id, "[Способности]^n[Z - Ускорение]^n[X - Невидимка]");
    else if(use_skill_speed[id] == false) ShowHudMessage(id, "[Способности]^n[Z - Ускорение]");
    else if(use_skill_invisible[id] == false) ShowHudMessage(id, "[Способности]^n[X - Невидимка]");
}

ShowHudMessage(id, text[])
{
    #if !defined DHUD
    set_hudmessage(0, 255, 0, 1.0, 0.70, 0, 0.0, 1.0);
    ShowSyncHudMsg(id, g_MsgSync, text);
    #else
    set_dhudmessage(0, 255, 0, 1.0, 0.70, 0, 0.0, 1.0);
    show_dhudmessage(id, text);
    #endif
}

public fw_ResetMaxSpeed_Post(id)
{
    if(g_FreezeTime || !is_user_alive(id) || active_skill_speed[id] == false) return;
    RemoveSpeedLimit(id);
    if(SKILL_SPEED_STATIC == 0.0) set_user_maxspeed(id, (get_user_maxspeed(id)+SKILL_SPEED_BONUS));
    else set_user_maxspeed(id, SKILL_SPEED_STATIC);
}

ResetPlayerLimit(id)
{
    use_skill_speed[id] = false;
    use_skill_invisible[id] = false;
    
    if(active_skill_speed[id] == true)
    {
        remove_task(id+SKILL_SPEED_TASKID);
        active_skill_speed[id]  = false;
        if(is_user_connected(id))
        {
            ScreenFadeMessage(id, 1, {0, 0, 0, 0});
            DeleteTrailMessage(id);
            ExecuteHamB(Ham_Player_ResetMaxSpeed, id);
        }
    }
    if(active_skill_invisible[id] == true)
    {
        remove_task(id+SKILL_INVISIBLE_TASKID);
        active_skill_invisible[id] = false;
        
        if(is_user_connected(id))
        {
            ScreenFadeMessage(id, 1, {0, 0, 0, 0});
            set_user_rendering(id);
        }
    }
}

RemoveSpeedLimit(id)
{
    client_cmd(id,"cl_forwardspeed 1000");
    client_cmd(id,"cl_backspeed 1000");
    client_cmd(id,"cl_sidespeed 1000");
}

TrailMessage(id, seconds)
{
    message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
    write_byte(TE_BEAMFOLLOW);
    write_short(id);
    write_short(TrailSpriteID);
    write_byte(seconds);
    write_byte(20);
    write_byte(0);
    write_byte(255);
    write_byte(0);
    write_byte(200);
    message_end();
}

DeleteTrailMessage(id)
{
    message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
    write_byte(99)    // TE_KILLBEAM
    write_short(id)
    message_end()
}

ScreenFadeMessage(id, seconds, color[4])
{
    static g_msgScreenFade;
    if(!g_msgScreenFade) g_msgScreenFade = get_user_msgid("ScreenFade");
    
    message_begin(MSG_ONE, g_msgScreenFade, {0,0,0}, id);
    write_short((1<<12)*seconds);
    write_short((1<<12)*seconds);
    write_short(0x0000); // FRADE_IN
    write_byte(color[0]);
    write_byte(color[1]);
    write_byte(color[2]);
    write_byte(color[3]);
    message_end();
}

ScreenShakeMessage(id)
{
    static g_msgScreenShake;
    if(!g_msgScreenShake) g_msgScreenShake = get_user_msgid("ScreenShake");
    
    message_begin(MSG_ONE, g_msgScreenShake, {0,0,0}, id);
    write_short(1<<12);
    write_short(1<<14) ;
    write_short(1<<14);
    message_end();
}
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
SlovePRO, а посмотри какое значение сам натив передает, мне кажется твой 'ЧУДО' плагин [ZPA]: Skill human некорректно работает. Плюс ко всему, как указал ImmortalAmxx ,что бы передать в натив значение, ты еще делаешь для чего-то функцию.
Код:
public plugin_natives()
    register_native("zp_use_human_skills_invisible", "native_use_invisible", 1);

public bool:native_use_invisible(id) {
    server_print("***** %i", use_skill_invisible[id]);

    return use_skill_invisible[id];
}
И еще, покажи код где ты преминяешь сам zp_use_human_skills_invisible(id)
 
Последнее редактирование:
Сообщения
677
Реакции
579
Предупреждения
8
Помог
9 раз(а)
А зачем убрать шапку?
 
Сообщения
182
Реакции
4
Сообщения
893
Реакции
149
Помог
25 раз(а)
Покажи как в шапках скидываешь ее.
 
Сообщения
182
Реакции
4
ImmortalAmxx, использую натив в инклюде и делаю вот такую проверку:

C#:
if(zp_use_human_skills_invisible(id) == 1)
{
    remove_hat(id);
    return
}
Либо я что-то не догоняю!
18 Апр 2024

Код шапки:
C#:
#include <amxmodx>
#include <fakemeta>
#include <cstrike>
#include <engine>
#include <zombieplague>
#include <zp_addons>

new Ent[33]
new const g_model[] =
{
    "models/hats.mdl"
}

public plugin_init()
{
    register_plugin("Test", "1.0", "Test");
  
    register_event("Battery", "armor", "be");
}

public plugin_precache()
{
    precache_model(g_model);
}

public client_connect(id)
{
    remove_hat(id);
}

public client_disconnected(id)
{
    remove_hat(id);
}

public armor(id)
{
    new arm = read_data(1);
    if(zp_get_user_zombie(id) || zp_use_human_skills_invisible(id) == 1)
    {
        remove_hat(id);
        return
    }
  
    if(arm < 1)
    {
        if(Ent[id] > 0)
        {
            remove_hat(id);
        }
    }
    else if(arm > 0)
    {
        if(Ent[id] < 1)
        {
            Ent[id] = create_entity("info_target");
            if(is_valid_ent(id))
            {
                entity_set_model(Ent[id] , g_model);
                entity_set_int(Ent[id], EV_INT_movetype, MOVETYPE_FOLLOW);
                entity_set_edict(Ent[id], EV_ENT_aiment, id);
            }
        }
    }
}

public remove_hat(id)
{
    if(Ent[id] > 0)
    {
        remove_entity(Ent[id]);
        Ent[id] = 0;
    }
}
 
Последнее редактирование:
Сообщения
182
Реакции
4
Есть конечно подозрение что я не передаю никак значение, и поэтому не работает.
Скорей всего, нужно сделать так:

C#:
public plugin_natives()
{
    register_native("zp_use_human_skills_invisible", "native_use_invisible", 1)
}

public native_use_invisible(id, status)
{
    new status = use_skill_invisible[id];
    return status;
}
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
SlovePRO, я же тебе показал как проверить, какое значение передает натив
Код:
public plugin_natives()
    register_native("zp_use_human_skills_invisible", "native_use_invisible", 1);

public bool:native_use_invisible(id) {
    server_print("***** %i", use_skill_invisible[id]);

    return use_skill_invisible[id];
}
 
Сообщения
1,055
Реакции
212
Предупреждения
9
Помог
6 раз(а)
Инцилизируй переменную с дефолт значение (false по всей видимости сначала)

== 1 не обязательно делать
 
Сообщения
403
Реакции
114
Помог
2 раз(а)
SlovePRO, а вас не смущает, что название переменной функции совпадает с названием создаваемой внутри этой функции переменной status:

Код:
public native_use_invisible(id, status)
{
    new status = use_skill_invisible[id];
    return status;
}
Такую ошибку я искал один раз у себя несколько часов :rofl:
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
SlovePRO,
Код:
public plugin_natives()
{
    register_native("zp_use_human_skills_invisible", "native_use_invisible")
}

public bool:native_use_invisible(plugin, params)
{
    return use_skill_invisible[get_param(1)];
}
 

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

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