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

BHOP BLOCK

Новые плагины для AMX Mod X, которые были добавлены в базу плагинов нашего форума. Плагины еще не утвеждены администратором/модератором.

Модератор: Leonidddd

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

Данный раздел форума служит для добавления новых плагинов в базу нашего форума. После того, как администратор/модератор утвердит плагин, он будет перемещен в раздел "Утвежденные плагины".

Правила при добавлении новых плагинов:

1. При вставке кода плагина необходимо использовать тег [pawn], в противном случае, если тег [pawn] не отображает ваш код, можно использовать тег [code].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. Обязательно выкладывайте исходник sma плагина. Запрещено выкладывать amxx файл.
4. Обязательно указывайте настоящих авторов плагина, если вы использовали чьи-то наработки или функции, указывайте их авторов в сообщении.
5. Необходимо заполнять детальную информацию о плагине (версию, настройки, используемые модули, список изменений и другую).

BHOP BLOCK

Сообщение Leo_[BH] » 28 сен 2016, 16:18



Автор: Leo_[BH]
Версия: 1.8
Описание: Плагин для блокировки Распрыжки / Bunny Hop (Анти банни-хоп)
Изначально этот плагин я сделал для своего сервера зомби-мода.
Можно использовать для реалистичности.

Настройки (amxx.cfg):
bhop_distance "180" // Минимальная дистанция, при которой происходит замедление
bhop_speed_x "0.75" // Коэффициент торможения после приземления
bhop_jumps "3" // Разрешаемое количество прыжков без замедления

1.8
Добавлены переменные для настройки плагина.
Добавлена возможность сделать несколько прыжков игроку, перед тем, как он будет замедлен.
(Настраивается кваром bhop_jumps)

У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Leo_[BH] 28 май 2020, 23:54, всего редактировалось 9 раз(а).
Сохраняйте историю
Аватара пользователя
Leo_[BH]
 
Сообщения: 98
Зарегистрирован: 06 апр 2014, 17:51
Откуда: UA
Благодарил (а): 9 раз.
Поблагодарили: 30 раз.
Опыт программирования: Больше трех лет

Re: BHOP BLOCK

Сообщение Subb98 » 25 апр 2017, 12:07

Предлагаю следующие изменения (не тестировал):

Код: Выделить всё
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define JUMP_DISTANCE 120         // Минимальная дистанция, при которой происходит торможение
#define BHOP_SPEED_X 0.75         // Коэффициент торможения после приземления

const OFFSET_PAINSHOCK 108

new bool:g_is_alive[33]
new 
in_air[33], old_in_air[33]
new 
origin1[33][3], origin2[33][3]

public 
plugin_init()
{
    
register_plugin("BHOP BLOCK""1.6""Leo_[BH]")

    
RegisterHam(Ham_Player_Jump"player""fw_PlayerJump")
    
RegisterHam(Ham_Spawn"player""fw_PlayerSpawn_Post"1)
    
RegisterHam(Ham_Killed"player""fw_PlayerKilled")
}

public 
client_putinserver(id)
{
    
g_is_alive[id] = false
    in_air
[id] = 0
    old_in_air
[id] = 0
}

