Well I post mine too, even if people are faster than me :^)
PHP Code:
#include <sourcemod>
#define REQUESTHEAL "#heal"
Handle Delay[MAXPLAYERS+1] = null;
int TimerCount[MAXPLAYERS+1];
public Plugin:myinfo =
{
name = "HealRequestMenu",
author = "Walgrim",
description = "Displays a menu to request heal",
version = "1.0",
url = "http://steamcommunity.com/id/walgrim/"
};
public void OnPluginStart() {
RegConsoleCmd("sm_menu", Command_DisplayMenu, "A command that displays the menu");
}
public int MenuHandler(Menu menu, MenuAction action, int param1, int param2) {
switch (action) {
case MenuAction_Select:
{
char info[32];
menu.GetItem(param2, info, sizeof(info));
if (StrEqual(info, REQUESTHEAL)) {
if (TimerCount[param1] < 1) {
CreateTimer(0.1, PrintHint, GetClientUserId(param1));
Delay[param1] = CreateTimer(1.0, Timer_Countdown, GetClientUserId(param1), TIMER_REPEAT);
}
}
}
case MenuAction_DisplayItem:
{
char info[32], display[64];
menu.GetItem(param2, info, sizeof(info));
if (TimerCount[param1] < 30 && TimerCount[param1] > 0) {
if (StrEqual(info, REQUESTHEAL)) {
Format(display, sizeof(display), "Request Heal (Available in %i secs)", 30 - TimerCount[param1]);
return RedrawMenuItem(display);
}
}
}
case MenuAction_DrawItem:
{
char info[32];
menu.GetItem(param2, info, sizeof(info));
if (TimerCount[param1] < 30 && TimerCount[param1] > 0) {
if (StrEqual(info, REQUESTHEAL)) {
return ITEMDRAW_DISABLED;
}
}
}
case MenuAction_End:
{
delete menu;
}
}
return 0;
}
public Action Command_DisplayMenu(int client, int args) {
Menu menu = new Menu(MenuHandler, MenuAction_Select|MenuAction_DisplayItem|MenuAction_DrawItem|MenuAction_End);
menu.SetTitle("Your menu title");
menu.AddItem(REQUESTHEAL, "Request Heal");
menu.ExitButton = true;
menu.Display(client, 35);
return Plugin_Handled;
}
public Action PrintHint(Handle Timer, int clientid)
{
int client = GetClientOfUserId(clientid);
if (client == 0) {
return Plugin_Continue;
}
PrintHintTextToAll("%N want heal!", client);
return Plugin_Continue;
}
public Action Timer_Countdown(Handle Timer, int clientid) {
int client = GetClientOfUserId(clientid);
if (client == 0) {
return Plugin_Continue;
}
TimerCount[client]++;
if (TimerCount[client] > 30) {
ClearTimer(Delay[client]);
TimerCount[client] = 0;
}
return Plugin_Continue;
}
stock ClearTimer(&Handle:hTimer) {
if (hTimer != null) {
KillTimer(hTimer);
hTimer = null;
}
}
(I would be interested if someone tells me a better way to do a countdown like I did (with secs displaying))