Спойлер PHP: #include <rankme>public Plugin:myinfo = { name = "RankMe Info", author = "Danyas", version = "1.1", url = "http://hlmod.ru/forum/member.php?u=38940"};new Handle:g_hPrintType = INVALID_HANDLE;new Handle:g_hHookType = INVALID_HANDLE;new g_Type;public OnPluginStart(){ g_hPrintType = CreateConVar("sm_rankinfo_type", "2", "Display a message saying that your rank. 0 - disable 1 - chat 2 - hint 3 - center", FCVAR_PLUGIN, true, 0.0, true, 3.0); g_hHookType = CreateConVar("sm_rankinfo_event", "1", "Display a message on event. 0 - player_death 1 - player_spawn 2 - round_start 3 - round_end [PLUGIN MUST BE RESTARTED AFTER EDIT!!!]", FCVAR_PLUGIN, true, 0.0, true, 3.0);// if (g_hPrintType) HookConVarChange(g_hHookType, Rehook); HookConVarChange(g_hPrintType, Rehook_msg); new HookType = GetConVarInt(g_hHookType); if (HookType == 0) HookEvent("player_death", Event_P); else if (HookType == 1) HookEvent("player_spawn", Event_P); else if (HookType == 2) HookEvent("round_start", Event_R); else HookEvent("round_end", Event_R); g_Type = GetConVarInt(g_hPrintType); AutoExecConfig(true, "rankme_info");}public Rehook_msg(Handle:convar, const String:oldValue[], const String:newValue[]){ g_Type = GetConVarInt(g_hPrintType);}/*public Rehook(Handle:convar, const String:oldValue[], const String:newValue[]){ if (StrEqual(oldValue, newValue)) return else if (StrEqual(oldValue, "0")) UnhookEvent("player_death", Event) else if (StrEqual(oldValue, "1")) UnhookEvent("player_spawn", Event) else if (StrEqual(oldValue, "2")) UnhookEvent("round_start", Event) else UnhookEvent("round_end", Event) if (StrEqual(newValue, "0")) HookEvent("player_death", Event); else if (StrEqual(newValue, "1")) HookEvent("player_spawn", Event); else if (StrEqual(newValue, "2")) HookEvent("round_start", Event); else HookEvent("round_end", Event);}*/public Event_P(Handle: event , const String: name[] , bool: dontBroadcast){ if(g_Type != 0) RankMe_GetRank(GetClientOfUserId(GetEventInt(event,"userid")),RankCallback);}public Event_R(Handle: event , const String: name[] , bool: dontBroadcast){ if(g_Type != 0) { new count = 0; for (new i = 1; i <= MaxClients; i++) { if(IsClientInGame(i) && !IsFakeClient(i)) { count++; RankMe_GetRank(i,RankCallback); } } }}public RankCallback(client, rank, any:data){ if(IsClientInGame(client) && !IsFakeClient(client)) { if(g_Type == 1)PrintToChat(client, "\x04[RankMe Info]\x01 %N занимает \x04%d\x01 место с \x04%d\x01 очк.",client,rank,RankMe_GetPoints(client)); else if(g_Type == 2)PrintHintText(client, "[RankMe Info]\n%N\n%d место\n%d очк.",client,rank,RankMe_GetPoints(client)); else PrintCenterText(client, "[RankMe Info]\n%N\n%d место\n%d очк.",client,rank,RankMe_GetPoints(client)); }} Буду рад варианту реализации закоменченой части кода :) На сервере всё работает
PHP: new HookType = GetConVarInt(g_hHookType); if (HookType == 0) HookEvent("player_death", Event_P); else if (HookType == 1) HookEvent("player_spawn", Event_P); else if (HookType == 2) HookEvent("round_start", Event_R); else HookEvent("round_end", Event_R); -> PHP: switch(GetConVarInt(g_hHookType)) { case 0: HookEvent("player_death", Event_P); case 1: HookEvent("player_spawn", Event_P); case 2: HookEvent("round_start", Event_R); case 3: HookEvent("round_end", Event_R); } PHP: if(g_Type == 1)PrintToChat(client, "\x04[RankMe Info]\x01 %N занимает \x04%d\x01 место с \x04%d\x01 очк.",client,rank,RankMe_GetPoints(client)); else if(g_Type == 2)PrintHintText(client, "[RankMe Info]\n%N\n%d место\n%d очк.",client,rank,RankMe_GetPoints(client)); else PrintCenterText(client, "[RankMe Info]\n%N\n%d место\n%d очк.",client,rank,RankMe_GetPoints(client)); Тут так же switch PHP: new count = 0; for (new i = 1; i <= MaxClients; i++) { if(IsClientInGame(i) && !IsFakeClient(i)) { count++; RankMe_GetRank(i,RankCallback); } } нафига тут count ?
То ведь другой код был. Было бы неплохо одну тему для всех сделать Списано с старого исходника, он нужен тогда был, забыл убрать. За switch - спасибо, мне теперь всё мои плагины переписать :D Теперь куда только можно засовывать его буду) Он может искать по String'овому значению?
Все квары действенны во время работы сервера (можно вбивать прямо в консоль), а sm_rankinfo_type "0" производит полное отключение плагина: Спойлер: RankMe Info v1.1validate PHP: #include <rankme>public Plugin:myinfo = { name = "RankMe Info", author = "Danyas", version = "1.1", url = "http://hlmod.ru/forum/member.php?u=38940"};new g_Type, g_HookType;public OnPluginStart(){ decl Handle:cvar; HookConVarChange(cvar = CreateConVar("sm_rankinfo_type", "2", "Display a message saying that your rank. 0 - disable 1 - chat 2 - hint 3 - center", FCVAR_PLUGIN, true, 0.0, true, 3.0), Rehook_msg); g_Type = GetConVarInt(cvar); HookConVarChange(cvar = CreateConVar("sm_rankinfo_event", "1", "Display a message on event. 0 - player_death 1 - player_spawn 2 - round_start 3 - round_end [PLUGIN MUST BE RESTARTED AFTER EDIT!!!]", FCVAR_PLUGIN, true, 0.0, true, 3.0), Rehook); g_HookType = GetConVarInt(cvar); CloseHandle(cvar); if(g_Type) HookEventType(); AutoExecConfig(true, "rankme_info");}public Rehook_msg(Handle:convar, String:oldValue[], String:newValue[]){ if(g_Type) { if((g_Type = GetConVarInt(convar)) == 0) UnhookEventType(); } else if((g_Type = GetConVarInt(convar))) HookEventType();}public Rehook(Handle:convar, String:oldValue[], String:newValue[]){ if(g_Type) { UnhookEventType(); g_HookType = GetConVarInt(cvar); HookEventType(); } else g_HookType = GetConVarInt(cvar);}public Event_P(Handle: event , String: name[] , bool: dontBroadcast) RankMe_GetRank(GetClientOfUserId(GetEventInt(event,"userid")),RankCallback);public Event_R(Handle: event , String: name[] , bool: dontBroadcast) for (new i = 1; i <= MaxClients; i++) if(IsClientInGame(i)) RankMe_GetRank(i,RankCallback);public RankCallback(client, rank, any:data){ if(IsFakeClient(client) == false) { switch(g_Type) { case 1: PrintToChat(client, "\x04[RankMe Info]\x01 %N занимает \x04%d\x01 место с \x04%d\x01 очк.",client,rank,RankMe_GetPoints(client)); case 2: PrintHintText(client, "[RankMe Info]\n%N\n%d место\n%d очк.",client,rank,RankMe_GetPoints(client)); default: PrintCenterText(client, "[RankMe Info]\n%N\n%d место\n%d очк.",client,rank,RankMe_GetPoints(client)); } }}HookEventType(){ switch(g_HookType) { case 0: HookEvent("player_death", Event_P); case 1: HookEvent("player_spawn", Event_P); case 2: HookEvent("round_start", Event_R, EventHookMode_PostNoCopy); default: HookEvent("round_end", Event_R, EventHookMode_PostNoCopy); }}UnhookEventType(){ switch(g_HookType) { case 0: UnhookEvent("player_death", Event_P); case 1: UnhookEvent("player_spawn", Event_P); case 2: UnhookEvent("round_start", Event_R, EventHookMode_PostNoCopy); default: UnhookEvent("round_end", Event_R, EventHookMode_PostNoCopy); }}