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

Сбивается скорость при смене оружия  [Решено]

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

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

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

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

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

Сбивается скорость при смене оружия

Сообщение Kristina1 » 13 май 2019, 22:28

Всем привет. Столкнулась в двух меню с известной проблемой, что при покупки скорости и смене оружия она сбивается. Пыталась исправить но не вышло =) (код прикреплю,строго не судите опыта нет)
подскажите метод решения этой проблемы, что нужно добавить..
Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <hamsandwich>
#include <fun>
#include <fakemeta>
#include <engine>
#include <ColorChat>

#define MAX_PLAYERS    32
#define DELAY_MONEY 800
#define csdm_map_time 5
#define PLUGIN "CSDM menu server"
#define VERSION "1.0"
#define AUTHOR "MrKiller1779"
#if AMXX_VERSION_NUM < 183
#define Ham_CS_Player_ResetMaxSpeed Ham_Item_PreFrame
#endif

new keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0

new g_iTime
[MAX_PLAYERS + 1], g_Timer;

new bool:g_speed[MAX_PLAYERS+1] = false;

public plugin_init() {
       register_plugin(PLUGIN, VERSION, AUTHOR);
    
       
//Рег. основного меню
       register_clcmd("menu", "cmdMenu");
       register_clcmd("nightvision","cmdMenu");
       //Рег. основного меню
       
       
//Рег. вип меню
       register_clcmd("say /vipmenu", "Show_VipMenu");
       register_clcmd("say_team /vipmenu", "Show_VipMenu");
       register_clcmd("vipmenu", "Show_VipMenu");
       RegisterHam(Ham_CS_Player_ResetMaxSpeed, "player", "Check_speed", 0);
       //Рег. вип меню
       
       
//Рег. админ меню
       register_clcmd("amxmodmenu", "AmxMenu");
       register_menu("Menu_2", keys, "func_menu2");
       
       
//Рег. админ меню
       
       
//Параметры для вип меню
       register_menucmd(register_menuid("Show_VipMenu"), (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<8|1<<9), "Handle_VipMenu");
       g_Timer = get_systime() + 300; //Время можно изменить по желанию
       //Параметры для вип меню
}

public cmdMenu(id) {
       new i_Menu = menu_create("\wМеню Сервера", "menu_handler");
       menu_additem(i_Menu, "\wУстановить \yПушку", "1", 0);
       menu_additem(i_Menu, "\wУстановить \yЛазер", "2", 0);
       menu_additem(i_Menu, "\wУстановить \yРаздатчик", "3", 0);
       menu_addblank (i_Menu, 0);
       menu_additem(i_Menu, "\wУничтожить \r| \yРаздатчик", "4", 0);
       menu_additem(i_Menu, "\wМагазин \r| \yНавыков", "5", 0);
       menu_addblank (i_Menu, 0);
       menu_additem(i_Menu, "\wМеню \yАдмина", "6", 0);
       menu_additem(i_Menu, "\wМеню \yВип", "7", 0);
       menu_addblank (i_Menu, 0);
       menu_additem(i_Menu, "\wПередать \yденьги","8", 0);
       menu_additem(i_Menu, "\wЗабанить \yчитера", "9", 0);
       menu_additem(i_Menu, "\wСменить \yкарту", "10", 0);
       menu_additem(i_Menu, "\wМут \yигрока", "11", 0);
       menu_additem(i_Menu, "\wПерейти в \yнаблюдение", "12", 0);
       menu_setprop(i_Menu, MPROP_BACKNAME, "\wНазад");
       menu_setprop(i_Menu, MPROP_NEXTNAME, "\wВперед");
       menu_setprop(i_Menu, MPROP_EXITNAME, "\wВыход");

       menu_display(id, i_Menu, 0)
}

public Show_VipMenu(id)
{
    new szMenu[1024];
    
    
//Условия при которых таймер не может быть меньше 0
    new timer = g_Timer - get_systime();
    new itimer = g_iTime[id] - get_systime();
    if (timer < 0) {
        timer = 0;
    }
    
    if 
(itimer < 0){
        if (g_Timer > get_systime()){    
            itimer 
= 600;
        } else itimer = 0;
    }
    //Условия при которых таймер не может быть меньше 0
    new iLen = formatex(szMenu, charsmax(szMenu), "\wВип меню:^n\yМеню заработает через \r%d\y сек.^n", timer);
    new iKeys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<8|1<<9) 
    if
(g_Timer < get_systime())
    {
        if(g_iTime[id] > get_systime())
        {
            iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d[1] Деньги [10000$] - [\r%d\d сек.]^n", itimer);
        }
        else iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[\r1\y] \rДеньги \y[\r10000$\y]^n");
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[\r2\y] \rСкорость^n");
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[\r3\y] \rГравитация^n");
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y[\r4\y] \rЗдоровье \y[\r+ 100 HP\y]^n^n");
    }
    else
    
