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

Vip: Ограничение в использовании 1 пункта  [Решено]

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

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

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

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

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

Re: Vip: Ограничение в использовании 1 пункта

Сообщение Zloy-DED » 02 окт 2017, 20:36

ну по идее для того чтобы использовать на разные 4 кейса и чтобы блокировать не сразу все а по очереди
Аватара пользователя
Zloy-DED
 
Сообщения: 256
Зарегистрирован: 30 мар 2013, 12:31
Благодарил (а): 33 раз.
Поблагодарили: 33 раз.
Языки программирования: Counter-Strike 1.6

Re: Vip: Ограничение в использовании 1 пункта

Сообщение NEoMASTERR » 02 окт 2017, 20:48

У вас в коде так и остался массив одномерным, кроме объявления
Код: Выделить всё
new g_AlreadyUsed[33][4]


Если у вас 4 пункта меню, то в каждом пункте надо соответствующую ячейку массива заполнять
Код: Выделить всё
g_AlreadyUsed[33][0] = true  // блокируем первый пункт после нажатия  

Код: Выделить всё
g_AlreadyUsed[33][1] = true  // блокируем второй пункт после нажатия  

И тд.

Так же в новом раунде надо обнулять все пункты всем игрокам
Аватара пользователя
NEoMASTERR
 
Сообщения: 832
Зарегистрирован: 05 янв 2015, 16:38
Благодарил (а): 43 раз.
Поблагодарили: 188 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Vip: Ограничение в использовании 1 пункта

Сообщение Zloy-DED » 02 окт 2017, 21:54

NEoMASTERR писал(а):У вас в коде так и остался массив одномерным, кроме объявления
Код: Выделить всё
new g_AlreadyUsed[33][4


Если у вас 4 пункта меню, то в каждом пункте надо соответствующую ячейку массива заполнять
Код: Выделить всё
g_AlreadyUsed[33][0] = true  // блокируем первый пункт после нажатия   

Код: Выделить всё
g_AlreadyUsed[33][1] = true  // блокируем второй пункт после нажатия   

И тд.

Так же в новом раунде надо обнулять все пункты всем игрокам

получилось следущее
исходник:
Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <cstrike>   
#include <engine>     
#include <hamsandwich>    
                          
#define SOMEFLAGS "t"    
                                    
#define PLUGIN "Vip System By abcs-servera.tk"
#define VERSION "0.1"                
#define AUTHOR "Zloy-DED"                       
                               
new bool:g_AlreadyUsed[33][3]                           
new 
g_F_counter[33] = 0               
new g_RoundCount;         
                                                               
new 
customflags;                                  

public 
plugin_init()
{                                       
    
register_clcmd"vipabcsone""VIPMenu_level_one" );
    
    
register_event("ResetHUD""ResetHUD""be");
    
register_event("HLTV""Event_RoundStart""a""1=0""2=0");
    
register_logevent("Event_GameCommencing"2"1=Game_Commencing");
                      
    
RegisterHam(Ham_Spawn"player""resetModel_vip");
                                  
    
customflags read_flags(SOMEFLAGS);
    return 
PLUGIN_CONTINUE
}
                        
public 
Event_RoundStart()
{                                                                                                     
    
g_RoundCount++;  
    
g_AlreadyUsed[33][1] = false   
    g_AlreadyUsed
[33][2] = false 
    g_AlreadyUsed
[33][3] = false 

                                                                                                          
public 
Event_GameCommencing()
{
    
g_RoundCount 0
}

public 
ResetHUD(id)
{
    
set_task(0.5"VIPTAB"id 6910)    
}                           
                           
public 
plugin_precache() {
        
precache_model("models/player/vip_ct_abcs/vip_ct_abcs.mdl")
        
precache_model("models/player/vip_te_abcs/vip_te_abcs.mdl")

        return 
PLUGIN_CONTINUE
}   
                                    
public 
VIPMenu_level_oneid )
{
if(
get_user_flags(id) & ADMIN_LEVEL_H)
{
   new 
vip_menu menu_create"\yÂèï ìåíþ^n \r[1 Óðîâåíü]^n\dBy Zloy-DED""menu_handler" ); 
   
menu_additemvip_menu"Âçÿòü \r[\dAK47\r+\dDEAGLE\r]""1");
   
