Rankme Connect Anounser

Тема в разделе "Counter-Strike: Global Offensive", создана пользователем Kruzi, 31 мар 2015.

  1. Kruzi

    Kruzi

    Сообщения:
    160
    Симпатии:
    2
    Когда кто-то заходит пишет что он подключается только в том случае, если он входит в статистику rankme. Как можно сделать чтобы писало что игрок, который не входит в статистику заходит на сервер первый раз?
    Код:
    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;
    }
    Сам долго мучался, так и ничего не получилось.
     
  2. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.579
    Симпатии:
    1.989
    Попробуй вписать это в
    PHP:
    public RankConnectCallback(clientrankany:data)
    {
        
    //Вписать.
    }
    В первой или последней строчке RankConnectCallback Оффтоп . Если нет сообщения, значит сам вызов делается только с условием
     
  3. Kruzi

    Kruzi

    Сообщения:
    160
    Симпатии:
    2
    Сделал как ты сказал. Теперь выводит сообщение о том что игрок подключается на сервер первый раз всем, кто есть в статистике.
    Ещё заметил, если игрока нет в статистике о дисконекте сообщения тоже нет.

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

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

    AlmazON деревянный © yand3xmail

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

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

    Kruzi

    Сообщения:
    160
    Симпатии:
    2
    Код:
    /*********************************************************
     * 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);
     
  6. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.579
    Симпатии:
    1.989
    Kruzi, не вижу подходящего натива. Попробуй так дописать:
    PHP:
    public OnClientPostAdminCheck(client)

        if(
    IsFakeClient(client) == false && RankMe_GetPoints(client) == 0
        { 
            for(new 
    i=1i<=MaxClientsi++) 
            { 
                if(
    IsClientInGame(i)) PrintToChat(i"Игрок \x03%N \x01заходит на сервер первый раз. Поприветствуем его!"client); 
            } 
        } 
    }
    Код вписать с новой строчки в самом конце плагина, например.
     
    Последнее редактирование: 17 апр 2015
    Kruzi нравится это.
  7. Kruzi

    Kruzi

    Сообщения:
    160
    Симпатии:
    2
    AlmazON, не работает :(
     
  8. Kruzi

    Kruzi

    Сообщения:
    160
    Симпатии:
    2
    AlmazON, пишет ещё сообщение о том что заходит новый игрок даже уже тем кто есть в статистике, как только они подключаются. А дальше когда они уже зашли полностью на сервер пишет что Игрок подключился [66rank|6666point's]
    Я мало что понимаю в SourcePawn, но думаю что если бы как-то можно было присвоить значение RankMe_GetRank(client,RankConnectCallback) = 1 если игрок есть в бд, то мою идею можно будет реализовать.
     
  9. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.579
    Симпатии:
    1.989
    Тогда получается, что вызываем натив слишком рано и у всех по нулям.
    Поправил.