// Copyright (c) Hercules Dev Team, licensed under GNU GPL. // See the LICENSE file // Portions Copyright (c) Athena Dev Teams #ifndef _BATTLEGROUND_H_ #define _BATTLEGROUND_H_ #include "../common/mmo.h" // struct party #include "clif.h" #include "guild.h" /** * Defines **/ #define MAX_BG_MEMBERS 30 #define BG_DELAY_VAR_LENGTH 30 /** * Enumerations **/ enum bg_queue_types { BGQT_INVALID, BGQT_INDIVIDUAL, BGQT_PARTY, BGQT_GUILD }; struct battleground_member_data { unsigned short x, y; struct map_session_data *sd; unsigned afk : 1; struct point source;/* where did i come from before i join? */ }; struct battleground_data { unsigned int bg_id; unsigned char count; struct battleground_member_data members[MAX_BG_MEMBERS]; // BG Cementery unsigned short mapindex, x, y; // Logout Event char logout_event[EVENT_NAME_LENGTH]; char die_event[EVENT_NAME_LENGTH]; }; void do_init_battleground(void); void do_final_battleground(void); struct battleground_data* bg_team_search(int bg_id); int bg_send_dot_remove(struct map_session_data *sd); int bg_team_get_id(struct block_list *bl); struct map_session_data* bg_getavailablesd(struct battleground_data *bg); int bg_create(unsigned short mapindex, short rx, short ry, const char *ev, const char *dev); int bg_team_join(int bg_id, struct map_session_data *sd); int bg_team_delete(int bg_id); int bg_team_leave(struct map_session_data *sd, int flag); int bg_team_warp(int bg_id, unsigned short mapindex, short x, short y); int bg_member_respawn(struct map_session_data *sd); int bg_send_message(struct map_session_data *sd, const char *mes, int len); struct bg_arena { char name[NAME_LENGTH]; unsigned char id; char npc_event[EVENT_NAME_LENGTH]; short min_level, max_level; short prize_win, prize_loss, prize_draw; short min_players; short max_players; short min_team_players; char delay_var[NAME_LENGTH]; unsigned short maxDuration; int queue_id; int begin_timer; int fillup_timer; int game_timer; unsigned short fillup_duration; unsigned short pregame_duration; bool ongoing; }; /* battleground.c interface (incomplete) */ struct battleground_interface { bool queue_on; /* */ int mafksec; char gdelay_var[BG_DELAY_VAR_LENGTH]; /* */ struct bg_arena **arena; unsigned char arenas; /* */ struct bg_arena *(*name2arena) (char *name); void (*queue_add) (struct map_session_data *sd, struct bg_arena *arena, enum bg_queue_types type); enum BATTLEGROUNDS_QUEUE_ACK (*can_queue) (struct map_session_data *sd, struct bg_arena *arena, enum bg_queue_types type); int (*id2pos) (int queue_id, int account_id); void (*queue_pc_cleanup) (struct map_session_data *sd); void (*begin) (struct bg_arena *arena); int (*begin_timer) (int tid, unsigned int tick, int id, intptr_t data); void (*queue_pregame) (struct bg_arena *arena); int (*fillup_timer) (int tid, unsigned int tick, int id, intptr_t data); void (*queue_ready_ack) (struct bg_arena *arena, struct map_session_data *sd, bool response); void (*match_over) (struct bg_arena *arena, bool canceled); void (*queue_check) (struct bg_arena *arena); /* */ void (*config_read) (void); }; struct battleground_interface *bg; void battleground_defaults(void); #endif /* _BATTLEGROUND_H_ */