public 
fw_PlayerJump(id)
{
    if(!
g_is_alive[id]) return HAM_IGNORED

    old_in_air
[id] = in_air[id]

    if(
pev(idpev_flags) & (FL_ONGROUND FL_CONVEYOR))
    {
        
in_air[id] = 0
    
}
    else
    {
        
in_air[id] = 1
    
}

    if(!
old_in_air[id] && in_air[id]) // Мгновение назад был на земле, а сейчас - в воздухе
    
{
        
get_user_origin(idorigin1[id])
    }

    if(
old_in_air[id] && !in_air[id]) // Мгновение назад был в воздухе, а сейчас - на земле
    
{
        
get_user_origin(idorigin2[id])

        if(
get_distance(origin1[id], origin2[id]) > JUMP_DISTANCE)
        {
            
set_pdata_float(idOFFSET_PAINSHOCKBHOP_SPEED_X// Тормозим игрока
        
}
    }

    return 
HAM_IGNORED
}

public 
fw_PlayerSpawn_Post(id)
{
    if(
is_user_alive(id))
    {
        
g_is_alive[id] = true
    
}
}

public 
fw_PlayerKilled(victimattacker)
{
    
g_is_alive[victim] = false
    in_air
[victim] = 0
    old_in_air
[victim] = 0
}

// Другие мои плагины: https://vk.com/cs_rain 
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: BHOP BLOCK

Сообщение lop50956 » 25 апр 2017, 14:46

Короч это бред. Бхоп над вырезать подругому чтобы работало нормально, а этот метод костылен из за предикта.
Аватара пользователя
lop50956
 
Сообщения: 178
Зарегистрирован: 29 ноя 2016, 00:36
Забанен
Благодарил (а): 18 раз.
Поблагодарили: 16 раз.
Опыт программирования: Больше трех лет
Языки программирования: Php

Re: BHOP BLOCK

Сообщение Leo_[BH] » 31 окт 2017, 05:41

Subb98, Проверил твой вариант
Код: Выделить всё
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define JUMP_DISTANCE 120         // Минимальная дистанция, при которой происходит торможение
#define BHOP_SPEED_X 0.75         // Коэффициент торможения после приземления

const OFFSET_PAINSHOCK = 108

new bool
:g_is_alive[33]
new in_air[33], old_in_air[33]
new origin1[33][3], origin2[33][3]

public plugin_init()
{
    register_plugin("BHOP BLOCK", "1.6test", "Leo_[BH]")

    RegisterHam(Ham_Player_Jump, "player", "fw_PlayerJump")
    RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)
    RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
}

public client_putinserver(id)
{
    g_is_alive[id] = false
    in_air
[id] = 0
    old_in_air
[id] = 0
}

public fw_PlayerJump(id)
{
    if(!g_is_alive[id]) return HAM_IGNORED

    old_in_air
[id] = in_air[id]

    if(pev(id, pev_flags) & (FL_ONGROUND | FL_CONVEYOR))
    {
        in_air[id] = 0
    
}
    else
    
{
        in_air[id] = 1
    
}

    if(!old_in_air[id] && in_air[id]) // Мгновение назад был на земле, а сейчас - в воздухе
    {
        get_user_origin(id, origin1[id])
        client_print(id, print_chat, "Ты прыгнул!")
    }

    if(old_in_air[id] && !in_air[id]) // Мгновение назад был в воздухе, а сейчас - на земле
    {
        get_user_origin(id, origin2[id])
        
        client_print
(id, print_chat, "Ты приземлился!")

        if(get_distance(origin1[id], origin2[id]) > JUMP_DISTANCE)
        {
            set_pdata_float(id, OFFSET_PAINSHOCK, BHOP_SPEED_X) // Тормозим игрока
            
            client_print
(id, print_chat, "Мы тебя тормозим")
        }
    }

    return HAM_IGNORED
}

public fw_PlayerSpawn_Post(id)
{
    if(is_user_alive(id))
    {
        g_is_alive[id] = true
    
}
}

public fw_PlayerKilled(victim, attacker)
{
    g_is_alive[victim] = false
    in_air
[victim] = 0
    old_in_air
[victim] = 0
}

// Другие мои плагины: https://vk.com/cs_rain       

Он будет работать только в случае, если у игрока будет зажата клавиша прыжка от начала его исполнения и до конца. Иначе, вызывается только "Ты прыгнул" (см. тест код выше).
Соответственно момент приземления мы не отлавливаем в подавляющем большинстве случаев.
(А кто ведь зажимает пробел от начала прыжка и до конца? И тем более многие пользуются колесиком)

Добавлено спустя 16 минут 21 секунду:
Обновил плагин до последней версии 1.8
Ключевые изменения:
Добавлены переменные для настройки плагина: bhop_distance / bhop_speed_x / bhop_jumps
Добавлена возможность сделать несколько прыжков игроку, перед тем, как он будет замедлен.
(Настраивается кваром bhop_jumps)
Сохраняйте историю
Аватара пользователя
Leo_[BH]
 
Сообщения: 98
Зарегистрирован: 06 апр 2014, 17:51
Откуда: UA
Благодарил (а): 9 раз.
Поблагодарили: 30 раз.
Опыт программирования: Больше трех лет


Вернуться в Добавленные новые плагины

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5