// ギルド敵対 int guild_opposition(struct map_session_data *sd,int char_id) { struct map_session_data *tsd=map_id2sd(char_id); struct guild *g; int i; nullpo_retr(0, sd); g=guild_search(sd->status.guild_id); if(g==NULL || tsd==NULL) return 0; // Prevent creation opposition with same guilds [LuzZza] if(sd->status.guild_id == tsd->status.guild_id) return 0; if( guild_get_alliance_count(g,1)>=3 ) // 敵対数確認 clif_guild_oppositionack(sd,1); for(i=0;i<MAX_GUILDALLIANCE;i++){ // すでに関係を持っているか確認 if(g->alliance[i].guild_id==tsd->status.guild_id){ if(g->alliance[i].opposition==1){ // すでに敵対 clif_guild_oppositionack(sd,2); return 0; }else // 同盟破棄 intif_guild_alliance( sd->status.guild_id,tsd->status.guild_id, sd->status.account_id,tsd->status.account_id,8 ); } } // inter鯖に敵対要請 intif_guild_alliance( sd->status.guild_id,tsd->status.guild_id, sd->status.account_id,tsd->status.account_id,1 ); return 0; }
// ギルド勧誘への返答 int guild_reply_reqalliance(struct map_session_data *sd,int account_id,int flag) { struct map_session_data *tsd; nullpo_ret(sd); tsd= map_id2sd( account_id ); if (!tsd) { //Character left? Cancel alliance. clif_guild_allianceack(sd,3); return 0; } if(sd->guild_alliance!=tsd->status.guild_id) // 勧誘とギルドIDが違う return 0; if(flag==1){ // 承諾 int i; struct guild *g,*tg; // 同盟数再確認 g=guild_search(sd->status.guild_id); tg=guild_search(tsd->status.guild_id); if(g==NULL || guild_get_alliance_count(g,0) >= battle_config.max_guild_alliance){ clif_guild_allianceack(sd,4); clif_guild_allianceack(tsd,3); return 0; } if(tg==NULL || guild_get_alliance_count(tg,0) >= battle_config.max_guild_alliance){ clif_guild_allianceack(sd,3); clif_guild_allianceack(tsd,4); return 0; } for(i=0;i<MAX_GUILDALLIANCE;i++){ if(g->alliance[i].guild_id==tsd->status.guild_id && g->alliance[i].opposition==1) intif_guild_alliance( sd->status.guild_id,tsd->status.guild_id, sd->status.account_id,tsd->status.account_id,9 ); } for(i=0;i<MAX_GUILDALLIANCE;i++){ if(tg->alliance[i].guild_id==sd->status.guild_id && tg->alliance[i].opposition==1) intif_guild_alliance( tsd->status.guild_id,sd->status.guild_id, tsd->status.account_id,sd->status.account_id,9 ); } // inter鯖へ同盟要請 intif_guild_alliance( sd->status.guild_id,tsd->status.guild_id, sd->status.account_id,tsd->status.account_id,0 ); return 0; }else{ // 拒否 sd->guild_alliance=0; sd->guild_alliance_account=0; if(tsd!=NULL) clif_guild_allianceack(tsd,3); } return 0; }
// ギルド敵対 int guild_opposition(struct map_session_data *sd,struct map_session_data *tsd) { struct guild *g; int i; nullpo_retr(0, sd); g=guild_search(sd->status.guild_id); if(g==NULL || tsd==NULL) return 0; // Prevent creation opposition with same guilds [LuzZza] if(sd->status.guild_id == tsd->status.guild_id) return 0; if( guild_get_alliance_count(g,1)>=3 ) { clif_guild_oppositionack(sd,1); return 0; } if(agit_flag) { clif_displaymessage(sd->fd,"You cannot make oppositions during Guild Wars!"); return 0; } for(i=0;i<MAX_GUILDALLIANCE;i++){ // すでに関係を持っているか確認 if(g->alliance[i].guild_id==tsd->status.guild_id){ if(g->alliance[i].opposition==1){ // すでに敵対 clif_guild_oppositionack(sd,2); return 0; } //Change alliance to opposition. intif_guild_alliance( sd->status.guild_id,tsd->status.guild_id, sd->status.account_id,tsd->status.account_id,8 ); } } // inter鯖に敵対要請 intif_guild_alliance( sd->status.guild_id,tsd->status.guild_id, sd->status.account_id,tsd->status.account_id,1 ); return 0; }
// ギルド関係解消 int guild_delalliance(struct map_session_data *sd,int guild_id,int flag) { nullpo_ret(sd); if(agit_flag || agit2_flag || agit3_flag) { // Disable alliance breaking during woe [Valaris] clif_displaymessage(sd->fd,"Alliances cannot be broken during Guild Wars!"); return 0; } // end addition [Valaris] intif_guild_alliance( sd->status.guild_id,guild_id,sd->status.account_id,0,flag|8 ); return 0; }
// ギルド敵対 int guild_opposition(struct map_session_data *sd,struct map_session_data *tsd) { struct guild *g; int i; nullpo_ret(sd); g=guild_search(sd->status.guild_id); if(g==NULL || tsd==NULL) return 0; // Prevent creation opposition with same guilds [LuzZza] if(sd->status.guild_id == tsd->status.guild_id) return 0; if( guild_get_alliance_count(g,1) >= battle_config.max_guild_alliance ) { clif_guild_oppositionack(sd,1); return 0; } for(i=0;i<MAX_GUILDALLIANCE;i++){ // すでに関係を持っているか確認 if(g->alliance[i].guild_id==tsd->status.guild_id){ if(g->alliance[i].opposition==1){ // すでに敵対 clif_guild_oppositionack(sd,2); return 0; } if(agit_flag || agit2_flag || agit3_flag) // Prevent the changing of alliances to oppositions during WoE.. return 0; //Change alliance to opposition. intif_guild_alliance( sd->status.guild_id,tsd->status.guild_id, sd->status.account_id,tsd->status.account_id,8 ); } } // inter鯖に敵対要請 intif_guild_alliance( sd->status.guild_id,tsd->status.guild_id, sd->status.account_id,tsd->status.account_id,1 ); return 0; }
// ギルド解散通知用 int guild_broken_sub(DBKey key,void *data,va_list ap) { struct guild *g=(struct guild *)data; int guild_id=va_arg(ap,int); int i,j; struct map_session_data *sd=NULL; nullpo_ret(g); for(i=0;i<MAX_GUILDALLIANCE;i++){ // 関係を破棄 if(g->alliance[i].guild_id==guild_id){ for(j=0;j<g->max_member;j++) if( (sd=g->member[j].sd)!=NULL ) clif_guild_delalliance(sd,guild_id,g->alliance[i].opposition); intif_guild_alliance(g->guild_id, guild_id,0,0,g->alliance[i].opposition|8); g->alliance[i].guild_id=0; } } return 0; }