Вывод сообщения в dhud игроку. (отчет до следующей покупки item)
- Код: Выделить всё
public funcCooldown(id)
{
if(!is_user_connected(id)) return;
if(g_iCooldown[id])
{
g_iCooldown[id]--
set_dhudmessage(255, 0, 0, 0.005, 0.2, 0, 1.0, 0.2)
show_dhudmessage(id, "Перезарядка: [%d]", g_iCooldown[id])
set_task(1.0, "funcCooldown", id);
}
else
{
set_dhudmessage(0, 255, 0, 0.005, 0.23, 0, 1.0, 0.4)
show_dhudmessage(id, "Безумие готово!")
}
}
Код extra items
- Код: Выделить всё
}
case EXTRA_MADNESS: // Zombie Madness
{
if(g_madness_limit[id]>=MADNESS_LIMIT){
client_cmd(id, "spk ^"%s^"", SND_MENU_OFF)
zp_colored_print(id, "^x04[«Зомби-Подростки®»]^x01 Превышен лимит покупки!
}
if(g_iCooldown[id])return;
g_madness_limit[id]++
g_nodamage[id] = true
set_task(0.1, "zombie_aura", id+TASK_AURA, _, _, "b")
set_task(get_pcvar_float(cvar_madnessduration), "madness_over", id+TASK_BLOOD)
static sound[64]
ArrayGetString(zombie_madness, random_num(0, ArraySize(zombie_madness) - 1), sound,
charsmax(sound))
emit_sound(id, CHAN_VOICE, sound, 1.0, ATTN_NORM, 0, PITCH_NORM)
g_iCooldown[id] = 15;
funcCooldown(id);
Проблема в client_disconnect , то есть мой гавно код не работает при выходе игрока во время действия функции и собственно обратном заходе на сервер. То есть идет отчет
Перезарядка: [%d]", g_iCooldown[id])
во время выхода игрока до окончания отчета и обратном заходе и собственно последующей покупке "EXTRA_MADNESS" возникает ошибка, функция не выполняется, вывод hud не работает !
Так же во время отчета пока работает "EXTRA_MADNESS" (работает 5 секунд) сам мод выводит в чат
что еще раз данный item купить нельзя , как сделать так же когда функция заканчивается а время остается , а то аммо тратится когда еще раз нажимаешь !
Заранее спасибо , код г , так что не буду против если сделаете по своему !
Сори если фигово объяснил, если что говорите, постараюсь подробней расписать....
Кст , так же коды бралися с этого форума
вот они
1. Обычный отсчет
- Код: Выделить всё
func(id)
{
if(g_bUsed[id]) return;
g_bUsed[id] = true;
//code
set_task(10.0, "funcCooldown", id);
}
public funcCooldown(id)
{
g_bUsed[id] = false;
}
2. Отсчет с выводом сообщения в чат
- Код: Выделить всё
func(id)
{
if(g_iCooldown[id]) return;
//code
g_iCooldown[id] = 10;
funcCooldown(id);
}
public funcCooldown(id)
{
if(!is_user_connected(id)) return;
if(g_iCooldown[id])
{
client_print(id, print_center, "%d sec.", g_iCooldown[id]--);
set_task(1.0, "funcCooldown", id);
}
else
{
client_print(id, print_center, "You can use func");
}
}
3. Hud, который и хотел сделать в своем коде
- Код: Выделить всё
#include < amxmodx >
#define PLUGIN "New"
#define VERSION "0.1"
#define AUTHOR "Opo4uMapy"
#define TASK_TIMER 545445
new g_timer[33]
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /test", "test")
}
public test(id)
{
if(g_timer[id] > 0)
return
client_print(id, print_chat, "Test: TRUE")
g_timer[id] = 10
set_task(1.0, "timer", id + TASK_TIMER, _, _, "b")
}
public timer(taskid)
{
new id = taskid - TASK_TIMER
if(!is_user_alive(id))
{
remove_task(id + TASK_TIMER)
g_timer[id] = 0
return
}
if(g_timer[id] > 0)
{
g_timer[id]--
set_hudmessage(255, 0, 0, -1.0, 0.5, 0, 6.0, 12.0)
show_hudmessage(id, "Timer: %d", g_timer[id])
}
else remove_task(id + TASK_TIMER)
}
public client_disconnect(id)
{
if(task_exists(id + TASK_TIMER))
remove_task(id + TASK_TIMER)
}
Может здесь что нибудь и есть, но как ни пробовал не получается