// 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_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));
		end();
	}
	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));
		end();
	}
	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));
		end();
	}
	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));
		end();
	}
	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));
		end();
	}
	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));
		end();
	}
	if (get_memory_cell(3) == 6) {
		begin_shop_mode("Retroactive Refunds","This person, working for Leader, has been provided with a large sum of cash to buy your goods.  The goods will be resold at a later date, or given to the North Canopy Military.",get_memory_cell(3),get_memory_cell(4),get_memory_cell(5));
		end();
	}
	if (get_memory_cell(3) == 7) {
		begin_shop_mode("Osogoth's Occult","You knew that the students were jealous with you, but you were not aware that the teachers were as well.  Professor Osogoth will teach you some of his magic, but his conversations are terse and not scintillating.",get_memory_cell(3),get_memory_cell(4),get_memory_cell(5));
		end();
	}
	if (get_memory_cell(3) == 9) {
		begin_shop_mode("Zephirium Inn","Alexander's replacement has most likely been instructed to be as taciturn as possible.  Since his predecessor was fired for telling rumors, he has made sure to say as little as possible.  ESPECIALLY to you.  The beer is still good, though.",get_memory_cell(3),get_memory_cell(4),get_memory_cell(5));
		end();
	}
break;