Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

2 страниц V   1 2

Открытие меню через n секунд

Статус пользователя DRIVE37
сообщение 13.11.2015, 9:45
Сообщение #1


Стаж: 11 лет

Сообщений: 146
Благодарностей: 14
Полезность: 69

Привет, можете подсказать код, как сделать чтобы меню можно было открыть только через n секунд?
При этом чтобы в чат писалось меню можно будет открыть через n секунд. Но это не суть, мне важен сам код.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя ThisIsSparta
сообщение 13.11.2015, 10:06
Сообщение #2
Стаж: 11 лет

Сообщений: 566
Благодарностей: 307
Полезность: 600

DRIVE37,
set_task
Код:

new bool:menu_available = false
new szTime = 300 //секунд

public plugin_init()
{
set_task(1.0, "chekAvailable",1337228,_,_,"b")
}


public chekAvailable()
{
if(task_exists(1337228))
remove_task(1337228)

if(szTime > 0)
{
szTime --
} else {
menu_available = true
remove_task(1337228)
}
}

public My_Menu(id)
{
if (menu_available) //если доступ к меню открыт
{
new i_Menu = menu_create("\rPlayer menu:", "menu_handler")
new s_Players[32], i_Num, i_Player
new s_Name[32], s_Player[10]
get_players(s_Players, i_Num)
for (new i; i < i_Num; i++)
{
i_Player = s_Players[i]
get_user_name(i_Player, s_Name, charsmax(s_Name))
num_to_str(i_Player, s_Player, charsmax(s_Player))
menu_additem(i_Menu, s_Name, s_Player, 0)

}
menu_display(id, i_Menu, 0)
} else {
ChatColor(id, "^1Будет доступно через ^4%d ^1сек", szTime);
}

}

public menu_handler(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new s_Data[6], s_Name[64], i_Access, i_Callback
menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
new i_Player = str_to_num(s_Data)
if (is_user_alive(i_Player))
set_user_health(i_Player, 100)

menu_destroy(menu)
return PLUGIN_HANDLED
}

stock ChatColor(const id, const szMessage[], any:...)
{
static pnum, players[32], szMsg[190], IdMsg;
vformat(szMsg, charsmax(szMsg), szMessage, 3);

if(!IdMsg) IdMsg = get_user_msgid("SayText");

if(id)
{
if(!is_user_connected(id)) return 0;
players[0] = id;
pnum = 1;
}
else get_players(players, pnum, "ch");

for(new i; i < pnum; i++)
{
message_begin(MSG_ONE, IdMsg, .player = players[i]);
write_byte(players[i]);
write_string(szMsg);
message_end();
}
return 1;
}



или так
get_systime

Код:
new start_time, the_time
new Timer = 300


public plugin_cfg()
{
start_time = get_systime()
}

public My_Menu(id)
{
the_time = get_systime()
if (the_time - start_time > Timer) //если теперешнее время минус время старта больше чем 300 сек
{
new i_Menu = menu_create("\rPlayer menu:", "menu_handler")
new s_Players[32], i_Num, i_Player
new s_Name[32], s_Player[10]
get_players(s_Players, i_Num)
for (new i; i < i_Num; i++)
{
i_Player = s_Players[i]
get_user_name(i_Player, s_Name, charsmax(s_Name))
num_to_str(i_Player, s_Player, charsmax(s_Player))
menu_additem(i_Menu, s_Name, s_Player, 0)

}
menu_display(id, i_Menu, 0)
} else {
new time_left = Timer - (the_time - start_time)
ChatColor(id, "^1Будет доступно через ^4%d ^1сек", time_left);
}

}



Отредактировал: ThisIsSparta, - 13.11.2015, 10:21
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя DRIVE37
сообщение 13.11.2015, 10:34
Сообщение #3


Стаж: 11 лет

Сообщений: 146
Благодарностей: 14
Полезность: 69

Спасибо, а чтобы это было для каждого игрока отдельно нужно сделать так: new time_left[33] = Timer - (the_time - start_time)
Color_Print(id, "Меню будет^3 доступно^1 через ^4%d ^1секунд.", time_left[id]); ?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ThisIsSparta
сообщение 13.11.2015, 10:39
Сообщение #4
Стаж: 11 лет

Сообщений: 566
Благодарностей: 307
Полезность: 600

