Проверьте на логику\валидность код

Danyas

Участник
Сообщения
2,173
Реакции
1,072
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));
	}
}

Буду рад варианту реализации закоменченой части кода :)
На сервере всё работает

lBwtwQS.png


senQqs8.png
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #2
Danyas, зачем создавать новые темы? задавай вопросы в одной теме
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #3
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 ?
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Danyas, зачем создавать новые темы? задавай вопросы в одной теме

То ведь другой код был.
Было бы неплохо одну тему для всех сделать

Списано с старого исходника, он нужен тогда был, забыл убрать.

За switch - спасибо, мне теперь всё мои плагины переписать :D
Теперь куда только можно засовывать его буду)
Он может искать по String'овому значению?
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Буду рад варианту реализации закоменченой части кода
Все квары действенны во время работы сервера (можно вбивать прямо в консоль), а sm_rankinfo_type "0" производит полное отключение плагина:
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);
	}
}
 
Сверху Снизу