backExamples

Xelagot action script

InGZ Bot

Download it here.

[Head]
Type=Script
Version=2.0

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

[Script]

                         ###################################
                         #          The InGZ Bot           #
                         #        a Xelagot script         #
                         # (c) 1999 Alex Grigny de Castro  #                       
                         ###################################


#==================================
# In and out of gz detection
# Change parameters in Sub Settings
# to suit your needs
# the bot should be in GZ
#==================================

var @gz_NW, @gz_SE
var %EventType, %EventTypeAv
var &Chatter, $Chatline, $Chatname, $BotName, $Say
var &Av
var @InGZ, %InGZ
var %BotName, %Chatline
var /t_inGZ, /t_outGZ
var $ID
var $TextAnnounce, $TextIn, $TextOut, $TextOnDuty

   Gosub Settings
   OnWorldEnterEvent WorldEnter
   # re-enter the bot into the world to clear its avatar list
   Enter

   Label Start
   Goto Start

End

Sub Settings
   # GZ coordinates
   # the coordinates are those of the North-West and South-East corners
   # altitude and rotation are not used
   @gz_NW = 2.050n 1.560w 0a 0
   @gz_SE = 0.950s 1.460e 0a 0
   $TextAnnounce = "Welcome here, {p}"
   $TextIn = "You are in GZ, {p}"
   $TextOut = "You are outside GZ, {p}"
   $TextOnDuty = "{p}, I am on duty, don't disturb me!"
   WhisperControl 1
   OnChatEvent Chat1
   OnAvatarAddEvent Add1
   OnAvatarChangeEvent Change1
   OnAvatarDeleteEvent Delete1
EndSub

Event WorldEnter
   # sets the announce text on entering the world
   WhisperAnnounce $TextAnnounce
EndEvent

Sub GuardChat
   # analises the parameters retrieved in the chat event
   @InGZ = &Chatter
   %InGZ = -1
   $Say = ""
   Length %BotName $BotName
   Length %Chatline $Chatline
   IntAdd %L %BotName 2

   IfString "who is here" IsIn $Chatline Concat $Say "I am here, " $Chatname
   Else IfString "where am I" IsIn $Chatline Gosub DetermineInGZ
   Else IfInt %Chatline <= %L Gosub SayOnDuty

   IfInt %InGZ = 1 Concat $Say $TextIn
   Else IfInt %InGZ = 0 Concat $Say $TextOut

   Gosub SayWhisper
EndSub

Sub DetermineInGZ
   # actual checking of position of avatar
   # to see if it is in the GZ square
   IfLoc @InGZ IsInSquare @gz_NW @gz_SE %InGZ = 1
   Else %InGZ = 0
EndSub

Sub SayOnDuty
   Concat $Say $TextOnDuty
   Gosub SayWhisper
EndSub

Sub SayWhisper
   Whisper &Chatter $Say
   $Say = ""
EndSub

Event Chat1
   # chat event
   ChatImpair 3
   GetEventType %EventType
   GetChatPerson &Chatter
   GetChatline   $Chatline
   Trim $Chatline $Chatline
   GetName $Chatname &Chatter
   GetName $BotName
   Pos %u $BotName $Chatline
   IfInt %u = 1 Gosub GuardChat
EndEvent

Event Add1
   # avatar add event
   GetEventType  %EventTypeAv
   GetAvatarPerson &Av
   Gosub CheckGZ
EndEvent

Event Change1
   # avatar change event
   GetEventType  %EventTypeAv
   GetAvatarPerson &Av
   Gosub CheckGZ   
EndEvent

Event Delete1
   # avatar delete event
   GetEventType  %EventTypeAv
   GetAvatarPerson &Av

   @InGZ = &Av
   %InGZ = -1
   Gosub DetermineInGZ
   GetID $ID &Av
   GetName $n &Av

   IfInt %InGZ = 1 TItemSetTimeout /t_InGZ $ID 2
   Else IfInt %InGZ = 0 TItemSetTimeout /t_OutGZ $ID 2

EndEvent

Sub CheckGZ
   # check if avatar is in or out of GZ
   @InGZ = &Av
   %InGZ = -1
   Gosub DetermineInGZ
   GetID $ID &Av
   GetName $n &Av

   IfInt %InGZ = 1 Goto IsInGZ
   Else Goto IsOutGZ

   Label IsInGZ
      TItemGet /t_InGz $ID $i %x &Av
      IfInt %x = 0 Whisper &Av $TextIn   
      TItemSetTimeout /t_InGZ $ID 3600
      TItemRemove /t_OutGZ $ID
      EndSub
   
   Label IsOutGZ
      TItemGet /t_OutGz $ID $i %x &Av
      IfInt %x = 0 Whisper &Av $TextOut
      TItemSetTimeout /t_OutGZ $ID 3600
      TItemRemove /t_InGZ $ID
      EndSub

EndSub



backExamples