{
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d[1] Деньги [10000$] - [\r%d\d сек.]^n", itimer);        
        iLen 
+= formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d[2] Скорость^n");
        iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d[3] Гравитация^n");    
        iLen 
+= formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d[4] Здоровье [+ 100 HP]^n^n");
    }    
    formatex
(szMenu[iLen], charsmax(szMenu) - iLen, "\y[\r0\y] Выход");
    return show_menu(id, iKeys, szMenu, -1, "Show_VipMenu");
}


public AmxMenu(id)
{
    static menu[650], iLen
    iLen 
= 0
    iLen 
= formatex(menu[iLen], charsmax(menu) - iLen, "\wМеню Админа^n^n");    
    if
(get_user_flags(id) & ADMIN_LEVEL_A)
    {
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r1. \wКикнуть \yИгрока^n")
        keys |= MENU_KEY_1
    
}
    else
    
{
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r1. \dКикнуть \dИгрока^n")
        keys &= ~MENU_KEY_1    
    
}
    if(get_user_flags(id) & ADMIN_LEVEL_A)
    {
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r2. \wЗабанить \yИгрока^n")
        keys |= MENU_KEY_2
    
}
    else
    
{
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r2. \dЗабанить \dИгрока^n")
        keys &= ~MENU_KEY_2    
    
}
    if(get_user_flags(id) & ADMIN_LEVEL_A)
    {
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r3. \wУдарить\r/\wУбить \yИгрока^n")
        keys |= MENU_KEY_3
    
}
    else
    
{
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r3. \dУдарить\r/\dУбить \dИгрока^n")
        keys &= ~MENU_KEY_3    
    
}
    if(get_user_flags(id) & ADMIN_LEVEL_A)
    {
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r4. \wКоманда \yИгрока^n")
        keys |= MENU_KEY_4
    
}
    else
    
{
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r4. \dКоманда \dИгрока^n")
        keys &= ~MENU_KEY_4    
    
}
    if(get_user_flags(id) & ADMIN_LEVEL_A)
    {
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r5. \wСменить \yКарту^n")
        keys |= MENU_KEY_5
    
}
    else
    
{
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r5. \dСменить \dКарту^n")
        keys &= ~MENU_KEY_5    
    
}
    if(get_user_flags(id) & ADMIN_LEVEL_A)
    {
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r6. \wГолосование за смену \yКарты^n")
        keys |= MENU_KEY_6
    
}
    else
    
{
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r6. \dГолосование за смену \dКарты^n")
        keys &= ~MENU_KEY_6    
    
}
    if(get_user_flags(id) & ADMIN_LEVEL_A)
    {
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r7. \wКикнуть \yИгрока^n")
        keys |= MENU_KEY_7
    
}
    else
    
{
        iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r7. \dКикнуть \dИгрока^n")
        keys &= ~MENU_KEY_7    
    
}
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "^n\r0. \wЗакрыть^n")
    keys |= MENU_KEY_0
    
    show_menu
(id, keys, menu, -1, "Menu_2");
    return PLUGIN_HANDLED
}

public menu_handler(id, menu, item) {
       if( item < 0 ) return PLUGIN_CONTINUE;
       new cmd[3], access, callback;
       menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);
       new Choise = str_to_num(cmd)
       switch (Choise) {
       case 1: {client_cmd(id, "sentry_build")
       }
       case 2: {client_cmd(id, "+setlaser")
       }
       case 3: {client_cmd(id, "build_dispenser")
       }
       case 4: {client_cmd(id, "detonate_dispenser")
       }
       case 5: {client_cmd(id, "shop")
       }
       case 6: {client_cmd(id, "amxmodmenu")
       }
       case 7: {client_cmd(id, "say /vipmenu")
       }
       case 8: {client_cmd(id, "say /tm")
       }
       case 9: {client_cmd(id, "say /voteban")
       }
       case 10: {client_cmd(id, "say rtv")
       }
       case 11: {client_cmd(id, "say /mute")
       }
       case 12: {client_cmd(id, "say /spec")
       }
       }
       return PLUGIN_HANDLED;
}

public func_menu2(id, key)
{
    switch(key)
    {
        case 0: client_cmd(id, "amx_kickmenu")
            case 1: client_cmd(id, "amx_banmenu")
            case 2: client_cmd(id, "amx_slapmenu")
            case 3: client_cmd(id, "amx_teammenu")
            case 4: client_cmd(id, "amx_mapmenu")
            case 5: client_cmd(id, "amx_votemapmenu")
            case 6: client_cmd(id, "amx_kick")
        case 7:client_cmd(id, "vipmenu")
        case 8:client_cmd(id, "vipmenu")
            
    
}
}

