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

Ножи для ZP от BlackCat  [Решено]

Все вопросы по работе и настройке AMXX и его плагинов.

Модератор: liFe iS GoOD

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

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

Ножи для ZP от BlackCat

Сообщение Tyanka » 12 мар 2022, 19:20

Здравствуйте. Имеются ножи BlackCat. Подогнал их под себя, но в скриптинге плохо понимаю. Есть в них проблема. Меняю квары на скорость, все отлично. Но такая же скорость остается и после переключения оружия на основное. Тобишь игрок бегает с основным оружием с такой же скоростью, как и у ножа. Что нужно изменить, чтобы у основного оружия была стандартная скорость?

А так же что может быть с табуляцией? Вроде как строчки выровнены нормально, но при компиляции выдает warning 217
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Tyanka
 
Сообщения: 17
Зарегистрирован: 06 мар 2022, 23:02
Благодарил (а): 1 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: Я ничего не знаю

Re: Ножи для ZP от BlackCat

Сообщение izumi4 » 12 мар 2022, 19:46

Выбрав нож устанавливается максимальная скорость игрока:

Код: Выделить всё
if(weapon == CSW_KNIFE && g_has_axe[id])
{
       
set_user_maxspeed(id,get_pcvar_float(cvar_speed_axe))
 


Убрав нож, скорость соответственно остается cvar_speed_axe

Ее нужно сбрасывать

Код: Выделить всё
Ham_Player_ResetMaxSpeed


Когда игрок убирает нож
Аватара пользователя
izumi4
 
Сообщения: 74
Зарегистрирован: 03 ноя 2019, 12:25
Благодарил (а): 8 раз.
Поблагодарили: 9 раз.
Опыт программирования: Около года
Языки программирования: Pawn

Re: Ножи для ZP от BlackCat

Сообщение Tyanka » 12 мар 2022, 20:05

izumi4 писал(а):Выбрав нож устанавливается максимальная скорость игрока:

Код: Выделить всё
if(weapon == CSW_KNIFE && g_has_axe[id])
{
       set_user_maxspeed(id,get_pcvar_float(cvar_speed_axe))


Убрав нож, скорость соответственно остается cvar_speed_axe

Ее нужно сбрасывать

Код: Выделить всё
Ham_Player_ResetMaxSpeed


Когда игрок убирает нож

Можно подробнее немножко если не затруднит?
Хотя бы примером с первым ножом
Аватара пользователя
Tyanka
 
Сообщения: 17
Зарегистрирован: 06 мар 2022, 23:02
Благодарил (а): 1 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: Я ничего не знаю

Re: Ножи для ZP от BlackCat  [Решено]

Сообщение izumi4 » 12 мар 2022, 21:19

Покажу как я у себя сделал, т.к. у вас тоже зомби сервер.

В конфиге мода zp есть квар, по которому который уже устанавливается макс скорость

Давайте создадим такой натив в главном плагине мода:

Откройте исходник главного плагина zp и найдите функцию:

Код: Выделить всё
public plugin_natives()


Добавьте в конце функции:

Код: Выделить всё
register_native("zp_reset_user_speed", "native_reset_user_speed", 1);


Где-нибудь в конце исходника добавьте:

Код: Выделить всё
public native_reset_user_speed(id)
{
    ExecuteHamB(Ham_Player_ResetMaxSpeed, id);
}


Откройте файл:

Код: Выделить всё
zombieplague.inc


И добавьте:

Код: Выделить всё
/**
 * Reset user maxspeed
 *
 * @param id        Player's Index
 */
native zp_reset_user_speed(id)


Далее в плагине ваших ножей сделайте следующее, там где у вас объявлены булевые переменные объявите еще одну:

Код: Выделить всё
new bool:g_ResetSpeed[33]


Т.к. скорость устанавливается непосредственно в функции форварда PreThink, эта переменная нужна нам для того чтобы скорость не увеличивалась бесконечное количество раз.

Найдите функцию:

Код: Выделить всё

public fw_PlayerPreThink
(id)
{
    if(!is_user_alive(id) || zp_get_user_zombie(id))
        return FMRES_IGNORED

    new temp
[2], weapon = get_user_weapon(id, temp[0], temp[1])

    if(weapon == CSW_KNIFE)) // Игрок с ножом
    {
        if(g_has_axe[id])
        {
            if(g_ResetSpeed[id])
            {
                new Float:flMaxSpeed;
                pev(id, pev_maxspeed, flMaxSpeed);         // Узнаем скорость игрока
                set_pev(id, pev_maxspeed, flMaxSpeed + get_pcvar_float(cvar_speed_axe)) // Устанавливаем скорость игроку
                
                g_ResetSpeed
[id] = false;
            }
            
            if
((pev(id, pev_button) & IN_JUMP) && !(pev(id, pev_oldbuttons) & IN_JUMP))
            {
                new flags = pev(id, pev_flags)
                new waterlvl = pev(id, pev_waterlevel)
                            
                if
(!(flags & FL_ONGROUND))
                    return FMRES_IGNORED;

                if(flags & FL_WATERJUMP)
                    return FMRES_IGNORED;

                if(waterlvl > 1)
                    return FMRES_IGNORED;
                            
                new Float
:fVelocity[3]
                pev(id, pev_velocity, fVelocity)
                            
                fVelocity
[2] += get_pcvar_num(cvar_jump_axe)
                            
                set_pev
(id, pev_velocity, fVelocity)
                set_pev(id, pev_gaitsequence, 6)
            }
        }
    }
    else // Игрок не с ножом
    {
        if(!g_ResetSpeed[id])
        {
            zp_reset_user_speed(id); // Сбрасываем скорость
            g_ResetSpeed[id] = true;
        }
    }
}


То же самое и с остальными ножами.

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

Табуляция нарушена буквально по всем строкам, используйте Notepad++
Аватара пользователя
izumi4
 
Сообщения: 74
Зарегистрирован: 03 ноя 2019, 12:25
Благодарил (а): 8 раз.
Поблагодарили: 9 раз.
Опыт программирования: Около года
Языки программирования: Pawn

Re: Ножи для ZP от BlackCat

Сообщение Tyanka » 12 мар 2022, 22:03

Tyanka писал(а):
izumi4 писал(а):Выбрав нож устанавливается максимальная скорость игрока:

Код: Выделить всё
if(weapon == CSW_KNIFE && g_has_axe[id])
{
       set_user_maxspeed(id,get_pcvar_float(cvar_speed_axe))
 


Убрав нож, скорость соответственно остается cvar_speed_axe

Ее нужно сбрасывать

Код: Выделить всё
Ham_Player_ResetMaxSpeed


Когда игрок убирает нож

Можно подробнее немножко если не затруднит?
Хотя бы примером с первым ножом


Огромное спасибо.
Notepad++ и использую. И стоит C++, но все равно..
Аватара пользователя
Tyanka
 
Сообщения: 17
Зарегистрирован: 06 мар 2022, 23:02
Благодарил (а): 1 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: Я ничего не знаю

Re: Ножи для ZP от BlackCat

Сообщение Tyanka » 14 мар 2022, 15:30

izumi4 писал(а):Покажу как я у себя сделал, т.к. у вас тоже зомби сервер.

В конфиге мода zp есть квар, по которому который уже устанавливается макс скорость

Давайте создадим такой натив в главном плагине мода:

Откройте исходник главного плагина zp и найдите функцию:

Код: Выделить всё
public plugin_natives() 


Добавьте в конце функции:

Код: Выделить всё
register_native("zp_reset_user_speed", "native_reset_user_speed", 1); 


Где-нибудь в конце исходника добавьте:

Код: Выделить всё
public native_reset_user_speed(id)
{
    ExecuteHamB(Ham_Player_ResetMaxSpeed, id);
}
 


Откройте файл:

Код: Выделить всё
zombieplague.inc


И добавьте:

Код: Выделить всё
/**
 * Reset user maxspeed
 *
 * @param id        Player's Index
 */
native zp_reset_user_speed(id)
 


Далее в плагине ваших ножей сделайте следующее, там где у вас объявлены булевые переменные объявите еще одну:

Код: Выделить всё
new bool:g_ResetSpeed[33


Т.к. скорость устанавливается непосредственно в функции форварда PreThink, эта переменная нужна нам для того чтобы скорость не увеличивалась бесконечное количество раз.

Найдите функцию:

Код: Выделить всё

public fw_PlayerPreThink
(id)
{
    if(!is_user_alive(id) || zp_get_user_zombie(id))
        return FMRES_IGNORED

    new temp
[2], weapon = get_user_weapon(id, temp[0], temp[1])

    if(weapon == CSW_KNIFE)) // Игрок с ножом
    {
        if(g_has_axe[id])
        {
            if(g_ResetSpeed[id])
            {
                new Float:flMaxSpeed;
                pev(id, pev_maxspeed, flMaxSpeed);         // Узнаем скорость игрока
                set_pev(id, pev_maxspeed, flMaxSpeed + get_pcvar_float(cvar_speed_axe)) // Устанавливаем скорость игроку
                
                g_ResetSpeed
[id] = false;
            }
            
            if
((pev(id, pev_button) & IN_JUMP) && !(pev(id, pev_oldbuttons) & IN_JUMP))
            {
                new flags = pev(id, pev_flags)
                new waterlvl = pev(id, pev_waterlevel)
                            
                if
(!(flags & FL_ONGROUND))
                    return FMRES_IGNORED;

                if(flags & FL_WATERJUMP)
                    return FMRES_IGNORED;

                if(waterlvl > 1)
                    return FMRES_IGNORED;
                            
                new Float
:fVelocity[3]
                pev(id, pev_velocity, fVelocity)
                            
                fVelocity
[2] += get_pcvar_num(cvar_jump_axe)
                            
                set_pev
(id, pev_velocity, fVelocity)
                set_pev(id, pev_gaitsequence, 6)
            }
        }
    }
    else // Игрок не с ножом
    {
        if(!g_ResetSpeed[id])
        {
            zp_reset_user_speed(id); // Сбрасываем скорость
            g_ResetSpeed[id] = true;
        }
    }
}
 


То же самое и с остальными ножами.

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

Табуляция нарушена буквально по всем строкам, используйте Notepad++

Ошибка компиляции почему то. Ругается на строчки с
Код: Выделить всё
if(weapon == CSW_KNIFE)) // Игрок с ножом 

и
Код: Выделить всё
else 
Аватара пользователя
Tyanka
 
Сообщения: 17
Зарегистрирован: 06 мар 2022, 23:02
Благодарил (а): 1 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: Я ничего не знаю

Re: Ножи для ZP от BlackCat

Сообщение [N][E][M][E][C] » 14 мар 2022, 18:55

Код: Выделить всё
if(weapon == CSW_KNIFE)) 

