OSDN Git Service

[Fix] #38813 get_mon_num() の階層アンダーフロー回避と player_outfit() が pval=0 の死体を生成しない仕様にした...
authorDeskull <deskull@users.sourceforge.jp>
Fri, 28 Dec 2018 07:00:06 +0000 (16:00 +0900)
committerDeskull <deskull@users.sourceforge.jp>
Fri, 28 Dec 2018 07:00:06 +0000 (16:00 +0900)
src/birth.c
src/monster2.c

index 8b1b9b8..bf40c92 100644 (file)
@@ -2307,8 +2307,11 @@ void player_outfit(void)
                {
                        object_prep(q_ptr, lookup_kind(TV_CORPSE, SV_CORPSE));
                        q_ptr->pval = get_mon_num(2);
-                       q_ptr->number = 1;
-                       add_outfit(q_ptr);
+                       if(q_ptr->pval)
+                       {
+                               q_ptr->number = 1;
+                               add_outfit(q_ptr);
+                       }
                }
                break;
 
index b0fab2a..0ced3fe 100644 (file)
@@ -1243,17 +1243,15 @@ errr get_mon_num_prep(monsterrace_hook_type monster_hook,
  */
 MONRACE_IDX get_mon_num(DEPTH level)
 {
-       int                     i, j, p;
-       int                     r_idx;
-       long            value, total;
-       monster_race    *r_ptr;
-       alloc_entry             *table = alloc_race_table;
+       int i, j, p;
+       MONRACE_IDX r_idx;
+       long value, total;
+       monster_race *r_ptr;
+       alloc_entry *table = alloc_race_table;
 
        int pls_kakuritu, pls_level;
        int delay = mysqrt(level * 10000L) + 400L;
 
-       if (level > MAX_DEPTH - 1) level = MAX_DEPTH - 1;
-
        pls_kakuritu = MAX(NASTY_MON_MAX, NASTY_MON_BASE - ((dungeon_turn / (TURNS_PER_TICK * 5000L) - delay / 10)));
        pls_level    = MIN(NASTY_MON_PLUS_MAX, 3 + dungeon_turn / (TURNS_PER_TICK * 40000L) - delay / 40 + MIN(5, level / 10)) ;
 
@@ -1285,6 +1283,9 @@ MONRACE_IDX get_mon_num(DEPTH level)
                }
        }
 
+       if (level > MAX_DEPTH - 1) level = MAX_DEPTH - 1;
+       if (level < 0) level = 0;
+
        /* Reset total */
        total = 0L;