CShowActivity2

KENEZEZ

Участник
Сообщения
43
Реакции
3
Здравствуйте, любезнейшие!
У меня к вам огромная просьба в помощи мне, я уже на на протяжение двух-трёх часов с этим мучаюсь, я уже не представляю что можно тут сделать.
В общем, решил я в стандартных плагинах сменить цвет сообщений в чате, и вроде-бы все хорошо, все компилируется но выдает мне что-то сверхразумное.

Что я редактировал?
basecommands
C-подобный:
/**
 * vim: set ts=4 :
 * =============================================================================
 * SourceMod Basic Commands Plugin
 * Implements basic admin commands.
 *
 * SourceMod (C)2004-2008 AlliedModders LLC.  All rights reserved.
 * =============================================================================
 *
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License, version 3.0, as published by the
 * Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * As a special exception, AlliedModders LLC gives you permission to link the
 * code of this program (as well as its derivative 1works) to "Half-Life 2," the
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
 * by the Valve Corporation.  You must obey the GNU General Public License in
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
 * this exception to all derivative works.  AlliedModders LLC defines further
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
 * or <http://www.sourcemod.net/license.php>.
 *
 * Version: $Id$
 */

#pragma semicolon 1

#include <sourcemod>
#undef REQUIRE_PLUGIN
#include <adminmenu>
#include <morecolors>

#pragma newdecls required

public Plugin myinfo =
{
    name = "Basic Commands",
    author = "AlliedModders LLC",
    description = "Basic Admin Commands",
    version = SOURCEMOD_VERSION,
    url = "http://www.sourcemod.net/"
};

TopMenu hTopMenu;

Menu g_MapList;
StringMap g_ProtectedVars;

#include "basecommands/kick.sp"
#include "basecommands/reloadadmins.sp"
#include "basecommands/cancelvote.sp"
#include "basecommands/who.sp"
#include "basecommands/map.sp"
#include "basecommands/execcfg.sp"

public void OnPluginStart()
{
    LoadTranslations("common.phrases");
    LoadTranslations("plugin.basecommands");

    RegAdminCmd("sm_kick", Command_Kick, ADMFLAG_KICK, "sm_kick <#userid|name> [reason]");
    RegAdminCmd("sm_map", Command_Map, ADMFLAG_CHANGEMAP, "sm_map <map>");
    RegAdminCmd("sm_rcon", Command_Rcon, ADMFLAG_RCON, "sm_rcon <args>");
    RegAdminCmd("sm_cvar", Command_Cvar, ADMFLAG_CONVARS, "sm_cvar <cvar> [value]");
    RegAdminCmd("sm_resetcvar", Command_ResetCvar, ADMFLAG_CONVARS, "sm_resetcvar <cvar>");
    RegAdminCmd("sm_execcfg", Command_ExecCfg, ADMFLAG_CONFIG, "sm_execcfg <filename>");
    RegAdminCmd("sm_who", Command_Who, ADMFLAG_GENERIC, "sm_who [#userid|name]");
    RegAdminCmd("sm_reloadadmins", Command_ReloadAdmins, ADMFLAG_BAN, "sm_reloadadmins");
    RegAdminCmd("sm_cancelvote", Command_CancelVote, ADMFLAG_VOTE, "sm_cancelvote");
    RegConsoleCmd("sm_revote", Command_ReVote);
   
    /* Account for late loading */
    TopMenu topmenu;
    if (LibraryExists("adminmenu") && ((topmenu = GetAdminTopMenu()) != null))
    {
        OnAdminMenuReady(topmenu);
    }
   
    g_MapList = new Menu(MenuHandler_ChangeMap, MenuAction_Display);
    g_MapList.SetTitle("%T", "Please select a map", LANG_SERVER);
    g_MapList.ExitBackButton = true;
   
    char mapListPath[PLATFORM_MAX_PATH];
    BuildPath(Path_SM, mapListPath, sizeof(mapListPath), "configs/adminmenu_maplist.ini");
    SetMapListCompatBind("sm_map menu", mapListPath);
   
    g_ProtectedVars = new StringMap();
    ProtectVar("rcon_password");
    ProtectVar("sm_show_activity");
    ProtectVar("sm_immunity_mode");
}

