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

Заблокировать работу плагина во время игры

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

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

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

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

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

Re: Заблокировать работу плагина во время игры

Сообщение KPOCT » 11 дек 2016, 21:39

Стоп-стоп-стоп.
Вы что с массивами делаете?
И зачем массивы здесь?
Используйте вариант, который Вам подсказал Pafos.

Чтобы включить, используйте всё тот же натив csdm_set_active.
(2*b) || !(2*b)
Аватара пользователя
KPOCT
 
Сообщения: 65
Зарегистрирован: 21 фев 2016, 23:33
Благодарил (а): 21 раз.
Поблагодарили: 7 раз.
Опыт программирования: Больше трех лет
Языки программирования: C, C++, C#, Pawn, VBS, PHP, JS

Re: Заблокировать работу плагина во время игры

Сообщение плохой_программист » 11 дек 2016, 22:55

KPOCT писал(а):Стоп-стоп-стоп.
Вы что с массивами делаете?
И зачем массивы здесь?
Используйте вариант, который Вам подсказал Pafos.

Чтобы включить, используйте всё тот же натив csdm_set_active.



я не знаю как занести часы в переменную ,только в массив получается.

get_time("%H",nazvanie_peremennoi,len)

что мне вписывать на место len ведь это не актуально для переменной.

Добавлено спустя 1 минуту 44 секунды:
нужно использовать sizeof?

Добавлено спустя 5 минут 18 секунд:
возможно мне нужно использовать str_to_num после внесения данных в массив ?

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

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "O'ZHENN"




public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    register_clcmd("say /hmin", "turn_on_nightmode")
}

public turn_on_nightmode(){
    
        new szHours
[32]
        new szMinutes[32]
        get_time("%H",szHours,31)
        get_time("%M",szMinutes,31)
        new hours = str_to_num(szHours)
        new minutes = str_to_num(szMinutes)
        
        
        client_print
(0,print_chat,"Now is %d:%d",hours, minutes)
        
        if
(hours == 22 && minutes == 22){
            client_print(0,print_chat,"Now is %d:%d",hours, minutes)
            client_print(0,print_chat,"Now is %d:%d",hours, minutes)
            client_print(0,print_chat,"Now is %d:%d",hours, minutes)
            client_print(0,print_chat,"Now is %d:%d",hours, minutes)
            client_print(0,print_chat,"Now is %d:%d",hours, minutes)

        }
}


как сделать чтобы функция turn_on_nightmode вызывалась сама в определенное время а не только тогда когда я ее вызываю с помощь /hmin.

Мне нужно условие ИФ прописывать в plugin init?

Добавлено спустя 17 минут 12 секунд:
а может быть нужно использовать set_task ?

Добавлено спустя 5 минут 9 секунд:
как реализовать вызов функции в заданое время (время сервера) с помощью set_task.

Добавлено спустя 7 минут 24 секунды:
Аватара пользователя
плохой_программист
 
Сообщения: 13
Зарегистрирован: 10 дек 2016, 21:13
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Опыт программирования: Меньше недели
Языки программирования: Pawn

Re: Заблокировать работу плагина во время игры

Сообщение KPOCT » 11 дек 2016, 23:22

По поводу переменной.
Внимательнее посмотрите на сообщение Pafos' a.


Используйте бесконечный (флаг "b") set_task с интервалом 60с, а лучше 59с, чтобы уж точно не пропустить нужное время.
(2*b) || !(2*b)
Аватара пользователя
KPOCT
 
Сообщения: 65
Зарегистрирован: 21 фев 2016, 23:33
Благодарил (а): 21 раз.
Поблагодарили: 7 раз.
Опыт программирования: Больше трех лет
Языки программирования: C, C++, C#, Pawn, VBS, PHP, JS

Re: Заблокировать работу плагина во время игры

Сообщение плохой_программист » 11 дек 2016, 23:25

KPOCT писал(а):По поводу переменной.
Внимательнее посмотрите на сообщение Pafos' a.


Используйте бесконечный (флаг "b") set_task с интервалом 60с, а лучше 59с, чтобы уж точно не пропустить нужное время.

Такие частые проверки(60сек) не нагнут сервер?

Добавлено спустя 1 минуту 25 секунд:
плохой_программист писал(а):
KPOCT писал(а):По поводу переменной.
Внимательнее посмотрите на сообщение Pafos' a.


Используйте бесконечный (флаг "b") set_task с интервалом 60с, а лучше 59с, чтобы уж точно не пропустить нужное время.

Такие частые проверки(60сек) не нагнут сервер?


Пафос в своем посте не указывал как нужно присваивать переменным значие,у меня в этом проблема заключается
Аватара пользователя
плохой_программист
 
