// merchant.txt // A very simple, naive text. Merchant attacks anything it hates nearby. // Once it has won, it returns to its home. When talked to, Merchant skips // talking and moves directly onto shopping with a generic, terse // description of his/her goods. // // by Terror's Martyr (terrorsmartyr@wi.rr.com) // // NOTE: Assumes default shops set up in a scenario script by default! // This script RESERVES stuff done flag 98,9. Do not use it in // your scenario! // // Memory Cells: // Cell 0 - How creature moves. // 0 - If 0, wander randomly. // 1 - Stands still until a target appears. // 2 - Completely immobile, even if target appears. // Cell 1,2 - Stuff done flag. If both 0, nothing. Otherwise when this // is killed, set to 1. (Example: If cell 1 is 3 and cell 2 is 5, when // creature is killed, sets SDF(3,5) to 1.) // Cell 3 - Shop Type // 0 - Armor // 1 - Weapons // 2 - Tools // 3 - Missiles // 4 - Potions // 5 - Food // Cell 4 - Prices (0-6, 6 is higher) // Cell 5 - Selling Rates (0-6, 0 is pays more, -1 is doesn't buy) begincreaturescript; variables; short i,target; string shop_type; body; beginstate INIT_STATE; if (get_memory_cell(0) == 2) set_mobility(ME,0); break; beginstate DEAD_STATE; // Set the appropriate stuff done flag for this character being dead if ((get_memory_cell(1) != 0) || (get_memory_cell(2) != 0)) set_flag(get_memory_cell(1),get_memory_cell(2),1); break; beginstate START_STATE; // if I have a target for some reason, go attack it if (target_ok()) { if (dist_to_char(get_target()) <= 16) set_state(3); else set_target(ME,-1); } // Look for a target, attack it if visible if (select_target(ME,8,0)) { do_attack(); set_state(3); } // Have I been hit? Strike back! if (who_hit_me() >= 0) { set_target(ME,who_hit_me()); do_attack(); set_state(3); } // Otherwise, just peacefully move around. Go back to start, if I'm too far // from where I started. if ((my_dist_from_start() >= 6) || ((my_dist_from_start() > 0) && (get_memory_cell(0) > 0))) { if (get_ran(1,1,100) < 40) return_to_start(ME,1); } else if (get_memory_cell(0) == 0) { fidget(ME,25); } // if we're in combat and the above didn't give me anything to do, just // stop now. Otherwise, game will keep running script, and that eats up CPU time. if (am_i_doing_action() == FALSE) end_combat_turn(); break; beginstate 3; // attacking if (target_ok() == FALSE) set_state(START_STATE); do_attack(); break; beginstate TALKING_STATE; if(get_flag(98,9) == 0){ message_dialog("You are now talking to a merchant. You have directly entered shop mode.","After you are through with shop mode, you will still be able to select a character to speak with. To exit the selection mode, press [ESCAPE]."); set_flag(98,9,1); } if (get_memory_cell(3) == 0) { begin_shop_mode("Ardent Armor","Merchants are busy people. Skipping conversation, this salesperson jumps into listing prices. The goods appear to be of decent quality, although the prices are debatable.",get_memory_cell(3),get_memory_cell(4),get_memory_cell(5)); } if (get_memory_cell(3) == 1) { begin_shop_mode("Insidious Implements","Merchants are busy people. Skipping conversation, this salesperson jumps into listing prices. The goods appear to be of decent quality, although the prices are debatable.",get_memory_cell(3),get_memory_cell(4),get_memory_cell(5)); } if (get_memory_cell(3) == 2) { begin_shop_mode("Devious Devices","Merchants are busy people. Skipping conversation, this salesperson jumps into listing prices. The goods appear to be of decent quality, although the prices are debatable.",get_memory_cell(3),get_memory_cell(4),get_memory_cell(5)); } if (get_memory_cell(3) == 3) { begin_shop_mode("Piercing Projectiles","Merchants are busy people. Skipping conversation, this salesperson jumps into listing prices. The goods appear to be of decent quality, although the prices are debatable.",get_memory_cell(3),get_memory_cell(4),get_memory_cell(5)); } if (get_memory_cell(3) == 4) { begin_shop_mode("Potent Potions","Merchants are busy people. Skipping conversation, this salesperson jumps into listing prices. The goods appear to be of decent quality, although the prices are debatable.",get_memory_cell(3),get_memory_cell(4),get_memory_cell(5)); } if (get_memory_cell(3) == 5) { begin_shop_mode("Fresh Food","Merchants are busy people. Skipping conversation, this salesperson jumps into listing prices. The goods appear to be of decent quality, although the prices are debatable.",get_memory_cell(3),get_memory_cell(4),get_memory_cell(5)); } break;