Не компилируется плагин

KoBboy

Участник
Сообщения
58
Реакции
1
Вот сам скрипт:
C-подобный:
/*******************************************************************************

  Advanced Rules Menu

  Version: 1.2
  Author: haN

  Description : Display Rules to clients on connection and by typing !rules
                Rules can be added from rules/cfg located at configs folder .
              
  Cvar's:      
        - sm_rules_descmode : Change Rules description mode : Set 0 to show description on a menu / Set 1 to print description to chat.
        - sm_rules_noconnect : Changes if Rules menu will be displayed on connection or not : Set 0 To display on player connection / Set 1 to NOT display on player connection .      
      
  Commands:
        - sm_rules: Type !rules to display rules menu .
        - sm_showrules: (ADMINS) Type !showrules to send rules menu to players on server .            
              
ENJOY !              

*******************************************************************************/

/////////////////////////////////////////////////////////
///////////////  INCLUDES / DEFINES
/////////////////////////////////////////////////////////

#pragma semicolon 1

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

#define VERSION "1.2"

new Handle:g_CvarDescMode = INVALID_HANDLE;
new Handle:g_CvarShowOnConnect = INVALID_HANDLE;
new Item = 0;

/////////////////////////////////////////////////////////
///////////////  PLUGIN INFO
/////////////////////////////////////////////////////////

public Plugin:myinfo =
{
    name = "Rules Plugin",
    author = "haN",
    description = "A detailed Rules plugin",
    version = VERSION,
    url = "www.sourcemod.net"
};

/////////////////////////////////////////////////////////
///////////////  ESSENTIAL FUNCTIONS
/////////////////////////////////////////////////////////

public OnPluginStart()
{
     // Register Client / Admins Commands
    RegConsoleCmd("sm_rules", RulesMenu_Func);
    RegAdminCmd("sm_showrules", ShowRules, ADMFLAG_GENERIC);
  
    g_CvarDescMode = CreateConVar("sm_rules_descmode", "0", "Set to 0 if you want description to be show on a menu ,and 1 if you want it to show on chat .");
    g_CvarShowOnConnect = CreateConVar("sm_rules_noconnect", "0", "Set to 1 If you dont want menu to show on players connection .");
  
}

/////////////////////////////////////////////////////////
///////////////  ON CLIENT CONNECTING TO SERVER SEND RULES
/////////////////////////////////////////////////////////

public OnClientPostAdminCheck(client)
{
    if (!GetConVarInt(g_CvarShowOnConnect))
    {
         CreateRulesMenu(client, 0);
    }
    return Plugin_Handled;
}

/////////////////////////////////////////////////////////
///////////////  CMD HANDLERs
/////////////////////////////////////////////////////////

public Action:RulesMenu_Func(client, args)
{
     // Function To Create the menu and send it to client
    CreateRulesMenu(client, 0);
    return Plugin_Handled;
}

public Action:ShowRules(client, args)
{
     // Send admins a list of players to send the Rules menu
    new Handle:PlayersMenu = CreateMenu(ShowRulesHandler);
    SetMenuTitle(PlayersMenu, "Send Rules To Player");
    SetMenuExitButton(PlayersMenu, true);
    AddTargetsToMenu2(PlayersMenu, client, COMMAND_FILTER_NO_BOTS|COMMAND_FILTER_CONNECTED);
    DisplayMenu(PlayersMenu, client, 15);
    return Plugin_Handled;
}

/////////////////////////////////////////////////////////
///////////////  MENUs / MENUs HANDLERs
/////////////////////////////////////////////////////////

public Action:CreateRulesMenu(client, item)
{
    new Handle:RulesMenu = CreateMenu(RulesMenuHandler);
    SetMenuTitle(RulesMenu, "Server Rules");
  
    new Handle:kv = CreateKeyValues("Rules");
    FileToKeyValues(kv, "addons/sourcemod/configs/rules.cfg");
  
      if (!KvGotoFirstSubKey(kv))
      {
            return Plugin_Continue;
      }
    
      decl String:RuleNumber[64];
      decl String:RuleName[255];
    
      do
      {
          KvGetSectionName(kv, RuleNumber, sizeof(RuleNumber));  
        KvGetString(kv, "name", RuleName, sizeof(RuleName));
         // Add Each Rule to the menu
        AddMenuItem(RulesMenu, RuleNumber, RuleName);  
    } while (KvGotoNextKey(kv));
    CloseHandle(kv);
     // Send Menu to client
    DisplayMenuAtItem(RulesMenu, client, item, 15);
  
    return Plugin_Handled;
}

public HandlerBackToMenu(Handle:menu, MenuAction:action, param1, param2)
{
    if (action == MenuAction_Select)
    {
        CreateRulesMenu(param1, Item);
    }
    else if (action == MenuAction_Cancel)
      {
            PrintToServer("Client %d's menu was cancelled.  Reason: %d", param1, param2);
      }

    else if (action == MenuAction_End)
      {
            CloseHandle(menu);
      }
}


