Jump to content
  • 0

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


DR4LUC0N

Question


  • Group:  Members
  • Topic Count:  33
  • Topics Per Day:  0.01
  • Content Count:  135
  • Reputation:   6
  • Joined:  04/04/12
  • Last Seen:  

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

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

  • Group:  Developer
  • Topic Count:  33
  • Topics Per Day:  0.01
  • Content Count:  790
  • Reputation:   225
  • Joined:  01/30/13
  • Last Seen:  

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 },
};

 

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  33
  • Topics Per Day:  0.01
  • Content Count:  135
  • Reputation:   6
  • Joined:  04/04/12
  • Last Seen:  

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
Link to comment
Share on other sites

  • 0

  • Group:  Developer
  • Topic Count:  33
  • Topics Per Day:  0.01
  • Content Count:  790
  • Reputation:   225
  • Joined:  01/30/13
  • Last Seen:  

You probably need to increase PC_PERM_MAX by 2 then.

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  33
  • Topics Per Day:  0.01
  • Content Count:  135
  • Reputation:   6
  • Joined:  04/04/12
  • Last Seen:  

Where would I do that if I may ask?

Link to comment
Share on other sites

  • 0

  • Group:  Developer
  • Topic Count:  33
  • Topics Per Day:  0.01
  • Content Count:  790
  • Reputation:   225
  • Joined:  01/30/13
  • Last Seen:  

It's not hard to find that out yourself. If you use visual studio Ctrl+F then select to search the whole project and then just enter PC_PERM_MAX and search where it's defined.

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  33
  • Topics Per Day:  0.01
  • Content Count:  135
  • Reputation:   6
  • Joined:  04/04/12
  • Last Seen:  

Thank you for your help!!!!

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  33
  • Topics Per Day:  0.01
  • Content Count:  135
  • Reputation:   6
  • Joined:  04/04/12
  • Last Seen:  

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
Link to comment
Share on other sites

  • 0

  • Group:  Developer
  • Topic Count:  33
  • Topics Per Day:  0.01
  • Content Count:  790
  • Reputation:   225
  • Joined:  01/30/13
  • Last Seen:  

Ah you define PC_PERM_MAX in the enum (first one is 0, second is 1, third is 2, etc.). You will have to put it last so that it works.

Link to comment
Share on other sites

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.

×
×
  • Create New...