Jump to content
  • 0

pc_groups.hpp:93:1: error: too many initializers for const s_pcg_permission_name [28]


Question

Posted

So I just updated my server to the newest git version. I have a few custom group permissions, but I can't seem to fix this error.

Here's the pc_groups.hpp file info
 

Quote

// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL
// For more information, see LICENCE in the main folder

#ifndef PC_GROUPS_HPP
#define PC_GROUPS_HPP

#include <bitset>
#include <map>
#include <vector>

#include "../common/cbasetypes.hpp"
#include "../common/database.hpp"

// Forward declaration from atcommands.hpp
enum AtCommandType : uint8;

void pc_group_pc_load(struct map_session_data *sd);
void do_init_pc_groups(void);
void do_final_pc_groups(void);
void pc_groups_reload(void);

enum e_pc_permission : uint32 {
    PC_PERM_TRADE = 0,
    PC_PERM_PARTY,
    PC_PERM_ALL_SKILL,
    PC_PERM_USE_ALL_EQUIPMENT,
    PC_PERM_SKILL_UNCONDITIONAL,
    PC_PERM_JOIN_ALL_CHAT,
    PC_PERM_NO_CHAT_KICK,
    PC_PERM_HIDE_SESSION,
    PC_PERM_WHO_DISPLAY_AID,
    PC_PERM_RECEIVE_HACK_INFO,
    PC_PERM_WARP_ANYWHERE,
    PC_PERM_VIEW_HPMETER,
    PC_PERM_VIEW_EQUIPMENT,
    PC_PERM_USE_CHECK,
    PC_PERM_USE_CHANGEMAPTYPE,
    PC_PERM_USE_ALL_COMMANDS,
    PC_PERM_RECEIVE_REQUESTS,
    PC_PERM_SHOW_BOSS,
    PC_PERM_DISABLE_PVM,
    PC_PERM_DISABLE_PVP,
    PC_PERM_DISABLE_CMD_DEAD,
    PC_PERM_CHANNEL_ADMIN,
    PC_PERM_TRADE_BOUNDED,
    PC_PERM_ITEM_UNCONDITIONAL,
    PC_PERM_ENABLE_COMMAND,
    PC_PERM_BYPASS_STAT_ONCLONE,
    PC_PERM_BYPASS_MAX_STAT,
    PC_PERM_ATTENDANCE,
    //.. add other here
    PC_PERM_MAX,
    PC_PERM_MAILER,
    PC_ANTI_ABUSE,
    PC_PERM_ALLPERMISSION,
};

static const struct s_pcg_permission_name {
    const char *name;
    enum e_pc_permission permission;
} pc_g_permission_name[PC_PERM_MAX] = {
    { "can_trade", PC_PERM_TRADE },
    { "can_party", PC_PERM_PARTY },
    { "all_skill", PC_PERM_ALL_SKILL },
    { "all_equipment", PC_PERM_USE_ALL_EQUIPMENT },
    { "skill_unconditional", PC_PERM_SKILL_UNCONDITIONAL },
    { "join_chat", PC_PERM_JOIN_ALL_CHAT },
    { "kick_chat", PC_PERM_NO_CHAT_KICK },
    { "hide_session", PC_PERM_HIDE_SESSION },
    { "who_display_aid", PC_PERM_WHO_DISPLAY_AID },
    { "hack_info", PC_PERM_RECEIVE_HACK_INFO },
    { "any_warp", PC_PERM_WARP_ANYWHERE },
    { "view_hpmeter", PC_PERM_VIEW_HPMETER },
    { "view_equipment", PC_PERM_VIEW_EQUIPMENT },
    { "use_check", PC_PERM_USE_CHECK },
    { "use_changemaptype", PC_PERM_USE_CHANGEMAPTYPE },
    { "all_commands", PC_PERM_USE_ALL_COMMANDS },
    { "receive_requests", PC_PERM_RECEIVE_REQUESTS },
    { "show_bossmobs", PC_PERM_SHOW_BOSS },
    { "disable_pvm", PC_PERM_DISABLE_PVM },
    { "disable_pvp", PC_PERM_DISABLE_PVP },
    { "disable_commands_when_dead", PC_PERM_DISABLE_CMD_DEAD },
    { "channel_admin", PC_PERM_CHANNEL_ADMIN },
    { "can_trade_bounded", PC_PERM_TRADE_BOUNDED },
    { "item_unconditional", PC_PERM_ITEM_UNCONDITIONAL },
    { "command_enable", PC_PERM_ENABLE_COMMAND },
    { "bypass_stat_onclone", PC_PERM_BYPASS_STAT_ONCLONE },
    { "bypass_max_stat", PC_PERM_BYPASS_MAX_STAT },
    { "attendance", PC_PERM_ATTENDANCE },
    { "can_mail", PC_PERM_MAILER },
    { "anti_abuse", PC_ANTI_ABUSE },
    { "all_permission", PC_PERM_ALLPERMISSION },
};

