Rankme Connect Anounser

Kruzi

Участник
Сообщения
153
Реакции
20
Когда кто-то заходит пишет что он подключается только в том случае, если он входит в статистику rankme. Как можно сделать чтобы писало что игрок, который не входит в статистику заходит на сервер первый раз?
CPrintToChatAll("Игрок \x03%s \x01заходит на сервер первый раз. Поприветствуем его! :)",sClientName);
C-подобный:
public OnLibraryAdded(const String:name[])
{
	if (StrEqual(name, "rankme"))
	{
		LogMessage("RankMe Loaded.  Plugin is working.");	
	}
}

public OnLibraryRemoved(const String:name[])
{
	if (StrEqual(name, "rankme"))
	{
		LogError("RankMe Unloaded.  Plugin won't work.");	
	}
}

public Action:RankMe_OnPlayerLoaded(client)
{
	if(!g_bAnnounceConnect && !g_bAnnounceTopConnect)
		return Plugin_Handled;

	RankMe_GetRank(client,RankConnectCallback);
	return Plugin_Continue;
}

public RankConnectCallback(client, rank, any:data)
{	
	g_aPointsOnConnect[client] = RankMe_GetPoints(client);	
	g_aRankOnConnect[client] = rank;
	new String:sClientName[MAX_NAME_LENGTH];
	GetClientName(client,sClientName,sizeof(sClientName));
	if(g_bAnnounceConnect)
	{
		if(g_bAnnounceConnectCenter)
		{		
			PrintCenterTextAll("%t","PlayerJoinedCenterHint",sClientName,g_aRankOnConnect[client],g_aPointsOnConnect[client]);	
		}
		if(g_bAnnounceConnectChat)
		{
			CPrintToChatAll("*{lightgreen}%s\x01*\x0B [Ранк \x05%d\x0B : Очков \x05%d\x0B] \x08подключается.",sClientName,g_aRankOnConnect[client],g_aPointsOnConnect[client]);
		}
		if(g_bAnnounceConnectHint)
		{
			PrintHintTextToAll("%t","PlayerJoinedCenterHint",sClientName,g_aRankOnConnect[client],g_aPointsOnConnect[client]);	
		}
	}
	if(g_bAnnounceTopConnect && rank <= g_AnnounceTopPosConnect)
	{
		if(g_bAnnounceTopConnectCenter)
		{
			PrintCenterTextAll("%t","TopPlayerJoinedCenterHint",g_AnnounceTopPosConnect,sClientName,g_aRankOnConnect[client]);	
		}
		
		if(g_bAnnounceTopConnectChat)
		{
			CPrintToChatAll("[\x0ETop{green}%d\x01] \x0Eигрок {lightgreen}%s{default} \x0Eподключился. [Ранк {lightgreen}%d\x0E]",g_AnnounceTopPosConnect,sClientName,g_aRankOnConnect[client]);	
		}
		
		if(g_bAnnounceTopConnectHint)
		{
			PrintHintTextToAll("%t","TopPlayerJoinedCenterHint",g_AnnounceTopPosConnect,sClientName,g_aRankOnConnect[client]);	
		}
	}
}

public OnClientDisconnect(client)
{
	if(!g_bAnnounceDisconnect)
		return;
		
	new String:sName[MAX_NAME_LENGTH];
	GetClientName(client,sName,MAX_NAME_LENGTH);
	strcopy(g_sBufferClientName[client],MAX_NAME_LENGTH,sName);	
	g_aPointsOnDisconnect[client] = RankMe_GetPoints(client);
	RankMe_GetRank(client,RankDisconnectCallback);
}

public RankDisconnectCallback(client, rank, any:data)
{	
	if(g_bAnnounceDisconnect)
{			
		CPrintToChatAll("Игрок \x03%s \x01остоединился. Надеемся он еще вернётся",g_sBufferClientName[client]);		
	}
	return;
}

public Action:player_connect(Handle:event, const String:name[], bool:silent)
{
	if (!GetConVarBool(msg_player_connect)) return Plugin_Handled;
	return Plugin_Continue;
}

public Action:player_disconnect(Handle:event, const String:name[], bool:silent)
{
	if (!GetConVarBool(msg_player_disconnect)) return Plugin_Handled;
	return Plugin_Continue;
}

public Action:player_team(Handle:event, const String:name[], bool:silent)
{
	if (!GetConVarBool(msg_player_team)) return Plugin_Handled;
	return Plugin_Continue;
}
Сам долго мучался, так и ничего не получилось.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
CPrintToChatAll("Игрок \x03%s \x01заходит на сервер первый раз. Поприветствуем его! ",sClientName);
Попробуй вписать это в
PHP:
public RankConnectCallback(client, rank, any:data)
{
    //Вписать.
}
В первой или последней строчке RankConnectCallback Оффтоп. Если нет сообщения, значит сам вызов делается только с условием
входит в статистику
 

Kruzi

Участник
Сообщения
153
Реакции
20
Попробуй вписать это в
PHP:
public RankConnectCallback(client, rank, any:data)
{
    //Вписать.
}
В первой или последней строчке RankConnectCallback Оффтоп. Если нет сообщения, значит сам вызов делается только с условием
Сделал как ты сказал. Теперь выводит сообщение о том что игрок подключается на сервер первый раз всем, кто есть в статистике.
Ещё заметил, если игрока нет в статистике о дисконекте сообщения тоже нет.

Так как сделать чтобы пока игрока нет в статистике, писало о том что он заходит впервые?