menu_additemvip_menu"Âçÿòü \r[\dM4A1\r+\dDEAGLE\r]""2");
   
menu_additemvip_menu"Âçÿòü \r[\dAWP\r+\dDEAGLE\r]""3");
   
menu_additemvip_menu"Âîñêðåñíóòü""4");
   
menu_additemvip_menu"Âçÿòü 16000$ ""5");      
                                                       
   
menu_setprop(vip_menu,MPROP_NEXTNAME,"Äàëåå")                     
   
menu_setprop(vip_menu,MPROP_BACKNAME,"Íàçàä")
   
menu_setprop(vip_menu,MPROP_EXITNAME,"Âûõîä"
   
   
menu_setprop(vip_menu,MPROP_EXIT,MEXIT_ALL);   
   
menu_displayidvip_menu); 
}
else 
  {
    
ChatColor(id,"!g[!tABCS-SERVERA.TK!g]  !têóäà òû ëåçåø òû íå âèï!!!")                                            
  }
}         
                                 
public 
Spawn_player(id)
{
  if(
is_user_alive(id) && is_user_connected(id))
  {           
    
set_user_rendering(idkRenderFxGlowShell000kRenderNormal,0)
    
set_viewid)
    
cs_set_user_armor(id0CS_ARMOR_NONE)
    
set_user_maxspeed(id250.0)       
    
set_user_gravityid1.0 )
    
set_user_healthid100 )                             
    
set_user_noclip(id0)
    
set_user_godmode(id0)                   
   }
}                                    

public 
menu_handleridmenuitem )
{
   if( 
item == MENU_EXIT )                 
    {
      
menu_destroymenu ); 
      return 
PLUGIN_HANDLED
    } 
    new 
data[6], iName[64];                         
    new 
name[32]; get_user_name(idnamesizeof(name) - 1);
    new 
accesscallback;  
    
menu_item_getinfomenuitemaccessdata,5iName63callback ); 
    new 