struct s_player_group{
    uint32 id;
    std::string name;
    uint32 level;
    bool log_commands;
    std::vector<std::string> commands;
    std::vector<std::string> char_commands;
    std::bitset<PC_PERM_MAX> permissions;
    uint32 index;

public:
    bool can_use_command( const std::string& command, AtCommandType type );
    bool has_permission( e_pc_permission permission );
    bool should_log_commands();
};

class PlayerGroupDatabase : public TypesafeYamlDatabase<uint32, s_player_group>{
private:
    std::map<uint32, std::vector<std::string>> inheritance;
    bool parseCommands( const ryml::NodeRef& node, std::vector<std::string>& commands );

public:
    PlayerGroupDatabase() : TypesafeYamlDatabase( "PLAYER_GROUP_DB", 1 ){

    }

    const std::string getDefaultLocation() override;
    uint64 parseBodyNode( const ryml::NodeRef& node ) override;
    void loadingFinished() override;
};

extern PlayerGroupDatabase player_group_db;

#endif /* PC_GROUPS_HPP */
 

And the error in terminal...
Any help appreciated thank you.

Capture.PNG

8 answers to this question

Recommended Posts

  • 0
Posted

There was an update to system and it now uses groups.yml instead of groups.conf, might be related to your issue.

If you had customized the original source file you might have a merge error?

The code you quoted doesn't even include "const s_pcg_permission_name". From the error message I'd say you have the same const in the array appear twice.

Look for this code:

static const struct s_pcg_permission_name {
	const char *name;
	enum e_pc_permission permission;
} pc_g_permission_name[PC_PERM_MAX] = {
	{ "can_trade", PC_PERM_TRADE },
	{ "can_party", PC_PERM_PARTY },
	{ "all_skill", PC_PERM_ALL_SKILL },
	{ "all_equipment", PC_PERM_USE_ALL_EQUIPMENT },
	{ "skill_unconditional", PC_PERM_SKILL_UNCONDITIONAL },
	{ "join_chat", PC_PERM_JOIN_ALL_CHAT },
	{ "kick_chat", PC_PERM_NO_CHAT_KICK },
	{ "hide_session", PC_PERM_HIDE_SESSION },
	{ "who_display_aid", PC_PERM_WHO_DISPLAY_AID },
	{ "hack_info", PC_PERM_RECEIVE_HACK_INFO },
	{ "any_warp", PC_PERM_WARP_ANYWHERE },
	{ "view_hpmeter", PC_PERM_VIEW_HPMETER },
	{ "view_equipment", PC_PERM_VIEW_EQUIPMENT },
	{ "use_check", PC_PERM_USE_CHECK },
	{ "use_changemaptype", PC_PERM_USE_CHANGEMAPTYPE },
	{ "all_commands", PC_PERM_USE_ALL_COMMANDS },
	{ "receive_requests", PC_PERM_RECEIVE_REQUESTS },
	{ "show_bossmobs", PC_PERM_SHOW_BOSS },
	{ "disable_pvm", PC_PERM_DISABLE_PVM },
	{ "disable_pvp", PC_PERM_DISABLE_PVP },
	{ "disable_commands_when_dead", PC_PERM_DISABLE_CMD_DEAD },
	{ "channel_admin", PC_PERM_CHANNEL_ADMIN },
	{ "can_trade_bounded", PC_PERM_TRADE_BOUNDED },
	{ "item_unconditional", PC_PERM_ITEM_UNCONDITIONAL },
	{ "command_enable",PC_PERM_ENABLE_COMMAND },
	{ "bypass_stat_onclone",PC_PERM_BYPASS_STAT_ONCLONE },
	{ "bypass_max_stat",PC_PERM_BYPASS_MAX_STAT },
	{ "attendance",PC_PERM_ATTENDANCE },
};

 

  • 0