public RulesMenuHandler(Handle:menu, MenuAction:action, param1, param2)
{
    if (action == MenuAction_Select)
    {            
        new Handle:kv = CreateKeyValues("Rules");  
        FileToKeyValues(kv, "addons/sourcemod/configs/rules.cfg");
      
        if (!KvGotoFirstSubKey(kv))
          {
                return Plugin_Handled;
          }
      
        decl String:buffer[255];
        decl String:choice[255];
        GetMenuItem(menu, param2, choice, sizeof(choice));    
      
        do
        {  
            KvGetSectionName(kv, buffer, sizeof(buffer));
            if (StrEqual(buffer, choice))
            {
                decl String:ruleName[255];
                decl String:ruleDescription[255];
                KvGetString(kv, "name", ruleName, sizeof(ruleName));
                KvGetString(kv, "description", ruleDescription, sizeof(ruleDescription));

                if (GetConVarInt(g_CvarDescMode))
                {
                    PrintToChat(param1, "\x04[Rules] \x03%s : \x01%s", ruleName, ruleDescription);
                    Item = GetMenuSelectionPosition();
                    CreateRulesMenu(param1, Item);
                }
                else
                {
                    decl String:Rule[255];
                    decl String:Desc[255];
                    Format(Rule, sizeof(Rule), "%s", ruleName);
                    Format(Desc, sizeof(Desc), "%s", ruleDescription);
                    Item = GetMenuSelectionPosition();              
                    new Handle:DescriptionPanel = CreatePanel();
                    SetPanelTitle(DescriptionPanel, Rule);
                    DrawPanelText(DescriptionPanel, " ");
                    DrawPanelText(DescriptionPanel, Desc);
                    DrawPanelText(DescriptionPanel, " ");
                    DrawPanelItem(DescriptionPanel, "Back");                  
                    SendPanelToClient(DescriptionPanel, param1, HandlerBackToMenu, 15);              
                }


            }
        } while (KvGotoNextKey(kv));
        CloseHandle(kv);          
    }
    else if (action == MenuAction_Cancel)
      {
            PrintToServer("Client %d's menu was cancelled.  Reason: %d", param1, param2);
      }

    else if (action == MenuAction_End)
      {
            CloseHandle(menu);
      }

    return Plugin_Handled;
}

public ShowRulesHandler(Handle:menu, MenuAction:action, param1, param2)
{
    if (action == MenuAction_Select)
    {
        decl String:UserId[64];
        GetMenuItem(menu, param2, UserId, sizeof(UserId));
        new i_UserId = StringToInt(UserId);
        new client = GetClientOfUserId(i_UserId);
        CreateRulesMenu(client, 1);
    }

    else if (action == MenuAction_Cancel)
      {
            PrintToServer("Client %d's menu was cancelled.  Reason: %d", param1, param2);
      }

    else if (action == MenuAction_End)
      {
            CloseHandle(menu);
      }

    return Plugin_Handled;
  
}

Ошибка при компиляции:
C-подобный:
C:\Users\╚ы№ \Desktop\sourcemod\scripting\rules.sp(72) : error 180: function return type differs from prototype. expected 'void', but got 'int'

Вот тут где-то ошибка вроде:
C-подобный:
public OnClientPostAdminCheck(client)
{
    if (!GetConVarInt(g_CvarShowOnConnect))
    {
         CreateRulesMenu(client, 0);
    }
    return Plugin_Handled;
}
 

Rabb1t

Амбассадор
Сообщения
2,968
Реакции
1,429
  • Команда форума
  • #2
@KoBboy, изменения вносил или просто хочешь компильнуть?
--- Добавлено позже ---
Оффтоп
 

KoBboy

Участник
Сообщения
58
Реакции
1
@KoBboy, изменения вносил или просто хочешь компильнуть?
--- Добавлено позже ---
Оффтоп
Ну на варнинги пофиг, мне надо ошибку найти в том коде, он отвечает, чтоб при заходе появлялась табличка :с
Не вносил изменения
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #5
Починил. Разрабу оригинала руки по хорошему бы повырывать, но лень.
7ea2682b07.png
 

Вложения

  • rules.sp
    7.4 КБ · Просмотры: 56
  • rules.smx
    7.2 КБ · Просмотры: 5

KoBboy

Участник
Сообщения
58
Реакции
1
А ещё вопросик. А-то я туплю. Куда вписывать CVAR'ы от плагина?
Стоит AFK Manager и надо прописать квары:
sm_afk_move_time "180"
sm_afk_move_warn_time "60"
sm_afk_kick_players "0"
Куда их там писать? server.cfg?
 

Rabb1t

Амбассадор
Сообщения
2,968
Реакции
1,429
  • Команда форума
  • #8
@KoBboy, да, или в режим на сервере, или а autoexec.cfg .
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #9
@Rabb1t, autoexec.cfg выполняется ещё до полной подгрузки Сурсмода, по моим наблюдениям. Так что не вариант.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,982
@fenix28rn, в OnClientPostAdminCheck(), RulesMenuHandler() и ShowRulesHandler() - вообще ничего не должно возвращаться.
И да, AlmazON тебе не ответит (он давно на форуме не появлялся)
 

БлагоЯр

Участник
Сообщения
898
Реакции
86
вообще ничего не должно возвращаться.
То бишь в этом блоке кода, например:
C-подобный:
#if UseAdminMenu
    public Action:CommandAdminPasses(client, args)
    {
        if (b_game_m){
            DisplayTopMenu(h_menu, client, TopMenuPosition_LastCategory);
        }
        
        return Plugin_Handled;
    }
#endif
Должно быть так?
C-подобный:
#if UseAdminMenu
    public Action:CommandAdminPasses(client, args) {
        if (b_game_m){
            DisplayTopMenu(h_menu, client, TopMenuPosition_LastCategory);
        }
    }
#endif
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,982
@fenix28rn, нет, там же явно указано, что должно возвращаться значение Plugin_*
public Action:CommandAdminPasses(client, args)
означает, что должно возвращаться значение типа Action
 
Сверху Снизу