OSDN Git Service

[Refactor] #37353 アリーナのコマンド制限処理を cmd_limit_arena() に統合。 / Integrate command limitatio...
[hengband/hengband.git] / src / cmd-activate.c
index 9908331..0dc1c83 100644 (file)
 #include "cmd-activate.h"
 #include "object-hook.h"
 #include "spells-summon.h"
+#include "sort.h"
+#include "projection.h"
+#include "artifact.h"
+#include "avatar.h"
+#include "spells-status.h"
+#include "realm-hex.h"
 
 /*!
 * @brief ペット入りモンスターボールをソートするための比較関数
@@ -182,12 +188,12 @@ void do_cmd_activate_aux(INVENTORY_IDX item)
 
                {
                        IDX pet_ctr, i;
-                       IDX *who;
+                       MONSTER_IDX *who;
                        int max_pet = 0;
                        u16b dummy_why;
 
                        /* Allocate the "who" array */
-                       C_MAKE(who, max_m_idx, IDX);
+                       C_MAKE(who, max_m_idx, MONSTER_IDX);
 
                        /* Process the monsters (backwards) */
                        for (pet_ctr = m_max - 1; pet_ctr >= 1; pet_ctr--)
@@ -236,7 +242,7 @@ void do_cmd_activate_aux(INVENTORY_IDX item)
                                o_ptr->xtra5 = (XTRA16)cap_maxhp;
                                if (cap_nickname)
                                {
-                                       cptr t;
+                                       concptr t;
                                        char *s;
                                        char buf[80] = "";
 
@@ -288,7 +294,7 @@ void do_cmd_activate_aux(INVENTORY_IDX item)
                                        if (o_ptr->inscription)
                                        {
                                                char buf[80];
-                                               cptr t;
+                                               concptr t;
 #ifndef JP
                                                bool quote = FALSE;
 #endif
@@ -364,7 +370,10 @@ void do_cmd_activate_aux(INVENTORY_IDX item)
 void do_cmd_activate(void)
 {
        OBJECT_IDX item;
-       cptr q, s;
+       concptr q, s;
+
+       if (p_ptr->wild_mode) return;
+       if (cmd_limit_arena(p_ptr)) return;
 
        if (p_ptr->special_defense & (KATA_MUSOU | KATA_KOUKIJIN))
        {
@@ -376,7 +385,7 @@ void do_cmd_activate(void)
        q = _("どのアイテムを始動させますか? ", "Activate which item? ");
        s = _("始動できるアイテムを装備していない。", "You have nothing to activate.");
 
-       if (!get_item(&item, q, s, (USE_EQUIP | IGNORE_BOTHHAND_SLOT))) return;
+       if (!choose_object(&item, q, s, (USE_EQUIP | IGNORE_BOTHHAND_SLOT))) return;
 
        /* Activate the item */
        do_cmd_activate_aux(item);
@@ -392,7 +401,7 @@ static bool activate_dragon_breath(object_type *o_ptr)
 {
        BIT_FLAGS flgs[TR_FLAG_SIZE]; /* for resistance flags */
        int type[20];
-       cptr name[20];
+       concptr name[20];
        int i, t, n = 0;
        DIRECTION dir;
 
@@ -434,7 +443,7 @@ bool activate_artifact(object_type *o_ptr)
        PLAYER_LEVEL plev = p_ptr->lev;
        int k, dummy = 0;
        DIRECTION dir;
-       cptr name = k_name + k_info[o_ptr->k_idx].name;
+       concptr name = k_name + k_info[o_ptr->k_idx].name;
        const activation_type* const act_ptr = find_activation_info(o_ptr);
 
        /* Paranoia */
@@ -925,14 +934,14 @@ bool activate_artifact(object_type *o_ptr)
 
        case ACT_SUMMON_ANIMAL:
        {
-               (void)summon_specific(-1, p_ptr->y, p_ptr->x, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET));
+               (void)summon_specific(-1, p_ptr->y, p_ptr->x, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET), '\0');
                break;
        }
 
        case ACT_SUMMON_PHANTOM:
        {
                msg_print(_("幻霊を召喚した。", "You summon a phantasmal servant."));
-               (void)summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, SUMMON_PHANTOM, (PM_ALLOW_GROUP | PM_FORCE_PET));
+               (void)summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, SUMMON_PHANTOM, (PM_ALLOW_GROUP | PM_FORCE_PET), '\0');
                break;
        }
 
@@ -945,7 +954,7 @@ bool activate_artifact(object_type *o_ptr)
                if (pet) mode |= PM_FORCE_PET;
                else mode |= PM_NO_PET;
 
-               if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, ((plev * 3) / 2), SUMMON_ELEMENTAL, mode))
+               if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, ((plev * 3) / 2), SUMMON_ELEMENTAL, mode, '\0'))
                {
                        msg_print(_("エレメンタルが現れた...", "An elemental materializes..."));
                        if (pet)
@@ -975,7 +984,7 @@ bool activate_artifact(object_type *o_ptr)
                if (pet) mode |= PM_FORCE_PET;
                else mode |= (PM_ALLOW_UNIQUE | PM_NO_PET);
 
-               if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, ((plev * 3) / 2), type, mode))
+               if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, ((plev * 3) / 2), type, mode, '\0'))
                {
                        msg_print(_("冷たい風があなたの周りに吹き始めた。それは腐敗臭を運んでいる...",
                                "Cold winds begin to blow around you, carrying with them the stench of decay..."));
@@ -997,7 +1006,7 @@ bool activate_artifact(object_type *o_ptr)
                if (pet) mode |= PM_FORCE_PET;
                else mode |= PM_NO_PET;
 
-               if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, ((p_ptr->lev * 3) / 2), SUMMON_HOUND, mode))
+               if (summon_specific((pet ? -1 : 0), p_ptr->y, p_ptr->x, ((p_ptr->lev * 3) / 2), SUMMON_HOUND, mode, '\0'))
                {
 
                        if (pet)
@@ -1014,7 +1023,7 @@ bool activate_artifact(object_type *o_ptr)
        case ACT_SUMMON_DAWN:
        {
                msg_print(_("暁の師団を召喚した。", "You summon the Legion of the Dawn."));
-               (void)summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, SUMMON_DAWN, (PM_ALLOW_GROUP | PM_FORCE_PET));
+               (void)summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, SUMMON_DAWN, (PM_ALLOW_GROUP | PM_FORCE_PET), '\0');
                break;
        }
 
