<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://avendar.net/index.php?action=history&amp;feed=atom&amp;title=Avendar%3AProg_Section_7</id>
	<title>Avendar:Prog Section 7 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://avendar.net/index.php?action=history&amp;feed=atom&amp;title=Avendar%3AProg_Section_7"/>
	<link rel="alternate" type="text/html" href="https://avendar.net/index.php?title=Avendar:Prog_Section_7&amp;action=history"/>
	<updated>2026-05-21T04:24:50Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.4</generator>
	<entry>
		<id>https://avendar.net/index.php?title=Avendar:Prog_Section_7&amp;diff=2666&amp;oldid=prev</id>
		<title>Aeoleri: Created page with &quot;=If Checks= &lt;i&gt;Imagine all the things that had to occur, not only in his life, but in&lt;/i&gt; &lt;i&gt;everybody else&#039;s, to arrange it so on that particular night, the Big Bopper&lt;/i&gt; &lt;i&gt;would be in a  position to live or die depending on a flipping coin. I&lt;/i&gt; &lt;i&gt;became so obsessed with that idea that I gradually became capable of seeing&lt;/i&gt; &lt;i&gt;the specifics of everybody&#039;s death.&quot;&lt;/i&gt; -- Clyde Bruckman, The X-files: Clyde Bruckman&#039;s Final Repose   &#039;&#039;&#039;not&#039;&#039;&#039; : All if checks may tak...&quot;</title>
		<link rel="alternate" type="text/html" href="https://avendar.net/index.php?title=Avendar:Prog_Section_7&amp;diff=2666&amp;oldid=prev"/>
		<updated>2025-01-19T03:06:21Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;=If Checks= &amp;lt;i&amp;gt;Imagine all the things that had to occur, not only in his life, but in&amp;lt;/i&amp;gt; &amp;lt;i&amp;gt;everybody else&amp;#039;s, to arrange it so on that particular night, the Big Bopper&amp;lt;/i&amp;gt; &amp;lt;i&amp;gt;would be in a  position to live or die depending on a flipping coin. I&amp;lt;/i&amp;gt; &amp;lt;i&amp;gt;became so obsessed with that idea that I gradually became capable of seeing&amp;lt;/i&amp;gt; &amp;lt;i&amp;gt;the specifics of everybody&amp;#039;s death.&amp;quot;&amp;lt;/i&amp;gt; -- Clyde Bruckman, The X-files: Clyde Bruckman&amp;#039;s Final Repose   &amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; : All if checks may tak...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=If Checks=&lt;br /&gt;
