// ギルドの情報の再計算 int guild_calcinfo(struct guild *g) { int i, c; unsigned int nextexp; struct guild before = *g; // スキルIDの設定 for(i = 0; i < MAX_GUILDSKILL; i++) g->skill[i].id=i+GD_SKILLBASE; // ギルドレベル if (g->guild_lv <= 0) g->guild_lv = 1; nextexp = guild_nextexp(g->guild_lv); if (nextexp > 0) { while(g->exp >= nextexp && nextexp > 0) { //fixed guild exp overflow [Kevin] g->exp -= nextexp; g->guild_lv++; g->skill_point++; nextexp = guild_nextexp(g->guild_lv); } } // ギルドの次の経験値 g->next_exp = guild_nextexp(g->guild_lv); // メンバ上限(ギルド拡張適用) g->max_member = 16 + guild_checkskill(g, GD_EXTENSION) * 6; //Guild Extention skill - currently adds 6 to max per skill lv. if(g->max_member > MAX_GUILD) { ShowError("Guild %d:%s has capacity for too many guild members (%d), max supported is %d\n", g->guild_id, g->name, g->max_member, MAX_GUILD); g->max_member = MAX_GUILD; } // 平均レベルとオンライン人数 g->average_lv = 0; g->connect_member = 0; c = 0; for(i = 0; i < g->max_member; i++) { if (g->member[i].account_id > 0) { g->average_lv += g->member[i].lv; c++; if (g->member[i].online > 0) g->connect_member++; } } if(c) g->average_lv /= c; // 全デ??を送る必要がありそう if (g->max_member != before.max_member || g->guild_lv != before.guild_lv || g->skill_point != before.skill_point) { mapif_guild_info(-1, g); return 1; } return 0; }
// ギルドエンブレム変更 int guild_change_emblem(struct map_session_data *sd,int len,const char *data) { struct guild *g; nullpo_ret(sd); if (battle_config.require_glory_guild && !((g = guild_search(sd->status.guild_id)) && guild_checkskill(g, GD_GLORYGUILD)>0)) { clif_skill_fail(sd,GD_GLORYGUILD,USESKILL_FAIL_LEVEL,0); return 0; } return intif_guild_emblem(sd->status.guild_id,len,data); }
/*========================================== * Guild skill check - from jA [Komurka] *------------------------------------------*/ int guild_check_skill_require(struct guild *g,int id) { int i; int idx = id-GD_SKILLBASE; if(g == NULL) return 0; if (idx < 0 || idx >= MAX_GUILDSKILL) return 0; for(i=0;i<MAX_GUILD_SKILL_REQUIRE;i++) { if(guild_skill_tree[idx].need[i].id == 0) break; if(guild_skill_tree[idx].need[i].lv > guild_checkskill(g,guild_skill_tree[idx].need[i].id)) return 0; } return 1; }