AMX MOD X
Суббота, 18.05.2024, 11:57:57



Приветствую Вас Гость | RSS
[ Главная ] [ Организация паузы выполнения кода - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Организация паузы выполнения кода (какой синтаксис)
Организация паузы выполнения кода
LSDДата: Среда, 20.06.2007, 14:21:59 | Сообщение # 1
Лейтенант
Группа: Пользователи
Сообщений: 74
Репутация: 0
Статус: Не в сети
например в паскале делается так sleep 1000, т.е задержка 1 сек, как ето сделать в AMXX?

Сообщение отредактировал LSD - Четверг, 21.06.2007, 07:13:13
 
DESTROYERДата: Среда, 20.06.2007, 14:24:29 | Сообщение # 2
Сержант
Группа: Пользователи
Сообщений: 39
Репутация: 0
Статус: Не в сети
если мне память не отшибло то вроде ето таймер (set_task)

пропиши (Abort;) в совей жизни
 
LSDДата: Среда, 20.06.2007, 14:28:43 | Сообщение # 3
Лейтенант
Группа: Пользователи
Сообщений: 74
Репутация: 0
Статус: Не в сети
Я не силен а программировании под AMXX, нипиши как эта функция выглядит в полной форме со всеми параметрами.

/* Calls function on specified time.
* Flags:
* "a" - repeat.
* "b" - loop task.
* "c" - do task on time after a map timeleft.
* "d" - do task on time before a map timelimit. */
native set_task(Float:time,const function[],id = 0,parameter[]="",len = 0,flags[]="", repeat = 0);

Мне нужно сделать паузу скажем в 1\2 сек, перед выполнением кода

 
slogicДата: Среда, 20.06.2007, 15:05:03 | Сообщение # 4
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
нельзя делать паузу в amxx так как это прямо пропорционально лагу. можно отсрочить выполнение той или иной функции с пом. set_task.
 
LSDДата: Среда, 20.06.2007, 15:13:46 | Сообщение # 5
Лейтенант
Группа: Пользователи
Сообщений: 74
Репутация: 0
Статус: Не в сети
хорошо кам мне с помощью set_task отсрочить выполнение.
Мне нужно чтобы функция public cmdTsay(id, level, cid) - это из плагина Admin Chat, выполнилась 4 раза с паузой между выполнением в 0.5 сек.

Т.е я пишу в консоли amx_csay green text (1 раз) и текст дублируется на экране 4 раза.
Делал вот так

Quote
for (new ii=0; ii<5 ; ++ii)

но при таком коде все 4 надписи выводится на экран мгновенно т.е выглядет это так

Quote
text
text
text
text

а нужно что бы надписи появлялись с небольшой паузой

Сообщение отредактировал LSD - Среда, 20.06.2007, 15:15:03
 
slogicДата: Среда, 20.06.2007, 15:52:05 | Сообщение # 6
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
В твоем случае это непросто.

Ввести глобальный массив:

Code

new g_sMsg[33][192]

В cmdTsay (сразу после строки read_args(message, 191)) проверить, если cmd = "amx_csay" то выполнить:

Code

if(task_exists(id))
   remove_task(id)
copy(g_sMsg[id], 191, message)
//g_sMsg[id] = message // или так если то что выше pawn не проглотит
new arr[2]
arr[0] = id
arr[1] = 4 // 4 попытки
set_task(0.1, "taskTSay", id, arr, sizeof(arr))
return PLUGIN_HANDLED

Сам taskTSay будет выглядеть примерно так:

Code

public taskTSay(params[])
{
   new id = params[0]
   new attempt = params[1]

   new cmd[16], color[12], message[192], name[32], authid[32], userid = 0
    
   message = g_sMsg[id]
    
   // эта часть выдрана из cmdTSay --------------->
   parse(message, color, 11)
   new found = 0, a = 0
   if(equal(color, "!", 1)) {
     a = 0
     found = 1
     new sred[4], sgreen[4], sblue[4], ired, igreen, iblue
     if(strlen(color) < 2) {
       g_Values[0][0] = 255
       g_Values[0][1] = 255
       g_Values[0][2] = 255
     }
     else {
       copy(sred, 3, color[1])
       copy(sgreen, 3, color[4])
       copy(sblue, 3, color[7])
       ired = str_to_num(sred)
       igreen = str_to_num(sgreen)
       iblue = str_to_num(sblue)
       if(ired < 0 || ired > 255)
         ired = 255
       if(igreen < 0 || igreen > 255)
         igreen = 255
       if(iblue < 0 || iblue > 255)
         iblue = 255
       g_Values[0][0] = ired
       g_Values[0][1] = igreen
       g_Values[0][2] = iblue
     }
   }
   else if(equal(color, "?")) {
     a = 1
     found = 1
     g_Values[1][0] = random_num(32,255)
     g_Values[1][1] = random_num(32,255)
     g_Values[1][2] = random_num(32,255)
   }
   else {
     for(new i = 2; i < MAX_CLR; ++i) {
       //if(equali(color, _T(g_Colors[i], id)) || equali(color, g_Colors[i])) {
       if(equali(color, g_Colors[i])) {
         a = i
         found = 1
         break
       }
     }
   }
   if(!found) a = 2
    
   new length = found ? (strlen(color) + 1) : 0
   if(++g_msgChannel > 6 || g_msgChannel < 3)
     g_msgChannel = 3
   get_user_authid(id, authid, 31)
   get_user_name(id, name, 31)
   userid = get_user_userid(id)

   if(equali(cmd, "tsay", 4) || equali(cmd[4], "tsay", 4))
     set_hudmessage(g_Values[a][0], g_Values[a][1], g_Values[a][2], 0.05, 0.55+float(g_msgChannel)/35.0, 0, 6.0, HOLDTIME, 0.5, 0.15, g_msgChannel)
   else if(equali(cmd, "csay", 4) || equali(cmd[4], "csay", 4))
     set_hudmessage(g_Values[a][0], g_Values[a][1], g_Values[a][2], -1.0, 0.1+float(g_msgChannel)/35.0, 0, 6.0, HOLDTIME, 0.5, 0.15, g_msgChannel)
   else if(equali(cmd, "fxsay", 5) || equali(cmd[4], "fxsay", 5))
     set_hudmessage(g_Values[a][0], g_Values[a][1], g_Values[a][2], 0.05, 0.55+float(g_msgChannel)/35.0, 2, 0.25, HOLDTIME, 0.05, 1.0, g_msgChannel)
   else if(equali(cmd, "cfxsay", 6) || equali(cmd[4], "cfxsay", 6))
     set_hudmessage(g_Values[a][0], g_Values[a][1], g_Values[a][2], -1.0, 0.1+float(g_msgChannel)/35.0, 2, 0.25, HOLDTIME, 0.05, 1.0, g_msgChannel)
   else if(equali(cmd, "flicksay", 8) || equali(cmd[4], "flicksay", 8))
     set_hudmessage(g_Values[a][0], g_Values[a][1], g_Values[a][2], 0.05, 0.55+float(g_msgChannel)/35.0, 1, 6.0, HOLDTIME, 0.5, 0.2, g_msgChannel)
   else if(equali(cmd, "cflicksay", 9) || equali(cmd[4], "cflicksay", 9))
     set_hudmessage(g_Values[a][0], g_Values[a][1], g_Values[a][2], -1.0, 0.1+float(g_msgChannel)/35.0, 1, 6.0, HOLDTIME, 0.5, 0.2, g_msgChannel)

   while(replace(message[length], 191-length, "\"", "")) {}
   while(replace(message[length], 191-length, "\\n", "\n")) {}
   if(containi(cmd, "yy") == -1 || get_cvar_num("amx_show_activity") == 2) {
     show_hudmessage(0, "%s :  %s", name, message[length])
     while(replace(message[length], 191-length, "\n", " ")) {}
     client_print(0, print_notify, "%s :  %s", name, message[length])
   }
   else {
     show_hudmessage(0, message[length])
     while(replace(message[length], 191-length, "\n", " ")) {}
     client_print(0, print_notify, message[length])
   }

   log_to_file(g_logFile,"Chat: \"%s<%d><%s><>\" %s \"%s\"",name,userid,authid,cmd,message[length])
   /*log_message("\"%s<%d><%s><>\" triggered \"%s\" (text \"%s\") (color \"%s\")",
     name,userid,authid,cmd,message[length],g_Colors[a])*/

   // <<------------------------------------   

   attempt--
   if(attempt) {
    new arr[2]; arr[0] = id; arr[1] = attempt
    set_task(0.5, "taskTSay", id, arr, sizeof(arr))
   }
}


Сообщение отредактировал slogic - Среда, 20.06.2007, 15:53:55
 
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Организация паузы выполнения кода (какой синтаксис)
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2024