[ZP 5.0.8] Ограничение длинного прыжка для зомби/выжившего

Сообщения
418
Реакции
-7
Предупреждения
8
Привет всем, у меня есть свой класс для людей, который имеет способность: длинный прыжок (longjump). Но эта способность срабатывает, если я зомби / выживший. Прошу помочь с проверкой на этих троих. Пробовал сам, но все без успеха.
C++:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <zp50_core>
#include <zp50_gamemodes>
#include <zp50_class_human>
#include <zp50_class_survivor>

// Vip Human Attributes
new const humanclass1_name[] = "Creator Human"
new const humanclass1_info[] = "HP + ARMOR + LJ + DMG 1.5x"
new const humanclass1_models[][] = { "leet" }
const humanclass1_health = 255
const Float: humanclass1_speed = 1.0
const Float: humanclass1_gravity = 1.0

new g_human_creator
new g_GameModeSurvivorID

new LongJump[33]

public plugin_precache()
{
    register_plugin("[ZP] Class Human: CREATOR", ZP_VERSION_STRING, "_RedGamer_")

    register_forward(FM_PlayerPreThink, "fw_PlayerPreThink")

    RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")

    g_human_creator = zp_class_human_register(humanclass1_name, humanclass1_info, humanclass1_health, humanclass1_speed, humanclass1_gravity)
    new index
    for (index = 0; index < sizeof humanclass1_models; index++)
    zp_class_human_register_model(g_human_creator, humanclass1_models[index])
}

public plugin_cfg()
{
    g_GameModeSurvivorID = zp_gamemodes_get_id("Survivor Mode")
}

public zp_fw_gamemodes_start(Gamemode)
{
    new id
    for (id = 1; id <= get_maxplayers(); id++)
    {
        if(is_user_connected(id) && ~zp_core_is_zombie(id) && (Gamemode != g_GameModeSurvivorID) && (zp_class_human_get_current(id) == g_human_creator))

        set_pev(id, pev_armorvalue, float(min(pev(id, pev_armorvalue) + 250, 999)))   
    }
}

public ShowHUD(id)
{
    if(is_user_alive(id))
    {
        set_hudmessage(200, 100, 0, 0.80, 0.87, 0, 1.0, 1.1, 0.0, 0.0, -1)
        show_hudmessage(id, "[Длинный прыжок: %d]", LongJump[id])
    }
    else
    {
        remove_task(id)
    }
}

public fw_PlayerPreThink(id)
{
     new Float: Time = get_gametime()
    static Float: iRate[33]

    if(LongJump[id] > 0){
        if(iRate[id] < Time){
            iRate[id] = Time + 1.0
            LongJump[id]--
            set_task(0.1, "ShowHUD", id, _, _, "a", LongJump[id])
        }
        return FMRES_IGNORED
    }

    if(is_user_alive(id) && zp_class_human_get_current(id) == g_human_creator){
        if(pev(id, pev_button) & IN_JUMP && !(pev(id, pev_oldbuttons) & IN_JUMP) && pev(id, pev_button) & IN_DUCK && !(pev(id, pev_oldbuttons) & IN_DUCK) && pev(id, pev_flags) & FL_ONGROUND)
        {
            new Float: iVelocity[3]
            velocity_by_aim(id, 500, iVelocity)

            iVelocity[2] = 300.0

            if(pev(id, pev_button) & IN_BACK)
            {
                iVelocity[0] *= -1
                iVelocity[1] *= -1
            }

            set_pev(id, pev_velocity, iVelocity)

            LongJump[id] = 6
        }
    }
    return FMRES_IGNORED
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
    if(is_user_alive(attacker) && victim != attacker){
        if(!zp_core_is_zombie(attacker) && get_user_weapon(attacker) && zp_class_human_get_current(attacker) == g_human_creator)
        {
            SetHamParamFloat(4, damage * 1.5)
        }
    }
}
C++:
public fw_PlayerPreThink(id)
{
     new Float: Time = get_gametime()
    static Float: iRate[33]

    if(LongJump[id] > 0){
        if(iRate[id] < Time){
            iRate[id] = Time + 1.0
            LongJump[id]--
            set_task(0.1, "ShowHUD", id, _, _, "a", LongJump[id])
        }
        return FMRES_IGNORED
    }

    if(is_user_alive(id) && zp_class_human_get_current(id) == g_human_creator){
        if(pev(id, pev_button) & IN_JUMP && !(pev(id, pev_oldbuttons) & IN_JUMP) && pev(id, pev_button) & IN_DUCK && !(pev(id, pev_oldbuttons) & IN_DUCK) && pev(id, pev_flags) & FL_ONGROUND)
        {
            new Float: iVelocity[3]
            velocity_by_aim(id, 500, iVelocity)

            iVelocity[2] = 300.0

            if(pev(id, pev_button) & IN_BACK)
            {
                iVelocity[0] *= -1
                iVelocity[1] *= -1
            }

            set_pev(id, pev_velocity, iVelocity)

            LongJump[id] = 6
        }
    }
    return FMRES_IGNORED
}
 