Сообщения: 13
Зарегистрирован: 10 дек 2016, 21:13
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Опыт программирования: Меньше недели
Языки программирования: Pawn

Re: Заблокировать работу плагина во время игры

Сообщение KPOCT » 11 дек 2016, 23:39

Такие частые проверки(60сек) не нагнут сервер?

Я Вас умоляю)
Нет конечно, это мелочь.
И Вы ещё не знаете, что значит "часто". Почитайте на досуге Вы должны зарегистрироваться, чтобы видеть ссылки..

Вы должны зарегистрироваться, чтобы видеть ссылки.

Pafos указал, как присвоить переменным значения часов и минут. Ознакомьтесь: Вы должны зарегистрироваться, чтобы видеть ссылки.
(2*b) || !(2*b)
Аватара пользователя
KPOCT
 
Сообщения: 65
Зарегистрирован: 21 фев 2016, 23:33
Благодарил (а): 21 раз.
Поблагодарили: 7 раз.
Опыт программирования: Больше трех лет
Языки программирования: C, C++, C#, Pawn, VBS, PHP, JS

Re: Заблокировать работу плагина во время игры

Сообщение плохой_программист » 11 дек 2016, 23:53

KPOCT писал(а):
Такие частые проверки(60сек) не нагнут сервер?

Я Вас умоляю)
Нет конечно, это мелочь.
И Вы ещё не знаете, что значит "часто". Почитайте на досуге Вы должны зарегистрироваться, чтобы видеть ссылки..

Вы должны зарегистрироваться, чтобы видеть ссылки.

Pafos указал, как присвоить переменным значения часов и минут. Ознакомьтесь: Вы должны зарегистрироваться, чтобы видеть ссылки.


написал элементарную функцию с таскером но она не работает. Укажите на ошибку пжл

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


new arg
[1]

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)    
    
}

public tasker(){
   
arg[0] = 1
    set_task
(0.1,"turn_on_nightmode",1,arg,1,"b")
}
public turn_on_nightmode(arg[],id){
    
        new szHours
[32]
        new szMinutes[32]
        
        get_time
("%H",szHours,31)
        get_time("%M",szMinutes,31)
        
        new iHours 
= str_to_num(szHours)
        new iMinutes = str_to_num(szMinutes)
        
        
        if
(iHours      ==    23        &&        iMinutes       >=       45){
            
            
            client_print
(0,print_chat,"Now is %d:%d",iHours, iMinutes )
            client_print(0,print_chat,"Now is %d:%d",iHours, iMinutes )
            client_print(0,print_chat,"Now is %d:%d",iHours, iMinutes )
            client_print(0,print_chat,"Now is %d:%d",iHours, iMinutes )
            client_print(0,print_chat,"Now is %d:%d",iHours, iMinutes )
            client_print(0,print_chat,"Now is %d:%d",iHours, iMinutes )
        
        
}    
}
 


Добавлено спустя 1 минуту 25 секунд:
я там даже 0.1 сек указал чтобы не пропустила. А в итоге никакой реакции. В заданное время if не срабатывает и строки с сообщениями не высвечиваются

Добавлено спустя 2 минуты 56 секунд:
пафос в своем сообщении указал как создать две переменные для часов и минут а также создал переменную в которую поместил содержимое ранее созданных двух ременных. про get_time он ничего не упоминал

Добавлено спустя 1 минуту 50 секунд:
почему str_to_num так плох ? разве таким способом нельзя решить проблему?

Да,возможно для быдлокодера это ок. Но я ведь учусь! ))
Аватара пользователя
плохой_программист
 
Сообщения: 13
Зарегистрирован: 10 дек 2016, 21:13
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Опыт программирования: Меньше недели
Языки программирования: Pawn

Re: Заблокировать работу плагина во время игры

Сообщение KPOCT » 12 дек 2016, 01:51

И Он, и я сказали Вам, что желательно использовать ф-ю time вместо get_time.

