diff options
author | Chuck Miller <shadowmil@gmail.com> | 2009-12-25 05:00:31 -0500 |
---|---|---|
committer | Jared Adams <jaxad0127@gmail.com> | 2009-12-26 00:40:11 -0700 |
commit | 634aeeb9d58b01f9de6632a014a063ef0c4cf31e (patch) | |
tree | 70023dd2bcc12a3f96ec6f118d80e27411920531 /src/map/guild.c | |
parent | 113fcc4f0a7a0921e94bc415515dd4b393a29d60 (diff) | |
download | tmwa-634aeeb9d58b01f9de6632a014a063ef0c4cf31e.tar.gz tmwa-634aeeb9d58b01f9de6632a014a063ef0c4cf31e.tar.bz2 tmwa-634aeeb9d58b01f9de6632a014a063ef0c4cf31e.tar.xz tmwa-634aeeb9d58b01f9de6632a014a063ef0c4cf31e.zip |
Used the "indent" C formatting program from GNU to do some clean ups
The command options used was:
-nbad -bap -sc -bl -blf -bli0 -cli4 -cbi0
-di5 -nbc -bls -ip2 -nut -ts4 -bap -i4 -sob -npsl
Diffstat (limited to 'src/map/guild.c')
-rw-r--r-- | src/map/guild.c | 2798 |
1 files changed, 1566 insertions, 1232 deletions
diff --git a/src/map/guild.c b/src/map/guild.c index 1509a37..36b3e0f 100644 --- a/src/map/guild.c +++ b/src/map/guild.c @@ -28,1518 +28,1852 @@ static struct dbt *guild_expcache_db; static struct dbt *guild_infoevent_db; static struct dbt *guild_castleinfoevent_db; -struct eventlist { - char name[50]; - struct eventlist *next; +struct eventlist +{ + char name[50]; + struct eventlist *next; }; // ギルドのEXPキャッシュのフラッシュに関連する定数 -#define GUILD_PAYEXP_INVERVAL 10000 // 間隔(キャッシュの最大生存時間、ミリ秒) -#define GUILD_PAYEXP_LIST 8192 // キャッシュの最大数 +#define GUILD_PAYEXP_INVERVAL 10000 // 間隔(キャッシュの最大生存時間、ミリ秒) +#define GUILD_PAYEXP_LIST 8192 // キャッシュの最大数 // ギルドのEXPキャッシュ -struct guild_expcache { - int guild_id, account_id, char_id, exp; +struct guild_expcache +{ + int guild_id, account_id, char_id, exp; }; // ギルドスキルdbのアクセサ(今は直打ちで代用) -int guild_skill_get_inf(int id){ return 0; } -int guild_skill_get_sp(int id,int lv){ return 0; } -int guild_skill_get_range(int id){ return 0; } -int guild_skill_get_max(int id){ return (id==10004)?10:1; } - -// ギルドスキルがあるか確認 -int guild_checkskill(struct guild *g,int id){ return g->skill[id-10000].lv; } - - -int guild_payexp_timer(int tid,unsigned int tick,int id,int data); -int guild_gvg_eliminate_timer(int tid,unsigned int tick,int id,int data); - - -static int guild_read_castledb(void) +int guild_skill_get_inf (int id) { - FILE *fp; - char line[1024]; - int j,ln=0; - char *str[32],*p; - struct guild_castle *gc; - - if( (fp=fopen_("db/castle_db.txt","r"))==NULL){ - printf("can't read db/castle_db.txt\n"); - return -1; - } + return 0; +} - while(fgets(line,1020,fp)){ - if(line[0]=='/' && line[1]=='/') - continue; - memset(str,0,sizeof(str)); - gc=(struct guild_castle *)aCalloc(1,sizeof(struct guild_castle)); - for(j=0,p=line;j<6 && p;j++){ - str[j]=p; - p=strchr(p,','); - if(p) *p++=0; - } +int guild_skill_get_sp (int id, int lv) +{ + return 0; +} - gc->guild_id=0; // <Agit> Clear Data for Initialize - gc->economy=0; gc->defense=0; gc->triggerE=0; gc->triggerD=0; gc->nextTime=0; gc->payTime=0; - gc->createTime=0; gc->visibleC=0; gc->visibleG0=0; gc->visibleG1=0; gc->visibleG2=0; - gc->visibleG3=0; gc->visibleG4=0; gc->visibleG5=0; gc->visibleG6=0; gc->visibleG7=0; - gc->Ghp0=0; gc->Ghp1=0; gc->Ghp2=0; gc->Ghp3=0; gc->Ghp4=0; gc->Ghp5=0; gc->Ghp6=0; gc->Ghp7=0; // guardian HP [Valaris] +int guild_skill_get_range (int id) +{ + return 0; +} - gc->castle_id=atoi(str[0]); - memcpy(gc->map_name,str[1],24); - memcpy(gc->castle_name,str[2],24); - memcpy(gc->castle_event,str[3],24); +int guild_skill_get_max (int id) +{ + return (id == 10004) ? 10 : 1; +} - numdb_insert(castle_db,gc->castle_id,gc); +// ギルドスキルがあるか確認 +int guild_checkskill (struct guild *g, int id) +{ + return g->skill[id - 10000].lv; +} - //intif_guild_castle_info(gc->castle_id); +int guild_payexp_timer (int tid, unsigned int tick, int id, int data); +int guild_gvg_eliminate_timer (int tid, unsigned int tick, int id, int data); - ln++; - } - fclose_(fp); - printf("read db/castle_db.txt done (count=%d)\n",ln); - return 0; +static int guild_read_castledb (void) +{ + FILE *fp; + char line[1024]; + int j, ln = 0; + char *str[32], *p; + struct guild_castle *gc; + + if ((fp = fopen_ ("db/castle_db.txt", "r")) == NULL) + { + printf ("can't read db/castle_db.txt\n"); + return -1; + } + + while (fgets (line, 1020, fp)) + { + if (line[0] == '/' && line[1] == '/') + continue; + memset (str, 0, sizeof (str)); + gc = (struct guild_castle *) aCalloc (1, + sizeof (struct guild_castle)); + for (j = 0, p = line; j < 6 && p; j++) + { + str[j] = p; + p = strchr (p, ','); + if (p) + *p++ = 0; + } + + gc->guild_id = 0; // <Agit> Clear Data for Initialize + gc->economy = 0; + gc->defense = 0; + gc->triggerE = 0; + gc->triggerD = 0; + gc->nextTime = 0; + gc->payTime = 0; + gc->createTime = 0; + gc->visibleC = 0; + gc->visibleG0 = 0; + gc->visibleG1 = 0; + gc->visibleG2 = 0; + gc->visibleG3 = 0; + gc->visibleG4 = 0; + gc->visibleG5 = 0; + gc->visibleG6 = 0; + gc->visibleG7 = 0; + gc->Ghp0 = 0; + gc->Ghp1 = 0; + gc->Ghp2 = 0; + gc->Ghp3 = 0; + gc->Ghp4 = 0; + gc->Ghp5 = 0; + gc->Ghp6 = 0; + gc->Ghp7 = 0; // guardian HP [Valaris] + + gc->castle_id = atoi (str[0]); + memcpy (gc->map_name, str[1], 24); + memcpy (gc->castle_name, str[2], 24); + memcpy (gc->castle_event, str[3], 24); + + numdb_insert (castle_db, gc->castle_id, gc); + + //intif_guild_castle_info(gc->castle_id); + + ln++; + } + fclose_ (fp); + printf ("read db/castle_db.txt done (count=%d)\n", ln); + return 0; } // 初期化 -void do_init_guild(void) +void do_init_guild (void) { - guild_db=numdb_init(); - castle_db=numdb_init(); - guild_expcache_db=numdb_init(); - guild_infoevent_db=numdb_init(); - guild_castleinfoevent_db=numdb_init(); + guild_db = numdb_init (); + castle_db = numdb_init (); + guild_expcache_db = numdb_init (); + guild_infoevent_db = numdb_init (); + guild_castleinfoevent_db = numdb_init (); - guild_read_castledb(); + guild_read_castledb (); - add_timer_func_list(guild_gvg_eliminate_timer,"guild_gvg_eliminate_timer"); - add_timer_func_list(guild_payexp_timer,"guild_payexp_timer"); - add_timer_interval(gettick()+GUILD_PAYEXP_INVERVAL,guild_payexp_timer,0,0,GUILD_PAYEXP_INVERVAL); + add_timer_func_list (guild_gvg_eliminate_timer, + "guild_gvg_eliminate_timer"); + add_timer_func_list (guild_payexp_timer, "guild_payexp_timer"); + add_timer_interval (gettick () + GUILD_PAYEXP_INVERVAL, + guild_payexp_timer, 0, 0, GUILD_PAYEXP_INVERVAL); } - // 検索 -struct guild *guild_search(int guild_id) +struct guild *guild_search (int guild_id) { - return numdb_search(guild_db,guild_id); + return numdb_search (guild_db, guild_id); } -int guild_searchname_sub(void *key,void *data,va_list ap) + +int guild_searchname_sub (void *key, void *data, va_list ap) { - struct guild *g=(struct guild *)data,**dst; - char *str; - str=va_arg(ap,char *); - dst=va_arg(ap,struct guild **); - if(strcmpi(g->name,str)==0) - *dst=g; - return 0; + struct guild *g = (struct guild *) data, **dst; + char *str; + str = va_arg (ap, char *); + dst = va_arg (ap, struct guild **); + if (strcmpi (g->name, str) == 0) + *dst = g; + return 0; } + // ギルド名検索 -struct guild* guild_searchname(char *str) +struct guild *guild_searchname (char *str) { - struct guild *g=NULL; - numdb_foreach(guild_db,guild_searchname_sub,str,&g); - return g; + struct guild *g = NULL; + numdb_foreach (guild_db, guild_searchname_sub, str, &g); + return g; } -struct guild_castle *guild_castle_search(int gcid) + +struct guild_castle *guild_castle_search (int gcid) { - return numdb_search(castle_db,gcid); + return numdb_search (castle_db, gcid); } // mapnameに対応したアジトのgcを返す -struct guild_castle *guild_mapname2gc(char *mapname) +struct guild_castle *guild_mapname2gc (char *mapname) { - int i; - struct guild_castle *gc=NULL; - for(i=0;i<MAX_GUILDCASTLE;i++){ - gc=guild_castle_search(i); - if(!gc) continue; - if(strcmp(gc->map_name,mapname)==0) return gc; - } - return NULL; + int i; + struct guild_castle *gc = NULL; + for (i = 0; i < MAX_GUILDCASTLE; i++) + { + gc = guild_castle_search (i); + if (!gc) + continue; + if (strcmp (gc->map_name, mapname) == 0) + return gc; + } + return NULL; } // ログイン中のギルドメンバーの1人のsdを返す -struct map_session_data *guild_getavailablesd(struct guild *g) +struct map_session_data *guild_getavailablesd (struct guild *g) { - int i; + int i; - nullpo_retr(NULL, g); + nullpo_retr (NULL, g); - for(i=0;i<g->max_member;i++) - if(g->member[i].sd!=NULL) - return g->member[i].sd; - return NULL; + for (i = 0; i < g->max_member; i++) + if (g->member[i].sd != NULL) + return g->member[i].sd; + return NULL; } // ギルドメンバーのインデックスを返す -int guild_getindex(struct guild *g,int account_id,int char_id) +int guild_getindex (struct guild *g, int account_id, int char_id) { - int i; - if(g==NULL) - return -1; - for(i=0;i<g->max_member;i++) - if( g->member[i].account_id==account_id && - g->member[i].char_id==char_id ) - return i; - return -1; + int i; + if (g == NULL) + return -1; + for (i = 0; i < g->max_member; i++) + if (g->member[i].account_id == account_id && + g->member[i].char_id == char_id) + return i; + return -1; } + // ギルドメンバーの役職を返す -int guild_getposition(struct map_session_data *sd,struct guild *g) +int guild_getposition (struct map_session_data *sd, struct guild *g) { - int i; + int i; - nullpo_retr(-1, sd); + nullpo_retr (-1, sd); - if(g==NULL && (g=guild_search(sd->status.guild_id))==NULL) - return -1; - for(i=0;i<g->max_member;i++) - if( g->member[i].account_id==sd->status.account_id && - g->member[i].char_id==sd->status.char_id ) - return g->member[i].position; - return -1; + if (g == NULL && (g = guild_search (sd->status.guild_id)) == NULL) + return -1; + for (i = 0; i < g->max_member; i++) + if (g->member[i].account_id == sd->status.account_id && + g->member[i].char_id == sd->status.char_id) + return g->member[i].position; + return -1; } // メンバー情報の作成 -void guild_makemember(struct guild_member *m,struct map_session_data *sd) -{ - nullpo_retv(sd); - - memset(m,0,sizeof(struct guild_member)); - m->account_id =sd->status.account_id; - m->char_id =sd->status.char_id; - m->hair =sd->status.hair; - m->hair_color =sd->status.hair_color; - m->gender =sd->sex; - m->class =sd->status.class; - m->lv =sd->status.base_level; - m->exp =0; - m->exp_payper =0; - m->online =1; - m->position =MAX_GUILDPOSITION-1; - memcpy(m->name,sd->status.name,24); - return; +void guild_makemember (struct guild_member *m, struct map_session_data *sd) +{ + nullpo_retv (sd); + + memset (m, 0, sizeof (struct guild_member)); + m->account_id = sd->status.account_id; + m->char_id = sd->status.char_id; + m->hair = sd->status.hair; + m->hair_color = sd->status.hair_color; + m->gender = sd->sex; + m->class = sd->status.class; + m->lv = sd->status.base_level; + m->exp = 0; + m->exp_payper = 0; + m->online = 1; + m->position = MAX_GUILDPOSITION - 1; + memcpy (m->name, sd->status.name, 24); + return; } + // ギルド競合確認 -int guild_check_conflict(struct map_session_data *sd) +int guild_check_conflict (struct map_session_data *sd) { - nullpo_retr(0, sd); + nullpo_retr (0, sd); - intif_guild_checkconflict(sd->status.guild_id, - sd->status.account_id,sd->status.char_id); - return 0; + intif_guild_checkconflict (sd->status.guild_id, + sd->status.account_id, sd->status.char_id); + return 0; } // ギルドのEXPキャッシュをinter鯖にフラッシュする -int guild_payexp_timer_sub(void *key,void *data,va_list ap) +int guild_payexp_timer_sub (void *key, void *data, va_list ap) { - int i, *dellist,*delp, dataid=(int)key; - struct guild_expcache *c; - struct guild *g; + int i, *dellist, *delp, dataid = (int) key; + struct guild_expcache *c; + struct guild *g; - nullpo_retr(0, ap); - nullpo_retr(0, c=(struct guild_expcache *)data); - nullpo_retr(0, dellist=va_arg(ap,int *)); - nullpo_retr(0, delp=va_arg(ap,int *)); + nullpo_retr (0, ap); + nullpo_retr (0, c = (struct guild_expcache *) data); + nullpo_retr (0, dellist = va_arg (ap, int *)); + nullpo_retr (0, delp = va_arg (ap, int *)); - if( *delp>=GUILD_PAYEXP_LIST || (g=guild_search(c->guild_id))==NULL ) - return 0; - if( ( i=guild_getindex(g,c->account_id,c->char_id) )<0 ) - return 0; + if (*delp >= GUILD_PAYEXP_LIST + || (g = guild_search (c->guild_id)) == NULL) + return 0; + if ((i = guild_getindex (g, c->account_id, c->char_id)) < 0) + return 0; - g->member[i].exp+=c->exp; - intif_guild_change_memberinfo(g->guild_id,c->account_id,c->char_id, - GMI_EXP,&g->member[i].exp,sizeof(g->member[i].exp)); - c->exp=0; + g->member[i].exp += c->exp; + intif_guild_change_memberinfo (g->guild_id, c->account_id, c->char_id, + GMI_EXP, &g->member[i].exp, + sizeof (g->member[i].exp)); + c->exp = 0; - dellist[(*delp)++]=dataid; - free(c); - return 0; + dellist[(*delp)++] = dataid; + free (c); + return 0; } -int guild_payexp_timer(int tid,unsigned int tick,int id,int data) + +int guild_payexp_timer (int tid, unsigned int tick, int id, int data) { - int dellist[GUILD_PAYEXP_LIST],delp=0,i; - numdb_foreach(guild_expcache_db,guild_payexp_timer_sub, - dellist,&delp); - for(i=0;i<delp;i++) - numdb_erase(guild_expcache_db,dellist[i]); -// if(battle_config.etc_log) -// printf("guild exp %d charactor's exp flushed !\n",delp); - return 0; + int dellist[GUILD_PAYEXP_LIST], delp = 0, i; + numdb_foreach (guild_expcache_db, guild_payexp_timer_sub, dellist, &delp); + for (i = 0; i < delp; i++) + numdb_erase (guild_expcache_db, dellist[i]); +// if(battle_config.etc_log) +// printf("guild exp %d charactor's exp flushed !\n",delp); + return 0; } //------------------------------------------------------------------------ // 作成要求 -int guild_create(struct map_session_data *sd,char *name) +int guild_create (struct map_session_data *sd, char *name) { - nullpo_retr(0, sd); - - if(sd->status.guild_id==0){ - if(!battle_config.guild_emperium_check || pc_search_inventory(sd,714) >= 0) { - struct guild_member m; - guild_makemember(&m,sd); - m.position=0; - intif_guild_create(name,&m); - } else - clif_guild_created(sd,3); // エンペリウムがいない - }else - clif_guild_created(sd,1); // すでに所属している - - return 0; + nullpo_retr (0, sd); + + if (sd->status.guild_id == 0) + { + if (!battle_config.guild_emperium_check + || pc_search_inventory (sd, 714) >= 0) + { + struct guild_member m; + guild_makemember (&m, sd); + m.position = 0; + intif_guild_create (name, &m); + } + else + clif_guild_created (sd, 3); // エンペリウムがいない + } + else + clif_guild_created (sd, 1); // すでに所属している + + return 0; } // 作成可否 -int guild_created(int account_id,int guild_id) -{ - struct map_session_data *sd=map_id2sd(account_id); - - if(sd==NULL) - return 0; - if(guild_id>0) { - struct guild *g; - sd->status.guild_id=guild_id; - sd->guild_sended=0; - if((g=numdb_search(guild_db,guild_id))!=NULL){ - printf("guild: id already exists!\n"); - exit(1); - } - clif_guild_created(sd,0); - if(battle_config.guild_emperium_check) - pc_delitem(sd,pc_search_inventory(sd,714),1,0); // エンペリウム消耗 - } else { - clif_guild_created(sd,2); // 作成失敗(同名ギルド存在) - } - return 0; +int guild_created (int account_id, int guild_id) +{ + struct map_session_data *sd = map_id2sd (account_id); + + if (sd == NULL) + return 0; + if (guild_id > 0) + { + struct guild *g; + sd->status.guild_id = guild_id; + sd->guild_sended = 0; + if ((g = numdb_search (guild_db, guild_id)) != NULL) + { + printf ("guild: id already exists!\n"); + exit (1); + } + clif_guild_created (sd, 0); + if (battle_config.guild_emperium_check) + pc_delitem (sd, pc_search_inventory (sd, 714), 1, 0); // エンペリウム消耗 + } + else + { + clif_guild_created (sd, 2); // 作成失敗(同名ギルド存在) + } + return 0; } // 情報要求 -int guild_request_info(int guild_id) +int guild_request_info (int guild_id) { -// if(battle_config.etc_log) -// printf("guild_request_info\n"); - return intif_guild_request_info(guild_id); +// if(battle_config.etc_log) +// printf("guild_request_info\n"); + return intif_guild_request_info (guild_id); } + // イベント付き情報要求 -int guild_npc_request_info(int guild_id,const char *event) +int guild_npc_request_info (int guild_id, const char *event) { - struct eventlist *ev; + struct eventlist *ev; - if( guild_search(guild_id) ){ - if(event && *event) - npc_event_do(event); - return 0; - } + if (guild_search (guild_id)) + { + if (event && *event) + npc_event_do (event); + return 0; + } - if(event==NULL || *event==0) - return guild_request_info(guild_id); + if (event == NULL || *event == 0) + return guild_request_info (guild_id); - ev=(struct eventlist *)aCalloc(1,sizeof(struct eventlist)); - memcpy(ev->name,event,sizeof(ev->name)); - ev->next=(struct eventlist *)numdb_search(guild_infoevent_db,guild_id); - numdb_insert(guild_infoevent_db,guild_id,ev); - return guild_request_info(guild_id); + ev = (struct eventlist *) aCalloc (1, sizeof (struct eventlist)); + memcpy (ev->name, event, sizeof (ev->name)); + ev->next = + (struct eventlist *) numdb_search (guild_infoevent_db, guild_id); + numdb_insert (guild_infoevent_db, guild_id, ev); + return guild_request_info (guild_id); } // 所属キャラの確認 -int guild_check_member(const struct guild *g) -{ - int i; - struct map_session_data *sd; - - nullpo_retr(0, g); - - for(i=0;i<fd_max;i++){ - if(session[i] && (sd=session[i]->session_data) && sd->state.auth){ - if(sd->status.guild_id==g->guild_id){ - int j,f=1; - for(j=0;j<MAX_GUILD;j++){ // データがあるか - if( g->member[j].account_id==sd->status.account_id && - g->member[j].char_id==sd->status.char_id) - f=0; - } - if(f){ - sd->status.guild_id=0; - sd->guild_sended=0; - sd->guild_emblem_id=0; - if(battle_config.error_log) - printf("guild: check_member %d[%s] is not member\n",sd->status.account_id,sd->status.name); - } - } - } - } - return 0; +int guild_check_member (const struct guild *g) +{ + int i; + struct map_session_data *sd; + + nullpo_retr (0, g); + + for (i = 0; i < fd_max; i++) + { + if (session[i] && (sd = session[i]->session_data) && sd->state.auth) + { + if (sd->status.guild_id == g->guild_id) + { + int j, f = 1; + for (j = 0; j < MAX_GUILD; j++) + { // データがあるか + if (g->member[j].account_id == sd->status.account_id && + g->member[j].char_id == sd->status.char_id) + f = 0; + } + if (f) + { + sd->status.guild_id = 0; + sd->guild_sended = 0; + sd->guild_emblem_id = 0; + if (battle_config.error_log) + printf ("guild: check_member %d[%s] is not member\n", + sd->status.account_id, sd->status.name); + } + } + } + } + return 0; } + // 情報所得失敗(そのIDのキャラを全部未所属にする) -int guild_recv_noinfo(int guild_id) -{ - int i; - struct map_session_data *sd; - for(i=0;i<fd_max;i++){ - if(session[i] && (sd=session[i]->session_data) && sd->state.auth){ - if(sd->status.guild_id==guild_id) - sd->status.guild_id=0; - } - } - return 0; +int guild_recv_noinfo (int guild_id) +{ + int i; + struct map_session_data *sd; + for (i = 0; i < fd_max; i++) + { + if (session[i] && (sd = session[i]->session_data) && sd->state.auth) + { + if (sd->status.guild_id == guild_id) + sd->status.guild_id = 0; + } + } + return 0; } + // 情報所得 -int guild_recv_info(struct guild *sg) -{ - struct guild *g,before; - int i,bm,m; - struct eventlist *ev,*ev2; - - nullpo_retr(0, sg); - - if((g=numdb_search(guild_db,sg->guild_id))==NULL){ - g=(struct guild *)aCalloc(1,sizeof(struct guild)); - numdb_insert(guild_db,sg->guild_id,g); - before=*sg; - - // 最初のロードなのでユーザーのチェックを行う - guild_check_member(sg); - }else - before=*g; - memcpy(g,sg,sizeof(struct guild)); - - for(i=bm=m=0;i<g->max_member;i++){ // sdの設定と人数の確認 - if(g->member[i].account_id>0){ - struct map_session_data *sd = map_id2sd(g->member[i].account_id); - g->member[i].sd=(sd!=NULL && - sd->status.char_id==g->member[i].char_id && - sd->status.guild_id==g->guild_id)? sd:NULL; - m++; - }else - g->member[i].sd=NULL; - if(before.member[i].account_id>0) - bm++; - } - - for(i=0;i<g->max_member;i++){ // 情報の送信 - struct map_session_data *sd = g->member[i].sd; - if( sd==NULL ) - continue; - - if( before.guild_lv!=g->guild_lv || bm!=m || - before.max_member!=g->max_member ){ - clif_guild_basicinfo(sd); // 基本情報送信 - clif_guild_emblem(sd,g); // エンブレム送信 - } - - if(bm!=m){ // メンバー情報送信 - clif_guild_memberlist(g->member[i].sd); - } - - if( before.skill_point!=g->skill_point) - clif_guild_skillinfo(sd); // スキル情報送信 - - if( sd->guild_sended==0){ // 未送信なら所属情報も送る - clif_guild_belonginfo(sd,g); - clif_guild_notice(sd,g); - sd->guild_emblem_id=g->emblem_id; - sd->guild_sended=1; - } - } - - // イベントの発生 - if( (ev=numdb_search(guild_infoevent_db,sg->guild_id))!=NULL ){ - numdb_erase(guild_infoevent_db,sg->guild_id); - for(;ev;ev2=ev->next,free(ev),ev=ev2){ - npc_event_do(ev->name); - } - } - - return 0; +int guild_recv_info (struct guild *sg) +{ + struct guild *g, before; + int i, bm, m; + struct eventlist *ev, *ev2; + + nullpo_retr (0, sg); + + if ((g = numdb_search (guild_db, sg->guild_id)) == NULL) + { + g = (struct guild *) aCalloc (1, sizeof (struct guild)); + numdb_insert (guild_db, sg->guild_id, g); + before = *sg; + + // 最初のロードなのでユーザーのチェックを行う + guild_check_member (sg); + } + else + before = *g; + memcpy (g, sg, sizeof (struct guild)); + + for (i = bm = m = 0; i < g->max_member; i++) + { // sdの設定と人数の確認 + if (g->member[i].account_id > 0) + { + struct map_session_data *sd = map_id2sd (g->member[i].account_id); + g->member[i].sd = (sd != NULL && + sd->status.char_id == g->member[i].char_id && + sd->status.guild_id == + g->guild_id) ? sd : NULL; + m++; + } + else + g->member[i].sd = NULL; + if (before.member[i].account_id > 0) + bm++; + } + + for (i = 0; i < g->max_member; i++) + { // 情報の送信 + struct map_session_data *sd = g->member[i].sd; + if (sd == NULL) + continue; + + if (before.guild_lv != g->guild_lv || bm != m || + before.max_member != g->max_member) + { + clif_guild_basicinfo (sd); // 基本情報送信 + clif_guild_emblem (sd, g); // エンブレム送信 + } + + if (bm != m) + { // メンバー情報送信 + clif_guild_memberlist (g->member[i].sd); + } + + if (before.skill_point != g->skill_point) + clif_guild_skillinfo (sd); // スキル情報送信 + + if (sd->guild_sended == 0) + { // 未送信なら所属情報も送る + clif_guild_belonginfo (sd, g); + clif_guild_notice (sd, g); + sd->guild_emblem_id = g->emblem_id; + sd->guild_sended = 1; + } + } + + // イベントの発生 + if ((ev = numdb_search (guild_infoevent_db, sg->guild_id)) != NULL) + { + numdb_erase (guild_infoevent_db, sg->guild_id); + for (; ev; ev2 = ev->next, free (ev), ev = ev2) + { + npc_event_do (ev->name); + } + } + + return 0; } - // ギルドへの勧誘 -int guild_invite(struct map_session_data *sd,int account_id) -{ - struct map_session_data *tsd; - struct guild *g; - int i; - - nullpo_retr(0, sd); - - tsd= map_id2sd(account_id); - g=guild_search(sd->status.guild_id); - - if(tsd==NULL || g==NULL) - return 0; - if(!battle_config.invite_request_check) { - if (tsd->party_invite>0 || tsd->trade_partner) { // 相手が取引中かどうか - clif_guild_inviteack(sd,0); - return 0; - } - } - if( tsd->status.guild_id>0 || tsd->guild_invite>0 ){ // 相手の所属確認 - clif_guild_inviteack(sd,0); - return 0; - } - - // 定員確認 - for(i=0;i<g->max_member;i++) - if(g->member[i].account_id==0) - break; - if(i==g->max_member){ - clif_guild_inviteack(sd,3); - return 0; - } - - tsd->guild_invite=sd->status.guild_id; - tsd->guild_invite_account=sd->status.account_id; - - clif_guild_invite(tsd,g); - return 0; +int guild_invite (struct map_session_data *sd, int account_id) +{ + struct map_session_data *tsd; + struct guild *g; + int i; + + nullpo_retr (0, sd); + + tsd = map_id2sd (account_id); + g = guild_search (sd->status.guild_id); + + if (tsd == NULL || g == NULL) + return 0; + if (!battle_config.invite_request_check) + { + if (tsd->party_invite > 0 || tsd->trade_partner) + { // 相手が取引中かどうか + clif_guild_inviteack (sd, 0); + return 0; + } + } + if (tsd->status.guild_id > 0 || tsd->guild_invite > 0) + { // 相手の所属確認 + clif_guild_inviteack (sd, 0); + return 0; + } + + // 定員確認 + for (i = 0; i < g->max_member; i++) + if (g->member[i].account_id == 0) + break; + if (i == g->max_member) + { + clif_guild_inviteack (sd, 3); + return 0; + } + + tsd->guild_invite = sd->status.guild_id; + tsd->guild_invite_account = sd->status.account_id; + + clif_guild_invite (tsd, g); + return 0; } + // ギルド勧誘への返答 -int guild_reply_invite(struct map_session_data *sd,int guild_id,int flag) -{ - struct map_session_data *tsd; - - nullpo_retr(0, sd); - nullpo_retr(0, tsd= map_id2sd( sd->guild_invite_account )); - - if(sd->guild_invite!=guild_id) // 勧誘とギルドIDが違う - return 0; - - if(flag==1){ // 承諾 - struct guild_member m; - struct guild *g; - int i; - - // 定員確認 - if( (g=guild_search(tsd->status.guild_id))==NULL ){ - sd->guild_invite=0; - sd->guild_invite_account=0; - return 0; - } - for(i=0;i<g->max_member;i++) - if(g->member[i].account_id==0) - break; - if(i==g->max_member){ - sd->guild_invite=0; - sd->guild_invite_account=0; - clif_guild_inviteack(tsd,3); - return 0; - } - - - //inter鯖へ追加要求 - guild_makemember(&m,sd); - intif_guild_addmember( sd->guild_invite, &m ); - return 0; - }else{ // 拒否 - sd->guild_invite=0; - sd->guild_invite_account=0; - if(tsd==NULL) - return 0; - clif_guild_inviteack(tsd,1); - } - return 0; +int guild_reply_invite (struct map_session_data *sd, int guild_id, int flag) +{ + struct map_session_data *tsd; + + nullpo_retr (0, sd); + nullpo_retr (0, tsd = map_id2sd (sd->guild_invite_account)); + + if (sd->guild_invite != guild_id) // 勧誘とギルドIDが違う + return 0; + + if (flag == 1) + { // 承諾 + struct guild_member m; + struct guild *g; + int i; + + // 定員確認 + if ((g = guild_search (tsd->status.guild_id)) == NULL) + { + sd->guild_invite = 0; + sd->guild_invite_account = 0; + return 0; + } + for (i = 0; i < g->max_member; i++) + if (g->member[i].account_id == 0) + break; + if (i == g->max_member) + { + sd->guild_invite = 0; + sd->guild_invite_account = 0; + clif_guild_inviteack (tsd, 3); + return 0; + } + + //inter鯖へ追加要求 + guild_makemember (&m, sd); + intif_guild_addmember (sd->guild_invite, &m); + return 0; + } + else + { // 拒否 + sd->guild_invite = 0; + sd->guild_invite_account = 0; + if (tsd == NULL) + return 0; + clif_guild_inviteack (tsd, 1); + } + return 0; } + // ギルドメンバが追加された -int guild_member_added(int guild_id,int account_id,int char_id,int flag) +int guild_member_added (int guild_id, int account_id, int char_id, int flag) { - struct map_session_data *sd= map_id2sd(account_id),*sd2; - struct guild *g; + struct map_session_data *sd = map_id2sd (account_id), *sd2; + struct guild *g; - if( (g=guild_search(guild_id))==NULL ) - return 0; + if ((g = guild_search (guild_id)) == NULL) + return 0; - if((sd==NULL || sd->guild_invite==0) && flag==0){ - // キャラ側に登録できなかったため脱退要求を出す - if(battle_config.error_log) - printf("guild: member added error %d is not online\n",account_id); - intif_guild_leave(guild_id,account_id,char_id,0,"**登録失敗**"); - return 0; - } - sd->guild_invite=0; - sd->guild_invite_account=0; + if ((sd == NULL || sd->guild_invite == 0) && flag == 0) + { + // キャラ側に登録できなかったため脱退要求を出す + if (battle_config.error_log) + printf ("guild: member added error %d is not online\n", + account_id); + intif_guild_leave (guild_id, account_id, char_id, 0, "**登録失敗**"); + return 0; + } + sd->guild_invite = 0; + sd->guild_invite_account = 0; - sd2=map_id2sd(sd->guild_invite_account); + sd2 = map_id2sd (sd->guild_invite_account); - if(flag==1){ // 失敗 - if( sd2!=NULL ) - clif_guild_inviteack(sd2,3); - return 0; - } + if (flag == 1) + { // 失敗 + if (sd2 != NULL) + clif_guild_inviteack (sd2, 3); + return 0; + } - // 成功 - sd->guild_sended=0; - sd->status.guild_id=guild_id; + // 成功 + sd->guild_sended = 0; + sd->status.guild_id = guild_id; - if( sd2!=NULL ) - clif_guild_inviteack(sd2,2); + if (sd2 != NULL) + clif_guild_inviteack (sd2, 2); - // いちおう競合確認 - guild_check_conflict(sd); + // いちおう競合確認 + guild_check_conflict (sd); - return 0; + return 0; } // ギルド脱退要求 -int guild_leave(struct map_session_data *sd,int guild_id, - int account_id,int char_id,const char *mes) +int guild_leave (struct map_session_data *sd, int guild_id, + int account_id, int char_id, const char *mes) { - struct guild *g; - int i; + struct guild *g; + int i; - nullpo_retr(0, sd); + nullpo_retr (0, sd); - g = guild_search(sd->status.guild_id); + g = guild_search (sd->status.guild_id); - if(g==NULL) - return 0; + if (g == NULL) + return 0; - if( sd->status.account_id!=account_id || - sd->status.char_id!=char_id || sd->status.guild_id!=guild_id) - return 0; + if (sd->status.account_id != account_id || + sd->status.char_id != char_id || sd->status.guild_id != guild_id) + return 0; - for(i=0;i<g->max_member;i++){ // 所属しているか - if( g->member[i].account_id==sd->status.account_id && - g->member[i].char_id==sd->status.char_id ){ - intif_guild_leave(g->guild_id,sd->status.account_id,sd->status.char_id,0,mes); - return 0; - } - } - return 0; + for (i = 0; i < g->max_member; i++) + { // 所属しているか + if (g->member[i].account_id == sd->status.account_id && + g->member[i].char_id == sd->status.char_id) + { + intif_guild_leave (g->guild_id, sd->status.account_id, + sd->status.char_id, 0, mes); + return 0; + } + } + return 0; } + // ギルド追放要求 -int guild_explusion(struct map_session_data *sd,int guild_id, - int account_id,int char_id,const char *mes) +int guild_explusion (struct map_session_data *sd, int guild_id, + int account_id, int char_id, const char *mes) { - struct guild *g; - int i,ps; + struct guild *g; + int i, ps; - nullpo_retr(0, sd); + nullpo_retr (0, sd); - g = guild_search(sd->status.guild_id); + g = guild_search (sd->status.guild_id); - if(g==NULL) - return 0; + if (g == NULL) + return 0; - if( sd->status.guild_id!=guild_id) - return 0; + if (sd->status.guild_id != guild_id) + return 0; - if( (ps=guild_getposition(sd,g))<0 || !(g->position[ps].mode&0x0010) ) - return 0; // 処罰権限無し + if ((ps = guild_getposition (sd, g)) < 0 + || !(g->position[ps].mode & 0x0010)) + 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 ){ - intif_guild_leave(g->guild_id,account_id,char_id,1,mes); - return 0; - } - } - 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) + { + intif_guild_leave (g->guild_id, account_id, char_id, 1, mes); + return 0; + } + } + return 0; } + // ギルドメンバが脱退した -int guild_member_leaved(int guild_id,int account_id,int char_id,int flag, - const char *name,const char *mes) -{ - struct map_session_data *sd=map_id2sd(account_id); - struct guild *g=guild_search(guild_id); - int i; - - if(g!=NULL){ - int i; - for(i=0;i<g->max_member;i++) - if( g->member[i].account_id==account_id && - g->member[i].char_id==char_id ){ - struct map_session_data *sd2=sd; - if(sd2==NULL) - sd2=guild_getavailablesd(g); - else - { - if(flag==0) - clif_guild_leave(sd2,name,mes); - else - clif_guild_explusion(sd2,name,mes,account_id); - } - g->member[i].account_id=0; - g->member[i].sd=NULL; - } - } - 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->guild_sended=0; - } - - // メンバーリストを全員に再通知 - for(i=0;i<g->max_member;i++){ - if( g->member[i].sd!=NULL ) - clif_guild_memberlist(g->member[i].sd); - } - - return 0; +int guild_member_leaved (int guild_id, int account_id, int char_id, int flag, + const char *name, const char *mes) +{ + struct map_session_data *sd = map_id2sd (account_id); + struct guild *g = guild_search (guild_id); + int i; + + if (g != NULL) + { + int i; + for (i = 0; i < g->max_member; i++) + if (g->member[i].account_id == account_id && + g->member[i].char_id == char_id) + { + struct map_session_data *sd2 = sd; + if (sd2 == NULL) + sd2 = guild_getavailablesd (g); + else + { + if (flag == 0) + clif_guild_leave (sd2, name, mes); + else + clif_guild_explusion (sd2, name, mes, account_id); + } + g->member[i].account_id = 0; + g->member[i].sd = NULL; + } + } + 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->guild_sended = 0; + } + + // メンバーリストを全員に再通知 + for (i = 0; i < g->max_member; i++) + { + if (g->member[i].sd != NULL) + clif_guild_memberlist (g->member[i].sd); + } + + return 0; } + // ギルドメンバのオンライン状態/Lv更新送信 -int guild_send_memberinfoshort(struct map_session_data *sd,int online) -{ - struct guild *g; - - nullpo_retr(0, sd); - - if(sd->status.guild_id<=0) - return 0; - g=guild_search(sd->status.guild_id); - if(g==NULL) - return 0; - - intif_guild_memberinfoshort(g->guild_id, - sd->status.account_id,sd->status.char_id,online,sd->status.base_level,sd->status.class); - - if( !online ){ // ログアウトするならsdをクリアして終了 - int i=guild_getindex(g,sd->status.account_id,sd->status.char_id); - if(i>=0) - g->member[i].sd=NULL; - return 0; - } - - if( sd->guild_sended!=0 ) // ギルド初期送信データは送信済み - return 0; - - // 競合確認 - guild_check_conflict(sd); - - // あるならギルド初期送信データ送信 - if( (g=guild_search(sd->status.guild_id))!=NULL ){ - guild_check_member(g); // 所属を確認する - if(sd->status.guild_id==g->guild_id){ - clif_guild_belonginfo(sd,g); - clif_guild_notice(sd,g); - sd->guild_sended=1; - sd->guild_emblem_id=g->emblem_id; - } - } - return 0; +int guild_send_memberinfoshort (struct map_session_data *sd, int online) +{ + struct guild *g; + + nullpo_retr (0, sd); + + if (sd->status.guild_id <= 0) + return 0; + g = guild_search (sd->status.guild_id); + if (g == NULL) + return 0; + + intif_guild_memberinfoshort (g->guild_id, + sd->status.account_id, sd->status.char_id, + online, sd->status.base_level, + sd->status.class); + + if (!online) + { // ログアウトするならsdをクリアして終了 + int i = + guild_getindex (g, sd->status.account_id, sd->status.char_id); + if (i >= 0) + g->member[i].sd = NULL; + return 0; + } + + if (sd->guild_sended != 0) // ギルド初期送信データは送信済み + return 0; + + // 競合確認 + guild_check_conflict (sd); + + // あるならギルド初期送信データ送信 + if ((g = guild_search (sd->status.guild_id)) != NULL) + { + guild_check_member (g); // 所属を確認する + if (sd->status.guild_id == g->guild_id) + { + clif_guild_belonginfo (sd, g); + clif_guild_notice (sd, g); + sd->guild_sended = 1; + sd->guild_emblem_id = g->emblem_id; + } + } + return 0; } + // ギルドメンバのオンライン状態/Lv更新通知 -int guild_recv_memberinfoshort(int guild_id,int account_id,int char_id,int online,int lv,int class) -{ - int i,alv,c,idx=0,om=0,oldonline=-1; - struct guild *g=guild_search(guild_id); - if(g==NULL) - return 0; - for(i=0,alv=0,c=0,om=0;i<g->max_member;i++){ - struct guild_member *m=&g->member[i]; - if(m->account_id==account_id && m->char_id==char_id ){ - oldonline=m->online; - m->online=online; - m->lv=lv; - m->class=class; - idx=i; - } - if(m->account_id>0){ - alv+=m->lv; - c++; - } - if(m->online) - om++; - } - if(idx==g->max_member){ - if(battle_config.error_log) - printf("guild: not found member %d,%d on %d[%s]\n", account_id,char_id,guild_id,g->name); - return 0; - } - g->average_lv=alv/c; - g->connect_member=om; - - if(oldonline!=online) // オンライン状態が変わったので通知 - clif_guild_memberlogin_notice(g,idx,online); - - for(i=0;i<g->max_member;i++){ // sd再設定 - struct map_session_data *sd= map_id2sd(g->member[i].account_id); - g->member[i].sd=(sd!=NULL && - sd->status.char_id==g->member[i].char_id && - sd->status.guild_id==guild_id)?sd:NULL; - } - - // ここにクライアントに送信処理が必要 - - return 0; +int guild_recv_memberinfoshort (int guild_id, int account_id, int char_id, + int online, int lv, int class) +{ + int i, alv, c, idx = 0, om = 0, oldonline = -1; + struct guild *g = guild_search (guild_id); + if (g == NULL) + return 0; + for (i = 0, alv = 0, c = 0, om = 0; i < g->max_member; i++) + { + struct guild_member *m = &g->member[i]; + if (m->account_id == account_id && m->char_id == char_id) + { + oldonline = m->online; + m->online = online; + m->lv = lv; + m->class = class; + idx = i; + } + if (m->account_id > 0) + { + alv += m->lv; + c++; + } + if (m->online) + om++; + } + if (idx == g->max_member) + { + if (battle_config.error_log) + printf ("guild: not found member %d,%d on %d[%s]\n", account_id, + char_id, guild_id, g->name); + return 0; + } + g->average_lv = alv / c; + g->connect_member = om; + + if (oldonline != online) // オンライン状態が変わったので通知 + clif_guild_memberlogin_notice (g, idx, online); + + for (i = 0; i < g->max_member; i++) + { // sd再設定 + struct map_session_data *sd = map_id2sd (g->member[i].account_id); + g->member[i].sd = (sd != NULL && + sd->status.char_id == g->member[i].char_id && + sd->status.guild_id == guild_id) ? sd : NULL; + } + + // ここにクライアントに送信処理が必要 + + return 0; } + // ギルド会話送信 -int guild_send_message(struct map_session_data *sd,char *mes,int len) +int guild_send_message (struct map_session_data *sd, char *mes, int len) { - nullpo_retr(0, sd); + nullpo_retr (0, sd); - if(sd->status.guild_id==0) - return 0; - intif_guild_message(sd->status.guild_id,sd->status.account_id,mes,len); - return 0; + if (sd->status.guild_id == 0) + return 0; + intif_guild_message (sd->status.guild_id, sd->status.account_id, mes, + len); + return 0; } + // ギルド会話受信 -int guild_recv_message(int guild_id,int account_id,char *mes,int len) +int guild_recv_message (int guild_id, int account_id, char *mes, int len) { - struct guild *g; - if( (g=guild_search(guild_id))==NULL) - return 0; - clif_guild_message(g,account_id,mes,len); - return 0; + struct guild *g; + if ((g = guild_search (guild_id)) == NULL) + return 0; + clif_guild_message (g, account_id, mes, len); + return 0; } + // ギルドメンバの役職変更 -int guild_change_memberposition(int guild_id,int account_id,int char_id,int idx) +int guild_change_memberposition (int guild_id, int account_id, int char_id, + int idx) { - return intif_guild_change_memberinfo( - guild_id,account_id,char_id,GMI_POSITION,&idx,sizeof(idx)); + return intif_guild_change_memberinfo (guild_id, account_id, char_id, + GMI_POSITION, &idx, sizeof (idx)); } + // ギルドメンバの役職変更通知 -int guild_memberposition_changed(struct guild *g,int idx,int pos) +int guild_memberposition_changed (struct guild *g, int idx, int pos) { - nullpo_retr(0, g); + nullpo_retr (0, g); - g->member[idx].position=pos; - clif_guild_memberpositionchanged(g,idx); - return 0; + g->member[idx].position = pos; + clif_guild_memberpositionchanged (g, idx); + return 0; } + // ギルド役職変更 -int guild_change_position(struct map_session_data *sd,int idx, - int mode,int exp_mode,const char *name) +int guild_change_position (struct map_session_data *sd, int idx, + int mode, int exp_mode, const char *name) { - struct guild_position p; + struct guild_position p; - nullpo_retr(0, sd); + nullpo_retr (0, sd); - if(exp_mode>battle_config.guild_exp_limit) - exp_mode=battle_config.guild_exp_limit; - if(exp_mode<0)exp_mode=0; - p.mode=mode; - p.exp_mode=exp_mode; - memcpy(p.name,name,24); - return intif_guild_position(sd->status.guild_id,idx,&p); + if (exp_mode > battle_config.guild_exp_limit) + exp_mode = battle_config.guild_exp_limit; + if (exp_mode < 0) + exp_mode = 0; + p.mode = mode; + p.exp_mode = exp_mode; + memcpy (p.name, name, 24); + return intif_guild_position (sd->status.guild_id, idx, &p); } + // ギルド役職変更通知 -int guild_position_changed(int guild_id,int idx,struct guild_position *p) +int guild_position_changed (int guild_id, int idx, struct guild_position *p) { - struct guild *g=guild_search(guild_id); - if(g==NULL) - return 0; - memcpy(&g->position[idx],p,sizeof(struct guild_position)); - clif_guild_positionchanged(g,idx); - return 0; + struct guild *g = guild_search (guild_id); + if (g == NULL) + return 0; + memcpy (&g->position[idx], p, sizeof (struct guild_position)); + clif_guild_positionchanged (g, idx); + return 0; } + // ギルド告知変更 -int guild_change_notice(struct map_session_data *sd,int guild_id,const char *mes1,const char *mes2) +int guild_change_notice (struct map_session_data *sd, int guild_id, + const char *mes1, const char *mes2) { - nullpo_retr(0, sd); + nullpo_retr (0, sd); - if(guild_id!=sd->status.guild_id) - return 0; - return intif_guild_notice(guild_id,mes1,mes2); + if (guild_id != sd->status.guild_id) + return 0; + return intif_guild_notice (guild_id, mes1, mes2); } + // ギルド告知変更通知 -int guild_notice_changed(int guild_id,const char *mes1,const char *mes2) +int guild_notice_changed (int guild_id, const char *mes1, const char *mes2) { - int i; - struct map_session_data *sd; - struct guild *g=guild_search(guild_id); - if(g==NULL) - return 0; + int i; + struct map_session_data *sd; + struct guild *g = guild_search (guild_id); + if (g == NULL) + return 0; - memcpy(g->mes1,mes1,60); - memcpy(g->mes2,mes2,120); + memcpy (g->mes1, mes1, 60); + memcpy (g->mes2, mes2, 120); - for(i=0;i<g->max_member;i++){ - if((sd=g->member[i].sd)!=NULL) - clif_guild_notice(sd,g); - } - return 0; + for (i = 0; i < g->max_member; i++) + { + if ((sd = g->member[i].sd) != NULL) + clif_guild_notice (sd, g); + } + return 0; } + // ギルドエンブレム変更 -int guild_change_emblem(struct map_session_data *sd,int len,const char *data) +int guild_change_emblem (struct map_session_data *sd, int len, + const char *data) { - nullpo_retr(0, sd); + nullpo_retr (0, sd); - return intif_guild_emblem(sd->status.guild_id,len,data); + return intif_guild_emblem (sd->status.guild_id, len, data); } + // ギルドエンブレム変更通知 -int guild_emblem_changed(int len,int guild_id,int emblem_id,const char *data) +int guild_emblem_changed (int len, int guild_id, int emblem_id, + const char *data) { - int i; - struct map_session_data *sd; - struct guild *g=guild_search(guild_id); - if(g==NULL) - return 0; - - memcpy(g->emblem_data,data,len); - g->emblem_len=len; - g->emblem_id=emblem_id; - - for(i=0;i<g->max_member;i++){ - if((sd=g->member[i].sd)!=NULL){ - sd->guild_emblem_id=emblem_id; - clif_guild_belonginfo(sd,g); - clif_guild_emblem(sd,g); - } - } - return 0; + int i; + struct map_session_data *sd; + struct guild *g = guild_search (guild_id); + if (g == NULL) + return 0; + + memcpy (g->emblem_data, data, len); + g->emblem_len = len; + g->emblem_id = emblem_id; + + for (i = 0; i < g->max_member; i++) + { + if ((sd = g->member[i].sd) != NULL) + { + sd->guild_emblem_id = emblem_id; + clif_guild_belonginfo (sd, g); + clif_guild_emblem (sd, g); + } + } + return 0; } // ギルドのEXP上納 -int guild_payexp(struct map_session_data *sd,int exp) +int guild_payexp (struct map_session_data *sd, int exp) { - struct guild *g; - struct guild_expcache *c; - int per,exp2; - - nullpo_retr(0, sd); - - if(sd->status.guild_id==0 || (g=guild_search(sd->status.guild_id))==NULL ) - return 0; - if( (per=g->position[guild_getposition(sd,g)].exp_mode)<=0 ) - return 0; - if( per>100 )per=100; - - if( (exp2=exp*per/100)<=0 ) - return 0; - - if( (c=numdb_search(guild_expcache_db,sd->status.char_id))==NULL ){ - c=(struct guild_expcache *)aCalloc(1,sizeof(struct guild_expcache)); - c->guild_id=sd->status.guild_id; - c->account_id=sd->status.account_id; - c->char_id=sd->status.char_id; - c->exp=exp2; - numdb_insert(guild_expcache_db,c->char_id,c); - }else{ - c->exp+=exp2; - } - return exp2; + struct guild *g; + struct guild_expcache *c; + int per, exp2; + + nullpo_retr (0, sd); + + if (sd->status.guild_id == 0 + || (g = guild_search (sd->status.guild_id)) == NULL) + return 0; + if ((per = g->position[guild_getposition (sd, g)].exp_mode) <= 0) + return 0; + if (per > 100) + per = 100; + + if ((exp2 = exp * per / 100) <= 0) + return 0; + + if ((c = numdb_search (guild_expcache_db, sd->status.char_id)) == NULL) + { + c = (struct guild_expcache *) aCalloc (1, + sizeof (struct + guild_expcache)); + c->guild_id = sd->status.guild_id; + c->account_id = sd->status.account_id; + c->char_id = sd->status.char_id; + c->exp = exp2; + numdb_insert (guild_expcache_db, c->char_id, c); + } + else + { + c->exp += exp2; + } + return exp2; } // スキルポイント割り振り -int guild_skillup(struct map_session_data *sd,int skill_num) +int guild_skillup (struct map_session_data *sd, int skill_num) { - struct guild *g; - int idx; + struct guild *g; + int idx; - nullpo_retr(0, sd); + nullpo_retr (0, sd); - if(sd->status.guild_id==0 || (g=guild_search(sd->status.guild_id))==NULL) - return 0; - if(strcmp(sd->status.name,g->master)) - return 0; + if (sd->status.guild_id == 0 + || (g = guild_search (sd->status.guild_id)) == NULL) + return 0; + if (strcmp (sd->status.name, g->master)) + return 0; - if( g->skill_point>0 && - g->skill[(idx=skill_num-10000)].id!=0 && - g->skill[idx].lv < guild_skill_get_max(skill_num) ){ - intif_guild_skillup(g->guild_id,skill_num,sd->status.account_id); - } - return 0; + if (g->skill_point > 0 && + g->skill[(idx = skill_num - 10000)].id != 0 && + g->skill[idx].lv < guild_skill_get_max (skill_num)) + { + intif_guild_skillup (g->guild_id, skill_num, sd->status.account_id); + } + return 0; } + // スキルポイント割り振り通知 -int guild_skillupack(int guild_id,int skill_num,int account_id) -{ - struct map_session_data *sd=map_id2sd(account_id); - struct guild *g=guild_search(guild_id); - int i; - if(g==NULL) - return 0; - if(sd!=NULL) - clif_guild_skillup(sd,skill_num,g->skill[skill_num-10000].lv); - // 全員に通知 - for(i=0;i<g->max_member;i++) - if((sd=g->member[i].sd)!=NULL) - clif_guild_skillinfo(sd); - return 0; +int guild_skillupack (int guild_id, int skill_num, int account_id) +{ + struct map_session_data *sd = map_id2sd (account_id); + struct guild *g = guild_search (guild_id); + int i; + if (g == NULL) + return 0; + if (sd != NULL) + clif_guild_skillup (sd, skill_num, g->skill[skill_num - 10000].lv); + // 全員に通知 + for (i = 0; i < g->max_member; i++) + if ((sd = g->member[i].sd) != NULL) + clif_guild_skillinfo (sd); + return 0; } // ギルド同盟数所得 -int guild_get_alliance_count(struct guild *g,int flag) +int guild_get_alliance_count (struct guild *g, int flag) { - int i,c; + int i, c; - nullpo_retr(0, g); + nullpo_retr (0, g); - for(i=c=0;i<MAX_GUILDALLIANCE;i++){ - if( g->alliance[i].guild_id>0 && - g->alliance[i].opposition==flag ) - c++; - } - return c; + for (i = c = 0; i < MAX_GUILDALLIANCE; i++) + { + if (g->alliance[i].guild_id > 0 && g->alliance[i].opposition == flag) + c++; + } + return c; } + // ギルド同盟要求 -int guild_reqalliance(struct map_session_data *sd,int account_id) +int guild_reqalliance (struct map_session_data *sd, int account_id) { - struct map_session_data *tsd= map_id2sd(account_id); - struct guild *g[2]; - int i; + struct map_session_data *tsd = map_id2sd (account_id); + struct guild *g[2]; + int i; - if(agit_flag) { // Disable alliance creation during woe [Valaris] - clif_displaymessage(sd->fd,"Alliances cannot be made during Guild Wars!"); - return 0; - } // end addition [Valaris] + if (agit_flag) + { // Disable alliance creation during woe [Valaris] + clif_displaymessage (sd->fd, + "Alliances cannot be made during Guild Wars!"); + return 0; + } // end addition [Valaris] + nullpo_retr (0, sd); - nullpo_retr(0, sd); + if (tsd == NULL || tsd->status.guild_id <= 0) + return 0; - if(tsd==NULL || tsd->status.guild_id<=0) - return 0; + g[0] = guild_search (sd->status.guild_id); + g[1] = guild_search (tsd->status.guild_id); - g[0]=guild_search(sd->status.guild_id); - g[1]=guild_search(tsd->status.guild_id); + if (g[0] == NULL || g[1] == NULL) + return 0; - if(g[0]==NULL || g[1]==NULL) - return 0; + if (guild_get_alliance_count (g[0], 0) > 3) // 同盟数確認 + clif_guild_allianceack (sd, 4); + if (guild_get_alliance_count (g[1], 0) > 3) + clif_guild_allianceack (sd, 3); - if( guild_get_alliance_count(g[0],0)>3 ) // 同盟数確認 - clif_guild_allianceack(sd,4); - if( guild_get_alliance_count(g[1],0)>3 ) - clif_guild_allianceack(sd,3); + if (tsd->guild_alliance > 0) + { // 相手が同盟要請状態かどうか確認 + clif_guild_allianceack (sd, 1); + return 0; + } - if( tsd->guild_alliance>0 ){ // 相手が同盟要請状態かどうか確認 - clif_guild_allianceack(sd,1); - return 0; - } + for (i = 0; i < MAX_GUILDALLIANCE; i++) + { // すでに同盟状態か確認 + if (g[0]->alliance[i].guild_id == tsd->status.guild_id && + g[0]->alliance[i].opposition == 0) + { + clif_guild_allianceack (sd, 0); + return 0; + } + } - for(i=0;i<MAX_GUILDALLIANCE;i++){ // すでに同盟状態か確認 - if( g[0]->alliance[i].guild_id==tsd->status.guild_id && - g[0]->alliance[i].opposition==0){ - clif_guild_allianceack(sd,0); - return 0; - } - } + tsd->guild_alliance = sd->status.guild_id; + tsd->guild_alliance_account = sd->status.account_id; - tsd->guild_alliance=sd->status.guild_id; - tsd->guild_alliance_account=sd->status.account_id; - - clif_guild_reqalliance(tsd,sd->status.account_id,g[0]->name); - return 0; + clif_guild_reqalliance (tsd, sd->status.account_id, g[0]->name); + return 0; } + // ギルド勧誘への返答 -int guild_reply_reqalliance(struct map_session_data *sd,int account_id,int flag) -{ - struct map_session_data *tsd; - - nullpo_retr(0, sd); - nullpo_retr(0, tsd= map_id2sd( account_id )); - - if(sd->guild_alliance!=tsd->status.guild_id) // 勧誘とギルドIDが違う - return 0; - - if(flag==1){ // 承諾 - int i; - - struct guild *g; // 同盟数再確認 - if( (g=guild_search(sd->status.guild_id))==NULL || - guild_get_alliance_count(g,0)>3 ){ - clif_guild_allianceack(sd,4); - clif_guild_allianceack(tsd,3); - return 0; - } - if( (g=guild_search(tsd->status.guild_id))==NULL || - guild_get_alliance_count(g,0)>3 ){ - clif_guild_allianceack(sd,3); - clif_guild_allianceack(tsd,4); - return 0; - } - - // 敵対関係なら敵対を止める - if((g=guild_search(sd->status.guild_id)) == NULL) - 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 ); - } - if((g=guild_search(tsd->status.guild_id)) == NULL) - return 0; - for(i=0;i<MAX_GUILDALLIANCE;i++){ - if( g->alliance[i].guild_id==sd->status.guild_id && - g->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_reply_reqalliance (struct map_session_data *sd, int account_id, + int flag) +{ + struct map_session_data *tsd; + + nullpo_retr (0, sd); + nullpo_retr (0, tsd = map_id2sd (account_id)); + + if (sd->guild_alliance != tsd->status.guild_id) // 勧誘とギルドIDが違う + return 0; + + if (flag == 1) + { // 承諾 + int i; + + struct guild *g; // 同盟数再確認 + if ((g = guild_search (sd->status.guild_id)) == NULL || + guild_get_alliance_count (g, 0) > 3) + { + clif_guild_allianceack (sd, 4); + clif_guild_allianceack (tsd, 3); + return 0; + } + if ((g = guild_search (tsd->status.guild_id)) == NULL || + guild_get_alliance_count (g, 0) > 3) + { + clif_guild_allianceack (sd, 3); + clif_guild_allianceack (tsd, 4); + return 0; + } + + // 敵対関係なら敵対を止める + if ((g = guild_search (sd->status.guild_id)) == NULL) + 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); + } + if ((g = guild_search (tsd->status.guild_id)) == NULL) + return 0; + for (i = 0; i < MAX_GUILDALLIANCE; i++) + { + if (g->alliance[i].guild_id == sd->status.guild_id && + g->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_delalliance(struct map_session_data *sd,int guild_id,int flag) +int guild_delalliance (struct map_session_data *sd, int guild_id, int flag) { - if(agit_flag) { // Disable alliance breaking during woe [Valaris] - clif_displaymessage(sd->fd,"Alliances cannot be broken during Guild Wars!"); - return 0; - } // end addition [Valaris] + if (agit_flag) + { // Disable alliance breaking during woe [Valaris] + clif_displaymessage (sd->fd, + "Alliances cannot be broken during Guild Wars!"); + return 0; + } // end addition [Valaris] - nullpo_retr(0, sd); + nullpo_retr (0, sd); - intif_guild_alliance( sd->status.guild_id,guild_id, - sd->status.account_id,0,flag|8 ); - return 0; + 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,int char_id) +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; - - 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; + 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; + + 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_allianceack(int guild_id1,int guild_id2,int account_id1,int account_id2, - int flag,const char *name1,const char *name2) -{ - struct guild *g[2]; - int guild_id[2]={guild_id1,guild_id2}; - const char *guild_name[2]={name1,name2}; - struct map_session_data *sd[2]={map_id2sd(account_id1),map_id2sd(account_id2)}; - int j,i; - - g[0]=guild_search(guild_id1); - g[1]=guild_search(guild_id2); - - if(sd[0]!=NULL && (flag&0x0f)==0){ - sd[0]->guild_alliance=0; - sd[0]->guild_alliance_account=0; - } - - if(flag&0x70){ // 失敗 - for(i=0;i<2-(flag&1);i++) - if( sd[i]!=NULL ) - clif_guild_allianceack(sd[i],((flag>>4)==i+1)?3:4); - return 0; - } -// if(battle_config.etc_log) -// printf("guild alliance_ack %d %d %d %d %d %s %s\n",guild_id1,guild_id2,account_id1,account_id2,flag,name1,name2); - - if(!(flag&0x08)){ // 関係追加 - for(i=0;i<2-(flag&1);i++) - if(g[i]!=NULL) - for(j=0;j<MAX_GUILDALLIANCE;j++) - if(g[i]->alliance[j].guild_id==0){ - g[i]->alliance[j].guild_id=guild_id[1-i]; - memcpy(g[i]->alliance[j].name,guild_name[1-i],24); - g[i]->alliance[j].opposition=flag&1; - break; - } - }else{ // 関係解消 - for(i=0;i<2-(flag&1);i++){ - if(g[i]!=NULL) - for(j=0;j<MAX_GUILDALLIANCE;j++) - if( g[i]->alliance[j].guild_id==guild_id[1-i] && - g[i]->alliance[j].opposition==(flag&1)){ - g[i]->alliance[j].guild_id=0; - break; - } - if( sd[i]!=NULL ) // 解消通知 - clif_guild_delalliance(sd[i],guild_id[1-i],(flag&1)); - } - } - - if((flag&0x0f)==0){ // 同盟通知 - if( sd[1]!=NULL ) - clif_guild_allianceack(sd[1],2); - }else if((flag&0x0f)==1){ // 敵対通知 - if( sd[0]!=NULL ) - clif_guild_oppositionack(sd[0],0); - } - - - for(i=0;i<2-(flag&1);i++){ // 同盟/敵対リストの再送信 - struct map_session_data *sd; - if(g[i]!=NULL) - for(j=0;j<g[i]->max_member;j++) - if((sd=g[i]->member[j].sd)!=NULL) - clif_guild_allianceinfo(sd); - } - return 0; +int guild_allianceack (int guild_id1, int guild_id2, int account_id1, + int account_id2, int flag, const char *name1, + const char *name2) +{ + struct guild *g[2]; + int guild_id[2] = { guild_id1, guild_id2 }; + const char *guild_name[2] = { name1, name2 }; + struct map_session_data *sd[2] = + { map_id2sd (account_id1), map_id2sd (account_id2) }; + int j, i; + + g[0] = guild_search (guild_id1); + g[1] = guild_search (guild_id2); + + if (sd[0] != NULL && (flag & 0x0f) == 0) + { + sd[0]->guild_alliance = 0; + sd[0]->guild_alliance_account = 0; + } + + if (flag & 0x70) + { // 失敗 + for (i = 0; i < 2 - (flag & 1); i++) + if (sd[i] != NULL) + clif_guild_allianceack (sd[i], + ((flag >> 4) == i + 1) ? 3 : 4); + return 0; + } +// if(battle_config.etc_log) +// printf("guild alliance_ack %d %d %d %d %d %s %s\n",guild_id1,guild_id2,account_id1,account_id2,flag,name1,name2); + + if (!(flag & 0x08)) + { // 関係追加 + for (i = 0; i < 2 - (flag & 1); i++) + if (g[i] != NULL) + for (j = 0; j < MAX_GUILDALLIANCE; j++) + if (g[i]->alliance[j].guild_id == 0) + { + g[i]->alliance[j].guild_id = guild_id[1 - i]; + memcpy (g[i]->alliance[j].name, guild_name[1 - i], + 24); + g[i]->alliance[j].opposition = flag & 1; + break; + } + } + else + { // 関係解消 + for (i = 0; i < 2 - (flag & 1); i++) + { + if (g[i] != NULL) + for (j = 0; j < MAX_GUILDALLIANCE; j++) + if (g[i]->alliance[j].guild_id == guild_id[1 - i] && + g[i]->alliance[j].opposition == (flag & 1)) + { + g[i]->alliance[j].guild_id = 0; + break; + } + if (sd[i] != NULL) // 解消通知 + clif_guild_delalliance (sd[i], guild_id[1 - i], (flag & 1)); + } + } + + if ((flag & 0x0f) == 0) + { // 同盟通知 + if (sd[1] != NULL) + clif_guild_allianceack (sd[1], 2); + } + else if ((flag & 0x0f) == 1) + { // 敵対通知 + if (sd[0] != NULL) + clif_guild_oppositionack (sd[0], 0); + } + + for (i = 0; i < 2 - (flag & 1); i++) + { // 同盟/敵対リストの再送信 + struct map_session_data *sd; + if (g[i] != NULL) + for (j = 0; j < g[i]->max_member; j++) + if ((sd = g[i]->member[j].sd) != NULL) + clif_guild_allianceinfo (sd); + } + return 0; } + // ギルド解散通知用 -int guild_broken_sub(void *key,void *data,va_list ap) +int guild_broken_sub (void *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_retr(0, 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); - g->alliance[i].guild_id=0; - } - } - return 0; + struct guild *g = (struct guild *) data; + int guild_id = va_arg (ap, int); + int i, j; + struct map_session_data *sd = NULL; + + nullpo_retr (0, 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); + g->alliance[i].guild_id = 0; + } + } + return 0; } + // ギルド解散通知 -int guild_broken(int guild_id,int flag) -{ - struct guild *g=guild_search(guild_id); - struct map_session_data *sd; - int i; - if(flag!=0 || g==NULL) - return 0; - - for(i=0;i<g->max_member;i++){ // ギルド解散を通知 - if((sd=g->member[i].sd)!=NULL){ - if(sd->state.storage_flag == 2) - storage_guild_storage_quit(sd,1); - sd->status.guild_id=0; - sd->guild_sended=0; - clif_guild_broken(g->member[i].sd,0); - } - } - - numdb_foreach(guild_db,guild_broken_sub,guild_id); - numdb_erase(guild_db,guild_id); - guild_storage_delete(guild_id); - free(g); - return 0; +int guild_broken (int guild_id, int flag) +{ + struct guild *g = guild_search (guild_id); + struct map_session_data *sd; + int i; + if (flag != 0 || g == NULL) + return 0; + + for (i = 0; i < g->max_member; i++) + { // ギルド解散を通知 + if ((sd = g->member[i].sd) != NULL) + { + if (sd->state.storage_flag == 2) + storage_guild_storage_quit (sd, 1); + sd->status.guild_id = 0; + sd->guild_sended = 0; + clif_guild_broken (g->member[i].sd, 0); + } + } + + numdb_foreach (guild_db, guild_broken_sub, guild_id); + numdb_erase (guild_db, guild_id); + guild_storage_delete (guild_id); + free (g); + return 0; } // ギルド解散 -int guild_break(struct map_session_data *sd,char *name) -{ - struct guild *g; - int i; - - nullpo_retr(0, sd); - - if( (g=guild_search(sd->status.guild_id))==NULL ) - return 0; - if(strcmp(g->name,name)!=0) - return 0; - if(strcmp(sd->status.name,g->master)!=0) - return 0; - for(i=0;i<g->max_member;i++){ - if( g->member[i].account_id>0 && ( - g->member[i].account_id!=sd->status.account_id || - g->member[i].char_id!=sd->status.char_id )) - break; - } - if(i<g->max_member){ - clif_guild_broken(sd,2); - return 0; - } - - intif_guild_break(g->guild_id); - return 0; +int guild_break (struct map_session_data *sd, char *name) +{ + struct guild *g; + int i; + + nullpo_retr (0, sd); + + if ((g = guild_search (sd->status.guild_id)) == NULL) + return 0; + if (strcmp (g->name, name) != 0) + return 0; + if (strcmp (sd->status.name, g->master) != 0) + return 0; + for (i = 0; i < g->max_member; i++) + { + if (g->member[i].account_id > 0 + && (g->member[i].account_id != sd->status.account_id + || g->member[i].char_id != sd->status.char_id)) + break; + } + if (i < g->max_member) + { + clif_guild_broken (sd, 2); + return 0; + } + + intif_guild_break (g->guild_id); + return 0; } // ギルド城データ要求 -int guild_castledataload(int castle_id,int index) +int guild_castledataload (int castle_id, int index) { - return intif_guild_castle_dataload(castle_id,index); + return intif_guild_castle_dataload (castle_id, index); } + // ギルド城情報所得時イベント追加 -int guild_addcastleinfoevent(int castle_id,int index,const char *name) +int guild_addcastleinfoevent (int castle_id, int index, const char *name) { - struct eventlist *ev; - int code=castle_id|(index<<16); + struct eventlist *ev; + int code = castle_id | (index << 16); - if( name==NULL || *name==0 ) - return 0; + if (name == NULL || *name == 0) + return 0; - ev=(struct eventlist *)aCalloc(1,sizeof(struct eventlist)); - memcpy(ev->name,name,sizeof(ev->name)); - ev->next=numdb_search(guild_castleinfoevent_db,code); - numdb_insert(guild_castleinfoevent_db,code,ev); - return 0; + ev = (struct eventlist *) aCalloc (1, sizeof (struct eventlist)); + memcpy (ev->name, name, sizeof (ev->name)); + ev->next = numdb_search (guild_castleinfoevent_db, code); + numdb_insert (guild_castleinfoevent_db, code, ev); + return 0; } // ギルド城データ要求返信 -int guild_castledataloadack(int castle_id,int index,int value) -{ - struct guild_castle *gc=guild_castle_search(castle_id); - int code=castle_id|(index<<16); - struct eventlist *ev,*ev2; - - if(gc==NULL){ - return 0; - } - switch(index){ - case 1: gc->guild_id = value; break; - case 2: gc->economy = value; break; - case 3: gc->defense = value; break; - case 4: gc->triggerE = value; break; - case 5: gc->triggerD = value; break; - case 6: gc->nextTime = value; break; - case 7: gc->payTime = value; break; - case 8: gc->createTime = value; break; - case 9: gc->visibleC = value; break; - case 10: gc->visibleG0 = value; break; - case 11: gc->visibleG1 = value; break; - case 12: gc->visibleG2 = value; break; - case 13: gc->visibleG3 = value; break; - case 14: gc->visibleG4 = value; break; - case 15: gc->visibleG5 = value; break; - case 16: gc->visibleG6 = value; break; - case 17: gc->visibleG7 = value; break; - case 18: gc->Ghp0 = value; break; // guardian HP [Valaris] - case 19: gc->Ghp1 = value; break; - case 20: gc->Ghp2 = value; break; - case 21: gc->Ghp3 = value; break; - case 22: gc->Ghp4 = value; break; - case 23: gc->Ghp5 = value; break; - case 24: gc->Ghp6 = value; break; - case 25: gc->Ghp7 = value; break; // end additions [Valaris] - default: - printf("guild_castledataloadack ERROR!! (Not found index=%d)\n", index); - return 0; - } - if( (ev=numdb_search(guild_castleinfoevent_db,code))!=NULL ){ - numdb_erase(guild_castleinfoevent_db,code); - for(;ev;ev2=ev->next,free(ev),ev=ev2){ - npc_event_do(ev->name); - } - } - return 1; +int guild_castledataloadack (int castle_id, int index, int value) +{ + struct guild_castle *gc = guild_castle_search (castle_id); + int code = castle_id | (index << 16); + struct eventlist *ev, *ev2; + + if (gc == NULL) + { + return 0; + } + switch (index) + { + case 1: + gc->guild_id = value; + break; + case 2: + gc->economy = value; + break; + case 3: + gc->defense = value; + break; + case 4: + gc->triggerE = value; + break; + case 5: + gc->triggerD = value; + break; + case 6: + gc->nextTime = value; + break; + case 7: + gc->payTime = value; + break; + case 8: + gc->createTime = value; + break; + case 9: + gc->visibleC = value; + break; + case 10: + gc->visibleG0 = value; + break; + case 11: + gc->visibleG1 = value; + break; + case 12: + gc->visibleG2 = value; + break; + case 13: + gc->visibleG3 = value; + break; + case 14: + gc->visibleG4 = value; + break; + case 15: + gc->visibleG5 = value; + break; + case 16: + gc->visibleG6 = value; + break; + case 17: + gc->visibleG7 = value; + break; + case 18: + gc->Ghp0 = value; + break; // guardian HP [Valaris] + case 19: + gc->Ghp1 = value; + break; + case 20: + gc->Ghp2 = value; + break; + case 21: + gc->Ghp3 = value; + break; + case 22: + gc->Ghp4 = value; + break; + case 23: + gc->Ghp5 = value; + break; + case 24: + gc->Ghp6 = value; + break; + case 25: + gc->Ghp7 = value; + break; // end additions [Valaris] + default: + printf ("guild_castledataloadack ERROR!! (Not found index=%d)\n", + index); + return 0; + } + if ((ev = numdb_search (guild_castleinfoevent_db, code)) != NULL) + { + numdb_erase (guild_castleinfoevent_db, code); + for (; ev; ev2 = ev->next, free (ev), ev = ev2) + { + npc_event_do (ev->name); + } + } + return 1; } + // ギルド城データ変更要求 -int guild_castledatasave(int castle_id,int index,int value) +int guild_castledatasave (int castle_id, int index, int value) { - return intif_guild_castle_datasave(castle_id,index,value); + return intif_guild_castle_datasave (castle_id, index, value); } // ギルド城データ変更通知 -int guild_castledatasaveack(int castle_id,int index,int value) -{ - struct guild_castle *gc=guild_castle_search(castle_id); - if(gc==NULL){ - return 0; - } - switch(index){ - case 1: gc->guild_id = value; break; - case 2: gc->economy = value; break; - case 3: gc->defense = value; break; - case 4: gc->triggerE = value; break; - case 5: gc->triggerD = value; break; - case 6: gc->nextTime = value; break; - case 7: gc->payTime = value; break; - case 8: gc->createTime = value; break; - case 9: gc->visibleC = value; break; - case 10: gc->visibleG0 = value; break; - case 11: gc->visibleG1 = value; break; - case 12: gc->visibleG2 = value; break; - case 13: gc->visibleG3 = value; break; - case 14: gc->visibleG4 = value; break; - case 15: gc->visibleG5 = value; break; - case 16: gc->visibleG6 = value; break; - case 17: gc->visibleG7 = value; break; - case 18: gc->Ghp0 = value; break; // guardian HP [Valaris] - case 19: gc->Ghp1 = value; break; - case 20: gc->Ghp2 = value; break; - case 21: gc->Ghp3 = value; break; - case 22: gc->Ghp4 = value; break; - case 23: gc->Ghp5 = value; break; - case 24: gc->Ghp6 = value; break; - case 25: gc->Ghp7 = value; break; // end additions [Valaris] - default: - printf("guild_castledatasaveack ERROR!! (Not found index=%d)\n", index); - return 0; - } - return 1; +int guild_castledatasaveack (int castle_id, int index, int value) +{ + struct guild_castle *gc = guild_castle_search (castle_id); + if (gc == NULL) + { + return 0; + } + switch (index) + { + case 1: + gc->guild_id = value; + break; + case 2: + gc->economy = value; + break; + case 3: + gc->defense = value; + break; + case 4: + gc->triggerE = value; + break; + case 5: + gc->triggerD = value; + break; + case 6: + gc->nextTime = value; + break; + case 7: + gc->payTime = value; + break; + case 8: + gc->createTime = value; + break; + case 9: + gc->visibleC = value; + break; + case 10: + gc->visibleG0 = value; + break; + case 11: + gc->visibleG1 = value; + break; + case 12: + gc->visibleG2 = value; + break; + case 13: + gc->visibleG3 = value; + break; + case 14: + gc->visibleG4 = value; + break; + case 15: + gc->visibleG5 = value; + break; + case 16: + gc->visibleG6 = value; + break; + case 17: + gc->visibleG7 = value; + break; + case 18: + gc->Ghp0 = value; + break; // guardian HP [Valaris] + case 19: + gc->Ghp1 = value; + break; + case 20: + gc->Ghp2 = value; + break; + case 21: + gc->Ghp3 = value; + break; + case 22: + gc->Ghp4 = value; + break; + case 23: + gc->Ghp5 = value; + break; + case 24: + gc->Ghp6 = value; + break; + case 25: + gc->Ghp7 = value; + break; // end additions [Valaris] + default: + printf ("guild_castledatasaveack ERROR!! (Not found index=%d)\n", + index); + return 0; + } + return 1; } // ギルドデータ一括受信(初期化時) -int guild_castlealldataload(int len,struct guild_castle *gc) -{ - int i; - int n = (len-4) / sizeof(struct guild_castle), ev = -1; - - nullpo_retr(0, gc); - - // イベント付きで要求するデータ位置を探す(最後の占拠データ) - for(i = 0; i < n; i++) { - if ((gc + i)->guild_id) - ev = i; - } - - // 城データ格納とギルド情報要求 - for(i = 0; i < n; i++, gc++) { - struct guild_castle *c = guild_castle_search(gc->castle_id); - if (!c) { - printf("guild_castlealldataload ??\n"); - continue; - } - memcpy(&c->guild_id,&gc->guild_id, - sizeof(struct guild_castle) - ((int)&c->guild_id - (int)c) ); - if( c->guild_id ){ - if(i!=ev) - guild_request_info(c->guild_id); - else - guild_npc_request_info(c->guild_id, "::OnAgitInit"); - } - } - if (ev == -1) - npc_event_doall("OnAgitInit"); - return 0; -} - -int guild_agit_start(void) -{ // Run All NPC_Event[OnAgitStart] - int c = npc_event_doall("OnAgitStart"); - printf("NPC_Event:[OnAgitStart] Run (%d) Events by @AgitStart.\n",c); - return 0; -} - -int guild_agit_end(void) -{ // Run All NPC_Event[OnAgitEnd] - int c = npc_event_doall("OnAgitEnd"); - printf("NPC_Event:[OnAgitEnd] Run (%d) Events by @AgitEnd.\n",c); - return 0; -} - -int guild_gvg_eliminate_timer(int tid,unsigned int tick,int id,int data) -{ // Run One NPC_Event[OnAgitEliminate] - size_t len = strlen((const char*)data); - char *evname=(char*)aCalloc(len + 4,sizeof(char)); - int c=0; - - if(!agit_flag) return 0; // Agit already End - memcpy(evname,(const char *)data,len - 5); - strcpy(evname + len - 5,"Eliminate"); - c = npc_event_do(evname); - printf("NPC_Event:[%s] Run (%d) Events.\n",evname,c); - return 0; -} - -int guild_agit_break(struct mob_data *md) -{ // Run One NPC_Event[OnAgitBreak] - char *evname; - - nullpo_retr(0, md); - - evname=(char *)aCalloc(strlen(md->npc_event) + 1, sizeof(char)); - - strcpy(evname,md->npc_event); +int guild_castlealldataload (int len, struct guild_castle *gc) +{ + int i; + int n = (len - 4) / sizeof (struct guild_castle), ev = -1; + + nullpo_retr (0, gc); + + // イベント付きで要求するデータ位置を探す(最後の占拠データ) + for (i = 0; i < n; i++) + { + if ((gc + i)->guild_id) + ev = i; + } + + // 城データ格納とギルド情報要求 + for (i = 0; i < n; i++, gc++) + { + struct guild_castle *c = guild_castle_search (gc->castle_id); + if (!c) + { + printf ("guild_castlealldataload ??\n"); + continue; + } + memcpy (&c->guild_id, &gc->guild_id, + sizeof (struct guild_castle) - ((int) &c->guild_id - + (int) c)); + if (c->guild_id) + { + if (i != ev) + guild_request_info (c->guild_id); + else + guild_npc_request_info (c->guild_id, "::OnAgitInit"); + } + } + if (ev == -1) + npc_event_doall ("OnAgitInit"); + return 0; +} + +int guild_agit_start (void) +{ // Run All NPC_Event[OnAgitStart] + int c = npc_event_doall ("OnAgitStart"); + printf ("NPC_Event:[OnAgitStart] Run (%d) Events by @AgitStart.\n", c); + return 0; +} + +int guild_agit_end (void) +{ // Run All NPC_Event[OnAgitEnd] + int c = npc_event_doall ("OnAgitEnd"); + printf ("NPC_Event:[OnAgitEnd] Run (%d) Events by @AgitEnd.\n", c); + return 0; +} + +int guild_gvg_eliminate_timer (int tid, unsigned int tick, int id, int data) +{ // Run One NPC_Event[OnAgitEliminate] + size_t len = strlen ((const char *) data); + char *evname = (char *) aCalloc (len + 4, sizeof (char)); + int c = 0; + + if (!agit_flag) + return 0; // Agit already End + memcpy (evname, (const char *) data, len - 5); + strcpy (evname + len - 5, "Eliminate"); + c = npc_event_do (evname); + printf ("NPC_Event:[%s] Run (%d) Events.\n", evname, c); + return 0; +} + +int guild_agit_break (struct mob_data *md) +{ // Run One NPC_Event[OnAgitBreak] + char *evname; + + nullpo_retr (0, md); + + evname = (char *) aCalloc (strlen (md->npc_event) + 1, sizeof (char)); + + strcpy (evname, md->npc_event); // Now By User to Run [OnAgitBreak] NPC Event... // It's a little impossible to null point with player disconnect in this! // But Script will be stop, so nothing... // Maybe will be changed in the futher.. // int c = npc_event_do(evname); - if(!agit_flag) return 0; // Agit already End - add_timer(gettick()+battle_config.gvg_eliminate_time,guild_gvg_eliminate_timer,md->bl.m,(int)evname); - return 0; + if (!agit_flag) + return 0; // Agit already End + add_timer (gettick () + battle_config.gvg_eliminate_time, + guild_gvg_eliminate_timer, md->bl.m, (int) evname); + return 0; } // [MouseJstr] // How many castles does this guild have? -int guild_checkcastles(struct guild *g) { - int i,nb_cas=0, id,cas_id=0; - struct guild_castle *gc; - id=g->guild_id; - for(i=0;i<MAX_GUILDCASTLE;i++){ - gc=guild_castle_search(i); - cas_id=gc->guild_id; - if(g->guild_id==cas_id) - nb_cas=nb_cas+1; - } //end for - return nb_cas; +int guild_checkcastles (struct guild *g) +{ + int i, nb_cas = 0, id, cas_id = 0; + struct guild_castle *gc; + id = g->guild_id; + for (i = 0; i < MAX_GUILDCASTLE; i++) + { + gc = guild_castle_search (i); + cas_id = gc->guild_id; + if (g->guild_id == cas_id) + nb_cas = nb_cas + 1; + } //end for + return nb_cas; } // [MouseJstr] // is this guild allied with this castle? -int guild_isallied(struct guild *g, struct guild_castle *gc) +int guild_isallied (struct guild *g, struct guild_castle *gc) { - int i; + int i; - nullpo_retr(0, g); + nullpo_retr (0, g); - if(g->guild_id == gc->guild_id) - return 1; + if (g->guild_id == gc->guild_id) + return 1; - if (gc->guild_id == 0) - return 0; + if (gc->guild_id == 0) + return 0; + for (i = 0; i < MAX_GUILDALLIANCE; i++) + if (g->alliance[i].guild_id == gc->guild_id) + { + if (g->alliance[i].opposition == 0) + return 1; + else + return 0; + } - for(i=0;i<MAX_GUILDALLIANCE;i++) - if(g->alliance[i].guild_id == gc->guild_id) { - if(g->alliance[i].opposition == 0) - return 1; - else - return 0; - } - - return 0; + return 0; } - -static int guild_db_final(void *key,void *data,va_list ap) + +static int guild_db_final (void *key, void *data, va_list ap) { - struct guild *g=data; + struct guild *g = data; - free(g); + free (g); - return 0; + return 0; } -static int castle_db_final(void *key,void *data,va_list ap) + +static int castle_db_final (void *key, void *data, va_list ap) { - struct guild_castle *gc=data; + struct guild_castle *gc = data; - free(gc); + free (gc); - return 0; + return 0; } -static int guild_expcache_db_final(void *key,void *data,va_list ap) + +static int guild_expcache_db_final (void *key, void *data, va_list ap) { - struct guild_expcache *c=data; + struct guild_expcache *c = data; - free(c); + free (c); - return 0; + return 0; } -static int guild_infoevent_db_final(void *key,void *data,va_list ap) + +static int guild_infoevent_db_final (void *key, void *data, va_list ap) { - struct eventlist *ev=data; + struct eventlist *ev = data; - free(ev); + free (ev); - return 0; + return 0; } -void do_final_guild(void) + +void do_final_guild (void) { - if(guild_db) - numdb_final(guild_db,guild_db_final); - if(castle_db) - numdb_final(castle_db,castle_db_final); - if(guild_expcache_db) - numdb_final(guild_expcache_db,guild_expcache_db_final); - if(guild_infoevent_db) - numdb_final(guild_infoevent_db,guild_infoevent_db_final); - if(guild_castleinfoevent_db) - numdb_final(guild_castleinfoevent_db,guild_infoevent_db_final); + if (guild_db) + numdb_final (guild_db, guild_db_final); + if (castle_db) + numdb_final (castle_db, castle_db_final); + if (guild_expcache_db) + numdb_final (guild_expcache_db, guild_expcache_db_final); + if (guild_infoevent_db) + numdb_final (guild_infoevent_db, guild_infoevent_db_final); + if (guild_castleinfoevent_db) + numdb_final (guild_castleinfoevent_db, guild_infoevent_db_final); } |