Скобок сколько?
Аватара пользователя
[N][E][M][E][C]
Скриптер
 
Сообщения: 537
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 45 раз.
Поблагодарили: 73 раз.
Опыт программирования: Около года
Языки программирования: Нуждаюсь в помощи

Re: Ножи для ZP от BlackCat

Сообщение Tyanka » 14 мар 2022, 20:51

[N][E][M][E][C] писал(а):
Код: Выделить всё
if(weapon == CSW_KNIFE))

Скобок сколько?

Ой, на самом деле. Вообще не смотрю ведь :-D
Благодарю за Ваш пост)

Добавлено спустя 1 час 7 минут 25 секунд:
Сброс работает как надо, почти.
Почему то не реагирует на квары скорости теперь.

Поставил cvar_speed_axe "50.0" (250 стандартная скорость + 50 от ножа), но бежит человек с ножом как будто тут все 500. Поставил "1.0", ничего не поменялось, бегает с такой же скоростью.

Добавлено спустя 25 минут 49 секунд:
Исправил, все отлично)
Аватара пользователя
Tyanka
 
Сообщения: 17
Зарегистрирован: 06 мар 2022, 23:02
Благодарил (а): 1 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: Я ничего не знаю

Re: Ножи для ZP от BlackCat

Сообщение izumi4 » 14 мар 2022, 21:02

