Sign in to follow this  
Followers 0
MKOD

Прыжок в воздухе с ограничением

12 posts in this topic

Всем привет

Короче вот такая проблема у меня есть плагин для прыжка в воздухе и я хотел бы сделать

К примеру я имею 1 доп прыжок и если я нажму 2 раза на SPACE то тот доп прыжок исчезнет и теперь я не смогу прыгать в воздухе

Помогите пж и да чтобы был квар для изменения прыжков в воздухе

Share this post


Link to post
Share on other sites

#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <mkod_zombie_mode>

#define LEADER_FLAGS ADMIN_LEVEL_D
#define MAX_JUMP_IN_AIR 1

new jumpnum[33] = 0
new bool:dojump[33] = false

public client_putinserver(id)
{
    jumpnum[id] = 0
    dojump[id] = false
}

public client_disconnect(id)
{
    jumpnum[id] = 0
    dojump[id] = false
}

public client_PreThink(id)
{
    if(!is_user_alive(id)) return PLUGIN_CONTINUE
    if(!access(id, LEADER_FLAGS)) return PLUGIN_CONTINUE
    new nbut = get_user_button(id)
    new obut = get_user_oldbutton(id)
    if((nbut & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(obut & IN_JUMP))
    {
        if(jumpnum[id] < MAX_JUMP_IN_AIR)
        {
            dojump[id] = true
            jumpnum[id]++
            return PLUGIN_CONTINUE
        }
    }
    if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
    {
        jumpnum[id] = 0
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}

public client_PostThink(id)
{
    if(!is_user_alive(id)) return PLUGIN_CONTINUE
    if(!access(id, LEADER_FLAGS)) return PLUGIN_CONTINUE
    if(dojump[id] == true)
    {
        new Float:velocity[3]
        entity_get_vector(id, EV_VEC_velocity, velocity)
        velocity[2] = random_float(265.0, 285.0)
        entity_set_vector(id, EV_VEC_velocity, velocity)
        dojump[id] = false
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}

Share this post


Link to post
Share on other sites

Ничего не понял... Если тебе не надо "дополнительные прыжки" отключи плагин.
 

38 минут назад, MKOD сказал:

Помогите пж и да чтобы был квар для изменения прыжков в воздухе

Кол-во "дополнительных прыжков" и так настраивается макросом.

#define MAX_JUMP_IN_AIR 1 

 

Share this post


Link to post
Share on other sites
3 часа назад, JIuXeP сказал:

Ничего не понял... Если тебе не надо "дополнительные прыжки" отключи плагин.
 

Кол-во "дополнительных прыжков" и так настраивается макросом.


#define MAX_JUMP_IN_AIR 1 

 

Ты не понял вот плагин я хочу его переделать

Может знаешь есть такой зомби класс у которого есть способность прыгать в воздухе если заразить одного чела то даётся +1 прыжок в воздухе так вот суть если использовать этот прыжок в воздухе то всё тебе выдалось +1 прыжок ты его потратил всё прыгать не сможешь пока не заразишь ещё кого то

 

Так и с этим плагином тут есть всё и макс прыжков в воздухе но я хочу сделать ограничение чтобы можно было прыгать в воздухе ну примерно только 5 раз за раунд и всё потом в next раунд опять появится эта способность

Share this post


Link to post
Share on other sites
#include <amxmodx>
#include <amxmisc>
#include <engine>
// #include <mkod_zombie_mode>

#define LEADER_FLAGS ADMIN_LEVEL_D

new jumpnum[33] = 0
new bool:dojump[33] = false
new jumpsinair, jumpslimit, jumps_counter[33] = 0;

public plugin_init()
{
	register_logevent("RoundStart", 2, "1=Round_Start");
	
	jumpsinair = get_pcvar_num(register_cvar("zp_jumps_in_air", "1")); // Кол-во дополнительных прыжков в воздухе
	jumpslimit = get_pcvar_num(register_cvar("zp_limit_jumps", "5")); // Лимит прыжков в раунде
}

public RoundStart()
{
	new players[32], pnum;
	get_players(players, pnum, "ach");

	for(new i, player; i < pnum; i++) {
		player = players[i];
		jumps_counter[player] = 0;
	}
}

public client_putinserver(id)
{
    jumpnum[id] = 0
    dojump[id] = false
}

public client_disconnect(id)
{
    jumpnum[id] = 0
    dojump[id] = false
}

public client_PreThink(id)
{
    if(!is_user_alive(id)) return PLUGIN_CONTINUE
    if(!access(id, LEADER_FLAGS)) return PLUGIN_CONTINUE
    new nbut = get_user_button(id)
    new obut = get_user_oldbutton(id)
    if((nbut & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(obut & IN_JUMP))
    {
        if(jumpnum[id] < jumpsinair && jumpslimit > jumps_counter[id]++)
        {
            dojump[id] = true
            jumpnum[id]++
            return PLUGIN_CONTINUE
        }
    }
    if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
    {
        jumpnum[id] = 0
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}

public client_PostThink(id)
{
    if(!is_user_alive(id)) return PLUGIN_CONTINUE
    if(!access(id, LEADER_FLAGS)) return PLUGIN_CONTINUE
    if(dojump[id] == true)
    {
        new Float:velocity[3]
        entity_get_vector(id, EV_VEC_velocity, velocity)
        velocity[2] = random_float(265.0, 285.0)
        entity_set_vector(id, EV_VEC_velocity, velocity)
        dojump[id] = false
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}

 

Share this post


Link to post
Share on other sites

Вариант выше считает каждый прыжок в воздухе. Если нужно подсчитать только событие, когда он использовал доп. прыжки (в воздухе), не важно сколько, то делаем поправки...

if(jumpnum[id] < jumpsinair && jumpslimit > jumps_counter[id]++)
{
  dojump[id] = true
  jumpnum[id]++
  return PLUGIN_CONTINUE
}

// заменяем на:

new limiter;
if(jumpnum[id] < 1) limiter = jumps_counter[id]++;

if(jumpnum[id] < jumpsinair && jumpslimit > limiter)
{
  dojump[id] = true
  jumpnum[id]++
  return PLUGIN_CONTINUE
}

Только сейчас заметил... почему везде PLUGIN_CONTINUE, так точно нужно?xD
Может так (парочку поправок внес ещё)?

#include <amxmodx>
#include <amxmisc>
#include <engine>
// #include <mkod_zombie_mode>

#define LEADER_FLAGS ADMIN_LEVEL_D

new jumpnum[33] = 0
new bool:dojump[33] = false
new jumpsinair, jumpslimit, jumps_counter[33] = 0;

public plugin_init()
{
	register_logevent("RoundStart", 2, "1=Round_Start");
	
	jumpsinair = get_pcvar_num(register_cvar("zp_jumps_in_air", "3")); // Кол-во дополнительных прыжков в воздухе
	jumpslimit = get_pcvar_num(register_cvar("zp_limit_jumps", "5")); // Лимит прыжков в раунде
}

public RoundStart()
{
	new players[32], pnum;
	get_players(players, pnum, "ach");

	for(new i, player; i < pnum; i++) {
		player = players[i];
		jumps_counter[player] = 0;
	}
}

public client_putinserver(id)
{
    jumpnum[id] = 0
    dojump[id] = false
}

public client_disconnect(id)
{
    jumpnum[id] = 0
    dojump[id] = false
}

public client_PreThink(id)
{
    if(!is_user_alive(id) || is_user_bot(id)) return PLUGIN_HANDLED
    if(!access(id, LEADER_FLAGS)) return PLUGIN_HANDLED
	
    new nbut = get_user_button(id)
    new obut = get_user_oldbutton(id)
    if((nbut & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(obut & IN_JUMP))
    {
        new limiter;
        if(jumpnum[id] < 1) limiter = jumps_counter[id]++;
		
        if(jumpnum[id] < jumpsinair && jumpslimit > limiter)
        {
            dojump[id] = true
            jumpnum[id]++
            return PLUGIN_HANDLED
        }
    }
    if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
    {
        jumpnum[id] = 0
        return PLUGIN_HANDLED
    }
    return PLUGIN_CONTINUE
}

public client_PostThink(id)
{
    if(!is_user_alive(id) || is_user_bot(id)) return PLUGIN_HANDLED
    if(!access(id, LEADER_FLAGS)) return PLUGIN_HANDLED
	
    if(dojump[id] == true)
    {
        new Float:velocity[3]
        entity_get_vector(id, EV_VEC_velocity, velocity)
        velocity[2] = random_float(265.0, 285.0)
        entity_set_vector(id, EV_VEC_velocity, velocity)
        dojump[id] = false
        return PLUGIN_HANDLED
    }
    return PLUGIN_CONTINUE
}

 

Share this post


Link to post
Share on other sites
4 часа назад, JIuXeP сказал:

Вариант выше считает каждый прыжок в воздухе. Если нужно подсчитать только событие, когда он использовал доп. прыжки (в воздухе), не важно сколько, то делаем поправки...


if(jumpnum[id] < jumpsinair && jumpslimit > jumps_counter[id]++)
{
  dojump[id] = true
  jumpnum[id]++
  return PLUGIN_CONTINUE
}

// заменяем на:

new limiter;
if(jumpnum[id] < 1) limiter = jumps_counter[id]++;

if(jumpnum[id] < jumpsinair && jumpslimit > limiter)
{
  dojump[id] = true
  jumpnum[id]++
  return PLUGIN_CONTINUE
}

Только сейчас заметил... почему везде PLUGIN_CONTINUE, так точно нужно?xD
Может так (парочку поправок внес ещё)?


#include <amxmodx>
#include <amxmisc>
#include <engine>
// #include <mkod_zombie_mode>

#define LEADER_FLAGS ADMIN_LEVEL_D

new jumpnum[33] = 0
new bool:dojump[33] = false
new jumpsinair, jumpslimit, jumps_counter[33] = 0;

public plugin_init()
{
	register_logevent("RoundStart", 2, "1=Round_Start");
	
	jumpsinair = get_pcvar_num(register_cvar("zp_jumps_in_air", "3")); // Кол-во дополнительных прыжков в воздухе
	jumpslimit = get_pcvar_num(register_cvar("zp_limit_jumps", "5")); // Лимит прыжков в раунде
}

public RoundStart()
{
	new players[32], pnum;
	get_players(players, pnum, "ach");

	for(new i, player; i < pnum; i++) {
		player = players[i];
		jumps_counter[player] = 0;
	}
}

public client_putinserver(id)
{
    jumpnum[id] = 0
    dojump[id] = false
}

public client_disconnect(id)
{
    jumpnum[id] = 0
    dojump[id] = false
}

public client_PreThink(id)
{
    if(!is_user_alive(id) || is_user_bot(id)) return PLUGIN_HANDLED
    if(!access(id, LEADER_FLAGS)) return PLUGIN_HANDLED
	
    new nbut = get_user_button(id)
    new obut = get_user_oldbutton(id)
    if((nbut & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(obut & IN_JUMP))
    {
        new limiter;
        if(jumpnum[id] < 1) limiter = jumps_counter[id]++;
		
        if(jumpnum[id] < jumpsinair && jumpslimit > limiter)
        {
            dojump[id] = true
            jumpnum[id]++
            return PLUGIN_HANDLED
        }
    }
    if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
    {
        jumpnum[id] = 0
        return PLUGIN_HANDLED
    }
    return PLUGIN_CONTINUE
}

public client_PostThink(id)
{
    if(!is_user_alive(id) || is_user_bot(id)) return PLUGIN_HANDLED
    if(!access(id, LEADER_FLAGS)) return PLUGIN_HANDLED
	
    if(dojump[id] == true)
    {
        new Float:velocity[3]
        entity_get_vector(id, EV_VEC_velocity, velocity)
        velocity[2] = random_float(265.0, 285.0)
        entity_set_vector(id, EV_VEC_velocity, velocity)
        dojump[id] = false
        return PLUGIN_HANDLED
    }
    return PLUGIN_CONTINUE
}

 

Может ото шутка у тебя но как я поставлю этот плаг на сервер сразу всё люди не могут ходить кнопки на мышке для удара для прицела итд не работают никакие меню не работают так вот только уберу плаг и всё работает что это такое

Share this post


Link to post
Share on other sites

Упс. неожидал.

#include <amxmodx>
#include <amxmisc>
#include <engine>
// #include <mkod_zombie_mode>

#define LEADER_FLAGS ADMIN_LEVEL_D

new jumpnum[33] = 0
new bool:dojump[33] = false
new jumpsinair, jumpslimit, jumps_counter[33] = 0;

public plugin_init()
{
	register_logevent("RoundStart", 2, "1=Round_Start");
	
	jumpsinair = get_pcvar_num(register_cvar("zp_jumps_in_air", "3")); // Кол-во дополнительных прыжков в воздухе
	jumpslimit = get_pcvar_num(register_cvar("zp_limit_jumps", "5")); // Лимит прыжков в раунде
}

public RoundStart()
{
	new players[32], pnum;
	get_players(players, pnum, "ach");

	for(new i, player; i < pnum; i++) {
		player = players[i];
		jumps_counter[player] = 0;
	}
}

public client_putinserver(id)
{
    jumpnum[id] = 0
    dojump[id] = false
}

public client_disconnect(id)
{
    jumpnum[id] = 0
    dojump[id] = false
}

public client_PreThink(id)
{
    if(!is_user_alive(id) || is_user_bot(id)) return PLUGIN_CONTINUE
    if(!access(id, LEADER_FLAGS)) return PLUGIN_CONTINUE
	
    new nbut = get_user_button(id)
    new obut = get_user_oldbutton(id)
    if((nbut & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(obut & IN_JUMP))
    {
        new limiter;
        if(jumpnum[id] < 1) limiter = jumps_counter[id]++;
		
        if(jumpnum[id] < jumpsinair && jumpslimit > limiter)
        {
            dojump[id] = true
            jumpnum[id]++
            return PLUGIN_CONTINUE
        }
    }
    if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
    {
        jumpnum[id] = 0
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}

public client_PostThink(id)
{
    if(!is_user_alive(id) || is_user_bot(id)) return PLUGIN_CONTINUE
    if(!access(id, LEADER_FLAGS)) return PLUGIN_CONTINUE
	
    if(dojump[id] == true)
    {
        new Float:velocity[3]
        entity_get_vector(id, EV_VEC_velocity, velocity)
        velocity[2] = random_float(265.0, 285.0)
        entity_set_vector(id, EV_VEC_velocity, velocity)
        dojump[id] = false
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}

 

Share this post


Link to post
Share on other sites
В 01.01.2017 в 12:57, JIuXeP сказал:

Упс. неожидал.


#include <amxmodx>
#include <amxmisc>
#include <engine>
// #include <mkod_zombie_mode>

#define LEADER_FLAGS ADMIN_LEVEL_D

new jumpnum[33] = 0
new bool:dojump[33] = false
new jumpsinair, jumpslimit, jumps_counter[33] = 0;

public plugin_init()
{
	register_logevent("RoundStart", 2, "1=Round_Start");
	
	jumpsinair = get_pcvar_num(register_cvar("zp_jumps_in_air", "3")); // Кол-во дополнительных прыжков в воздухе
	jumpslimit = get_pcvar_num(register_cvar("zp_limit_jumps", "5")); // Лимит прыжков в раунде
}

public RoundStart()
{
	new players[32], pnum;
	get_players(players, pnum, "ach");

	for(new i, player; i < pnum; i++) {
		player = players[i];
		jumps_counter[player] = 0;
	}
}

public client_putinserver(id)
{
    jumpnum[id] = 0
    dojump[id] = false
}

public client_disconnect(id)
{
    jumpnum[id] = 0
    dojump[id] = false
}

public client_PreThink(id)
{
    if(!is_user_alive(id) || is_user_bot(id)) return PLUGIN_CONTINUE
    if(!access(id, LEADER_FLAGS)) return PLUGIN_CONTINUE
	
    new nbut = get_user_button(id)
    new obut = get_user_oldbutton(id)
    if((nbut & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(obut & IN_JUMP))
    {
        new limiter;
        if(jumpnum[id] < 1) limiter = jumps_counter[id]++;
		
        if(jumpnum[id] < jumpsinair && jumpslimit > limiter)
        {
            dojump[id] = true
            jumpnum[id]++
            return PLUGIN_CONTINUE
        }
    }
    if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
    {
        jumpnum[id] = 0
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}

public client_PostThink(id)
{
    if(!is_user_alive(id) || is_user_bot(id)) return PLUGIN_CONTINUE
    if(!access(id, LEADER_FLAGS)) return PLUGIN_CONTINUE
	
    if(dojump[id] == true)
    {
        new Float:velocity[3]
        entity_get_vector(id, EV_VEC_velocity, velocity)
        velocity[2] = random_float(265.0, 285.0)
        entity_set_vector(id, EV_VEC_velocity, velocity)
        dojump[id] = false
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}

 

Не работает

Share this post


Link to post
Share on other sites
8 часов назад, MKOD сказал:

Не работает

Хм. Должно быть всё нормально.
А флаг "p" есть на привилегии?

#define LEADER_FLAGS ADMIN_LEVEL_D

Share this post


Link to post
Share on other sites
14 часа назад, JIuXeP сказал:

Хм. Должно быть всё нормально.
А флаг "p" есть на привилегии?


#define LEADER_FLAGS ADMIN_LEVEL_D

Я гл админ у меня все флаги

Share this post


Link to post
Share on other sites
4 часа назад, MKOD сказал:

Я гл админ у меня все флаги

В 04.01.2017 в 10:12, MKOD сказал:

Не работает

Что именно не работает? Вообще нету дополнительных прыжков?
Я догадываюсь, в чем проблема, и полагал что так может быть...  заметил особенность, когда сидел на ПК, у меня такая же проблема была, "предусловие" не успевало обрабатываться, сейчас попробовал на ноуте, всё хорошо работает. Видимо это зависит от процессора, точнее от того, как быстро он это всё обрабатывает. Хотя возможно и глупости говорю...

Разберемся. Попробуй вариант с этого поста, интересно знать, будут ли даваться прыжки

 

Edited by JIuXeP

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0