Сообщения
418
Реакции
-7
Предупреждения
8
Пробовал делать так в PreThink'е:
C++:
if(is_user_alive(id) && zp_class_human_get_current(id) == g_human_creator)
C++:
if(is_user_alive(id) && ~zp_core_is_zombie(id) || ~zp_class_survivor_get(id) && zp_class_human_get_current(id) == g_human_creator)
Но ничего не поменялось..
 
Сообщения
1,017
Реакции
199
Помог
6 раз(а)
RedGamer, а просто проверить на то, что игрок не зомби и с таким-то классом не?
 
Сообщения
107
Реакции
10
RedGamer, а так не пробовал
Код:
if( !is_user_alive( pPlayer ) || zp_get_user_zombie( pPlayer ) )
        return PLUGIN_HANDLED;
Естественно если что бы выживший тож не мог , то еще нужно добавить проверку на выжившего zp_get_user_survivor( pPlayer )
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
RedGamer, а так не пробовал
Код:
if( !is_user_alive( pPlayer ) || zp_get_user_zombie( pPlayer ) )
        return PLUGIN_HANDLED;
Естественно если что бы выживший тож не мог , то еще нужно добавить проверку на выжившего zp_get_user_survivor( pPlayer )
Ему же вроде надо на класс проверять зомби
 
Последнее редактирование:
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
RedGamer, а вообще, напиши вопрос правильно, а то не понятно что тебе надо. Напиши при каких условиях должен срабатывать прыжок
 
Последнее редактирование:
Сообщения
3,536
Реакции
1,552
Помог
131 раз(а)
Код:
if(is_user_alive(id) && !zp_core_is_zombie(id) && !zp_class_survivor_get(id) && zp_class_human_get_current(id) == g_human_creator)
 
Сообщения
418
Реакции
-7
Предупреждения
8
Code_0xABC, Мне показалось ему нужно что бы прыжок не работал если он Зомби или Выживший

Ждем развернутый ответ)
Мне нужно сделать чтобы прыжок мог использовать только человек с классом создатель, но если этот класс становится зомби / выжившим то прыжок остаётся и у них, вместе с худом отсчёта.
12 Июн 2024
Код:
if(is_user_alive(id) && !zp_core_is_zombie(id) && !zp_class_survivor_get(id) && zp_class_human_get_current(id) == g_human_creator)
Не сработало
12 Июн 2024
Ему же вроде надо на класс проверять зомби
Не изменилось.
12 Июн 2024
Другими словами, мне нужно ограничить эту способность для зомби / выжившего, думаю, так понятнее будет.
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
RedGamer, покажи какие значение выведут проверки
Код:
server_print("** %i, %i, %i", zp_core_is_zombie(id), zp_class_survivor_get(id), (zp_class_human_get_current(id) == g_human_creator));
 
