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

Помогите сделать проверку  [Решено]

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

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

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

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

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

Помогите сделать проверку

Сообщение Hus3n » 06 июн 2019, 23:34

Привет)
Как сделать проверку на 2 пункт меню , чтобы он не был доступен по окончанию g_delay(есть во втором кейсе). На 2 пункт уже стоит проверка на деньги но на время сделать не могу(
Я конечно тупо объяснил но вы то люди умные)
Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <dhudmessage> 
#include <nvault>                                     
#include <fakemeta>
#include <hamsandwich>
#include <cstrike> 
#include <sqlx>    
#include <csx>                              
#include <fun>         
#include <colorchat>                     
#include <fakemeta_util>                     

#pragma tabsize 0

new Float:g_delay[33]

enum _:eShopCost
{
    
Cost_1 16000,
    
Cost_2 1000
}

#define MAX_PLAYERS     32
new g_OneUse[MAX_PLAYERS+1];
new 
bool:speed[33]

#if cellbits == 32 
#define OFFSET_CSMONEY 115 
#else                            
#define OFFSET_CSMONEY 140          
#endif      
                              
#define get_user_money(%0) get_pdata_int(%0, OFFSET_CSMONEY, 5) ;
                                                                                                                                                          
#define PLUGIN  "Menu"                             
#define VERSION "1.0"                                    
#define AUTHOR  "Mad_Energy"       
  
  
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
                                                      
    
public plugin_init()                 
{        
     
register_menu("Menu 1"keys"func_menu")
     
register_clcmd("shop""Server_Menu")          
     
register_concmd("say /shop""Server_Menu")
     
register_clcmd("husmoney","husmoney")       
     
register_event"CurWeapon""speed_weapon""be""1=1" )   //чтобы при смене оружия не менялась скорость
     
RegisterHam(Ham_Spawn"player""player_spawn"1)   //чтобы после смерти отключить скорость     
}  


public 
player_spawn(id)
{
    
speed[id] = false
}
                                      