Posted (edited)
7 hours ago, Playtester said:

There was an update to system and it now uses groups.yml instead of groups.conf, might be related to your issue.

If you had customized the original source file you might have a merge error?

The code you quoted doesn't even include "const s_pcg_permission_name". From the error message I'd say you have the same const in the array appear twice.

Look for this code:

static const struct s_pcg_permission_name {
	const char *name;
	enum e_pc_permission permission;
} pc_g_permission_name[PC_PERM_MAX] = {
	{ "can_trade", PC_PERM_TRADE },
	{ "can_party", PC_PERM_PARTY },
	{ "all_skill", PC_PERM_ALL_SKILL },
	{ "all_equipment", PC_PERM_USE_ALL_EQUIPMENT },
	{ "skill_unconditional", PC_PERM_SKILL_UNCONDITIONAL },
	{ "join_chat", PC_PERM_JOIN_ALL_CHAT },
	{ "kick_chat", PC_PERM_NO_CHAT_KICK },
	{ "hide_session", PC_PERM_HIDE_SESSION },
	{ "who_display_aid", PC_PERM_WHO_DISPLAY_AID },
	{ "hack_info", PC_PERM_RECEIVE_HACK_INFO },
	{ "any_warp", PC_PERM_WARP_ANYWHERE },
	{ "view_hpmeter", PC_PERM_VIEW_HPMETER },
	{ "view_equipment", PC_PERM_VIEW_EQUIPMENT },
	{ "use_check", PC_PERM_USE_CHECK },
	{ "use_changemaptype", PC_PERM_USE_CHANGEMAPTYPE },
	{ "all_commands", PC_PERM_USE_ALL_COMMANDS },
	{ "receive_requests", PC_PERM_RECEIVE_REQUESTS },
	{ "show_bossmobs", PC_PERM_SHOW_BOSS },
	{ "disable_pvm", PC_PERM_DISABLE_PVM },
	{ "disable_pvp", PC_PERM_DISABLE_PVP },
	{ "disable_commands_when_dead", PC_PERM_DISABLE_CMD_DEAD },
	{ "channel_admin", PC_PERM_CHANNEL_ADMIN },
	{ "can_trade_bounded", PC_PERM_TRADE_BOUNDED },
	{ "item_unconditional", PC_PERM_ITEM_UNCONDITIONAL },
	{ "command_enable",PC_PERM_ENABLE_COMMAND },
	{ "bypass_stat_onclone",PC_PERM_BYPASS_STAT_ONCLONE },
	{ "bypass_max_stat",PC_PERM_BYPASS_MAX_STAT },
	{ "attendance",PC_PERM_ATTENDANCE },
};

 

This is mine
 

Quote

enum e_pc_permission : uint32 {
    PC_PERM_TRADE = 0,
    PC_PERM_PARTY,
    PC_PERM_ALL_SKILL,
    PC_PERM_USE_ALL_EQUIPMENT,
    PC_PERM_SKILL_UNCONDITIONAL,
    PC_PERM_JOIN_ALL_CHAT,
    PC_PERM_NO_CHAT_KICK,
    PC_PERM_HIDE_SESSION,
    PC_PERM_WHO_DISPLAY_AID,
    PC_PERM_RECEIVE_HACK_INFO,
    PC_PERM_WARP_ANYWHERE,
    PC_PERM_VIEW_HPMETER,
    PC_PERM_VIEW_EQUIPMENT,
    PC_PERM_USE_CHECK,
    PC_PERM_USE_CHANGEMAPTYPE,
    PC_PERM_USE_ALL_COMMANDS,
    PC_PERM_RECEIVE_REQUESTS,
    PC_PERM_SHOW_BOSS,
    PC_PERM_DISABLE_PVM,
    PC_PERM_DISABLE_PVP,
    PC_PERM_DISABLE_CMD_DEAD,
    PC_PERM_CHANNEL_ADMIN,
    PC_PERM_TRADE_BOUNDED,
    PC_PERM_ITEM_UNCONDITIONAL,
    PC_PERM_ENABLE_COMMAND,
    PC_PERM_BYPASS_STAT_ONCLONE,
    PC_PERM_BYPASS_MAX_STAT,
    PC_PERM_ATTENDANCE,
    //.. add other here
    PC_PERM_MAX,
    PC_PERM_MAILER,
    PC_ANTI_ABUSE,
};