Цитата(DRIVE37 @ 13.11.2015, 11:29) *
Спасибо, а чтобы это было для каждого игрока отдельно нужно сделать так: new time_left[33] = Timer - (the_time - start_time)
Color_Print(id, "Меню будет^3 доступно^1 через ^4%d ^1секунд.", time_left[id]); ?


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

Код:

new start_time[33], the_time
new Timer = 300


public client_putinserver(id)
{
start_time[id] = get_systime()
}

public My_Menu(id)
{
the_time = get_systime()
if (the_time - start_time[id] > Timer) //если теперешнее время минус время старта больше чем 300 сек
{
new i_Menu = menu_create("\rPlayer menu:", "menu_handler")
new s_Players[32], i_Num, i_Player
new s_Name[32], s_Player[10]
get_players(s_Players, i_Num)
for (new i; i < i_Num; i++)
{
i_Player = s_Players[i]
get_user_name(i_Player, s_Name, charsmax(s_Name))
num_to_str(i_Player, s_Player, charsmax(s_Player))
menu_additem(i_Menu, s_Name, s_Player, 0)

}
menu_display(id, i_Menu, 0)
} else {
new time_left = Timer - (the_time - start_time[id])
ChatColor(id, "^1Будет доступно через ^4%d ^1сек", time_left);
}

}

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Vaqtincha
сообщение 13.11.2015, 11:04
Сообщение #5
Стаж: 11 лет

Сообщений: 981
Благодарностей: 352
Полезность: < 0

похоже на извращения


Отредактировал: Vaqtincha, - 13.11.2015, 11:05
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя filip
сообщение 13.11.2015, 11:50
Сообщение #6


Стаж: 13 лет

Сообщений: 418
Благодарностей: 332
Полезность: 779

Цитата(Vaqtincha @ 13.11.2015, 11:59) *
похоже на извращения

Ну так покажи вариант без оных
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя DRIVE37
сообщение 13.11.2015, 19:59
Сообщение #7


Стаж: 11 лет

Сообщений: 146
Благодарностей: 14
Полезность: 69

Еще вопрос назрел по поводу этого, как сделать чтобы эта блокировка секундами была один раз за карту для каждого по отдельности, т.е если админ был на сервере и у него прошли эти секунды и он открывал меню то при следующем заходе на эту карту если она не менялась он может открыть его бес блокировки секундами...?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Vaqtincha
сообщение 13.11.2015, 20:16
Сообщение #8
Стаж: 11 лет

Сообщений: 981
Благодарностей: 352
Полезность: < 0

filip, я имел ввиду желания автора(выше еще одно доказательство)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DRIVE37
сообщение 13.11.2015, 20:19
Сообщение #9


Стаж: 11 лет

Сообщений: 146
Благодарностей: 14
Полезность: 69

Цитата(Vaqtincha @ 13.11.2015, 21:11) *
filip, я имел ввиду желания автора(выше еще одно доказательство)

Ваше мнение тут ни кто не спрашивал, что хочу то и спрашиваю.

Отредактировал: voed, - 13.11.2015, 20:46
Причина: Выдано устное предупреждение!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 13.11.2015, 20:21
Сообщение #10
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

DRIVE37, тогда реконнектами будут обходить ограничения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DRIVE37
сообщение 13.11.2015, 20:30
Сообщение #11


Стаж: 11 лет

Сообщений: 146
Благодарностей: 14
Полезность: 69

Цитата(Safety1st @ 13.11.2015, 21:17) *
DRIVE37, тогда реконнектами будут обходить ограничения.

У меня там массив Trie там все сохраняется по стим ид

Отредактировал: DRIVE37, - 13.11.2015, 20:32
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 13.11.2015, 20:37
Сообщение #12
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Это очень здорово!
Вы хотите, чтобы Вам дополнили код, который Вы не предоставили?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
voed
сообщение 13.11.2015, 20:54
Сообщение #13
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Цитата(DRIVE37 @ 13.11.2015, 20:14) *
Ваше мнение тут ни кто не спрашивал, что хочу то и спрашиваю.

Когда вы обращаетесь с помощью на форум вы именно спрашиваете мнение всех пользователей этого форума, так что грубить не надо.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя DRIVE37
сообщение 13.11.2015, 20:56
Сообщение #14