Код: Выделить всё
public tasker(){
   arg[0] = 1
    set_task
(0.1,"turn_on_nightmode",1,arg,1,"b")

--->
Код: Выделить всё
public tasker()
{
    set_task(59.0,"turn_on_nightmode", .flags = "b")


Код: Выделить всё
public turn_on_nightmode(arg[],id){
    
        new szHours
[32]
        new szMinutes[32]
        
        get_time
("%H",szHours,31)
        get_time("%M",szMinutes,31)
        
        new iHours 
= str_to_num(szHours)
        new iMinutes = str_to_num(szMinutes)
        
        
        if
(iHours      ==    23        &&        iMinutes       >=       45){
            
            
            client_print
(0,print_chat,"Now is %d:%d",iHours, iMinutes )
            client_print(0,print_chat,"Now is %d:%d",iHours, iMinutes )
            client_print(0,print_chat,"Now is %d:%d",iHours, iMinutes )
            client_print(0,print_chat,"Now is %d:%d",iHours, iMinutes )
            client_print(0,print_chat,"Now is %d:%d",iHours, iMinutes )
            client_print(0,print_chat,"Now is %d:%d",iHours, iMinutes )
        
        
}    
}

---->
Код: Выделить всё
public turn_on_nightmode()
{
        new iHours, iMinutes;
        time(iHours, iMinutes);
        if(iHours == 23 && iMinutes >= 45)
        {
                for(int i = 0; i < 5; i++)
                {
                        client_print(0, print_chat, "Now is %d:%d", iHours, iMinutes)
                }
        }
}


Вот только я не уверен на счёт передачи id таска. Попробуйте так, а вдруг что - передайте id.
(2*b) || !(2*b)
Аватара пользователя
KPOCT
 
Сообщения: 65
Зарегистрирован: 21 фев 2016, 23:33
Благодарил (а): 21 раз.
Поблагодарили: 7 раз.
Опыт программирования: Больше трех лет
Языки программирования: C, C++, C#, Pawn, VBS, PHP, JS

Re: Заблокировать работу плагина во время игры

Сообщение плохой_программист » 12 дек 2016, 01:55

стоит ли в конце if ставить remove_task(1) или можно заморозить выполнение таскера?

И еще.

Как сменить посреди игры следующую карту (nextmap). Замораживать mapchooser.amxx я уже научился с помощью pause("ac","mapchooser.amxx") .


P.S я не знал что time это функция )))))))
Аватара пользователя
плохой_программист
 
Сообщения: 13
Зарегистрирован: 10 дек 2016, 21:13
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Опыт программирования: Меньше недели
Языки программирования: Pawn

Re: Заблокировать работу плагина во время игры

Сообщение KPOCT » 12 дек 2016, 02:05

> стоит ли в конце if ставить remove_task(1) или можно заморозить выполнение таскера?
Если нужно удалить таск после выполнения нужных Вам действий, тогда всё-таки отправляйте ID таска (645, например), принимайте его на входе и используйте remove_task(id). В общем, да, то, о чём Вы и спрашивали.

> nextmap
Идёт речь о смене карты без вмешательства плагинов?

> я не знал что time это функция
Если после какого-то названия стоит закрытый набор круглых скобок, то это функция)
(2*b) || !(2*b)
Аватара пользователя
KPOCT
 
Сообщения: 65
Зарегистрирован: 21 фев 2016, 23:33
Благодарил (а): 21 раз.
Поблагодарили: 7 раз.
Опыт программирования: Больше трех лет
Языки программирования: C, C++, C#, Pawn, VBS, PHP, JS

Re: Заблокировать работу плагина во время игры

Сообщение плохой_программист » 12 дек 2016, 02:38

Код: Выделить всё
new iHours, iMinutes, iSeconds

public plugin_init
() {
    register_plugin(PLUGIN, VERSION, AUTHOR)    
    register_clcmd
("say /hmin","msg")
    set_task(0.1,"turn_on_nightmode",1,_,_,"b",_)
    
}

public turn_on_nightmode(){
    
    time
(iHours,iMinutes,iSeconds)
    new i = 0
    
    if
(iHours  == 2, iMinutes == 30, iSeconds ==0)     // Если время 2:11:0 (ноч) -->                                                          
    {                        
        
        for
(i; i <  10; i++){
            // Вывести сообщение 5 раз
            client_print(0,print_chat,"The time is now: %i:%i:%i",iHours,iMinutes,iSeconds)
        }
        
        
// Поставить на паузу плагин голосования за карту
        pause("ac","mapchooser,amxx")
        server_cmd("mp_timelimit 10")
        // Прекратить выполнение таскера
        remove_task(1)

    }
    
}

public msg(){

    client_print(0,print_chat,"msg: %i:%i:%i",iHours,iMinutes,iSeconds)



Теперь я столкнулся с другой проблемой. Содержимое if срабатывает на одну минуту раньше а значение mp_timelimit вместо 10 устанавливается на 9. Как быть? :-!

Касательно nextmap.

ну допустим... после ввода Nextmap я вижу de_aztec. Мне нужно сделать так чтобы после отключения плагина mapchooser.amxx(pause("mapchooser.amxx") вместо de_aztec стало например de_dust2.
Ну а далее по истечению 10 минут спокойно чтобы сменилась карта на ту которую я укажу в статической переменной.
Аватара пользователя
плохой_программист
 
Сообщения: 13
Зарегистрирован: 10 дек 2016, 21:13
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Опыт программирования: Меньше недели
Языки программирования: Pawn

Пред.След.

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

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

Сейчас этот форум просматривают: nemec21 и гости: 8