public Handle_VipMenu(id, iKey)
{
    if(!is_user_admin(id))
    {
        client_print(id, print_chat, "У вас нету доступа к Вип Меню!");
        return PLUGIN_HANDLED;
    }

    switch(iKey)
    {
        case 0:
        {
            if(g_Timer < get_systime())
            {
                if(g_iTime[id] > get_systime())
                {
                    client_print(id, print_chat, "Деньги можно будет взять через %d сек.", g_iTime[id] - get_systime());
                    return PLUGIN_HANDLED;
                }
                
                client_print
(id, print_chat, "Вы взяли 10000$. В следующий раз вы сможете взять через 10 минут!");
                cs_set_user_money(id, cs_get_user_money(id) + 10000);
                g_iTime[id] = get_systime(DELAY_MONEY);
            }
            else Show_VipMenu(id);
        }
        case 1:
        {
            if(g_Timer < get_systime())
            {
                client_print(id, print_chat, "Вы взяли 'Скорость'. Удачной игры!");
                set_user_maxspeed(id, 500.0);
            }
            else Show_VipMenu(id);
        }
        case 2:
        {
            if(g_Timer < get_systime())
            {
                client_print(id, print_chat, "Вы взяли 'Гравитацию'. Удачной игры!");
                set_user_gravity(id, 0.5);
            }
            else Show_VipMenu(id);
        }
        case 3:
        {
            if(g_Timer < get_systime())
            {
                client_print(id, print_chat, "Вы взяли '+ 100 HP'. Удачной игры!");
                set_user_health(id, get_user_health(id) + 100);
            }
            else Show_VipMenu(id);
        }
    }
    return PLUGIN_HANDLED;
}

public Check_speed(id){
        if(g_speed[id])
                return HAM_SUPERCEDE;
        return HAM_IGNORED;
}


Добавлено спустя 10 минут 45 секунд:
То, что добавляла
RegisterHam(Ham_CS_Player_ResetMaxSpeed, "player", "Check_speed", 0);

public Check_speed(id){
if(g_speed[id])
return HAM_SUPERCEDE;
return HAM_IGNORED;
}
Аватара пользователя
Kristina1
 
Сообщения: 10
Зарегистрирован: 06 май 2019, 18:19
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: JS,DELPHI

Re: Сбивается скорость при смене оружия  [Решено]

Сообщение Vaqtincha » 14 май 2019, 01:31

1) Ham_CS_Player_ResetMaxSpeed меняем на пост.
2) там где установка скорости ставим g_speed[id] на true
3)
public Check_speed(id)
{
if(g_speed[id])
{
set_user_maxspeed(id , 500.0 );
}
}

4) сбрасывать g_speed[id] (те false) там где нам это нужно (коннект, килл)

5) обновим скорость с помощью ExecuteHam(Ham_CS_Player_ResetMaxSpeed, id) если это необходимо.
админгандонсоси
Аватара пользователя
Vaqtincha
 
Сообщения: 277
Зарегистрирован: 28 мар 2018, 15:05
Забанен
Благодарил (а): 8 раз.
Поблагодарили: 53 раз.

Re: Сбивается скорость при смене оружия

Сообщение артист666 » 14 май 2019, 03:16

ExecuteHamB
Иначе скорость сбросится к стандартной, а форвард в плагине не выполнится.
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Сбивается скорость при смене оружия

Сообщение Vaqtincha » 14 май 2019, 05:33

артист666, Точно. Я уже забыл скриптинг
админгандонсоси
Аватара пользователя
Vaqtincha
 
Сообщения: 277
Зарегистрирован: 28 мар 2018, 15:05
Забанен
Благодарил (а): 8 раз.
Поблагодарили: 53 раз.

Re: Сбивается скорость при смене оружия

Сообщение Kristina1 » 15 май 2019, 03:14

2 пункт помог) спасибо :)
Только теперь сброс после килла почему-то не работает :(
public Death(id)
{
g_speed[id] = false;
set_pev(id, pev_maxspeed, 400.0);
}
Vaqtincha писал(а):1) Ham_CS_Player_ResetMaxSpeed меняем на пост.
2) там где установка скорости ставим g_speed[id] на true
3)
public Check_speed(id)
{
if(g_speed[id])
{
set_user_maxspeed(id , 500.0 );
}
}

4) сбрасывать g_speed[id] (те false) там где нам это нужно (коннект, килл)

5) обновим скорость с помощью ExecuteHam(Ham_CS_Player_ResetMaxSpeed, id) если это необходимо.
Аватара пользователя
Kristina1
 
Сообщения: 10
Зарегистрирован: 06 май 2019, 18:19
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: JS,DELPHI

Re: Сбивается скорость при смене оружия

Сообщение Kristina1 » 17 май 2019, 13:27

решено
Аватара пользователя
Kristina1
 
Сообщения: 10
Зарегистрирован: 06 май 2019, 18:19
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: JS,DELPHI


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

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

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

cron