static const struct s_pcg_permission_name {
    const char *name;
    enum e_pc_permission permission;
} pc_g_permission_name[PC_PERM_MAX] = {
    { "can_trade", PC_PERM_TRADE },
    { "can_party", PC_PERM_PARTY },
    { "all_skill", PC_PERM_ALL_SKILL },
    { "all_equipment", PC_PERM_USE_ALL_EQUIPMENT },
    { "skill_unconditional", PC_PERM_SKILL_UNCONDITIONAL },
    { "join_chat", PC_PERM_JOIN_ALL_CHAT },
    { "kick_chat", PC_PERM_NO_CHAT_KICK },
    { "hide_session", PC_PERM_HIDE_SESSION },
    { "who_display_aid", PC_PERM_WHO_DISPLAY_AID },
    { "hack_info", PC_PERM_RECEIVE_HACK_INFO },
    { "any_warp", PC_PERM_WARP_ANYWHERE },
    { "view_hpmeter", PC_PERM_VIEW_HPMETER },
    { "view_equipment", PC_PERM_VIEW_EQUIPMENT },
    { "use_check", PC_PERM_USE_CHECK },
    { "use_changemaptype", PC_PERM_USE_CHANGEMAPTYPE },
    { "all_commands", PC_PERM_USE_ALL_COMMANDS },
    { "receive_requests", PC_PERM_RECEIVE_REQUESTS },
    { "show_bossmobs", PC_PERM_SHOW_BOSS },
    { "disable_pvm", PC_PERM_DISABLE_PVM },
    { "disable_pvp", PC_PERM_DISABLE_PVP },
    { "disable_commands_when_dead", PC_PERM_DISABLE_CMD_DEAD },
    { "channel_admin", PC_PERM_CHANNEL_ADMIN },
    { "can_trade_bounded", PC_PERM_TRADE_BOUNDED },
    { "item_unconditional", PC_PERM_ITEM_UNCONDITIONAL },
    { "command_enable",PC_PERM_ENABLE_COMMAND },
    { "bypass_stat_onclone",PC_PERM_BYPASS_STAT_ONCLONE },
    { "bypass_max_stat",PC_PERM_BYPASS_MAX_STAT },
    { "attendance",PC_PERM_ATTENDANCE },
    { "can_mail",PC_PERM_MAILER },
    { "anti_abuse",PC_ANTI_ABUSE },
};

I have 2 extra due to having custom permissions. Should still work though since none of them are duplicated. Could it be anything else by chance? It almost seems like you can't have extra permissions?

Edited by DR4LUC0N
  • 0
Posted (edited)

So I'm using Visual Studio, unfortunately there's no defined number of Permissions for PC_PERM_MAX. It looks like it automatically identify all of them.

 

Quote

pc.hpp

uint32 login_id1, login_id2;
    uint64 class_;    //This is the internal job ID used by the map server to simplify comparisons/queries/etc. [Skotlex]
    int group_id;
    std::shared_ptr<s_player_group> group;
    std::bitset<PC_PERM_MAX> permissions; // group permissions have to be copied, because they might be adjusted by atcommand addperm
    int count_rewarp; //count how many time we being rewarped

and 
 

Quote

pc_groups.hpp

 

