Text formatting options[ | ]
The text formatting option is denoted after the ':' in the variable reference in the text. For instance "{0:Names} kick{0:s} {1} in the head". The formatting options in that string are: Names, s and no formatting option.
All formatting options starting with an uppercase will result in an uppercase string. All examples are written with
- name → you, 'name of character' (same as no formatting option)
- name's → your, Afara's
- s → s, 'nothing'
- he → you, he, she, it
- his → your, his, her or its
- him → you, him, her, it
- was → were, was
- is → are, is
- has → have, has
- does → do, does
- doesn't → don't doesn't
- es → es, 'nothing'
- ies → y, ies
- sir → lady, sir
- himself → yourself, himself, herself, itself
- hisown → your own, his own, her own, its own
Text colors[ | ]
- $Em$ → Normal text. Colored text. Normal text.
- $Damage$ → Normal text. Colored text. Normal text.
- $Heal$ → Normal text. Colored text. Normal text.
- $Poison$ → Same as $Heal$?
- $Fire$ → Normal text. Colored text. Normal text.
Scripting examples[ | ]
Prevent leaving[ | ]
room.RoomEvents[RoomEvent.CreatureLeaving] = function(ev) if ev.Exit.Direction == "small cave" then ev.Canceled = true room:Write('{0:Name} tried to enter a small cave but {0:was} blocked by a magical barrier.', ev.Creature) end end
Scripted object interaction[ | ]
—Find a trapdoor behind the stall when searching section
room.RoomEvents[RoomEvent.CreatureObjectInteraction] = function (ev) if ev.Verb == 'Search' and ev.Object.Name:Contains('section in the back') then—Make sure the search message is not shown ev.Handled = true—Print search message room:Write("{0:Name} search{0:es} a section in the back...", ev.Creature)
-- Open the trapdoor and print mesage room.Exits.down:Open() room:Write("A trapdoor was found under a layer of dust!"); end end
Complete quest objective[ | ]
local littleKid = 'b3cec951-83c0-41df-8209-8f0f9f088826' npc.RoomEvents[RoomEvent.CreatureEntered] = function(ev) if ev.Creature.Id == littleKid then npc.Room:Write("{0:Name} starts crying and hugs {1} intensively", npc, ev.Creature) npc:SayTo(ev.Creature.FollowTarget, "Thank you! My hero!") local leader = ev.Creature.FollowTarget ev.Creature:StopFollowing() leader.Quests['e8037651-5218-45e4-ae2a-6ca663faf758']?.Objectives['974d91fa-779f-4c41-af71-b88140261343']?.Complete() server:ScheduleTask(function() npc.Room:Write("{0:Name} walks home with her kid", npc) npc:Despawn() ev.Creature:Despawn() end, 5000) end end
Transfer creature on room enter[ | ]
—Player Slips or Slips and Falls in the Large Pool!
function HandleCreatureEnteredRoom (ev) local roll = math.random() if roll < 0.2 then room:Write("{0:Name} slip{0:s} but regain{0:s} {0:his} balance quickly!", ev.Creature) elseif roll < 0.5 then room:Write("$Damage${0:Name} slip{0:s} falling into murky pool below!$$", ev.Creature) ev.Creature:Move(server:GetRoom("sewers1.73")) ev.Creature:Paralyze(2000) end end room.CreatureEntered:Add(HandleCreatureEnteredRoom)
Paralyze creature on room enter[ | ]
—Here's one with three possible outcomes:
-- Player Slips, Gets Splashed or Falls In! function HandleCreatureEnteredRoom (ev) local roll = math.random() if roll < 0.3 then room:Write("{0:Name} slip{0:s} but regain{0:s} {0:his} balance quickly!", ev.Creature) elseif roll < 0.3 then room:Write("{0:Name} slip{0:s} and get{0:s} splashed in {0:his} face with nasty water!", ev.Creature) elseif roll < 0.4 then room:Write("{0:Name} slip{0:s} and fall{0:s} into the swirling pool of nasty water!", ev.Creature) -- Pause the player 2 seconds. ev.Creature:Paralyze(2000, { Complete = function() room:Write("{0:Name} pull{0:s} {0:himself} out of the water and onto the bulkhead.", ev.Creature) end }) end end room.CreatureEntered:Add(HandleCreatureEnteredRoom)
Damage creature on enter room[ | ]
—Here's one where the creature takes damage:
-- Creature Enters, May get Splashed by Boiling Water! function HandleCreatureEnteredRoom (ev) if math.random() < 0.5 then if ev.Creature:CanTakeDamage(ForceType.Fire) then damage = 10 room:WriteDamage("{0:Name} slip{0:s}, sliding right under the scalding hot water for {1} damage!", ev.Creature, damage) ev.Creature:TakeDamage(damage, ForceType.Fire) elseif math.random() < 0.9 then room:Write("{0:Name} slip{0:s}, barely avoiding the scalding hot water!", ev.Creature) end end end room.CreatureEntered:Add(HandleCreatureEnteredRoom)
Searching a Room Object to Reveal an Exit[ | ]
—find a hole in the wall
function HandleCreatureObjectInteraction (ev) if ev.Verb == "Search" and ev.Object.Name:Contains('trash') then ev.Handled = true room:Write("{0:Name} search{0:es} the pile of trash...", ev.Creature) ev.Creature:Paralyze(1500, { Complete = function() if ev.Creature:RollSkillBinary(CreatureAttribute.SearchSkill, 3, 0.75) then—Opens the door to the west room.Exits.west:Open() room:Write("A large hole has been found behind the trash in the western wall!"); else local ran = math.random(0, 3) if ran == 0 then room:Write("{0:Name} find{0:s} nothing but manure.", ev.Creature) elseif ran == 1 then room:Write("{0:Name} pull{0:s} out a piece of something disgusting.", ev.Creature) else room:Write("{0:Names} hand get{0:s} bitten by something!", ev.Creature) if ev.Creature:CanTakeDamage() then ev.Creature:TakeDamage(5) end end end end }) end end room.CreatureObjectInteraction:Add(HandleCreatureObjectInteraction)
Creature Searches Object and is Trapped[ | ]
—Search Treasures to Find a Very Rare Item OR Get Trapped!
function LockRoom (ev) if ev.Verb == "Search" and ev.Object.Name:Contains('treasures') then ev.Handled = true room:Write("{0:Name} search{0:es} the many treasures...", ev.Creature) if (not ev.Creature:HasItem('0818e982-cca4-4c61-9162-2b0f48f9e433')) and ev.Creature:RollSkillBinary(CreatureAttribute.SearchSkill, 3, 0.7) then local key = ev.Creature.SpawnItem('0818e982-cca4-4c61-9162-2b0f48f9e433') room:Write('{0:Name} search{0:es} {1} and find{0:s} {2}!', ev.Creature, ev.Object, key) else local ran = math.random(0, 1) if ran == 0 then room:Write("{0:Name} can't decide on what {0:he} want{0:s}...", ev.Creature) else room:Write("{0:Name} grab{0:s} a suspicious golden idol -- **CLiCK**", ev.Creature) -- script waits 2 sec server:ScheduleTask(function() room:Write("A series of clicks and pulleys are heard around the room... IT's A TRAP!", ev.Creature) -- script waits 1 sec server:ScheduleTask(function() room:Write("Suddenly a solid metal slab falls over the hole in the wall and automatically locks with heavy bolts!", evCreature) -- remove or lock the exit east. Player will have to wait for someone to help them or recall. -- This will simulate a death trap. But really, it will force the player to socialize with SOMEONE, or to heed the advice -- (I'll have a warning to keep a scroll of recall with you, to low level players going in.) room.Exits.east:Lock() end, 1000) end, 2000) end end end end room.CreatureObjectInteraction:Add(LockRoom)
Searching a Room Object for a Quest Item[ | ]
—Searching the Dead Body
local lastSearch = server.Now function HandleCreatureObjectInteraction (ev) if ev.Verb == "Search" and ev.Object.Name:Contains('body') then ev.Handled = true room:Write("{0:Name} search{0:es} a dead body...", ev.Creature)
-- NOT IMPLEMENTED: check if player has quest and finished quest: f49b76d5-434f-4d6f-811d-3af8403a9250 if lastSearch:AddSeconds(10) > server.Now then room:Write("{0:Name} can't find anything, as if it's already been picked clean.", ev.Creature)
elseif (not ev.Creature:HasItem('0818e982-cca4-4c61-9162-2b0f48f9e433')) and ev.Creature:RollSkillBinary(CreatureAttribute.SearchSkill, 3, 0.75) then lastSearch = server.Now
local key = ev.Creature:SpawnItem('0818e982-cca4-4c61-9162-2b0f48f9e433') room:Write('{0:Name} search{0:es} {1} and find{0:s} {2}!', ev.Creature, ev.Object, key)
else lastSearch = server.Now
local ran = math.random(0, 3) if ran == 0 then room:Write("{0:Name} STOP{0:s} as the skull falls off, and rolls away!", ev.Creature) elseif ran == 1 then room:Write("{0:Name} pull{0:s} out a hand covered in rancid goo.", ev.Creature) elseif ran == 2 then room:Write("{0:Names} hand get{0:s} bitten by something!", ev.Creature) if ev.Creature:CanTakeDamage() then ev.Creature:TakeDamage(5) end else room:Write("{0:Name} pull{0:s} {0:his} hand back in shock!", ev.Creature) -- small rat room:Spawn("309d0cf8-5963-4db1-9e9e-d86b288cfb1f"):Attack(ev.Creature) end end end end room.CreatureObjectInteraction:Add(HandleCreatureObjectInteraction)
Searching Multiple Room Objects in a Whole Zone[ | ]
—Rat's Nest Zone Script (in room)
room.CreatureObjectInteraction:Add(room.Zone.Share.CreateRatNestHandler(room)) --Zone Script! zone.Share.CreateRatNestHandler = function(room) local lastSearch = server.Now return function(ev) if ev.Verb == "Search" and ev.Object.Name:Contains('rat') then ev.Handled = true room:Write("{0:Name} search{0:es} the trashy rat's nest...", ev.Creature) if lastSearch:AddSeconds(10) > server.Now then room:Write("{0:Name} end{0:s} up empty handed as someone just searched this pile of trash...", ev.Creature) else lastSearch = server.Now local ran = math.random(0, 5) if ran == 0 then room:Write("{0:Name} find{0:s} a wad of slimy gunk.", ev.Creature) elseif ran == 1 then room:Write("{0:Name} pull{0:s} out a holy boot.", ev.Creature) elseif ran == 2 then room:Write("{0:Names} hand get{0:s} bitten by something!", ev.Creature) if ev.Creature:CanTakeDamage() then ev.Creature:TakeDamage(5) end elseif ran == 3 then room:Write("{0:Name} pull{0:s} {0:his} hand back in surprise!", ev.Creature) -- small rat room:Spawn("309d0cf8-5963-4db1-9e9e-d86b288cfb1f"):Attack(ev.Creature) else room:Write("{0:Name} pull{0:s} {0:his} hand back in shock!", ev.Creature) -- mama rat room:Spawn("9e10185a-596d-448c-878e-055898498f46"):Attack(ev.Creature) -- small rats room:Spawn("309d0cf8-5963-4db1-9e9e-d86b288cfb1f"):Attack(ev.Creature) room:Spawn("309d0cf8-5963-4db1-9e9e-d86b288cfb1f"):Attack(ev.Creature) end end end end end
Spawn additional enemies at 50% health[ | ]
local npcSpawnBlocked = false function HandleCreatureHealthChanged(ev) if not npcSpawnBlocked and npc.HealthRatio < 0.5 then npc.Room:Write("{0:Name} yells, 'GUARDS! GUARDS!'", npc) for crea in iter(npc.Room.Creatures) do if crea.IsPlayer then local spawnedCreature = npc.Room:Spawn("gobnest-goblin-guard") npc.Room:Write("{0:Name} comes to rescue his king", spawnedCreature) spawnedCreature:Attack(crea) end end npc.Room:Write("{0:Name} says, 'KILL THEM! BIG PAIN!'", npc) npcSpawnBlocked = true elseif npc.HealthRatio > 0.99 then npcSpawnBlocked = false end end npc.Events[Event.HealthChanged] = HandleCreatureHealthChanged