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

Добавить цикл на ограничение на 3 раз

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

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

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

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

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

Добавить цикл на ограничение на 3 раз

Сообщение nemec21 » 11 мар 2017, 10:49

Доброе утро всем!
Подскажите в этом коде, что бы например сделать ограничение на третью криво кинутую гранату. Для этого надо сделать цикл?
Код: Выделить всё

public event_blinded
(const ID)
{
    new alpha = read_data(7)                                                                         
    if
(alpha != BLINDED_FULLY && alpha != BLINDED_PARTLY || !is_user_alive(ID))
        return PLUGIN_CONTINUE 
        
    if
(get_user_team(ID) == get_user_team(g_flasher) && ID != g_flasher)
    {                                                                                               
        new flasher
[32]                                   
        get_user_name
(g_flasher, flasher, 31)                                                  
        ChatColor
(ID, "^3[ ^4Immortal_classic 18+ ^3] ^1Тебя ослепил: ^3%s", flasher)
        
        for
(new i; i > 2; i++)          
        
{
            //ограничение
        }
    }
    return PLUGIN_CONTINUE
}


и нужно ли тут повторение "return PLUGIN_CONTINUE"
Аватара пользователя
nemec21
Скриптер
 
Сообщения: 803
Зарегистрирован: 07 фев 2016, 17:08
Откуда: Беларусь
Благодарил (а): 214 раз.
Поблагодарили: 47 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Добавить цикл на ограничение на 3 раз

Сообщение NEoMASTERR » 11 мар 2017, 12:02

1. Врядли можно ослепнуть от трёх гранат кинутых одним человеком одновременно, надо сделать переменную счётчик в которой будет после осепления +1. И проверка, если > 2 - наказание.
2. return это выход из функции, он может быть только один
Аватара пользователя
NEoMASTERR
 
Сообщения: 832
Зарегистрирован: 05 янв 2015, 16:38
Благодарил (а): 43 раз.
Поблагодарили: 188 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Добавить цикл на ограничение на 3 раз

Сообщение nemec21 » 11 мар 2017, 12:18

можно образец как сделать переменную счетчик. если вас не затруднит

Добавлено спустя 1 минуту 17 секунд:
а зачем тут ретурн?
Аватара пользователя
nemec21
Скриптер
 
Сообщения: 803
Зарегистрирован: 07 фев 2016, 17:08
Откуда: Беларусь
Благодарил (а): 214 раз.
Поблагодарили: 47 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Добавить цикл на ограничение на 3 раз

Сообщение NEoMASTERR » 11 мар 2017, 12:24

Ну можно тот же статик в виде массива[33], либо глобальная переменная

