backExamples

Xelagot action script

DoubleWarps Bot

requires version 2.99967 or higher

You can download this script (the script file is called TramWarps.txt): click here

[Head]
Type=Script
Version=2.0

[Settings]
Origin=0.000n 0.000w 0.00a 0.0°

[Script]
                         ###################################
                         #      The DoubleWarps Bot        #
                         #        a Xelagot script         #
                         # (c) 1999 Alex Grigny de Castro  #                       
                         ###################################

# (second version)

# I made this script to build the warps in my two-way tramlines on Mars
# I hate calculating them, that's a bot's job!
# This script uses one sided panels, on Mars that is sign4.rwx
# and creates warps using a pair of these, back to back, 
# warping in opposite directions.
# Put the bot with its feet where you need the first warp 
# (on Mars, that is 6m above the base of trama.rwx)
# facing in the direction it is going to build the warps. 
# You can use verbal commands to position the bot,
# together with another script: avatar_object_click.txt
# which you will find in your script directory.# Then load this script,
# verbally adjust the distance between the warps, the model 
# and the number of warps ('repeat') and put the bot to work. 
# By default, it puts one double warp model sign4.rwx, with a range of 10m
# (it adds 2m for the warp to work smoothly).
# It has a menu, just follow the instructions the bot gives you :)
# If you only need to know the action field, ask the bot (say 'action')

# Note on second version: 
# on Mars, the sign4.rwx I use faces the 'wrong' way when created by the bot
# i.e. it faces away from the bot, so it is invisible, non-solid
# and un-bumpable from that side. In AW the pp17.rwx faces the right way
# i.e. faces the bot and is visible, solid and bumpable from that side.
# If the action field does not correspond
# to the way the object faces when created,
# the warps will push you back instead of forwards.
# You can change the way the bot handles the object
# by saying 'faces you' for an AlphaWorld pp17.rwx (%faces = 1),
# or 'faces away' for a Martian sign4.rwx (%faces = 0)
# By default, the bot uses sign4.rwx and 'faces away'

var @bot, %alpha, %beta, %ns1, %we1, %ns2, %we2
var $ns1, $we1, $ns2, $we2, $ac1, $ac2
var ~w1, ~w2
var %dist, %ds, %repeat, %re, %done
var $panel, %faces

   # distance between 2 warps in meters
   # 2 meters will be added to the warp
   %dist = 10
   # panel must be a one sided panel
   $panel = "sign4.rwx"
   # repeat times
   %repeat = 1
   %faces = 0
   Add %ds %dist 2
   Div %ds %ds 10
   Stop
   Gosub SayState
   Gosub SayHelp

Label Wait
  OnChatEvent Chat
Label WaitLoop

   Goto WaitLoop

Label Build
   OnChatEvent
   %re = %repeat
   %done = 0
   Add %ds %dist 2
   Div %ds %ds 10
   # %ds has the distance of the warp in aw units
Label BuildNow
   Gosub Pos
   GetLocation @bot
   LocMove3d @bot %dist 0 0
   WarpLocal @bot
   Dec %re
   Inc %done
   Concat $a "Warp " %done
   Say $a
   IfInt %re > 0 Goto BuildNow
   Say Done
   Goto Wait
End

Sub Pos
  GetRotation %alpha
  Add %beta %alpha 180
  # %alpha is bot rotation in degrees
  # %beta is the opposite direction

  # backward warp
  Cos %c %beta
  Sin %d %beta
  Mul %ns1 %ds %c 
  Mul %we1 %ds %d 
  StringFromReal $ns1 %ns1 2
  IfString "-" IsIn $ns1
  Else Concat $ns1 "+" $ns1
  StringFromReal $we1 %we1 2
  IfString "-" IsIn $we1
  Else Concat $we1 "+" $we1
  Concat $ac1 "create visible off;bump warp " $ns1 " " $we1 
  GetPosition ~w1
  GetModel ~w1 $panel
  GetAction ~w1 $ac1
  GetCitnum ~w1
  IfInt %faces = 1 LocTurn ~w1 180
  ObjectAdd ~w1

  # forward warp
  Cos %c %alpha
  Sin %d %alpha
  Mul %ns2 %ds %c 
  Mul %we2 %ds %d 
  StringFromReal $ns2 %ns2 2
  IfString "-" IsIn $ns2
  Else Concat $ns2 "+" $ns2
  StringFromReal $we2 %we2 2
  IfString "-" IsIn $we2
  Else Concat $we2 "+" $we2
  Concat $ac2 "create visible off;bump warp " $ns2 " " $we2 
  GetPosition ~w2
  LocTurn ~w2 180
  GetModel ~w2 $panel
  GetAction ~w2 $ac2
  GetCitnum ~w2
  IfInt %faces = 1 LocTurn ~w2 180
  ObjectAdd ~w2
