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; 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 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); 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; }
int guild_member_withdraw(int guild_id, int account_id, int char_id, int flag, const char* name, const char* mes) { int i; struct guild* g = guild_search(guild_id); struct map_session_data* sd = map_charid2sd(char_id); struct map_session_data* online_member_sd; if(g == NULL) return 0; // no such guild (error!) i = guild_getindex(g, account_id, char_id); if( i == -1 ) return 0; // not a member (inconsistency!) online_member_sd = guild_getavailablesd(g); if(online_member_sd == NULL) return 0; // noone online to inform if(!flag) clif_guild_leave(online_member_sd, name, mes); else clif_guild_expulsion(online_member_sd, name, mes, account_id); // remove member from guild memset(&g->member[i],0,sizeof(struct guild_member)); clif_guild_memberlist(online_member_sd); // update char, if online if(sd != NULL && sd->status.guild_id == guild_id) { // do stuff that needs the guild_id first, BEFORE we wipe it if (sd->state.storage_flag == 2) //Close the guild storage. storage_guild_storageclose(sd); guild_send_dot_remove(sd); sd->status.guild_id = 0; sd->guild_emblem_id = 0; clif_charnameupdate(sd); //Update display name [Skotlex] //TODO: send emblem update to self and people around } return 0; }
int guild_member_leaved(int guild_id,int account_id,int char_id,int flag, const char *name,const char *mes) // rewrote [LuzZza] { int i; struct guild *g = guild_search(guild_id); struct map_session_data *sd = map_charid2sd(char_id); struct map_session_data *online_member_sd; if(g == NULL) return 0; for(i=0;i<g->max_member;i++) { if( g->member[i].account_id == account_id && g->member[i].char_id == char_id ){ if((online_member_sd = guild_getavailablesd(g)) == NULL) return 0; if(!flag) clif_guild_leave(online_member_sd, name, mes); else clif_guild_expulsion(online_member_sd, name, mes, account_id); memset(&g->member[i],0,sizeof(struct guild_member)); clif_guild_memberlist(online_member_sd); if(sd != NULL && sd->status.guild_id == guild_id) { if (sd->state.storage_flag == 2) //Close the guild storage. storage_guild_storageclose(sd); sd->status.guild_id=0; sd->guild_emblem_id=0; sd->state.guild_sent=0; guild_send_dot_remove(sd); clif_charnameupdate(sd); //Update display name [Skotlex] } return 0; } } 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; 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 pc_update_last_action(sd,0); // Start count from here... sd->bg_id = bg_id; sd->bg_kills = 0; sd->state.bg_afk = 0; bg->members[i].sd = sd; bg->members[i].x = sd->bl.x; bg->members[i].y = sd->bl.y; bg->count++; if( bg->creation_tick == 0 ) bg->creation_tick = last_tick; // Creation Tick = First member joined. if( bg->leader_char_id == 0 ) { // First Join = Team Leader bg->leader_char_id = sd->status.char_id; sd->bmaster_flag = bg; } if( battle_config.bg_ranked_mode && sd->status.bgstats.rank_games < battle_config.bg_ranked_max_games && DIFF_TICK(last_tick,bg->creation_tick) < 60 ) { char output[128]; bg->members[i].ranked = true; sd->status.bgstats.rank_games++; sprintf(output,"-- RANKED BATTLEGROUND MATCH %d OF %d --", sd->status.bgstats.rank_games, battle_config.bg_ranked_max_games); clif_displaymessage(sd->fd,output); } guild_send_dot_remove(sd); if( battle_config.bg_eAmod_mode ) { clif_bg_belonginfo(sd); clif_charnameupdate(sd); } for( i = 0; i < MAX_BG_MEMBERS; i++ ) { if( (pl_sd = bg->members[i].sd) == NULL ) continue; if( battle_config.bg_eAmod_mode ) { // Simulate Guild Information clif_guild_basicinfo(pl_sd); clif_bg_emblem(pl_sd, bg->g); clif_bg_memberlist(pl_sd); } if( pl_sd != sd ) clif_bg_hp_single(sd->fd,pl_sd); } if( battle_config.bg_eAmod_mode ) clif_guild_emblem_area(&sd->bl); clif_bg_hp(sd); clif_bg_xy(sd); return 1; }