Русское сообщество по скриптингу

Админ Меню by SkocH: бесконечные прыжки  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Админ Меню by SkocH: бесконечные прыжки

Сообщение servercsikqldikq » 27 май 2017, 18:35

Добавил бесконечные прыжки. Работает.
Хочу, чтобы когда нажимаешь на 5 вкл/выкл. бесконечные прыжки.
А у меня когда нажимаешь на 5 (при нажатии кнопки) прыгает.
Что делаю не так?

Заранее спасибо! :-)
Последний раз редактировалось servercsikqldikq 27 май 2017, 19:59, всего редактировалось 1 раз.
Аватара пользователя
servercsikqldikq
 
Сообщения: 7
Зарегистрирован: 11 мар 2017, 17:29
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.

Re: Админ Меню by SkocH: бесконечные прыжки

Сообщение Dart_Begep » 27 май 2017, 19:38

Ошибка в client_PostThink :

Код: Выделить всё
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

Конечно, как только ты включишь "бесконечный прыжок", ты сразу прыгнешь. Но только один раз. И независимо от клавиши прыжка.
Аватара пользователя
Dart_Begep
 
Сообщения: 131
Зарегистрирован: 19 апр 2017, 22:29
Благодарил (а): 11 раз.
Поблагодарили: 27 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn
Php
JavaScript

Re: Админ Меню by SkocH: бесконечные прыжки

Сообщение Subb98 » 27 май 2017, 19:42

servercsikqldikq, добрый вечер. Пожалуйста, измените название темы на информативное, в соответствии Вы должны зарегистрироваться, чтобы видеть ссылки.. Если Вы не сделаете этого в течение суток, я изменю название темы сам, однако в этом случае Вам будет выдано предупреждение в профиль.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: Админ Меню by SkocH: бесконечные прыжки

Сообщение servercsikqldikq » 27 май 2017, 20:03

Subb98 писал(а):
servercsikqldikq, добрый вечер. Пожалуйста, измените название темы на информативное, в соответствии Вы должны зарегистрироваться, чтобы видеть ссылки.. Если Вы не сделаете этого в течение суток, я изменю название темы сам, однако в этом случае Вам будет выдано предупреждение в профиль.

так норм?

Добавлено спустя 3 минуты 30 секунд:
Dart_Begep писал(а):Ошибка в client_PostThink :

Код: Выделить всё
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

Конечно, как только ты включишь "бесконечный прыжок", ты сразу прыгнешь. Но только один раз. И независимо от клавиши прыжка.

Квар:

Код: Выделить всё
amx_maxjumps 9999999 // количество дополнительных прыжков 

Как сделать, чтобы мог вкл/выкл?

Код: Выделить всё
case 4:
{
    if(!dojump[id])
    {
        dojump[id] = true
    
}
    else
    
{
        dojump[id] = false
    
}
    AdminMenu(id)

Разве не так?
Аватара пользователя
servercsikqldikq
 
Сообщения: 7
Зарегистрирован: 11 мар 2017, 17:29
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.

Re: Админ Меню by SkocH: бесконечные прыжки

Сообщение Dart_Begep » 27 май 2017, 20:10

servercsikqldikq писал(а):Как сделать, чтобы мог вкл/выкл?

Код: Выделить всё
case 4:
{
    if(!dojump[id])
    {
        dojump[id] = true
    
}
    else
    
{                       
        dojump
[id] = false
    
}
    AdminMenu(id)

Разве не так?

Так, но тебе надо переписать функцию client_PostThink, чтобы проверять еще и нажатие кнопки прыжка.
Аватара пользователя
Dart_Begep
 
Сообщения: 131
Зарегистрирован: 19 апр 2017, 22:29
Благодарил (а): 11 раз.
Поблагодарили: 27 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn
Php
JavaScript

Re: Админ Меню by SkocH: бесконечные прыжки

Сообщение servercsikqldikq » 27 май 2017, 20:17

Dart_Begep, бесконечные прыжки-то работают, только не отключается. Ещё прыгает, когда нажимаешь на 5..
Аватара пользователя
servercsikqldikq
 
Сообщения: 7
Зарегистрирован: 11 мар 2017, 17:29
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.

Re: Админ Меню by SkocH: бесконечные прыжки

Сообщение Dart_Begep » 27 май 2017, 20:43

Кстати... у тебя логика в обоих client_...Think с ошибкой. У тебя получается, что прыжок всегда работает.
Код: Выделить всё
public client_PreThink(id)
{
    if(!is_user_alive(id)) return PLUGIN_CONTINUE
    if
(get_cvar_num("amx_mjadminonly") && (!access(id,ADMINACCESS))) 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] < get_cvar_num("amx_maxjumps"))
        {
        ->    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
(get_cvar_num("amx_mjadminonly") && (!access(id,ADMINACCESS))) 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
}

Обозначил стрелочкой.

Добавлено спустя 2 минуты 50 секунд:
dojump[id] должен менять состояние только через меню. Вот в чем именно ошибка.

Добавлено спустя 11 минут 25 секунд:
Как-то так:
Код: Выделить всё
public client_PreThink(id)
{
    if(!is_user_alive(id)) return PLUGIN_CONTINUE
    if
(get_cvar_num("amx_mjadminonly") && (!access(id,ADMINACCESS))) 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] < get_cvar_num("amx_maxjumps"))&&dojump[id])
        {
            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
(get_cvar_num("amx_mjadminonly") && (!access(id,ADMINACCESS))) return PLUGIN_CONTINUE
    if
(dojump[id]&&(jumpnum[id]>0))
    {
        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)
        return PLUGIN_CONTINUE
    
}
    return PLUGIN_CONTINUE
}
Аватара пользователя
Dart_Begep
 