Стаж: 11 лет

Сообщений: 146
Благодарностей: 14
Полезность: 69

Цитата(Safety1st @ 13.11.2015, 21:33) *
Это очень здорово!
Вы хотите, чтобы вам дополнили код, который Вы не предоставили?

Код:
new start_time[33], the_time
new Timer = 300


public client_putinserver(id)
{
start_time[id] = get_systime()
}

public My_Menu(id)
{
the_time = get_systime()
if (the_time - start_time[id] > Timer) //если теперешнее время минус время старта больше чем 300 сек
{
new i_Menu = menu_create("\rPlayer menu:", "menu_handler")
new s_Players[32], i_Num, i_Player
new s_Name[32], s_Player[10]
get_players(s_Players, i_Num)
for (new i; i < i_Num; i++)
{
i_Player = s_Players[i]
get_user_name(i_Player, s_Name, charsmax(s_Name))
num_to_str(i_Player, s_Player, charsmax(s_Player))
menu_additem(i_Menu, s_Name, s_Player, 0)

}
menu_display(id, i_Menu, 0)
} else {
new time_left = Timer - (the_time - start_time[id])
ChatColor(id, "^1Будет доступно через ^4%d ^1сек", time_left);
}

}

Это не подойдет разве?

Цитата(voed @ 13.11.2015, 21:49) *
Когда вы обращаетесь с помощью на форум вы именно спрашиваете мнение всех пользователей этого форума, так что грубить не надо.

Не спорю, но мнение по теме. А не то что тут извращение, а что нет.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 13.11.2015, 20:57
Сообщение #15
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(DRIVE37 @ 13.11.2015, 21:51) *
Это не подойдет разве?

Не подойдёт.

Цитата(DRIVE37 @ 13.11.2015, 21:26) *
У меня там массив Trie там все сохраняется по стим ид
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DRIVE37
сообщение 13.11.2015, 21:08
Сообщение #16


Стаж: 11 лет

Сообщений: 146
Благодарностей: 14
Полезность: 69

Код:
#include <amxmodx>
#include <fakemeta>
#if AMXX_VERSION_NUM < 183
#include <dhudmessage>
#endif

#define ADMIN_ACCESS ADMIN_LEVEL_A
#define VIP_ACCESS ADMIN_LEVEL_H

#if cellbits == 32
#define OFFSET_CSMONEY 115
#else
#define OFFSET_CSMONEY 140
#endif

new g_iStartPlugin, g_pMoneyDelay;
new CountHpAp[33], CountMoney[33];

new start_time[33], the_time
new Timer = 300

new Trie:g_tMoney;
new Trie:g_tHpAp;

public plugin_init()
{
#define PLUGIN "Admin Menu"
#define VERSION "1.0.4"

register_plugin(PLUGIN, VERSION, "Realution");

register_clcmd("menu_admin", "Check_Player");
register_clcmd("menu_vip", "Check_Player");

g_pMoneyDelay = register_cvar("am_money_delay", "5");

register_message(get_user_msgid("ScoreAttrib"), "MessageScoreAttrib");
register_menucmd(register_menuid(PLUGIN), MENU_KEY_1|MENU_KEY_2|MENU_KEY_0, "HandleMenu");

g_iStartPlugin = get_systime();

g_tMoney = TrieCreate();
g_tHpAp = TrieCreate();
}

public client_putinserver(id)
{
start_time[id] = get_systime()
}

public client_disconnect(id)
{
new auth_id[32];
get_user_authid(id, auth_id, 31);

TrieSetCell(g_tMoney, auth_id, CountMoney[id]);
TrieSetCell(g_tHpAp, auth_id, CountHpAp[id]);

CountHpAp[id] = 0;
CountMoney[id] = 0;
}

