Code: Select all
|advpath.inc
|Generic movement/pathing macro for inclusion in your own macros.
|Version 1.10 (Requires MQ2 zip from 3/5/2004 or later.)
|Date:3/6/2004 7:00pm
|
||**
[advpath]
version=1.10
**|
#Event LocalRecord "[MQ2] record"
#Event LocalPlot "[MQ2] plot"
#Event LocalDistance "[MQ2] distance"
#Event LocalPlay "[MQ2] play:"
#Event LocalStop "[MQ2] stop"
#Event LocalGoto "[MQ2] goto"
#Event LocalPause "[MQ2] pause"
#Event LocalFollow "[MQ2] follow"
#Event LocalSilent "[MQ2] silent"
#Event LocalPattern "[MQ2] pattern:"
#Event LocalAddMod "[MQ2] +"
#Event LocalSubMod "[MQ2] -"
#Event ZoneEvent "You have entered"
| --------------------------------------------------------------------------------
Sub AdvPathPoll
/if n @PathingFlag==1 /if n @CheckLocTimer<=0 /call IncrementLoc $arg(1,"@LocArray(@CurrLoc)") $arg(2,"@LocArray(@CurrLoc)") $arg(3,"@LocArray(@CurrLoc)")
/if n @RecordPathFlag==1 /call RecordPath
/if n @FollowFlag==1 {
/call TrackFollow
/call CheckForTarget
/if n @CheckLocTimer<=0 /if n @PauseFlag==0 /if n @NumLocs>@CurrLoc /call FollowIncLoc $arg(1,"@LocArray(@CurrLoc)") $arg(2,"@LocArray(@CurrLoc)") $arg(3,"@LocArray(@CurrLoc)")
}
/return
| --------------------------------------------------------------------------------
Sub SimpleKeyPress(Function,Duration,DelayType)
/if $defined(DelayType)==FALSE {
/declare DelayType local
/varset DelayType 1
}
/keypress @Function
/keypress @Function hold
/if n @DelayType==1 {
/call Delay @Duration
} else {
/delay @Duration
}
/keypress @Function
/return
| --------------------------------------------------------------------------------
Sub CheckObstacle
/declare TempVarObst local
/if n $distance(@MyLastYLoc,@MyLastXLoc)<1 /call CheckDoor
/if n $distance(@MyLastYLoc,@MyLastXLoc)<1 /call HitObstacle
/varset MyLastXLoc $char(x)
/varset MyLastYLoc $char(y)
/varset ObstacleCount 0
/return
| --------------------------------------------------------------------------------
Sub CheckDoor
/declare CharDirection local
/declare TempVarDoor local
/declare TempStoreTgt local
/varset TempStoreTgt 0
/if $target()==TRUE /varset TempStoreTgt $target(id)
/doortarget
/if "$target(name)"~~"door" /if n $target(distance)<=12 {
/call Move 0
/if n $char(heading)=>315 {
/look 0
/face fast nolook heading 0
/varset CharDirection 0
}
/if n $char(heading)<45 {
/look 0
/face fast nolook heading 0
/varset CharDirection 0
}
/if n $char(heading)=>45 /if n $char(heading)<135 {
/look 0
/face fast nolook heading 90
/varset CharDirection 90
}
/if n $char(heading)=>135 /if n $char(heading)<225 {
/look 0
/face fast nolook heading 180
/varset CharDirection 180
}
/if n $char(heading)=>225 /if n $char(heading)<315 {
/look 0
/face fast nolook heading 270
/varset CharDirection 270
}
/varset TempVarDoor 0
:DoorMoveCloser
/varadd TempVarDoor 1
/if n @TempVarDoor>50 /goto :DoorDoneMoveCloser
/if n $target(distance)>14 /call SimpleKeyPress FORWARD 1
/if n $target(distance)<11 /call SimpleKeyPress BACK 1
/if n $target(distance)>14 /goto :DoorMoveCloser
/if n $target(distance)<11 /goto :DoorMoveCloser
:DoorDoneMoveCloser
/call Delay 0
/keypress USE HOLD
/keypress USE
/call Delay 1s
/varset DoorMoveTimer 1s
/varset TempVarDoor 0
:DoorMoveAway
/if n DoorMoveTimer>0 {
/varadd TempVarDoor 1
/if n @TempVarDoor>50 /goto :DoorDoneMoveAway
/if n $target(distance)>21 /call SimpleKeyPress FORWARD 1
/if n $target(distance)<17 /call SimpleKeyPress BACK 1
/if n $target(distance)>21 /goto :DoorMoveAway
/if n $target(distance)<17 /goto :DoorMoveAway
:DoorDoneMoveAway
}
/call Delay 0
/if n $target(heading)==0 {
/if n @CharDirection==0 {
/varset TempVarDoor 0
/look 0
/face fast nolook heading 337
:DoorNorth1
/varadd TempVarDoor 1
/call SimpleKeyPress FORWARD 1
/if n @TempVarDoor<1 /goto :DoorNorth1
/face fast nolook door
} else {
/varset TempVarDoor 0
/look 0
/face fast nolook heading 203
:DoorNorth2
/varadd TempVarDoor 1
/call SimpleKeyPress FORWARD 1
/if n @TempVarDoor<1 /goto :DoorNorth2
/face fast nolook door
}
}
/if n $target(heading)==90 {
/if n @CharDirection==90 {
/varset TempVarDoor 0
/look 0
/face fast nolook heading 67
:DoorWest1
/varadd TempVarDoor 1
/call SimpleKeyPress FORWARD 1
/if n @TempVarDoor<1 /goto :DoorWest1
/face fast nolook door
} else {
/varset TempVarDoor 0
/look 0
/face fast nolook heading 293
:DoorWest2
/varadd TempVarDoor 1
/call SimpleKeyPress FORWARD 1
/if n @TempVarDoor<1 /goto :DoorWest2
/face fast nolook door
}
}
/if n $target(heading)==180 {
/if n @CharDirection==180 {
/varset TempVarDoor 0
/look 0
/face fast nolook heading 157
:DoorSouth1
/varadd TempVarDoor 1
/call SimpleKeyPress FORWARD 1
/if n @TempVarDoor<1 /goto :DoorSouth1
/face fast nolook door
} else {
/varset TempVarDoor 0
/look 0
/face fast nolook heading 23
:DoorSouth2
/varadd TempVarDoor 1
/call SimpleKeyPress FORWARD 1
/if n @TempVarDoor<1 /goto :DoorSouth2
/face fast nolook door
}
}
/if n $target(heading)==270 {
/if n @CharDirection==270 {
/varset TempVarDoor 0
/look 0
/face fast nolook heading 247
:DoorEast1
/varadd TempVarDoor 1
/call SimpleKeyPress FORWARD 1
/if n @TempVarDoor<1 /goto :DoorEast1
/face fast nolook door
} else {
/varset TempVarDoor 0
/look 0
/face fast nolook heading 113
:DoorEast2
/varadd TempVarDoor 1
/call SimpleKeyPress FORWARD 1
/if n @TempVarDoor<1 /goto :DoorEast2
/face fast nolook door
}
}
/call Move 1
}
/if n @TempStoreTgt>0 {
/if $spawn(@TempStoreTgt)==TRUE /target id @TempStoreTgt
} else {
/target clear
}
/return
| --------------------------------------------------------------------------------
Sub CheckForTarget
/if n @FollowFlag==1 /if n @ObstacleCount<7 /if "$target(name,clean)"!="@FollowName" {
/call TargetMob "@FollowName"
}
/return
| --------------------------------------------------------------------------------
Sub CheckMoving
/if n @PauseFlag==0 /if n $char(speed)==0 {
/call Move 1
}
/return
| --------------------------------------------------------------------------------
Sub ClearLocs
/varset CurrLoc 0
/varset NumLocs 0
/varset ObstacleCount 0
/varset TotalObstCount 0
/return
| --------------------------------------------------------------------------------
Sub Delay(DelayTime)
|
| Time Critical /call's that do simple calculations go in the for loop.
| Do not put things in here that might interfere with other functions.
|
/varset DelayTimer @DelayTime
:DlyLoop
/delay 1
/if n @FollowFlag==1 /call TrackFollow
/if n @DelayTimer>0 /goto :DlyLoop
/return
| --------------------------------------------------------------------------------
Sub FindLookAngle(TY,TX,TZ)
/declare Angle local
/declare LevOrWet local
/declare TempFacing local
/declare TempFacingLoop local
/varset LevOrWet 0
/declare FY local
/declare FX local
/declare FZ local
/varset FZ $char(z)
/if n $char(feetwet)==5 {
/varadd TZ 3
/varadd LevOrWet 1
}
/if $char(levitating)==TRUE {
/varadd TZ 5
/varadd LevOrWet 1
}
/varset FY $char(y)
/varset FX $char(x)
/varset Angle $abs($asin($if(n,$abs($calc($abs($calc(@FZ-@TZ))/$distance(@TY,@TX,@TZ:@FY,@FX,@FZ)))<=1,$calc($abs($calc(@FZ-@TZ))/$distance(@TY,@TX,@TZ:@FY,@FX,@FZ)),1)))
/if @FZ<@TZ {
/varset Angle $calc(@Angle*-1)
} else /if n @TZ==@FZ {
/varset Angle 0
}
/if n @LevOrWet==0 /varset Angle $calc($calc(@Angle\10)*10)
/if n @FollowFlag==1 /if n @CurrLoc<2 /if n $char(speed)==0 {
/face nolook loc @TY,@TX
:WaitForTurnStart
/varset TempFacing $char(heading)
/call Delay 1
/if n $char(heading)!=@TempFacing /goto :WaitForTurnStart
}
/if n @UseFaceFast==0 {
/if n $abs($calc($char(heading)-$heading(@TY,@TX)))>$if(n,$char(speed)>0,$calc(2700/$char(speed)),10) {
/call Move 0
/face nolook loc @TY,@TX
:WaitForTurnLook
/varset TempFacing $char(heading)
/call Delay 1
/if n $char(heading)!=@TempFacing /goto :WaitForTurnLook
/call Delay 1
} else {
/face nolook loc @TY,@TX
}
} else {
/face fast nolook loc @TY,@TX
}
/look @Angle
/return
| --------------------------------------------------------------------------------
Sub FollowIncLoc(TY,TX,TZ)
/declare TempFacing local
/varset CheckLocTimer 1
/varadd ObstacleCount 1
/varadd TotalObstCount 1
/varset PositionTimer 1s
/if $spawn(@FollowID)==TRUE /if n $spawn(@FollowID,distance,3d)<=$calc(@FollowDistance+$calc($char(speed)/30)) {
/call Move 0
/if $spawn(@FollowID)==TRUE /if n $spawn(@FollowID,speed)==0 {
/face nolook id @FollowID
:WaitForTurnFoll
/varset TempFacing $char(heading)
/call Delay 1
/if n $char(heading)!=@TempFacing /goto :WaitForTurnFoll
:FollowDistClose
/if n @PositionTimer>0 /if $spawn(@FollowID)==TRUE {
/if n $spawn(@FollowID,distance,3d)>$calc(@FollowDistance+8) /call SimpleKeyPress FORWARD 1
/if n $spawn(@FollowID,distance,3d)<$calc(@FollowDistance-8) /call SimpleKeyPress BACK 1
/if n $spawn(@FollowID,distance,3d)>$calc(@FollowDistance+8) /goto :FollowDistClose
/if n $spawn(@FollowID,distance,3d)<$calc(@FollowDistance-8) /goto :FollowDistClose
}
}
/call ClearLocs
/if n @CurrLoc==0 /varset CurrFollLoc "$spawn(@FollowID,y) $spawn(@FollowID,x) $spawn(@FollowID,z)"
/return
}
/if ((n $heading(@TY,@TX)<$calc(@StoreHeading-90) || n $heading(@TY,@TX)>$calc(@StoreHeading+90)) || n $distance(@TY,@TX,@TZ)<$if(n,$char(speed)!=0,$calc($calc($char(speed)/@SpeedSense)+@DistanceModifier),$calc($calc(200/@SpeedSense)+@DistanceModifier))) {
/varset LastLoc "@LocArray(@CurrLoc)"
/varadd CurrLoc 1
/if n @CurrLoc<@NumLocs /varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))
/varset ObstacleCount 0
/varset TotalObstCount 0
}
/if n @CurrLoc==@NumLocs {
/call Move 0
/if $spawn(@FollowID)==TRUE {
/face nolook id @FollowID
:WaitForTurnFoll2
/varset TempFacing $char(heading)
/call Delay 1
/if n $char(heading)!=@TempFacing /goto :WaitForTurnFoll2
:FollowDistClose2
/if n @PositionTimer>0 /if $spawn(@FollowID)==TRUE /if n $spawn(@FollowID,speed)==0 {
/if n $spawn(@FollowID,distance,3d)<$calc(@FollowDistance+8) {
/if n $spawn(@FollowID,distance,3d)>$calc(@FollowDistance+8) /call SimpleKeyPress FORWARD 1
/if n $spawn(@FollowID,distance,3d)<$calc(@FollowDistance-8) /call SimpleKeyPress BACK 1
/if n $spawn(@FollowID,distance,3d)>$calc(@FollowDistance+8) /goto :FollowDistClose2
/if n $spawn(@FollowID,distance,3d)<$calc(@FollowDistance-8) /goto :FollowDistClose2
}
}
}
/call ClearLocs
/if n @CurrLoc==0 /varset CurrFollLoc "$spawn(@FollowID,y) $spawn(@FollowID,x) $spawn(@FollowID,z)"
/return
}
/if n @ObstacleCount>6 /call CheckObstacle
/if n @CurrLoc<@NumLocs {
/if n @TotalObstCount>50 {
/varset LastLoc "@LocArray(@CurrLoc)"
/varadd CurrLoc 1
/varset ObstacleCount 0
/varset TotalObstCount 0
}
} else {
/echo -(( Cannot get to location because of obstacles! Aborting. ))-
/call StopFunction
/return
}
/if n @NumLocs>@CurrLoc {
/call FindLookAngle $arg(1,"@LocArray(@CurrLoc)") $arg(2,"@LocArray(@CurrLoc)") $arg(3,"@LocArray(@CurrLoc)")
/call CheckMoving
}
/return
Sub GetClosestLoc
| --------------------------------------------------------------------------------
/declare FindClosest local
/declare TempClosest local
/declare Closest local
/varset TempClosest 9999
/varset Closest 0
/for FindClosest 0 to @NumLocs
/if n $distance($arg(1,"@LocArray(@FindClosest)"),$arg(2,"@LocArray(@FindClosest)"),$arg(3,"@LocArray(@FindClosest)"))<@TempClosest {
/varset TempClosest $distance($arg(1,"@LocArray(@FindClosest)"),$arg(2,"@LocArray(@FindClosest)"),$arg(3,"@LocArray(@FindClosest)"))
/varset Closest @FindClosest
}
/next FindClosest
/varset CurrLoc @Closest
/return
| --------------------------------------------------------------------------------
Sub GetCommand
/varset PathingFlag 0
/varset PBPFName "$arg(1,"@PlayCommandQueue(@PlayQueueCurr)")"
/varset PBIterations "$arg(2,"@PlayCommandQueue(@PlayQueueCurr)")"
/varset PBDirection "$arg(3,"@PlayCommandQueue(@PlayQueueCurr)")"
/varset PBPingPong "$arg(4,"@PlayCommandQueue(@PlayQueueCurr)")"
/varset PBZone "$arg(5,"@PlayCommandQueue(@PlayQueueCurr)")"
/if "@PBDirection"~~"r" {
/varset Direction "reverse"
} else {
/varset Direction "forward"
}
/if "@PBPingPong"=="pp" {
/varset PingPongCount 1
} else {
/varset PingPongCount 0
}
/if "@PBIterations"=="loop" {
/varset Iterations 1
} else {
/varset Iterations @PBIterations
}
/return
| --------------------------------------------------------------------------------
| Partially plagerized from McKorr's autofight.inc
Sub HitObstacle
/declare TempVarHit local
/call Move 0
/keypress BACK
/keypress BACK hold
/call Delay $calc($rand(3)+3)
/keypress BACK
/if n $rand(99)>49 {
/keypress RIGHT
/keypress RIGHT hold
} else {
/keypress LEFT
/keypress LEFT hold
}
/call Delay $calc($rand(3)+3)
/keypress RIGHT
/keypress LEFT
/call Move 1
/call Delay 3
/keypress JUMP
/call Delay 1
/face fast nolook loc $arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)")
/return
| --------------------------------------------------------------------------------
Sub IncrementLoc(TY,TX,TZ)
/varset CheckLocTimer 1
/varadd ObstacleCount 1
/varadd TotalObstCount 1
/if ((n $heading(@TY,@TX)<$calc(@StoreHeading-90) || n $heading(@TY,@TX)>$calc(@StoreHeading+90)) || n $distance(@TY,@TX,@TZ)<$if(n,$char(speed)!=0,$calc($calc($char(speed)/@SpeedSense)+@DistanceModifier),$calc($calc(200/@SpeedSense)+@DistanceModifier))) {
/varset LastLoc "@LocArray(@CurrLoc)"
/if "@Direction"=="forward" {
/varadd CurrLoc 1
/varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))
} else {
/varsub CurrLoc 1
/varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))
}
/varset ObstacleCount 0
/varset TotalObstCount 0
}
/if "@Direction"=="forward" {
/if n @CurrLoc>@NumLocs {
/if n @PingPongCount==0 {
/if "@PBIterations"!="loop" {
/varsub Iterations 1
} else {
/varset CurrLoc 0
/varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))
}
/if n @Iterations==0 {
/if "@PBZone"=="z" /call TryToZone
/if n @PlayQueueCurr==@PlayQueueNum {
/call Move 0
/varset PlayQueueCurr 0
/varset PlayQueueNum 0
/varset PathingFlag 0
/call ClearLocs
/if n @SilentFlag==0 /echo -[ Done with playback! ]-
} else {
/varadd PlayQueueCurr 1
/call GetCommand
/call LoadPathFile "@PBPFName"
/if n $return==0 {
/if n @SilentFlag==0 /echo -[ Started play back of path file -( "@PBPFName" )- ]-
/if "@Direction"=="forward" {
/if "@PBDirection"~~"c" {
/call GetClosestLoc
/varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))
} else {
/varset CurrLoc 0
/varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))
}
} else {
/if "@PBDirection"~~"c" {
/call GetClosestLoc
/varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))
} else {
/varset CurrLoc @NumLocs
/varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))
}
}
/varset PathingFlag 1
}
}
} else {
/if "@PBPingPong"=="pp" {
/varset PingPongCount 1
/varset Direction "reverse"
/varset CurrLoc @NumLocs
/varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))
}
}
} else {
/varsub PingPongCount 1
/varset Direction "reverse"
/varset CurrLoc @NumLocs
/varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))
}
}
/if n @ObstacleCount>6 /call CheckObstacle
/if n @TotalObstCount>50 {
/varset LastLoc "@LocArray(@CurrLoc)"
/if n @CurrLoc<@NumLocs {
/varadd CurrLoc 1
/varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))
/varset ObstacleCount 0
/varset TotalObstCount 0
} else {
/echo -(( Cannot get to location because of obstacles! Aborting. ))-
/call StopFunction
/return
}
}
/if n @PathingFlag==1 {
/call FindLookAngle $arg(1,"@LocArray(@CurrLoc)") $arg(2,"@LocArray(@CurrLoc)") $arg(3,"@LocArray(@CurrLoc)")
/call CheckMoving
}
} else {
/if n @CurrLoc<0 {
/if n @PingPongCount==0 {
/if "@PBIterations"!="loop" {
/varsub Iterations 1
} else {
/varset CurrLoc @NumLocs
/varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))
}
/if n @Iterations==0 {
/if "@PBZone"=="z" /call TryToZone
/if n @PlayQueueCurr==@PlayQueueNum {
/call Move 0
/varset PlayQueueCurr 0
/varset PlayQueueNum 0
/varset PathingFlag 0
/call ClearLocs
/if n @SilentFlag==0 /echo -[ Done with playback! ]-
} else {
/varadd PlayQueueCurr 1
/call GetCommand
/call LoadPathFile "@PBPFName"
/if n $return==0 {
/if n @SilentFlag==0 /echo -[ Started play back of path file -( "@PBPFName" )- ]-
/if "@Direction"=="forward" {
/if "@PBDirection"~~"c" {
/call GetClosestLoc
/varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))
} else {
/varset CurrLoc 0
/varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))
}
} else {
/if "@PBDirection"~~"c" {
/call GetClosestLoc
/varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))
} else {
/varset CurrLoc @NumLocs
/varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))
}
}
/varset PathingFlag 1
}
}
} else {
/if "@PBPingPong"=="pp" {
/varset PingPongCount 1
/varset Direction "forward"
/varset CurrLoc 0
/varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))
}
}
} else {
/varsub PingPongCount 1
/varset Direction "forward"
/varset CurrLoc 0
/varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))
}
}
/if n @ObstacleCount>6 /call CheckObstacle
/if n @TotalObstCount>50 {
/if n @CurrLoc>0 {
/varset LastLoc "@LocArray(@CurrLoc)"
/varsub CurrLoc 1
/varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))
/varset ObstacleCount 0
/varset TotalObstCount 0
} else {
/echo -(( Cannot get to location because of obstacles! Aborting. ))-
/call StopFunction
/return
}
}
/if n @PathingFlag==1 {
/call FindLookAngle $arg(1,"@LocArray(@CurrLoc)") $arg(2,"@LocArray(@CurrLoc)") $arg(3,"@LocArray(@CurrLoc)")
/call CheckMoving
}
}
/doevents
/return
| --------------------------------------------------------------------------------
Sub LoadPathFile(PFIniName)
/declare AdvPathIniFile local
/varset AdvPathIniFile "PathFile_"
/varcat AdvPathIniFile "@PFIniName"
/varcat AdvPathIniFile ".ini"
/call ClearLocs
:LoadPlayFile
/varset LocArray(@NumLocs) "$ini("@AdvPathIniFile","PFLocs","$int(@NumLocs)")"
/if "@LocArray(@NumLocs)"=="NOTFOUND" {
/varsub NumLocs 1
/goto :DoneLoadPlayFile
}
/if "@LocArray(@NumLocs)"=="Empty" {
/varsub NumLocs 1
/goto :DoneLoadPlayFile
}
/varadd NumLocs 1
/goto :LoadPlayFile
:DoneLoadPlayFile
/if n @NumLocs<=0 {
/if n @SilentFlag==0 /echo -(( No pathing information found in -( "@PFIniName" )- ))-
/varset PathingFlag 0
/call ClearLocs
/return 1
}
/return 0
| --------------------------------------------------------------------------------
Sub Move(MoveCommand)
/if n @PauseFlag==0 {
/if n @MoveCommand==1 {
/keypress FORWARD
/keypress FORWARD hold
} else {
/keypress FORWARD
/keypress RIGHT
/keypress LEFT
/keypress BACK
}
} else {
/if n @MoveCommand==0 {
/keypress FORWARD
/keypress RIGHT
/keypress LEFT
/keypress BACK
}
}
/return
| --------------------------------------------------------------------------------
Sub RecordPath
/if n @ManualRecord==0 {
/if n @RecordPathFlag==1 {
/if n @NumLocs==0 {
/varset LocArray(@NumLocs) "$char(y) $char(x) $char(z)"
/varadd NumLocs 1
} else {
/if n $distance($arg(1,"@LocArray($calc(@NumLocs-1))"),$arg(2,"@LocArray($calc(@NumLocs-1))"),$arg(3,"@LocArray($calc(@NumLocs-1))"))>12 {
/varset LocArray(@NumLocs) "$char(y) $char(x) $char(z)"
/varadd NumLocs 1
}
}
}
}
/doevents
/return
| --------------------------------------------------------------------------------
Sub ShapePlot(ObjectNumSides,ObjectSize,CharStartY,CharStartX,CharStartZ)
/declare PointNumber local
/for PointNumber 1 to @ObjectNumSides
/varset XCoordinate(@PointNumber) $calc($calc(@ObjectSize*$cos($calc($calc(360/@ObjectNumSides)*$calc(@PointNumber-1))))+@CharStartX)
/varset YCoordinate(@PointNumber) $calc($calc(@ObjectSize*$sin($calc($calc(360/@ObjectNumSides)*$calc(@PointNumber-1))))+@CharStartY)
/varset ZCoordinate(@PointNumber) @CharStartZ
/next PointNumber
/for PointNumber 1 to @ObjectNumSides
/varset LocArray($calc(@PointNumber-1)) "@YCoordinate(@PointNumber) @XCoordinate(@PointNumber) @ZCoordinate(@PointNumber)"
/next PointNumber
/varset CurrLoc 0
/varset NumLocs @ObjectNumSides
/return
| --------------------------------------------------------------------------------
Sub TargetMob(TgtName)
/if n $searchspawn(pc,"@TgtName")>0 {
/target clear
/call Delay 2
/target pc "@TgtName"
/call Delay 4
/if $target()==TRUE /if "$target(name,clean)"=="@TgtName" {
/varset ZoneTimer 0
/varset ZoneFlag 0
/varset FollowFlag 1
/varset FollowID $target(id)
/if n @CurrLoc==0 /varset CurrFollLoc "$spawn(@FollowID,y) $spawn(@FollowID,x) $spawn(@FollowID,z)"
/if n @SilentFlag==0 /echo -[ Following -( $target(name,clean) )- ]-
}
} else /if n $searchspawn(npc,"@TgtName")>0 {
/target clear
/call Delay 2
/target npc "@TgtName"
/call Delay 4
/if $target()==TRUE /if "$target(name,clean)"=="@TgtName" {
/varset ZoneTimer 0
/varset ZoneFlag 0
/varset FollowFlag 1
/varset FollowID $target(id)
/if n @CurrLoc==0 /varset CurrFollLoc "$spawn(@FollowID,y) $spawn(@FollowID,x) $spawn(@FollowID,z)"
/if n @SilentFlag==0 /echo -[ Following -( $target(name,clean) )- ]-
}
} else /if n @ZoneFollow==1 {
/if n @CurrLoc==@NumLocs {
/if n @ZoneTimer>0 {
/varset ZoneFlag 1
/delay 1s
} else {
/if n @ZoneFlag==0 {
/call ClearLocs
/call TryToZone
} else {
/varset ZoneFlag 0
/varset FollowID 0
/call StopFunction
}
}
}
}
/return
| --------------------------------------------------------------------------------
Sub TrackFollow
/if n @FollowFlag==1 {
/if n @FollowID>0 {
/if n @NumLocs==0 {
/if n $spawn(@FollowID,distance,3d)>@FollowDistance {
/if $char(ismoving)==FALSE {
/varset LocArray(@NumLocs) "@CurrFollLoc"
/varadd NumLocs 1
}
/varset LocArray(@NumLocs) "$spawn(@FollowID,y) $spawn(@FollowID,x) $spawn(@FollowID,z)"
/varset StoreHeading $heading($arg(1,"@LocArray(@NumLocs)"),$arg(2,"@LocArray(@NumLocs)"))
/if "@LocArray(@NumLocs)"!="0 0 0" /varadd NumLocs 1
}
} else {
/if n $distance($arg(1,"@LocArray($calc(@NumLocs-1))"),$arg(2,"@LocArray($calc(@NumLocs-1))"),$arg(3,"@LocArray($calc(@NumLocs-1))"):$spawn(@FollowID,y),$spawn(@FollowID,x),$spawn(@FollowID,z))>$if(n,$spawn(@FollowID,speed)!=0,$calc($calc($spawn(@FollowID,speed)/@SpeedSense)+@DistanceModifier),$calc($calc(200/@SpeedSense)+@DistanceModifier)) {
/varset LocArray(@NumLocs) "$spawn(@FollowID,y) $spawn(@FollowID,x) $spawn(@FollowID,z)"
/if "@LocArray(@NumLocs)"!="0 0 0" /varadd NumLocs 1
}
}
}
}
/doevents
/return
| --------------------------------------------------------------------------------
Sub TryToZone
/declare InCurrZone local
/declare TempStoreTgt local
/varset TempStoreTgt 0
/varset InCurrZone "$zone"
/call Move 0
/if $target()==TRUE /varset TempStoreTgt $target(id)
/doortarget
/delay 3
/if ("$target(name)"~~"port" || "$target(name)"~~"tele") /if n $target(distance)<=50 {
/face fast nolook door
:ZoneMoveCloser
/if n $target(distance)>15 /call SimpleKeyPress FORWARD 1 0
/if n $target(distance)<11 /call SimpleKeyPress BACK 1 0
/if n $target(distance)>15 /goto :ZoneMoveCloser
/if n $target(distance)<11 /goto :ZoneMoveCloser
/keypress USE hold
/keypress USE
/delay 1
/keypress USE hold
/keypress USE
/varset ZoneTimer 5s
:WaitForZone
/delay 1
/if "$zone"!="@InCurrZone" /goto :Zoned
/if n @ZoneTimer>0 /goto :WaitForZone
/if n @TempStoreTgt>0 {
/if $spawn(@FollowID)==TRUE /target id @TempStoreTgt
} else {
/target clear
}
:Zoned
}
/if "$zone"=="@InCurrZone" {
/keypress FORWARD
/keypress FORWARD hold
/delay 1s
/keypress FORWARD
/if n @TempStoreTgt>0 {
/if "$zone"=="@InCurrZone" /if $spawn(@TempStoreTgt)==TRUE /target id @TempStoreTgt
} else {
/target clear
}
/varset ZoneTimer 20s
:WaitForZone2
/delay 1
/if "$zone"!="@InCurrZone" /goto :Zoned2
/if n @ZoneTimer>0 /goto :WaitForZone2
/if n @SilentFlag==0 /echo -(( Couldn't zone properly. Stopping. ))-
/varset PauseHolder NULL
/varset PauseFlag 0
/varset PathingFlag 0
/varset FollowFlag 0
/varset RecordPathFlag 0
/call ClearLocs
:Zoned2
}
/call Move 0
/return
| --------------------------------------------------------------------------------
Sub FollowFunction(FuncText)
/if n @PauseFlag==0 {
/if n @PathingFlag==0 {
/if n @RecordPathFlag==0 {
/if "@FuncText"=="" {
/varset FollowName "NULL"
} else {
/varset FollowName "@FuncText"
}
/if "@FollowName"!="NULL" {
/call ClearLocs
/call Move 0
/call TargetMob "@FollowName"
} else {
/if n @SilentFlag==0 /echo -(( No follow target specified. You must provide the name of the npc/player you want to follow. ))-
}
} else {
/if n @SilentFlag==0 /echo -(( You cannot start following while recording a pathfile! ))-
}
} else {
/if n @SilentFlag==0 /echo -(( You cannot start following while playing back a pathfile! ))-
}
} else {
/if n @SilentFlag==0 /echo -(( You cannot start following while paused! ))-
}
/return
| --------------------------------------------------------------------------------
Sub Event_LocalFollow(EvtText)
/if "$mid(6,6,"@EvtText")"=="follow" {
/call FollowFunction "$mid(13,$calc($strlen("@EvtText")-13),"@EvtText")"
}
/return
| --------------------------------------------------------------------------------
Sub PauseFunction
/if n @PauseFlag==0 {
/if n @PathingFlag==0 {
/if n @FollowFlag==0 {
/if n @RecordPathFlag==0 {
/if n @SilentFlag==0 /echo -(( There is nothing to pause or unpause! ))-
} else {
/varset PauseFlag 1
/varset PauseHolder "record"
/varset RecordPathFlag 0
/if n @SilentFlag==0 /echo -[ PAUSED recording of path file -( "@RecordPFName" )- ]-
/if n @SilentFlag==0 /echo -[ Issue the pause command again to resume recording. ]-
}
} else {
/varset PauseFlag 1
/varset PauseHolder "follow"
/call Move 0
/if n @SilentFlag==0 /echo -[ PAUSED following of -( "@FollowName" )- ]-
/if n @SilentFlag==0 /echo -[ Issue the pause command again to resume following. ]-
}
} else {
/varset PauseFlag 1
/varset PauseHolder "playback"
/varset PathingFlag 0
/call Move 0
/if n @SilentFlag==0 /echo -[ PAUSED playback of path file -( "@PBPFName" )- ]-
/if n @SilentFlag==0 /echo -[ Issue the pause command again to resume playback. ]-
}
} else {
/if "@PauseHolder"=="record" {
/varset PauseFlag 0
/varset RecordPathFlag 1
/if n @SilentFlag==0 /echo -[ RESUMED recording of path file -( "@RecordPFName" )- ]-
}
/if "@PauseHolder"=="playback" {
/varset PauseFlag 0
/varset PathingFlag 1
/if n @SilentFlag==0 /echo -[ RESUMED playback of path file -( "@PBPFName" )- ]-
}
/if "@PauseHolder"=="follow" {
/varset PauseFlag 0
/if n @SilentFlag==0 /echo -[ RESUMED following of -( "@FollowName" )- ]-
}
}
/return
| --------------------------------------------------------------------------------
Sub Event_LocalPause(EvtText)
/if "$mid(6,5,"@EvtText")"=="pause" {
/call PauseFunction
}
/return
| --------------------------------------------------------------------------------
Sub PlotFunction
/if n @ManualRecord==1 {
/if n @RecordPathFlag==1 {
/varset LocArray(@NumLocs) "$char(y) $char(x) $char(z)"
/if n @SilentFlag==0 /echo Location: Y:$arg(1,"@LocArray(@NumLocs)") X:$arg(2,"@LocArray(@NumLocs)") Z:$arg(3,"@LocArray(@NumLocs)") Plotted
/varadd NumLocs 1
} else {
/if n @PauseFlag==0 {
/if n @SilentFlag==0 /echo -[ You aren't recording anything! ]-
} else {
/if n @SilentFlag==0 /echo -[ You must unpause your recording in order to plot! ]-
}
}
} else {
/if n @SilentFlag==0 /echo -[ You are not in Manual Record Mode! ]-
}
/return
| --------------------------------------------------------------------------------
Sub Event_LocalPlot(EvtText)
/if "$mid(6,4,"@EvtText")"=="plot" {
/call PlotFunction
}
/return
| --------------------------------------------------------------------------------
Sub PlayFunction(FuncText)
/declare PlayNm local
/declare PlayItr local
/declare PlayDctn local
/declare PlayPong local
/declare PlayZn local
/declare TempCountVar local
/if n @PauseFlag==0 {
/if n @PathingFlag==0 {
/if n @RecordPathFlag==0 {
/if n @FollowFlag==0 {
/if n @GetMoreCommands==1 {
/varset GetMoreCommands 0
} else {
/varset PlayQueueNum 0
}
:InitParse
/varset PlayNm ""
/varset PlayItr ""
/varset PlayDctn ""
/varset PlayPong ""
:ParsePlayCommands
/if n $instr(" ","@FuncText")>0 /varset PlayNm "$left($instr(" ","@FuncText"),"@FuncText")"
/if n $instr(" ","@FuncText")>0 /varset FuncText "$right($calc($calc($strlen("@FuncText")-$instr(" ","@FuncText"))-1),"@FuncText")"
/if n $instr(" ","@FuncText")>0 /varset PlayItr "$left($instr(" ","@FuncText"),"@FuncText")"
/if n $instr(" ","@FuncText")>0 /varset FuncText "$right($calc($calc($strlen("@FuncText")-$instr(" ","@FuncText"))-1),"@FuncText")"
/if n $instr(" ","@FuncText")>0 /varset PlayDctn "$left($instr(" ","@FuncText"),"@FuncText")"
/if n $instr(" ","@FuncText")>0 /varset FuncText "$right($calc($calc($strlen("@FuncText")-$instr(" ","@FuncText"))-1),"@FuncText")"
/if n $instr(" ","@FuncText")>0 /varset PlayPong "$left($instr(" ","@FuncText"),"@FuncText")"
/if n $instr(" ","@FuncText")>0 /varset FuncText "$right($calc($calc($strlen("@FuncText")-$instr(" ","@FuncText"))-1),"@FuncText")"
/if n $instr(";","@FuncText")>0 {
/if n $instr(";","@FuncText")>0 /varset PlayZn "$left($instr(";","@FuncText"),"@FuncText")"
/if n $instr(";","@FuncText")>0 /varset FuncText "$right($calc($calc($strlen("@FuncText")-$instr(";","@FuncText"))-1),"@FuncText")"
/if "@PlayNm"!="" /if "@PlayItr"!="" /if "@PlayDctn"!="" /if "@PlayPong"!="" /if "@PlayZn"!="" {
/varset PlayCommandQueue(@PlayQueueNum) "@PlayNm @PlayItr @PlayDctn @PlayPong @PlayZn"
/varadd PlayQueueNum 1
/goto :InitParse
} else {
/if n @SilentFlag==0 /echo -(( Playback syntax error detected. Please try your command again. ))-
/return
}
} else {
/if n $instr("+","@FuncText")>0 {
/varset PlayZn "$left($instr("+","@FuncText"),"@FuncText")"
/varset GetMoreCommands 1
} else {
/varset PlayZn "@FuncText"
}
/if "@PlayNm"!="" /if "@PlayItr"!="" /if "@PlayDctn"!="" /if "@PlayPong"!="" /if "@PlayZn"!="" {
/varset PlayCommandQueue(@PlayQueueNum) "@PlayNm @PlayItr @PlayDctn @PlayPong @PlayZn"
/if n @GetMoreCommands==1 /varadd PlayQueueNum 1
/goto :DonePlayParse
} else {
/if n @SilentFlag==0 /echo -(( Playback syntax error detected. Please try your command again. ))-
/return
}
}
:DonePlayParse
/if n @GetMoreCommands==1 {
/if n @SilentFlag==0 /echo -[ Path Extender Detected. $int(@PlayQueueNum) commands queued. Continue entering lines. ]-
/return
}
/if n @SilentFlag==0 /echo -[------------------------------------------------]-
/if n @SilentFlag==0 /echo -[ There $if(n,$int($calc(@PlayQueueNum+1))==1,is,are) $int($calc(@PlayQueueNum+1)) $if(n,$int($calc(@PlayQueueNum+1))==1,path,paths) to be run.
/if n @SilentFlag==0 /echo -[------------------------------------------------]-
/for TempCountVar 0 to @PlayQueueNum
/if n @SilentFlag==0 /echo -[ Path Command $int($calc(@TempCountVar+1)): @PlayCommandQueue(@TempCountVar)
/next TempCountVar
/if n @SilentFlag==0 /echo -[------------------------------------------------]-
/varset PlayQueueCurr 0
/call GetCommand
/call LoadPathFile "@PBPFName"
/if n $return==0 {
/if n @SilentFlag==0 /echo -[ Started play back of path file -( "@PBPFName" )- ]-
/if "@Direction"=="forward" {
/if "@PBDirection"~~"c" {
/call GetClosestLoc
/varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))
} else {
/varset CurrLoc 0
/varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))
}
} else {
/if "@PBDirection"~~"c" {
/call GetClosestLoc
/varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))
} else {
/varset CurrLoc @NumLocs
/varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))
}
}
/varset PathingFlag 1
}
} else {
/if n @SilentFlag==0 /echo -(( You cannot start playback while in follow mode! ))-
}
} else {
/if n @SilentFlag==0 /echo -(( You cannot start playback while recording! ))-
}
} else {
/if n @SilentFlag==0 /echo -(( You are already playing back path file -( "@PBPFName" )- ))-
}
} else {
/if n @SilentFlag==0 /echo -(( You cannot start playback while paused! ))-
}
/return
| --------------------------------------------------------------------------------
Sub Event_LocalPlay(EvtText)
/if "$mid(6,5,"@EvtText")"=="play:" {
/call PlayFunction "$mid(11,$calc($strlen("@EvtText")-11),"@EvtText")"
}
/return
| --------------------------------------------------------------------------------
Sub PatternFunction(FuncText)
/if n @PauseFlag==0 {
/if n @PathingFlag==0 {
/if n @FollowFlag==0 {
/if n @RecordPathFlag==0 {
/if "$arg(1,"@FuncText")"!="" /if "$arg(2,"@FuncText")"!="" {
/call ShapePlot $arg(1,"@FuncText") $arg(2,"@FuncText") $char(y) $char(x) $char(z)
/varset RecordPFName "TempShape"
/varset RecordPathFlag 1
/call StopFunction
/call PlayFunction "@RecordPFName loop f nopp noz"
}
} else {
/if n @SilentFlag==0 /echo -(( You are already recording path file -( @RecordPFName )- ))-
}
} else {
/if n @SilentFlag==0 /echo -(( You cannot start a pattern playback while in follow mode! ))-
}
} else {
/if n @SilentFlag==0 /echo -(( You cannot start a pattern playback while playing back a path! ))-
}
} else {
/if n @SilentFlag==0 /echo -(( You cannot start a pattern playback while paused! ))-
}
/return
| --------------------------------------------------------------------------------
Sub Event_LocalPattern(EvtText)
/if "$mid(6,8,"@EvtText")"=="pattern:" {
/call PatternFunction "$mid(14,$calc($strlen("@EvtText")-14),"@EvtText")"
}
/return
| --------------------------------------------------------------------------------
Sub RecordFunction(FuncText)
/if "$arg(2,"@FuncText")"=="manual" {
/varset ManualRecord 1
} else {
/varset ManualRecord 0
}
/if n @PauseFlag==0 {
/if n @PathingFlag==0 {
/if n @FollowFlag==0 {
/if n @RecordPathFlag==0 {
/varset RecordPFName "$arg(1,"@FuncText")"
/varset RecordPathFlag 1
/call ClearLocs
/if n @SilentFlag==0 /echo -[ Started recording path file -( "@RecordPFName" )- ]-
} else {
/if n @SilentFlag==0 /echo -(( You are already recording path file -( @RecordPFName )- ))-
}
} else {
/if n @SilentFlag==0 /echo -(( You cannot start recording while in follow mode! ))-
}
} else {
/if n @SilentFlag==0 /echo -(( You cannot start recording while playing back a path! ))-
}
} else {
/if n @SilentFlag==0 /echo -(( You cannot start recording while paused! ))-
}
/return
| --------------------------------------------------------------------------------
Sub Event_LocalRecord(EvtText)
/if "$mid(6,6,"@EvtText")"=="record" {
/call RecordFunction "$mid(13,$calc($strlen("@EvtText")-13),"@EvtText")"
}
/return
| --------------------------------------------------------------------------------
Sub GotoFunction(TempYCoord,TempXCoord,TempZCoord)
/if ($defined(TempYCoord)==FALSE || $defined(TempYCoord)==FALSE) {
/if n @SilentFlag==0 /echo -(( You must at least provide the Y and X coordinates to run to. ))-
/return
}
/if $defined(TempZCoord)==FALSE {
/declare TempZCoord local
/varset TempZCoord $char(z)
}
/if n @PauseFlag==0 {
/if n @PathingFlag==0 {
/if n @FollowFlag==0 {
/if n @RecordPathFlag==0 {
/call ClearLocs
/varset LocArray(0) "@TempYCoord @TempXCoord @TempZCoord"
/varset LocArray(1) "@TempYCoord @TempXCoord @TempZCoord"
/varset RecordPFName "GotoLoc"
/varset RecordPathFlag 1
/varset CurrLoc 1
/varset NumLocs 2
/call StopFunction
/call PlayFunction "@RecordPFName 1 f nopp noz"
/if n @SilentFlag==0 /echo -[ Running to location:@TempYCoord,@TempXCoord,@TempZCoord ]-
} else {
/if n @SilentFlag==0 /echo -(( You cannot use goto while recording. ))-
}
} else {
/if n @SilentFlag==0 /echo -(( You cannot use goto while in follow mode! ))-
}
} else {
/if n @SilentFlag==0 /echo -(( You cannot use goto while playing back a path! ))-
}
} else {
/if n @SilentFlag==0 /echo -(( You cannot use goto while paused! ))-
}
/return
| --------------------------------------------------------------------------------
Sub Event_LocalGoto(EvtText)
/if "$mid(6,5,"@EvtText")"=="goto " {
/varset EvtText "$mid(11,$calc($strlen("@EvtText")-11),"@EvtText")"
/declare TempYCrd local
/declare TempXCrd local
/declare TempZCrd local
/varset TempYCrd ""
/varset TempXCrd ""
/varset TempZCrd ""
/if "$arg(1,"@EvtText")"!="" /if "$arg(2,"@EvtText")"!="" {
/if n $instr(" ","@EvtText")>0 {
/varset TempYCrd "$mid(0,$instr(" ","@EvtText"),"@EvtText")"
/varset EvtText "$mid($calc($instr(" ","@EvtText")+1),$calc($strlen("@EvtText")-$instr(" ","@EvtText")),"@EvtText")"
}
/if n $instr(" ","@EvtText")>0 {
/varset TempXCrd "$mid(0,$instr(" ","@EvtText"),"@EvtText")"
/varset EvtText "$mid($calc($instr(" ","@EvtText")+1),$calc($strlen("@EvtText")-$instr(" ","@EvtText")),"@EvtText")"
/if n $strlen("@EvtText")>0 {
/varset TempZCrd "$arg(1,"@EvtText")"
} else {
/varset TempZCrd "$char(z)"
}
} else {
/varset TempXCrd "$arg(1,"@EvtText")"
/varset TempZCrd "$char(z)"
}
/call GotoFunction "@TempYCrd" "@TempXCrd" "@TempZCrd"
} else {
/if n @SilentFlag==0 /echo -(( You must at least provide the Y and X coordinates to run to. ))-
}
}
/return
| --------------------------------------------------------------------------------
Sub DistanceFunction(FuncText)
/varset FollowDistance @FuncText
/return
| --------------------------------------------------------------------------------
Sub Event_LocalDistance(EvtText)
/if "$mid(6,8,"@EvtText")"=="distance" {
/call DistanceFunction "$mid(15,$calc($strlen("@EvtText")-15),"@EvtText")"
}
/return
| --------------------------------------------------------------------------------
Sub SilentFunction
/if n @SilentFlag==0 {
/varset SilentFlag 1
/echo -[ Silent Mode ON ]-
} else {
/varset SilentFlag 0
/echo -[ Silent Mode OFF ]-
}
/return
| --------------------------------------------------------------------------------
Sub Event_LocalSilent(EvtText)
/if "$mid(6,6,"@EvtText")"=="silent" {
/call SilentFunction
}
/return
| --------------------------------------------------------------------------------
Sub StopFunction
/declare AdvPathIniFile local
/declare NumOfRecs local
/declare ClearVar local
/declare RecCounter local
/declare RecClrCounter local
/if n @PathingFlag==0 {
/if n @RecordPathFlag==0 {
/if n @FollowFlag==0 {
/if n @PauseFlag==0 {
/if n @SilentFlag==0 /echo -(( There is nothing to be stopped! ))-
} else {
/if n @SilentFlag==0 /echo -[ Pause stopped and cleared! ]-
}
} else {
/varset FollowFlag 0
/call ClearLocs
/call Move 0
/if n @SilentFlag==0 /echo -[ Stopped following -( @FollowName )- ]-
}
} else {
/if n @NumLocs>0 {
/varset RecordPathFlag 0
/if n @SilentFlag==0 /echo -[ Stopped recording path file -( "@RecordPFName" )- ]-
/if n @SilentFlag==0 /echo -[ Saving path file -( "@RecordPFName" )- Stand By... ]-
/varset AdvPathIniFile "PathFile_"
/varcat AdvPathIniFile "@RecordPFName"
/varcat AdvPathIniFile ".ini"
/varset RecClrCounter 0
:ClearRF
/varset ClearVar "$ini("@AdvPathIniFile","PFLocs","$int(@RecClrCounter)")"
/if "@ClearVar"!="NOTFOUND" {
/ini "@AdvPathIniFile" "PFLocs" "$int(@RecClrCounter)" "Empty"
/varadd RecClrCounter 1
/goto :ClearRF
}
/goto :DoneClearRF
:DoneClearRF
/varset RecCounter 0
:CheckClearRF
/if n @RecCounter==@RecClrCounter /goto :DoneCheckClearRF
/varset ClearVar "$ini("@AdvPathIniFile","PFLocs","$int(@RecCounter)")"
/if "@ClearVar"=="Empty" {
/varadd RecCounter 1
/goto :CheckClearRF
}
/goto :CheckClearRF
:DoneCheckClearRF
/for NumOfRecs 0 to $calc(@NumLocs-1)
/ini "@AdvPathIniFile" "PFLocs" "$int(@NumOfRecs)" "@LocArray(@NumOfRecs)"
/next NumOfRecs
/varset RecCounter 0
:CheckRF
/if n @RecCounter==$calc(@NumLocs-2) /goto :DoneCheckRF
/varset ClearVar "$ini("@AdvPathIniFile","PFLocs","$int(@RecCounter)")"
/if "@ClearVar"=="NOTFOUND" /goto :CheckRF
/if "@ClearVar"=="Empty" /goto :CheckRF
/varadd RecCounter 1
/goto :CheckRF
:DoneCheckRF
/if n @SilentFlag==0 /echo -[ Save Completed. There were $int(@NumLocs) records total. ]-
} else {
/varset RecordPathFlag 0
/echo -(( There were no locations to record! ))-
}
}
} else {
/if n @SilentFlag==0 /echo -[ Playback stopped! ]-
/call Move 0
}
/varset PauseHolder NULL
/varset PauseFlag 0
/varset PathingFlag 0
/varset RecordPathFlag 0
/call ClearLocs
/return
| --------------------------------------------------------------------------------
Sub Event_LocalStop(EvtText)
/if "$mid(6,$calc($strlen("@EvtText")-6),"@EvtText")"=="stop" {
/call StopFunction
}
/return
| --------------------------------------------------------------------------------
Sub Event_ZoneEvent
/varset FollowID 0
/if n @FollowFlag==1 {
/varset ZoneTimer 30s
/call ClearLocs
/call Move 0
/delay 3s
/call ClearLocs
/call TargetMob "@FollowName"
}
/if n @PathingFlag==1 {
/call ClearLocs
/call Move 0
/delay 3s
/call ClearLocs
}
/call Move 0
/return
| --------------------------------------------------------------------------------
Sub SubModFunction
/if n @DistanceModifier>0 /varsub DistanceModifier 1
/if n @SilentFlag==0 /echo Distance Modifier:[$int(@DistanceModifier)]
/return
| --------------------------------------------------------------------------------
Sub Event_LocalSubMod(EvtText)
/if "$mid(6,$calc($strlen("@EvtText")-6),"@EvtText")"=="-" {
/call SubModFunction
}
/return
| --------------------------------------------------------------------------------
Sub AddModFunction
/varadd DistanceModifier 1
/if n @SilentFlag==0 /echo Distance Modifier:[$int(@DistanceModifier)]
/return
| --------------------------------------------------------------------------------
Sub Event_LocalAddMod(EvtText)
/if "$mid(6,$calc($strlen("@EvtText")-6),"@EvtText")"=="+" {
/call AddModFunction
}
/return
| --------------------------------------------------------------------------------
Sub InitAPFVars(FaceF,SpeedS,FollowDst)
/declare CurrLoc global
/declare NumLocs global
/declare LocArray array
/declare PathingFlag global
/declare FollowID global
/declare SpeedSense global
/declare UseFaceFast global
/declare MyLastXLoc global
/declare MyLastYLoc global
/declare ObstacleCount global
/declare CurrZone global
/declare LastLoc global
/declare TotalObstCount global
/declare FollowName global
/declare RecordPathFlag global
/declare PauseFlag global
/declare PauseHolder global
/declare PlayCommandQueue array
/declare PlayQueueNum global
/declare PlayQueueCurr global
/declare RecordPFName global
/declare PBPFName global
/declare PBIterations global
/declare Iterations global
/declare PBDirection global
/declare Direction global
/declare GetMoreCommands global
/declare PBPingPong global
/declare PingPongCount global
/declare PBZone global
/declare FollowFlag global
/declare ZoneFollow global
/declare SilentFlag global
/declare DelayTimer timer
/declare ZoneTimer timer
/declare ZoneFlag global
/declare XCoordinate array
/declare YCoordinate array
/declare ZCoordinate array
/declare DistanceModifier global
/declare FollowDistance global
/declare CheckLocTimer timer
/declare PositionTimer timer
/declare StoreHeading global
/declare CurrFollLoc global
/declare DoorMoveTimer timer
/declare ManualRecord global
/varset DoorMoveTimer 0
/varset PositionTimer 0
/varset CheckLocTimer 0
/varset DistanceModifier 0
/varset ZoneFlag 0
/if $defined(FaceF)==FALSE {
/varset UseFaceFast 1
} else {
/varset UseFaceFast @FaceF
}
/if $defined(SpeedS)==FALSE {
/varset SpeedSense 15
} else {
/varset SpeedSense @SpeedS
}
/if $defined(FollowDst)==FALSE {
/varset FollowDistance 20
} else {
/varset FollowDistance @FollowDst
}
/varset SilentFlag 0
/varset ZoneFollow 1
/varset FollowFlag 0
/varset PauseHolder NULL
/varset PauseFlag 0
/varset GetMoreCommands 0
/varset PlayQueueCurr 0
/varset PlayQueueNum 0
/varset PBPFName NULL
/varset RecordPFName NULL
/varset RecordPathFlag 0
/varset CurrLoc 0
/varset NumLocs 0
/varset PathingFlag 0
/varset MyLastXLoc $char(x)
/varset MyLastYLoc $char(y)
/varset ObstacleCount 0
/varset TotalObstCount 0
/echo Advpath.inc by ml2517 -- Initialized.
/return
| --------------------------------------------------------------------------------