public void OnMapStart()
{
    ParseConfigs();
}

public void OnConfigsExecuted()
{
    LoadMapList(g_MapList);
}

void ProtectVar(const char[] cvar)
{
    g_ProtectedVars.SetValue(cvar, 1);
}

bool IsVarProtected(const char[] cvar)
{
    int dummy_value;
    return g_ProtectedVars.GetValue(cvar, dummy_value);
}

bool IsClientAllowedToChangeCvar(int client, const char[] cvarname)
{
    ConVar hndl = FindConVar(cvarname);

    bool allowed = false;
    int client_flags = client == 0 ? ADMFLAG_ROOT : GetUserFlagBits(client);
   
    if (client_flags & ADMFLAG_ROOT)
    {
        allowed = true;
    }
    else
    {
        if (hndl.Flags & FCVAR_PROTECTED)
        {
            allowed = ((client_flags & ADMFLAG_PASSWORD) == ADMFLAG_PASSWORD);
        }
        else if (StrEqual(cvarname, "sv_cheats"))
        {
            allowed = ((client_flags & ADMFLAG_CHEATS) == ADMFLAG_CHEATS);
        }
        else if (!IsVarProtected(cvarname))
        {
            allowed = true;
        }
    }

    return allowed;
}

public void OnAdminMenuReady(Handle aTopMenu)
{
    TopMenu topmenu = TopMenu.FromHandle(aTopMenu);

    /* Block us from being called twice */
    if (topmenu == hTopMenu)
    {
        return;
    }
   
    /* Save the Handle */
    hTopMenu = topmenu;
   
    /* Build the "Player Commands" category */
    TopMenuObject player_commands = hTopMenu.FindCategory(ADMINMENU_PLAYERCOMMANDS);
   
    if (player_commands != INVALID_TOPMENUOBJECT)
    {
        hTopMenu.AddItem("sm_kick", AdminMenu_Kick, player_commands, "sm_kick", ADMFLAG_KICK);
        hTopMenu.AddItem("sm_who", AdminMenu_Who, player_commands, "sm_who", ADMFLAG_GENERIC);
    }

    TopMenuObject server_commands = hTopMenu.FindCategory(ADMINMENU_SERVERCOMMANDS);

    if (server_commands != INVALID_TOPMENUOBJECT)
    {
        hTopMenu.AddItem("sm_reloadadmins", AdminMenu_ReloadAdmins, server_commands, "sm_reloadadmins", ADMFLAG_BAN);
        hTopMenu.AddItem("sm_map", AdminMenu_Map, server_commands, "sm_map", ADMFLAG_CHANGEMAP);
        hTopMenu.AddItem("sm_execcfg", AdminMenu_ExecCFG, server_commands, "sm_execcfg", ADMFLAG_CONFIG);      
    }

    TopMenuObject voting_commands = hTopMenu.FindCategory(ADMINMENU_VOTINGCOMMANDS);

    if (voting_commands != INVALID_TOPMENUOBJECT)
    {
        hTopMenu.AddItem("sm_cancelvote", AdminMenu_CancelVote, voting_commands, "sm_cancelvote", ADMFLAG_VOTE);
    }
}

public void OnLibraryRemoved(const char[] name)
{
    if (strcmp(name, "adminmenu") == 0)
    {
        hTopMenu = null;
    }
}

#define FLAG_STRINGS        14
char g_FlagNames[FLAG_STRINGS][20] =
{
    "res",
    "admin",
    "kick",
    "ban",
    "unban",
    "slay",
    "map",
    "cvars",
    "cfg",
    "chat",
    "vote",
    "pass",
    "rcon",
    "cheat"
};

int CustomFlagsToString(char[] buffer, int maxlength, int flags)
{
    char joins[6][6];
    int total;
   
    for (int i=view_as<int>(Admin_Custom1); i<=view_as<int>(Admin_Custom6); i++)
    {
        if (flags & (1<<i))
        {
            IntToString(i - view_as<int>(Admin_Custom1) + 1, joins[total++], 6);
        }
    }
   
    ImplodeStrings(joins, total, ",", buffer, maxlength);
   
    return total;
}