@@ -1352,7 +1361,7 @@ bool activate_artifact(object_type *o_ptr)
        case ACT_RECALL:
        {
                msg_print(_("やわらかな白色に輝いている...", "It glows soft white..."));
-               if (!word_of_recall()) return FALSE;
+               if (!recall_player(p_ptr, randint0(21) + 15)) return FALSE;
                break;
        }
 
@@ -1372,7 +1381,7 @@ bool activate_artifact(object_type *o_ptr)
 
                if (get_check(_("帰還の力を使いますか?", "Activate recall? ")))
                {
-                       (void)word_of_recall();
+                       (void)recall_player(p_ptr, randint0(21) + 15);
                }
 
                break;
@@ -1544,7 +1553,7 @@ bool activate_artifact(object_type *o_ptr)
                INVENTORY_IDX inv;
                int t;
                OBJECT_IDX o_idx;
-               char o_name[MAX_NLEN];
+               GAME_TEXT o_name[MAX_NLEN];
                object_type forge;
 
                /* Cast off activated item */
@@ -1632,7 +1641,7 @@ bool activate_artifact(object_type *o_ptr)
                }
                else if (cave[y][x].m_idx)
                {
-                       char m_name[80];
+                       GAME_TEXT m_name[MAX_NLEN];
                        monster_desc(m_name, &m_list[cave[y][x].m_idx], 0);
                        msg_format(_("%sが邪魔だ!", "%^s is stand in your way."), m_name);
                        p_ptr->energy_use = 0;
@@ -1647,7 +1656,7 @@ bool activate_artifact(object_type *o_ptr)
        {
                int count = 0, i;
                monster_type *m_ptr;
-               cptr kakusan = "";
+               concptr kakusan = "";
 
                if (summon_named_creature(0, p_ptr->y, p_ptr->x, MON_SUKE, PM_FORCE_PET))
                {
@@ -1830,7 +1839,7 @@ void get_bloody_moon_flags(object_type *o_ptr)
        for (i = 0; i < 2; i++)
        {
                int tmp = randint0(11);
-               if (tmp < 6) add_flag(o_ptr->art_flags, TR_STR + tmp);
+               if (tmp < A_MAX) add_flag(o_ptr->art_flags, TR_STR + tmp);
                else add_flag(o_ptr->art_flags, TR_STEALTH + tmp - 6);
        }
 }