// ギルド情報要求 int mapif_parse_GuildInfo(int fd, int guild_id) { struct guild *g; g = idb_get(guild_db, guild_id); if (g != NULL){ guild_calcinfo(g); mapif_guild_info(fd, g); } else mapif_guild_noinfo(fd, guild_id); return 0; }
// ギルドスキルアップ要求 int mapif_parse_GuildSkillUp(int fd, int guild_id, int skill_num, int account_id) { struct guild *g = idb_get(guild_db, guild_id); int idx = skill_num - GD_SKILLBASE; if (g == NULL || idx < 0 || idx >= MAX_GUILDSKILL) return 0; if (g->skill_point > 0 && g->skill[idx].id > 0 && g->skill[idx].lv < 10) { g->skill[idx].lv++; g->skill_point--; if (guild_calcinfo(g) == 0) mapif_guild_info(-1, g); mapif_guild_skillupack(guild_id, skill_num, account_id); } return 0; }
// ギルドメンバ追加要求 int mapif_parse_GuildAddMember(int fd, int guild_id, struct guild_member *m) { struct guild *g; int i; g = idb_get(guild_db, guild_id); if (g == NULL) { mapif_guild_memberadded(fd, guild_id, m->account_id, m->char_id, 1); return 0; } for(i = 0; i < g->max_member; i++) { if (g->member[i].account_id == 0) { memcpy(&g->member[i], m, sizeof(struct guild_member)); mapif_guild_memberadded(fd, guild_id, m->account_id, m->char_id, 0); guild_calcinfo(g); mapif_guild_info(-1, g); return 0; } } mapif_guild_memberadded(fd, guild_id, m->account_id, m->char_id, 1); return 0; }
// ギルドメンバ追加要求 int mapif_parse_GuildAddMember(int fd, int guild_id, struct guild_member *m) { struct guild *g; int i; g = (struct guild*)idb_get(guild_db, guild_id); if (g == NULL) { mapif_guild_memberadded(fd, guild_id, m->account_id, m->char_id, 1); return 0; } ARR_FIND( 0, g->max_member, i, g->member[i].account_id == 0 ); if( i < g->max_member ) { memcpy(&g->member[i], m, sizeof(struct guild_member)); mapif_guild_memberadded(fd, guild_id, m->account_id, m->char_id, 0); guild_calcinfo(g); mapif_guild_info(-1, g); } else mapif_guild_memberadded(fd, guild_id, m->account_id, m->char_id, 1); return 0; }
// ギルドデータの読み込み int inter_guild_init() { char line[16384]; struct guild *g; struct guild_castle *gc; FILE *fp; int i, j, c = 0; inter_guild_readdb(); guild_db = db_alloc(__FILE__,__LINE__,DB_INT,DB_OPT_RELEASE_DATA,sizeof(int)); castle_db = db_alloc(__FILE__,__LINE__,DB_INT,DB_OPT_RELEASE_DATA,sizeof(int)); if ((fp = fopen(guild_txt,"r")) == NULL) return 1; while(fgets(line, sizeof(line)-1, fp)) { j = 0; if (sscanf(line, "%d\t%%newid%%\n%n", &i, &j) == 1 && j > 0 && guild_newid <= i) { guild_newid = i; continue; } g = (struct guild *) aCalloc(sizeof(struct guild), 1); if(g == NULL){ ShowFatalError("int_guild: out of memory!\n"); exit(0); } // memset(g, 0, sizeof(struct guild)); not needed... if (inter_guild_fromstr(line, g) == 0 && g->guild_id > 0) { if (g->guild_id >= guild_newid) guild_newid = g->guild_id + 1; idb_put(guild_db, g->guild_id, g); guild_check_empty(g); guild_calcinfo(g); } else { ShowError("int_guild: broken data [%s] line %d\n", guild_txt, c); aFree(g); } c++; } fclose(fp); // printf("int_guild: %s read done (%d guilds)\n", guild_txt, c); c = 0;//カウンタ初期化 if ((fp = fopen(castle_txt, "r")) == NULL) { return 1; } while(fgets(line, sizeof(line)-1, fp)) { gc = (struct guild_castle *) aCalloc(sizeof(struct guild_castle), 1); if(gc == NULL){ ShowFatalError("int_guild: out of memory!\n"); exit(0); } // memset(gc, 0, sizeof(struct guild_castle)); No need... if (inter_guildcastle_fromstr(line, gc) == 0) { idb_put(castle_db, gc->castle_id, gc); } else { ShowError("int_guild: broken data [%s] line %d\n", castle_txt, c); aFree(gc); } c++; } if (!c) { ShowStatus(" %s - making Default Data...\n", castle_txt); //デフォルトデータを作成 for(i = 0; i < MAX_GUILDCASTLE; i++) { gc = (struct guild_castle *) aCalloc(sizeof(struct guild_castle), 1); if (gc == NULL) { ShowFatalError("int_guild: out of memory!\n"); exit(0); } gc->castle_id = i; idb_put(castle_db, gc->castle_id, gc); } ShowStatus(" %s - making done\n",castle_txt); return 0; } fclose(fp); return 0; }
// ギルドメンバデータ変更要求 int mapif_parse_GuildMemberInfoChange(int fd, int guild_id, int account_id, int char_id, int type, const char *data, int len) { int i; struct guild *g; g = idb_get(guild_db, guild_id); 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) break; if (i == g->max_member) { ShowWarning("int_guild: GuildMemberChange: Not found %d,%d in %d[%s]\n", account_id, char_id, guild_id, g->name); return 0; } switch(type) { case GMI_POSITION: // 役職 g->member[i].position = *((int *)data); break; case GMI_EXP: // EXP { unsigned int exp, old_exp=g->member[i].exp; g->member[i].exp=*((unsigned int *)data); if (g->member[i].exp > old_exp) { exp = g->member[i].exp - old_exp; if (guild_exp_rate != 100) exp = exp*guild_exp_rate/100; if (exp > UINT_MAX - g->exp) g->exp = UINT_MAX; else g->exp+=exp; guild_calcinfo(g); mapif_guild_basicinfochanged(guild_id,GBI_EXP,&g->exp,4); } break; } case GMI_HAIR: { g->member[i].hair=*((int *)data); mapif_guild_memberinfochanged(guild_id,account_id,char_id,type,data,len); break; } case GMI_HAIR_COLOR: { g->member[i].hair_color=*((int *)data); mapif_guild_memberinfochanged(guild_id,account_id,char_id,type,data,len); break; } case GMI_GENDER: { g->member[i].gender=*((int *)data); mapif_guild_memberinfochanged(guild_id,account_id,char_id,type,data,len); break; } case GMI_CLASS: { g->member[i].class_=*((int *)data); mapif_guild_memberinfochanged(guild_id,account_id,char_id,type,data,len); break; } case GMI_LEVEL: { g->member[i].lv=*((int *)data); mapif_guild_memberinfochanged(guild_id,account_id,char_id,type,data,len); break; } default: ShowError("int_guild: GuildMemberInfoChange: Unknown type %d\n", type); break; } mapif_guild_memberinfochanged(guild_id, account_id, char_id, type, data, len); return 0; }