void FlagsToString(char[] buffer, int maxlength, int flags)
{
    char joins[FLAG_STRINGS+1][32];
    int total;

    for (int i=0; i<FLAG_STRINGS; i++)
    {
        if (flags & (1<<i))
        {
            strcopy(joins[total++], 32, g_FlagNames[i]);
        }
    }
   
    char custom_flags[32];
    if (CustomFlagsToString(custom_flags, sizeof(custom_flags), flags))
    {
        Format(joins[total++], 32, "custom(%s)", custom_flags);
    }

    ImplodeStrings(joins, total, ", ", buffer, maxlength);
}

public Action Command_Cvar(int client, int args)
{
    if (args < 1)
    {
        if (client == 0)
        {
            ReplyToCommand(client, "[SM] Usage: sm_cvar <cvar|protect> [value]");
        }
        else
        {
            ReplyToCommand(client, "[SM] Usage: sm_cvar <cvar> [value]");
        }
        return Plugin_Handled;
    }

    char cvarname[64];
    GetCmdArg(1, cvarname, sizeof(cvarname));
   
    if (client == 0 && StrEqual(cvarname, "protect"))
    {
        if (args < 2)
        {
            ReplyToCommand(client, "[SM] Usage: sm_cvar <protect> <cvar>");
            return Plugin_Handled;
        }
        GetCmdArg(2, cvarname, sizeof(cvarname));
        ProtectVar(cvarname);
        ReplyToCommand(client, "[SM] %t", "Cvar is now protected", cvarname);
        return Plugin_Handled;
    }

    ConVar hndl = FindConVar(cvarname);
    if (hndl == null)
    {
        ReplyToCommand(client, "[SM] %t", "Unable to find cvar", cvarname);
        return Plugin_Handled;
    }

    if (!IsClientAllowedToChangeCvar(client, cvarname))
    {
        ReplyToCommand(client, "[SM] %t", "No access to cvar");
        return Plugin_Handled;
    }

    char value[255];
    if (args < 2)
    {
        hndl.GetString(value, sizeof(value));

        ReplyToCommand(client, "[SM] %t", "Value of cvar", cvarname, value);
        return Plugin_Handled;
    }

    GetCmdArg(2, value, sizeof(value));
   
    // The server passes the values of these directly into ServerCommand, following exec. Sanitize.
    if (StrEqual(cvarname, "servercfgfile", false) || StrEqual(cvarname, "lservercfgfile", false))
    {
        int pos = StrContains(value, ";", true);
        if (pos != -1)
        {
            value[pos] = '\0';
        }
    }

    if ((hndl.Flags & FCVAR_PROTECTED) != FCVAR_PROTECTED)
    {
        ShowActivity2(client, "[SM] ", "%t", "Cvar changed", cvarname, value);
    }
    else
    {
        ReplyToCommand(client, "[SM] %t", "Cvar changed", cvarname, value);
    }

    LogAction(client, -1, "\"%L\" changed cvar (cvar \"%s\") (value \"%s\")", client, cvarname, value);

    hndl.SetString(value, true);

    return Plugin_Handled;
}

public Action Command_ResetCvar(int client, int args)
{
    if (args < 1)
    {
        ReplyToCommand(client, "[SM] Usage: sm_resetcvar <cvar>");

        return Plugin_Handled;
    }

    char cvarname[64];
    GetCmdArg(1, cvarname, sizeof(cvarname));
   
    ConVar hndl = FindConVar(cvarname);
    if (hndl == null)
    {
        ReplyToCommand(client, "[SM] %t", "Unable to find cvar", cvarname);
        return Plugin_Handled;
    }
   
    if (!IsClientAllowedToChangeCvar(client, cvarname))
    {
        ReplyToCommand(client, "[SM] %t", "No access to cvar");
        return Plugin_Handled;
    }

    hndl.RestoreDefault();

    char value[255];
    hndl.GetString(value, sizeof(value));

    if ((hndl.Flags & FCVAR_PROTECTED) != FCVAR_PROTECTED)
    {
        ShowActivity2(client, "[SM] ", "%t", "Cvar changed", cvarname, value);
    }
    else
    {
        ReplyToCommand(client, "[SM] %t", "Cvar changed", cvarname, value);
    }

    LogAction(client, -1, "\"%L\" reset cvar (cvar \"%s\") (value \"%s\")", client, cvarname, value);

    return Plugin_Handled;
}