Возможно можно сделать проверку на то какой у игрока ранк. Вот только какое значение будет если ранка нет? 0?
Ну или предложите, пожалуйста ваши идеи. Очень хочу сделать такую мелочь)
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
кто есть в статистике
Значит, в этой функции никак.
Сделать отдельную функцию, типа:
PHP:
public OnPluginStart() HookEvent("player_activate", Event_PlayerActivate);

public Event_PlayerActivate(Handle:event, String:name[], bool:dontBroadcast)
{
	new client = GetClientOfUserId(GetEventInt(event, "userid"));
	if(client && IsFakeClient(client) == false && ЗдесьПроверкаРанка(client))
	{
		for(new i=1; i<=MaxClients; i++)
		{
			if(IsClientInGame(i)) PrintToChat(i, "Игрок \x03%N \x01заходит на сервер первый раз. Поприветствуем его!",client);
		}
	}
}
Нативы RankMe не смотрел.
 

Kruzi

Участник
Сообщения
153
Реакции
20
Значит, в этой функции никак.Сделать отдельную функцию, типа:
PHP:
public OnPluginStart() HookEvent("player_activate", Event_PlayerActivate);

public Event_PlayerActivate(Handle:event, String:name[], bool:dontBroadcast)
{
	new client = GetClientOfUserId(GetEventInt(event, "userid"));
	if(client && IsFakeClient(client) == false && ЗдесьПроверкаРанка(client))
	{
		for(new i=1; i<=MaxClients; i++)
		{
			if(IsClientInGame(i)) PrintToChat(i, "Игрок \x03%N \x01заходит на сервер первый раз. Поприветствуем его!",client);
		}
	}
}
Нативы RankMe не смотрел.
C-подобный:
/*********************************************************
 * Give point(s) to a player on the server
 *
 * @param client	The client index of the player to receive the points
 * @param points		Points to be given to the player
 * @param reason	The reason to be given the points
 * @param printtoplayer	Print the change to the player
 * @param printtoall	Print the change to the everyone
 * @noreturn		
 *********************************************************/
native RankMe_GivePoint(client,points,String:reason[],printtoplayer,printtoall);

/*********************************************************
 * Get rank of a player on the server
 *
 * @param client	The client index of the player to get the rank
 * @param callback	The return Callback
 * @param data	Any data you would like that return on the callback
 * @noreturn		
 *********************************************************/
native RankMe_GetRank(client,RankCallback:callback,any:data=0);

/*********************************************************
 * Get the score (points) of a player on the server
 *
 * @param client	The client index of the player to get the rank
 * @param data	Any data you would like that return on the callback
 * @return		The score of the client
 *********************************************************/
native RankMe_GetPoints(client);

/*********************************************************
 * Get stats of a player on the server
 *
 * @param client	The client index of the player to get the stats
 * @param stats_return	The array that will return the data following the ENUM STATS_NAME;
 * @noreturn		
 *********************************************************/
native RankMe_GetStats(client,stats_return[STATS_NAMES]);

/*********************************************************
 * Get session of a player on the server
 *
 * @param client	The client index of the player to get the session
 * @param session_return	The array that will return the data following the ENUM STATS_NAME;
 * @noreturn		
 *********************************************************/
native RankMe_GetSession(client,session_return[STATS_NAMES]);

/*********************************************************
 * Get weapon stats of a player on the server
 *
 * @param client	The client index of the player to get the session
 * @param session_return	The array that will return the data following the ENUM WEAPONS_ENUM;
 * @noreturn		
 *********************************************************/
native RankMe_GetWeaponStats(client,weapons_return[WEAPONS_ENUM]);

/*********************************************************
 * Get hitbox stats of a player on the server
 *
 * @param client	The client index of the player to get the session
 * @param session_return	The array that will return the data following the ENUM HITBOXES;
 * @noreturn		
 *********************************************************/
native RankMe_GetHitbox(client,hitbox_return[HITBOXES]);

/**********************************************************************
 * When a player has been loaded
 * *
 * @param         client        The client index of the player that has been loaded
 * @noreturn
 **********************************************************************/
forward Action:RankMe_OnPlayerLoaded(client);

/**********************************************************************
 * When a player has been saved
 * *
 * @param         client        The client index of the player that has been saved
 * @noreturn
 **********************************************************************/
forward Action:RankMe_OnPlayerSaved(client);
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Kruzi, не вижу подходящего натива. Попробуй так дописать:
PHP:
public OnClientPostAdminCheck(client)
{ 
    if(IsFakeClient(client) == false && RankMe_GetPoints(client) == 0) 
    { 
        for(new i=1; i<=MaxClients; i++) 
        { 
            if(IsClientInGame(i)) PrintToChat(i, "Игрок \x03%N \x01заходит на сервер первый раз. Поприветствуем его!", client); 
        } 
    } 
}
Код вписать с новой строчки в самом конце плагина, например.
 
Последнее редактирование:

Kruzi

Участник
Сообщения
153
Реакции
20
AlmazON, пишет ещё сообщение о том что заходит новый игрок даже уже тем кто есть в статистике, как только они подключаются. А дальше когда они уже зашли полностью на сервер пишет что Игрок подключился [66rank|6666point's]
Я мало что понимаю в SourcePawn, но думаю что если бы как-то можно было присвоить значение RankMe_GetRank(client,RankConnectCallback) = 1 если игрок есть в бд, то мою идею можно будет реализовать.
public Action:RankMe_OnPlayerLoaded(client)
{
if(!g_bAnnounceConnect && !g_bAnnounceTopConnect)
return Plugin_Handled;

RankMe_GetRank(client,RankConnectCallback);
return Plugin_Continue;
}
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Сверху Снизу