Сообщения
418
Реакции
-7
Предупреждения
8
RedGamer, покажи какие значение выведут проверки
Код:
server_print("** %i, %i, %i", zp_core_is_zombie(id), zp_class_survivor_get(id), (zp_class_human_get_current(id) == g_human_creator));
Тип: человек | **0, 0, 1
Тип: зомби | **0, 0, 1
Тип: выживший | **0, 0,1
12 Июн 2024
Надеюсь, я там проверку поставил?
C++:
if(is_user_alive(id) && !zp_core_is_zombie(id) && !zp_class_survivor_get(id) && zp_class_human_get_current(id) == g_human_creator){
server_print("** %i, %i, %i", zp_core_is_zombie(id), zp_class_survivor_get(id), (zp_class_human_get_current(id) == g_human_creator));
 
Сообщения
107
Реакции
10
RedGamer, попробуй
Код:
if(is_user_alive(id) && zp_class_human_get_current(id) == g_human_creator && zp_core_is_zombie(id) && zp_class_survivor_get(id))
По сути должно заработать
 
Сообщения
418
Реакции
-7
Предупреждения
8
RedGamer, попробуй
Код:
if(is_user_alive(id) && zp_class_human_get_current(id) == g_human_creator && zp_core_is_zombie(id) && zp_class_survivor_get(id))
По сути должно заработать
Не помогло.
12 Июн 2024
RedGamer, покажи какие значение выведут проверки
Код:
server_print("** %i, %i, %i", zp_core_is_zombie(id), zp_class_survivor_get(id), (zp_class_human_get_current(id) == g_human_creator));
Поправил немного..
Когда я человек: **0, 0, 1
Когда я зомби: **1, 0, 1
Когда я выживший: **0, 1, 1
12 Июн 2024
То есть.. он у всех троих берёт класс создателя.. хотя это зомби / выживший..
 
Сообщения
418
Реакции
-7
Предупреждения
8
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
RedGamer, не берет, а если условие верное, вернет 1, вобратном случае 0.
 
Сообщения
418
Реакции
-7
Предупреждения
8
RedGamer, не берет, а если условие верное, вернет 1, вобратном случае 0.
Так должно же получится, по логике так:

Когда я человек: **0, 0, 1
Когда я зомби: **1, 0, 0
Когда я выживший: **0, 1, 0

Это будет тем, что мне нужно)
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
Ну я же не знаю в какой момент ты проверял например игрока на живучесть
 
Сообщения
418
Реакции
-7
Предупреждения
8
@Code_0xABC,На человека я проверял просто взяв "Класс людей: Создатель", в консоли спамит **0, 0, 1. На зомби, взял любой класс зомбака, превратившись в зомби, в консоли спамит **1, 0, 1. На выжившего, превратившись в единственного выжившего, в консоли спамит **0, 1, 1.
12 Июн 2024
Последняя единица отвечает за zp_class_human_get_current(id) == g_human_creator и она срабатывает на зомби / выжившем, а мне наоборот, нужно отключить чтение <Класса людей: Создатель> для зомби и выжившего. Надеюсь, так намного понятнее, что я пытаюсь пофиксить. Что я только не пробовал.. не выходит то, что мне нужно
 
Сообщения
107
Реакции
10
RedGamer, то есть тебе нужно, что бы лонг прыжок работал когда у тебя класс "создатель", но так же он работал когда ты зомби и выживший, но класс "создатель" не работал если ты зомби и выживший?
Я правильно понял?
 
Сообщения
418
Реакции
-7
Предупреждения
8
RedGamer, то есть тебе нужно, что бы лонг прыжок работал когда у тебя класс "создатель", но так же он работал когда ты зомби и выживший, но класс "создатель" не работал если ты зомби и выживший?
Я правильно понял?
То есть мне нужно, чтобы лонг прыжок работал, когда у меня класс "создатель", но так же чтобы он не работал, когда я зомби и выживший.
 

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

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