public Action Command_Rcon(int client, int args)
{
    if (args < 1)
    {
        ReplyToCommand(client, "[SM] Usage: sm_rcon <args>");
        return Plugin_Handled;
    }

    char argstring[255];
    GetCmdArgString(argstring, sizeof(argstring));

    LogAction(client, -1, "\"%L\" console command (cmdline \"%s\")", client, argstring);

    if (client == 0) // They will already see the response in the console.
    {
        ServerCommand("%s", argstring);
    }
    else
    {
        char responseBuffer[4096];
        ServerCommandEx(responseBuffer, sizeof(responseBuffer), "%s", argstring);
        if (IsClientConnected(client))
        {
            ReplyToCommand(client, responseBuffer);
        }
    }

    return Plugin_Handled;
}

public Action Command_ReVote(int client, int args)
{
    if (client == 0)
    {
        ReplyToCommand(client, "[SM] %t", "Command is in-game only");
        return Plugin_Handled;
    }
   
    if (!IsVoteInProgress())
    {
        ReplyToCommand(client, "[SM] %t", "Vote Not In Progress");
        return Plugin_Handled;
    }
   
    if (!IsClientInVotePool(client))
    {
        ReplyToCommand(client, "[SM] %t", "Cannot participate in vote");
        return Plugin_Handled;
    }
   
    if (!RedrawClientVoteMenu(client))
    {
        ReplyToCommand(client, "[SM] %t", "Cannot change vote");
    }
   
    return Plugin_Handled;
}

Добавил я туда только это:
C-подобный:
#include <morecolors>

Так-же, редактировал я map.sp в scripting\basecommands
C-подобный:
/**
 * vim: set ts=4 :
 * =============================================================================
 * SourceMod Basecommands Plugin
 * Provides map functionality
 *
 * SourceMod (C)2004-2008 AlliedModders LLC.  All rights reserved.
 * =============================================================================
 *
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License, version 3.0, as published by the
 * Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * As a special exception, AlliedModders LLC gives you permission to link the
 * code of this program (as well as its derivative works) to "Half-Life 2," the
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
 * by the Valve Corporation.  You must obey the GNU General Public License in
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
 * this exception to all derivative works.  AlliedModders LLC defines further
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
 * or <http://www.sourcemod.net/license.php>.
 *
 * Version: $Id$
 */
 
public int MenuHandler_ChangeMap(Menu menu, MenuAction action, int param1, int param2)
{
    if (action == MenuAction_Cancel)
    {
        if (param2 == MenuCancel_ExitBack && hTopMenu)
        {
            hTopMenu.Display(param1, TopMenuPosition_LastCategory);
        }
    }
    else if (action == MenuAction_Select)
    {
        char map[PLATFORM_MAX_PATH];
       
        menu.GetItem(param2, map, sizeof(map));
   
        CShowActivity2(param1, "[{cyan}CS-RUSH.FUN] ", "%t", "Changing map", map);

        LogAction(param1, -1, "\"%L\" changed map to \"%s\"", param1, map);

        DataPack dp;
        CreateDataTimer(3.0, Timer_ChangeMap, dp);
        dp.WriteString(map);
    }
    else if (action == MenuAction_Display)
    {
        char title[128];
        Format(title, sizeof(title), "%T", "Please select a map", param1);

        Panel panel = view_as<Panel>(param2);
        panel.SetTitle(title);
    }
}

public void AdminMenu_Map(TopMenu topmenu,
                              TopMenuAction action,
                              TopMenuObject object_id,
                              int param,
                              char[] buffer,
                              int maxlength)
{
    if (action == TopMenuAction_DisplayOption)
    {
        Format(buffer, maxlength, "%T", "Choose Map", param);
    }
    else if (action == TopMenuAction_SelectOption)
    {
        g_MapList.Display(param, MENU_TIME_FOREVER);
    }
}

