summaryrefslogblamecommitdiff
path: root/src/map/atcommand.h
blob: cea59a416b9cb7a90bbc694ddfffeff424b98d4f (plain) (tree)
1
2
3
4
5
6
7
8
9
10


                                                           



                     


               
                        
                     
 




                           
 


               
              

                                

                





                                                                                                                                              
 






                                     
 







                                                                                       
 
                           




                                         
  
 






















                                                                                                 
 



                                      
 
                          
// Copyright (c) Hercules Dev Team, licensed under GNU GPL.
// See the LICENSE file
// Portions Copyright (c) Athena Dev Teams

#ifndef _ATCOMMAND_H_
#define _ATCOMMAND_H_

/**
 * Declarations
 **/
struct map_session_data;
struct AtCommandInfo;

/**
 * Defines
 **/
#define ATCOMMAND_LENGTH 50
#define MAX_MSG 1500

/**
 * Enumerations
 **/
typedef enum {
	COMMAND_ATCOMMAND = 1,
	COMMAND_CHARCOMMAND = 2,
} AtCommandType;

/**
 * Typedef
 **/
typedef bool (*AtCommandFunc)(const int fd, struct map_session_data* sd, const char* command, const char* message,struct AtCommandInfo *info);
typedef struct AtCommandInfo AtCommandInfo;
typedef struct AliasInfo AliasInfo;

/**
 * Structures
 **/
struct AliasInfo {
	AtCommandInfo *command;
	char alias[ATCOMMAND_LENGTH];
};

struct AtCommandInfo {
	char command[ATCOMMAND_LENGTH];
	AtCommandFunc func;
	char *at_groups;/* quick @commands "can-use" lookup */
	char *char_groups;/* quick @charcommands "can-use" lookup */
	char *help;/* quick access to this @command's help string */
	bool log;/* whether to log this command or not, regardless of group settings */
};

struct atcmd_binding_data {
	char command[ATCOMMAND_LENGTH];
	char npc_event[ATCOMMAND_LENGTH];
	int group_lv;
	int group_lv_char;
	bool log;
};

/**
 * Interface
 **/
struct atcommand_interface {
	unsigned char at_symbol;
	unsigned char char_symbol;
	/* atcommand binding */
	struct atcmd_binding_data** binding;
	int binding_count;
	/* */
	void (*init) (void);
	void (*final) (void);
	/* */
	bool (*parse) (const int fd, struct map_session_data* sd, const char* message, int type);
	bool (*can_use) (struct map_session_data *sd, const char *command);
	bool (*can_use2) (struct map_session_data *sd, const char *command, AtCommandType type);
	void (*load_groups) (int* group_ids);
	AtCommandInfo* (*exists) (const char* name);
	int (*msg_read) (const char* cfgName);
	void (*final_msg) (void);
	/* atcommand binding */
	struct atcmd_binding_data* (*get_bind_byname) (const char* name);
} atcommand_s;

struct atcommand_interface *atcommand;

const char* msg_txt(int msg_number);
void atcommand_defaults(void);

#endif /* _ATCOMMAND_H_ */