Вот, для проверки скорости:

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

public plugin_init()
{
    register_plugin("Check Speed", "0.1", "amx-x.ru");
    
    register_clcmd
("say /speed", "check_speed");
}

public check_speed(iPlayer)
{
    if(is_user_alive(iPlayer))
    {
        new Float:CheckSpeed;
        pev(iPlayer, pev_maxspeed, CheckSpeed);
        client_print(iPlayer, print_chat, "Твоя скорость: %..1f", CheckSpeed);
    }
}


А какую версию amxmodx вы используете?
Аватара пользователя
izumi4
 
Сообщения: 74
Зарегистрирован: 03 ноя 2019, 12:25
Благодарил (а): 8 раз.
Поблагодарили: 9 раз.
Опыт программирования: Около года
Языки программирования: Pawn

Re: Ножи для ZP от BlackCat

Сообщение Tyanka » 14 мар 2022, 21:17

izumi4 писал(а):Вот, для проверки скорости:

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

public plugin_init()
{
    register_plugin("Check Speed", "0.1", "amx-x.ru");
    
    register_clcmd
("say /speed", "check_speed");
}

public check_speed(iPlayer)
{
    if(is_user_alive(iPlayer))
    {
        new Float:CheckSpeed;
        pev(iPlayer, pev_maxspeed, CheckSpeed);
        client_print(iPlayer, print_chat, "Твоя скорость: %..1f", CheckSpeed);
    }
}
 


А какую версию amxmodx вы используете?

1.9.0
Аватара пользователя
Tyanka
 
Сообщения: 17
Зарегистрирован: 06 мар 2022, 23:02
Благодарил (а): 1 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: Я ничего не знаю

След.

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

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

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