public client_authorized(id)
{
new name[32]; get_user_name(id, name, 31);
new auth_id[32]; get_user_authid(id, auth_id, 31);
if(get_user_flags(id) & VIP_ACCESS && get_user_flags(id) & ADMIN_ACCESS)
{
set_dhudmessage(0, 200, 0, -1.0, 0.25, 1, 0.0, 3.0, 0.0, 0.0);
show_dhudmessage(0, "Админ + Вип [ ^4%s^1 ] зашел на сервер!", name);

if(TrieKeyExists(g_tMoney, auth_id))
{
TrieGetCell(g_tMoney, auth_id, CountMoney[id]);
}
else
{
CountMoney[id] = 10;
}

if(TrieKeyExists(g_tHpAp, auth_id))
{
TrieGetCell(g_tHpAp, auth_id, CountHpAp[id]);
}
else
{
CountHpAp[id] = 20;
}
}
else if(get_user_flags(id) & ADMIN_ACCESS)
{
set_dhudmessage(200, 0, 0, -1.0, 0.25, 1, 0.0, 3.0, 0.0, 0.0);
show_dhudmessage(0, "Админ [ ^4%s^1 ] зашел на сервер!", name);

if(TrieKeyExists(g_tMoney, auth_id))
{
TrieGetCell(g_tMoney, auth_id, CountMoney[id]);
}
else
{
CountMoney[id] = 5;
}

if(TrieKeyExists(g_tHpAp, auth_id))
{
TrieGetCell(g_tHpAp, auth_id, CountHpAp[id]);
}
else
{
CountHpAp[id] = 15;
}
}
else if(get_user_flags(id) & VIP_ACCESS)
{
set_dhudmessage(0, 200, 0, -1.0, 0.25, 1, 0.0, 3.0, 0.0, 0.0);
show_dhudmessage(0, "Вип [ ^4%s^1 ] зашел на сервер!", name);

if(TrieKeyExists(g_tMoney, auth_id))
{
TrieGetCell(g_tMoney, auth_id, CountMoney[id]);
}
else
{
CountMoney[id] = 5;
}

if(TrieKeyExists(g_tHpAp, auth_id))
{
TrieGetCell(g_tHpAp, auth_id, CountHpAp[id]);
}
else
{
CountHpAp[id] = 15;
}
}
}

public Check_Player(id)
{
if(!is_user_alive(id))
return ChatColor(id, "^1[^4%s^1] ^1Вы должны быть живы, чтобы использовать меню!", PLUGIN, PLUGIN);

if(!(get_user_flags(id) & (ADMIN_ACCESS | VIP_ACCESS)))
return ChatColor(id, "^1[^4%s^1] ^1У вас нет доступа к меню!", PLUGIN);

return AdminMenu(id);
}

public AdminMenu(id)
{
the_time = get_systime()
if (the_time - start_time[id] > Timer)
{
new szMenu[512], iLen, iKeys = MENU_KEY_0;
iLen = formatex(szMenu, charsmax(szMenu), "\rАдмин\d|\rVIP Меню^n^n");

iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r1. \wВзять \r[\y255 жизни + брони\r] \d[\r%d\d]^n", CountHpAp[id]);

if(get_systime() - g_iStartPlugin < get_pcvar_num(g_pMoneyDelay) * 60)
{
new iMin = 1 + (get_pcvar_num(g_pMoneyDelay) * 60 - (get_systime() - g_iStartPlugin)) / 60;
new szMin[16]; get_ending(iMin, "минут", "минута", "минуты", szMin, charsmax(szMin));
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r2. \wВзять \r[\y16000$\r] \d[\rподождите: %d %s\d]^n^n", iMin, szMin);
}
else
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r2. \wВзять \r[\y16000$\r] \d[\r%d\d]^n^n", CountMoney[id]);
iKeys |= MENU_KEY_2;
}

iKeys |= MENU_KEY_1;

formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\r0. \wВыход");
return show_menu(id, iKeys, szMenu, -1, PLUGIN);
}
else
{
new time_left = Timer - (the_time - start_time[id])
ChatColor(id, "^1Будет доступно через ^4%d ^1сек", time_left);
}
}

public HandleMenu(id, iKey)
{
switch(iKey)
{
case 0:
{
if(CountHpAp[id] == 0) return AdminMenu(id);
fm_set_user_health(id, 255);
fm_set_user_armor(id, 255);
CountHpAp[id] = CountHpAp[id]-1;
ChatColor(id, "^1[^4%s^1] ^1Вы взяли ^4жизни и броню^1! Осталось раз: ^4%d^1.", PLUGIN, CountHpAp[id]);
AdminMenu(id);
}
case 1:
{
if(CountMoney[id] == 0) return AdminMenu(id);
fm_set_user_money(id, fm_get_user_money(id) + 16000);
CountMoney[id] = CountMoney[id]-1;
ChatColor(id, "^1[^4%s^1] ^1Вы взяли^4 16000$^1! Осталось раз: ^4%d^1.", PLUGIN, CountMoney[id]);
AdminMenu(id);
}
}
return PLUGIN_HANDLED;
}

