FANDOM


SetActorAIState
Sets the state of the actor, Like attacking, holding, patroling or following owner
Syntax: SetActorAIState(Actor Handler, State)
0 - Wait in current position, attack any valid targets who come into range
1 - Patrol - walk to destination, then set destination to new waypoint if available
2 - Run - same as Patrol but running instead of walking
3 - Chase and attack target
4 - For actors who are paused at a waypoint while on patrol
5 - Pet mode - actor will follow leader and attack leader's target (actor MUST have a leader to use this)
6 - Pet attack mode - actor is chasing and attacking the leader's target
7 - Pet wait mode - actor waits in current position and does absolutely nothing
BubbleOutput
Makes the npc / player say something.
Syntax: BubbleOutput(Actor Handler, Text as String)
SetActorTarget
Sets an actors target
Syntax: SetActorTarget(Actor Handler, Actor Handler)
DoEvents
Creates a delay, Used for the timing
Syntax: DoEvents(Milisecs as Integer)
SetActorDestination
Sets the actors next destination, The actor will walk to their destination
Syntax: SetActorDestination(Actor Handler, X as Integer, Z as Integer)
Spawn
This one is advanced, It spawns an actor but also has the possibility to create the handler for that actor.
Syntax: Spawn(ActorID, ZoneName, X, Y, Z, [RightClickScript], [DeathScript], [Instance])
Sample:
NPCID = ActorID("Race", "Class")
NPCZ = Spawn(NPCID, "ZoneName", 13, 5, 13)
SetName(NPCZ, "Test NPC")

Those are useful and bare them in mind Ok, I do not know, Or care how you might decide to do the instancing, But the way i do is with the command: 

SQLAccountID(Actor())

And use the int returned from that, but it is optional.


First step is: Make an actor and make a model with absolutely NO faces Then set the model as the actors model.


Second step is Make the zone you wish to be the cutscenes zone. Do NOT spawn ANY waypoints for npcs, As you can not control them like that (Well i dont think so).


Third step is: Create a script with the codes above and any codes like ScreenFlash to make it more realistic. Make it turn the player in to the invisible actor with a combo of SetActor(Actor Handler, ActorID as Actor ID) and ActorID("Race", "Class"). Make it create an instanced zone where you want it to warp them then make it warp them when instanced. I do recommend using a screen flash for about 4 seconds whilst it loads up. Below is my sample cutscene used by nearly pure scripting (It is indeed possible without source edits xD).

Using "RC_Core.rcm"
; AvatarScape
; Date/Time: 21:08:12 on 09/08/2009
; By Fabian on FABIAN-PC

Function Main()
ZoneName = "Zone Name"
Portal = "Portal Name"
ID = ActorID("Invisible", "None")
NPCID = ActorID("Fire Nation", "Soldier")
Watcher = Actor()
CreateZoneInstance(ZoneName, SQLAccountID(Watcher))
OldID = ActorIDFromInstance(Watcher)
ChangeActor(Watcher, ID) ; Makes character invisible
NPC = Spawn(NPCID, ZoneName, 5, 5, 5, Nothing, Nothing, SQLAccountID(Watcher)) ; Spawns the actor
SetName(NPC, "NPC number 1")
OldZone = ActorZone(Watcher)
OldZ = ActorZ(Watcher)
OldY = ActorY(Watcher)
OldX = ActorX(Watcher)
ScreenFlash(Watcher, 0, 0, 255, 255, 3000, 65535)
Warp(Watcher, ZoneName, Portal, SQLAccountID(Watcher)) ; Warps to instanced zone
SetLeader(Watcher, NPC) ; Makes the watcher camera follow the npc
BubbleOutput(NPC, "Hello, This is an example cutscene.")
DoEvents(1500)
BubbleOutput(NPC, "I think i will walk to X: 10 Z: 13")
DoEvents(1500)
SetActorDestination(NPC, 10, 13)
DoEvents(1500)
NPCZ = Spawn(NPCID, ZoneName, 13, 5, 13, Nothing, Nothing, SQLAccountID(Watcher)) ; Spawn NPC 2
SetName(NPCZ, "NPC number 2")
DoEvents(1000)
BubbleOutput(NPCZ, "I feel like attacking somebody just like me")
DoEvents(1500)
SetActorTarget(NPCZ, NPC) ; Makes the second NPC set their target
SetActorAIState(NPCZ, 3) ; Makes the second NPC attack
BubbleOutput(NPC, "Why are you attacking me??")
DoEvents(1500)
BubbleOutput(NPCZ, "I feel like it.....")
DoEvents(20000)
BubbleOutput(NPC, "Thats for all Realm Crafter community members")
BubbleOutput(NPCZ, "Thats for all Realm Crafter community members")
DoEvents(1000)
ScreenFlash(Watcher, 0, 0, 255, 255, 3000, 65535)
SetLeader(Watcher, 0)
Warp(Watcher, ZoneName, Portal)
OldSpeed = Attribute(Watcher, "Speed")
SetAttribute(Watcher, "Speed", 15000)
SetActorDestination(Watcher, OldX, OldZ)
SetAttribute(Watcher, "Speed", OldSpeed)
RemoveZoneInstance(ZoneName, SQLAccountID(Watcher))
End Function