enum e_pc_permission : uint32 {
    PC_PERM_TRADE = 0,
    PC_PERM_PARTY,
    PC_PERM_ALL_SKILL,
    PC_PERM_USE_ALL_EQUIPMENT,
    PC_PERM_SKILL_UNCONDITIONAL,
    PC_PERM_JOIN_ALL_CHAT,
    PC_PERM_NO_CHAT_KICK,
    PC_PERM_HIDE_SESSION,
    PC_PERM_WHO_DISPLAY_AID,
    PC_PERM_RECEIVE_HACK_INFO,
    PC_PERM_WARP_ANYWHERE,
    PC_PERM_VIEW_HPMETER,
    PC_PERM_VIEW_EQUIPMENT,
    PC_PERM_USE_CHECK,
    PC_PERM_USE_CHANGEMAPTYPE,
    PC_PERM_USE_ALL_COMMANDS,
    PC_PERM_RECEIVE_REQUESTS,
    PC_PERM_SHOW_BOSS,
    PC_PERM_DISABLE_PVM,
    PC_PERM_DISABLE_PVP,
    PC_PERM_DISABLE_CMD_DEAD,
    PC_PERM_CHANNEL_ADMIN,
    PC_PERM_TRADE_BOUNDED,
    PC_PERM_ITEM_UNCONDITIONAL,
    PC_PERM_ENABLE_COMMAND,
    PC_PERM_BYPASS_STAT_ONCLONE,
    PC_PERM_BYPASS_MAX_STAT,
    PC_PERM_ATTENDANCE,
    //.. add other here
    PC_PERM_MAX,
    PC_PERM_MAILER,
    PC_ANTI_ABUSE,
};

static const struct s_pcg_permission_name {
    const char *name;
    enum e_pc_permission permission;
} pc_g_permission_name[PC_PERM_MAX] = {
    { "can_trade", PC_PERM_TRADE },
    { "can_party", PC_PERM_PARTY },
    { "all_skill", PC_PERM_ALL_SKILL },
    { "all_equipment", PC_PERM_USE_ALL_EQUIPMENT },
    { "skill_unconditional", PC_PERM_SKILL_UNCONDITIONAL },
    { "join_chat", PC_PERM_JOIN_ALL_CHAT },
    { "kick_chat", PC_PERM_NO_CHAT_KICK },
    { "hide_session", PC_PERM_HIDE_SESSION },
    { "who_display_aid", PC_PERM_WHO_DISPLAY_AID },
    { "hack_info", PC_PERM_RECEIVE_HACK_INFO },
    { "any_warp", PC_PERM_WARP_ANYWHERE },
    { "view_hpmeter", PC_PERM_VIEW_HPMETER },
    { "view_equipment", PC_PERM_VIEW_EQUIPMENT },
    { "use_check", PC_PERM_USE_CHECK },
    { "use_changemaptype", PC_PERM_USE_CHANGEMAPTYPE },
    { "all_commands", PC_PERM_USE_ALL_COMMANDS },
    { "receive_requests", PC_PERM_RECEIVE_REQUESTS },
    { "show_bossmobs", PC_PERM_SHOW_BOSS },
    { "disable_pvm", PC_PERM_DISABLE_PVM },
    { "disable_pvp", PC_PERM_DISABLE_PVP },
    { "disable_commands_when_dead", PC_PERM_DISABLE_CMD_DEAD },
    { "channel_admin", PC_PERM_CHANNEL_ADMIN },
    { "can_trade_bounded", PC_PERM_TRADE_BOUNDED },
    { "item_unconditional", PC_PERM_ITEM_UNCONDITIONAL },
    { "command_enable",PC_PERM_ENABLE_COMMAND },
    { "bypass_stat_onclone",PC_PERM_BYPASS_STAT_ONCLONE },
    { "bypass_max_stat",PC_PERM_BYPASS_MAX_STAT },
    { "attendance",PC_PERM_ATTENDANCE },
    { "can_mail",PC_PERM_MAILER },
    { "anti_abuse",PC_ANTI_ABUSE },
};

These are the only 2 mentions of PC_PERM_MAX.

Edited by DR4LUC0N

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...