&amp;lt;i&amp;gt;Imagine all the things that had to occur, not only in his life, but in&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;everybody else&amp;#039;s, to arrange it so on that particular night, the Big Bopper&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;would be in a  position to live or die depending on a flipping coin. I&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;became so obsessed with that idea that I gradually became capable of seeing&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;the specifics of everybody&amp;#039;s death.&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
-- Clyde Bruckman, The X-files: Clyde Bruckman&amp;#039;s Final Repose &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: All if checks may take an optional &amp;#039;not&amp;#039; operator to invert their logic&lt;br /&gt;
: Example: if not ispc(var)&lt;br /&gt;
&lt;br /&gt;
==CHARACTER ATTRIBUTE CHECKS==&lt;br /&gt;
: If you&amp;#039;re trying to find out something about an actor in your prog, from their &lt;br /&gt;
: sex to the size of their wallet, this is the place to look. Pretty much every &lt;br /&gt;
: check that looks at an actor should be in here. &lt;br /&gt;
&lt;br /&gt;
===Basic PC Attributes (i.e. stats)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if ispc(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the target is a PC, false if not.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isnpc(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the target is a NPC, false if not.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if name(var) == Name&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Does a straight comparison check between the name field value of the var and&lt;br /&gt;
:  the provided name. Returns true if they&amp;#039;re equal, and false if not. Other &lt;br /&gt;
:  string operators can be used, such a /, which will cause the check to return true&lt;br /&gt;
:  if the &amp;quot;Name&amp;quot; specified is a substring of the name field.&lt;br /&gt;
:  &amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; As of March 2014 you can now use this with vars on the right-hand-side, just like valname.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if valname(var) == var2&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the name field value of the var is the same as the name value &lt;br /&gt;
:  of var2. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if ismale(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isfemale(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isneuter(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var is of the specified gender, and false if not.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if sex(var) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var is of the sex associated with the #, and false if not. &lt;br /&gt;
:  Different numeric operators may also be used.&lt;br /&gt;
:  Numbers corresponding to sexes:&lt;br /&gt;
:    Sexless: 0&lt;br /&gt;
:    Male: 1&lt;br /&gt;
:    Female: 2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if strength(var) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if dexterity(var) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if intelligence(var) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if constitution(var) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if wisdom(var) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if charisma(var) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var&amp;#039;s stat is equal to the #, false otherwise. Other numeric&lt;br /&gt;
:  operators can be substituted in at will.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if majorsphere(var) == [#][name]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if minorsphere(var) == [#][name]&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Can supply either a sphere number or a sphere name, such as &amp;#039;spirit&amp;#039;&lt;br /&gt;
:  Returns true if the var&amp;#039;s major or minor sphere matches the argument.&lt;br /&gt;
:  Other numeric operators will also technically work, even if a name is supplied,&lt;br /&gt;
:  but this is probably indicative of a hacky prog.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;if chosenpath(var) == [#][name]&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Can supply either a path number or a path name, such as &amp;#039;raging inferno&amp;#039; or &amp;#039;none&amp;#039;&lt;br /&gt;
:  Returns true if the var&amp;#039;s chosen path matches the argument&lt;br /&gt;
:  Other numeric operators will also technically work, even if a name is supplied,&lt;br /&gt;
:  but this is probably indicative of a hacky prog.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;if auragrade(var) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var&amp;#039;s aura grade matches the given criteria.&lt;br /&gt;
:  Silver aura                -4&lt;br /&gt;
:  Bright gold aura           -3&lt;br /&gt;
:  Gold aura                  -2&lt;br /&gt;
:  Pale gold aura             -1&lt;br /&gt;
:  No aura                     0&lt;br /&gt;
:  Faint red aura              1&lt;br /&gt;
:  Red aura                    2&lt;br /&gt;
:  Dark red aura               3&lt;br /&gt;
:  Black aura                  4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if luck(var) == {lucky|normal|unlucky} [vs var]&amp;lt;/b&amp;gt;&lt;br /&gt;
: Performs an in-game luck check for the specified var, and tests whether the result came back lucky, normal, or unlucky. You may also use other operators, but in practice only == or != make sense.&lt;br /&gt;
: The result type (e.g., &amp;#039;lucky&amp;#039;) is just spelled out normally.&lt;br /&gt;
: May optionally make an opposed luck check by adding &amp;#039;vs&amp;#039; plus a var after the normal check. This follows the normal opposed luck check rules.&lt;br /&gt;
: Example 1: if luck($n) == unlucky&lt;br /&gt;
: Example 2: if luck($i) == lucky vs $n&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; if savesX(var) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Performs an in-game saves check, just like any spell. &amp;quot;X&amp;quot; is the type of effect, from the list below. # is :  the level of the effect being saved against.&lt;br /&gt;
:  Returns true if var makes their save, false if they don&amp;#039;t&lt;br /&gt;
:  [[DAM_NONE]]                0&lt;br /&gt;
:  [[DAM_BASH]]                1&lt;br /&gt;
:  [[DAM_PIERCE]]              2&lt;br /&gt;
:  [[DAM_SLASH]]               3&lt;br /&gt;
:  [[DAM_FIRE]]                4&lt;br /&gt;
:  [[DAM_COLD]]                5&lt;br /&gt;
:  [[DAM_LIGHTNING]]           6&lt;br /&gt;
:  [[DAM_ACID]]                7&lt;br /&gt;
:  [[DAM_POISON]]              8&lt;br /&gt;
:  [[DAM_NEGATIVE]]            9&lt;br /&gt;
:  [[DAM_HOLY]]                10&lt;br /&gt;
:  [[DAM_ENERGY]]              11&lt;br /&gt;
:  [[DAM_MENTAL]]              12&lt;br /&gt;
:  [[DAM_DISEASE]]             13&lt;br /&gt;
:  [[DAM_DROWNING]]            14&lt;br /&gt;
:  [[DAM_LIGHT]]               15&lt;br /&gt;
:  [[DAM_OTHER]]               16&lt;br /&gt;
:  [[DAM_FEAR]]                17&lt;br /&gt;
:  [[DAM_CHARM]]               18&lt;br /&gt;
:  [[DAM_SOUND]]               19&lt;br /&gt;
:  [[DAM_ILLUSION]]            20&lt;br /&gt;
:  [[DAM_DEFILEMENT]]          21&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isgood(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isneutral(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isevil(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var&amp;#039;s alignment is of the specified type, and false if not.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if islawful(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isbalanced(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if ischaotic(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var&amp;#039;s ethos is of the specified type, and false if not. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if size(var) == # or size&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var&amp;#039;s is the specified size. The right hand argument can&lt;br /&gt;
:  be either a word or a number. The word (tiny, small, medium, large, huge, giant)&lt;br /&gt;
:  will be translated into a number, so all numeric operators can be substituted at &lt;br /&gt;
:  will.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if israce(var) == Race&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var is of the specified race, and false if not. Race names &lt;br /&gt;
:  should not be abbrieviated.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if class(var) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var is of the class which is associated with the number. Other &lt;br /&gt;
:  numeric operators can also be used. Class Numbers: &lt;br /&gt;
:    Water scholar: 0&lt;br /&gt;
:    Earth scholar: 1&lt;br /&gt;
:    Void scholar: 2&lt;br /&gt;
:    Spirit scholar: 3&lt;br /&gt;
:    Air scholar: 4&lt;br /&gt;
:    Fire scholar: 5&lt;br /&gt;
:    Water templar: 6&lt;br /&gt;
:    Earth templar: 7&lt;br /&gt;
:    Void Templar: 8&lt;br /&gt;
:    Spirit templar: 9 &lt;br /&gt;
:    Air templar: 10&lt;br /&gt;
:    Fire templar: 11&lt;br /&gt;
:    Thief: 12&lt;br /&gt;
:    Watcher: 13&lt;br /&gt;
:    Assassin: 14&lt;br /&gt;
:    Bandit: 15&lt;br /&gt;
:    Fighter: 18&lt;br /&gt;
:    Swordmaster: 19&lt;br /&gt;
:    Barbarian: 20&lt;br /&gt;
:    Gladiator: 21 &lt;br /&gt;
:    Ranger: 23&lt;br /&gt;
:    Gleeman: 24&lt;br /&gt;
:    Bard: 25&lt;br /&gt;
:    Alchemist: 27&lt;br /&gt;
:    Psionicist: 28&lt;br /&gt;
:    Druid: 29 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if level(var) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var&amp;#039;s trust level is equal to the provided number, and &lt;br /&gt;
:  false if not. The difference between level and trust is only significant if &lt;br /&gt;
:  you have plans to prog in ways to murder other immortals, though. Other &lt;br /&gt;
:  numeric operators can also be used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isimmort(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var has their trust level set beyond 51, and false if not.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if hitprcnt(var) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var&amp;#039;s hit percentage (Current hit points[[/Max]] hit points, &lt;br /&gt;
:  all * 100) is equal to the specified #. Other numeric operators can be substituted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if adrenaline(var) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if a character&amp;#039;s adrenaline is equal to the specifed #, and false &lt;br /&gt;
:  if not. Other numeric operators can be substituted in. Automatically returns false&lt;br /&gt;
:  if the var is an NPC. Just for reference, a character&amp;#039;s adrenaline is set to 20 &lt;br /&gt;
:  after attacking a PC, and 2 after attacking a mob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if position(var) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var is in the position associated with the provided #, and &lt;br /&gt;
:  false if not. Different numeric operators may also be used.  Position numbers: &lt;br /&gt;
:    Dead: 0&lt;br /&gt;
:    Mortal: 1&lt;br /&gt;
:    Incapacitated: 2&lt;br /&gt;
:    Stunned: 3&lt;br /&gt;
:    Sleeping: 4&lt;br /&gt;
:    Resting: 5&lt;br /&gt;
:    Sitting: 6&lt;br /&gt;
:    Fighting: 7&lt;br /&gt;
:    Standing: 8 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if goldamt(var) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var has the specified amount of gold. Other numeric operators&lt;br /&gt;
:  can also be used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if skill[vnum of skill](var) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  This check returns true if the var&amp;#039;s skill level is equal to the specified number,&lt;br /&gt;
:  and false otherwise. For example, if skill192($n) == 100 would return true if $n &lt;br /&gt;
:  had 100% in hide (which has a vnum of 192).  See [[Skill/Spell vnums]] for the vnums available, or &lt;br /&gt;
:  use the &amp;lt;i&amp;gt;vnum&amp;lt;/i&amp;gt; command to look up the desired skill.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isundead(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var is considered undead.&lt;br /&gt;
:    Sample Usage:&lt;br /&gt;
::    if not isundead($n)&lt;br /&gt;
:::        mprangekill $n&lt;br /&gt;
::    endif&lt;br /&gt;
:  This would cause the thing containing the prog to attack something that is not undead, paying respect to PK range.&lt;br /&gt;
&lt;br /&gt;
== Task Checks ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if hastask(var) == value&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the mob who has this prog has a task hub, var has a task from that mob, and value is the index of the specified prog.  For example, if you wanted to check $n for if they have task slot 1 active, you would use the syntax &amp;quot;if hastask($n) == 1&amp;quot;.  this check will fail if it is originating from anything other than the origin mob.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if hascooldown(var) == value&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if &amp;lt;i&amp;gt;var&amp;lt;/i&amp;gt; has an active cooldown for task &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; from the originating mob.  The syntax and functionality works the same as hastask() above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if hascompleted(var) == value&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if &amp;lt;i&amp;gt;var&amp;lt;/i&amp;gt; has an entry for task &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; from the originating mob.  The syntax and functionality works the same as hastask() above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if task&amp;lt;mob&amp;gt;(var) == value&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if &amp;lt;i&amp;gt;var&amp;lt;/i&amp;gt; has an active task for origin &amp;lt;i&amp;gt;mob&amp;lt;/i&amp;gt; of slot &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;.  Unlike the other checks, this can be used in any type of prog.  See &amp;lt;i&amp;gt;if skill&amp;lt;/i&amp;gt; for more details.&lt;br /&gt;
&lt;br /&gt;
==Affect/Status Checks==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if shopopen() == 1&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the shop is open, false if not. Note that this can have some strange results if a shop is open past midnight; in those cases you should be using if istime() and check it that way.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isbitset(var) == Bit #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var&amp;#039;s bit # is true, and false if not. Should be confined to&lt;br /&gt;
:  PC&amp;#039;s.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if iscriminal(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var is a criminal, and false if not. Should be confined to &lt;br /&gt;
:  PC&amp;#039;s, for obvious reasons.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if inhouse(var) == House&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var is in the specified house. House names should be singular,&lt;br /&gt;
:  and unabbrieviated.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isinhouse(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var is marked as being of the same house as the room he is in&lt;br /&gt;
: (i.e. a Raider standing in the Raider Canyon).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if snaffected(var) == vnum of spell affect&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var is affected by the affect, specified by the given vnum. The&lt;br /&gt;
:  vnum should be greater than 0. To use this check with an object, simply leave the &lt;br /&gt;
:  var field blank.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if roomaffected(var) == skill_vnum&amp;lt;/b&amp;gt;&lt;br /&gt;
: Returns true if the room the variable is in is affected by a given vnum. Long thought not to exist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isaffected(var) == Bit number of the affect&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var is affected by the affect, specified by the bit number. &lt;br /&gt;
:  Genuinely scorned since the advent of the much simpler snaffected, this could still&lt;br /&gt;
:  be useful if you want to target multiple affects that all use the same bit, like &lt;br /&gt;
:  flight and its variants.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isghost(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var is a ghost, and false if not. Should probably be used on any&lt;br /&gt;
:  progs which would ordinarily do brutal things to a person.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isastral(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var is affected by astral projection, and false if not.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isflying(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var is flying. This includes all forms of flight, including &lt;br /&gt;
:  levitation, mass flight, etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if hasboat(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if var has an item of type boat in their inventory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if iswizi(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var is wizi, false if not.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isindoors(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the room the var is in is flagged with the &amp;quot;indoors&amp;quot; flag, and false&lt;br /&gt;
:  if not. Keep in mind that as of this moment, this check only works for the room flag&lt;br /&gt;
:  &amp;quot;indoors.&amp;quot; It does not check for the room&amp;#039;s sector, so it will still return false even&lt;br /&gt;
:  if the sector is &amp;quot;inside.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isfight(var) == name&amp;lt;/b&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;if isfighting(var) == name&amp;lt;/b&amp;gt;&lt;br /&gt;
:  The same code with two different names, these return true if the var is fighting the &lt;br /&gt;
:  mob or PC with the specified name, and false if not. The != operator can also be used &lt;br /&gt;
:  with this check. If used without a name and operator, then the check will simply check&lt;br /&gt;
:  whether or not the var is fighting at all.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if tanking(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var is tanking something, and false if not. Common sense dictates&lt;br /&gt;
:  that this should be restricted to situations where the var is fighting.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if istracking(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Only to be called from a mob, this returns true if the mob is tracking the var, and &lt;br /&gt;
:  false if not.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if istrack(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var (which should probably be referencing a mob) is tracking, and&lt;br /&gt;
:  false if not.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if ischarmed(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var is affected by any form of charm, and false if not. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if ismaster(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  To be called only from a mob, this returns true if the var is the mob&amp;#039;s master, and &lt;br /&gt;
:  false if not.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isfollow(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if both a) var is following a person A, and b) var is in the same room&lt;br /&gt;
:  as person A.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isgroup(var) &amp;amp; var2&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if var and var2 are grouped, false if not.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isrange(var) == var2&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if var is in var2&amp;#039;s PK range, and false otherwise.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if cansee(var) == var2&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if var can see var2, and false if not.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if hastrait([var]) == &amp;lt;traitname&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:  This if check returns true if the is a PC and has the trait specified by traitname.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if lagged(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  If lagged returns true if a pc currently has a wait state of greater than zero. In &lt;br /&gt;
:  general, this is true if the pc is currently bashed, busy casting a spell, or mplagged.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if hassymbol(var) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  This if check is used to see if the target has a particular void scholar symbol. Here,&lt;br /&gt;
:  the argument is the last two digits of the symbolâ€™s vnum.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if language(var) == &amp;lt;language&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:  This if check returns true if the target variable is speaking the given language. Here &lt;br /&gt;
:  language is just one of the selected race names, with the exception of the châ€™taren, &lt;br /&gt;
:  who are denoted by &amp;quot;chtaren&amp;quot; (to spare the difficulty of parsing single quotes).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isanimal(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  This if check returns true if the target is [[ACT_ANIMAL]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if haspath(npc)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  If haspath returns true if the target npc has a recorded path, as generated by the&lt;br /&gt;
:  mppath command.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isfriend(&amp;lt;target&amp;gt;) [== faction number]&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;if isenemy(&amp;lt;target&amp;gt;) [== faction number]&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the target is a friend (for isfriend) or enemy (for isenemy)&lt;br /&gt;
:  of the given faction.  If the faction number is ommited, it uses the faction&lt;br /&gt;
:  of the mob performing the check.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if acctpoints(var) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the target has that many account points.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;B&amp;gt;if isplaying(var) == song_skill_vnum &amp;lt;br&amp;gt;&lt;br /&gt;
if isharmonizing(var) == song_skill_vnum&amp;lt;/B&amp;gt;&lt;br /&gt;
: Returns true if the target is playing (for isplaying) or is harmonizing (for isharmonizing) the given song.&lt;br /&gt;
: Note for older area builders: mobs &amp;lt;i&amp;gt;are&amp;lt;/i&amp;gt; now able to play songs.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
: Working example: [ 7085] Ilasa Eideo&lt;br /&gt;
&lt;br /&gt;
==Memory Checks==&lt;br /&gt;
: This section is fairly self-explanatory. If you&amp;#039;ve got to check up the slots on anything,&lt;br /&gt;
: be it bits, focuses, or mpvalues, this is the if-check section for you. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isbitset(var) == Bit #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var&amp;#039;s bit # is true, and false if not. Should be confined to PC&amp;#039;s.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if mobvcheck(var) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Used in conjunction with mob memory, this check returns true if the value the mob &lt;br /&gt;
:  associates with the var is equal to the #. Of course, other numeric operators may be&lt;br /&gt;
:  used. Keep in mind that unlike bits, mob memory is stored on the mob itself, so if it&lt;br /&gt;
:  dies, all such memory will be cleared.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if value(value slot) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if mobvalue(mob slot) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if objvalue(obj slot) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if roomvalue(room slot) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:  Returns true if the # is equal to the value held by the slot. Slots number from&lt;br /&gt;
:  0 to 9, and can be set with the mpvalue commands. Other numeric operators can be &lt;br /&gt;
:  substituted.  NOTE: the newer &amp;quot;if value&amp;quot; works on rooms, mobs, or objects, and is &lt;br /&gt;
:  generally preferred over the older checks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if value(local variable) == string&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: Value also works to check local variables. Example:&lt;br /&gt;
 mpvalueset feeling happy&lt;br /&gt;
 if value(feeling) == happy&lt;br /&gt;
   smile&lt;br /&gt;
 else&lt;br /&gt;
   frown&lt;br /&gt;
 endif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;b&amp;gt;if remembers(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  This checks whether or not a player has been stored within a mob&amp;#039;s memory, via &lt;br /&gt;
:  the mpremember command.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isfocused(var) [== &amp;lt;0|1&amp;gt;]&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var is focused on something, and false if not. In the case of&lt;br /&gt;
:  objects and rooms, just leave the var field blank. &lt;br /&gt;
:  The optional numerical argument indicates which slot to check; if left blank, slot 0 is checked&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if newbie(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var is flagged newbie and is a PC. Returns false otherwise.&lt;br /&gt;
:  Var must have answered yes to &amp;quot;Are you new to Avendar?&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Environmental Checks==&lt;br /&gt;
: This section deals primarily with if checks that describe the area surrounding the &lt;br /&gt;
: actor, otherwise known as the environment. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isanypcarea()&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if there are any PC&amp;#039;s in the area, and false if not.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isanypchere(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if there are any PC&amp;#039;s in the room that the prog is called from, and&lt;br /&gt;
:  false if not.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isanynpchere(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if there are any NPC&amp;#039;s in the room that the prog is called from, and&lt;br /&gt;
:  false if not.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isanyobjere(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if there are any objects in the room that the prog is called from, and&lt;br /&gt;
:  false if not.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if objhere(vnum of object)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Checks whether or not the object of the specified vnum is in the same room as the &lt;br /&gt;
:  calling mob/object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if mobhere(vnum of mob)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the calling mob/object is in the same room as the specified mob, and &lt;br /&gt;
:  false if not.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if ishere(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  This check returns true if the calling mob/object is in the same room as the var, and&lt;br /&gt;
:  false if not.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if inroom(var) == vnum of room&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var or calling object is in the room specified by the vnum. Other &lt;br /&gt;
:  numeric operators can be substituted in. If called from an object, leave the var field&lt;br /&gt;
:  blank. The if check will return whether or not the calling object is in the specified room.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if inarea(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var is in the same area as the calling mob/object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isopen(var) == # or Direction&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if there are no closed doors to the var&amp;#039;s specified direction, and false &lt;br /&gt;
:  if not. &lt;br /&gt;
: &lt;br /&gt;
:  NEW AS OF SPRING 2014: Will also return false if there is no exit in the direction.&lt;br /&gt;
: &lt;br /&gt;
:  If this check is called by an object, then leave the var field blank. Note that&lt;br /&gt;
:  the way this is phrased means that the path just has to be open, there does not have to&lt;br /&gt;
:  be an actual door in the way. var can also be an object. List of numbers that correspond&lt;br /&gt;
:  to directions:&lt;br /&gt;
:    North 0&lt;br /&gt;
:    East 1&lt;br /&gt;
:    South 2&lt;br /&gt;
:    West 3&lt;br /&gt;
:    Up 4&lt;br /&gt;
:    Down 5 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isseason() == # or season&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the current season is the same as the one specified. Names will be &lt;br /&gt;
:  converted automatically into their numeric equivalents, so you can feel free to use an &lt;br /&gt;
:  operator other than ==. List of numbers that correspond to the seasons: &lt;br /&gt;
:    spring 0&lt;br /&gt;
:    summer 1&lt;br /&gt;
:    autumn 2&lt;br /&gt;
:    winter 3 &lt;br /&gt;
&lt;br /&gt;
:  NOTE: # doesn&amp;#039;t seem to work, but the season name does. -Dov 8/28/13&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isphase() == #&amp;lt;/b&amp;gt;      &amp;lt;b&amp;gt;if rhosphase() == #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  isphase for lunus due to poor planning, rhosphase for rhos. Returns true if that moon&amp;#039;s&lt;br /&gt;
:  current phase is equivalent to the specified number. Note that there is no text &lt;br /&gt;
:  conversion, so you&amp;#039;ll have to plot this out yourself. Since it&amp;#039;s working with numbers,&lt;br /&gt;
:  other numerical operators should be accepted without difficulty. List of numbers&lt;br /&gt;
:  corresponding to the phases of the moon: &lt;br /&gt;
:    Waning gibbous in the sky 0&lt;br /&gt;
:    Waning in the sky 1&lt;br /&gt;
:    Waning crescent in the sky 2&lt;br /&gt;
:    Currently new 3 &lt;br /&gt;
:    Waxing crescent in the sky 4&lt;br /&gt;
:    Waxing in the sky 5&lt;br /&gt;
:    Waxing gibbous in the sky 6&lt;br /&gt;
:    Currently full 7 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if rhossize() == #&amp;lt;/b&amp;gt;&lt;br /&gt;
:    Tiny 0&lt;br /&gt;
:    Small 1&lt;br /&gt;
:    Medium 2&lt;br /&gt;
:    Large 3&lt;br /&gt;
:    Huge 4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if islight()&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the sun is currently up. The actual hours vary from season to season.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isday() == #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if # is equal to the day of the month. Other numeric operators can be&lt;br /&gt;
:  substituted in. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isdayofweek() == #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  0 - Lyrensday&lt;br /&gt;
:  1 - Iolenday&lt;br /&gt;
:  2 - Thelansday&lt;br /&gt;
:  3 - Endenday&lt;br /&gt;
:  4 - Nimensday&lt;br /&gt;
:  5 - Thethelsday&lt;br /&gt;
:  6 - Evenday&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if istime() == # &amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if # is equal to the current hour, numbering from 0 to 23. Other numeric&lt;br /&gt;
:  operators can be substituted in.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if roomflag(var) == &amp;lt;room flag name&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:  This if check returns true if the room has the flag specified. Valid room flags include:&lt;br /&gt;
:  dark, nogate, no_mob, indoors, nosum_to, nosum_from, noneforyou, vault, noyell, private,&lt;br /&gt;
:  safe, solitary, pet_shop, no_recall, imp_only, gods_only, heroes_only, newbies_only, law,&lt;br /&gt;
:  nowhere, nomagic, guild, noweather, uberdark, power_nexus, rough, has_water&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;if sector(var) == &amp;lt;sector name&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:  This if check returns true if the target is located in the sector with the specified name.&lt;br /&gt;
:  Valid sectors include: &lt;br /&gt;
:  inside, city, field, forest, hills, mountain, swim, noswim, air, desert, underwater, &lt;br /&gt;
:  underground, road, swamp.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if precip(var) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  -1 : Invalid; underground, or in a NOWEATHER room&lt;br /&gt;
:   0 : No precipitation&lt;br /&gt;
:   1 : Light rain/snow&lt;br /&gt;
:   2 : Rain/snow&lt;br /&gt;
:   3 : Heavy rain/snow, or the magical affect icestorm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if cloudcover(var) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  # = % of the sky that is covered with clouds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if month() == &amp;lt;month number&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
: Checks the month. Hopefully it takes other operators!&lt;br /&gt;
&lt;br /&gt;
==Item related==&lt;br /&gt;
: The following if-checks are used to describe items, or their relation to the actor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if objtargetcarry()&amp;lt;/b&amp;gt;&lt;br /&gt;
:  This check returns true when the object with the verb_prog is both in the character&amp;#039;s&lt;br /&gt;
:  inventory and is also the object (or target) of the command. This is&lt;br /&gt;
:  helpful (or essential!) in situations with multiple objects having the same verb_progs.&lt;br /&gt;
:  Example:&lt;br /&gt;
:  This check returns true for &amp;quot;eat apple&amp;quot; from a &amp;lt;b&amp;gt;verb_prog eat&amp;lt;/b&amp;gt;, only if the obj&lt;br /&gt;
:  with the verb_prog is carried and also has &amp;quot;apple&amp;quot; in its name (ie, is the target).&lt;br /&gt;
:  This distinguishes the item from other, non-progged apples that might be in the &lt;br /&gt;
:  inventory, and also from other &amp;lt;b&amp;gt;verb_prog eat&amp;lt;/b&amp;gt;-bearing items that are not &lt;br /&gt;
:  apples (such as pears).&lt;br /&gt;
:  See obj 22458 for the canonical example. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if objtargetwear()&amp;lt;/b&amp;gt;&lt;br /&gt;
:  As with objtargetcarry(), but the object targetted must be worn/wielded/held and &lt;br /&gt;
:  not just in the inventory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isharvested()&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Much like objtargetwear(), this has no target and is used on an object prog.  If the&lt;br /&gt;
:  object in question is a node, this check will determine if that node has been harvested&lt;br /&gt;
:  recently by the character who triggered the prog.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if incontainer(vnum)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if object is inside the container with prog. If vnum is omitted, returns &lt;br /&gt;
:  true if container contains anything if vnum is omitted. Obviously, to be used with &lt;br /&gt;
:  progs on containers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isoverlimit(vnum of object)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Used to check an item&amp;#039;s limits for various item loading progs. Returns true if the &lt;br /&gt;
:  current number of the item is greater than the item limit.&lt;br /&gt;
&lt;br /&gt;
  [ 34] Transmitt: Limit bugs on your progs.&lt;br /&gt;
  Fri Nov 11 08:02:42 2005&lt;br /&gt;
  To: immortal&lt;br /&gt;
  The overlimit bugs on your progs:&lt;br /&gt;
&lt;br /&gt;
  If isoverlimit(obj_vnum) returns false if there is no limit on the object or&lt;br /&gt;
  the current number of objects in circulation is less than or equal to the&lt;br /&gt;
  limit of the object.  What this means: if the limit of the object is 5, it&lt;br /&gt;
  will return false if there are 5 of the object in circulation.  If you&amp;#039;re&lt;br /&gt;
  using this to do nothing if it returns true, and otherwise load the object,&lt;br /&gt;
  you will end up with one more item than the limit in circulation.  &lt;br /&gt;
&lt;br /&gt;
  The solution is to use if isunderlimit(obj_vnum).  This returns true if the&lt;br /&gt;
  number of items currently in circulation is less than the limit of the item.&lt;br /&gt;
  Otherwise it return false.  So replace your overlimit checks with underlimit&lt;br /&gt;
  checks on mobs like Mindilast and the peddler.  &lt;br /&gt;
&lt;br /&gt;
  For example:&lt;br /&gt;
  Instead of:&lt;br /&gt;
  if isoverlimit(obj_vnum)&lt;br /&gt;
  else&lt;br /&gt;
  mpoload obj_vnum&lt;br /&gt;
  endif&lt;br /&gt;
&lt;br /&gt;
  use:&lt;br /&gt;
  if isunderlimit(obj_vnum)&lt;br /&gt;
  mpoload obj_vnum&lt;br /&gt;
  endif&lt;br /&gt;
&lt;br /&gt;
  - tm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if iswielding(var) == vnum of the object&amp;lt;/b&amp;gt;&lt;br /&gt;
:  A bit of a misnomer, this returns true if the var is wearing the specified object,&lt;br /&gt;
:  and false if not. As such, the vnum does not have to be restricted merely to weapons,&lt;br /&gt;
:  but can be applied to any item that can be worn.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if allcarrycount(var) == num&amp;lt;/b&amp;gt;&lt;br /&gt;
: Returns true if the var is carrying the number of objects specified, regardless of&lt;br /&gt;
: whether the var can see the objects. Other numeric operators are acceptable. This applies&lt;br /&gt;
: to inventory and worn items both.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if carrycount(var) == num&amp;lt;/b&amp;gt;&lt;br /&gt;
: Returns true if the var is carrying the number of objects specified, not counting&lt;br /&gt;
: objects the var cannot see. Other numeric operators are acceptable. This applies&lt;br /&gt;
: to inventory and worn items both.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if iscarrying(var) == vnum of the object&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;if iscarrying(var) == full name of the object&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the var is carrying the specified object, and false if not. This&lt;br /&gt;
:  includes everything in the iswielding check, and further goes through the var&amp;#039;s &lt;br /&gt;
:  inventory. Keep in mind that the full name of the object must be used for the string version,&lt;br /&gt;
:  which is often hard to come by. See mpresolve for one way to get it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isowner(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;if isheld(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Restricted to obj progs, this is predominantly used in verb progs to make sure &lt;br /&gt;
:  that only the person who actually has the object is activating the verb. These &lt;br /&gt;
:  checks will return true if the var is the owner of the object, and false if not.&lt;br /&gt;
:  Keep in mind that they are identical, meaning that isheld is a bit of a misnomer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isworn(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Isworn returns true if the calling object is being worn by the specified var, &lt;br /&gt;
:  and false if not. Isworn should only be called from an object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if iswearslotfull(var) == #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the wear slot, specified by the #, is full. Here are the slot &lt;br /&gt;
:  numbers. Slot number is from 1-22. &lt;br /&gt;
:    0: Light&lt;br /&gt;
:    1: Left finger&lt;br /&gt;
:    2: Right finger&lt;br /&gt;
:    3: Neck1&lt;br /&gt;
:    4: Neck2 &lt;br /&gt;
:    5: Torso&lt;br /&gt;
:    6: Head&lt;br /&gt;
:    7: Legs&lt;br /&gt;
:    8: Feet&lt;br /&gt;
:    9: Hands&lt;br /&gt;
:    10: Arms&lt;br /&gt;
:    11: Shield&lt;br /&gt;
:    12: Body&lt;br /&gt;
:    13: Waist&lt;br /&gt;
:    14: Wrist&lt;br /&gt;
:    15: Wrist&lt;br /&gt;
:    16: Wielded&lt;br /&gt;
:    17: Held&lt;br /&gt;
:    18: Floating&lt;br /&gt;
:    19: Dual wielded&lt;br /&gt;
:    20: Branded&lt;br /&gt;
:    21: Concealed&lt;br /&gt;
:    22: Concealed &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;b&amp;gt;if objtype() == #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the calling object is of the type specified by the number. &lt;br /&gt;
:  Objtype numbers:&lt;br /&gt;
:    Light: 1&lt;br /&gt;
:    Scroll: 2&lt;br /&gt;
:    Wand: 3&lt;br /&gt;
:    Staff: 4&lt;br /&gt;
:    Weapon: 5&lt;br /&gt;
:    Treasure: 8&lt;br /&gt;
:    Armor: 9&lt;br /&gt;
:    Potion: 10&lt;br /&gt;
:    Clothing: 11&lt;br /&gt;
:    Furniture: 12&lt;br /&gt;
:    Trash: 13&lt;br /&gt;
:    Container: 15&lt;br /&gt;
:    Drink Container: 17&lt;br /&gt;
:    Key: 18&lt;br /&gt;
:    Food: 19&lt;br /&gt;
:    Money: 20&lt;br /&gt;
:    Boat: 22&lt;br /&gt;
:    NPC Corpse: 23&lt;br /&gt;
:    PC Corpse: 24&lt;br /&gt;
:    Fountain: 25&lt;br /&gt;
:    Pill: 26&lt;br /&gt;
:    Protect: 27&lt;br /&gt;
:    Map: 28&lt;br /&gt;
:    Potal: 29&lt;br /&gt;
:    Warp Stone: 30&lt;br /&gt;
:    Room Key: 31&lt;br /&gt;
:    Gem: 32&lt;br /&gt;
:    Jewelry: 33&lt;br /&gt;
:    Jukebox: 34&lt;br /&gt;
:    Instrument: 35&lt;br /&gt;
:    Net: 36&lt;br /&gt;
:    Arrow: 37&lt;br /&gt;
:    Bow: 38&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;if objval0() == #&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;if objval1() == #&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;if objval2() == #&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;if objval3() == #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the object&amp;#039;s v(0-3) slot is equal to the specified number. Other &lt;br /&gt;
:  numeric operators can also be used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if material() == Material type&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Primarily for use in a give_prog, which will automatically reference the given object.&lt;br /&gt;
:  Returns true if the given object is of the specified material, and false if not.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if perminvis([var])&amp;lt;/b&amp;gt;&lt;br /&gt;
:  If perminvis returns true if the target object is permanently invisible. If used in&lt;br /&gt;
:  a give_prog, a blank argument can be specified, and it will default to targeting the&lt;br /&gt;
:  object which triggers the give_prog.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if recentowner([var]) == &amp;lt;name&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:  This if check returns true if the name specified was a recent owner of a target. If &lt;br /&gt;
:  used with a give_prog, no argument is needed, as it will default to targetting the&lt;br /&gt;
:  triggering object of the prog.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isunderlimit(&amp;lt;vnum&amp;gt;)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  This ifcheck determines, well, if the eq is under limit.  Useful for alternative ways of &lt;br /&gt;
:  loading limited equipment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if objfrom(var) == &amp;lt;animal|celestial&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:  This if check determines whether the target object is a part from an animal or a &lt;br /&gt;
:  celestial being. Originally designed for use with demon payments, it may find other&lt;br /&gt;
:  application. When used in a give_prog, a blank target can be substituted, and it will&lt;br /&gt;
:  default to using the trigger object for the give_prog.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if fountainhere()&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Checks if there&amp;#039;s a fountain here.  Please use with with a var, as I think it crashes&lt;br /&gt;
:  us without one.  This does not currently work with objects.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if level41corpsehere()&amp;lt;/b&amp;gt;&lt;br /&gt;
:  This if check returns true if a pc corpse of level 41 or higher is here.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if number([var]) == &amp;lt;vnum&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:  This if check returns true if the target is of the given vnum. It can also be used &lt;br /&gt;
:  without an argument in conjunction with a give_prog, in which case it will default &lt;br /&gt;
:  to targetting on the give_progâ€™s trigger.&lt;br /&gt;
:  NOTE from Dov Jan 2014: this could be clearer -- the check works for mobs too, it seems (such as a mob who activates&lt;br /&gt;
:  its own verb_prog -- see Tyvor&amp;#039;s verb_prog)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;If weight() == &amp;lt;value&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:For mobs/characters, returns the weight of  their carried gear.  For objects, returns the object&amp;#039;s weight.  Keep in mind that weights are reported in 10ths of units. &lt;br /&gt;
: Presumably this works with &amp;lt;, &amp;gt;, &amp;lt;=, and &amp;gt;=. Found this in an old note from Aeolis with only the above line for documentation, so user beware!&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if rand(#)&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Generates a random number between 1 and 100, returning true if it is less than the #,&lt;br /&gt;
:  and false if it is not.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if port() == #&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Tests the current port the MUD is running on; mostly used to distinguish production &lt;br /&gt;
:  from development in progs. Can use other operators as well (&amp;lt;, &amp;lt;=, &amp;gt;, &amp;gt;=, !=).&lt;br /&gt;
&lt;br /&gt;
===String checking===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if compstr(#) == arg&amp;lt;/b&amp;gt;&lt;br /&gt;
:  This takes in the character&amp;#039;s input, and checks to see if the #th word is equivalent&lt;br /&gt;
:  to the arg. Used primarily for verb_progs, it&amp;#039;s advised that the operator be &lt;br /&gt;
:  restricted to == and !=. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if compx() == arg&amp;lt;/b&amp;gt;&lt;br /&gt;
:  This checks to see if the arg is anywhere within the string. Again, restrict yourself&lt;br /&gt;
:  to == and !=. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if regex() == &amp;lt;regular expression&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
:  Returns true if the text ($x) variable is matched by the regular expression.  Those of&lt;br /&gt;
:  you who don&amp;#039;t know what a &amp;#039;regular expression&amp;#039; is probably won&amp;#039;t find too much use for&lt;br /&gt;
:  it, but it should be very useful for those who do. &lt;br /&gt;
&lt;br /&gt;
===Junk===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if demonstate() == #&amp;lt;/b&amp;gt;&lt;br /&gt;
: Ashurian madness. Used for greater demon crap, somehow. Don&amp;#039;t ask me.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if hasrelief(var)&amp;lt;/b&amp;gt;&lt;br /&gt;
: An antiquated check for the Raider vault items. It checks to see if the var is holding&lt;br /&gt;
: on to the four items. There&amp;#039;s  pretty much no reason to learn this check.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isweather() == #&amp;lt;/b&amp;gt;&lt;br /&gt;
: Currently broken. Will automatically return false until further notice. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;if isexists()&amp;lt;/b&amp;gt;&lt;br /&gt;
: Broken, do not use.&lt;br /&gt;
&lt;br /&gt;
[[category: Leviticus]]&lt;/div&gt;</summary>
		<author><name>Aeoleri</name></author>
	</entry>
</feed>