void t_script_give_creatures::do_action(t_creature_array* array) const { if ((g_creature_array = array) == NULL) return; bool has_room = false; for (int i = 0; i < t_creature_array::k_size; i++) { t_creature_stack& stack = (*array)[i]; t_creature* creature = stack.get_creature(); if ( stack.can_add( get_creature_type() ) ) has_room = true; } if (has_room) g_creature_array->add(get_creature_type(), get_quantity()); else { if ((array->get_owner() != NULL) && array->get_owner()->is_computer()) return; t_creature_array temp_army; temp_army.add(get_creature_type(), get_quantity()); t_adventure_frame* frame = array->get_adventure_frame(); if (!frame) return; t_counted_ptr<t_dialog_full_army> dialog_ptr; dialog_ptr = new t_dialog_full_army( frame ); dialog_ptr->init_dialog( *array, temp_army ); dialog_ptr->run_modal(); } }
void t_script_take_creatures::do_action(t_creature_array* array) const { if ((g_creature_array = array) == NULL) return; int amount_pending = get_quantity(); for (int i = 0; i < t_creature_array::k_size; i++) { t_creature_stack& stack = (*array)[i]; t_creature* creature = stack.get_creature(); if ( creature && (creature->can_add(get_creature_type())) ) { int stack_size = creature->get_number(); if (stack_size <= amount_pending) { t_creature_stack_ptr creature = new t_creature_stack; array->swap(creature, i); amount_pending -= stack_size; } else { creature->remove(amount_pending); g_number_removed = get_quantity(); return; } } } if (array->empty() || !array->is_alive()) { array->add(get_creature_type(), 1); if (amount_pending != get_quantity()) amount_pending++; } g_number_removed = get_quantity() - amount_pending; }
int main(void){ double radius; double height; double material_cost; int quantity; double surface_area; double total_cost; instruct(); printf("Radius in cm: "); scanf("%lf", &radius); printf("Height in cm: "); scanf("%lf", &height); printf("Material cost in $/cm^2: "); scanf("%lf", &material_cost); quantity = get_quantity(); surface_area = comp_area(height, radius); total_cost = material_cost * surface_area * quantity; print_area_cost(surface_area, total_cost); return 0; }
//-------------PRINT MEDICATION---------------- void toString(Repo* self){ int len = vector_getLen(self->arr); for (int i=0; i<len; i++){ Medication m = vector_getAt(self->arr, i); printf("Name: %s | Concentration: %.2f | Quantity: %d | Price: %.2f \n", get_name(&m), get_concentration(&m), get_quantity(&m), get_price(&m) ); } }
/* * Drop an item */ void do_cmd_drop(void) { int item, amt; object_type *o_ptr; cptr q, s; /* Get an item */ q = "Drop which item? "; s = "You have nothing to drop."; if (!get_item(&item, q, s, (USE_EQUIP | USE_INVEN))) return; /* Get the item (in the pack) */ if (item >= 0) { o_ptr = &inventory[item]; } /* Get the item (on the floor) */ else { o_ptr = &o_list[0 - item]; } /* Get a quantity */ amt = get_quantity(NULL, o_ptr->number); /* Allow user abort */ if (amt <= 0) return; /* Hack -- Cannot remove cursed items */ if ((item >= INVEN_WIELD) && cursed_p(o_ptr)) { /* Oops */ msg_print("Hmmm, it seems to be cursed."); /* Nope */ return; } /* Take a partial turn */ p_ptr->energy_use = 50; /* Drop (some of) the item */ inven_drop(item, amt); }
// Jump to a new dungeon level void WizardModeDialog::wiz_jump(void) { int new_level; /* Prompt */ QString prompt = QString("Jump to level (0-%1): ") .arg(MAX_DEPTH-1); new_level = get_quantity(prompt, MAX_DEPTH - 1, p_ptr->depth, TRUE); // Same depth - quit if (new_level == p_ptr->depth) return; /* Accept request */ message(QString("You jump to dungeon level %1.") .arg(new_level)); this->accept(); /* New depth */ dungeon_change_level(new_level); // Update everything change_player_level(); }
/* * Destroy an item */ void do_cmd_destroy(void) { int item, amt; int old_number; object_type *o_ptr; char o_name[80]; char out_val[160]; cptr q, s; /* Get an item */ q = "Destroy which item? "; s = "You have nothing to destroy."; if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return; /* Get the item (in the pack) */ if (item >= 0) { o_ptr = &inventory[item]; } /* Get the item (on the floor) */ else { o_ptr = &o_list[0 - item]; } /* Get a quantity */ amt = get_quantity(NULL, o_ptr->number); /* Allow user abort */ if (amt <= 0) return; /* Describe the object */ old_number = o_ptr->number; o_ptr->number = amt; object_desc(o_name, o_ptr, TRUE, 3); o_ptr->number = old_number; /* Verify destruction */ if (verify_destroy) { sprintf(out_val, "Really destroy %s? ", o_name); if (!get_check(out_val)) return; } /* Take a turn */ p_ptr->energy_use = 100; /* Artifacts cannot be destroyed */ if (artifact_p(o_ptr)) { /* Message */ msg_format("You cannot destroy %s.", o_name); /* Don't mark id'ed objects */ if (object_known_p(o_ptr)) return; /* It has already been sensed */ if (o_ptr->ident & (IDENT_SENSE)) { /* Already sensed objects always get improved feelings */ if (cursed_p(o_ptr) || broken_p(o_ptr)) o_ptr->discount = INSCRIP_TERRIBLE; else o_ptr->discount = INSCRIP_SPECIAL; } else { /* Mark the object as indestructible */ o_ptr->discount = INSCRIP_INDESTRUCTIBLE; } /* Combine the pack */ p_ptr->notice |= (PN_COMBINE); /* Window stuff */ p_ptr->window |= (PW_INVEN | PW_EQUIP); p_ptr->redraw |= (PR_EQUIPPY); /* Done */ return; } /* Message */ msg_format("You destroy %s.", o_name); /* Eliminate the item (from the pack) */ if (item >= 0) { inven_item_increase(item, -amt); inven_item_describe(item); inven_item_optimize(item); } /* Eliminate the item (from the floor) */ else { floor_item_increase(0 - item, -amt); floor_item_describe(0 - item); floor_item_optimize(0 - item); } }
/* * Destroy an item */ void do_cmd_destroy(void) { int item, amt = 1; int old_number; bool force = FALSE; object_type *o_ptr; object_type forge; object_type *q_ptr = &forge; bool is_equipped = FALSE; char o_name[MAX_NLEN]; char out_val[MAX_NLEN+40]; cptr q, s; int mode = USE_INVEN | USE_FLOOR; if (p_ptr->pclass == CLASS_RUNE_KNIGHT) mode |= USE_EQUIP; if (p_ptr->special_defense & KATA_MUSOU) { set_action(ACTION_NONE); } /* Hack -- force destruction */ if (command_arg > 0) force = TRUE; /* Get an item */ q = "Destroy which item? "; s = "You have nothing to destroy."; if (!get_item(&item, q, s, mode)) return; /* Get the item (in the pack) */ if (item >= 0) { o_ptr = &inventory[item]; is_equipped = equip_is_valid_slot(item); } /* Get the item (on the floor) */ else { o_ptr = &o_list[0 - item]; } /* Hack for Rune Knight: They can destroy worn equipment, but only if it has the Sacrifice rune. get_item() is not smart enough to handle this restriction ... */ if (is_equipped && o_ptr->rune != RUNE_SACRIFICE) { msg_print("You must first remove that item before destroying it."); return; } /* Verify unless quantity given beforehand */ if (!force && (confirm_destroy || (object_value(o_ptr) > 0))) { object_desc(o_name, o_ptr, OD_OMIT_PREFIX); /* Make a verification */ sprintf(out_val, "Really destroy %s? [y/n/Auto]", o_name); msg_print(NULL); /* HACK : Add the line to message buffer */ message_add(out_val); p_ptr->window |= (PW_MESSAGE); window_stuff(); /* Get an acceptable answer */ while (TRUE) { char i; /* Prompt */ prt(out_val, 0, 0); i = inkey(); /* Erase the prompt */ prt("", 0, 0); if (i == 'y' || i == 'Y') { break; } if (i == ESCAPE || i == 'n' || i == 'N') { /* Cancel */ return; } if (i == 'A') { /* Add an auto-destroy preference line */ if (autopick_autoregister(o_ptr)) { /* Auto-destroy it */ autopick_alter_item(item, TRUE); } /* The object is already destroyed. */ return; } } /* while (TRUE) */ } /* See how many items */ if (o_ptr->number > 1) { /* Get a quantity */ amt = get_quantity(NULL, o_ptr->number); /* Allow user abort */ if (amt <= 0) return; } /* Describe the object */ old_number = o_ptr->number; o_ptr->number = amt; object_desc(o_name, o_ptr, 0); o_ptr->number = old_number; /* Take a turn */ energy_use = 100; /* Artifacts cannot be destroyed */ if (!can_player_destroy_object(o_ptr)) { energy_use = 0; /* Message */ msg_format("You cannot destroy %s.", o_name); /* Done */ return; } object_copy(q_ptr, o_ptr); stats_on_p_destroy(o_ptr, amt); if (prace_is_(RACE_MON_JELLY)) jelly_eat_object(o_ptr); else if (prace_is_(RACE_MON_SWORD) && object_is_melee_weapon(o_ptr)) sword_absorb_object(o_ptr); else if (prace_is_(RACE_MON_RING) && object_is_jewelry(o_ptr)) ring_absorb_object(o_ptr); else msg_format("You destroy %s.", o_name); if (o_ptr->rune == RUNE_SACRIFICE) { int add_hp = is_equipped ? p_ptr->mhp : p_ptr->mhp/3; int add_sp = is_equipped ? p_ptr->msp : p_ptr->msp/3; msg_print("You feel a surge of wondrous power enter your body."); p_ptr->chp = MIN(p_ptr->mhp, p_ptr->chp + add_hp); p_ptr->chp_frac = 0; p_ptr->csp = MIN(p_ptr->msp, p_ptr->csp + add_sp); p_ptr->csp_frac = 0; p_ptr->redraw |= (PR_MANA); p_ptr->window |= (PW_PLAYER); p_ptr->window |= (PW_SPELL); p_ptr->redraw |= (PR_HP); if (is_equipped) { blast_object(o_ptr); o_ptr->curse_flags = TRC_HEAVY_CURSE; } } else if (is_equipped) blast_object(o_ptr); sound(SOUND_DESTITEM); /* Reduce the charges of rods/wands */ reduce_charges(o_ptr, amt); /* Eliminate the item (from the pack) */ if (item >= 0) { if (!is_equipped) { inven_item_increase(item, -amt); inven_item_describe(item); inven_item_optimize(item); } } /* Eliminate the item (from the floor) */ else { floor_item_increase(0 - item, -amt); floor_item_describe(0 - item); floor_item_optimize(0 - item); } if ( p_ptr->pclass == CLASS_NECROMANCER && (q_ptr->tval == TV_LIFE_BOOK || q_ptr->tval == TV_CRUSADE_BOOK) ) { int sp = 0; int osp = p_ptr->csp; switch (q_ptr->sval) { case 0: sp = 10; break; case 1: sp = 25; break; case 2: sp = 100; break; case 3: sp = 666; break; } p_ptr->csp += sp; if (p_ptr->csp >= p_ptr->msp) { p_ptr->csp = p_ptr->msp; p_ptr->csp_frac = 0; } if (p_ptr->csp > osp) msg_print("You feel your head clear."); p_ptr->redraw |= (PR_MANA); } if (high_level_book(q_ptr)) { bool gain_expr = FALSE; if (p_ptr->prace == RACE_ANDROID) { } else if ((p_ptr->pclass == CLASS_WARRIOR) || (p_ptr->pclass == CLASS_BERSERKER)) { gain_expr = TRUE; } else if (p_ptr->pclass == CLASS_PALADIN) { if (is_good_realm(p_ptr->realm1)) { if (!is_good_realm(tval2realm(q_ptr->tval))) gain_expr = TRUE; } else { if (is_good_realm(tval2realm(q_ptr->tval))) gain_expr = TRUE; } } if (gain_expr && (p_ptr->exp < PY_MAX_EXP)) { s32b tester_exp = p_ptr->max_exp / 20; if (tester_exp > 10000) tester_exp = 10000; if (q_ptr->sval < 3) tester_exp /= 4; if (tester_exp<1) tester_exp = 1; msg_print("You feel more experienced."); gain_exp(tester_exp * amt); } } if (high_level_book(q_ptr) && q_ptr->tval == TV_LIFE_BOOK) { virtue_add(VIRTUE_UNLIFE, 1); virtue_add(VIRTUE_VITALITY, -1); } else if ( high_level_book(q_ptr) && (q_ptr->tval == TV_DEATH_BOOK || q_ptr->tval == TV_NECROMANCY_BOOK) ) { virtue_add(VIRTUE_UNLIFE, -1); virtue_add(VIRTUE_VITALITY, 1); } if (q_ptr->to_a || q_ptr->to_h || q_ptr->to_d) virtue_add(VIRTUE_ENCHANTMENT, -1); if (object_value_real(q_ptr) > 30000) virtue_add(VIRTUE_SACRIFICE, 2); else if (object_value_real(q_ptr) > 10000) virtue_add(VIRTUE_SACRIFICE, 1); if (q_ptr->to_a != 0 || q_ptr->to_d != 0 || q_ptr->to_h != 0) virtue_add(VIRTUE_HARMONY, 1); if (equip_is_valid_slot(item)) calc_android_exp(); }
/* * Drop an item */ void do_cmd_drop(void) { int item, amt = 1; object_type *o_ptr; cptr q, s; if (p_ptr->special_defense & KATA_MUSOU) { set_action(ACTION_NONE); } item_tester_no_ryoute = TRUE; /* Get an item */ q = "Drop which item? "; s = "You have nothing to drop."; if (!get_item(&item, q, s, (USE_EQUIP | USE_INVEN))) return; /* Get the item (in the pack) */ if (item >= 0) { o_ptr = &inventory[item]; /* Ugly hack! */ if ( object_is_melee_weapon(o_ptr) && equip_is_valid_slot(item) && p_ptr->pclass == CLASS_PSION && psion_weapon_graft() ) { msg_print("Failed! Your weapon is currently grafted to your arm!"); return; } } /* Get the item (on the floor) */ else { o_ptr = &o_list[0 - item]; } /* Hack -- Cannot remove cursed items */ if (equip_is_valid_slot(item)) { if (object_is_cursed(o_ptr)) { msg_print("Hmmm, it seems to be cursed."); return; } if (have_flag(o_ptr->art_flags, TR_NO_REMOVE)) { msg_print("You can't drop yourself, silly!"); return; } } if (o_ptr->tval == TV_POTION && o_ptr->sval == SV_POTION_BLOOD) { msg_print("You can't do that! Your blood will go sour!"); return; } /* See how many items */ if (o_ptr->number > 1) { /* Get a quantity */ amt = get_quantity(NULL, o_ptr->number); /* Allow user abort */ if (amt <= 0) return; } /* Take a partial turn */ energy_use = 50; /* Drop (some of) the item */ inven_drop(item, amt); if (equip_is_valid_slot(item)) calc_android_exp(); p_ptr->redraw |= (PR_EQUIPPY); }
void t_script_give_creatures::add_icons(t_basic_dialog* dialog) const { if (g_creature_array) dialog->add_creature(get_creature_type(), get_quantity(), false); }
/* * Drop an item */ void do_cmd_drop(void) { int item, amt; object_type *o_ptr; cptr q, s; /* Get an item */ q = "Drop which item? "; s = "You have nothing to drop."; if (!get_item(&item, q, s, (USE_EQUIP | USE_INVEN))) return; /* Get the item (in the pack) */ if (item >= 0) { o_ptr = &inventory[item]; } /* Get the item (on the floor) */ else { o_ptr = &o_list[0 - item]; } /* Get a quantity */ amt = get_quantity(NULL, o_ptr->number); /* Allow user abort */ if (amt <= 0) return; /* Hack -- Cannot remove cursed items */ if ((item >= INVEN_WIELD) && cursed_p(o_ptr)) { if (p_ptr->active_ability[S_WIL][WIL_CURSE_BREAKING]) { /* Message */ msg_print("With a great strength of will, you break the curse!"); /* Uncurse the object */ uncurse_object(o_ptr); } else { /* Oops */ msg_print("It seems to be cursed, preventing you from removing it."); /* Nope */ return; } } /* Take a turn */ p_ptr->energy_use = 100; // store the action type p_ptr->previous_action[0] = ACTION_MISC; /* Drop (some of) the item */ inven_drop(item, amt); }
/* * Destroy an item */ void do_cmd_destroy(void) { int item, amt; int old_number; int old_charges = 0; object_type *o_ptr; char o_name[80]; char out_val[160]; cptr q, s; item_tester_hook = item_tester_hook_destroy; // Special case for prising Silmarils from the Iron Crown of Morgoth o_ptr = &o_list[cave_o_idx[p_ptr->py][p_ptr->px]]; if ((o_ptr->name1 >= ART_MORGOTH_1) && (o_ptr->name1 <= ART_MORGOTH_3)) { // Select the melee weapon o_ptr = &inventory[INVEN_WIELD]; // No weapon if (!o_ptr->k_idx) { msg_print("To prise a Silmaril from the crown, you would need to wield a weapon."); } // Wielding a weapon else { if (get_check("Will you try to prise a Silmaril from the Iron Crown? ")) { prise_silmaril(); /* Take a turn */ p_ptr->energy_use = 100; // store the action type p_ptr->previous_action[0] = ACTION_MISC; return; } } } /* Get an item */ q = "Destroy which item? "; s = "You have nothing to destroy."; if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return; /* Get the item (in the pack) */ if (item >= 0) { o_ptr = &inventory[item]; } /* Get the item (on the floor) */ else { o_ptr = &o_list[0 - item]; } // Special case for Iron Crown of Morgoth, if it has Silmarils left if ((o_ptr->name1 >= ART_MORGOTH_1) && (o_ptr->name1 <= ART_MORGOTH_3)) { if (item >= 0) { msg_print("You would have to put it down first."); } else { /* No weapon */ if (!o_ptr->k_idx) { msg_print("To prise a Silmaril from the crown, you would need to wield a weapon."); } else { msg_print("You decide to try to prise out a Silmaril after all."); prise_silmaril(); /* Take a turn */ p_ptr->energy_use = 100; // store the action type p_ptr->previous_action[0] = ACTION_MISC; return; } } } /* Get a quantity */ amt = get_quantity(NULL, o_ptr->number); /* Allow user abort */ if (amt <= 0) return; /* Describe the object */ old_number = o_ptr->number; /* Hack, state the correct number of charges to be destroyed if staff*/ if ((o_ptr->tval == TV_STAFF) && (amt < o_ptr->number)) { /*save the number of charges*/ old_charges = o_ptr->pval; /*distribute the charges*/ o_ptr->pval -= o_ptr->pval * amt / o_ptr->number; o_ptr->pval = old_charges - o_ptr->pval; } /*hack - make sure we get the right amount displayed*/ o_ptr->number = amt; /*now describe with correct amount*/ object_desc(o_name, sizeof(o_name), o_ptr, TRUE, 3); /*reverse the hack*/ o_ptr->number = old_number; /* Check for known special items */ strnfmt(out_val, sizeof(out_val), "Really destroy %s? ", o_name); if (!get_check(out_val)) return; /* Take a turn */ p_ptr->energy_use = 100; // store the action type p_ptr->previous_action[0] = ACTION_MISC; /* Message */ msg_format("You destroy %s.", o_name); /*hack, restore the proper number of charges after the messages have printed * so the proper number of charges are destroyed*/ if (old_charges) o_ptr->pval = old_charges; /* Eliminate the item (from the pack) */ if (item >= 0) { inven_item_increase(item, -amt); inven_item_describe(item); inven_item_optimize(item); } /* Eliminate the item (from the floor) */ else { floor_item_increase(0 - item, -amt); floor_item_describe(0 - item); floor_item_optimize(0 - item); } }
void component_key_alarm() { const uint8 DATA_SIZE = sizeof(HMC5883L_data) + sizeof(RTC_Clock) + sizeof(MMA8451_data); char szTrace[piece_size]; HMC5883L_data data_5883; RTC_Clock clock; Sensor data_8451; uint8 nIndex = 0; uint32 nVotage = 0; LED_Light(led_blue, true); sprintf(szTrace, "key = alarm, led = blue"); post_trace(szTrace); for(nIndex = 0; nIndex < 60; ++nIndex) { HMC5883L_ReadXYZ(&data_5883); sprintf(szTrace, "hmc5883 x = %d, y = %d, z = %d", data_5883.x, data_5883.y, data_5883.z); post_trace(szTrace); clock = GetTime(); sprintf(szTrace, "sd2058: 20%02d:%02d:%02d %02d:%02d:%02d", clock.year, clock.month, clock.day, clock.hour, clock.minute, clock.second); post_trace(szTrace); if((MMA845x_readbyte(MMA845x_STATUS_00) & 0x08) != 0) { //三个轴数据更新 MMA845x_readData(&data_8451); if(data_8451.x == -1 && data_8451.y == -1 && data_8451.z == -1) { post_trace("MMA8451: read error data"); } else { sprintf(szTrace, "MMA8451: x = %d, y = %d, z = %d", data_8451.x, data_8451.y, data_8451.z); post_trace(szTrace); } } else { post_trace("MMA8451: read error"); } nVotage = ADC_Read(); sprintf(szTrace, "votage = %d", nVotage); post_trace(szTrace); } memcpy(szTrace, &data_5883, sizeof(HMC5883L_data)); memcpy(szTrace + sizeof(HMC5883L_data), &clock, sizeof(RTC_Clock)); memcpy(szTrace + sizeof(HMC5883L_data) + sizeof(RTC_Clock), &data_8451, sizeof(MMA8451_data)); write_file("temp", szTrace, DATA_SIZE); post_trace("save sensor data in file named \"temp\" in tf card"); { InfoBase base_info = { 0 }; InfoState state_info = { 0 }; if(get_base_info(&base_info)) { sprintf(szTrace, "base info, sid = %s, imei = %s", base_info.sid, base_info.imei); post_trace(szTrace); } if(get_state_info(&state_info)) { sprintf(szTrace, "state info, charging: %s, quantity: %d, sim card: %s, signal: %d, lac: %s, cell: %s, lng: %s, lat: %s", (is_charging(&state_info) ? "yes" : "no"), get_quantity(&state_info), (is_sim_card_exist(&state_info) ? (is_sim_card_valid(&state_info) ? "normal" : "error") : "lost"), get_signal(&state_info), state_info.lac, state_info.cell, state_info.lng, state_info.lat); post_trace(szTrace); } } post_trace("alarm completed"); LED_Light(led_blue, false); }
/* * Ask for and parse a "debug command" */ void do_cmd_debug(void) { int py = p_ptr->py; int px = p_ptr->px; struct keypress cmd; /* Get a "debug command" */ if (!get_com("Debug Command: ", &cmd)) return; /* Analyze the command */ switch (cmd.code) { /* Ignore */ case ESCAPE: case ' ': case KC_ENTER: { break; } #ifdef ALLOW_SPOILERS /* Hack -- Generate Spoilers */ case '"': { do_cmd_spoilers(); break; } #endif /* Hack -- Help */ case '?': { do_cmd_wiz_help(); break; } /* Cure all maladies */ case 'a': { do_cmd_wiz_cure_all(); break; } /* Make the player powerful */ case 'A': { do_cmd_wiz_advance(); break; } /* Teleport to target */ case 'b': { do_cmd_wiz_bamf(); break; } /* Create any object */ case 'c': { wiz_create_item(); break; } /* Create an artifact */ case 'C': { char name[80] = ""; int a_idx = -1; /* Avoid the prompt getting in the way */ screen_save(); /* Prompt */ prt("Create which artifact? ", 0, 0); /* Get the name */ if (askfor_aux(name, sizeof(name), NULL)) { /* See if an a_idx was entered */ a_idx = get_idx_from_name(name); /* If not, find the artifact with that name */ if (a_idx < 1) a_idx = lookup_artifact_name(name); /* Did we find a valid artifact? */ if (a_idx != -1 && a_idx < z_info->a_max) wiz_create_artifact(a_idx); else msg("No artifact found."); } /* Reload the screen */ screen_load(); break; } /* Detect everything */ case 'd': { detect_all(TRUE); break; } /* Test for disconnected dungeon */ case 'D': { disconnect_stats(); break; } /* Edit character */ case 'e': { do_cmd_wiz_change(); break; } case 'f': { stats_collect(); break; } /* Good Objects */ case 'g': { int n; screen_save(); n= get_quantity("How many good objects? ", 40); screen_load(); if (n < 1) n = 1; acquirement(py, px, p_ptr->depth, n, FALSE); break; } /* GF demo */ case 'G': { wiz_gf_demo(); break; } /* Hitpoint rerating */ case 'h': { do_cmd_rerate(); break; } /* Hit all monsters in LOS */ case 'H': { dispel_monsters(10000); break; } /* Identify */ case 'i': { (void)ident_spell(); break; } /* Go up or down in the dungeon */ case 'j': { do_cmd_wiz_jump(); break; } /* Learn about objects */ case 'l': { do_cmd_wiz_learn(100); break; } case 'L': do_cmd_keylog(); break; /* Magic Mapping */ case 'm': { map_area(); break; } /* Summon Named Monster */ case 'n': { monster_race *r = NULL; char name[80] = ""; /* Avoid the prompt getting in the way */ screen_save(); /* Prompt */ prt("Summon which monster? ", 0, 0); /* Get the name */ if (askfor_aux(name, sizeof(name), NULL)) { /* See if a r_idx was entered */ int r_idx = get_idx_from_name(name); if (r_idx) r = &r_info[r_idx]; else /* If not, find the monster with that name */ r = lookup_monster(name); p_ptr->redraw |= (PR_MAP | PR_MONLIST); } /* Reload the screen */ screen_load(); if (r) do_cmd_wiz_named(r, TRUE); else msg("No monster found."); break; } /* Object playing routines */ case 'o': { do_cmd_wiz_play(); break; } /* Phase Door */ case 'p': { teleport_player(10); break; } /* Monster pit stats */ case 'P': { pit_stats(); break; } /* Query the dungeon */ case 'q': { do_cmd_wiz_query(); break; } /* Get full recall for a monster */ case 'r': { const monster_race *r_ptr = NULL; struct keypress sym; char *prompt = "Full recall for [a]ll monsters or [s]pecific monster? "; if (!get_com(prompt, &sym)) return; if (sym.code == 'a' || sym.code == 'A') { int i; for (i = 0; i < z_info->r_max; i++) cheat_monster_lore(&r_info[i], &l_list[i]); msg("Done."); } else if (sym.code == 's' || sym.code == 'S') { char name[80] = ""; /* Avoid the prompt getting in the way */ screen_save(); /* Prompt */ prt("Which monster? ", 0, 0); /* Get the name */ if (askfor_aux(name, sizeof(name), NULL)) { /* See if a r_idx was entered */ int r_idx = get_idx_from_name(name); if (r_idx) r_ptr = &r_info[r_idx]; else /* If not, find the monster with that name */ r_ptr = lookup_monster(name); } /* Reload the screen */ screen_load(); /* Did we find a valid monster? */ if (r_ptr) cheat_monster_lore(r_ptr, get_lore(r_ptr)); else msg("No monster found."); } break; } /* Summon Random Monster(s) */ case 's': { int n; screen_save(); n = get_quantity("How many monsters? ", 40); screen_load(); if (n < 1) n = 1; do_cmd_wiz_summon(n); break; } /* Collect stats (S) */ case 'S': { stats_collect(); break; } /* Teleport */ case 't': { teleport_player(100); break; } /* Create a trap */ case 'T': { if (!cave_isfloor(cave, p_ptr->py, p_ptr->px)) msg("You can't place a trap there!"); else if (p_ptr->depth == 0) msg("You can't place a trap in the town!"); else cave_add_trap(cave, p_ptr->py, p_ptr->px); break; } /* Un-hide all monsters */ case 'u': { detect_monsters_entire_level(); break; } /* Very Good Objects */ case 'v': { int n; screen_save(); n = get_quantity("How many great objects? ", 40); screen_load(); if (n < 1) n = 1; acquirement(py, px, p_ptr->depth, n, TRUE); break; } case 'V': { int n; screen_save(); n = get_quantity("Create all items of what tval? ", 255); screen_load(); if (n) wiz_test_kind(n); break; } /* Wizard Light the Level */ case 'w': { wiz_light(TRUE); break; } /* Wipe recall for a monster */ case 'W': { const monster_race *r_ptr = NULL; s16b r_idx = 0; struct keypress sym; char *prompt = "Wipe recall for [a]ll monsters or [s]pecific monster? "; if (!get_com(prompt, &sym)) return; if (sym.code == 'a' || sym.code == 'A') { int i; for (i = 0; i < z_info->r_max; i++) wipe_monster_lore(&r_info[i], &l_list[i]); msg("Done."); } else if (sym.code == 's' || sym.code == 'S') { char name[80] = ""; /* Avoid the prompt getting in the way */ screen_save(); /* Prompt */ prt("Which monster? ", 0, 0); /* Get the name */ if (askfor_aux(name, sizeof(name), NULL)) { /* See if a r_idx was entered */ r_idx = get_idx_from_name(name); if (r_idx) r_ptr = &r_info[r_idx]; else /* If not, find the monster with that name */ r_ptr = lookup_monster(name); } /* Reload the screen */ screen_load(); /* Did we find a valid monster? */ if (r_ptr) wipe_monster_lore(r_ptr, get_lore(r_ptr)); else msg("No monster found."); } break; } /* Increase Experience */ case 'x': { int n; screen_save(); n = get_quantity("Gain how much experience? ", 9999); screen_load(); if (n < 1) n = 1; player_exp_gain(p_ptr, n); break; } /* Zap Monsters (Banishment) */ case 'z': { int n; screen_save(); n = get_quantity("Zap within what distance? ", MAX_SIGHT); screen_load(); do_cmd_wiz_zap(n); break; } /* Hack */ case '_': { do_cmd_wiz_hack_ben(); break; } /* Oops */ default: { msg("That is not a valid debug command."); break; } } }
/* * Destroy an item */ void do_cmd_destroy(void) { int item, amt = 1; int old_number; bool force = FALSE; object_type *o_ptr; char o_name[MAX_NLEN]; char out_val[160]; cptr q, s; /* Hack -- force destruction */ if (command_arg > 0) force = TRUE; /* Get an item */ #ifdef JP q = "どのアイテムを壊しますか? "; s = "壊せるアイテムを持っていない。"; #else q = "Destroy which item? "; s = "You have nothing to destroy."; #endif if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return; /* Get the item (in the pack) */ if (item >= 0) { o_ptr = &inventory[item]; } /* Get the item (on the floor) */ else { o_ptr = &o_list[0 - item]; } /* Verify unless quantity given */ if (!force && (!(auto_destroy && (object_value(o_ptr) < 1)))) { object_desc(o_name, o_ptr, OD_OMIT_PREFIX); /* Make a verification */ sprintf(out_val, #ifdef JP "本当に%sを壊しますか? [y/n/Auto]", #else "Really destroy %s? [y/n/Auto]", #endif o_name); msg_print(NULL); /* HACK : Add the line to message buffer */ message_add(out_val); p_ptr->window |= (PW_MESSAGE); window_stuff(); /* Get an acceptable answer */ while (TRUE) { char i; /* Prompt */ prt(out_val, 0, 0); i = inkey(); /* Erase the prompt */ prt("", 0, 0); if (i == 'y' || i == 'Y') { break; } if (i == ESCAPE || i == 'n' || i == 'N') { /* Cancel */ return; } if (i == 'A') { /* Add an auto-destroy preference line */ if (autopick_autoregister(o_ptr)) { /* Auto-destroy it */ autopick_alter_item(item, TRUE); } /* The object is already destroyed. */ return; } } /* while (TRUE) */ } /* See how many items */ if (o_ptr->number > 1) { /* Get a quantity */ amt = get_quantity(NULL, o_ptr->number); /* Allow user abort */ if (amt <= 0) return; } /* Describe the object */ old_number = o_ptr->number; o_ptr->number = amt; object_desc(o_name, o_ptr, 0); o_ptr->number = old_number; /* Take a turn */ energy_use = 100; /* Can the player destroy the object? */ if (!can_player_destroy_object(o_ptr)) { /* Don't take a turn */ energy_use = 0; /* Message */ #ifdef JP msg_format("%sは破壊不可能だ。", o_name); #else msg_format("You cannot destroy %s.", o_name); #endif /* Done */ return; } /* Message */ #ifdef JP msg_format("%sを壊した。", o_name); #else msg_format("You destroy %s.", o_name); #endif sound(SOUND_DESTROY); if (high_level_book(o_ptr)) { bool gain_expr = FALSE; if (p_ptr->pclass == CLASS_WARRIOR) { gain_expr = TRUE; } else if (p_ptr->pclass == CLASS_PALADIN) { if (p_ptr->realm1 == REALM_LIFE) { if (o_ptr->tval != TV_LIFE_BOOK) gain_expr = TRUE; } else { if (o_ptr->tval == TV_LIFE_BOOK) gain_expr = TRUE; } } if (gain_expr && (p_ptr->exp < PY_MAX_EXP)) { s32b tester_exp = p_ptr->max_exp / 20; if (tester_exp > 10000) tester_exp = 10000; if (o_ptr->sval < 3) tester_exp /= 4; if (tester_exp < 1) tester_exp = 1; #ifdef JP msg_print("更に経験を積んだような気がする。"); #else msg_print("You feel more experienced."); #endif gain_exp(tester_exp * amt); } } /* Reduce the charges of rods/wands */ reduce_charges(o_ptr, amt); /* Eliminate the item (from the pack) */ if (item >= 0) { inven_item_increase(item, -amt); inven_item_describe(item); inven_item_optimize(item); } /* Eliminate the item (from the floor) */ else { floor_item_increase(0 - item, -amt); floor_item_describe(0 - item); floor_item_optimize(0 - item); } }
/* * Drop an item */ void do_cmd_drop(void) { int item, amt = 1; object_type *o_ptr; cptr q, s; /* Get an item */ #ifdef JP q = "どのアイテムを落としますか? "; s = "落とせるアイテムを持っていない。"; #else q = "Drop which item? "; s = "You have nothing to drop."; #endif if (!get_item(&item, q, s, (USE_EQUIP | USE_INVEN))) return; /* Get the item (in the pack) */ if (item >= 0) { o_ptr = &inventory[item]; } /* Get the item (on the floor) */ else { o_ptr = &o_list[0 - item]; } /* Hack -- Cannot remove cursed items */ if ((item >= INVEN_WIELD) && cursed_p(o_ptr)) { /* Oops */ #ifdef JP msg_print("ふーむ、どうやら呪われているようだ。"); #else msg_print("Hmmm, it seems to be cursed."); #endif /* Nope */ return; } /* See how many items */ if (o_ptr->number > 1) { /* Get a quantity */ amt = get_quantity(NULL, o_ptr->number); /* Allow user abort */ if (amt <= 0) return; } /* Take a partial turn */ energy_use = 50; /* Drop (some of) the item */ inven_drop(item, amt); p_ptr->redraw |= (PR_EQUIPPY); }