public 
plugin_precache()
{
 
precache_sound ("pbh_shop/shop.wav")
 
precache_sound ("pbh_shop/wtf.wav")


public 
husmoney(id)
{
cs_set_user_money(idcs_get_user_money(id) + 16000)
}

public 
Server_Menu(id)                                             
{              
     
client_cmd(id"spk pbh_shop/shop.wav")                                   
     new 
name[32]                                                                                                                                                 
     
get_user_name(idname31)
     new 
money cs_get_user_money(id)     
     static 
menu[1024], iLen
     iLen 
0                                                                                           
                                                                                                                                       
     iLen 
formatex(menu[iLen], charsmax(menu) - iLen,  "^n\d[~] \wNickName : \r%s^n\d[~] \wAmount : \r%d$^n^n",name money)   
     
     if(!
g_OneUse[id])
     {
     
iLen += formatex(menu[iLen], charsmax(menu) - iLen"\y[•] [1] \wБешенство \y| \wCost: \r%i$ \y|^n",Cost_1)                           
     
keys |= MENU_KEY_1
     
}else{ 
     
iLen += formatex(menu[iLen], charsmax(menu) - iLen"\y[\r•\y] [1] \wБешенство \y| \wCost: \r%i$ \y|^n",Cost_1)                          
     
keys |= MENU_KEY_1
     
}
     if(!(
money Cost_2))
     {
     
iLen += formatex(menu[iLen], charsmax(menu) - iLen"\y[•] [2] \wТыква \y| \wCost: \r%i$ \y|^n",Cost_2)                          
     
keys |= MENU_KEY_2
     
}else{
     
iLen += formatex(menu[iLen], charsmax(menu) - iLen"\y[\r•\y] [2] \wТыква \y| \wCost: \r%i$ \y|^n",Cost_2)                          
     
keys |= MENU_KEY_2
     

     
     
iLen += formatex(menu[iLen], charsmax(menu) - iLen"")
     
keys |= MENU_KEY_0
                                                                                  
     show_menu
(idkeysmenu, -1"Menu 1")
     return 
PLUGIN_HANDLED     
}
 public 
speed_weapon(id)
{
    if(
speed[id])
        
set_user_maxspeed(id500.0
}     
public 
beshenstvo_on(id)
{
          
cs_set_user_money(idcs_get_user_money(id) - Cost_1
        
set_user_health(id500)
        
set_user_armor(id500)
        
set_user_maxspeed (id500.0)
        
speed[id] = true
        set_user_gravity 
(id0.5)
        
client_cmd(0"spk pbh_shop/wtf.wav"
        
set_task20.0"beshenstvo_off",id)
}    

public 
beshenstvo_off(id)
{
        
set_user_maxspeed (id240.0)
        
set_user_gravity (id1.0)
        
set_user_health(id100)
        
set_user_armor(id100)
        
speed[id] = false
        ColorChat
(idRED"^4[PBH SHOP] ^1Бешенство закончилось!")
}
public 
func_menu(idkey)
{
     new 
name[32]                                                                                                                                                 
     
get_user_name(idname31)  
     new 
money get_user_money(id)
     switch(
key)
    {
        case 
0:
    {
        if(!
g_OneUse[id])
        {
        if(
money Cost_1)
        {
        
ColorChat(0RED"^4[PBH SHOP] ^1Стоимость ^3%i$ ^1. У вас в наличии всего ^3%d$",Cost_1,money)
        return 
PLUGIN_HANDLED;
        }
        
beshenstvo_on(id)
        
ColorChat(0RED"^4[PBH SHOP] ^1Игрок ^3%s ^1озверел на ^3 20 ^1секунд! Осторожно!",name)
        
g_OneUse[id]=true
        
}
        else
        {
        
ColorChat(idRED"^4[PBH SHOP] ^1Бешенство доступно только один раз за карту!")
        }
    }
     
        case 
1:
    {
        static 
Float:gametimegametime get_gametime()         
        if(
g_delay[id] <= gametime)
        {
        if(
money Cost_2)
        {
        
ColorChat(0RED"^4[PBH SHOP] ^1Стоимость ^3%i$ ^1. У вас в наличии всего ^3%d$",Cost_2,money)
        return 
PLUGIN_HANDLED;
        }
        
client_cmd(id"say /get_pumpkin")
        
ColorChat(1RED"^4[PBH SHOP] ^1Вы купили гранату ^3Pumpkin")
        
g_delay[id] = gametime 90.0
        
}
        else
        
ColorChat(1RED"^4[PBH SHOP] ^1Будет доступно через: ^3[ ^4%...1f секунд ^3]",gametime g_delay[id])
        
    }
                  
    }   
return 
0;    
Аватара пользователя
Hus3n
 
Сообщения: 17
Зарегистрирован: 05 ноя 2016, 14:01
Благодарил (а): 12 раз.
Поблагодарили: 1 раз.
Языки программирования: Только Русский :D

Re: Помогите сделать проверку  [Решено]

Сообщение Leonidddd » 08 июн 2019, 10:54

Static не стоит использовать в таких редковызывающих функциях как выбор пункта в меню. В принципе, верно условия созданы, вот только

Код: Выделить всё
ColorChat(1, RED, "^4[PBH SHOP] ^1Будет доступно через: ^3[ ^4%...1f секунд ^3]",gametime - g_delay[id]) 
не верно, ибо в условии, которое выполняется для этого сообщения g_delay больше gametime, а следовательно правильно было бы:

Код: Выделить всё
ColorChat(1, RED, "^4[PBH SHOP] ^1Будет доступно через: ^3[ ^4%...1f секунд ^3]",g_delay[id]- gametime 


И да, табуляции не хватает, код плохо читается.

Эммм... необычный способ вывода, однако.
Взял простейшую цитату с одного форума, а то если кидать с оф. сайта, то там почти ничего не понятно..
%.nf
n после точки указывает число знаков после запятой которые нужно вывести
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2557
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 192 раз.
Поблагодарили: 718 раз.

Re: Помогите сделать проверку

Сообщение Hus3n » 08 июн 2019, 16:22

А вот как в самом пункте сделать чтобы показывало время через которое будет доступен итем?
\y[•] [2] \wТыква \y| \wЧерез: \rи тут время которое осталось \y|^n
Аватара пользователя
Hus3n
 
Сообщения: 17
Зарегистрирован: 05 ноя 2016, 14:01
Благодарил (а): 12 раз.
Поблагодарили: 1 раз.
Языки программирования: Только Русский :D

Re: Помогите сделать проверку

Сообщение Leonidddd » 09 июн 2019, 09:05

Hus3n, по аналогии с проверкой на время можно сделать вывод оставшегося времени.

Код: Выделить всё
new Float:gametime; gametime = get_gametime()

if(
g_delay[id] >= gametime)
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\y[\r•\y] [2] \wТыква \y| \wCost: \r%i\y|(осталось ждать %.0f сек)^n",Cost_2, (g_delay[id] - gametime));
else
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\y[\r•\y] [2] \wТыква \y| \wCost: \r%i\y^n",Cost_2); 

Думаю, примерно понятно как это можно реализовать.
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2557
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 192 раз.
Поблагодарили: 718 раз.


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

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

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