EndSub

Event Chat
   GetChatPerson &p
   IfPerson &p IsNotBoss EndEvent
   GetChatLine $a
   IfString "model" IsIn $a Gosub SetModel
   Else IfString "faces you" IsIn $a Gosub SetFacesYou
   Else IfString "faces away" IsIn $a Gosub SetFacesAway
   Else IfString "distance" IsIn $a Gosub SetDistance
   Else IfString "repeat" IsIn $a Gosub SetRepeat
   Else IfString "state" IsIn $a Gosub SayState
   Else IfString "action" IsIn $a Gosub SayAction
   Else IfString "help" IsIn $a Gosub SayHelp
   Else IfString "menu" IsIn $a Gosub SayHelp
   Else IfString "build" IsIn $a Gosub SetBuild
EndEvent

Sub SetModel
   Split $b $c $a "model"
   Trim $c $c
   $panel = $c
   Concat $a "Model is " $panel
   Say $a
   Gosub SayState
EndSub

Sub SetDistance
   Split $b $c $a "distance"
   Trim $c $c
   %dist = $c
   Max %dist %dist 0.5
   StringFromReal $c %dist
   Concat $a "Distance is " $c
   Say $a
   Gosub SayState
EndSub

Sub SetRepeat
   Split $b $c $a "repeat"
   Trim $c $c
   %repeat = $c
   Max %repeat %repeat 1
   $c = %repeat
   Concat $a "Repeat is " $c
   Say $a
   Gosub SayState
EndSub

Sub SetBuild
  StringFromReal $d %dist
  IfInt %repeat = 1 Concat $a "Building a two-way warp (range " $d " metres), model " $panel
  Else Concat $a "Building " %repeat " two-way warps at " $d " metres interval, model " $panel
  Say $a
  ResetTo Build
EndSub

Sub SetFacesYou
   %faces = 1
   Say Model faces you
   Gosub SayState
EndSub

Sub SetFacesAway
   %faces = 0
   Say Model faces away
   Gosub SayState
EndSub

Sub SayState
  StringFromReal $d %dist
  IfInt %faces = 0 $z = " faces away from you"
  Else $z = " faces you"
  IfInt %repeat = 1 Concat $a "Ready to build a two-way warp (range " $d " metres), model " $panel $z
  Else Concat $a "Ready to build " %repeat " two-way warps at " $d " metres interval, model " $panel $z
  Say $a
EndSub

Sub SayHelp
  Concat $a "To change parameters, say 'Model ', 'Distance ' (decimals are allowed), 'Repeat '. "
  Concat $a $a "To set which way the model faces, say 'Faces you' or 'Faces away'. "
  Concat $a $a "To know the state of affairs and the action field, say 'State' and 'Action', "
  Concat $a $a "for help say 'Help' or 'Menu'. "
  Concat $a $a "To start building the warps, say 'Build'".
  Say $a
EndSub

Sub SayAction
  GetRotation %alpha
  Add %beta %alpha 180
  # %alpha is bot rotation in degrees
  # %beta is the opposite direction

  Cos %c %beta
  Sin %d %beta
  Mul %ns1 %ds %c 
  Mul %we1 %ds %d 
  StringFromReal $ns1 %ns1 2
  IfString "-" IsIn $ns1
  Else Concat $ns1 "+" $ns1
  StringFromReal $we1 %we1 2
  IfString "-" IsIn $we1
  Else Concat $we1 "+" $we1
  Concat $ac1 "Backward: create visible off;bump warp " $ns1 " " $we1 
  Say $ac1

  Cos %c %alpha
  Sin %d %alpha
  Mul %ns2 %ds %c 
  Mul %we2 %ds %d 
  StringFromReal $ns2 %ns2 2
  IfString "-" IsIn $ns2
  Else Concat $ns2 "+" $ns2
  StringFromReal $we2 %we2 2
  IfString "-" IsIn $we2
  Else Concat $we2 "+" $we2
  Concat $ac2 "Forward: create visible off;bump warp " $ns2 " " $we2 
  Say $ac2
EndSub



backExamples