Oh yes, you also want it to warp them directly back to where they were, Check out my script to see how because otherwise they just get warped back to the zone. Oh and use things like 

SetActor
   Hair
   Beard
   Clothes
   Face

to make the npcs the ones you want Also helpful 

KillActor
CreateEmitter
----All quest commands----

Here is an example cutscene. 

Using "RC_Core.rcm"
; AvatarScape
; Date/Time: 21:08:12 on 09/08/2009
; By Fabian on FABIAN-PC

Function Main()
ZoneName = "Cutscene"
Portal = "Start"
ID = ActorID("Invisible", "None")
NPCID = ActorID("Fire Nation", "Soldier")
Watcher = Actor()
CreateZoneInstance(ZoneName, SQLAccountID(Watcher))
OldID = ActorIDFromInstance(Watcher)
ChangeActor(Watcher, ID) ; Makes character invisible
Watcher = Actor()
NPC = Spawn(NPCID, ZoneName, 5, 5, 5, Nothing, Nothing, SQLAccountID(Watcher)) ; Spawns the actor
SetName(NPC, "NPC number 1")
OldZone = ActorZone(Watcher)
OldZ = ActorZ(Watcher)
OldY = ActorY(Watcher)
OldX = ActorX(Watcher)
ScreenFlash(Watcher, 0, 0, 255, 255, 3000, 65535)
Warp(Watcher, ZoneName, Portal, SQLAccountID(Watcher)) ; Warps to instanced zone
SetLeader(Watcher, NPC) ; Makes the watcher camera follow the npc
BubbleOutput(NPC, "Hello, This is an example cutscene.")
DoEvents(1500)
BubbleOutput(NPC, "I think i will walk to X: 10 Z: 13")
DoEvents(1500)
SetActorDestination(NPC, 10, 13)
DoEvents(1500)
NPCZ = Spawn(NPCID, ZoneName, 13, 5, 13, Nothing, Nothing, SQLAccountID(Watcher)) ; Spawn NPC 2
SetName(NPCZ, "NPC number 2")
DoEvents(1000)
BubbleOutput(NPCZ, "I feel like attacking somebody just like me")
DoEvents(1500)
SetActorTarget(NPCZ, NPC) ; Makes the second NPC set their target
SetActorAIState(NPCZ, 3) ; Makes the second NPC attack
BubbleOutput(NPC, "Why are you attacking me??")
DoEvents(1500)
BubbleOutput(NPCZ, "I feel like it.....")
DoEvents(20000)
BubbleOutput(NPC, "Thats for all Realm Crafter community members")
BubbleOutput(NPCZ, "Thats for all Realm Crafter community members")
DoEvents(1000)
ScreenFlash(Watcher, 0, 0, 255, 255, 3000, 65535)
Warp(Watcher, ZoneName, Portal)
OldSpeed = Attribute(Watcher, "Speed")
SetAttribute(Watcher, "Speed", 15000)
SetActorDestination(Watcher, OldX, OldZ)
SetAttribute(Watcher, "Speed", OldSpeed)
RemoveZoneInstance(ZoneName, SQLAccountID(Watcher))
End Function

To stop a enemy from moving for a short time u can use this script: 

Function Main
Player = Actor()
Targer = ContextActor()
TargetSpeed = Attribute(Target, "Speed")
SetAttribute(Target, "Speed", 0)
DoEvent(10000); Delay of 10 Seconds (1000 * # of Seconds Delay)
SetAttribute(Target, "Speed", TargetSpeed)
Return
End Function

(UUICEO helped me with this script a while ago)

if u want to warp the player back to the previous zone at the sme time the actor immobility ends, use it like this: 

Function Main
Player = Actor()
Targer = ContextActor()
TargetSpeed = Attribute(Target, "Speed")
SetAttribute(Target, "Speed", 0)
DoEvent(10000); Delay of 10 Seconds (1000 * # of Seconds Delay)
SetAttribute(Target, "Speed", TargetSpeed)

Spawn(Player, "Zone name", "Portal name")
Return
End Function

Original Post by Avatarscape 4/May/2009