[CSGO] Показ следующей карты в меню "TAB" (только перед сменой карты)

Yura7181

Участник
Сообщения
678
Реакции
594
Всем привет.

На одном сервере я видел очень удобную возможность показать игрокам какая карта будет следущей (перед сменой карты) я бы хотел узнать как это сделать. Может быть без плагина это возможно (как в казуальном лобби). В таблице счёта сверху (Смена на ......).

Отвечает за это команда nextlevel если я не ошибаюсь.

Скриншот:

20160809212556_122_zpsvvjevhub.jpg


Альтернативный скрин:
Dropbox - 20160809212556_122.jpg


Так же у меня есть плагин выводящий только в чат какая карта будет следующей после завершения последнего раунда когда выводится табличка очков.

Плагин:
PHP:
/**
* ==========================================================================
* SourceMod Show The Right Next Map for CS:GO
*
* by PharaohsPaw
*
* SourceMod Forums Plugin Thread URL:
* http://forums.alliedmods.net/showthread.php?t=195384
*
* A relatively simple plugin which intercepts and blocks CS:GO's own
* "Next Map: <blah>" message it always shows at map end, and prints a
* message that shows what *SOURCEMOD* thinks the next map is going to be
* instead (since Sourcemod is right).
*
* Especially useful when a server is using SourceMod-based map voting and
* "valve" map voting has been disabled, and possibly other situations.
*
* Without this plugin, CS:GO's own Next Map: message at map end will show
* whatever map is listed next in the configured mapcyclefile -- yes, that's
* right -- the configured mapcyclefile, not the next map in the mapgroup the
* server is currently running.  So if a different map was voted in by a
* Sourcemod voting plugin, or otherwise changed by Sourcemod, the Next Map:
* message at the end of the map will show the wrong map name.  Even though
* the server WILL correctly change the map to the one that got voted in.
*
* Hopefully this plugin will not even be necessary for long, but until this
* is no longer a problem, here's a solution.
*
* CREDITS
* Thanks to Psychonic for providing the event to hook and data to search for
* to make this possible.
*
*/

#pragma semicolon 1
#include <sourcemod>
#include <csgo_colors>

#define PLUGIN_VERSION "1.0.3"

new UserMsg:g_TextMsg;
new String:SMNextMap[64];

public Plugin:myinfo =
{
    name = "CS:GO - Show The Right Next Map (STRNM)",
    author = "PharaohsPaw",
    description = "Replace CS:GO's end of map chat msg with what SM says the next map will be",
    version = PLUGIN_VERSION,
    url = "http://forums.alliedmods.net/showthread.php?t=195384"
}


public OnPluginStart()
{
    g_TextMsg = GetUserMessageId("TextMsg");
    HookUserMessage(g_TextMsg, pReplaceNextMapMsg, true);
    // public CVAR so we can tell how many servers are using this plugin and what version
    CreateConVar("csgo_strnm_version", PLUGIN_VERSION, "CSGO STRNM Plugin Version", FCVAR_PLUGIN|FCVAR_NOTIFY|FCVAR_SPONLY);
}

public Action:pReplaceNextMapMsg(UserMsg:msg_id, Handle:pb, const players[], playersNum, bool:reliable, bool:init)
{
    // message original?
    if (!reliable)
        return Plugin_Continue;
    decl String:message[256];
    PbReadString(pb, "params", message, sizeof(message), 0);
    if (StrContains(message, "#game_nextmap") != -1)
    {
        // Get SM's Next Map
        if ( GetNextMap(SMNextMap, sizeof(SMNextMap)) )
        {
            // Iterate through players, send real players a correct next map message
            for ( new i = 0; i < playersNum; i++ )
            {
                if ( !IsClientInGame(players[i]) || IsFakeClient(players[i]) )
                    continue;
                // we can't PrintToChat() from a usermsg hook, it would create
                // an endless loop if it allowed it, so create a timer instead
                else
                    CreateTimer(0.1, pPrintNextMap, players[i]);
            }
        }
        else    // GetNextMap call failed
            PrintToServer("[csgo_strnm] GetNextMap() call failed :(");
        return Plugin_Handled;
    }
    else
        return Plugin_Continue;
}

public Action:pPrintNextMap(Handle:timer, any:client)
{
    if(IsClientInGame(client))
        CGOPrintToChat(client, "\x02[SM] \x01СЛЕДУЮЩАЯ КАРТА: \x04%s", SMNextMap);
}

Интересно:
Ещё я заметил если напишу в консоль sm_cvar nextlevel PRIVET_HLMOD.RU
Фраза так и будет в конце карты игрокам выводится:

20160811104422_1_zpscllz7k0u.jpg


Альтернативный скрин:

Dropbox - 20160811104422_1.jpg

На скриншоте выше в чате вы можете видеть как плагин уже стоящий на сервере показывает в чате какая сл. карта будет (но в чате бывает много сообщений и игроки не всегда успевают посмотреть какая карта будет следующей).

Заранее спасибо.
 
Последнее редактирование:

komashchenko

Идиот
Сообщения
916
Реакции
2,569
PHP:
ConVar nextlevel;

public void OnPluginStart()
{
    nextlevel = FindConVar("nextlevel");
    HookConVarChange(FindConVar("sm_nextmap"), ConVarChanged);
}

public void ConVarChanged(ConVar convar, const char[] oldValue, const char[] newValue)
{
    nextlevel.SetString(newValue, _, false);
}
 

Yura7181

Участник
Сообщения
678
Реакции
594

wayLANder

Где AlmazON?
Сообщения
1,742
Реакции
577
PHP:
ConVar nextlevel;

public void OnPluginStart()
{
    nextlevel = FindConVar("nextlevel");
    HookConVarChange(FindConVar("sm_nextmap"), ConVarChanged);
}

public void ConVarChanged(ConVar convar, const char[] oldValue, const char[] newValue)
{
    nextlevel.SetString(newValue, _, false);
}
У меня почему-то не компилится, ни на сайте соурсмода, ни на см 1.8 :(
Лог онлайн-компила:
SourcePawn Compiler 1.7.1
Copyright (c) 1997-2006 ITB CompuPhase
Copyright (c) 2004-2014 AlliedModders LLC

/groups/sourcemod/upload_tmp/text7pxUVz.sp(1) : error 021: symbol already defined: "ConVar"
/groups/sourcemod/upload_tmp/text7pxUVz.sp(3) : error 122: expected type expression
/groups/sourcemod/upload_tmp/text7pxUVz.sp(9) : error 122: expected type expression

3 Errors.

Можете готовый плагин скинуть?:)
 
Сверху Снизу