/* Ask & execute a skill */ void do_cmd_activate_skill() { int x_idx; bool push = TRUE; /* Get the skill, if available */ if (repeat_pull(&x_idx)) { push = FALSE; } else if (!command_arg) x_idx = do_cmd_activate_skill_aux(); else { int i, j; x_idx = command_arg; /* Check validity */ for (i = 1; i < max_s_idx; i++) { if (s_info[i].value && (s_info[i].action_mkey == x_idx)) break; } for (j = 0; j < max_ab_idx; j++) { if (ab_info[j].acquired && (ab_info[j].action_mkey == x_idx)) break; } if ((j == max_ab_idx) && (i == max_s_idx)) { msg_print("Uh?"); return; } } if (x_idx == -1) return; if (push) repeat_push(x_idx); if (!x_idx) { choose_melee(); return; } /* Break goi/manashield */ if (p_ptr->invuln) { set_invuln(0); } if (p_ptr->disrupt_shield) { set_disrupt_shield(0); } switch (x_idx) { case MKEY_ANTIMAGIC: do_cmd_unbeliever(); break; case MKEY_MINDCRAFT: do_cmd_mindcraft(); break; case MKEY_ALCHEMY: do_cmd_alchemist(); break; case MKEY_MIMIC: do_cmd_mimic(); break; case MKEY_POWER_MAGE: do_cmd_powermage(); break; case MKEY_RUNE: do_cmd_runecrafter(); break; case MKEY_FORGING: do_cmd_archer(); break; case MKEY_INCARNATION: do_cmd_possessor(); break; case MKEY_TELEKINESIS: do_cmd_portable_hole(); break; case MKEY_BLADE: do_cmd_blade(); break; case MKEY_SUMMON: do_cmd_summoner(); break; case MKEY_NECRO: do_cmd_necromancer(); break; case MKEY_SYMBIOTIC: do_cmd_symbiotic(); break; case MKEY_TRAP: do_cmd_set_trap(); break; case MKEY_STEAL: do_cmd_steal(); break; case MKEY_DODGE: use_ability_blade(); break; case MKEY_SCHOOL: cast_school_spell(); break; case MKEY_COPY: do_cmd_copy_spell(); break; case MKEY_BOULDER: do_cmd_create_boulder(); break; case MKEY_COMPANION: if (get_skill(SKILL_LORE) >= 12) do_cmd_companion(); else msg_print("You need a skill level of at least 12."); break; case MKEY_PIERCING: do_cmd_set_piercing(); break; default: process_hooks(HOOK_MKEY, "(d)", x_idx); break; } }
/* Ask & execute a skill */ void do_cmd_activate_skill(s32b type) { s32b x_idx; bool push = TRUE; /* Get the skill, if available */ if (repeat_pull(&x_idx)) { push = FALSE; } else if (!command_arg) x_idx = do_cmd_activate_skill_aux(type); else { s32b i, j; x_idx = command_arg; /* Check validity */ for (i = 1; i < max_s_idx; i++) { if (get_skill(i) && (s_info[i].action_mkey[type] == x_idx)) break; } for (j = 0; j < max_ab_idx; j++) { if (ab_info[j].acquired && (ab_info[j].action_mkey[type] == x_idx)) break; } if ((j == max_ab_idx) && (i == max_s_idx)) { msg_print("Uh?"); return; } } if (x_idx == -1) return; if (push) repeat_push(x_idx); if (!x_idx) { choose_combat(); return; } if (type == ACTIVATE_SKILL) { switch (x_idx) { case MKEY_STEAL: do_cmd_steal(); break; case MKEY_SCHOOL: cast_school_spell(); break; case MKEY_COMPANION: if (get_skill(SKILL_LORE) >= 12) do_cmd_companion(); else msg_print("You need a skill level of at least 12."); break; default: process_hooks(HOOK_MKEY, "(d,d)", x_idx, type); break; } } else if (type == BROWSE_SKILL) { switch (x_idx) { case MKEY_SCHOOL: do_cmd_browse(); break; default: process_hooks(HOOK_MKEY, "(d,d)", x_idx, type); break; } } }