summaryrefslogtreecommitdiff
path: root/src/map/battleground.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/map/battleground.c')
-rw-r--r--src/map/battleground.c329
1 files changed, 165 insertions, 164 deletions
diff --git a/src/map/battleground.c b/src/map/battleground.c
index fc1653e03..7b605066d 100644
--- a/src/map/battleground.c
+++ b/src/map/battleground.c
@@ -22,198 +22,198 @@
#include <string.h>
#include <stdio.h>
-static DBMap *bg_team_db; // int bg_id -> struct battleground_data*
+static DBMap* bg_team_db; // int bg_id -> struct battleground_data*
static unsigned int bg_team_counter = 0; // Next bg_id
-struct battleground_data *bg_team_search(int bg_id) {
- // Search a BG Team using bg_id
- if (!bg_id) return NULL;
- return (struct battleground_data *)idb_get(bg_team_db, bg_id);
+struct battleground_data* bg_team_search(int bg_id)
+{ // Search a BG Team using bg_id
+ if( !bg_id ) return NULL;
+ return (struct battleground_data *)idb_get(bg_team_db, bg_id);
}
-struct map_session_data *bg_getavailablesd(struct battleground_data *bg) {
- int i;
- nullpo_retr(NULL, bg);
- ARR_FIND(0, MAX_BG_MEMBERS, i, bg->members[i].sd != NULL);
- return(i < MAX_BG_MEMBERS) ? bg->members[i].sd : NULL;
+struct map_session_data* bg_getavailablesd(struct battleground_data *bg)
+{
+ int i;
+ nullpo_retr(NULL, bg);
+ ARR_FIND(0, MAX_BG_MEMBERS, i, bg->members[i].sd != NULL);
+ return( i < MAX_BG_MEMBERS ) ? bg->members[i].sd : NULL;
}
int bg_team_delete(int bg_id)
-{
- // Deletes BG Team from db
- int i;
- struct map_session_data *sd;
- struct battleground_data *bg = bg_team_search(bg_id);
-
- if (bg == NULL) return 0;
- for (i = 0; i < MAX_BG_MEMBERS; i++) {
- if ((sd = bg->members[i].sd) == NULL)
- continue;
-
- bg_send_dot_remove(sd);
- sd->bg_id = 0;
- }
- idb_remove(bg_team_db, bg_id);
- return 1;
+{ // Deletes BG Team from db
+ int i;
+ struct map_session_data *sd;
+ struct battleground_data *bg = bg_team_search(bg_id);
+
+ if( bg == NULL ) return 0;
+ for( i = 0; i < MAX_BG_MEMBERS; i++ )
+ {
+ if( (sd = bg->members[i].sd) == NULL )
+ continue;
+
+ bg_send_dot_remove(sd);
+ sd->bg_id = 0;
+ }
+ idb_remove(bg_team_db, bg_id);
+ return 1;
}
int bg_team_warp(int bg_id, unsigned short mapindex, short x, short y)
-{
- // Warps a Team
- int i;
- struct battleground_data *bg = bg_team_search(bg_id);
- if (bg == NULL) return 0;
- for (i = 0; i < MAX_BG_MEMBERS; i++)
- if (bg->members[i].sd != NULL) pc_setpos(bg->members[i].sd, mapindex, x, y, CLR_TELEPORT);
- return 1;
+{ // Warps a Team
+ int i;
+ struct battleground_data *bg = bg_team_search(bg_id);
+ if( bg == NULL ) return 0;
+ for( i = 0; i < MAX_BG_MEMBERS; i++ )
+ if( bg->members[i].sd != NULL ) pc_setpos(bg->members[i].sd, mapindex, x, y, CLR_TELEPORT);
+ return 1;
}
int bg_send_dot_remove(struct map_session_data *sd)
{
- if (sd && sd->bg_id)
- clif_bg_xy_remove(sd);
- return 0;
+ if( sd && sd->bg_id )
+ clif_bg_xy_remove(sd);
+ return 0;
}
int bg_team_join(int bg_id, struct map_session_data *sd)
-{
- // Player joins team
- int i;
- struct battleground_data *bg = bg_team_search(bg_id);
- struct map_session_data *pl_sd;
+{ // Player joins team
+ int i;
+ struct battleground_data *bg = bg_team_search(bg_id);
+ struct map_session_data *pl_sd;
- if (bg == NULL || sd == NULL || sd->bg_id) return 0;
+ if( bg == NULL || sd == NULL || sd->bg_id ) return 0;
- ARR_FIND(0, MAX_BG_MEMBERS, i, bg->members[i].sd == NULL);
- if (i == MAX_BG_MEMBERS) return 0; // No free slots
+ ARR_FIND(0, MAX_BG_MEMBERS, i, bg->members[i].sd == NULL);
+ if( i == MAX_BG_MEMBERS ) return 0; // No free slots
- sd->bg_id = bg_id;
- bg->members[i].sd = sd;
- bg->members[i].x = sd->bl.x;
- bg->members[i].y = sd->bl.y;
- bg->count++;
+ sd->bg_id = bg_id;
+ bg->members[i].sd = sd;
+ bg->members[i].x = sd->bl.x;
+ bg->members[i].y = sd->bl.y;
+ bg->count++;
- guild_send_dot_remove(sd);
+ guild_send_dot_remove(sd);
- for (i = 0; i < MAX_BG_MEMBERS; i++) {
- if ((pl_sd = bg->members[i].sd) != NULL && pl_sd != sd)
- clif_hpmeter_single(sd->fd, pl_sd->bl.id, pl_sd->battle_status.hp, pl_sd->battle_status.max_hp);
- }
+ for( i = 0; i < MAX_BG_MEMBERS; i++ )
+ {
+ if( (pl_sd = bg->members[i].sd) != NULL && pl_sd != sd )
+ clif_hpmeter_single(sd->fd, pl_sd->bl.id, pl_sd->battle_status.hp, pl_sd->battle_status.max_hp);
+ }
- clif_bg_hp(sd);
- clif_bg_xy(sd);
- return 1;
+ clif_bg_hp(sd);
+ clif_bg_xy(sd);
+ return 1;
}
int bg_team_leave(struct map_session_data *sd, int flag)
-{
- // Single Player leaves team
- int i, bg_id;
- struct battleground_data *bg;
- char output[128];
+{ // Single Player leaves team
+ int i, bg_id;
+ struct battleground_data *bg;
+ char output[128];
- if (sd == NULL || !sd->bg_id)
- return 0;
+ if( sd == NULL || !sd->bg_id )
+ return 0;
- bg_send_dot_remove(sd);
- bg_id = sd->bg_id;
- sd->bg_id = 0;
+ bg_send_dot_remove(sd);
+ bg_id = sd->bg_id;
+ sd->bg_id = 0;
- if ((bg = bg_team_search(bg_id)) == NULL)
- return 0;
+ if( (bg = bg_team_search(bg_id)) == NULL )
+ return 0;
- ARR_FIND(0, MAX_BG_MEMBERS, i, bg->members[i].sd == sd);
- if (i < MAX_BG_MEMBERS) // Removes member from BG
- memset(&bg->members[i], 0, sizeof(bg->members[0]));
- bg->count--;
+ ARR_FIND(0, MAX_BG_MEMBERS, i, bg->members[i].sd == sd);
+ if( i < MAX_BG_MEMBERS ) // Removes member from BG
+ memset(&bg->members[i], 0, sizeof(bg->members[0]));
+ bg->count--;
- if (flag)
- sprintf(output, "Server : %s has quit the game...", sd->status.name);
- else
- sprintf(output, "Server : %s is leaving the battlefield...", sd->status.name);
- clif_bg_message(bg, 0, "Server", output, strlen(output) + 1);
+ if( flag )
+ sprintf(output, "Server : %s has quit the game...", sd->status.name);
+ else
+ sprintf(output, "Server : %s is leaving the battlefield...", sd->status.name);
+ clif_bg_message(bg, 0, "Server", output, strlen(output) + 1);
- if (bg->logout_event[0] && flag)
- npc_event(sd, bg->logout_event, 0);
+ if( bg->logout_event[0] && flag )
+ npc_event(sd, bg->logout_event, 0);
- return bg->count;
+ return bg->count;
}
int bg_member_respawn(struct map_session_data *sd)
-{
- // Respawn after killed
- struct battleground_data *bg;
- if (sd == NULL || !pc_isdead(sd) || !sd->bg_id || (bg = bg_team_search(sd->bg_id)) == NULL)
- return 0;
- if (bg->mapindex == 0)
- return 0; // Respawn not handled by Core
- pc_setpos(sd, bg->mapindex, bg->x, bg->y, CLR_OUTSIGHT);
- status_revive(&sd->bl, 1, 100);
-
- return 1; // Warped
+{ // Respawn after killed
+ struct battleground_data *bg;
+ if( sd == NULL || !pc_isdead(sd) || !sd->bg_id || (bg = bg_team_search(sd->bg_id)) == NULL )
+ return 0;
+ if( bg->mapindex == 0 )
+ return 0; // Respawn not handled by Core
+ pc_setpos(sd, bg->mapindex, bg->x, bg->y, CLR_OUTSIGHT);
+ status_revive(&sd->bl, 1, 100);
+
+ return 1; // Warped
}
int bg_create(unsigned short mapindex, short rx, short ry, const char *ev, const char *dev)
{
- struct battleground_data *bg;
- bg_team_counter++;
-
- CREATE(bg, struct battleground_data, 1);
- bg->bg_id = bg_team_counter;
- bg->count = 0;
- bg->mapindex = mapindex;
- bg->x = rx;
- bg->y = ry;
- safestrncpy(bg->logout_event, ev, sizeof(bg->logout_event));
- safestrncpy(bg->die_event, dev, sizeof(bg->die_event));
-
- memset(&bg->members, 0, sizeof(bg->members));
- idb_put(bg_team_db, bg_team_counter, bg);
-
- return bg->bg_id;
+ struct battleground_data *bg;
+ bg_team_counter++;
+
+ CREATE(bg, struct battleground_data, 1);
+ bg->bg_id = bg_team_counter;
+ bg->count = 0;
+ bg->mapindex = mapindex;
+ bg->x = rx;
+ bg->y = ry;
+ safestrncpy(bg->logout_event, ev, sizeof(bg->logout_event));
+ safestrncpy(bg->die_event, dev, sizeof(bg->die_event));
+
+ memset(&bg->members, 0, sizeof(bg->members));
+ idb_put(bg_team_db, bg_team_counter, bg);
+
+ return bg->bg_id;
}
int bg_team_get_id(struct block_list *bl)
{
- nullpo_ret(bl);
- switch (bl->type) {
- case BL_PC:
- return ((TBL_PC *)bl)->bg_id;
- case BL_PET:
- if (((TBL_PET *)bl)->msd)
- return ((TBL_PET *)bl)->msd->bg_id;
- break;
- case BL_MOB: {
- struct map_session_data *msd;
- struct mob_data *md = (TBL_MOB *)bl;
- if (md->special_state.ai && (msd = map_id2sd(md->master_id)) != NULL)
- return msd->bg_id;
- return md->bg_id;
- }
- case BL_HOM:
- if (((TBL_HOM *)bl)->master)
- return ((TBL_HOM *)bl)->master->bg_id;
- break;
- case BL_MER:
- if (((TBL_MER *)bl)->master)
- return ((TBL_MER *)bl)->master->bg_id;
- break;
- case BL_SKILL:
- return ((TBL_SKILL *)bl)->group->bg_id;
- }
-
- return 0;
+ nullpo_ret(bl);
+ switch( bl->type )
+ {
+ case BL_PC:
+ return ((TBL_PC*)bl)->bg_id;
+ case BL_PET:
+ if( ((TBL_PET*)bl)->msd )
+ return ((TBL_PET*)bl)->msd->bg_id;
+ break;
+ case BL_MOB:
+ {
+ struct map_session_data *msd;
+ struct mob_data *md = (TBL_MOB*)bl;
+ if( md->special_state.ai && (msd = map_id2sd(md->master_id)) != NULL )
+ return msd->bg_id;
+ return md->bg_id;
+ }
+ case BL_HOM:
+ if( ((TBL_HOM*)bl)->master )
+ return ((TBL_HOM*)bl)->master->bg_id;
+ break;
+ case BL_MER:
+ if( ((TBL_MER*)bl)->master )
+ return ((TBL_MER*)bl)->master->bg_id;
+ break;
+ case BL_SKILL:
+ return ((TBL_SKILL*)bl)->group->bg_id;
+ }
+
+ return 0;
}
int bg_send_message(struct map_session_data *sd, const char *mes, int len)
{
- struct battleground_data *bg;
+ struct battleground_data *bg;
- nullpo_ret(sd);
- if (sd->bg_id == 0 || (bg = bg_team_search(sd->bg_id)) == NULL)
- return 0;
- clif_bg_message(bg, sd->bl.id, sd->status.name, mes, len);
- return 0;
+ nullpo_ret(sd);
+ if( sd->bg_id == 0 || (bg = bg_team_search(sd->bg_id)) == NULL )
+ return 0;
+ clif_bg_message(bg, sd->bl.id, sd->status.name, mes, len);
+ return 0;
}
/**
@@ -221,37 +221,38 @@ int bg_send_message(struct map_session_data *sd, const char *mes, int len)
*/
int bg_send_xy_timer_sub(DBKey key, DBData *data, va_list ap)
{
- struct battleground_data *bg = db_data2ptr(data);
- struct map_session_data *sd;
- int i;
- nullpo_ret(bg);
- for (i = 0; i < MAX_BG_MEMBERS; i++) {
- if ((sd = bg->members[i].sd) == NULL)
- continue;
- if (sd->bl.x != bg->members[i].x || sd->bl.y != bg->members[i].y) {
- // xy update
- bg->members[i].x = sd->bl.x;
- bg->members[i].y = sd->bl.y;
- clif_bg_xy(sd);
- }
- }
- return 0;
+ struct battleground_data *bg = db_data2ptr(data);
+ struct map_session_data *sd;
+ int i;
+ nullpo_ret(bg);
+ for( i = 0; i < MAX_BG_MEMBERS; i++ )
+ {
+ if( (sd = bg->members[i].sd) == NULL )
+ continue;
+ if( sd->bl.x != bg->members[i].x || sd->bl.y != bg->members[i].y )
+ { // xy update
+ bg->members[i].x = sd->bl.x;
+ bg->members[i].y = sd->bl.y;
+ clif_bg_xy(sd);
+ }
+ }
+ return 0;
}
int bg_send_xy_timer(int tid, unsigned int tick, int id, intptr_t data)
{
- bg_team_db->foreach(bg_team_db, bg_send_xy_timer_sub, tick);
- return 0;
+ bg_team_db->foreach(bg_team_db, bg_send_xy_timer_sub, tick);
+ return 0;
}
void do_init_battleground(void)
{
- bg_team_db = idb_alloc(DB_OPT_RELEASE_DATA);
- add_timer_func_list(bg_send_xy_timer, "bg_send_xy_timer");
- add_timer_interval(gettick() + battle_config.bg_update_interval, bg_send_xy_timer, 0, 0, battle_config.bg_update_interval);
+ bg_team_db = idb_alloc(DB_OPT_RELEASE_DATA);
+ add_timer_func_list(bg_send_xy_timer, "bg_send_xy_timer");
+ add_timer_interval(gettick() + battle_config.bg_update_interval, bg_send_xy_timer, 0, 0, battle_config.bg_update_interval);
}
void do_final_battleground(void)
{
- bg_team_db->destroy(bg_team_db, NULL);
+ bg_team_db->destroy(bg_team_db, NULL);
}