OSDN Git Service

[Fix] #2470 強化も弱化もしない装備品 (毒針・ダイヤモンドエッジ・死の大鎌)が判定をすり抜けて強化/弱化する不具合を解消した
authorHourier <66951241+Hourier@users.noreply.github.com>
Wed, 6 Apr 2022 08:57:24 +0000 (17:57 +0900)
committerHourier <66951241+Hourier@users.noreply.github.com>
Sat, 9 Apr 2022 13:57:30 +0000 (22:57 +0900)
src/object-enchant/weapon/abstract-weapon-enchanter.cpp
src/object-enchant/weapon/abstract-weapon-enchanter.h
src/object-enchant/weapon/apply-magic-arrow.cpp
src/object-enchant/weapon/apply-magic-bow.cpp
src/object-enchant/weapon/apply-magic-digging.cpp
src/object-enchant/weapon/apply-magic-hafted.cpp
src/object-enchant/weapon/apply-magic-hafted.h
src/object-enchant/weapon/melee-weapon-enchanter.cpp

index 71b16f2..2eeb7de 100644 (file)
@@ -9,11 +9,26 @@ AbstractWeaponEnchanter::AbstractWeaponEnchanter(ObjectType *o_ptr, DEPTH level,
     , level(level)
     , power(power)
 {
-    this->decide_skip();
+}
+
+void AbstractWeaponEnchanter::decide_skip()
+{
+    if (this->power == 0) {
+        this->should_skip = true;
+    }
+}
+
+void AbstractWeaponEnchanter::apply_magic()
+{
     if (this->should_skip) {
         return;
     }
 
+    this->prepare_application();
+}
+
+void AbstractWeaponEnchanter::prepare_application()
+{
     auto tohit1 = static_cast<short>(randint1(5) + m_bonus(5, this->level));
     auto todam1 = static_cast<short>(randint1(5) + m_bonus(5, this->level));
     auto tohit2 = static_cast<short>(m_bonus(10, this->level));
@@ -48,10 +63,3 @@ AbstractWeaponEnchanter::AbstractWeaponEnchanter(ObjectType *o_ptr, DEPTH level,
         }
     }
 }
-
-void AbstractWeaponEnchanter::decide_skip()
-{
-    if (this->power == 0) {
-        this->should_skip = true;
-    }
-}
index 9cbe0f5..973e5d9 100644 (file)
@@ -15,5 +15,9 @@ protected:
     int power;
     bool should_skip = false;
 
+    virtual void apply_magic();
     virtual void decide_skip();
+
+private:
+    void prepare_application();
 };
index cd1bed4..13172a8 100644 (file)
@@ -30,6 +30,7 @@ ArrowEnchanter::ArrowEnchanter(PlayerType *player_ptr, ObjectType *o_ptr, DEPTH
  */
 void ArrowEnchanter::apply_magic()
 {
+    this->decide_skip();
     if (this->should_skip) {
         return;
     }
index 530327f..c5340ee 100644 (file)
@@ -29,6 +29,7 @@ BowEnchanter::BowEnchanter(PlayerType *player_ptr, ObjectType *o_ptr, DEPTH leve
  */
 void BowEnchanter::apply_magic()
 {
+    this->decide_skip();
     if (this->should_skip) {
         return;
     }
index 663efa8..c3dc70e 100644 (file)
@@ -28,6 +28,7 @@ DiggingEnchanter::DiggingEnchanter(PlayerType *player_ptr, ObjectType *o_ptr, DE
  */
 void DiggingEnchanter::apply_magic()
 {
+    this->decide_skip();
     if (this->should_skip) {
         return;
     }
index 6086766..61599b7 100644 (file)
@@ -23,12 +23,6 @@ HaftedEnchanter::HaftedEnchanter(PlayerType *player_ptr, ObjectType *o_ptr, DEPT
 {
 }
 
-void HaftedEnchanter::decide_skip()
-{
-    AbstractWeaponEnchanter::decide_skip();
-    this->should_skip |= this->o_ptr->sval == SV_DEATH_SCYTHE;
-}
-
 void HaftedEnchanter::give_ego_index()
 {
     while (true) {
index 50e6253..0fb8384 100644 (file)
@@ -10,7 +10,6 @@ public:
     HaftedEnchanter(PlayerType *player_ptr, ObjectType *o_ptr, DEPTH level, int power);
 
 protected:
-    void decide_skip() override;
     void sval_enchant() override{};
     void give_ego_index() override;
     void give_high_ego_index() override{};
index 2a0075c..2ce437e 100644 (file)
@@ -20,6 +20,8 @@ MeleeWeaponEnchanter::MeleeWeaponEnchanter(PlayerType *player_ptr, ObjectType *o
  */
 void MeleeWeaponEnchanter::apply_magic()
 {
+    this->decide_skip();
+    AbstractWeaponEnchanter::apply_magic();
     if (this->should_skip) {
         return;
     }