Modding:Lua/Tables/Npc
The `npc` table is for functions relating directly to the current npc. It is available only in NPC scripts.
Vec2F
npc.toAbsolutePosition(Vec2F
offset)
Returns the specified local position in world space.
String
npc.species()
Returns the species of the npc.
String
npc.gender()
Returns the gender of the npc
Json
npc.humanoidIdentity()
Returns the specific humanoid identity of the npc, containing information such as hair style and idle pose.
String
npc.npcType()
Returns the npc type of the npc.
uint64_t
npc.seed()
Returns the seed used to generate this npc.
float
npc.level()
Returns the level of the npc.
List<String>
npc.dropPools()
Returns the list of treasure pools that will spawn when the npc dies.
void
npc.setDropPools(List<String>
pools)
Sets the list of treasure pools that will spawn when the npc dies.
float
npc.energy()
Returns the current energy of the npc. Same as status.resource("energy")
float
npc.maxEnergy()
Returns the current energy of the npc. Same as status.maxResource("energy")
bool
npc.say(String
line, [Map<String,String>
tags], [Json
config])
Makes the npc say a string. Optionally pass in tags to replace text tags. Optionally give config options for the chat message.
Returns whether the chat message was successfully added.
Available options:
{ drawBorder = true, fontSize = 8, color = {255, 255, 255}, sound = "/sfx/humanoid/avian_chatter_male1.ogg" }
bool
npc.sayPortrait(String
line, String
portrait, [Map<String,String>
tags], [Json
config])
Makes the npc say a line, with a portrait chat bubble. Optionally pass in tags to replace text tags. Optionally give config options for the chat message. Returns whether the chat message was successfully added.
Available options:
{ drawMoreIndicator = true, sound = "/sfx/humanoid/avian_chatter_male1.ogg" }
void
npc.emote(String
emote)
Makes the npc show a facial emote.
void
npc.dance(String
dance)
Sets the current dance for the npc. Dances are defined in .dance files.
void
npc.setInteractive(bool
interactive)
Sets whether the npc should be interactive.
bool
npc.setLounging(EntityId
loungeable, [size_t
anchorIndex])
Sets the npc to lounge in a loungeable. Optionally specify which anchor (seat) to use. Returns whether the npc successfully lounged.
void
npc.resetLounging()
Makes the npc stop lounging.
bool
npc.isLounging()
Returns whether the npc is currently lounging.
Maybe<EntityId>
npc.loungingIn()
Returns the EntityId of the loungeable the NPC is currently lounging in. Returns nil if not lounging.
void
npc.setOfferedQuests(JsonArray
quests)
Sets the list of quests the NPC will offer.
void
npc.setTurnInQuests(JsonArray
quests)
Sets the list of quests the played can turn in at this npc.
bool
npc.setItemSlot(String
slot, ItemDescriptor
item)
Sets the specified item slot to contain the specified item. If item is nil, the slot becomes empty. Returns false if an error occurred, for example, if an invalid slot name was given.
Possible equipment item slots:
- head
- headCosmetic
- chest
- chestCosmetic
- legs
- legsCosmetic
- back
- backCosmetic
- primary
- alt
ItemDescriptor
npc.getItemSlot(String
slot)
Returns the item currently in the specified item slot. If the returned value is nil, the slot is empty.
In addition to the equipment slots recognized by npc.setItemSlot, this function can also recognize and return equipped items for:
- sheathedprimary
- sheathedalt
Note, attempts to use npc.setItemSlot with those two slots will fail. It appears that they can only be set (by C++ code) when the NPC is initialized.
void
npc.disableWornArmor(bool
disable)
Set whether the npc should not gain status effects from the equipped armor. Armor will still be visually equipped.
void
npc.beginPrimaryFire()
Toggles on
firing the item equipped in the primary
item slot.
void
npc.beginAltFire()
Toggles on
firing the item equipped in the alt
item slot.
void
npc.endPrimaryFire()
Toggles off
firing the item equipped in the primary
item slot.
void
npc.endAltFire()
Toggles off
firing the item equipped in the alt
item slot.
void
npc.setShifting(bool
shifting)
Sets whether tools should be used as though shift is held.
void
npc.setDamageOnTouch(bool
enabled)
Sets whether damage on touch should be enabled.
Vec2F
npc.aimPosition()
Returns the current aim position in world space.
void
npc.setAimPosition(Vec2F
position)
Sets the aim position in world space.
void
npc.setDeathParticleBurst(String
emitter)
Sets a particle emitter to burst when the npc dies.
void
npc.setStatusText(String
status)
Sets the text to appear above the npc when it first appears on screen.
void
npc.setDisplayNametag(bool
display)
Sets whether the nametag should be displayed above the NPC.
void
npc.setPersistent(bool
persistent)
Sets whether this npc should persist after being unloaded.
void
npc.setKeepAlive(bool
keepAlive)
Sets whether to keep this npc alive. If true, the npc will never be unloaded as long as the world is loaded.
void
npc.setDamageTeam(Json
damageTeam)
Sets a damage team for the npc in the format: {type = "enemy", team = 2}
void
npc.setAggressive(bool
aggressive)
Sets whether the npc should be flagged as aggressive.
void
npc.setUniqueId(String
uniqueId)
Sets a unique ID for this npc that can be used to access it. A unique ID has to be unique for the world the npc is on, but not universally unique.
Portal - Basics - JSON - Lua - Assets - Guides
Tables - Hooks - Tips & Tricks - Libraries - All Pages