public MessageScoreAttrib(iMsgId, iDest, iReceiver)
{
if(get_user_flags(get_msg_arg_int(1)) & VIP_ACCESS && !get_msg_arg_int(2))
set_msg_arg_int(2, ARG_BYTE, 4);
}

stock fm_set_user_armor(id, armor)
{
set_pev(id, pev_armorvalue, float(armor));
return 1;
}

stock fm_set_user_health(id, health)
{
health > 0 ? set_pev(id, pev_health, float(health)) : dllfunc(DLLFunc_ClientKill, id);
return 1;
}

stock fm_set_user_money(id, money, flash = 0)
{
set_pdata_int(id, OFFSET_CSMONEY, money, 5);
message_begin(MSG_ONE, get_user_msgid("Money"), {0,0,0}, id);
write_long(money);
write_byte(flash);
message_end();
}

stock fm_get_user_money(id)
return get_pdata_int(id, OFFSET_CSMONEY, 5);

stock get_ending(num, const a[], const b[], const c[], output[], lenght)
{
new num100 = num % 100, num10 = num % 10;
if(num100 >=5 && num100 <= 20 || num10 == 0 || num10 >= 5 && num10 <= 9) format(output, lenght, "%s", a);
else if(num10 == 1) format(output, lenght, "%s", b);
else if(num10 >= 2 && num10 <= 4) format(output, lenght, "%s", c);
}

stock ChatColor(const id, const szMessage[], any:...)
{
static pnum, players[32], szMsg[190], IdMsg;
vformat(szMsg, charsmax(szMsg), szMessage, 3);

if(!IdMsg) IdMsg = get_user_msgid("SayText");

if(id)
{
players[0] = id;
pnum = 1;
}
else get_players(players, pnum, "ch");

for(new i; i < pnum; i++)
{
message_begin(MSG_ONE, IdMsg, .player = players[i]);
write_byte(players[i]);
write_string(szMsg);
message_end();
}
return 1;
}


Вот код
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 13.11.2015, 21:35
Сообщение #17


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

DRIVE37, ваше мнение тут тоже никто не спрашивал, что хотят то и отвечают. Я думаю аналогия понятна. Если вам нужна помощь то и относитесь соответственно, никто вам тут ничем не обязан, а обсуждения по теме никто не запрещал.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя DRIVE37
сообщение 13.11.2015, 21:45
Сообщение #18


Стаж: 11 лет

Сообщений: 146
Благодарностей: 14
Полезность: 69

Цитата(Bloo @ 13.11.2015, 22:31) *
DRIVE37, ваше мнение тут тоже никто не спрашивал, что хотят то и отвечают. Я думаю аналогия понятна. Если вам нужна помощь то и относитесь соответственно, никто вам тут ничем не обязан, а обсуждения по теме никто не запрещал.

Как раз таки я не считаю то что то обсуждение было по теме. Я высказал то что тут не требуется такое мнение. Я ни где не говорил что мне кто-то что-то обязан.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 13.11.2015, 23:40
Сообщение #19
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(DRIVE37 @ 13.11.2015, 20:54) *
если админ был на сервере и у него прошли эти секунды и он открывал меню то при следующем заходе на эту карту если она не менялась он может открыть его бес блокировки секундами...?

Вот как-то так.

Прикрепленный файл  admin_menu_realution.sma ( 7,21 килобайт ) Кол-во скачиваний: 22
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 4 раз
   + Цитировать сообщение
Статус пользователя DRIVE37
сообщение 14.11.2015, 0:10
Сообщение #20


Стаж: 11 лет

Сообщений: 146
Благодарностей: 14
Полезность: 69

Цитата(Safety1st @ 14.11.2015, 0:35) *
Вот как-то так.

Прикрепленный файл  admin_menu_realution.sma ( 7,21 килобайт ) Кол-во скачиваний: 22

Спасибо большое за помощь, и оптимизацию!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
2 страниц V   1 2
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: