diff options
-rw-r--r-- | src/map/atcommand.cpp | 17 | ||||
-rw-r--r-- | src/map/battle.cpp | 42 | ||||
-rw-r--r-- | src/map/battle.hpp | 6 | ||||
-rw-r--r-- | src/map/map.hpp | 4 | ||||
-rw-r--r-- | src/map/pc.cpp | 551 | ||||
-rw-r--r-- | src/map/pc.hpp | 3 |
6 files changed, 120 insertions, 503 deletions
diff --git a/src/map/atcommand.cpp b/src/map/atcommand.cpp index 41a38f0..21b4234 100644 --- a/src/map/atcommand.cpp +++ b/src/map/atcommand.cpp @@ -103,7 +103,6 @@ ATCOMMAND_FUNC(character_baselevel); ATCOMMAND_FUNC(character_joblevel); ATCOMMAND_FUNC(kick); ATCOMMAND_FUNC(kickall); -ATCOMMAND_FUNC(allskills); ATCOMMAND_FUNC(questskill); ATCOMMAND_FUNC(charquestskill); ATCOMMAND_FUNC(lostskill); @@ -265,7 +264,6 @@ AtCommandInfo atcommand_info[] = { atcommand_character_joblevel}, {AtCommand_Kick, "@kick", 20, atcommand_kick}, // + right click menu for GM "(name) force to quit" {AtCommand_KickAll, "@kickall", 99, atcommand_kickall}, - {AtCommand_AllSkills, "@allskills", 60, atcommand_allskills}, {AtCommand_QuestSkill, "@questskill", 40, atcommand_questskill}, {AtCommand_CharQuestSkill, "@charquestskill", 60, atcommand_charquestskill}, @@ -3681,21 +3679,6 @@ int atcommand_kickall(const int fd, struct map_session_data *sd, * *------------------------------------------ */ -int atcommand_allskills(const int fd, struct map_session_data *sd, - const char *, const char *) -{ - pc_allskillup(sd); // all skills - sd->status.skill_point = 0; // 0 skill points - clif_updatestatus(sd, SP_SKILLPOINT); // update - clif_displaymessage(fd, "You have received all skills."); - - return 0; -} - -/*========================================== - * - *------------------------------------------ - */ int atcommand_questskill(const int fd, struct map_session_data *sd, const char *, const char *message) { diff --git a/src/map/battle.cpp b/src/map/battle.cpp index 1a0d12b..53ac896 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -21,8 +21,6 @@ #include "../poison.hpp" -int attr_fix_table[4][10][10]; - struct Battle_Config battle_config; /*========================================== @@ -1542,26 +1540,6 @@ int battle_stopwalking(struct block_list *bl, int type) } /*========================================== - * ダメージの属性修正 - *------------------------------------------ - */ -int battle_attr_fix(int damage, int atk_elem, int def_elem) -{ - int def_type = def_elem % 10, def_lv = def_elem / 10 / 2; - - if (atk_elem < 0 || atk_elem > 9 || def_type < 0 || def_type > 9 || - def_lv < 1 || def_lv > 4) - { // 属 性値がおかしいのでとりあえずそのまま返す - if (battle_config.error_log) - PRINTF("battle_attr_fix: unknown attr type: atk=%d def_type=%d def_lv=%d\n", - atk_elem, def_type, def_lv); - return damage; - } - - return damage * attr_fix_table[def_lv - 1][atk_elem][def_type] / 100; -} - -/*========================================== * ダメージ最終計算 *------------------------------------------ */ @@ -2094,13 +2072,6 @@ struct Damage battle_calc_mob_weapon_attack(struct block_list *src, if (damage < 0) damage = 0; - // 属 性の適用 - if (!((battle_config.mob_ghostring_fix == 1) && (battle_get_element(target) == 8) && (target->type == BL_PC))) // [MouseJstr] - if (skill_num != SkillID::ZERO || s_ele != 0 - || !battle_config.mob_attack_attr_none) - damage = - battle_attr_fix(damage, s_ele, battle_get_element(target)); - if (sc_data && sc_data[SC_AURABLADE].timer != -1) /* オーラブレード 必中 */ damage += sc_data[SC_AURABLADE].val1 * 10; @@ -2314,10 +2285,8 @@ struct Damage battle_calc_pc_weapon_attack(struct block_list *src, } else { - atkmax = (watk * sd->atkmods[t_size]) / 100; - atkmin = (atkmin * sd->atkmods[t_size]) / 100; - atkmax_ = (watk_ * sd->atkmods_[t_size]) / 100; - atkmin_ = (atkmin_ * sd->atkmods[t_size]) / 100; + atkmax = watk; + atkmax_ = watk_; } if ((sc_data && sc_data[SC_WEAPONPERFECTION].timer != -1) || (sd->special_state.no_sizefix)) @@ -2827,10 +2796,6 @@ struct Damage battle_calc_pc_weapon_attack(struct block_list *src, if (damage2 < 0) damage2 = 0; - // 属 性の適用 - damage = battle_attr_fix(damage, s_ele, battle_get_element(target)); - damage2 = battle_attr_fix(damage2, s_ele_, battle_get_element(target)); - // 星のかけら、気球の適用 damage += sd->star; damage2 += sd->star_; @@ -3200,8 +3165,6 @@ struct Damage battle_calc_magic_attack(struct block_list *bl, if (damage < 0) damage = 0; - damage = battle_attr_fix(damage, ele, battle_get_element(target)); // 属 性修正 - div_ = skill_get_num(skill_num, skill_lv); if (div_ > 1) @@ -3336,7 +3299,6 @@ struct Damage battle_calc_misc_attack(struct block_list *bl, } if (damage < 0) damage = 0; - damage = battle_attr_fix(damage, ele, battle_get_element(target)); // 属性修正 } div_ = skill_get_num(skill_num, skill_lv); diff --git a/src/map/battle.hpp b/src/map/battle.hpp index 0c417d9..8e2335b 100644 --- a/src/map/battle.hpp +++ b/src/map/battle.hpp @@ -19,9 +19,6 @@ struct Damage ATK dmg_lv; }; -// 属性表(読み込みはpc.c、battle_attr_fixで使用) -extern int attr_fix_table[4][10][10]; - struct map_session_data; struct mob_data; struct block_list; @@ -32,9 +29,6 @@ struct Damage battle_calc_attack(BF attack_type, struct block_list *bl, struct block_list *target, SkillID skill_num, int skill_lv, int flag); -// 属性修正計算 -int battle_attr_fix(int damage, int atk_elem, int def_elem); - // 実際にHPを増減 int battle_damage(struct block_list *bl, struct block_list *target, int damage, int flag); diff --git a/src/map/map.hpp b/src/map/map.hpp index b2a7127..0f89743 100644 --- a/src/map/map.hpp +++ b/src/map/map.hpp @@ -298,13 +298,13 @@ struct map_session_data short weapontype1, weapontype2; earray<int, ATTR, ATTR::COUNT> paramb, paramc, parame, paramcard; int hit, flee, flee2, aspd, amotion, dmotion; - int watk, watk2, atkmods[3]; + int watk, watk2; int def, def2, mdef, mdef2, critical, matk1, matk2; int atk_ele, def_ele, star, overrefine; int castrate, hprate, sprate, dsprate; int addele[10], addrace[12], addsize[3], subele[10], subrace[12]; earray<int, BadSC, BadSC::COUNT> addeff, addeff2, reseff; - int watk_, watk_2, atkmods_[3], addele_[10], addrace_[12], addsize_[3]; //二刀流のために追加 + int watk_, watk_2, addele_[10], addrace_[12], addsize_[3]; //二刀流のために追加 int atk_ele_, star_, overrefine_; //二刀流のために追加 int base_atk, atk_rate; int arrow_atk, arrow_ele, arrow_cri, arrow_hit, arrow_range; diff --git a/src/map/pc.cpp b/src/map/pc.cpp index 23618c5..931db47 100644 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -67,6 +67,7 @@ static //const int hp_coefficient_0 = 0; static //const int hp_coefficient2_0 = 500; +// TODO see if this can be turned into an "as-needed" formula static int hp_sigma_val_0[MAX_LEVEL]; static //const @@ -95,30 +96,103 @@ int aspd_base_0[17] = 2000, 2000, }; -static -char job_bonus_0[3][MAX_LEVEL]; -static -int exp_table[14][MAX_LEVEL]; -static -char statp[255][7]; -static -struct +static const +int exp_table_0[MAX_LEVEL] = +{ + // 1 .. 9 + 9, 16, 25, 36, + 77, 112, 153, 200, 253, + // 10 .. 19 + 320, 385, 490, 585, 700, + 830, 970, 1120, 1260, 1420, + // 20 .. 29 + 1620, 1860, 1990, 2240, 2504, + 2950, 3426, 3934, 4474, 6889, + // 30 .. 39 + 7995, 9174, 10425, 11748, 13967, + 15775, 17678, 19677, 21773, 30543, + // 40 .. 49 + 34212, 38065, 42102, 46323, 53026, + 58419, 64041, 69892, 75973, 102468, + // 50 .. 59 + 115254, 128692, 142784, 157528, 178184, + 196300, 215198, 234879, 255341, 330188, + // 60 .. 69 + 365914, 403224, 442116, 482590, 536948, + 585191, 635278, 687211, 740988, 925400, + // 70 .. 79 + 1473746, 1594058, 1718928, 1848355, 1982340, + 2230113, 2386162, 2547417, 2713878, 3206160, + // 80 .. 89 + 3681024, 4022472, 4377024, 4744680, 5125440, + 5767272, 6204000, 6655464, 7121664, 7602600, + // 90 .. 99 + 9738720, 11649960, 13643520, 18339300, 23836800, + 35658000, 48687000, 58135000, 99999999, 0, +}; +// is this *actually* used anywhere? +static const +int exp_table_7[MAX_LEVEL] = { - SkillID id; - int max; - struct - { - SkillID id; - short lv; - } need[6]; -} skill_tree_0_0[100]; - -static -int atkmods[3][20]; // 武器ATKサイズ修正(size_fix.txt) -static -int refinebonus[5][3]; // 精錬ボーナステーブル(refine_db.txt) -static -int percentrefinery[5][10]; // 精錬成功率(refine_db.txt) + // 1 .. 9 + 10, 18, 28, 40, 91, 151, 205, 268, 340 +}; +// TODO generate this table instead +static int stat_p[MAX_LEVEL] = +{ + // 1..9 + 48, 52, 56, 60, 64, 69, 74, 79, 84, + // 10..19 + 90, 96, 102,108,115, 122,129,136,144,152, + // 20..29 + 160,168,177,186,195, 204,214,224,234,244, + // 30..39 + 255,266,277,288,300, 312,324,336,349,362, + // 40..49 + 375,388,402,416,430, 444,459,474,489,504, + // 50..59 + 520,536,552,568,585, 602,619,636,654,672, + // 60..69 + 690,708,727,746,765, 784,804,824,844,864, + // 70..79 + 885,906,927,948,970, 992,1014,1036,1059,1082, + // 80..89 + 1105,1128,1152,1176,1200, 1224,1249,1274,1299,1324, + // 90..99 + 1350,1376,1402,1428,1455, 1482,1509,1536,1564,1592, + // 100..109 + 1620,1648,1677,1706,1735, 1764,1794,1824,1854,1884, + // 110..119 + 1915,1946,1977,2008,2040, 2072,2104,2136,2169,2202, + // 120..129 + 2235,2268,2302,2336,2370, 2404,2439,2474,2509,2544, + // 130..139 + 2580,2616,2652,2688,2725, 2762,2799,2836,2874,2912, + // 140..149 + 2950,2988,3027,3066,3105, 3144,3184,3224,3264,3304, + // 150..159 + 3345,3386,3427,3468,3510, 3552,3594,3636,3679,3722, + // 160..169 + 3765,3808,3852,3896,3940, 3984,4029,4074,4119,4164, + // 170..179 + 4210,4256,4302,4348,4395, 4442,4489,4536,4584,4632, + // 180..189 + 4680,4728,4777,4826,4875, 4924,4974,5024,5074,5124, + // 190..199 + 5175,5226,5277,5328,5380, 5432,5484,5536,5589,5642, + // 200..209 + 5695,5748,5802,5856,5910, 5964,6019,6074,6129,6184, + // 210..219 + 6240,6296,6352,6408,6465, 6522,6579,6636,6694,6752, + // 220..229 + 6810,6868,6927,6986,7045, 7104,7164,7224,7284,7344, + // 230..239 + 7405,7466,7527,7588,7650, 7712,7774,7836,7899,7962, + // 240..249 + 8025,8088,8152,8216,8280, 8344,8409,8474,8539,8604, + // 250..255 + 8670,8736,8802,8868,8935, 9002, +}; static int dirx[8] = { 0, -1, -1, -1, 0, 1, 1, 1 }; @@ -217,13 +291,6 @@ int pc_set_gm_level(int account_id, int level) return 0; } -int pc_getrefinebonus(int lv, int type) -{ - if (lv >= 0 && lv < 5 && type >= 0 && type < 3) - return refinebonus[lv][type]; - return 0; -} - static int distance(int x0, int y0, int x1, int y1) { @@ -1022,42 +1089,15 @@ int pc_calc_skillpoint(struct map_session_data *sd) * 覚えられるスキルの計算 *------------------------------------------ */ -// TODO see if this can be removed static void pc_calc_skilltree(struct map_session_data *sd) { nullpo_retv(sd); - int flag; - // 通常の計算 - do - { - flag = 0; - SkillID id; - for (int i = 0; - (id = skill_tree_0_0[i].id) != SkillID::ZERO - && id != SkillID::NEGATIVE; - i++) - { - int j, f = 1; - if (!battle_config.skillfree) - { - for (j = 0; j < 5; j++) - { - if (skill_tree_0_0[i].need[j].id != SkillID::ZERO - && pc_checkskill(sd, skill_tree_0_0[i].need[j].id) - < skill_tree_0_0[i].need[j].lv) - f = 0; - } - } - if (f && sd->status.skill[id].id == SkillID::ZERO) - { - sd->status.skill[id].id = id; - flag = 1; - } - } - } - while (flag); + // TODO - I *think* this can be removed + // since the skill is worthless without a level + if (sd->status.skill[NV_EMOTE].id == SkillID::ZERO) + sd->status.skill[NV_EMOTE].id = NV_EMOTE; } /*========================================== @@ -1410,16 +1450,16 @@ int pc_calcstatus(struct map_session_data *sd, int first) sd->def += sd->inventory_data[index]->def; if (sd->inventory_data[index]->type == ItemType::WEAPON) { - int r, wlv = sd->inventory_data[index]->wlv; + int r; if (i == EQUIP::SHIELD && sd->status.inventory[index].equip == EPOS::SHIELD) { //二刀流用データ入力 sd->watk_ += sd->inventory_data[index]->atk; sd->watk_2 = (r = sd->status.inventory[index].refine) * // 精錬攻撃力 - refinebonus[wlv][0]; - if ((r -= refinebonus[wlv][2]) > 0) // 過剰精錬ボーナス - sd->overrefine_ = r * refinebonus[wlv][1]; + 0; + if ((r -= 10) > 0) // 過剰精錬ボーナス + sd->overrefine_ = r * 0; if (sd->status.inventory[index].card[0] == 0x00ff) { // 製造武器 @@ -1448,9 +1488,9 @@ int pc_calcstatus(struct map_session_data *sd, int first) arg[1].v.i = sd->inventory_data[index]->nameid; sd->watk += sd->inventory_data[index]->atk; sd->watk2 += (r = sd->status.inventory[index].refine) * // 精錬攻撃力 - refinebonus[wlv][0]; - if ((r -= refinebonus[wlv][2]) > 0) // 過剰精錬ボーナス - sd->overrefine += r * refinebonus[wlv][1]; + 0; + if ((r -= 10) > 0) // 過剰精錬ボーナス + sd->overrefine += r * 0; if (sd->status.inventory[index].card[0] == 0x00ff) { // 製造武器 @@ -1471,7 +1511,7 @@ int pc_calcstatus(struct map_session_data *sd, int first) arg[1].v.i = sd->inventory_data[index]->nameid; sd->watk += sd->inventory_data[index]->atk; refinedef += - sd->status.inventory[index].refine * refinebonus[0][0]; + sd->status.inventory[index].refine * 0; run_script_l(sd->inventory_data[index]->equip_script, 0, sd->bl.id, 0, 2, arg); } @@ -1528,15 +1568,6 @@ int pc_calcstatus(struct map_session_data *sd, int first) if (sd->aspd_add_rate != 100) sd->aspd_rate += sd->aspd_add_rate - 100; - // 武器ATKサイズ補正 (右手) - sd->atkmods[0] = atkmods[0][sd->weapontype1]; - sd->atkmods[1] = atkmods[1][sd->weapontype1]; - sd->atkmods[2] = atkmods[2][sd->weapontype1]; - //武器ATKサイズ補正 (左手) - sd->atkmods_[0] = atkmods[0][sd->weapontype2]; - sd->atkmods_[1] = atkmods[1][sd->weapontype2]; - sd->atkmods_[2] = atkmods[2][sd->weapontype2]; - // ステータス変化による基本パラメータ補正 if (sd->sc_count) { @@ -2186,6 +2217,7 @@ int pc_calcstatus(struct map_session_data *sd, int first) * 装 備品による能力等のボーナス設定 *------------------------------------------ */ +// TODO: in each pc_bonus*, purge all 'type' not used by scripts int pc_bonus(struct map_session_data *sd, SP type, int val) { nullpo_ret(sd); @@ -4400,7 +4432,8 @@ int pc_gainexp_reason(struct map_session_data *sd, int base_exp, int job_exp, MAP_LOG_PC(sd, "GAINXP %d %d %s", base_exp, job_exp, reasons[reason]); if (sd->sc_data[SC_RICHMANKIM].timer != -1) - { // added bounds checking [Vaalris] + { + // added bounds checking [Vaalris] base_exp += base_exp * (25 + sd->sc_data[SC_RICHMANKIM].val1 * 25) / 100; job_exp += @@ -4489,7 +4522,7 @@ int pc_nextbaseexp(struct map_session_data *sd) if (sd->status.base_level >= MAX_LEVEL || sd->status.base_level <= 0) return 0; - return exp_table[0][sd->status.base_level - 1]; + return exp_table_0[sd->status.base_level - 1]; } /*========================================== @@ -4517,7 +4550,7 @@ int pc_nextbaseafter(struct map_session_data *sd) if (sd->status.base_level >= MAX_LEVEL || sd->status.base_level <= 0) return 0; - return exp_table[0][sd->status.base_level]; + return exp_table_0[sd->status.base_level]; } /*========================================== @@ -4531,7 +4564,7 @@ int pc_nextjobafter(struct map_session_data *sd) if (sd->status.job_level >= MAX_LEVEL || sd->status.job_level <= 0) return 0; - return exp_table[7][sd->status.job_level]; + return exp_table_7[sd->status.job_level]; } /*========================================== @@ -4643,34 +4676,6 @@ int pc_skillup(struct map_session_data *sd, SkillID skill_num) } /*========================================== - * /allskill - *------------------------------------------ - */ -int pc_allskillup(struct map_session_data *sd) -{ - nullpo_ret(sd); - - for (SkillID i : erange(SkillID(), MAX_SKILL)) - sd->status.skill[i].id = SkillID::ZERO; - - { - SkillID id; - for (int i = 0; - (id = skill_tree_0_0[i].id) != SkillID::ZERO - && id != SkillID::NEGATIVE; - i++) - { - if (sd->status.skill[id].id == SkillID::ZERO - && skill_get_inf2(id) & 0x01) - sd->status.skill[id].lv = skill_get_max(id); - } - } - pc_calcstatus(sd, 0); - - return 0; -} - -/*========================================== * /resetlvl *------------------------------------------ */ @@ -4764,9 +4769,7 @@ int pc_resetstate(struct map_session_data *sd) nullpo_ret(sd); -// New statpoint table used here - Dexity - sd->status.status_point = atoi(statp[sd->status.base_level - 1]); -// End addition + sd->status.status_point = stat_p[sd->status.base_level - 1]; clif_updatestatus(sd, SP_STATUSPOINT); @@ -5891,30 +5894,6 @@ int pc_setaccountreg2(struct map_session_data *sd, const char *reg, int val) } /*========================================== - * 精錬成功率 - *------------------------------------------ - */ -int pc_percentrefinery(struct map_session_data *, struct item *item) -{ - int percent; - - nullpo_ret(item); - percent = percentrefinery[itemdb_wlv(item->nameid)][(int) item->refine]; - - // 確率の有効範囲チェック - if (percent > 100) - { - percent = 100; - } - if (percent < 0) - { - percent = 0; - } - - return percent; -} - -/*========================================== * イベントタイマー処理 *------------------------------------------ */ @@ -7083,261 +7062,6 @@ void pc_setstand(struct map_session_data *sd) sd->state.dead_sit = 0; } -// -// 初期化物 -// -/*========================================== - * 設定ファイル読み込む - * exp.txt 必要経験値 - * job_db1.txt 重量,hp,sp,攻撃速度 - * job_db2.txt job能力値ボーナス - * skill_tree.txt 各職毎のスキルツリー - * attr_fix.txt 属性修正テーブル - * size_fix.txt サイズ補正テーブル - * refine_db.txt 精錬データテーブル - *------------------------------------------ - */ -static -int pc_readdb(void) -{ - int i, j, k; - FILE *fp; - char line[1024], *p; - - // 必要経験値読み込み - - fp = fopen_("db/exp.txt", "r"); - if (fp == NULL) - { - PRINTF("can't read db/exp.txt\n"); - return 1; - } - i = 0; - while (fgets(line, sizeof(line) - 1, fp)) - { - int bn, b1, b2, b3, b4, b5, b6, jn, j1, j2, j3, j4, j5, j6; - if (line[0] == '/' && line[1] == '/') - continue; - if (sscanf(line, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d", &bn, &b1, &b2, - &b3, &b4, &b5, &b6, &jn, &j1, &j2, &j3, &j4, &j5, &j6) != 14) - continue; - exp_table[0][i] = bn; - exp_table[1][i] = b1; - exp_table[2][i] = b2; - exp_table[3][i] = b3; - exp_table[4][i] = b4; - exp_table[5][i] = b5; - exp_table[6][i] = b6; - exp_table[7][i] = jn; - exp_table[8][i] = j1; - exp_table[9][i] = j2; - exp_table[10][i] = j3; - exp_table[11][i] = j4; - exp_table[12][i] = j5; - exp_table[13][i] = j6; - i++; - if (i >= battle_config.maximum_level) - break; - } - fclose_(fp); - PRINTF("read db/exp.txt done\n"); - - // JOBボーナス - fp = fopen_("db/job_db2.txt", "r"); - if (fp == NULL) - { - PRINTF("can't read db/job_db2.txt\n"); - return 1; - } - i = 0; - while (fgets(line, sizeof(line) - 1, fp)) - { - if (line[0] == '/' && line[1] == '/') - continue; - for (j = 0, p = line; j < MAX_LEVEL && p; j++) - { - if (sscanf(p, "%d", &k) == 0) - break; - job_bonus_0[i][j] = k; - p = strchr(p, ','); - if (p) - p++; - } - i++; - break; - } - fclose_(fp); - PRINTF("read db/job_db2.txt done\n"); - - // スキルツリー - memset(skill_tree_0_0, '\0', sizeof(skill_tree_0_0)); - fp = fopen_("db/skill_tree.txt", "r"); - if (fp == NULL) - { - PRINTF("can't read db/skill_tree.txt\n"); - return 1; - } - while (fgets(line, sizeof(line) - 1, fp)) - { - char *split[50]; - if (line[0] == '/' && line[1] == '/') - continue; - for (j = 0, p = line; j < 13 && p; j++) - { - split[j] = p; - p = strchr(p, ','); - if (p) - *p++ = 0; - } - if (j < 13) - continue; - i = atoi(split[0]); - if (i != 0) - continue; - for (j = 0; skill_tree_0_0[j].id != SkillID::ZERO; j++) - {} - skill_tree_0_0[j].id = SkillID(atoi(split[1])); - skill_tree_0_0[j].max = atoi(split[2]); - for (k = 0; k < 5; k++) - { - skill_tree_0_0[j].need[k].id = SkillID(atoi(split[k * 2 + 3])); - skill_tree_0_0[j].need[k].lv = atoi(split[k * 2 + 4]); - } - } - fclose_(fp); - PRINTF("read db/skill_tree.txt done\n"); - - // 属性修正テーブル - for (i = 0; i < 4; i++) - for (j = 0; j < 10; j++) - for (k = 0; k < 10; k++) - attr_fix_table[i][j][k] = 100; - fp = fopen_("db/attr_fix.txt", "r"); - if (fp == NULL) - { - PRINTF("can't read db/attr_fix.txt\n"); - return 1; - } - while (fgets(line, sizeof(line) - 1, fp)) - { - char *split[10]; - int lv, n; - if (line[0] == '/' && line[1] == '/') - continue; - for (j = 0, p = line; j < 3 && p; j++) - { - split[j] = p; - p = strchr(p, ','); - if (p) - *p++ = 0; - } - lv = atoi(split[0]); - n = atoi(split[1]); -// PRINTF("%d %d\n",lv,n); - - for (i = 0; i < n;) - { - if (!fgets(line, sizeof(line) - 1, fp)) - break; - if (line[0] == '/' && line[1] == '/') - continue; - - for (j = 0, p = line; j < n && p; j++) - { - while (*p == 32 && *p > 0) - p++; - attr_fix_table[lv - 1][i][j] = atoi(p); - if (battle_config.attr_recover == 0 - && attr_fix_table[lv - 1][i][j] < 0) - attr_fix_table[lv - 1][i][j] = 0; - p = strchr(p, ','); - if (p) - *p++ = 0; - } - - i++; - } - } - fclose_(fp); - PRINTF("read db/attr_fix.txt done\n"); - - // サイズ補正テーブル - for (i = 0; i < 3; i++) - for (j = 0; j < 20; j++) - atkmods[i][j] = 100; - fp = fopen_("db/size_fix.txt", "r"); - if (fp == NULL) - { - PRINTF("can't read db/size_fix.txt\n"); - return 1; - } - i = 0; - while (fgets(line, sizeof(line) - 1, fp)) - { - char *split[20]; - if (line[0] == '/' && line[1] == '/') - continue; - if (atoi(line) <= 0) - continue; - memset(split, 0, sizeof(split)); - for (j = 0, p = line; j < 20 && p; j++) - { - split[j] = p; - p = strchr(p, ','); - if (p) - *p++ = 0; - } - for (j = 0; j < 20 && split[j]; j++) - atkmods[i][j] = atoi(split[j]); - i++; - } - fclose_(fp); - PRINTF("read db/size_fix.txt done\n"); - - // 精錬データテーブル - for (i = 0; i < 5; i++) - { - for (j = 0; j < 10; j++) - percentrefinery[i][j] = 100; - refinebonus[i][0] = 0; - refinebonus[i][1] = 0; - refinebonus[i][2] = 10; - } - fp = fopen_("db/refine_db.txt", "r"); - if (fp == NULL) - { - PRINTF("can't read db/refine_db.txt\n"); - return 1; - } - i = 0; - while (fgets(line, sizeof(line) - 1, fp)) - { - char *split[16]; - if (line[0] == '/' && line[1] == '/') - continue; - if (atoi(line) <= 0) - continue; - memset(split, 0, sizeof(split)); - for (j = 0, p = line; j < 16 && p; j++) - { - split[j] = p; - p = strchr(p, ','); - if (p) - *p++ = 0; - } - refinebonus[i][0] = atoi(split[0]); // 精錬ボーナス - refinebonus[i][1] = atoi(split[1]); // 過剰精錬ボーナス - refinebonus[i][2] = atoi(split[2]); // 安全精錬限界 - for (j = 0; j < 10 && split[j]; j++) - percentrefinery[i][j] = atoi(split[j + 3]); - i++; - } - fclose_(fp); //Lupus. close this file!!! - PRINTF("read db/refine_db.txt done\n"); - - return 0; -} - static int pc_calc_sigma(void) { @@ -7355,55 +7079,12 @@ int pc_calc_sigma(void) return 0; } -static -void pc_statpointdb(void) -{ - char *buf_stat; - int i = 0, j = 0, k = 0, l = 0, end = 0; - - FILE *stp; - - stp = fopen_("db/statpoint.txt", "r"); - - if (stp == NULL) - { - PRINTF("can't read db/statpoint.txt\n"); - return; - } - - fseek(stp, 0, SEEK_END); - end = ftell(stp); - rewind(stp); - - buf_stat = (char *) malloc(end + 1); - l = fread(buf_stat, 1, end, stp); - fclose_(stp); - PRINTF("read db/statpoint.txt done (size=%d)\n", l); - - for (i = 0; i < 255; i++) - { - j = 0; - while (*(buf_stat + k) != '\n') - { - statp[i][j] = *(buf_stat + k); - j++; - k++; - } - statp[i][j + 1] = '\0'; - k++; - } - - free(buf_stat); -} - /*========================================== * pc関 係初期化 *------------------------------------------ */ int do_init_pc(void) { - pc_readdb(); - pc_statpointdb(); pc_calc_sigma(); // gm_account_db = numdb_init(); diff --git a/src/map/pc.hpp b/src/map/pc.hpp index 56a6f1c..a775385 100644 --- a/src/map/pc.hpp +++ b/src/map/pc.hpp @@ -52,7 +52,6 @@ void pc_touch_all_relevant_npcs(struct map_session_data *sd); /* Checks all npc int pc_isGM(struct map_session_data *sd); int pc_iskiller(struct map_session_data *src, struct map_session_data *target); // [MouseJstr] -int pc_getrefinebonus(int lv, int type); void pc_invisibility(struct map_session_data *sd, int enabled); // [Fate] int pc_counttargeted(struct map_session_data *sd, struct block_list *src, @@ -119,7 +118,6 @@ int pc_need_status_point(struct map_session_data *, SP); int pc_statusup(struct map_session_data *, SP); int pc_statusup2(struct map_session_data *, SP, int); int pc_skillup(struct map_session_data *, SkillID); -int pc_allskillup(struct map_session_data *); int pc_resetlvl(struct map_session_data *, int type); int pc_resetstate(struct map_session_data *); int pc_resetskill(struct map_session_data *); @@ -147,7 +145,6 @@ int pc_readaccountreg(struct map_session_data *, const char *); int pc_setaccountreg(struct map_session_data *, const char *, int); int pc_readaccountreg2(struct map_session_data *, const char *); int pc_setaccountreg2(struct map_session_data *, const char *, int); -int pc_percentrefinery(struct map_session_data *sd, struct item *item); int pc_addeventtimer(struct map_session_data *sd, int tick, const char *name); |