diff options
-rw-r--r-- | conf/battle/player.conf | 6 | ||||
-rw-r--r-- | src/map/battle.c | 3 | ||||
-rw-r--r-- | src/map/battle.h | 3 | ||||
-rw-r--r-- | src/map/status.c | 18 |
4 files changed, 26 insertions, 4 deletions
diff --git a/conf/battle/player.conf b/conf/battle/player.conf index 2682a34c7..c5db26c6b 100644 --- a/conf/battle/player.conf +++ b/conf/battle/player.conf @@ -175,3 +175,9 @@ snovice_call_type: 0 // Be mindful that the more options used, the easier it becomes to cheat features that rely on idletime (e.g. checkidle()). // Default: walk ( 0x1 ) + useskilltoid ( 0x2 ) + useskilltopos ( 0x4 ) + useitem ( 0x8 ) + attack ( 0x10 ) = 0x1F idletime_criteria: 0x1F + +// Can players get ATK/DEF from refinements on costume/shadow equips? +// Default: yes (Official behavior not known) +costume_refine_def: yes +shadow_refine_def: yes +shadow_refine_atk: yes diff --git a/src/map/battle.c b/src/map/battle.c index 65038f240..1c3817a31 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -7192,6 +7192,9 @@ static const struct battle_data { { "feature.roulette", &battle_config.feature_roulette, 1, 0, 1, }, { "show_monster_hp_bar", &battle_config.show_monster_hp_bar, 1, 0, 1, }, { "fix_warp_hit_delay_abuse", &battle_config.fix_warp_hit_delay_abuse, 0, 0, 1, }, + { "costume_refine_def", &battle_config.costume_refine_def, 1, 0, 1, }, + { "shadow_refine_def", &battle_config.shadow_refine_def, 1, 0, 1, }, + { "shadow_refine_atk", &battle_config.shadow_refine_atk, 1, 0, 1, }, }; #ifndef STATS_OPT_OUT /** diff --git a/src/map/battle.h b/src/map/battle.h index ad59efedd..586673c17 100644 --- a/src/map/battle.h +++ b/src/map/battle.h @@ -528,6 +528,9 @@ struct Battle_Config { int show_monster_hp_bar; // [Frost] int fix_warp_hit_delay_abuse; + + int costume_refine_def, shadow_refine_def; + int shadow_refine_atk; }; /* criteria for battle_config.idletime_critera */ diff --git a/src/map/status.c b/src/map/status.c index d7a216c97..c7ce2c9c0 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -2434,7 +2434,7 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) { sd->status.inventory[index].refine = MAX_REFINE; if(sd->inventory_data[index]->type == IT_WEAPON) { - int r,wlv = sd->inventory_data[index]->wlv; + int r = sd->status.inventory[index].refine,wlv = sd->inventory_data[index]->wlv; struct weapon_data *wd; struct weapon_atk *wa; if (wlv >= REFINE_TYPE_MAX) @@ -2447,7 +2447,10 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) { wa = &bstatus->rhw; } wa->atk += sd->inventory_data[index]->atk; - if ( (r = sd->status.inventory[index].refine) ) + if ( !battle_config.shadow_refine_atk && itemdb_is_shadowequip(sd->inventory_data[index]->equip) ) + r = 0; + + if (r) wa->atk2 = status->dbs->refine_info[wlv].bonus[r-1] / 100; #ifdef RENEWAL @@ -2485,9 +2488,16 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) { } } else if(sd->inventory_data[index]->type == IT_ARMOR) { - int r; - if ( (r = sd->status.inventory[index].refine) ) + int r = sd->status.inventory[index].refine; + + if ( (!battle_config.costume_refine_def && itemdb_is_costumeequip(sd->inventory_data[index]->equip)) || + (!battle_config.shadow_refine_def && itemdb_is_shadowequip(sd->inventory_data[index]->equip)) + ) + r = 0; + + if (r) refinedef += status->dbs->refine_info[REFINE_TYPE_ARMOR].bonus[r-1]; + if(sd->inventory_data[index]->script) { if( i == EQI_HAND_L ) //Shield sd->state.lr_flag = 3; |