key str_to_numdata );
    switch( 
key )
{            
case 
1:
{
            if(
g_RoundCount 2)
            {                    
                
ChatColor(id,"!g[!tABCS-SERVERA.TK!g] !yÑåé÷àñ %d ðàóíä, ïîëó÷åíèå AK47 äîñòóïíî òîëüêî ñ 2 ðàóíäà"g_RoundCount);
                return 
PLUGIN_HANDLED;
            }                 
            if (
g_AlreadyUsed[id]) 
{
    
ChatColor(id,"!g[!tABCS-SERVERA.TK!g] !Âû óæå áðàëè AK47"g_AlreadyUsed);
    return
}  
strip_user_weapons (id); 
ChatColor(0,"!g[!tABCS-SERVERA.TK!g]  !tÂèï %s Âçÿë AK47+DEAGLE!!!"name)
give_item(id"weapon_ak47");
give_item(id"weapon_deagle");
give_item(id"weapon_knife");          
cs_set_user_bpammo(idCSW_AK4790)      
cs_set_user_bpammo(idCSW_DEAGLE35)     
give_item(id,"weapon_hegrenade")                
give_item(id,"weapon_flashbang")
give_item(id,"weapon_flashbang")                                  
give_item(id,"weapon_smokegrenade")
give_item(id,"item_assaultsuit")  
g_AlreadyUsed[33][1] = true   
}                      
case 
2:
{
            if(
g_RoundCount 2)
            {
                
ChatColor(id,"!g[!tABCS-SERVERA.TK!g] Ñåé÷àñ %d ðàóíä, ïîëó÷åíèå M4A1 äîñòóïíî òîëüêî ñ 2 ðàóíäà"g_RoundCount);
                return 
PLUGIN_HANDLED;
            }       
            if (
g_AlreadyUsed[id])                      
{                     
    
ChatColor(id,"!g[!tABCS-SERVERA.TK!g] !Âû óæå áðàëè M4A1"g_AlreadyUsed);
    return
}   
strip_user_weapons (id);     
ChatColor(0,"!g[!tABCS-SERVERA.TK!g]  !tÂèï %s Âçÿë Ì4À1+DEAGLE!!!"name)                                              
give_itemid"weapon_m4a1" );                                                                      
give_item(id"weapon_deagle");                                                                                    
give_item(id"weapon_knife");                                            
cs_set_user_bpammo(idCSW_M4A190)                                                     
cs_set_user_bpammo(idCSW_DEAGLE35)
give_item(id,"weapon_hegrenade")                                                                                       
give_item(id,"weapon_flashbang")                                                                                           
give_item(id,"weapon_flashbang")
give_item(id,"weapon_smokegrenade")                                      
give_item(id,"item_assaultsuit")    
g_AlreadyUsed[33][2] = true
}
case 
3:
{
            if(
g_RoundCount 3)
            {
                
ChatColor(id,"!g[!tABCS-SERVERA.TK!g] Ñåé÷àñ %d ðàóíä, ïîëó÷åíèå AWP äîñòóïíî òîëüêî ñ 3 ðàóíäà"g_RoundCount);
                return 
PLUGIN_HANDLED;
            }        
            if (
g_AlreadyUsed[id])
{
    
ChatColor(id,"!g[!tABCS-SERVERA.TK!g] !Âû óæå áðàëè AWP"g_AlreadyUsed);
    return
}   
strip_user_weapons (id);                    
ChatColor(0,"!g[!tABCS-SERVERA.TK!g]  !tÂèï %s Âçÿë AWP+DEAGLE!!!"name)  
give_item(id"weapon_awp");       
give_item(id"weapon_deagle");
give_item(id"weapon_knife");
cs_set_user_bpammo(idCSW_AWP30)
cs_set_user_bpammo(idCSW_DEAGLE35)
give_item(id,"weapon_hegrenade")
give_item(id,"weapon_flashbang")
give_item(id,"weapon_flashbang")
give_item(id,"weapon_smokegrenade")
give_item(id,"item_assaultsuit")
g_AlreadyUsed[33][3] = true  
}
case 
4:
{
            if(
g_RoundCount 5)
            {
                
ChatColor(id,"!g[!tABCS-SERVERA.TK!g] !yÑåé÷àñ !t %d !y ðàóíä, Âîñêðåøåíèå äîñòóïíî òîëüêî ñ !g 5 !y ðàóíäà"g_RoundCount);
                return 
PLUGIN_HANDLED;
            }  
spawn(id)
}
case 
5:
{
cs_set_user_money(id,16000)
}

menu_destroymenu ); 
return 
PLUGIN_HANDLED;     

                                 
public 
VIPTAB(TaskID)
{
    new 
id TaskID 6910
    
    
if (is_user_admin(id))         
    {
        
message_begin(MSG_ALLget_user_msgid("ScoreAttrib"))
        
write_byte(id)
        
write_byte(4)
        
message_end()
        
give_item(id,"weapon_hegrenade")
        
give_item(id,"weapon_flashbang")
        
give_item(id,"weapon_flashbang")
        
give_item(id,"weapon_smokegrenade")
        
give_item(id,"item_assaultsuit")    
    }
    
    return 
PLUGIN_HANDLED
}

public 
resetModel_vip(id) {
        new 
PlayerFlags get_user_flags(id);
        if( (
PlayerFlags customflags) == customflags ) return PLUGIN_CONTINUE;
        if (
PlayerFlags ADMIN_LEVEL_H) {
                new 
CsTeams:userTeam cs_get_user_team(id)
                if (
userTeam == CS_TEAM_T) {
                        
cs_set_user_model(id"vip_te_abcs")
                }
                else if(
userTeam == CS_TEAM_CT) {
                        
cs_set_user_model(id"vip_ct_abcs")
                }
                else {
                        
cs_reset_user_model(id)
                }
        }

        return 
PLUGIN_CONTINUE
}  


