Location: Home / Lua Coding / Ch Properties
The table below lists character properties visible from Lua at the time of writing. If your prog needs to access character data not in this list, contact Lasher.
|Aimed||Returns a 'ch' variable for current combat target.|
|Capname||Same as ch.name, but capitalized.|
|Class||Primary class .|
|Clones||Returns number of same type of mob in the room, excluding self. Always 0 for players.|
|Damtype||Character's primary damtype - compare to FOCUS_ variables below.|
|*Desc||Character description - settable on mobs only.|
|*Explored||Number of rooms the character has explored.|
|*ExploredHere||Number of rooms the character has explored in the current area.|
|*Gold||Gold on hand|
|Heshe||He/She/It name for current char.|
|Himher||Him/Her/It name for current char.|
|Hisher||His/Hers/Its name for current char.|
|Hp||Current hit points|
|Maxhp||Max hit points|
|Hppct||Percentage of HP remaining|
|Ingame||Number of same mob in-game|
|Following||Return name of character the target is following|
|Gid||Unique integer ID on each char - used for comparison.|
|Groupsize||Number of other people in player's group in room|
|Gtarget||Same as target, but the previously remembered char does not still have to be in the same room.|
|Ingame||Number of instances of this Mob in the game. Mobs only.|
|ItemsCarried||Number of items the player is carrying.|
|ItemsCapacity||Number of items the player can carry.|
|Key||Mob key of character, blank for a player|
|Keywords||Mob only - returns keywords of the mob. Useful with give etc.|
|Lastroom||Room the character was last in. See the Lua howto page for example use.|
|Leader||Return name of the character's group leader|
|Level||Level of character.|
|*Longname||Description of mob as seen in room - settable on mobs only.|
|Manapct||Percentage of mana remaining|
|Mobkills||Number of mobs the player has killed.|
|Movepct||Percentage of moves remaining|
|*Name||Character Name. (Settable on mobs only)|
|Order||Returns order of current mob in room. Useful when you have multiple mobs of same type and only want a prog to fire once.|
|Owner||Return name of character's owner - only applies to pet|
|Position||Current position of character|
|*Practices||Practices on hand, player only.|
|Questsdone||Number of quests the player has completed.|
|Room||Returns room character is in as a ROOM type variable.|
|Roomkey||Returns key of room character is currently in.|
|Sex||If you're offering, submit applications to webmaster.|
|*Spouse||Name of the player's spouse.|
|Target||Returns mob's target as 'CH' type. See below.|
|Tier||Current tier of character.|
|TimeHere||Number of seconds in the current room.|
|Totlevel||Total level as it would appear in rank 1.|
|*Trains||Training sessions on hand, player only.|
|WeightCarried||Total weight the player is carrying.|
|WeightCapacity||Total weight the player can carry.|
MUD Table Definitions
When using properties such as race, class, subclass and clan, the values returned are numbers. If you happen to know that Troll is race number 11, you could write something like:
if ch.race == 11 then
While this works, it is not very convenient. To help with comparing values in tables, several of the game tables have their contents loaded into Lua for easier comparison. The following are all valid:
if ch.race == RACE_TROLL ...
if ch.class == CLASS_MAGE ...
if ch.subclass == SUBCLASS_ARCHER ...
if ch.clan == CLAN_SHADOKIL ...
if ch.sex == SEX_FEMALE ...
if ch.position == POS_SITTING ...
Lua Object Return Types
Some of the properties on objects will return other objects on the stack rather than string or integer values. Once you have a variable of this type, all of the usual properties are available on it. For example, when 'targ = self.target' returns the mob's target, then all the properties of 'targ' are available using targ.level, targ.int, etc.
Comparing Lua Object Return Types
One other important point for builders to remember is that similar objects in Lua do not compare as equal. For example, if Razor triggers a program (ch) and the mob gets it's target (targ) then wants to see if Razor is already it's target, it cannot simply do if ch == targ. This is because the two variables are two different objects in Lua that just happen to point to the same underlying character in the MUD. Every character in the game has a unique 'gid' value and this is what should be used for comparison.
In the sample Lua code below, the mob checks if it has a target already. If it doesn't, it remembers the character triggering the prog. If it does, it wants to either inform the player that they are its target, or inform the player who the target it. The 'gid' character property is used for the comparison:
targ = self.target
if targ == nil then
say ("I don't have a target")
if (targ.gid == ch.gid) then
say ("Hi! You're my target!")
say ("My target's name is " .. targ.name)
As we get into more advanced Lua programming and store character information for later re-use (in prog timers for example), it is always the 'gid' that will be stored, never a direct pointer to the character themselves which can be become invalid if the target character quits/is killed in the meantime.
Damage Focus Types
These values are used with the ch.damtype property. For example:
say("Your damage type is " ..ch.damtype);
if ch.damtype == FOCUS_FIRE then
say("You are using fire.");
say("You are not using fire.");
if ch.damtype == FOCUS_SLASH or ch.damtype == FOCUS_BASH or ch.damtype == FOCUS_PIERCE then
say("You are using physical damage!");