Код: Выделить всё
new g_TeamFlash[MAX_PLAYERS+1]
//
public event_blinded(const ID)
{
//
    (if ++g_TeamFlash[g_flasher] > 2)
    {
        //наказание
    


return я полагаю для отправки/блокировки эвента и другим плагинам/игрокам. Не пользуюсь им в эвентах и сообщениях, но иногда компилятор требует что нибудь да поставить.

Код: Выделить всё
#define PLUGIN_CONTINUE     0   /* Results returned by public functions */
#define PLUGIN_HANDLED      1   /* stop other plugins */
#define PLUGIN_HANDLED_MAIN 2   /* to use in client_command(), continue all plugins but stop the command */   


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

Re: Добавить цикл на ограничение на 3 раз

Сообщение nemec21 » 11 мар 2017, 12:31

А если каждый третий бросок?
Код: Выделить всё
(if ++g_TeamFlash[g_flasher] = 3)


Добавлено спустя 43 секунды:
или там оператор другой добовляется?
Аватара пользователя
nemec21
Скриптер
 
Сообщения: 803
Зарегистрирован: 07 фев 2016, 17:08
Откуда: Беларусь
Благодарил (а): 214 раз.
Поблагодарили: 47 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Добавить цикл на ограничение на 3 раз

Сообщение NEoMASTERR » 11 мар 2017, 12:35

Код: Выделить всё
if (!(++g_TeamFlash[g_flasher] % 3))
{
    
// каждый третий бросок
Аватара пользователя
NEoMASTERR
 
Сообщения: 832
Зарегистрирован: 05 янв 2015, 16:38
Благодарил (а): 43 раз.
Поблагодарили: 188 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Добавить цикл на ограничение на 3 раз

Сообщение nemec21 » 11 мар 2017, 12:37

Все огромное спасибо за помощь

Добавлено спустя 1 минуту 19 секунд:
оператор % что означает. тоесть все кроме 3 раза?
Аватара пользователя
nemec21
Скриптер
 
Сообщения: 803
Зарегистрирован: 07 фев 2016, 17:08
Откуда: Беларусь
Благодарил (а): 214 раз.
Поблагодарили: 47 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Добавить цикл на ограничение на 3 раз

Сообщение NEoMASTERR » 11 мар 2017, 12:42

Код: Выделить всё
//Here are more mathematical expressions.  The mathematical operators are
// + for addition
// - for subtraction
// * for multiplication
// / for division
// % for modulus (finding the remainder of one number divided by another (5%2 is 1)
(5+6)                       //returns 11
((5*6)+3)                   //returns 33
((((5+3)/2)*4)-9)           //returns 5
((5*6) % 7)                 //returns 2
//Here are other expressions:
(true)                      //returns true
(5.0 + 2.3)                 //returns 7.3 as a floating point

//There are also extensions of these operators for direct use on variables.
new a = 5
new b 
= 6
//The first are the post/pre increment and decrement operators.
a++          //returns a+1, or 6.  This is a post increment.
++a          //also returns a+1, or 6.  This is a pre increment.   


Остаток от целочисенного деления вроде
"Модуль", не знаю, я злостный прогульщик

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

Re: Добавить цикл на ограничение на 3 раз

Сообщение nemec21 » 11 мар 2017, 13:12

строка: (10) : error 017: undefined symbol "MAX_PLAYERS"

Добавлено спустя 5 минут 2 секунды:
Код: Выделить всё
#include <amxmodx>
#include <fakemeta>

#define TEMPENTITY    "23"
#define BLINDED_FULLY    255
#define BLINDED_PARTLY    200

new Float:FLASH_TIMER 1.52 
new g_flasher 
new g_TeamFlash[MAX_PLAYERS+1]

public 
plugin_init()

    
register_plugin"Team Flash""1.0""111")
                                                     
    
register_event("ScreenFade""event_blinded""be""4=255""5=255""6=255""7>199")
    
register_event(TEMPENTITY"event_flashsmokepuff""a""1=5""6=25""7=6")
    
register_forward(FM_SetModel"forward_setmodel")
}                                                       

public 
event_blinded(const ID)
{
    new 
alpha read_data(7)                                                                         
    if(
alpha != BLINDED_FULLY && alpha != BLINDED_PARTLY || !is_user_alive(ID))
        return 
        
    if(
get_user_team(ID) == get_user_team(g_flasher) && ID != g_flasher)
    {                                                                                               
        new 
flasher[32]                                   
        
get_user_name(g_flasherflasher31)                                                  
        
ChatColor(ID"^3[ ^4Immortal_classic 18+ ^3] ^1òåáÿ îñëåïèë: ^3%s"flasher
        
        if(!(++
g_TeamFlash[g_flasher] % 3)) 
        {                                             
           
//code
        
}        
    } 
}
 

public 
event_flashsmokepuff()
{                                    
    
set_task(0.05,"reset_flasher")
    return 
PLUGIN_CONTINUE   
}
                                     
public 
reset_flasher()

    
g_flasher 0
}
                                                                   
public 
get_flasher(id)
{
    
g_flasher = (id 524627)
}  

public 
forward_setmodel(const ENTITYmodel[])
{
    if(!
equal(model"models/w_flashbang.mdl"))
        return 
FMRES_IGNORED

    
new owner pev(ENTITYpev_owner)            
    if (
owner == 0)
        return 
FMRES_IGNORED          

    set_task
(FLASH_TIMER"get_flasher"524627+owner)

    return 
FMRES_IGNORED
}

stock ChatColor(const id, const input[], any:...) 
{
    new 
count 1players[32]
    static 
msg[191]
    
vformat(msg190input3)
    
    
replace_all(msg190"!g""^4")
    
replace_all(msg190"!y""^1")
    
replace_all(msg190"!t""^3")
    
    if (
idplayers[0] = id; else get_players(playerscount"ch")
    {
        for (new 
0counti++)
        {
            if (
is_user_connected(players[i]))
            {
                
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("SayText"), _players[i])
                
write_byte(players[i]);
                
write_string(msg);
                
message_end();
            }
        }                                                    
    }
Аватара пользователя
nemec21
Скриптер
 
Сообщения: 803
Зарегистрирован: 07 фев 2016, 17:08
Откуда: Беларусь
Благодарил (а): 214 раз.
Поблагодарили: 47 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Добавить цикл на ограничение на 3 раз

Сообщение NEoMASTERR » 11 мар 2017, 13:14

Код: Выделить всё
#if !defined MAX_PLAYERS
    #define MAX_PLAYERS 32
#endif 

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

След.

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

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

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