public Action Command_Map(int client, int args)
{
    if (args < 1)
    {
        if ((GetCmdReplySource() == SM_REPLY_TO_CHAT) && (client != 0))
        {
            g_MapList.SetTitle("%T", "Choose Map", client);
            g_MapList.Display(client, MENU_TIME_FOREVER);
        }
        else
        {
            ReplyToCommand(client, "[SM] Usage: sm_map <map>");
        }
        return Plugin_Handled;
    }

    char map[PLATFORM_MAX_PATH];
    char displayName[PLATFORM_MAX_PATH];
    GetCmdArg(1, map, sizeof(map));

    if (FindMap(map, displayName, sizeof(displayName)) == FindMap_NotFound)
    {
        ReplyToCommand(client, "[SM] %t", "Map was not found", map);
        return Plugin_Handled;
    }

    GetMapDisplayName(displayName, displayName, sizeof(displayName));

    CShowActivity2(client, "[{cyan}CS-RUSH.FUN]", "%t", "Changing map", displayName);
    LogAction(client, -1, "\"%L\" changed map to \"%s\"", client, map);

    DataPack dp;
    CreateDataTimer(3.0, Timer_ChangeMap, dp);
    dp.WriteString(map);

    return Plugin_Handled;
}

public Action Timer_ChangeMap(Handle timer, DataPack dp)
{
    char map[PLATFORM_MAX_PATH];

    dp.Reset();
    dp.ReadString(map, sizeof(map));

    ForceChangeLevel(map, "sm_map Command");

    return Plugin_Stop;
}

Handle g_map_array = null;
int g_map_serial = -1;

int LoadMapList(Menu menu)
{
    Handle map_array;
   
    if ((map_array = ReadMapList(g_map_array,
            g_map_serial,
            "sm_map menu",
            MAPLIST_FLAG_CLEARARRAY|MAPLIST_FLAG_MAPSFOLDER))
        != null)
    {
        g_map_array = map_array;
    }
   
    if (g_map_array == null)
    {
        return 0;
    }
   
    menu.RemoveAllItems();
   
    char map_name[PLATFORM_MAX_PATH];
    int map_count = GetArraySize(g_map_array);
   
    for (int i = 0; i < map_count; i++)
    {
        char displayName[PLATFORM_MAX_PATH];
        GetArrayString(g_map_array, i, map_name, sizeof(map_name));
        GetMapDisplayName(map_name, displayName, sizeof(displayName));
        menu.AddItem(map_name, displayName);
    }
   
    return map_count;
}

Изменил я там это:

C-подобный:
CShowActivity2(param1, "[{cyan}CS-RUSH.FUN] ", "%t", "Changing map", map);

И в конечном итоге мне выдает это:
777.jpg

Что не так я делаю? Максимально убедительная просьба помочь с этим..
 

Вложения

  • basecommands.sp
    11.2 КБ · Просмотры: 2
  • map.sp
    4.6 КБ · Просмотры: 3

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #2
В CS:GO morecolors не работал никогда. Тут только csgocolors, но он без поддержки ShowActivity2 функций.
Попробуйте multicolors
 

KENEZEZ

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

Вложения

  • 20220224203323_1.jpg
    20220224203323_1.jpg
    19.8 КБ · Просмотры: 24
Последнее редактирование:

KENEZEZ

Участник
Сообщения
43
Реакции
3
@KENEZEZ, CShowActivity2(param1, " [CS-RUSH.FUN\x01] ", "%t", "Changing map", map);
А если в translation необходимо тоже?
Сообщения автоматически склеены:

В CS:GO morecolors не работал никогда. Тут только csgocolors, но он без поддержки ShowActivity2 функций.
Попробуйте multicolors
Чет я потыкал, и заработало!
Только появился кружочек оранжевый, его как-то убрать можно?))
А в основном огромное спасибо.
 

Вложения

  • 667.jpg
    667.jpg
    13 КБ · Просмотры: 17
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@KENEZEZ, нет, там не прокатит: там нужно вместо \x0* вписывать соответствующий символ (как и в файлах перевода в самой ксго).
Символы можно глянуть у меня в фалах перевода для Revival.
 

Вложения

  • символы_для_раскраски_чата.txt
    515 байт · Просмотры: 6
Сверху Снизу