Сообщения: 131
Зарегистрирован: 19 апр 2017, 22:29
Благодарил (а): 11 раз.
Поблагодарили: 27 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn
Php
JavaScript

Re: Админ Меню by SkocH: бесконечные прыжки

Сообщение servercsikqldikq » 27 май 2017, 20:55

Dart_Begep, спасибо! Вкл/выкл работает и не прыгает при нажатии 5!
Вот только одна проблемка..

Стоит нажать на пробел: само прыгает и не отключается.. о_О
Аватара пользователя
servercsikqldikq
 
Сообщения: 7
Зарегистрирован: 11 мар 2017, 17:29
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.

Re: Админ Меню by SkocH: бесконечные прыжки  [Решено]

Сообщение Dart_Begep » 27 май 2017, 22:55

servercsikqldikq писал(а):Dart_Begep, спасибо! Вкл/выкл работает и не прыгает при нажатии 5!
Вот только одна проблемка..

Стоит нажать на пробел: само прыгает и не отключается.. о_О

Вот:
Код: Выделить всё
public client_PreThink(id)
{
    if(!is_user_alive(id)) return PLUGIN_CONTINUE
    if
(get_cvar_num("amx_mjadminonly") && (!access(id,ADMINACCESS))) 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] < get_cvar_num("amx_maxjumps")) && dojump[id])
        {
            jumpnum[id]++
            return PLUGIN_CONTINUE
        
}
        else
        
{
            dojump[id] = false
            return PLUGIN_CONTINUE
        
}
    }
    if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
    {
        jumpnum[id] = 0
        return PLUGIN_CONTINUE
    
}
    return PLUGIN_CONTINUE
}

Но есть второе но:
Код: Выделить всё
    if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
    {
        jumpnum[id] = 0
        return PLUGIN_CONTINUE
    
}

Тебе и нужен сброс при приземлении? Если не нужен, тогда "jumpnum[id] = 0" надо поместить в код меню, а отсюда вообще исключить.

Добавлено спустя 2 минуты 16 секунд:
В функции func_menu
Код: Выделить всё
                if(!dojump[id])
                {
                        jumpnum[id] = 0
                        dojump
[id] = true
                
}
                else
                
{
                        dojump[id] = false
                


Добавлено спустя 5 минут 17 секунд:
Стоп, это не все...

Добавлено спустя 3 минуты 13 секунд:
Вот:
Код: Выделить всё
public client_PostThink(id)
{
    if(!is_user_alive(id)) return PLUGIN_CONTINUE
    if
(get_cvar_num("amx_mjadminonly") && (!access(id,ADMINACCESS))) return PLUGIN_CONTINUE
    new nbut 
= get_user_button(id)
    if(dojump[id] && (jumpnum[id] > 0) && (nbut & IN_JUMP))
    {
        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)
        return PLUGIN_CONTINUE
    
}
    return PLUGIN_CONTINUE
}


Добавлено спустя 1 час 6 минут 3 секунды:
Кстати обнаружил еще один баг, заключающийся в том, что "бесконечный" прыжок работает только если нажимаешь прыжок в полете. С земли же не срабатывает. Думаю, что вот так лучше:
Код: Выделить всё
public client_PreThink(id)
{
    if(!is_user_alive(id)) return PLUGIN_CONTINUE
    if
(get_cvar_num("amx_mjadminonly") && (!access(id,ADMINACCESS))) 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] < get_cvar_num("amx_maxjumps")) && dojump[id])
        {
            jumpnum[id]++
            return PLUGIN_CONTINUE
        
}
        else
            dojump
[id] = false
    
}
    // если сброс при приземлении не нужен, следующий if не нужен
    if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
    {
        jumpnum[id] = 0
        return PLUGIN_CONTINUE
    
}
    return PLUGIN_CONTINUE
Соответственно в cvar amx_maxjumps у тебя максимальное количество прыжков.
Но в этом случае вот это
Код: Выделить всё
    if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
    {
        jumpnum[id] = 0
        return PLUGIN_CONTINUE
    
}
сбрасывает счетчик при прыжке с места. В общем смотри сам тогда, как именно тебе нужно, чтобы работал. Можно либо убрать эту часть кода, либо использовать предыдущий вариант.
Аватара пользователя
Dart_Begep
 
Сообщения: 131
Зарегистрирован: 19 апр 2017, 22:29
Благодарил (а): 11 раз.
Поблагодарили: 27 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn
Php
JavaScript


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 14