YASSE Walkto (script)

From Elanthipedia
Revision as of 14:32, 12 March 2011 by ISHARON (talk | contribs)
Jump to navigation Jump to search

Script for using the walkto command.

Run the script as <scriptname> <room>. Room can either be a (partial) room name or a room number (room names which are entirely numerical will not be properly handled).

The script will attempt to walk you to the specified room, using one type-ahead line for speed. If the walk gets stuck, the script will attempt to recover by moving one room at random and trying again. If there are no obvious exits, the script will try a direction at random. Will retreat from critters automatically.

set predefined on
setvariable walkttype "name"

setvariable temp %1
calculate temp replace 0 with ""
calculate temp replace 1 with ""
calculate temp replace 2 with ""
calculate temp replace 3 with ""
calculate temp replace 4 with ""
calculate temp replace 5 with ""
calculate temp replace 6 with ""
calculate temp replace 7 with ""
calculate temp replace 8 with ""
calculate temp replace 9 with ""

if $temp$ eq ""
	setvariable walkttype "room"


WALKTO:
	getinfo status
	if %result and %kneeling
		gosub STAND
	if %result and %prone
		gosub STAND
	if %result and %sitting
		gosub STAND

	move look

	speed fast
	match REACHED *  Stopped walking, target reached.  *
	match END Automapper: But you are already there!
	match MOVE Automapper: Automapper is unable to validate your current location.
	match MOVE Automapper is unable to find a clear path to that room
	match BLOCKED *  Stopped walking, something's blocking you.  *
	match MOVE You are engaged to a
	match MOVE You try to move, but you're engaged.
	put look
	if $walkttype$ eq "room"
		command -walkto room %1
	else
		command -walkto name "%1"
	matchwait


##


MOVE:
	speed normal
	setvariable exits ""
	counter set 0
	setvariable temp %roomdescription
	calculate temp pos obvious
	calculate temp right %result
	if %temp contains "north,"
		begin
		setvariable exits "$exits$ n"
		counter inc
		end
	if %temp contains "north."
		begin
		setvariable exits "$exits$ n"
		counter inc
		end
	if %temp contains "south,"
		begin
		setvariable exits "$exits$ s"
		counter inc
		end
	if %temp contains "south."
		begin
		setvariable exits "$exits$ s"
		counter inc
		end
	if %temp contains " east"
		begin
		setvariable exits "$exits$ e"
		counter inc
		end
	if %temp contains " west"
		begin
		setvariable exits "$exits$ w"
		counter inc
		end
	if %temp contains "northeast"
		begin
		setvariable exits "$exits$ ne"
		counter inc
		end
	if %temp contains "southeast"
		begin
		setvariable exits "$exits$ se"
		counter inc
		end
	if %temp contains "northwest"
		begin
		setvariable exits "$exits$ nw"
		counter inc
		end
	if %temp contains "southwest"
		begin
		setvariable exits "$exits$ sw"
		counter inc
		end
	if %temp contains " out"
		begin
		setvariable exits "$exits$ out"
		counter inc
		end
	if $exits$ eq "" goto NO-EXITS

MOVE-1:
	counter rnd %c
	getword %c $exits$
	put %w
	pausetext 3 "Obvious"
	goto WALKTO

RETR:
	put retreat
	goto MOVE-1

NO-EXITS:
	setvariable exits "n nw w sw s se e ne u d o"
	counter set 11
	goto MOVE-1


##


BLOCKED:
	command -clear commands
	goto MOVE


##


STAND:
	match RETURN You stand
	match RETURN You are already standing
	match STAND cannot manage to stand.
	match STAND The weight of all your possessions
	put stand
	matchwait


##


RETURN:
	return


##


REACHED:
	if $walkttype$ eq "name" goto END
	if %roomnumber == %1 goto END
	pause 2
	goto REACHED
END:
	exit