}
if ((r_ptr->level + 10) > player_ptr->lev) {
- auto &now_exp = player_ptr->weapon_exp[j_ptr->tval][j_ptr->sval];
- if (now_exp < s_info[enum2i(player_ptr->pclass)].w_max[j_ptr->tval][j_ptr->sval]) {
- SUB_EXP amount = 0;
- if (now_exp < WEAPON_EXP_BEGINNER)
- amount = 80;
- else if (now_exp < WEAPON_EXP_SKILLED)
- amount = 25;
- else if ((now_exp < WEAPON_EXP_EXPERT) && (player_ptr->lev > 19))
- amount = 10;
- else if (player_ptr->lev > 34)
- amount = 2;
- now_exp += amount;
- set_bits(player_ptr->update, PU_BONUS);
- }
+ PlayerSkill(player_ptr).gain_range_weapon_exp(j_ptr);
}
if (player_ptr->riding) {
*/
static void get_weapon_exp(player_type *player_ptr, player_attack_type *pa_ptr)
{
- auto tval = player_ptr->inventory_list[INVEN_MAIN_HAND + pa_ptr->hand].tval;
- auto sval = player_ptr->inventory_list[INVEN_MAIN_HAND + pa_ptr->hand].sval;
- int now_exp = player_ptr->weapon_exp[tval][sval];
- if (now_exp >= s_info[enum2i(player_ptr->pclass)].w_max[tval][sval])
- return;
+ auto *o_ptr = &player_ptr->inventory_list[INVEN_MAIN_HAND + pa_ptr->hand];
- SUB_EXP amount = 0;
- if (now_exp < WEAPON_EXP_BEGINNER)
- amount = 80;
- else if (now_exp < WEAPON_EXP_SKILLED)
- amount = 10;
- else if ((now_exp < WEAPON_EXP_EXPERT) && (player_ptr->lev > 19))
- amount = 1;
- else if ((player_ptr->lev > 34) && one_in_(2))
- amount = 1;
-
- player_ptr->weapon_exp[tval][sval] += amount;
- player_ptr->update |= (PU_BONUS);
+ PlayerSkill(player_ptr).gain_melee_weapon_exp(o_ptr);
}
/*!
#include "player/player-skill.h"
+#include "core/player-update-types.h"
+#include "system/object-type-definition.h"
+#include "system/player-type-definition.h"
+#include "util/bit-flags-calculator.h"
/*
* The skill table
*/
const concptr exp_level_str[5] =
#ifdef JP
-{ "[初心者]", "[入門者]", "[熟練者]", "[エキスパート]", "[達人]" };
+ { "[初心者]", "[入門者]", "[熟練者]", "[エキスパート]", "[達人]" };
#else
-{"[Unskilled]", "[Beginner]", "[Skilled]", "[Expert]", "[Master]"};
+ { "[Unskilled]", "[Beginner]", "[Skilled]", "[Expert]", "[Master]" };
#endif
+
+PlayerSkill::PlayerSkill(player_type *player_ptr)
+ : player_ptr(player_ptr)
+{
+}
+
+void PlayerSkill::gain_melee_weapon_exp(const object_type *o_ptr)
+{
+ auto now_exp = this->player_ptr->weapon_exp[o_ptr->tval][o_ptr->sval];
+ if (now_exp >= s_info[enum2i(this->player_ptr->pclass)].w_max[o_ptr->tval][o_ptr->sval])
+ return;
+
+ SUB_EXP amount = 0;
+ if (now_exp < WEAPON_EXP_BEGINNER)
+ amount = 80;
+ else if (now_exp < WEAPON_EXP_SKILLED)
+ amount = 10;
+ else if ((now_exp < WEAPON_EXP_EXPERT) && (this->player_ptr->lev > 19))
+ amount = 1;
+ else if ((player_ptr->lev > 34) && one_in_(2))
+ amount = 1;
+
+ this->player_ptr->weapon_exp[o_ptr->tval][o_ptr->sval] += amount;
+ set_bits(this->player_ptr->update, PU_BONUS);
+}
+
+void PlayerSkill::gain_range_weapon_exp(const object_type *o_ptr)
+{
+ auto now_exp = this->player_ptr->weapon_exp[o_ptr->tval][o_ptr->sval];
+ if (now_exp >= s_info[enum2i(this->player_ptr->pclass)].w_max[o_ptr->tval][o_ptr->sval])
+ return;
+
+ SUB_EXP amount = 0;
+ if (now_exp < WEAPON_EXP_BEGINNER)
+ amount = 80;
+ else if (now_exp < WEAPON_EXP_SKILLED)
+ amount = 25;
+ else if ((now_exp < WEAPON_EXP_EXPERT) && (this->player_ptr->lev > 19))
+ amount = 10;
+ else if (this->player_ptr->lev > 34)
+ amount = 2;
+
+ this->player_ptr->weapon_exp[o_ptr->tval][o_ptr->sval] += amount;
+ set_bits(this->player_ptr->update, PU_BONUS);
+}