stock ChatColor(const id, const input[], any:...) {           
    new 
count 1players[32]                      
    static 
msg[191]                                                                  
    
vformat(msg190input3)                                                                               
    
replace_all(msg190"!g""^4"// Green Color
    
replace_all(msg190"!y""^1"// Default Color                                                                      
    
replace_all(msg190"!t""^3"// Team Color
    
if (idplayers[0] = id; else get_players(playerscount"ch"); {
        for (new 
0counti++) {
            if (
is_user_connected(players[i])) {
                
message_begin(MSG_ONEget_user_msgid("SayText"), _players[i])
                
write_byte(players[i]);
                
write_string(msg);                             
                
message_end();                                                                                                 
            }
        }
    }
}                                                                            

ошибка

как я понимаю не видит переменную g_AlreadyUsed
вот только почему
Аватара пользователя
Zloy-DED
 
Сообщения: 256
Зарегистрирован: 30 мар 2013, 12:31
Благодарил (а): 33 раз.
Поблагодарили: 33 раз.
Языки программирования: Counter-Strike 1.6

Re: Vip: Ограничение в использовании 1 пункта

Сообщение NEoMASTERR » 02 окт 2017, 22:08

Array index out of bounds - индекс выходит за границы
Происходит когда индекс больше или меньше размеров массива
Как например тут:
Код: Выделить всё
new blabla[5]
blabla[10] = 123


Ищите, проверяйте, компилятор дал вам номера строк с ошибками, и добавьте в закладки Вы должны зарегистрироваться, чтобы видеть ссылки.
Ну и еще пара
Вы должны зарегистрироваться, чтобы видеть ссылки. ... _Scripting
Вы должны зарегистрироваться, чтобы видеть ссылки. ... cripts.htm
Вы должны зарегистрироваться, чтобы видеть ссылки.
Последний раз редактировалось NEoMASTERR 02 окт 2017, 22:13, всего редактировалось 1 раз.
Аватара пользователя
NEoMASTERR
 
Сообщения: 832
Зарегистрирован: 05 янв 2015, 16:38
Благодарил (а): 43 раз.
Поблагодарили: 188 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Vip: Ограничение в использовании 1 пункта

Сообщение Zloy-DED » 02 окт 2017, 22:13

NEoMASTERR писал(а):Array index out of bounds - индекс выходит за границы
Происходит когда индекс больше или меньше размеров массива
Как например тут:
Код: Выделить всё
new blabla[5]
blabla[10] = 123

по идее же вроде верно стоит в плагине
Код: Выделить всё
new bool:g_AlreadyUsed[33][3

Код: Выделить всё
    g_AlreadyUsed[33][1] = false   
    g_AlreadyUsed
[33][2] = false 
    g_AlreadyUsed
[33][3] = false


это ошибки основных строк
Аватара пользователя
Zloy-DED
 
Сообщения: 256
Зарегистрирован: 30 мар 2013, 12:31
Благодарил (а): 33 раз.
Поблагодарили: 33 раз.
Языки программирования: Counter-Strike 1.6

Re: Vip: Ограничение в использовании 1 пункта

Сообщение NEoMASTERR » 02 окт 2017, 22:14

Нет не верно, индексы начинаются с нуля, если максимум [3] значит это 0, 1, 2. Либо сделайте [4], либо нумерацию с нуля
Аватара пользователя
NEoMASTERR
 
Сообщения: 832
Зарегистрирован: 05 янв 2015, 16:38
Благодарил (а): 43 раз.
Поблагодарили: 188 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Vip: Ограничение в использовании 1 пункта

Сообщение Zloy-DED » 02 окт 2017, 22:25

NEoMASTERR писал(а):Нет не верно, индексы начинаются с нуля, если максимум [3] значит это 0, 1, 2. Либо сделайте [4], либо нумерацию с нуля

сделал прям как написали слово в слово ошибка и не пропала уже любопытно что так

Добавлено спустя 1 минуту 49 секунд:
отключение
Код: Выделить всё
 public Event_RoundStart()
{
                                                                                                     
    g_RoundCount
++;  
    g_AlreadyUsed
[33][0] = false   
    g_AlreadyUsed
[33][1] = false 
    g_AlreadyUsed
[33][2] = false   
}


переменная
Код: Выделить всё
new bool:g_AlreadyUsed[33][3]


один из кейсов
Код: Выделить всё
case 1:
{
            if(g_RoundCount < 2)
            {                    
                ChatColor
(id,"!g[!tABCS-SERVERA.TK!g] !yÑåé÷àñ %d ðàóíä, ïîëó÷åíèå AK47 äîñòóïíî òîëüêî ñ 2 ðàóíäà", g_RoundCount);
                return PLUGIN_HANDLED;
            }                 
            if 
(g_AlreadyUsed[id]) 
{
    ChatColor(id,"!g[!tABCS-SERVERA.TK!g] !Âû óæå áðàëè AK47", g_AlreadyUsed);
    return
}                 
g_AlreadyUsed
[33][0] = true      
strip_user_weapons 
(id); 
ChatColor
(0,"!g[!tABCS-SERVERA.TK!g]  !tÂèï %s Âçÿë AK47+DEAGLE!!!", name)
give_item(id, "weapon_ak47");
give_item(id, "weapon_deagle");
give_item(id, "weapon_knife");          
cs_set_user_bpammo
(id, CSW_AK47, 90)      
cs_set_user_bpammo
(id, CSW_DEAGLE, 35)     
give_item
(id,"weapon_hegrenade")                
give_item
(id,"weapon_flashbang")
give_item(id,"weapon_flashbang")                                  
give_item
(id,"weapon_smokegrenade")
give_item(id,"item_assaultsuit")  
}


Добавлено спустя 6 минут 5 секунд:
кажется понял если менять число допустим в отключении
Код: Выделить всё
    g_AlreadyUsed[33][0] = false

вместо поставить допустим
Код: Выделить всё
    g_AlreadyUsed[11][0] = false

так разве использоваться будет ? вроде же он обрашается к переменной просто при смене числа на одной из строк все спокойно компилировалось
Аватара пользователя
Zloy-DED
 
Сообщения: 256
Зарегистрирован: 30 мар 2013, 12:31
Благодарил (а): 33 раз.
Поблагодарили: 33 раз.
Языки программирования: Counter-Strike 1.6

Re: Vip: Ограничение в использовании 1 пункта

Сообщение NEoMASTERR » 02 окт 2017, 22:32

Код: Выделить всё
g_AlreadyUsed[сюда вставлять id игрока][сюда пункт меню]


Вот это не сработает
Код: Выделить всё
 public Event_RoundStart()
{
                                                                                                     
    g_RoundCount
++;  
    g_AlreadyUsed
[33][0] = false   
    g_AlreadyUsed
[33][1] = false 
    g_AlreadyUsed
[33][2] = false   
}


Надо каждому игроку обнулять, куда вставлять id игрока я вам сказал, как делается цикл загуглите/посмотрите в предыдущих моих сообщениях

Добавлено спустя 27 секунд:
На этом мои полномочия всё, усюсю пусю - не моё
Аватара пользователя
NEoMASTERR
 
Сообщения: 832
Зарегистрирован: 05 янв 2015, 16:38
Благодарил (а): 43 раз.
Поблагодарили: 188 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Vip: Ограничение в использовании 1 пункта  [Решено]

Сообщение Zloy-DED » 02 окт 2017, 22:34

NEoMASTERR писал(а):
Код: Выделить всё
g_AlreadyUsed[сюда вставлять id игрока][сюда пункт меню


Вот это не сработает
Код: Выделить всё
 public Event_RoundStart()
{
                                                                                                     
    g_RoundCount
++;  
    g_AlreadyUsed
[33][0] = false   
    g_AlreadyUsed
[33][1] = false 
    g_AlreadyUsed
[33][2] = false   


Надо каждому игроку обнулять, куда вставлять id игрока я вам сказал, как делается цикл загуглите/посмотрите в предыдущих моих сообщениях

Добавлено спустя 27 секунд:
На этом мои полномочия всё, усюсю пусю - не моё

Спасибо большое все сделал и разобрался ) искрене вам благодарен
Аватара пользователя
Zloy-DED
 
Сообщения: 256
Зарегистрирован: 30 мар 2013, 12:31
Благодарил (а): 33 раз.
Поблагодарили: 33 раз.
Языки программирования: Counter-Strike 1.6

Пред.

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

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

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