<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://oldwiki.devbox.themanaworld.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jenalya</id>
	<title>The Mana World - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://oldwiki.devbox.themanaworld.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jenalya"/>
	<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/wiki/Special:Contributions/Jenalya"/>
	<updated>2026-05-06T02:16:20Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Joining_the_project&amp;diff=26627</id>
		<title>Development:Joining the project</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Joining_the_project&amp;diff=26627"/>
		<updated>2013-06-07T14:59:15Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Replace &amp;quot;Contact Jenalya&amp;quot; with &amp;quot;ask in irc and forums&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;So you want to help this project, but you have little or no idea how to get into it? The Mana World development team is not a closed circle like many other projects. You don&#039;t need to apply to anyone or ask for &amp;quot;being taken into the team&amp;quot;. You don&#039;t have to ask for permission to work on something or wait for someone to assign a task to you. A team member is basically anyone who volunteers to do something for the game. For further information and assistance, you can ask for help in [http://wiki.themanaworld.org/index.php/Irc#Does_TMW_have_an_IRC_channel.3F IRC] or on the [http://forums.themanaworld.org/ forums]. You&#039;ll be more effective if you know [[Dev:Working With Git|how to use Git]].&lt;br /&gt;
&lt;br /&gt;
==Technical aspects==&lt;br /&gt;
The technical aspects of development of TMW include tweaking our custom server (tmwAthena). The server is done in C++ and scripts are done in the tmwAthena scripting language. Notably tmwAthena is an SVN snapshot from [http://eathena.ws/ eAthena] (a [http://en.wikipedia.org/wiki/Ragnarok_Online Ragnarok Online] game server emulator software) in early 2004. We&#039;ve extensively hacked it and cleaned it over the years (it was at the moment of taking the snapshot in transition from the basis of an old hacky [http://en.wikipedia.org/wiki/MUD MUD] server to the current eAthena codebase). The technical aspects of the TMW project also include packaging data updates for the client.&lt;br /&gt;
&lt;br /&gt;
===Clients===&lt;br /&gt;
&lt;br /&gt;
====ManaPlus====&lt;br /&gt;
Official client. [http://manaplus.evolonline.org/ Site and downloads], [http://bugs.evolonline.org bug tracker].&lt;br /&gt;
&lt;br /&gt;
====Mana====&lt;br /&gt;
Original client. [http://manasource.org/ Site], [http://manasource.org/downloads downloads], [http://bugs.manasource.org bug tracker].&lt;br /&gt;
&lt;br /&gt;
==Content==&lt;br /&gt;
Content means: new monsters, new equipment, new maps, new NPCs, new quests, new anything into the game.&lt;br /&gt;
&lt;br /&gt;
Content does not mean: GFX, SFX.&lt;br /&gt;
&lt;br /&gt;
Before anything can get into the game, it should be designed. After that it should be implemented server-sided. Then GFX and potentially also SFX can be requested for it and it can go into the game once they&#039;re done. Currently visioning ideas is a collective process anyone can take part in and the people doing scripting are cherry-picking whatever ideas they want to get into the game. Scripting stuff is also a free for all process. Once there is a good idea to expand the world, in general new maps can be requested. Reading the forums thoroughly and asking publicly usually gets you answers rather well.&lt;br /&gt;
&lt;br /&gt;
[http://forums.themanaworld.org/viewforum.php?f=13 Content development forum]&lt;br /&gt;
&lt;br /&gt;
==Graphics==&lt;br /&gt;
Graphics development could currently (June 2013) use a few pixel artists going about and retouching old mistakes in tilesets and sprite sets. Also if the content development crowd picks up and starts to provide concepts which would require new GFX work to be done, then there is going to be a demand for new equipment work, tilesets and sprite sets. Please remember to pay attention to our [[guidelines]].&lt;br /&gt;
&lt;br /&gt;
Also do hunt for unfulfilled REQ topics on the forums if you&#039;re looking for something to do. Newbie pixel artists or people doing their first pixel art piece ever are also very welcome. The community can be pretty harsh at times, but there are also people around who actually do know what they&#039;re talking about. It is up to you to distinguish between these two.&lt;br /&gt;
&lt;br /&gt;
[http://forums.themanaworld.org/viewforum.php?f=8 GFX development forum]&lt;br /&gt;
&lt;br /&gt;
==SFX / Music==&lt;br /&gt;
The SFX and music development scheme for TMW is currently not really all that active. New sounds and music are always appreciated.&lt;br /&gt;
&lt;br /&gt;
[http://forums.themanaworld.org/viewforum.php?f=21 Sound development forum]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Projects_and_Teams&amp;diff=26488</id>
		<title>Development:Projects and Teams</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Projects_and_Teams&amp;diff=26488"/>
		<updated>2013-05-29T06:57:11Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;font-size:250%&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&#039;&#039;&#039;Projects&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;Here is a list of the current projects under development. You can see the list of developers [[Developers|here]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Project&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Team&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Description&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Monster Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Item Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Map Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | New NPCs&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Status&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Assassin Village [[Argaes]]&#039;&#039;&#039;&lt;br /&gt;
| [[User:V0id|V0id]]&lt;br /&gt;
| Assassin Village (Zartam area)&lt;br /&gt;
| &lt;br /&gt;
| Assassin Set&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Scenario writing. (on hold)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Team PvP&#039;&#039;&#039;&lt;br /&gt;
| [[User:V0id|V0id]]&lt;br /&gt;
| See [https://trello.com/card/pvp-wars/4efa1aa51bd5d9220b50e779/54 Trello card]&lt;br /&gt;
| &lt;br /&gt;
| May integrate the Assassin Set if Assassin Village is abandoned. To be discussed.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Mapping.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;New Desert Sonbral ([[Argaes]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:Yubaba|Yubaba]]&lt;br /&gt;
| Creating Desert maps, area further from Tulimshar and new quests.&lt;br /&gt;
| Snake Lord, Desert Monsters&lt;br /&gt;
| Snake Skin Armour, Desert bow&lt;br /&gt;
| &lt;br /&gt;
| Desert/Egyptian NPCs&lt;br /&gt;
| Mapping and quest writing in progress, tileset art needed&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;North/Central [[Argaes]]&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Jaxad0127|Jaxad0127]]&lt;br /&gt;
| Northern/central Argaes, including Trade City, lake Mistrala, farming/finshing village, maps to the edge of the eastern plains.&lt;br /&gt;
| Farmmobs&lt;br /&gt;
| TBA&lt;br /&gt;
| 057 - 067&lt;br /&gt;
| Farm NPCs&lt;br /&gt;
| Mapping in progress, tileset art needed&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Orum and Waric Continuation&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Tux|tux9th]], mrgrey&lt;br /&gt;
| Continuation of the Orum and Waric quest.&lt;br /&gt;
| Evil Woodland monsters: 1104 DemonicMouboo, 1105 ViciousSquirrel, 1106 WickedMushroom, (?)1107 Blupar &lt;br /&gt;
| Summon flowers ID 892 - 896, Rose hat in different colors ID 897 - 902&lt;br /&gt;
| 055, 056&lt;br /&gt;
| &lt;br /&gt;
| Scripting in progress&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Barbarian Village ([[Kaizei]]).&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Tux|tux9th]]&lt;br /&gt;
| A village of barbarians yet to be named.&lt;br /&gt;
| TBA&lt;br /&gt;
| TBA&lt;br /&gt;
| 049, 050, 053, 054&lt;br /&gt;
| Barbarian NPCs&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Lumber Camp ([[Argaes]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:o11c|o11c]]&lt;br /&gt;
| Southern [[Argaes]] expansion.  Quests include: Help the Lumberjacks/Save the Dell (a choice); the Naturalist&#039;s Studies; ?&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 035-039&lt;br /&gt;
|&lt;br /&gt;
| on hold, graphics missing?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[[Thermin]] ([[Kaizei]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Alastrim|Alastrim]]&lt;br /&gt;
| [[Kaizei]] area town.  Once a large town that mined the firerock stones beneath the town, it was devastated by a poison gas leak.  During the crisis to survive, they collaborated on several new technologies to both defend the town from the rampaging Yeti surrounding the town and to find ways to get back to using the mine, despite the poison gas problem.&lt;br /&gt;
|&lt;br /&gt;
| GasMask, Monocle&lt;br /&gt;
|&lt;br /&gt;
| Gasmask steam punk NPC, clockwork armor NPC, barbarian NPCs, [http://forums.themanaworld.org/viewtopic.php?f=8&amp;amp;t=12839 generic pose NPCs]&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[[Thermin]] ([[Kaizei]]) Poisonous Mine&#039;&#039;&#039;&lt;br /&gt;
| [[User:Alastrim|Alastrim]]&lt;br /&gt;
| Poison gas mine.  A constant moving adventure with puzzles and traps to solve and disarm along the way.  Suggestions: Barriers of some type, puzzle mini-games (input code words chosen at random, arrange items, push buttons in a certain order, kill a certain monster on the map), a poison map flag, the use of event monster scripting instead of _mobs.txt spawning.&lt;br /&gt;
| Ice Skull, Purple Slime, Acid Goblin, Longjohn, Serqet, Fire Lizard&lt;br /&gt;
| Firerock,&lt;br /&gt;
| TBA&lt;br /&gt;
|&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Crypt&#039;&#039;&#039;&lt;br /&gt;
| Skipy,[[User:Yubaba|Yubaba]]&lt;br /&gt;
| Reaper boss quest&lt;br /&gt;
| Reaper, scythe, the lost, ball lightning, vampire bat&lt;br /&gt;
| Death&#039;s Hand, Reaper blade&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| tileset incomplete, art developer inactive.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Ancient Amulets&#039;&#039;&#039;&lt;br /&gt;
| [[User:Alastrim|Alastrim]]&lt;br /&gt;
| Five quests leading to different Four-Leaf Amulets of different strengh.&lt;br /&gt;
| Shadow Elemental (1st Quest)&lt;br /&gt;
| Four-Leaf Amulets&lt;br /&gt;
| 024-3 to 024-8&lt;br /&gt;
| Explorer&lt;br /&gt;
| on hold, developer inactive&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Kageville&#039;&#039;&#039;&lt;br /&gt;
| [[User:Kage|Kage]]&lt;br /&gt;
| TBA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 040&lt;br /&gt;
|&lt;br /&gt;
| on hold, developer inactive&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Hetchel the silk weaver [376] ([[Tulimshar]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:bh28|bh28]],[[User:Jenalya|Jenalya]],Chef Chelios.&lt;br /&gt;
| Lora Tay says she can sew Silk Robes provided you give her some silk sheets.and that Hetchel in Tulimshar can weave them for you.&lt;br /&gt;
| &lt;br /&gt;
| Silk Sheet [891], dyed Silk Sheets [2250 to 2259]&lt;br /&gt;
| 021-1&lt;br /&gt;
| Hetchel (376)&lt;br /&gt;
| First part completed, 021-2 or 068-1: add weaver workshop or Noble quarter. REQ: Loom&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Tulimshar expansion&#039;&#039;&#039;&lt;br /&gt;
| wushin&lt;br /&gt;
| &lt;br /&gt;
| Caboo&lt;br /&gt;
| &lt;br /&gt;
| 068-073&lt;br /&gt;
| &lt;br /&gt;
| Mapping in progress, scenario writing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;South to the Beach&#039;&#039;&#039;&lt;br /&gt;
| tux9th&lt;br /&gt;
| small map which is connected via an underground tunnel to 002-3. underground maps of 043 will be a dungeon which will be a new leveling ground for players from 1 to 99, having to fight in teams.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 043&lt;br /&gt;
| &lt;br /&gt;
| Mapping in progress&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:250%&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&#039;&#039;&#039;Teams&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;Here is a list of all the different developer teams. You can see the list of developers [[Developers|here]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Name&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Member(s)&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Role&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;The Mana World - Athena Leader&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]]&lt;br /&gt;
| Coordinates tmwA.  Network and delegate tasks.  Increase participation.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Content Lead&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]]&lt;br /&gt;
| Coordinates tmwA General Content (non-sound, non-art).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Source Lead&#039;&#039;&#039;&lt;br /&gt;
| [[User:o11c|o11c]]&lt;br /&gt;
| Adjusts and coordinates Athena source code.  Meets content team requests for source code adjustments to further content.  Research and development of Athena source code and scripting conventions.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Sound Lead&#039;&#039;&#039;&lt;br /&gt;
| [[User:Yubaba|Yubaba]]&lt;br /&gt;
| Determines if sound on the forums is ready for the game.  Encourages people to get involved in sound and encourage players to try their hand at sound.  Attempts to meet the [REQ]s of content developers as well as creates any sound that may seem to add to the project, from monsters to maps to battle and beyond.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pixel Artists&#039;&#039;&#039;&lt;br /&gt;
| Nami, [[User:Salmondine|Salmondine]]&lt;br /&gt;
| Determines if art is ready for the game.  Helps categorize art topics.  Encourage artists contribute to the game and encourage players to try their hand at art.  Understand content priorities and attempt to steer art to meeting art deadlines.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Mapping Lead&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
| Reviews maps for the game.  Check for proper use of black border, collision tiles, and application of tiles onto the correct layers they belong on.  Fix mapping errors.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Projects_and_Teams&amp;diff=26445</id>
		<title>Development:Projects and Teams</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Projects_and_Teams&amp;diff=26445"/>
		<updated>2013-05-27T17:24:01Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;font-size:250%&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&#039;&#039;&#039;Projects&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;Here is a list of the current projects under development. You can see the list of developers [[Developers|here]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Project&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Team&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Description&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Monster Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Item Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Map Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | New NPCs&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Status&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Assassin Village [[Argaes]]&#039;&#039;&#039;&lt;br /&gt;
| [[User:V0id|V0id]]&lt;br /&gt;
| Assassin Village (Zartam area)&lt;br /&gt;
| &lt;br /&gt;
| Assassin Set&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Scenario writing. (on hold)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Team PvP&#039;&#039;&#039;&lt;br /&gt;
| [[User:V0id|V0id]]&lt;br /&gt;
| See [https://trello.com/card/pvp-wars/4efa1aa51bd5d9220b50e779/54 Trello card]&lt;br /&gt;
| &lt;br /&gt;
| May integrate the Assassin Set if Assassin Village is abandoned. To be discussed.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Mapping.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;New Desert Sonbral ([[Argaes]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:Yubaba|Yubaba]]&lt;br /&gt;
| Creating Desert maps, area further from Tulimshar and new quests.&lt;br /&gt;
| Snake Lord, Desert Monsters&lt;br /&gt;
| Snake Skin Armour, Desert bow&lt;br /&gt;
| &lt;br /&gt;
| Desert/Egyptian NPCs&lt;br /&gt;
| Mapping and quest writing in progress, tileset art needed&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;North/Central [[Argaes]]&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Jaxad0127|Jaxad0127]]&lt;br /&gt;
| Northern/central Argaes, including Trade City, lake Mistrala, farming/finshing village, maps to the edge of the eastern plains.&lt;br /&gt;
| Farmmobs&lt;br /&gt;
| TBA&lt;br /&gt;
| 057 - 067&lt;br /&gt;
| Farm NPCs&lt;br /&gt;
| Mapping in progress, tileset art needed&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Orum and Waric Continuation&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Tux|tux9th]], mrgrey&lt;br /&gt;
| Continuation of the Orum and Waric quest.&lt;br /&gt;
| Evil Woodland monsters: 1104 DemonicMouboo, 1105 ViciousSquirrel, 1106 WickedMushroom, (?)1107 Blupar &lt;br /&gt;
| Rose hat, magical flowers ID 892 - 897, different colors of the rose hat to be decided&lt;br /&gt;
| 055, 056&lt;br /&gt;
| &lt;br /&gt;
| Scripting in progress&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Barbarian Village ([[Kaizei]]).&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Tux|tux9th]]&lt;br /&gt;
| A village of barbarians yet to be named.&lt;br /&gt;
| TBA&lt;br /&gt;
| TBA&lt;br /&gt;
| 049, 050, 053, 054&lt;br /&gt;
| Barbarian NPCs&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Lumber Camp ([[Argaes]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:o11c|o11c]]&lt;br /&gt;
| Southern [[Argaes]] expansion.  Quests include: Help the Lumberjacks/Save the Dell (a choice); the Naturalist&#039;s Studies; ?&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 035-039&lt;br /&gt;
|&lt;br /&gt;
| on hold, graphics missing?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[[Thermin]] ([[Kaizei]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Alastrim|Alastrim]]&lt;br /&gt;
| [[Kaizei]] area town.  Once a large town that mined the firerock stones beneath the town, it was devastated by a poison gas leak.  During the crisis to survive, they collaborated on several new technologies to both defend the town from the rampaging Yeti surrounding the town and to find ways to get back to using the mine, despite the poison gas problem.&lt;br /&gt;
|&lt;br /&gt;
| GasMask, Monocle&lt;br /&gt;
|&lt;br /&gt;
| Gasmask steam punk NPC, clockwork armor NPC, barbarian NPCs, [http://forums.themanaworld.org/viewtopic.php?f=8&amp;amp;t=12839 generic pose NPCs]&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[[Thermin]] ([[Kaizei]]) Poisonous Mine&#039;&#039;&#039;&lt;br /&gt;
| [[User:Alastrim|Alastrim]]&lt;br /&gt;
| Poison gas mine.  A constant moving adventure with puzzles and traps to solve and disarm along the way.  Suggestions: Barriers of some type, puzzle mini-games (input code words chosen at random, arrange items, push buttons in a certain order, kill a certain monster on the map), a poison map flag, the use of event monster scripting instead of _mobs.txt spawning.&lt;br /&gt;
| Ice Skull, Purple Slime, Acid Goblin, Longjohn, Serqet, Fire Lizard&lt;br /&gt;
| Firerock,&lt;br /&gt;
| TBA&lt;br /&gt;
|&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Crypt&#039;&#039;&#039;&lt;br /&gt;
| Skipy,[[User:Yubaba|Yubaba]]&lt;br /&gt;
| Reaper boss quest&lt;br /&gt;
| Reaper, scythe, the lost, ball lightning, vampire bat&lt;br /&gt;
| Death&#039;s Hand, Reaper blade&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| tileset incomplete, art developer inactive.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Ancient Amulets&#039;&#039;&#039;&lt;br /&gt;
| [[User:Alastrim|Alastrim]]&lt;br /&gt;
| Five quests leading to different Four-Leaf Amulets of different strengh.&lt;br /&gt;
| Shadow Elemental (1st Quest)&lt;br /&gt;
| Four-Leaf Amulets&lt;br /&gt;
| 024-3 to 024-8&lt;br /&gt;
| Explorer&lt;br /&gt;
| on hold, developer inactive&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Kageville&#039;&#039;&#039;&lt;br /&gt;
| [[User:Kage|Kage]]&lt;br /&gt;
| TBA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 040&lt;br /&gt;
|&lt;br /&gt;
| on hold, developer inactive&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Hetchel the silk weaver [376] ([[Tulimshar]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:bh28|bh28]],[[User:Jenalya|Jenalya]],Chef Chelios.&lt;br /&gt;
| Lora Tay says she can sew Silk Robes provided you give her some silk sheets.and that Hetchel in Tulimshar can weave them for you.&lt;br /&gt;
| &lt;br /&gt;
| Silk Sheet [891], dyed Silk Sheets [2250 to 2259]&lt;br /&gt;
| 021-1&lt;br /&gt;
| Hetchel (376)&lt;br /&gt;
| First part completed, 021-2 or 068-1: add weaver workshop or Noble quarter. REQ: Loom&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Tulimshar expansion&#039;&#039;&#039;&lt;br /&gt;
| wushin&lt;br /&gt;
| &lt;br /&gt;
| Caboo&lt;br /&gt;
| &lt;br /&gt;
| 068-073&lt;br /&gt;
| &lt;br /&gt;
| Mapping in progress, scenario writing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;South to the Beach&#039;&#039;&#039;&lt;br /&gt;
| tux9th&lt;br /&gt;
| small map which is connected via an underground tunnel to 002-3. underground maps of 043 will be a dungeon which will be a new leveling ground for players from 1 to 99, having to fight in teams.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 043&lt;br /&gt;
| &lt;br /&gt;
| Mapping in progress&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:250%&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&#039;&#039;&#039;Teams&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;Here is a list of all the different developer teams. You can see the list of developers [[Developers|here]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Name&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Member(s)&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Role&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;The Mana World - Athena Leader&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]]&lt;br /&gt;
| Coordinates tmwA.  Network and delegate tasks.  Increase participation.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Content Lead&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]]&lt;br /&gt;
| Coordinates tmwA General Content (non-sound, non-art).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Source Lead&#039;&#039;&#039;&lt;br /&gt;
| [[User:o11c|o11c]]&lt;br /&gt;
| Adjusts and coordinates Athena source code.  Meets content team requests for source code adjustments to further content.  Research and development of Athena source code and scripting conventions.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Sound Lead&#039;&#039;&#039;&lt;br /&gt;
| [[User:Yubaba|Yubaba]]&lt;br /&gt;
| Determines if sound on the forums is ready for the game.  Encourages people to get involved in sound and encourage players to try their hand at sound.  Attempts to meet the [REQ]s of content developers as well as creates any sound that may seem to add to the project, from monsters to maps to battle and beyond.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pixel Artists&#039;&#039;&#039;&lt;br /&gt;
| Nami, [[User:Salmondine|Salmondine]]&lt;br /&gt;
| Determines if art is ready for the game.  Helps categorize art topics.  Encourage artists contribute to the game and encourage players to try their hand at art.  Understand content priorities and attempt to steer art to meeting art deadlines.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Mapping Lead&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
| Reviews maps for the game.  Check for proper use of black border, collision tiles, and application of tiles onto the correct layers they belong on.  Fix mapping errors.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Projects_and_Teams&amp;diff=26393</id>
		<title>Development:Projects and Teams</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Projects_and_Teams&amp;diff=26393"/>
		<updated>2013-05-10T19:06:29Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Reserve monster ids for orum and waric follow-up quest.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;font-size:250%&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&#039;&#039;&#039;Projects&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;Here is a list of the current projects under development. You can see the list of developers [[Developers|here]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Project&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Team&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Description&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Monster Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Item Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Map Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | New NPCs&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Status&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Trade City [[Argaes]]&#039;&#039;&#039;&lt;br /&gt;
| [[User:V0id|V0id]]&lt;br /&gt;
| Assassin Guild quest (Miriam follow-up) in Trade City&lt;br /&gt;
| &lt;br /&gt;
| Assassin Set&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Scenario writing.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;New Desert Sonbral ([[Argaes]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:Yubaba|Yubaba]]&lt;br /&gt;
| Creating Desert maps, area further from Tulimshar and new quests.&lt;br /&gt;
| Snake Lord, Desert Monsters&lt;br /&gt;
| Snake Skin Armour, Desert bow&lt;br /&gt;
| &lt;br /&gt;
| Desert/Egyptian NPCs&lt;br /&gt;
| Mapping and quest writing in progress, tileset art needed&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;East [[Argaes]]&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Tux|tux9th]]&lt;br /&gt;
| Extension to the east, including farmlands, port-city, waterfall area&lt;br /&gt;
| Farmmobs&lt;br /&gt;
| TBA&lt;br /&gt;
| 057 - 067&lt;br /&gt;
| Farm NPCs&lt;br /&gt;
| Mapping in progress, tileset art needed&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Orum and Waric Continuation&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Tux|tux9th]], mrgrey&lt;br /&gt;
| Continuation of the Orum and Waric quest.&lt;br /&gt;
| Evil Woodland monsters: 1104 DemonicMouboo, 1105 ViciousSquirrel, 1106 WickedMushroom, (?)1107 Blupar &lt;br /&gt;
| Rose hat, magical flowers&lt;br /&gt;
| 055, 056&lt;br /&gt;
| &lt;br /&gt;
| Scripting in progress&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Barbarian Village ([[Kaizei]]).&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Tux|tux9th]]&lt;br /&gt;
| A village of barbarians yet to be named.&lt;br /&gt;
| TBA&lt;br /&gt;
| TBA&lt;br /&gt;
| 049, 050, 053, 054&lt;br /&gt;
| Barbarian NPCs&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Lumber Camp ([[Argaes]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:o11c|o11c]]&lt;br /&gt;
| Southern [[Argaes]] expansion.  Quests include: Help the Lumberjacks/Save the Dell (a choice); the Naturalist&#039;s Studies; ?&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 035-039&lt;br /&gt;
|&lt;br /&gt;
| on hold, graphics missing?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[[Thermin]] ([[Kaizei]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Alastrim|Alastrim]]&lt;br /&gt;
| [[Kaizei]] area town.  Once a large town that mined the firerock stones beneath the town, it was devastated by a poison gas leak.  During the crisis to survive, they collaborated on several new technologies to both defend the town from the rampaging Yeti surrounding the town and to find ways to get back to using the mine, despite the poison gas problem.&lt;br /&gt;
|&lt;br /&gt;
| GasMask, Monocle&lt;br /&gt;
|&lt;br /&gt;
| Gasmask steam punk NPC, clockwork armor NPC, barbarian NPCs, [http://forums.themanaworld.org/viewtopic.php?f=8&amp;amp;t=12839 generic pose NPCs]&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[[Thermin]] ([[Kaizei]]) Poisonous Mine&#039;&#039;&#039;&lt;br /&gt;
| [[User:Alastrim|Alastrim]]&lt;br /&gt;
| Poison gas mine.  A constant moving adventure with puzzles and traps to solve and disarm along the way.  Suggestions: Barriers of some type, puzzle mini-games (input code words chosen at random, arrange items, push buttons in a certain order, kill a certain monster on the map), a poison map flag, the use of event monster scripting instead of _mobs.txt spawning.&lt;br /&gt;
| Ice Skull, Purple Slime, Acid Goblin, Longjohn, Serqet, Fire Lizard&lt;br /&gt;
| Firerock,&lt;br /&gt;
| TBA&lt;br /&gt;
|&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Crypt&#039;&#039;&#039;&lt;br /&gt;
| Skipy,[[User:Yubaba|Yubaba]]&lt;br /&gt;
| Reaper boss quest&lt;br /&gt;
| Reaper, scythe, the lost, ball lightning, vampire bat&lt;br /&gt;
| Death&#039;s Hand, Reaper blade&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| tileset incomplete, art developer inactive.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Ancient Amulets&#039;&#039;&#039;&lt;br /&gt;
| [[User:Alastrim|Alastrim]]&lt;br /&gt;
| Five quests leading to different Four-Leaf Amulets of different strengh.&lt;br /&gt;
| Shadow Elemental (1st Quest)&lt;br /&gt;
| Four-Leaf Amulets&lt;br /&gt;
| 024-3 to 024-8&lt;br /&gt;
| Explorer&lt;br /&gt;
| on hold, developer inactive&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Kageville&#039;&#039;&#039;&lt;br /&gt;
| [[User:Kage|Kage]]&lt;br /&gt;
| TBA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 040&lt;br /&gt;
|&lt;br /&gt;
| on hold, developer inactive&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Hetchel the silk weaver [376] ([[Tulimshar]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:bh28|bh28]],[[User:Jenalya|Jenalya]],Chef Chelios.&lt;br /&gt;
| Lora Tay says she can sew Silk Robes provided you give her some silk sheets.and that Hetchel in Tulimshar can weave them for you.&lt;br /&gt;
| &lt;br /&gt;
| Silk Sheet [891], dyed Silk Sheets [2250 to 2259]&lt;br /&gt;
| 021-1&lt;br /&gt;
| Hetchel (376)&lt;br /&gt;
| First part completed, 021-2 or 068-1: add weaver workshop or Noble quarter. REQ: Loom&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Tulimshar expansion&#039;&#039;&#039;&lt;br /&gt;
| wushin&lt;br /&gt;
| &lt;br /&gt;
| Caboo&lt;br /&gt;
| &lt;br /&gt;
| 068-073&lt;br /&gt;
| &lt;br /&gt;
| Mapping in progress, scenario writing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;South to the Beach&#039;&#039;&#039;&lt;br /&gt;
| tux9th&lt;br /&gt;
| small map which is connected via an underground tunnel to 002-3. underground maps of 043 will be a dungeon which will be a new leveling ground for players from 1 to 99, having to fight in teams.&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 043&lt;br /&gt;
| &lt;br /&gt;
| Mapping in progress&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:250%&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&#039;&#039;&#039;Teams&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;Here is a list of all the different developer teams. You can see the list of developers [[Developers|here]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Name&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Member(s)&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Role&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;The Mana World - Athena Leader&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]]&lt;br /&gt;
| Coordinates tmwA.  Network and delegate tasks.  Increase participation.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Content Lead&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]]&lt;br /&gt;
| Coordinates tmwA General Content (non-sound, non-art).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Source Lead&#039;&#039;&#039;&lt;br /&gt;
| [[User:o11c|o11c]]&lt;br /&gt;
| Adjusts and coordinates Athena source code.  Meets content team requests for source code adjustments to further content.  Research and development of Athena source code and scripting conventions.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Sound Lead&#039;&#039;&#039;&lt;br /&gt;
| [[User:Yubaba|Yubaba]]&lt;br /&gt;
| Determines if sound on the forums is ready for the game.  Encourages people to get involved in sound and encourage players to try their hand at sound.  Attempts to meet the [REQ]s of content developers as well as creates any sound that may seem to add to the project, from monsters to maps to battle and beyond.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pixel Artists&#039;&#039;&#039;&lt;br /&gt;
| Nami, [[User:Salmondine|Salmondine]]&lt;br /&gt;
| Determines if art is ready for the game.  Helps categorize art topics.  Encourage artists contribute to the game and encourage players to try their hand at art.  Understand content priorities and attempt to steer art to meeting art deadlines.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Mapping Lead&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
| Reviews maps for the game.  Check for proper use of black border, collision tiles, and application of tiles onto the correct layers they belong on.  Fix mapping errors.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=26207</id>
		<title>Classic:TmwAthena Scripting Standards</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=26207"/>
		<updated>2013-04-17T17:41:44Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: /* Labels and Subfunctions */  Add a note about L_Close&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to standardize the eAthena coding. Any suggestions are welcome to be posted on the discussion page before editing.&lt;br /&gt;
=Code Formatting=&lt;br /&gt;
== Indentation ==&lt;br /&gt;
* Code is indented with four spaces. &lt;br /&gt;
* Code in the same block should have the same indentation. &lt;br /&gt;
* Labels have no indentation. &lt;br /&gt;
* Menu options are on their own lines and are indented further. &lt;br /&gt;
Example:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
* When using an if-statement, there should be a line break after the condition and the conditional command should be indented further. An exception to this is a series of if-statements at the beginning of a major code block which use gotos to jump to the correct position in the script. In this case the goto should be in the same line as the if-statement.&lt;br /&gt;
Example:&lt;br /&gt;
 // if-statement and conditional command in the same line, gotos aligned&lt;br /&gt;
 if (@quest &amp;gt;= 3) goto L_Done;&lt;br /&gt;
 if (@quest == 2) goto L_Progress;&lt;br /&gt;
 if (@quest == 1) goto L_Question;&lt;br /&gt;
 &lt;br /&gt;
 // conditional command in the next line and indented further&lt;br /&gt;
 if (BaseLevel &amp;lt; 40)&lt;br /&gt;
     set @cost, 100;&lt;br /&gt;
&lt;br /&gt;
== Whitespaces==&lt;br /&gt;
In many places whitespaces can increase readability. Examples are&lt;br /&gt;
* When concatenating text and variables:&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot; + strcharinfo(0) + &amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
instead of&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot;+strcharinfo(0)+&amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
* When assigning values to variables:&lt;br /&gt;
 set @var, 3;&lt;br /&gt;
instead of&lt;br /&gt;
 set @var,3;&lt;br /&gt;
* In menus:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
instead of&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;,L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;,L_No;&lt;br /&gt;
&lt;br /&gt;
== Code Blocks ==&lt;br /&gt;
* Code blocks should be separated from the others in a dinstinct way: insert a blank line between code blocks. &lt;br /&gt;
* Individual blocks should be together No blank lines within a block. &lt;br /&gt;
* The opening brackets should be at the end of the parent line, not in a new line; the closing ones should be in a line of their own.&lt;br /&gt;
* A &#039;menu&#039; must not be in the body of an if statement. Instead, goto a new block for the menu, or negate the logic and goto somewhere else if the label should not be shown.&lt;br /&gt;
* The &#039;next&#039; command goes at the end of a block (before a goto or fallthrough), never at the beginning. Make sure &#039;next&#039; is never followed by something that leads to a &#039;close&#039; without intervening text.&lt;br /&gt;
&lt;br /&gt;
==Labels and Subfunctions==&lt;br /&gt;
* Labels should be named in this way: L_CamelCase&lt;br /&gt;
* Subfunctions should be named in this way: S_CamelCase&lt;br /&gt;
* Labels should always start with L_, except those that act as a subfunction, which should start with S_&lt;br /&gt;
* Newline before every label&lt;br /&gt;
* No newline after a label&lt;br /&gt;
* There must not be a fallthrough or goto to a subfunction label.&lt;br /&gt;
* A subfunction label must not goto a normal label. It may, however, goto another label that is specific to that subfunction, and eventually reach a return.&lt;br /&gt;
&lt;br /&gt;
* Many scripts use a label L_Close, which is used to reset temporary player variables to 0, and then ends the scripts with the close; command. If you use a label with that purpose, it should be named L_Close for consistency. (There are older scripts which use different names, e.g. L_end, but new ones should go with L_Close.)&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
At the beginning of a script file there should be documented &lt;br /&gt;
* who is the author&lt;br /&gt;
* the purpose of the script&lt;br /&gt;
* which variables are used and what&#039;s their purpose&lt;br /&gt;
* any additional information that can help to understand the script&lt;br /&gt;
Example:&lt;br /&gt;
 // Author: devxy&lt;br /&gt;
 // This file contains the NPC John, who is part of the Example quest.&lt;br /&gt;
 // Quest states are saved in Quest_Example.&lt;br /&gt;
 // State 1: started the quest&lt;br /&gt;
 // State 2: did the next step&lt;br /&gt;
 [...]&lt;br /&gt;
&lt;br /&gt;
Within the script there should be comments if there are parts which might be difficult to understand.&lt;br /&gt;
&lt;br /&gt;
In some of the older scripts there are boxed comments used like this:&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
 //# NPC John - By Smith                                                           #&lt;br /&gt;
 //#                                                                               #&lt;br /&gt;
 //#  ...                                                                          #&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
Don&#039;t use them in new scripts.&lt;br /&gt;
&lt;br /&gt;
== NPC Dialogs ==&lt;br /&gt;
In the following example our NPC dialog formatting guidelines are explained.&lt;br /&gt;
     mes &amp;quot;[Example NPC Olaf]&amp;quot;;&lt;br /&gt;
     mes &amp;quot;\&amp;quot;When I start speaking my name is put in square brackets, and my spoken text here is in quotation marks.\&amp;quot;&amp;quot;;&lt;br /&gt;
     next;&lt;br /&gt;
     mes &amp;quot;\&amp;quot;The next between my previous line and this one interrupted my speaking, so I started with new quotation marks.&amp;quot;;&lt;br /&gt;
     mes &amp;quot;But didn&#039;t close them in the same line, because I continue to speak here.&amp;quot;;&lt;br /&gt;
     mes &amp;quot;A new message command can be used to have a line break in the dialog without interrupting the speaking.&amp;quot;;&lt;br /&gt;
     mes &amp;quot;At the end I close the quotation marks again.\&amp;quot;&amp;quot;;&lt;br /&gt;
     next;&lt;br /&gt;
     mes &amp;quot;Olaf stops speaking and scratches his head. This is a descriptive text, so it isn&#039;t put into quotation marks.&amp;quot;;&lt;br /&gt;
     next;&lt;br /&gt;
     mes &amp;quot;[Example NPC Olaf]&amp;quot;;&lt;br /&gt;
     mes &amp;quot;\&amp;quot;Now that I start speaking again, I need my name in brackets again before my actual text starts, because something else happened in between.&amp;quot;;&lt;br /&gt;
     mes &amp;quot;It isn&#039;t that difficult, right?\&amp;quot;&amp;quot;;&lt;br /&gt;
     menu&lt;br /&gt;
         &amp;quot;I agree.&amp;quot;, -,&lt;br /&gt;
         &amp;quot;(Leave.)&amp;quot;, L_Close;&lt;br /&gt;
     mes &amp;quot;[Example NPC Olaf]&amp;quot;;&lt;br /&gt;
     mes &amp;quot;\&amp;quot;It&#039;s the same after there was a menu with the player saying or doing something, again I put my name into sqaure brackets before starting to speak.\&amp;quot;&amp;quot;;&lt;br /&gt;
     next;&lt;br /&gt;
     mes &amp;quot;\&amp;quot;In the menu you can see that something the player says isn&#039;t put into quotation marks, but just as plain text.&amp;quot;;&lt;br /&gt;
     mes &amp;quot;And an action the player takes is put into usual brackets.\&amp;quot;&amp;quot;;&lt;br /&gt;
     goto L_Close;&lt;br /&gt;
 &lt;br /&gt;
 L_Close:&lt;br /&gt;
     close;&lt;br /&gt;
&lt;br /&gt;
=Variables=&lt;br /&gt;
==Document Variables==&lt;br /&gt;
in every file, document every variable as one of:&lt;br /&gt;
&lt;br /&gt;
* #  account variable (prefix #) (note that there are also ## variable which didn&#039;t work in the stable version of the server)&lt;br /&gt;
*    permanent player variable (no prefix)&lt;br /&gt;
* @  temporary player variable (prefix @) - used after the script close;s or end;s.&lt;br /&gt;
* @  dynamic player variable (prefix @) - passed into or out of callsub or callfunc&lt;br /&gt;
* @  lexical (local) player variable (prefix @) - used only within the function (scripthelp.txt documents that &amp;quot;.@&amp;quot; means this but I don&#039;t know if that works)&lt;br /&gt;
* @  local constant (prefix @) - not dependent on the player, used only within the function. e.g. lots of @QUEST_FOO_{SHIFT,MASK}&lt;br /&gt;
* $  global permanent variable (prefix $) (I&#039;m not sure if we have any of these right now)&lt;br /&gt;
* $  npc permanent variable (prefix $) same as above but only used by one NPC&lt;br /&gt;
* $  global temporary variable (prefix $@)&lt;br /&gt;
* $@ npc temporary variable (prefix $@) same as above but only used by one NPC, scripthelp.txt mentions prefix &amp;quot;.&amp;quot; but I don&#039;t know if that works&lt;br /&gt;
*    special variable (in db/const.txt with a 1 following)&lt;br /&gt;
*    global constant (in const.txt)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If we use a consistent method of documenting these, we can then generate a list of all variables by type.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Variables initialization==&lt;br /&gt;
Check for troublesome arrays:&lt;br /&gt;
A troublesome array is defined as an array that is not&lt;br /&gt;
*initialized all at once&lt;br /&gt;
*initialized by appending elements to the end, for use in a menu&lt;br /&gt;
 Nothing needs to be done, merely document them. I want this information at hand when I design the new scripting language to minimize conversion pains.&lt;br /&gt;
 I wouldn&#039;t be surprised if there were no troublesome arrays at all. If there are only a couple it might be worth refactoring the code to remove them, but that might be a  high-level decision which is beyond the scope of this proposal.&lt;br /&gt;
&lt;br /&gt;
Set dynamic and local @variables to 0 before close;&lt;br /&gt;
==Naming Variables==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using as little variables as you need==&lt;br /&gt;
So there are some quests, which require lots of variables.&lt;br /&gt;
Think of monster oil quest, Oric and Warum quest etc.&lt;br /&gt;
&lt;br /&gt;
This can often be done by bitmasking: &lt;br /&gt;
One variable has 32 bits. So a variabe can store 2^32 different numbers: 4294967296&lt;br /&gt;
&lt;br /&gt;
But sometimes you only need numbers from 0 to 15, but more of these variables.&lt;br /&gt;
but numbers in range 0 to 15 can be stored in 4 bits ( 2^4 = 16 different numbers)&lt;br /&gt;
&lt;br /&gt;
Here is an example how to use bitmasking:&lt;br /&gt;
[[Media:Tester.txt]]&lt;br /&gt;
== Defining Map Objects ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These sections describe how to define map objects.&lt;br /&gt;
&lt;br /&gt;
=== Warp Definitions ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;Shouldn&#039;t be done manually.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
Warps are what move players between maps. They can also be used to move players around a single map, if needed. Warps are defined like this:&lt;br /&gt;
&lt;br /&gt;
 map1,startX,startY|warp|name|width,height,map2,endX,endY&lt;br /&gt;
&lt;br /&gt;
Key:&lt;br /&gt;
{|&lt;br /&gt;
|map1  ||the starting map&lt;br /&gt;
|-&lt;br /&gt;
|startX||the x-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|startY||the y-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|name  ||the name of the warp, unused but must be defined&lt;br /&gt;
|-&lt;br /&gt;
|width ||the width of the warp&lt;br /&gt;
|-&lt;br /&gt;
|height||the height of the warp&lt;br /&gt;
|-&lt;br /&gt;
|map2  ||the ending map&lt;br /&gt;
|-&lt;br /&gt;
|endX  ||the x-coordinate of the tile the player will end up on&lt;br /&gt;
|-&lt;br /&gt;
|endY  ||the y-coordinate of the tile the player will end up on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Width and height are described in detail here: [[EAthena Scripting Standards/Warp Details|Warp Details]].&lt;br /&gt;
&lt;br /&gt;
=== Monster Definitions ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;Shouldn&#039;t be done manually.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
Monsters are defined like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;|monster|&amp;lt;name&amp;gt;|&amp;lt;mobID&amp;gt;,&amp;lt;count&amp;gt;,&amp;lt;spawn1&amp;gt;,&amp;lt;spawn2&amp;gt;,{&amp;lt;eventcode&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|width      ||the tile width of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|name       ||the name of the mob, unused but must be defined. &#039;&#039;&#039;DO NOT&#039;&#039;&#039; use the keywords such as &amp;quot;spawn&amp;quot; in this name to avoid conflict with other game systems (magic for example)&lt;br /&gt;
|-&lt;br /&gt;
|mobID      ||the mob identifier of the desired monster (in the monster db)the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|count      ||the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|spawn1     ||the minimum delay between successive spawns (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|spawn2     ||the minimum delay between death and respawn (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
A detailed description of position and area can be found here: [[EAthena Scripting Standards/Mob Details|Mob Details]].&lt;br /&gt;
&lt;br /&gt;
=== NPC Definitions ===&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;triggerX&amp;gt;,&amp;lt;triggerY&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|facing     ||Direction the NPC faces to. &#039;&#039;&#039;It must be set to 0&#039;&#039;&#039; in TMW&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|Name       ||the name of the NPC&lt;br /&gt;
|-&lt;br /&gt;
|spriteID   ||the mob identifier of the desired NPC. Sprite ID&lt;br /&gt;
|-&lt;br /&gt;
|triggerX   ||&lt;br /&gt;
|-&lt;br /&gt;
|triggerY   ||&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
* Server side :&lt;br /&gt;
::NPC definitions (script) are usually stored as : &amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/&amp;lt;NPC Name&amp;gt;.txt or in the file :&amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/npc.txt&lt;br /&gt;
* Client side :&lt;br /&gt;
::The NPC is associated with a sprite (the image that will appear in the game), and a XML file which tells the client some display parameters.&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.png&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.xml&amp;lt;br/&amp;gt;The NPC spriteID is linked to graphic files and XML in the file : (tmwa-client-data/)npcs.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/NPC Details|NPC Details]]. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Script Functions ==&lt;br /&gt;
 function|script|&amp;lt;function name&amp;gt;|&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Actual script functions are stored or imported in the files : (tmwa-server-data/)world/map/npc/functions/&amp;lt;function name&amp;gt;.txt, regardless rhey are called from a Map, NPC, Mob or item.&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/function Details|function Details]]. --&amp;gt;&lt;br /&gt;
==Script Loading==&lt;br /&gt;
The main script import file is:[https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/scripts.conf (tmwa-server-data/)world/map/npc/scripts.conf] &amp;lt;br/&amp;gt;&lt;br /&gt;
It loads [https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/_import.txt (tmwa-server-data/)world/map/npc/_import.txt] which imports all NPC scripts wich are stored under the respective map name folders, usually under NPC name.&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
== Open a chest and get reward ==&lt;br /&gt;
An example is given by a quest to get a key for a chest (in fact 3 keys):&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:850px;&amp;quot; border=0 cellspacing=&amp;quot;10&amp;quot; &lt;br /&gt;
|-valign=&amp;quot;Top&amp;quot; &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
// A treasure chest. You need three keys to open it.&lt;br /&gt;
//&lt;br /&gt;
// TMW_Quest (document variable here)&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
002-4.gat,93,37,0|script|Treasure|111,{&lt;br /&gt;
&lt;br /&gt;
    if (TMW_Quest &amp;gt;= 38) goto L_Finished;&lt;br /&gt;
&lt;br /&gt;
    mes &amp;quot;There is a chest here.&amp;quot;;&lt;br /&gt;
    mes &amp;quot;Do you want to try to open it?&amp;quot;;&lt;br /&gt;
    next;&lt;br /&gt;
    menu&lt;br /&gt;
        &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
        &amp;quot;No.&amp;quot;, -;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Yes:&lt;br /&gt;
    if(countitem(&amp;quot;TreasureKey&amp;quot;) &amp;lt; 3)&lt;br /&gt;
        goto L_Not_Enough;&lt;br /&gt;
    getinventorylist;&lt;br /&gt;
    if (@inventorylist_count == 100 &amp;amp;&amp;amp; countitem(&amp;quot;TreasureKey&amp;quot;) &amp;gt; 3)&lt;br /&gt;
        goto L_TooMany;&lt;br /&gt;
    mes &amp;quot;You opened the chest and found a short bow!&amp;quot;;&lt;br /&gt;
    delitem &amp;quot;TreasureKey&amp;quot;, 3;&lt;br /&gt;
    getitem &amp;quot;ShortBow&amp;quot;, 1;&lt;br /&gt;
    set TMW_Quest, 38;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Not_Enough:&lt;br /&gt;
    mes &amp;quot;It seems that you do not have the right key for this chest yet...&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Finished:&lt;br /&gt;
    mes &amp;quot;You have already opened this chest.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_TooMany:&lt;br /&gt;
    mes &amp;quot;You do not have enough room to loot this chest. Maybe you should try again later.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
This script starts with describing the NPC (the chest, NPC sprite 111) and its location (map 002-4 X=93, Y=37, in tiles from top left of the map). Then follows what happens on activation:&lt;br /&gt;
First, the variable &#039;&#039;&amp;quot;TMW_Quest&amp;quot;&#039;&#039; is checked to know if the player already accomplished the quest &amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;(the variable should be documented)&#039;&#039;&#039;&amp;lt;/span&amp;gt;, If he has the script continues at label &#039;&#039;L_Finished&#039;&#039;, the player is reminded fe alredy accomplished the task and script finishes, if not the scrip continues. A message is shown (mes), then an option dialog (menu) is displayed with two possible answers : &amp;quot;Yes.&amp;quot; or &amp;quot;No.&amp;quot;. If the player answers &amp;quot;No.&amp;quot; the script stops (close;); if he answers &amp;quot;Yes.&amp;quot; the script continues at label &#039;&#039;L_Yes&#039;&#039;. Now player is checked to know if he has at least 3 keys, if not script branches to label &#039;&#039;L_Not_Enough&#039;&#039; tells the player he  &amp;quot;has not the right key&amp;quot; and script closes. If he has keys enough, his inventory list is retrieved by the built-in function &amp;quot;getinventorylist&amp;quot; and it&#039;s content is checked to know if the player will have room enough to store the reward after the 3 keys use. If not, script goes to label &#039;&#039;L_TooMany&#039;&#039; and script close after a warning message, If yes 3 keys are deleted in player&#039;s inventory,  he gets the reward: a Short Bow and the variable TMW_Quest is set to 38.&lt;br /&gt;
&lt;br /&gt;
For more examples of the current system, check out the current scripts in use by the server. Beware though, this could affect your enjoyment of the game as it does spoil some of the mystery. Here&#039;s a link to git so you can view them in your browser:&lt;br /&gt;
&lt;br /&gt;
https://github.com/themanaworld/tmwa-server-data/tree/master/world/map/npc&lt;br /&gt;
&lt;br /&gt;
Note that anything said by an NPC should be put in double quotes (&amp;quot;). You can do that like this: &amp;quot;&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039;Hello!&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039; she said.&amp;quot;&lt;br /&gt;
=References=&lt;br /&gt;
* [[EAthena Scripting Basics]]&lt;br /&gt;
* [[EAthena Scripting Reference]]&lt;br /&gt;
* [http://forums.themanaworld.org/viewtopic.php?f=13&amp;amp;t=13653 script cleanup/scripting standards proposal]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Reference&amp;diff=26172</id>
		<title>Classic:TmwAthena Scripting Reference</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Reference&amp;diff=26172"/>
		<updated>2013-04-12T19:55:59Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: /* delitem */  Add note about problem with not stackable items.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a reference for commands believed to work in the eAthena scripting language still used by tmwAthena.&lt;br /&gt;
&lt;br /&gt;
A number of problematic commands have been removed from this list, but not all commands have been tested.&lt;br /&gt;
&lt;br /&gt;
== Language Commands ==&lt;br /&gt;
These are command that are closely tied to the language itself.&lt;br /&gt;
&lt;br /&gt;
=== goto ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    goto L_1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unconditionally jump to a label. Often used in an &amp;quot;if&amp;quot; body.&lt;br /&gt;
&lt;br /&gt;
=== callsub ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    callsub S_labelname, arguments...;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jump to the given label. When the &amp;quot;return&amp;quot; statement is executed, continue on the next line.&lt;br /&gt;
&lt;br /&gt;
It is not known whether &amp;quot;arguments...&amp;quot; works, we use temporary variables instead.&lt;br /&gt;
&lt;br /&gt;
It might also be possible to use this as a function, if the form of return with a value is used, but we use temporary variables instead.&lt;br /&gt;
&lt;br /&gt;
=== callfunc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    callfunc &amp;quot;function_name&amp;quot;, arguments...;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jump to the given function script. When the &amp;quot;return&amp;quot; statement is executed, continue on the next line of this script.&lt;br /&gt;
&lt;br /&gt;
It is not known whether &amp;quot;arguments...&amp;quot; works, we use temporary variables instead.&lt;br /&gt;
&lt;br /&gt;
It might also be possible to use this as a function, if the form of return with a value is used, but we use temporary variables instead.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;return&amp;quot; is broken if this is used from within an if(). If you need a conditional callfunc, first goto a label.&lt;br /&gt;
&lt;br /&gt;
=== return ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    return;&lt;br /&gt;
    return expr;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return from this script or sublabel to the calling function.&lt;br /&gt;
&lt;br /&gt;
It is unknown what happens if this is used from the top-level script, use &amp;quot;close&amp;quot; or &amp;quot;end&amp;quot; instead.&lt;br /&gt;
&lt;br /&gt;
We use temporary variables instead of the form that returns an expression.&lt;br /&gt;
&lt;br /&gt;
=== getarg ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getarg(index)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return (by reference?) an argument of &amp;quot;callsub&amp;quot; or &amp;quot;callfunc&amp;quot;. Aborts the script if used at toplevel of if out of range.&lt;br /&gt;
&lt;br /&gt;
We use temporary variables instead.&lt;br /&gt;
&lt;br /&gt;
=== set ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    set variable, expression;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Very common command, to set variables.&lt;br /&gt;
&lt;br /&gt;
=== setarray ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setarray arrayvariable, val1, val2, ...;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set elements of an array. Previous elements are not cleared. At most 128 elements can be assigned.&lt;br /&gt;
&lt;br /&gt;
It is currently possible, but deprecated, to specify a (zero-based) array index to start at the given part of an array. It&#039;s pretty amazing that that code works anyway.&lt;br /&gt;
&lt;br /&gt;
Remember that there are no permanent arrays, only temporary.&lt;br /&gt;
&lt;br /&gt;
=== cleararray ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    cleararray variable, value, count;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fill an array with &amp;quot;count&amp;quot; copies of &amp;quot;value&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== copyarray ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    copyarray dest_var, src_var, count;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Copy elements of an array.&lt;br /&gt;
&lt;br /&gt;
This function looks broken to me.&lt;br /&gt;
&lt;br /&gt;
=== getarraysize ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getarraysize variable;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get the size of an array.&lt;br /&gt;
&lt;br /&gt;
The size of an array is simply one more than the index of the last nonzero integer or nonempty string.&lt;br /&gt;
&lt;br /&gt;
WARNING: most functions that set an array do not bother to clear out high indices. You should almost always use an explicitly-provided size instead.&lt;br /&gt;
&lt;br /&gt;
=== deletearray ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    deletearray variable[, count = 1];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Remove count elements from an array.&lt;br /&gt;
&lt;br /&gt;
If there are elements beyond count, they will be shifted into lower indices.&lt;br /&gt;
&lt;br /&gt;
After that, all remaining elements will be set to 0 or &amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This function is currently broken, instead use cleararray variable, 0, count;&lt;br /&gt;
&lt;br /&gt;
=== getelementofarray ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getelementofarray(arrayname, index_expr)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This function is invoked internally by the arrayname[index_expr] syntax.&lt;br /&gt;
&lt;br /&gt;
=== if ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    if (condition) condition_command [conditional_command_args, ...];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If condition is zero, do nothing. Else, evaluate the conditional command.&lt;br /&gt;
&lt;br /&gt;
The only thing special about the if command is the lack of commas during parsing (from my reading this is only a warning?). During execution it is perfectly normal.&lt;br /&gt;
&lt;br /&gt;
=== end ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop executing the script.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use this if you have opened a dialog to the player, use &amp;quot;close&amp;quot; instead. Or, use &amp;quot;close2&amp;quot; and *then* &amp;quot;end&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== debugmes ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    debugmes &amp;quot;string&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Print a message to stdout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Message Commands ==&lt;br /&gt;
These are commands for dialog or one-way chat with players.&lt;br /&gt;
&lt;br /&gt;
=== mes ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    mes &amp;quot;string&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display a line of text to the player. If a dialog box is not already open for the attached NPC, one will be created.&lt;br /&gt;
&lt;br /&gt;
It is unknown if the client properly supports dialog with multiple NPCs simultaneously. Note that the server only allows each account one paused script at a time, so it probably wouldn&#039;t work anyway.&lt;br /&gt;
&lt;br /&gt;
If you need to include the &#039;&#039;&#039;&amp;quot;&#039;&#039;&#039; character inside the message, (especially for dialogs) insert it as &#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
When doing several messages without a next; in between, there should be only a single \&amp;quot; at the beginning and the end each.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example 1&#039;&#039;&#039;:&lt;br /&gt;
 mes &amp;quot;\&amp;quot;I start talking here, and don&#039;t close the quotation marks, because I&#039;m not yet done talking.&amp;quot;;&lt;br /&gt;
 mes &amp;quot;And start a new line, but without new quotation marks.&amp;quot;;&lt;br /&gt;
 mes &amp;quot;Here I stop talking, so I close the quotation marks.\&amp;quot;&amp;quot;;&lt;br /&gt;
gives:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I start talking here, and don&#039;t close the quotation marks, because I&#039;m not yet done talking.&amp;lt;br&amp;gt;&lt;br /&gt;
And start a new line, but without new quotation marks.&amp;lt;br&amp;gt;&lt;br /&gt;
Here I stop talking, so I close the quotation marks.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example 2&#039;&#039;&#039;: Hamlet (Act 3, scene 1)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mes &amp;quot;[King Claudius]&amp;quot;&lt;br /&gt;
mes &amp;quot;\&amp;quot;Aside O, &#039;tis too true!&amp;quot;&lt;br /&gt;
mes &amp;quot;How smart a lash that speech doth give my conscience!&amp;quot;&lt;br /&gt;
mes &amp;quot;The harlot&#039;s cheek, beautied with plastering art,&amp;quot;&lt;br /&gt;
mes &amp;quot;Is not more ugly to the thing that helps it&amp;quot;&lt;br /&gt;
mes &amp;quot;Than is my deed to my most painted word:&amp;quot;&lt;br /&gt;
mes &amp;quot;O heavy burthen!\&amp;quot;&amp;quot;&lt;br /&gt;
mes &amp;quot;&amp;quot;&lt;br /&gt;
mes &amp;quot;[Lord Polonius]&amp;quot;&lt;br /&gt;
mes &amp;quot;\&amp;quot;I hear him coming: let&#039;s withdraw, my lord.\&amp;quot;&amp;quot;&lt;br /&gt;
mes &amp;quot;&amp;quot;&lt;br /&gt;
mes &amp;quot;Exeunt KING CLAUDIUS and POLONIUS Enter HAMLET&amp;quot;&lt;br /&gt;
mes &amp;quot;&amp;quot;&lt;br /&gt;
mes &amp;quot;[Hamlet]&amp;quot;&lt;br /&gt;
mes &amp;quot;\&amp;quot;To be, or not to be: that is the question:&amp;quot;&lt;br /&gt;
mes &amp;quot;Whether &#039;tis nobler in the mind to suffer&amp;quot;&lt;br /&gt;
mes &amp;quot;The slings and arrows of outrageous fortune,&amp;quot;&lt;br /&gt;
mes &amp;quot;Or to take arms against a sea of troubles,&amp;quot;&lt;br /&gt;
mes &amp;quot;And by opposing end them? To die: to sleep;&amp;quot;&lt;br /&gt;
mes &amp;quot;No more; and by a sleep to say we end&amp;quot;&lt;br /&gt;
mes &amp;quot;The heart-ache and the thousand natural shocks&amp;quot;&lt;br /&gt;
mes &amp;quot;That flesh is heir to, &#039;tis a consummation&amp;quot;&lt;br /&gt;
mes &amp;quot;Devoutly to be wish&#039;d. To die, to sleep;&amp;quot;&lt;br /&gt;
mes &amp;quot;To sleep: perchance to dream: ay, there&#039;s the rub;&amp;quot;&lt;br /&gt;
mes &amp;quot;For in that sleep of death what dreams may come&amp;quot;&lt;br /&gt;
mes &amp;quot;When we have shuffled off this mortal coil,&amp;quot;&lt;br /&gt;
mes &amp;quot;Must give us pause: there&#039;s the respect&amp;quot;&lt;br /&gt;
mes &amp;quot;That makes calamity of so long life;&amp;quot;&lt;br /&gt;
mes &amp;quot;For who would bear the whips and scorns of time,&amp;quot;&lt;br /&gt;
mes &amp;quot;The oppressor&#039;s wrong, the proud man&#039;s contumely,&amp;quot;&lt;br /&gt;
mes &amp;quot;The pangs of despised love, the law&#039;s delay,&amp;quot;&lt;br /&gt;
mes &amp;quot;The insolence of office and the spurns&amp;quot;&lt;br /&gt;
mes &amp;quot;That patient merit of the unworthy takes,&amp;quot;&lt;br /&gt;
mes &amp;quot;When he himself might his quietus make&amp;quot;&lt;br /&gt;
mes &amp;quot;With a bare bodkin? who would these fardels bear,&amp;quot;&lt;br /&gt;
mes &amp;quot;To grunt and sweat under a weary life,&amp;quot;&lt;br /&gt;
mes &amp;quot;But that the dread of something after death,&amp;quot;&lt;br /&gt;
mes &amp;quot;The undiscover&#039;d country from whose bourn&amp;quot;&lt;br /&gt;
mes &amp;quot;No traveller returns, puzzles the will&amp;quot;&lt;br /&gt;
mes &amp;quot;And makes us rather bear those ills we have&amp;quot;&lt;br /&gt;
mes &amp;quot;Than fly to others that we know not of?&amp;quot;&lt;br /&gt;
mes &amp;quot;Thus conscience does make cowards of us all;&amp;quot;&lt;br /&gt;
mes &amp;quot;And thus the native hue of resolution&amp;quot;&lt;br /&gt;
mes &amp;quot;Is sicklied o&#039;er with the pale cast of thought,&amp;quot;&lt;br /&gt;
mes &amp;quot;And enterprises of great pitch and moment&amp;quot;&lt;br /&gt;
mes &amp;quot;With this regard their currents turn awry,&amp;quot;&lt;br /&gt;
mes &amp;quot;And lose the name of action.--Soft you now!&amp;quot;&lt;br /&gt;
mes &amp;quot;The fair Ophelia! Nymph, in thy orisons&amp;quot;&lt;br /&gt;
mes &amp;quot;Be all my sins remember&#039;d.\&amp;quot;&amp;quot;&lt;br /&gt;
mes &amp;quot;&amp;quot;&lt;br /&gt;
mes &amp;quot;[Ophelia]&amp;quot;&lt;br /&gt;
mes &amp;quot;\&amp;quot;Good my lord,&amp;quot;&lt;br /&gt;
mes &amp;quot;How does your honour for this many a day?\&amp;quot;&amp;quot;&lt;br /&gt;
mes &amp;quot;&amp;quot;&lt;br /&gt;
mes &amp;quot;[Hamlet]&amp;quot;&lt;br /&gt;
mes &amp;quot;\&amp;quot;I humbly thank you; well, well, well.\&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Will give:&lt;br /&gt;
&lt;br /&gt;
[King Claudius]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;Aside O, &#039;tis too true!&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
How smart a lash that speech doth give my conscience!&amp;lt;br&amp;gt;&lt;br /&gt;
The harlot&#039;s cheek, beautied with plastering art,&amp;lt;br&amp;gt;&lt;br /&gt;
Is not more ugly to the thing that helps it&amp;lt;br&amp;gt;&lt;br /&gt;
Than is my deed to my most painted word:&amp;lt;br&amp;gt;&lt;br /&gt;
O heavy burthen!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[Lord Polonius]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;I hear him coming: let&#039;s withdraw, my lord.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Exeunt KING CLAUDIUS and POLONIUS Enter HAMLET&lt;br /&gt;
&lt;br /&gt;
[Hamlet]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;To be, or not to be: that is the question:&amp;lt;br&amp;gt;&lt;br /&gt;
Whether &#039;tis nobler in the mind to suffer&amp;lt;br&amp;gt;&lt;br /&gt;
The slings and arrows of outrageous fortune,&amp;lt;br&amp;gt;&lt;br /&gt;
Or to take arms against a sea of troubles,&amp;lt;br&amp;gt;&lt;br /&gt;
And by opposing end them? To die: to sleep;&amp;lt;br&amp;gt;&lt;br /&gt;
No more; and by a sleep to say we end&amp;lt;br&amp;gt;&lt;br /&gt;
The heart-ache and the thousand natural shocks&amp;lt;br&amp;gt;&lt;br /&gt;
That flesh is heir to, &#039;tis a consummation&amp;lt;br&amp;gt;&lt;br /&gt;
Devoutly to be wish&#039;d. To die, to sleep;&amp;lt;br&amp;gt;&lt;br /&gt;
To sleep: perchance to dream: ay, there&#039;s the rub;&amp;lt;br&amp;gt;&lt;br /&gt;
For in that sleep of death what dreams may come&amp;lt;br&amp;gt;&lt;br /&gt;
When we have shuffled off this mortal coil,&amp;lt;br&amp;gt;&lt;br /&gt;
Must give us pause: there&#039;s the respect&amp;lt;br&amp;gt;&lt;br /&gt;
That makes calamity of so long life;&amp;lt;br&amp;gt;&lt;br /&gt;
For who would bear the whips and scorns of time,&amp;lt;br&amp;gt;&lt;br /&gt;
The oppressor&#039;s wrong, the proud man&#039;s contumely,&amp;lt;br&amp;gt;&lt;br /&gt;
The pangs of despised love, the law&#039;s delay,&amp;lt;br&amp;gt;&lt;br /&gt;
The insolence of office and the spurns&amp;lt;br&amp;gt;&lt;br /&gt;
That patient merit of the unworthy takes,&amp;lt;br&amp;gt;&lt;br /&gt;
When he himself might his quietus make&amp;lt;br&amp;gt;&lt;br /&gt;
With a bare bodkin? who would these fardels bear,&amp;lt;br&amp;gt;&lt;br /&gt;
To grunt and sweat under a weary life,&amp;lt;br&amp;gt;&lt;br /&gt;
But that the dread of something after death,&amp;lt;br&amp;gt;&lt;br /&gt;
The undiscover&#039;d country from whose bourn&amp;lt;br&amp;gt;&lt;br /&gt;
No traveller returns, puzzles the will&amp;lt;br&amp;gt;&lt;br /&gt;
And makes us rather bear those ills we have&amp;lt;br&amp;gt;&lt;br /&gt;
Than fly to others that we know not of?&amp;lt;br&amp;gt;&lt;br /&gt;
Thus conscience does make cowards of us all;&amp;lt;br&amp;gt;&lt;br /&gt;
And thus the native hue of resolution&amp;lt;br&amp;gt;&lt;br /&gt;
Is sicklied o&#039;er with the pale cast of thought,&amp;lt;br&amp;gt;&lt;br /&gt;
And enterprises of great pitch and moment&amp;lt;br&amp;gt;&lt;br /&gt;
With this regard their currents turn awry,&amp;lt;br&amp;gt;&lt;br /&gt;
And lose the name of action.--Soft you now!&amp;lt;br&amp;gt;&lt;br /&gt;
The fair Ophelia! Nymph, in thy orisons&amp;lt;br&amp;gt;&lt;br /&gt;
Be all my sins remember&#039;d.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[Ophelia]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;Good my lord,&amp;lt;br&amp;gt;&lt;br /&gt;
How does your honour for this many a day?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[Hamlet]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;I humbly thank you; well, well, well.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== next ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    next;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop the script until the user presses &amp;quot;Next&amp;quot; in the dialog.&lt;br /&gt;
&lt;br /&gt;
=== close ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    close;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop executing the script and give the user a &amp;quot;Close&amp;quot; button in the dialog.&lt;br /&gt;
&lt;br /&gt;
=== close2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    close2;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop the script until the user presses the &amp;quot;Close&amp;quot; button in the dialog, then keep executing the script.&lt;br /&gt;
&lt;br /&gt;
WARNING: unlike close, this command is a blocking command, the usual caveats apply.&lt;br /&gt;
&lt;br /&gt;
=== menu ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    menu&lt;br /&gt;
        &amp;quot;option 1&amp;quot;, L_1,&lt;br /&gt;
        &amp;quot;option 2&amp;quot;, L_2,&lt;br /&gt;
        &amp;quot;default&amp;quot;, -;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display a list of choices to the player, then branch to the specified label. The special label &amp;quot;-&amp;quot; means don&#039;t branch, just continue with the next statement.&lt;br /&gt;
&lt;br /&gt;
Additionally, the temporary variable &amp;quot;@menu&amp;quot; is set to the 1-based index of the choice.&lt;br /&gt;
&lt;br /&gt;
The options must not contain the character &amp;quot;:&amp;quot;, as the protocol uses it as a separator.&lt;br /&gt;
&lt;br /&gt;
=== input ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    input variable_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Input an integer or string to the given variable, depending on whether has the &#039;$&#039; string postfix.&lt;br /&gt;
&lt;br /&gt;
The implementation allows variable_name to be omitted if input is an integer, in case l14 is used. Don&#039;t use this.&lt;br /&gt;
&lt;br /&gt;
=== announce ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    announce &amp;quot;message&amp;quot;, flag;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Do a GM message.&lt;br /&gt;
&lt;br /&gt;
If flag &amp;amp; 0xF == 0 forward it to all map servers.&lt;br /&gt;
If flag &amp;amp; 0x8, message is from the OID (NPC? usually?) rather than the RID (player).&lt;br /&gt;
&lt;br /&gt;
If (flag &amp;amp; 0x7) == 1, send to all on map.&lt;br /&gt;
If (flag &amp;amp; 0x7) == 2, send to all in line of sight.&lt;br /&gt;
If (flag &amp;amp; 0x7) == 3, send to self only.&lt;br /&gt;
If (flag &amp;amp; 0x7) == anything else, send to all clients.&lt;br /&gt;
&lt;br /&gt;
=== mapannounce ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    mapannounce &amp;quot;mapname&amp;quot;, &amp;quot;message&amp;quot;, flag;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Send an announcement to all players in map.&lt;br /&gt;
&lt;br /&gt;
Only flag &amp;amp; 0x10 is interpreted, which does not work with the Mana client. So, flag must be 0.&lt;br /&gt;
&lt;br /&gt;
=== areaannounce ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    areaannounce &amp;quot;mapname&amp;quot;, x0, y0, x1, y1, &amp;quot;message&amp;quot;, flag;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Send an announcement to all players in area.&lt;br /&gt;
&lt;br /&gt;
Only flag &amp;amp; 0x10 is interpreted, which does not work with the Mana client. So, flag must be 0.&lt;br /&gt;
&lt;br /&gt;
=== message ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    message &amp;quot;player&amp;quot;, &amp;quot;message&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display (in chat) a message from the server to a single user.&lt;br /&gt;
&lt;br /&gt;
=== npctalk ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    npctalk &amp;quot;message&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make an NPC say something publicly.&lt;br /&gt;
&lt;br /&gt;
Note: in many cases areaannounce is a better choice.&lt;br /&gt;
&lt;br /&gt;
== Character Commands ==&lt;br /&gt;
These have to do with attributes of the player.&lt;br /&gt;
&lt;br /&gt;
=== setlook ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setlook type, value;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set an aspect of a character&#039;s appearance. Used e.g. by the barber.&lt;br /&gt;
&lt;br /&gt;
There are constant provided for the LOOK type, and for hair color and hair style.&lt;br /&gt;
&lt;br /&gt;
=== heal ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    heal hp, sp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Increase or decrease the player&#039;s hp and sp.&lt;br /&gt;
&lt;br /&gt;
=== itemheal ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    itemheal &amp;quot;ii&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Increase or decrease the player&#039;s hp and sp, for use in item scripts.&lt;br /&gt;
&lt;br /&gt;
=== percentheal ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    percentheal &amp;quot;ii&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Increase or decrease the player&#039;s hp and sp, by percentage of max HP.&lt;br /&gt;
&lt;br /&gt;
This is probably the best way to instakill the player.&lt;br /&gt;
&lt;br /&gt;
=== readparam ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    readparam(type[, &amp;quot;playername&amp;quot;])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return one of the core parameters of a player.&lt;br /&gt;
&lt;br /&gt;
type is one of the bCamelCase constants, see db/const.txt&lt;br /&gt;
&lt;br /&gt;
=== getcharid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getcharid(type[ &amp;quot;playername&amp;quot;])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get an id of the attached (or given) player.&lt;br /&gt;
&lt;br /&gt;
Type is:&lt;br /&gt;
0: char id&lt;br /&gt;
1: party id&lt;br /&gt;
2: guild id (deprecated)&lt;br /&gt;
3: account id&lt;br /&gt;
&lt;br /&gt;
You usually want 3.&lt;br /&gt;
&lt;br /&gt;
=== getpartyname ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getpartyname(partyid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the name of the party with the given id, or &amp;quot;null&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== getpartymember ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getpartymember partyid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fills in the array $@partymembername$&lt;br /&gt;
&lt;br /&gt;
=== strcharinfo ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    strcharinfo(num)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return string information about an account:&lt;br /&gt;
num==0: name&lt;br /&gt;
num==1: party name&lt;br /&gt;
num==2: guild name (deprecated)&lt;br /&gt;
&lt;br /&gt;
=== sc_start ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sc_start type, tick, val1[, beingid];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Apply a status effect to a player (or monster?).&lt;br /&gt;
&lt;br /&gt;
type is one of the sc_* constants.&lt;br /&gt;
&lt;br /&gt;
=== sc_start2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sc_start2 type, tick, val1, chance[, beingid];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Chance of applying a status effect, out of 10000.&lt;br /&gt;
&lt;br /&gt;
=== sc_end ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sc_end type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Immediately end status effect on current player.&lt;br /&gt;
&lt;br /&gt;
=== sc_check ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sc_check(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Whether a status effect is currently active.&lt;br /&gt;
&lt;br /&gt;
=== getscrate ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getscrate(type, rate[, being_id])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the sc is poison, modify rate by (3 + vit + luk/3) percent.&lt;br /&gt;
&lt;br /&gt;
The form that accepts a being_id is broken in the current stable version of the server.&lt;br /&gt;
&lt;br /&gt;
=== resetlvl ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    resetlvl type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== resetstatus ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    resetstatus;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== resetskill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    resetskill;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== changesex ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    changesex;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ask the login server (via the char server) to toggle this account&#039;s sex, then kick the player.&lt;br /&gt;
&lt;br /&gt;
=== attachrid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    attachrid(id)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Change the being associated with this script.&lt;br /&gt;
&lt;br /&gt;
Return true if such a player is logged in.&lt;br /&gt;
&lt;br /&gt;
=== detachrid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    detachrid;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Detach the player associated with this script.&lt;br /&gt;
&lt;br /&gt;
=== isloggedin ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    isloggedin(id)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return true if the given ID is logged in.&lt;br /&gt;
&lt;br /&gt;
Often you shouldn&#039;t use this, but attachrid(id) instead&lt;br /&gt;
&lt;br /&gt;
=== marriage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    marriage(&amp;quot;otherplayer&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Marry the attached player to the other player.&lt;br /&gt;
&lt;br /&gt;
Return 1 on success and 0 on failure.&lt;br /&gt;
&lt;br /&gt;
=== divorce ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    divorce()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Divorce the attached player from their partner&lt;br /&gt;
&lt;br /&gt;
Return 1 on success and 0 on failure.&lt;br /&gt;
&lt;br /&gt;
=== getpartnerid2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getpartnerid2()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the ID of the attached player&#039;s partner (0 is none).&lt;br /&gt;
&lt;br /&gt;
=== getexp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getexp base, job;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Increase the types of experience.&lt;br /&gt;
&lt;br /&gt;
=== getinventorylist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getinventorylist;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fill in some arrays of useful information: &amp;quot;@inventorylist_id&amp;quot;, &amp;quot;@inventorylist_amount&amp;quot;, &amp;quot;@inventorylist_equip&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The arrays are not cleared between calls, use &amp;quot;@inventory_count&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== getskilllist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getskilllist;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fill in some arrays of useful information: &amp;quot;@skilllist_id&amp;quot;, &amp;quot;@skilllist_lv&amp;quot;, &amp;quot;@skilllist_flag&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The arrays are not cleared between calls, use &amp;quot;@skill_count&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== getpoolskilllist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getpoolskilllist;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Same, but only poolable skills.&lt;br /&gt;
&lt;br /&gt;
=== getactivatedpoolskilllist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getactivatedpoolskilllist;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Same, but only activated pool skills.&lt;br /&gt;
&lt;br /&gt;
=== getunactivatedpoolskilllist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getunactivatedpoolskilllist;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Same, but only unactivated pool skills.&lt;br /&gt;
&lt;br /&gt;
=== poolskill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    poolskill skill_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Activate a poolable skill.&lt;br /&gt;
&lt;br /&gt;
=== unpoolskill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    unpoolskill skill_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Deactivate a poolable skill.&lt;br /&gt;
&lt;br /&gt;
=== checkpoolskill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    checkpoolskill(skill_id)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Check if a pool skill is activated&lt;br /&gt;
&lt;br /&gt;
=== misceffect ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    misceffect type, &amp;quot;player_name&amp;quot;;&lt;br /&gt;
    misceffect type, being_id;&lt;br /&gt;
    misceffect type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display a miscellaneous effect on a being.&lt;br /&gt;
&lt;br /&gt;
In the third form, it will use the OID if possible, and fallback to the RID.&lt;br /&gt;
&lt;br /&gt;
=== getlook ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getlook(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return part of the player&#039;s appearance:&lt;br /&gt;
val==1: hair&lt;br /&gt;
val==2: weapon&lt;br /&gt;
val==3: bottom&lt;br /&gt;
val==4: middle&lt;br /&gt;
val==5: top&lt;br /&gt;
val==6: hair color&lt;br /&gt;
val==8: shield&lt;br /&gt;
val==9: shoes&lt;br /&gt;
&lt;br /&gt;
On failure, return -1.&lt;br /&gt;
&lt;br /&gt;
=== getsavepoint ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getsavepoint(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
type==0: Return savepoint map&lt;br /&gt;
type==1: Return savepoint x&lt;br /&gt;
type==2: Return savepoint y&lt;br /&gt;
&lt;br /&gt;
This is believed to be the only function (other than callfunc and callsub of course) that returns a different type depending on its arguments.&lt;br /&gt;
&lt;br /&gt;
=== shop ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    shop &amp;quot;npcname&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Close the script and open the given NPC&#039;s shop.&lt;br /&gt;
&lt;br /&gt;
=== isdead ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    isdead()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 1 if the attached player is dead, else 0.&lt;br /&gt;
&lt;br /&gt;
=== fakenpcname ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    fakenpcname &amp;quot;name&amp;quot;, &amp;quot;newname&amp;quot;, new_sprite_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Change the appearance of an NPC.&lt;br /&gt;
&lt;br /&gt;
== Location Commands ==&lt;br /&gt;
These are commands that have to do with the location of players&lt;br /&gt;
&lt;br /&gt;
=== warp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    warp &amp;quot;mapname&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Warp the attached player to the given location. &amp;quot;mapname&amp;quot; may have the special values &amp;quot;Random&amp;quot;, &amp;quot;SavePoint&amp;quot;, and &amp;quot;Save&amp;quot; (case-sensitive), but x and y are still required.&lt;br /&gt;
&lt;br /&gt;
=== isat ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    isat(&amp;quot;mapname&amp;quot;, x, y)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 1 if the attached player is at the given location, 0 otherwise.&lt;br /&gt;
&lt;br /&gt;
=== areawarp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    areawarp &amp;quot;src_map&amp;quot;, x0, y0, x1, y1, &amp;quot;dst_map&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Warp all players in the given area to the given location.&lt;br /&gt;
&lt;br /&gt;
=== getusers ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getusers(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count users.&lt;br /&gt;
&lt;br /&gt;
If flag &amp;amp; 0x8, base on OID instead of RID.&lt;br /&gt;
If (flag &amp;amp; 0x7) == 0, return users on the map.&lt;br /&gt;
If (flag &amp;amp; 0x7) == 1, return users on the server.&lt;br /&gt;
&lt;br /&gt;
=== getmapusers ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getmapusers(&amp;quot;mapname&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count users on a given map.&lt;br /&gt;
&lt;br /&gt;
=== getareausers ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getareausers(&amp;quot;mapname&amp;quot;, x0, y0, x1, y1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count users in an area.&lt;br /&gt;
&lt;br /&gt;
=== mapwarp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    mapwarp &amp;quot;src_map&amp;quot;, &amp;quot;dst_map&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Warp all players from source map to destination location.&lt;br /&gt;
&lt;br /&gt;
=== npcwarp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    npcwarp x, y, &amp;quot;npcname&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Move an NPC to a different location on the same map.&lt;br /&gt;
&lt;br /&gt;
=== isin ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    isin(&amp;quot;mapname&amp;quot;, x0, y0, x1, y1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Check if the player is in the area.&lt;br /&gt;
&lt;br /&gt;
=== getx ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getx()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return attached player&#039;s x coordinate.&lt;br /&gt;
&lt;br /&gt;
=== gety ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    gety()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return attached player&#039;s y coordinate.&lt;br /&gt;
&lt;br /&gt;
=== getmap ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getmap()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return attached player&#039;s current map.&lt;br /&gt;
&lt;br /&gt;
== Item Commands ==&lt;br /&gt;
These have to do with items or inventory.&lt;br /&gt;
&lt;br /&gt;
=== getitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getitem &amp;quot;itemname&amp;quot;, count[, unused_argument[, playerid]];&lt;br /&gt;
    getitem itemid, count[, unused_argument[, playerid]];&lt;br /&gt;
&amp;quot;ii**&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Grant the attached player (or the given player) &amp;quot;count&amp;quot; copies of an item.&lt;br /&gt;
&lt;br /&gt;
If itemname is unrecognized you get an iten (727) instead.&lt;br /&gt;
&lt;br /&gt;
=== makeitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    makeitem &amp;quot;itemname&amp;quot;, count, &amp;quot;mapname&amp;quot;, x, y;&lt;br /&gt;
    makeitem itemid, count, &amp;quot;mapname&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Drop items on the ground.&lt;br /&gt;
&lt;br /&gt;
The special &amp;quot;mapname&amp;quot; value &amp;quot;this&amp;quot; means the map of the attached player.&lt;br /&gt;
&lt;br /&gt;
=== delitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    delitem &amp;quot;itemname&amp;quot;, count;&lt;br /&gt;
    delitem itemid, count;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Remove items from the attached player&#039;s inventory.&lt;br /&gt;
&lt;br /&gt;
This command is buggy if the player does not have enough of the item. And if the item is not stackable, the command will delete only one of them, even if a higher number is specified.&lt;br /&gt;
&lt;br /&gt;
=== countitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    countitem(&amp;quot;itemname&amp;quot;)&lt;br /&gt;
    countitem(itemid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the number of the given item in the player&#039;s inventory.&lt;br /&gt;
&lt;br /&gt;
=== checkweight ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    checkweight(&amp;quot;itemname&amp;quot;, count)&lt;br /&gt;
    checkweight(itemid, count)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 0 if adding &amp;quot;count&amp;quot; of the item would put player above max weight, 1 if it would still be less than max weight.&lt;br /&gt;
Also returns 0 if item does not exist.&lt;br /&gt;
&lt;br /&gt;
=== getequipid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getequipid(equip_point)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the ID of the item in the given equip slot.&lt;br /&gt;
&lt;br /&gt;
equip_point is one of the equip_* constants&lt;br /&gt;
&lt;br /&gt;
=== getequipname ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getequipname(equip_point)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the name of the item in the given equip slot.&lt;br /&gt;
&lt;br /&gt;
equip_point is one of the equip_* constants&lt;br /&gt;
&lt;br /&gt;
=== getequipisequiped ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getequipisequiped(num)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 1 if the player currently has an item equipped in the slot.&lt;br /&gt;
&lt;br /&gt;
=== statusup ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    statusup bType;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Permanently increase a stat by one point.&lt;br /&gt;
&lt;br /&gt;
=== statusup2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    statusup2 bType, delta;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Permanently increase or decrease a stat.&lt;br /&gt;
&lt;br /&gt;
=== bonus ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    bonus bType, delta&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Temporarily increase a stat. For use in item scripts only.&lt;br /&gt;
&lt;br /&gt;
=== skill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    skill id, level[, flag = 1];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Grant a skill.&lt;br /&gt;
&lt;br /&gt;
flag==0: permanent skill&lt;br /&gt;
flag==1: temporary skill (item scripts only)&lt;br /&gt;
&lt;br /&gt;
(Untested)&lt;br /&gt;
&lt;br /&gt;
=== setskill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setskill id, level;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Grant a skill permanently.&lt;br /&gt;
&lt;br /&gt;
=== getskilllv ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getskilllv(skill)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the player&#039;s level of the given skill.&lt;br /&gt;
&lt;br /&gt;
=== getgmlevel ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getgmlevel()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the player&#039;s GM level.&lt;br /&gt;
&lt;br /&gt;
=== getopt2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getopt2()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the player&#039;s opt2 flags.&lt;br /&gt;
&lt;br /&gt;
=== setopt2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setopt2 flags;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the player&#039;s opt2 flags.&lt;br /&gt;
&lt;br /&gt;
=== checkoption ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    checkoption(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 1 if the player has any of the given (XOR&#039;ed) option bits. Usually only one is given.&lt;br /&gt;
&lt;br /&gt;
=== setoption ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setoption type&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the player&#039;s option flags exactly (not OR&#039;ing).&lt;br /&gt;
&lt;br /&gt;
=== savepoint ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    savepoint &amp;quot;mapname&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the player&#039;s save point. Used e.g. by Soul Menhirs, and during the time travel quest.&amp;lt;!-- Don&#039;t remove this just because you can&#039;t figure out how to start it from this end. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== openstorage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    openstorage;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Open the player&#039;s storage.&lt;br /&gt;
&lt;br /&gt;
=== getitemname ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getitemname(&amp;quot;itemname&amp;quot;)&lt;br /&gt;
    getitemname(itemid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the name of the item, or &amp;quot;Unknown Item&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== clearitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    clearitem;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Remove all items from a player&#039;s inventory.&lt;br /&gt;
&lt;br /&gt;
=== nude ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    nude;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unequip all items.&lt;br /&gt;
&lt;br /&gt;
=== hasitems ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    hasitems()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 1 if the player has any inventory, 0 otherwise.&lt;br /&gt;
&lt;br /&gt;
=== unequipbyid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    unequipbyid slot_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unequip whatever is in the slot&lt;br /&gt;
&lt;br /&gt;
=== getareadropitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getareadropitem(&amp;quot;mapname&amp;quot;, x0, y0, x1, y1, &amp;quot;itemname&amp;quot;[, delitems = 0]);&lt;br /&gt;
    getareadropitem(&amp;quot;mapname&amp;quot;, x0, y0, x1, y1, itemid[, delitems = 0]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count items on the floor in an area. If delitems, the items will be deleted as well.&lt;br /&gt;
&lt;br /&gt;
== Common Functions ==&lt;br /&gt;
These are not mostly not related to the RPG or the scripting language.&lt;br /&gt;
&lt;br /&gt;
=== rand ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    rand(range)&lt;br /&gt;
    rand(min, max)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In the first form, return a random number between 0 (inclusive) and range (exclusive). Return 0 if range is not positive.&lt;br /&gt;
In the second form, return a random number between min and max, inclusive. Min and max may be swapped.&lt;br /&gt;
&lt;br /&gt;
=== gettimetick ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    gettimetick(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return one of the ticks&lt;br /&gt;
&lt;br /&gt;
type==0 (or other): milliseconds since some point in time, wraps every 50 days.&lt;br /&gt;
type==1: time since midnight, UTC.&lt;br /&gt;
type==2: seconds since the epoch.&lt;br /&gt;
&lt;br /&gt;
You should almost always use type 2.&lt;br /&gt;
&lt;br /&gt;
=== gettime ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    gettime(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get a component of the time (UTC).&lt;br /&gt;
&lt;br /&gt;
1: second (0-59)&lt;br /&gt;
2: minute (0-59)&lt;br /&gt;
3: hour (0-23)&lt;br /&gt;
4: day of week (0-6)&lt;br /&gt;
5: day of month (1-31)&lt;br /&gt;
6: month (1-12)&lt;br /&gt;
7: year (1902-2038)&lt;br /&gt;
&lt;br /&gt;
=== gettimestr ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    gettimestr(&amp;quot;format&amp;quot;, length)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Frontend for strftime(3).&lt;br /&gt;
&lt;br /&gt;
This function may be removed for technical reasons, please construct the string manually using gettime().&lt;br /&gt;
&lt;br /&gt;
There is a script function that does this: callfunct &amp;quot;time_stamp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
== Timers and Events ==&lt;br /&gt;
These have to do with transfering control in ways that are not immediately obvious.&lt;br /&gt;
&lt;br /&gt;
The most common ones are initnpctimer or startnpctimer, stopnpctimer, and setnpctimer.&lt;br /&gt;
&lt;br /&gt;
=== doevent ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    doevent &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Manually invoke an NPC event.&lt;br /&gt;
&lt;br /&gt;
=== donpcevent ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    donpcevent &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Manually invoke an NPC event.&lt;br /&gt;
&lt;br /&gt;
=== addtimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    addtimer tick, &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Invoke an NPC event after a delay, for the attached NPC.&lt;br /&gt;
&lt;br /&gt;
This command does the same thing as areatimer, but for only the attached player.&lt;br /&gt;
&lt;br /&gt;
=== deltimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    deltimer &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This command is untested and might freeze the server.&lt;br /&gt;
&lt;br /&gt;
=== initnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    initnpctimer;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the NPC&#039;s attached timer to tick 0 and start it.&lt;br /&gt;
&lt;br /&gt;
This is equivalent to setnpctimer, 0; startnpctimer;&lt;br /&gt;
&lt;br /&gt;
=== stopnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    stopnpctimer;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop the NPC&#039;s attached timer.&lt;br /&gt;
&lt;br /&gt;
This DOES NOT do anything about the tick. But that&#039;s okay, you should normally be starting it with initnpctimer.&lt;br /&gt;
&lt;br /&gt;
=== startnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    startnpctimer;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Start the NPC&#039;s attached timer, without setting the tick.&lt;br /&gt;
&lt;br /&gt;
=== setnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setnpctimer tick;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the NPC&#039;s timer to a specific tick. Generally, this is only useful for tick 0.&lt;br /&gt;
&lt;br /&gt;
=== getnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getnpctimer(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get the current tick of an NPC&#039;s timer.&lt;br /&gt;
&lt;br /&gt;
type==0: timer event tick (like setnpctimer)&lt;br /&gt;
type==1: bool if it has a next timer.&lt;br /&gt;
type==2: timer amount&lt;br /&gt;
&lt;br /&gt;
=== cmdothernpc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    cmdothernpc &amp;quot;npc&amp;quot;, &amp;quot;Foo&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Invoke ::OnCommandFoo&lt;br /&gt;
&lt;br /&gt;
=== mobcount ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    mobcount(&amp;quot;mapname&amp;quot;, &amp;quot;event&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count the remaining mobs from the spawn with the given event. Has an offset of -1.&lt;br /&gt;
&lt;br /&gt;
=== areatimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    areatimer &amp;quot;mapname&amp;quot;, x0, y0, x1, y1, tick, &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Add a PC event timer to all players in the area.&lt;br /&gt;
&lt;br /&gt;
After &amp;quot;tick&amp;quot; milliseconds, the given NPC event will fire with each player as the RID.&lt;br /&gt;
&lt;br /&gt;
== Unsorted Commands ==&lt;br /&gt;
These are commands that still need sorting, please edit this page, see talk page for category (and subcategory?) suggestions.&lt;br /&gt;
&lt;br /&gt;
=== monster ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    monster &amp;quot;mapname&amp;quot;, x, y, &amp;quot;string&amp;quot;, class, count[, &amp;quot;event&amp;quot;];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Spawn monsters at a point. If you define an OnDead event using a trigger area then the event is shot only inside that area, hence the event is ignored when the monster is killed outside the trigger area.&lt;br /&gt;
&lt;br /&gt;
=== areamonster ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    areamonster &amp;quot;mapname&amp;quot;, x0, y0, x1, y1, &amp;quot;string&amp;quot;, class, count[, &amp;quot;event&amp;quot;];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Spawn monsters in an area. If you define an OnDead event using a trigger area then the event is shot only inside that area, hence the event is ignored when the monster is killed outside the trigger area.&lt;br /&gt;
&lt;br /&gt;
=== killmonster ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    killmonster &amp;quot;mapname&amp;quot;, &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kill monsters on a map.&lt;br /&gt;
&lt;br /&gt;
Unless it is &amp;quot;All&amp;quot;, &amp;quot;event&amp;quot; must match the one used at spawn time.&lt;br /&gt;
&lt;br /&gt;
If &amp;quot;All&amp;quot; is given, this function properly preserves permanently respawning monsters.&lt;br /&gt;
&lt;br /&gt;
=== killmonsterall ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    killmonsterall &amp;quot;mapname&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kill all monsters unconditionally.&lt;br /&gt;
&lt;br /&gt;
This command might prevent monsters from respawning. Instead use &amp;quot;killmonster&amp;quot; with &amp;quot;event&amp;quot; == &amp;quot;All&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== enablenpc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    enablenpc &amp;quot;name&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enable an NPC.&lt;br /&gt;
&lt;br /&gt;
=== disablenpc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    disablenpc &amp;quot;name&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Disable an NPC.&lt;br /&gt;
&lt;br /&gt;
=== hideoffnpc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    hideoffnpc &amp;quot;name&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
What does this do?&lt;br /&gt;
&lt;br /&gt;
=== hideonnpc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    hideonnpc &amp;quot;name&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
What does this do?&lt;br /&gt;
&lt;br /&gt;
=== setmapflagnosave ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setmapflagnosave &amp;quot;mapname&amp;quot;, &amp;quot;savemap&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the nosave flag and respawn location.&lt;br /&gt;
&lt;br /&gt;
=== setmapflag ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setmapflag &amp;quot;mapname&amp;quot;, flag;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set an arbitrary mapflag.&lt;br /&gt;
&lt;br /&gt;
=== removemapflag ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    removemapflag &amp;quot;mapname&amp;quot;, flag;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unset an arbitrary mapflag.&lt;br /&gt;
&lt;br /&gt;
=== getmapflag ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getmapflag(&amp;quot;mapname&amp;quot;, flag);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Check an arbitrary mapflag.&lt;br /&gt;
&lt;br /&gt;
=== pvpon ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    pvpon &amp;quot;mapname&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Allow PvP on a map.&lt;br /&gt;
&lt;br /&gt;
=== pvpoff ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    pvpoff &amp;quot;mapname&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Deny PvP on a map.&lt;br /&gt;
&lt;br /&gt;
=== emotion ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    emotion emote_index;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Show a smiley above the OID.&lt;br /&gt;
&lt;br /&gt;
=== getspellinvocation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getspellinvocation(&amp;quot;spell-identifier&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the #invocation used for a spell, or &amp;quot;...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== getanchorinvocation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getanchorinvocation &amp;quot;anchor-identifier&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the invocation used for a teleport anchor (?)&lt;br /&gt;
&lt;br /&gt;
=== strmobinfo ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    strmobinfo(num, class)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Info about a type of mob:&lt;br /&gt;
num==1: name&lt;br /&gt;
num==2: jname&lt;br /&gt;
num==3: lv&lt;br /&gt;
num==4: maxhp&lt;br /&gt;
num==5: maxsp&lt;br /&gt;
num==6: base_exp&lt;br /&gt;
num==7: job_exp&lt;br /&gt;
&lt;br /&gt;
Note that only types 1 and 2 actually return strings, the rest return integers&lt;br /&gt;
&lt;br /&gt;
=== specialeffect ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    specialeffect type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display a special effect on the OID.&lt;br /&gt;
&lt;br /&gt;
Same as &amp;quot;misceffect&amp;quot;, but does not fallback when there is no OID.&lt;br /&gt;
&lt;br /&gt;
=== specialeffect2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    specialeffect2 type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Same as &amp;quot;misceffect&amp;quot;, but works when there is an OID.&lt;br /&gt;
&lt;br /&gt;
=== gmcommand ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    gmcommand &amp;quot;@command maybe with arguments&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Run a GM command, at level 99.&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=26145</id>
		<title>Classic:TmwAthena Scripting Standards</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=26145"/>
		<updated>2013-04-10T10:23:04Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: /* Code Formatting */  Add section about NPC dialogs.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to standardize the eAthena coding. Any suggestions are welcome to be posted on the discussion page before editing.&lt;br /&gt;
=Code Formatting=&lt;br /&gt;
== Indentation ==&lt;br /&gt;
* Code is indented with four spaces. &lt;br /&gt;
* Code in the same block should have the same indentation. &lt;br /&gt;
* Labels have no indentation. &lt;br /&gt;
* Menu options are on their own lines and are indented further. &lt;br /&gt;
Example:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
* When using an if-statement, there should be a line break after the condition and the conditional command should be indented further. An exception to this is a series of if-statements at the beginning of a major code block which use gotos to jump to the correct position in the script. In this case the goto should be in the same line as the if-statement.&lt;br /&gt;
Example:&lt;br /&gt;
 // if-statement and conditional command in the same line, gotos aligned&lt;br /&gt;
 if (@quest &amp;gt;= 3) goto L_Done;&lt;br /&gt;
 if (@quest == 2) goto L_Progress;&lt;br /&gt;
 if (@quest == 1) goto L_Question;&lt;br /&gt;
 &lt;br /&gt;
 // conditional command in the next line and indented further&lt;br /&gt;
 if (BaseLevel &amp;lt; 40)&lt;br /&gt;
     set @cost, 100;&lt;br /&gt;
&lt;br /&gt;
== Whitespaces==&lt;br /&gt;
In many places whitespaces can increase readability. Examples are&lt;br /&gt;
* When concatenating text and variables:&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot; + strcharinfo(0) + &amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
instead of&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot;+strcharinfo(0)+&amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
* When assigning values to variables:&lt;br /&gt;
 set @var, 3;&lt;br /&gt;
instead of&lt;br /&gt;
 set @var,3;&lt;br /&gt;
* In menus:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
instead of&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;,L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;,L_No;&lt;br /&gt;
&lt;br /&gt;
== Code Blocks ==&lt;br /&gt;
* Code blocks should be separated from the others in a dinstinct way: insert a blank line between code blocks. &lt;br /&gt;
* Individual blocks should be together No blank lines within a block. &lt;br /&gt;
* The opening brackets should be at the end of the parent line, not in a new line; the closing ones should be in a line of their own.&lt;br /&gt;
* A &#039;menu&#039; must not be in the body of an if statement. Instead, goto a new block for the menu, or negate the logic and goto somewhere else if the label should not be shown.&lt;br /&gt;
* The &#039;next&#039; command goes at the end of a block (before a goto or fallthrough), never at the beginning. Make sure &#039;next&#039; is never followed by something that leads to a &#039;close&#039; without intervening text.&lt;br /&gt;
&lt;br /&gt;
==Labels and Subfunctions==&lt;br /&gt;
* Labels should be named in this way: L_CamelCase&lt;br /&gt;
* Subfunctions should be named in this way: S_CamelCase&lt;br /&gt;
* Labels should always start with L_, except those that act as a subfunction, which should start with S_&lt;br /&gt;
* Newline before every label&lt;br /&gt;
* No newline after a label&lt;br /&gt;
* There must not be a fallthrough or goto to a subfunction label.&lt;br /&gt;
* A subfunction label must not goto a normal label. It may, however, goto another label that is specific to that subfunction, and eventually reach a return.&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
At the beginning of a script file there should be documented &lt;br /&gt;
* who is the author&lt;br /&gt;
* the purpose of the script&lt;br /&gt;
* which variables are used and what&#039;s their purpose&lt;br /&gt;
* any additional information that can help to understand the script&lt;br /&gt;
Example:&lt;br /&gt;
 // Author: devxy&lt;br /&gt;
 // This file contains the NPC John, who is part of the Example quest.&lt;br /&gt;
 // Quest states are saved in Quest_Example.&lt;br /&gt;
 // State 1: started the quest&lt;br /&gt;
 // State 2: did the next step&lt;br /&gt;
 [...]&lt;br /&gt;
&lt;br /&gt;
Within the script there should be comments if there are parts which might be difficult to understand.&lt;br /&gt;
&lt;br /&gt;
In some of the older scripts there are boxed comments used like this:&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
 //# NPC John - By Smith                                                           #&lt;br /&gt;
 //#                                                                               #&lt;br /&gt;
 //#  ...                                                                          #&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
Don&#039;t use them in new scripts.&lt;br /&gt;
&lt;br /&gt;
== NPC Dialogs ==&lt;br /&gt;
In the following example our NPC dialog formatting guidelines are explained.&lt;br /&gt;
     mes &amp;quot;[Example NPC Olaf]&amp;quot;;&lt;br /&gt;
     mes &amp;quot;\&amp;quot;When I start speaking my name is put in square brackets, and my spoken text here is in quotation marks.\&amp;quot;&amp;quot;;&lt;br /&gt;
     next;&lt;br /&gt;
     mes &amp;quot;\&amp;quot;The next between my previous line and this one interrupted my speaking, so I started with new quotation marks.&amp;quot;;&lt;br /&gt;
     mes &amp;quot;But didn&#039;t close them in the same line, because I continue to speak here.&amp;quot;;&lt;br /&gt;
     mes &amp;quot;A new message command can be used to have a line break in the dialog without interrupting the speaking.&amp;quot;;&lt;br /&gt;
     mes &amp;quot;At the end I close the quotation marks again.\&amp;quot;&amp;quot;;&lt;br /&gt;
     next;&lt;br /&gt;
     mes &amp;quot;Olaf stops speaking and scratches his head. This is a descriptive text, so it isn&#039;t put into quotation marks.&amp;quot;;&lt;br /&gt;
     next;&lt;br /&gt;
     mes &amp;quot;[Example NPC Olaf]&amp;quot;;&lt;br /&gt;
     mes &amp;quot;\&amp;quot;Now that I start speaking again, I need my name in brackets again before my actual text starts, because something else happened in between.&amp;quot;;&lt;br /&gt;
     mes &amp;quot;It isn&#039;t that difficult, right?\&amp;quot;&amp;quot;;&lt;br /&gt;
     menu&lt;br /&gt;
         &amp;quot;I agree.&amp;quot;, -,&lt;br /&gt;
         &amp;quot;(Leave.)&amp;quot;, L_Close;&lt;br /&gt;
     mes &amp;quot;[Example NPC Olaf]&amp;quot;;&lt;br /&gt;
     mes &amp;quot;\&amp;quot;It&#039;s the same after there was a menu with the player saying or doing something, again I put my name into sqaure brackets before starting to speak.\&amp;quot;&amp;quot;;&lt;br /&gt;
     next;&lt;br /&gt;
     mes &amp;quot;\&amp;quot;In the menu you can see that something the player says isn&#039;t put into quotation marks, but just as plain text.&amp;quot;;&lt;br /&gt;
     mes &amp;quot;And an action the player takes is put into usual brackets.\&amp;quot;&amp;quot;;&lt;br /&gt;
     goto L_Close;&lt;br /&gt;
 &lt;br /&gt;
 L_Close:&lt;br /&gt;
     close;&lt;br /&gt;
&lt;br /&gt;
=Variables=&lt;br /&gt;
==Document Variables==&lt;br /&gt;
in every file, document every variable as one of:&lt;br /&gt;
&lt;br /&gt;
* #  account variable (prefix #) (note that there are also ## variable which didn&#039;t work in the stable version of the server)&lt;br /&gt;
*    permanent player variable (no prefix)&lt;br /&gt;
* @  temporary player variable (prefix @) - used after the script close;s or end;s.&lt;br /&gt;
* @  dynamic player variable (prefix @) - passed into or out of callsub or callfunc&lt;br /&gt;
* @  lexical (local) player variable (prefix @) - used only within the function (scripthelp.txt documents that &amp;quot;.@&amp;quot; means this but I don&#039;t know if that works)&lt;br /&gt;
* @  local constant (prefix @) - not dependent on the player, used only within the function. e.g. lots of @QUEST_FOO_{SHIFT,MASK}&lt;br /&gt;
* $  global permanent variable (prefix $) (I&#039;m not sure if we have any of these right now)&lt;br /&gt;
* $  npc permanent variable (prefix $) same as above but only used by one NPC&lt;br /&gt;
* $  global temporary variable (prefix $@)&lt;br /&gt;
* $@ npc temporary variable (prefix $@) same as above but only used by one NPC, scripthelp.txt mentions prefix &amp;quot;.&amp;quot; but I don&#039;t know if that works&lt;br /&gt;
*    special variable (in db/const.txt with a 1 following)&lt;br /&gt;
*    global constant (in const.txt)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If we use a consistent method of documenting these, we can then generate a list of all variables by type.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Variables initialization==&lt;br /&gt;
Check for troublesome arrays:&lt;br /&gt;
A troublesome array is defined as an array that is not&lt;br /&gt;
*initialized all at once&lt;br /&gt;
*initialized by appending elements to the end, for use in a menu&lt;br /&gt;
 Nothing needs to be done, merely document them. I want this information at hand when I design the new scripting language to minimize conversion pains.&lt;br /&gt;
 I wouldn&#039;t be surprised if there were no troublesome arrays at all. If there are only a couple it might be worth refactoring the code to remove them, but that might be a  high-level decision which is beyond the scope of this proposal.&lt;br /&gt;
&lt;br /&gt;
Set dynamic and local @variables to 0 before close;&lt;br /&gt;
==Naming Variables==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using as little variables as you need==&lt;br /&gt;
So there are some quests, which require lots of variables.&lt;br /&gt;
Think of monster oil quest, Oric and Warum quest etc.&lt;br /&gt;
&lt;br /&gt;
This can often be done by bitmasking: &lt;br /&gt;
One variable has 32 bits. So a variabe can store 2^32 different numbers: 4294967296&lt;br /&gt;
&lt;br /&gt;
But sometimes you only need numbers from 0 to 15, but more of these variables.&lt;br /&gt;
but numbers in range 0 to 15 can be stored in 4 bits ( 2^4 = 16 different numbers)&lt;br /&gt;
&lt;br /&gt;
Here is an example how to use bitmasking:&lt;br /&gt;
[[Media:Tester.txt]]&lt;br /&gt;
== Defining Map Objects ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These sections describe how to define map objects.&lt;br /&gt;
&lt;br /&gt;
=== Warp Definitions ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;Shouldn&#039;t be done manually.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
Warps are what move players between maps. They can also be used to move players around a single map, if needed. Warps are defined like this:&lt;br /&gt;
&lt;br /&gt;
 map1,startX,startY|warp|name|width,height,map2,endX,endY&lt;br /&gt;
&lt;br /&gt;
Key:&lt;br /&gt;
{|&lt;br /&gt;
|map1  ||the starting map&lt;br /&gt;
|-&lt;br /&gt;
|startX||the x-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|startY||the y-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|name  ||the name of the warp, unused but must be defined&lt;br /&gt;
|-&lt;br /&gt;
|width ||the width of the warp&lt;br /&gt;
|-&lt;br /&gt;
|height||the height of the warp&lt;br /&gt;
|-&lt;br /&gt;
|map2  ||the ending map&lt;br /&gt;
|-&lt;br /&gt;
|endX  ||the x-coordinate of the tile the player will end up on&lt;br /&gt;
|-&lt;br /&gt;
|endY  ||the y-coordinate of the tile the player will end up on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Width and height are described in detail here: [[EAthena Scripting Standards/Warp Details|Warp Details]].&lt;br /&gt;
&lt;br /&gt;
=== Monster Definitions ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;Shouldn&#039;t be done manually.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
Monsters are defined like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;|monster|&amp;lt;name&amp;gt;|&amp;lt;mobID&amp;gt;,&amp;lt;count&amp;gt;,&amp;lt;spawn1&amp;gt;,&amp;lt;spawn2&amp;gt;,{&amp;lt;eventcode&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|width      ||the tile width of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|name       ||the name of the mob, unused but must be defined. &#039;&#039;&#039;DO NOT&#039;&#039;&#039; use the keywords such as &amp;quot;spawn&amp;quot; in this name to avoid conflict with other game systems (magic for example)&lt;br /&gt;
|-&lt;br /&gt;
|mobID      ||the mob identifier of the desired monster (in the monster db)the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|count      ||the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|spawn1     ||the minimum delay between successive spawns (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|spawn2     ||the minimum delay between death and respawn (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
A detailed description of position and area can be found here: [[EAthena Scripting Standards/Mob Details|Mob Details]].&lt;br /&gt;
&lt;br /&gt;
=== NPC Definitions ===&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;triggerX&amp;gt;,&amp;lt;triggerY&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|facing     ||Direction the NPC faces to. &#039;&#039;&#039;It must be set to 0&#039;&#039;&#039; in TMW&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|Name       ||the name of the NPC&lt;br /&gt;
|-&lt;br /&gt;
|spriteID   ||the mob identifier of the desired NPC. Sprite ID&lt;br /&gt;
|-&lt;br /&gt;
|triggerX   ||&lt;br /&gt;
|-&lt;br /&gt;
|triggerY   ||&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
* Server side :&lt;br /&gt;
::NPC definitions (script) are usually stored as : &amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/&amp;lt;NPC Name&amp;gt;.txt or in the file :&amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/npc.txt&lt;br /&gt;
* Client side :&lt;br /&gt;
::The NPC is associated with a sprite (the image that will appear in the game), and a XML file which tells the client some display parameters.&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.png&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.xml&amp;lt;br/&amp;gt;The NPC spriteID is linked to graphic files and XML in the file : (tmwa-client-data/)npcs.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/NPC Details|NPC Details]]. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Script Functions ==&lt;br /&gt;
 function|script|&amp;lt;function name&amp;gt;|&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Actual script functions are stored or imported in the files : (tmwa-server-data/)world/map/npc/functions/&amp;lt;function name&amp;gt;.txt, regardless rhey are called from a Map, NPC, Mob or item.&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/function Details|function Details]]. --&amp;gt;&lt;br /&gt;
==Script Loading==&lt;br /&gt;
The main script import file is:[https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/scripts.conf (tmwa-server-data/)world/map/npc/scripts.conf] &amp;lt;br/&amp;gt;&lt;br /&gt;
It loads [https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/_import.txt (tmwa-server-data/)world/map/npc/_import.txt] which imports all NPC scripts wich are stored under the respective map name folders, usually under NPC name.&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
== Open a chest and get reward ==&lt;br /&gt;
An example is given by a quest to get a key for a chest (in fact 3 keys):&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:850px;&amp;quot; border=0 cellspacing=&amp;quot;10&amp;quot; &lt;br /&gt;
|-valign=&amp;quot;Top&amp;quot; &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
// A treasure chest. You need three keys to open it.&lt;br /&gt;
//&lt;br /&gt;
// TMW_Quest (document variable here)&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
002-4.gat,93,37,0|script|Treasure|111,{&lt;br /&gt;
&lt;br /&gt;
    if (TMW_Quest &amp;gt;= 38) goto L_Finished;&lt;br /&gt;
&lt;br /&gt;
    mes &amp;quot;There is a chest here.&amp;quot;;&lt;br /&gt;
    mes &amp;quot;Do you want to try to open it?&amp;quot;;&lt;br /&gt;
    next;&lt;br /&gt;
    menu&lt;br /&gt;
        &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
        &amp;quot;No.&amp;quot;, -;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Yes:&lt;br /&gt;
    if(countitem(&amp;quot;TreasureKey&amp;quot;) &amp;lt; 3)&lt;br /&gt;
        goto L_Not_Enough;&lt;br /&gt;
    getinventorylist;&lt;br /&gt;
    if (@inventorylist_count == 100 &amp;amp;&amp;amp; countitem(&amp;quot;TreasureKey&amp;quot;) &amp;gt; 3)&lt;br /&gt;
        goto L_TooMany;&lt;br /&gt;
    mes &amp;quot;You opened the chest and found a short bow!&amp;quot;;&lt;br /&gt;
    delitem &amp;quot;TreasureKey&amp;quot;, 3;&lt;br /&gt;
    getitem &amp;quot;ShortBow&amp;quot;, 1;&lt;br /&gt;
    set TMW_Quest, 38;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Not_Enough:&lt;br /&gt;
    mes &amp;quot;It seems that you do not have the right key for this chest yet...&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Finished:&lt;br /&gt;
    mes &amp;quot;You have already opened this chest.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_TooMany:&lt;br /&gt;
    mes &amp;quot;You do not have enough room to loot this chest. Maybe you should try again later.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
This script starts with describing the NPC (the chest, NPC sprite 111) and its location (map 002-4 X=93, Y=37, in tiles from top left of the map). Then follows what happens on activation:&lt;br /&gt;
First, the variable &#039;&#039;&amp;quot;TMW_Quest&amp;quot;&#039;&#039; is checked to know if the player already accomplished the quest &amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;(the variable should be documented)&#039;&#039;&#039;&amp;lt;/span&amp;gt;, If he has the script continues at label &#039;&#039;L_Finished&#039;&#039;, the player is reminded fe alredy accomplished the task and script finishes, if not the scrip continues. A message is shown (mes), then an option dialog (menu) is displayed with two possible answers : &amp;quot;Yes.&amp;quot; or &amp;quot;No.&amp;quot;. If the player answers &amp;quot;No.&amp;quot; the script stops (close;); if he answers &amp;quot;Yes.&amp;quot; the script continues at label &#039;&#039;L_Yes&#039;&#039;. Now player is checked to know if he has at least 3 keys, if not script branches to label &#039;&#039;L_Not_Enough&#039;&#039; tells the player he  &amp;quot;has not the right key&amp;quot; and script closes. If he has keys enough, his inventory list is retrieved by the built-in function &amp;quot;getinventorylist&amp;quot; and it&#039;s content is checked to know if the player will have room enough to store the reward after the 3 keys use. If not, script goes to label &#039;&#039;L_TooMany&#039;&#039; and script close after a warning message, If yes 3 keys are deleted in player&#039;s inventory,  he gets the reward: a Short Bow and the variable TMW_Quest is set to 38.&lt;br /&gt;
&lt;br /&gt;
For more examples of the current system, check out the current scripts in use by the server. Beware though, this could affect your enjoyment of the game as it does spoil some of the mystery. Here&#039;s a link to git so you can view them in your browser:&lt;br /&gt;
&lt;br /&gt;
https://github.com/themanaworld/tmwa-server-data/tree/master/world/map/npc&lt;br /&gt;
&lt;br /&gt;
Note that anything said by an NPC should be put in double quotes (&amp;quot;). You can do that like this: &amp;quot;&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039;Hello!&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039; she said.&amp;quot;&lt;br /&gt;
=References=&lt;br /&gt;
* [[EAthena Scripting Basics]]&lt;br /&gt;
* [[EAthena Scripting Reference]]&lt;br /&gt;
* [http://forums.themanaworld.org/viewtopic.php?f=13&amp;amp;t=13653 script cleanup/scripting standards proposal]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=TMW_Team&amp;diff=26074</id>
		<title>TMW Team</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=TMW_Team&amp;diff=26074"/>
		<updated>2013-04-02T17:37:49Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: /* Members */ Update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Status Under Construction|See: [http://forums.themanaworld.org/viewtopic.php?p=132138#p132138 Forum TMW organization structure - TMW Committee]}}&lt;br /&gt;
&lt;br /&gt;
*See: [http://forums.themanaworld.org/viewtopic.php?p=132138#p132138 Forum TMW organization structure - TMW Committee]&lt;br /&gt;
*The Name is not sure TMW Committee or TMW Council?&lt;br /&gt;
&lt;br /&gt;
==Structure and Roles==&lt;br /&gt;
&lt;br /&gt;
# The purpose of the The Mana World Committee is to make or delegate decisions regarding the running of The Mana World.&lt;br /&gt;
#There are different scopes under The Mana World Committee&#039;s authority.  Some may require involvement of those who are not members of The Mana World Committee, but have the required knowledge or experience.  The Mana World Committee members are pulled from the following categories of contributors:&lt;br /&gt;
## &#039;&#039;Game Masters&#039;&#039;.  Game Masters are responsible for enforcing the rules of the game, in game.  Secondarily, Game Masters act as a bridge from the players to development team.  All Game Masters are members of The Mana World Committee. To become a Game Master, a person must be voted in by the player community and approved by The Mana World Committee.&lt;br /&gt;
## &#039;&#039;Server Admins&#039;&#039;.  Admins are those that have ssh access to the server and are responsible for server restarts, maintenance, and the general health of the server overall.  Forum Admin and Wiki Admin are subcategories of this group. Our new server host, who wishes to remain anonymous, also has input regarding these matters but is not considered a member of The Mana World Committee.  To become a member of this group, a player or contributor must first show the appropriate knowledge, willingness to devote time, and must be unanimously approved by The Mana World Committee.&lt;br /&gt;
## &#039;&#039;Programmers&#039;&#039;.  Programmers are responsible for making changes to the codebase.  Not all members of the Programmer group are admitted to The Mana World Committee.  To become a member of this group, a player or contributor must show appropriate knowledge, contribute to the project and learn and gain &#039;git&#039; access.&lt;br /&gt;
## &#039;&#039;Content Creators&#039;&#039;.  Content Creators are responsible for adding quests, items and monsters either via scripting, mapping, sound or pixel art.   Content Creation has Council and #themanaworld-event as private domains; and #themanaworld-dev and other forums as public.  Not all members of Content Creators are members of The Mana World Committee.  To become a member of this group, a player or contributor must show appropriate skill, contribute to the project and is encouraged to learn and gain &#039;git&#039; access.&lt;br /&gt;
# A newly created role in The Mana World Commitee will be that of &#039;&#039;Advisor&#039;&#039;.  TMWC Advisors are those contributors or GHP members that have stepped away from the game or development, yet offer insight, advice and/or periodic assistance with game decisions and development, while not directly taking decisions.&lt;br /&gt;
==Members==&lt;br /&gt;
&lt;br /&gt;
The current members of The Mana World Committee are as follows:&lt;br /&gt;
&lt;br /&gt;
* Big Crunch - [[Game Masters|Game Master]]&lt;br /&gt;
* Tiana - [[Game Masters|Game Master]]&lt;br /&gt;
* prsm - [[Game Masters|Game Master]]&lt;br /&gt;
* [[User:Narus|Narus]] - [[Game Masters|Game Master]]&lt;br /&gt;
* mrgrey - [[Game Masters|Game Master]]&lt;br /&gt;
* Silent Dawn - [[Game Masters|Game Master]]&lt;br /&gt;
* [[User:o11c|o11c]] - Programmer (Lead) and Server Administrator&lt;br /&gt;
* [[User:4144|4144]] - Programmer and Client Developer&lt;br /&gt;
* [[User:Frost|Frost]] - Server Administrator (Main)&lt;br /&gt;
* [[User:Jenalya|Jenalya]] - Content Creator (Lead) and Server Administrator&lt;br /&gt;
* [[User:V0id|V0id]] - Content Creator&lt;br /&gt;
* [[User:Yubaba|Chicka-Maria/Yubaba]] - Content Creator&lt;br /&gt;
* [[User:Crush|Crush]] - (Forum administrator, wiki [[TheManaWorld:Bureaucrats|bureaucrat]] &amp;amp; [[TheManaWorld:Administrators|administrator]])&lt;br /&gt;
&lt;br /&gt;
The Advisors group is as follows:&lt;br /&gt;
&lt;br /&gt;
* [[User:Freeyorp|Freeyorp]] (Former Administrator and developer, forum administrator)&lt;br /&gt;
* [[User:Bjorn|Bjorn]] (Former Administrator and developer, wiki [[TheManaWorld:Bureaucrats|bureaucrat]] &amp;amp; [[TheManaWorld:Administrators|administrator]])&lt;br /&gt;
* [[User:ElvenProgrammer|ElvenProgrammer]] (project founder)&lt;br /&gt;
* [[User:Rotonen|Rotonen]] (Former developer)&lt;br /&gt;
* [[User:AnonDuck|AnonDuck]] (Former developer)&lt;br /&gt;
* [[User:Wombat|Wombat]] (Former Content leader, developer)&lt;br /&gt;
* [[User:irukard|irukard]] (Former developer)&lt;br /&gt;
&lt;br /&gt;
More advisors may be added or removed in the future, pending contact.&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Projects_and_Teams&amp;diff=25943</id>
		<title>Development:Projects and Teams</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Projects_and_Teams&amp;diff=25943"/>
		<updated>2013-03-28T15:05:44Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Add project &amp;#039;Tulimshar expansion&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;font-size:250%&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&#039;&#039;&#039;Projects&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;Here is a list of the current projects under development. You can see the list of developers [[Developers|here]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Project&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Team&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Description&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Monster Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Item Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Map Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | New NPCs&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Status&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Trade City [[Argaes]]&#039;&#039;&#039;&lt;br /&gt;
| [[User:V0id|V0id]]&lt;br /&gt;
| Assassin Guild quest (Miriam follow-up) in Trade City&lt;br /&gt;
| &lt;br /&gt;
| Assassin Set&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Scenario writing.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;New Desert Area ([[Tonori]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:Yubaba|Yubaba]]&lt;br /&gt;
| Creating Desert maps, area further from Tulimshar and new quests.&lt;br /&gt;
| Snake Lord, Desert Monsters&lt;br /&gt;
| Snake Skin Armour, Desert bow&lt;br /&gt;
| &lt;br /&gt;
| Desert/Egyptian NPCs&lt;br /&gt;
| Mapping and quest writing in progress, tileset art needed&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;East [[Argaes]]&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Tux|tux9th]]&lt;br /&gt;
| Extension to the east, including farmlands, port-city, waterfall area&lt;br /&gt;
| Farmmobs&lt;br /&gt;
| TBA&lt;br /&gt;
| 057 - 067&lt;br /&gt;
| Farm NPCs&lt;br /&gt;
| Mapping in progress, tileset art needed&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Orum and Waric Continuation&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Tux|tux9th]], mrgrey&lt;br /&gt;
| Continuation of the Orum and Waric quest.&lt;br /&gt;
| Evil Woodland monsters&lt;br /&gt;
| Rose hat, magical flowers&lt;br /&gt;
| 055, 056&lt;br /&gt;
| &lt;br /&gt;
| Scripting in progress&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Barbarian Village ([[Kaizei]]).&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Tux|tux9th]]&lt;br /&gt;
| A village of barbarians yet to be named.&lt;br /&gt;
| TBA&lt;br /&gt;
| TBA&lt;br /&gt;
| 049, 050, 053, 054&lt;br /&gt;
| Barbarian NPCs&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Lumber Camp ([[Argaes]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:o11c|o11c]]&lt;br /&gt;
| Southern [[Argaes]] expansion.  Quests include: Help the Lumberjacks/Save the Dell (a choice); the Naturalist&#039;s Studies; ?&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 035-039&lt;br /&gt;
|&lt;br /&gt;
| on hold, graphics missing?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[[Thermin]] ([[Kaizei]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Alastrim|Alastrim]]&lt;br /&gt;
| [[Kaizei]] area town.  Once a large town that mined the firerock stones beneath the town, it was devastated by a poison gas leak.  During the crisis to survive, they collaborated on several new technologies to both defend the town from the rampaging Yeti surrounding the town and to find ways to get back to using the mine, despite the poison gas problem.&lt;br /&gt;
|&lt;br /&gt;
| GasMask, Monocle&lt;br /&gt;
|&lt;br /&gt;
| Gasmask steam punk NPC, clockwork armor NPC, barbarian NPCs, [http://forums.themanaworld.org/viewtopic.php?f=8&amp;amp;t=12839 generic pose NPCs]&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[[Thermin]] ([[Kaizei]]) Poisonous Mine&#039;&#039;&#039;&lt;br /&gt;
| [[User:Alastrim|Alastrim]]&lt;br /&gt;
| Poison gas mine.  A constant moving adventure with puzzles and traps to solve and disarm along the way.  Suggestions: Barriers of some type, puzzle mini-games (input code words chosen at random, arrange items, push buttons in a certain order, kill a certain monster on the map), a poison map flag, the use of event monster scripting instead of _mobs.txt spawning.&lt;br /&gt;
| Ice Skull, Purple Slime, Acid Goblin, Longjohn, Serqet, Fire Lizard&lt;br /&gt;
| Firerock,&lt;br /&gt;
| 043&lt;br /&gt;
|&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Crypt&#039;&#039;&#039;&lt;br /&gt;
| Skipy,[[User:Yubaba|Yubaba]]&lt;br /&gt;
| Reaper boss quest&lt;br /&gt;
| Reaper, scythe, the lost, ball lightning, vampire bat&lt;br /&gt;
| Death&#039;s Hand, Reaper blade&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| tileset incomplete, art developer inactive.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Ancient Amulets&#039;&#039;&#039;&lt;br /&gt;
| [[User:Alastrim|Alastrim]]&lt;br /&gt;
| Five quests leading to different Four-Leaf Amulets of different strengh.&lt;br /&gt;
| Shadow Elemental (1st Quest)&lt;br /&gt;
| Four-Leaf Amulets&lt;br /&gt;
| 024-3 to 024-8&lt;br /&gt;
| Explorer&lt;br /&gt;
| on hold, developer inactive&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Kageville&#039;&#039;&#039;&lt;br /&gt;
| [[User:Kage|Kage]]&lt;br /&gt;
| TBA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 040&lt;br /&gt;
|&lt;br /&gt;
| on hold, developer inactive&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Hetchel the silk weaver [373] ([[Tulimshar]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:bh28|bh28]]&lt;br /&gt;
| Lora Tay says she can sew Silk Robes provided you give her some silk sheets.and that Hetchel in Tulimshar can weave them for you.&lt;br /&gt;
| &lt;br /&gt;
| Silk Sheet [881], dyed Silk Sheets [2250 to 2259]&lt;br /&gt;
| 021-1&lt;br /&gt;
| Hetchel (373)&lt;br /&gt;
| Hetche graphics update, 021-2 : add weaver workshop&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Tulimshar expansion&#039;&#039;&#039;&lt;br /&gt;
| wushin&lt;br /&gt;
| &lt;br /&gt;
| Caboo&lt;br /&gt;
| &lt;br /&gt;
| 068-073&lt;br /&gt;
| &lt;br /&gt;
| Mapping in progress, scenario writing&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:250%&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&#039;&#039;&#039;Teams&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;Here is a list of all the different developer teams. You can see the list of developers [[Developers|here]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Name&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Member(s)&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Role&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;The Mana World - Athena Leader&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]]&lt;br /&gt;
| Coordinates tmwA.  Network and delegate tasks.  Increase participation.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Content Lead&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]]&lt;br /&gt;
| Coordinates tmwA General Content (non-sound, non-art).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Source Lead&#039;&#039;&#039;&lt;br /&gt;
| [[User:o11c|o11c]]&lt;br /&gt;
| Adjusts and coordinates Athena source code.  Meets content team requests for source code adjustments to further content.  Research and development of Athena source code and scripting conventions.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Sound Lead&#039;&#039;&#039;&lt;br /&gt;
| [[User:Yubaba|Yubaba]]&lt;br /&gt;
| Determines if sound on the forums is ready for the game.  Encourages people to get involved in sound and encourage players to try their hand at sound.  Attempts to meet the [REQ]s of content developers as well as creates any sound that may seem to add to the project, from monsters to maps to battle and beyond.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pixel Artists&#039;&#039;&#039;&lt;br /&gt;
| Nami, [[User:Salmondine|Salmondine]]&lt;br /&gt;
| Determines if art is ready for the game.  Helps categorize art topics.  Encourage artists contribute to the game and encourage players to try their hand at art.  Understand content priorities and attempt to steer art to meeting art deadlines.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Mapping Lead&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
| Reviews maps for the game.  Check for proper use of black border, collision tiles, and application of tiles onto the correct layers they belong on.  Fix mapping errors.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Projects_and_Teams&amp;diff=25789</id>
		<title>Development:Projects and Teams</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Projects_and_Teams&amp;diff=25789"/>
		<updated>2013-03-19T14:05:59Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Add some notes about art needed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;font-size:250%&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&#039;&#039;&#039;Projects&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;Here is a list of the current projects under development. You can see the list of developers [[Developers|here]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Project&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Team&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Description&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Monster Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Item Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Map Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | New NPCs&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Status&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Trade City [[Argaes]]&#039;&#039;&#039;&lt;br /&gt;
| [[User:V0id|V0id]]&lt;br /&gt;
| Assassin Guild quest (Miriam follow-up) in Trade City&lt;br /&gt;
| &lt;br /&gt;
| Assassin Set&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Scenario writing.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;New Desert Area ([[Tonori]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:Yubaba|Yubaba]]&lt;br /&gt;
| Creating Desert maps, area further from Tulimshar and new quests.&lt;br /&gt;
| Snake Lord, Desert Monsters&lt;br /&gt;
| Snake Skin Armour, Desert bow&lt;br /&gt;
| &lt;br /&gt;
| Desert/Egyptian NPCs&lt;br /&gt;
| Mapping and quest writing in progress, tileset art needed&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;East [[Argaes]]&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Tux|tux9th]]&lt;br /&gt;
| Extension to the east, including farmlands, port-city, waterfall area&lt;br /&gt;
| Farmmobs&lt;br /&gt;
| TBA&lt;br /&gt;
| 057 - 067&lt;br /&gt;
| Farm NPCs&lt;br /&gt;
| Mapping in progress, tileset art needed&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Orum and Waric Continuation&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Tux|tux9th]], mrgrey&lt;br /&gt;
| Continuation of the Orum and Waric quest.&lt;br /&gt;
| Evil Woodland monsters&lt;br /&gt;
| Rose hat, magical flowers&lt;br /&gt;
| 055, 056&lt;br /&gt;
| &lt;br /&gt;
| Scripting in progress&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Barbarian Village ([[Kaizei]]).&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Tux|tux9th]]&lt;br /&gt;
| A village of barbarians yet to be named.&lt;br /&gt;
| TBA&lt;br /&gt;
| TBA&lt;br /&gt;
| 049, 050, 053, 054&lt;br /&gt;
| Barbarian NPCs&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Lumber Camp ([[Argaes]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:o11c|o11c]]&lt;br /&gt;
| Southern [[Argaes]] expansion.  Quests include: Help the Lumberjacks/Save the Dell (a choice); the Naturalist&#039;s Studies; ?&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 035-039&lt;br /&gt;
|&lt;br /&gt;
| on hold, graphics missing?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[[Thermin]] ([[Kaizei]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Alastrim|Alastrim]]&lt;br /&gt;
| [[Kaizei]] area town.  Once a large town that mined the firerock stones beneath the town, it was devastated by a poison gas leak.  During the crisis to survive, they collaborated on several new technologies to both defend the town from the rampaging Yeti surrounding the town and to find ways to get back to using the mine, despite the poison gas problem.&lt;br /&gt;
|&lt;br /&gt;
| GasMask, Monocle&lt;br /&gt;
|&lt;br /&gt;
| Gasmask steam punk NPC, clockwork armor NPC, barbarian NPCs, [http://forums.themanaworld.org/viewtopic.php?f=8&amp;amp;t=12839 generic pose NPCs]&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[[Thermin]] ([[Kaizei]]) Poisonous Mine&#039;&#039;&#039;&lt;br /&gt;
| [[User:Alastrim|Alastrim]]&lt;br /&gt;
| Poison gas mine.  A constant moving adventure with puzzles and traps to solve and disarm along the way.  Suggestions: Barriers of some type, puzzle mini-games (input code words chosen at random, arrange items, push buttons in a certain order, kill a certain monster on the map), a poison map flag, the use of event monster scripting instead of _mobs.txt spawning.&lt;br /&gt;
| Ice Skull, Purple Slime, Acid Goblin, Longjohn, Serqet, Fire Lizard&lt;br /&gt;
| Firerock,&lt;br /&gt;
| 043&lt;br /&gt;
|&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Crypt&#039;&#039;&#039;&lt;br /&gt;
| Skipy,[[User:Yubaba|Yubaba]]&lt;br /&gt;
| Reaper boss quest&lt;br /&gt;
| Reaper, scythe, the lost, ball lightning, vampire bat&lt;br /&gt;
| Death&#039;s Hand, Reaper blade&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| tileset incomplete, art developer inactive.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Ancient Amulets&#039;&#039;&#039;&lt;br /&gt;
| [[User:Alastrim|Alastrim]]&lt;br /&gt;
| Five quests leading to different Four-Leaf Amulets of different strengh.&lt;br /&gt;
| Shadow Elemental (1st Quest)&lt;br /&gt;
| Four-Leaf Amulets&lt;br /&gt;
| 024-3 to 024-8&lt;br /&gt;
| Explorer&lt;br /&gt;
| on hold, developer inactive&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Kageville&#039;&#039;&#039;&lt;br /&gt;
| [[User:Kage|Kage]]&lt;br /&gt;
| TBA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 040&lt;br /&gt;
|&lt;br /&gt;
| on hold, developer inactive&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Hetchel the silk weaver [373] ([[Tulimshar]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:bh28|bh28]]&lt;br /&gt;
| Lora Tay says she can sew Silk Robes provided you give her some silk sheets.and that Hetchel in Tulimshar can weave them for you.&lt;br /&gt;
| &lt;br /&gt;
| Silk Sheet [881], dyed Silk Sheets [2250 to 2259]&lt;br /&gt;
| 021-1&lt;br /&gt;
| Hetchel (373)&lt;br /&gt;
| Hetche graphics update, 021-2 : add weaver workshop&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:250%&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&#039;&#039;&#039;Teams&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;Here is a list of all the different developer teams. You can see the list of developers [[Developers|here]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Name&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Member(s)&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Role&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;The Mana World - Athena Leader&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]]&lt;br /&gt;
| Coordinates tmwA.  Network and delegate tasks.  Increase participation.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Content Lead&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]]&lt;br /&gt;
| Coordinates tmwA General Content (non-sound, non-art).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Source Lead&#039;&#039;&#039;&lt;br /&gt;
| [[User:o11c|o11c]]&lt;br /&gt;
| Adjusts and coordinates Athena source code.  Meets content team requests for source code adjustments to further content.  Research and development of Athena source code and scripting conventions.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Sound Lead&#039;&#039;&#039;&lt;br /&gt;
| [[User:Yubaba|Yubaba]]&lt;br /&gt;
| Determines if sound on the forums is ready for the game.  Encourages people to get involved in sound and encourage players to try their hand at sound.  Attempts to meet the [REQ]s of content developers as well as creates any sound that may seem to add to the project, from monsters to maps to battle and beyond.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pixel Artists&#039;&#039;&#039;&lt;br /&gt;
| Nami, [[User:Salmondine|Salmondine]]&lt;br /&gt;
| Determines if art is ready for the game.  Helps categorize art topics.  Encourage artists contribute to the game and encourage players to try their hand at art.  Understand content priorities and attempt to steer art to meeting art deadlines.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Mapping Lead&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
| Reviews maps for the game.  Check for proper use of black border, collision tiles, and application of tiles onto the correct layers they belong on.  Fix mapping errors.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Reference&amp;diff=25754</id>
		<title>Classic:TmwAthena Scripting Reference</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Reference&amp;diff=25754"/>
		<updated>2013-03-10T19:14:31Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Amend the description of mobcount with a note about the -1 offset.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a reference for commands believed to work in the eAthena scripting language still used by tmwAthena.&lt;br /&gt;
&lt;br /&gt;
A number of problematic commands have been removed from this list, but not all commands have been tested.&lt;br /&gt;
&lt;br /&gt;
== Language Commands ==&lt;br /&gt;
These are command that are closely tied to the language itself.&lt;br /&gt;
&lt;br /&gt;
=== goto ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    goto L_1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unconditionally jump to a label. Often used in an &amp;quot;if&amp;quot; body.&lt;br /&gt;
&lt;br /&gt;
=== callsub ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    callsub S_labelname, arguments...;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jump to the given label. When the &amp;quot;return&amp;quot; statement is executed, continue on the next line.&lt;br /&gt;
&lt;br /&gt;
It is not known whether &amp;quot;arguments...&amp;quot; works, we use temporary variables instead.&lt;br /&gt;
&lt;br /&gt;
It might also be possible to use this as a function, if the form of return with a value is used, but we use temporary variables instead.&lt;br /&gt;
&lt;br /&gt;
=== callfunc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    callfunc &amp;quot;function_name&amp;quot;, arguments...;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jump to the given function script. When the &amp;quot;return&amp;quot; statement is executed, continue on the next line of this script.&lt;br /&gt;
&lt;br /&gt;
It is not known whether &amp;quot;arguments...&amp;quot; works, we use temporary variables instead.&lt;br /&gt;
&lt;br /&gt;
It might also be possible to use this as a function, if the form of return with a value is used, but we use temporary variables instead.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;return&amp;quot; is broken if this is used from within an if(). If you need a conditional callfunc, first goto a label.&lt;br /&gt;
&lt;br /&gt;
=== return ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    return;&lt;br /&gt;
    return expr;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return from this script or sublabel to the calling function.&lt;br /&gt;
&lt;br /&gt;
It is unknown what happens if this is used from the top-level script, use &amp;quot;close&amp;quot; or &amp;quot;end&amp;quot; instead.&lt;br /&gt;
&lt;br /&gt;
We use temporary variables instead of the form that returns an expression.&lt;br /&gt;
&lt;br /&gt;
=== getarg ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getarg(index)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return (by reference?) an argument of &amp;quot;callsub&amp;quot; or &amp;quot;callfunc&amp;quot;. Aborts the script if used at toplevel of if out of range.&lt;br /&gt;
&lt;br /&gt;
We use temporary variables instead.&lt;br /&gt;
&lt;br /&gt;
=== set ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    set variable, expression;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Very common command, to set variables.&lt;br /&gt;
&lt;br /&gt;
=== setarray ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setarray arrayvariable, val1, val2, ...;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set elements of an array. Previous elements are not cleared. At most 128 elements can be assigned.&lt;br /&gt;
&lt;br /&gt;
It is currently possible, but deprecated, to specify a (zero-based) array index to start at the given part of an array. It&#039;s pretty amazing that that code works anyway.&lt;br /&gt;
&lt;br /&gt;
Remember that there are no permanent arrays, only temporary.&lt;br /&gt;
&lt;br /&gt;
=== cleararray ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    cleararray variable, value, count;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fill an array with &amp;quot;count&amp;quot; copies of &amp;quot;value&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== copyarray ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    copyarray dest_var, src_var, count;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Copy elements of an array.&lt;br /&gt;
&lt;br /&gt;
This function looks broken to me.&lt;br /&gt;
&lt;br /&gt;
=== getarraysize ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getarraysize variable;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get the size of an array.&lt;br /&gt;
&lt;br /&gt;
The size of an array is simply one more than the index of the last nonzero integer or nonempty string.&lt;br /&gt;
&lt;br /&gt;
WARNING: most functions that set an array do not bother to clear out high indices. You should almost always use an explicitly-provided size instead.&lt;br /&gt;
&lt;br /&gt;
=== deletearray ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    deletearray variable[, count = 1];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Remove count elements from an array.&lt;br /&gt;
&lt;br /&gt;
If there are elements beyond count, they will be shifted into lower indices.&lt;br /&gt;
&lt;br /&gt;
After that, all remaining elements will be set to 0 or &amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This function is currently broken, instead use cleararray variable, 0, count;&lt;br /&gt;
&lt;br /&gt;
=== getelementofarray ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getelementofarray(arrayname, index_expr)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This function is invoked internally by the arrayname[index_expr] syntax.&lt;br /&gt;
&lt;br /&gt;
=== if ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    if (condition) condition_command [conditional_command_args, ...];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If condition is zero, do nothing. Else, evaluate the conditional command.&lt;br /&gt;
&lt;br /&gt;
The only thing special about the if command is the lack of commas during parsing (from my reading this is only a warning?). During execution it is perfectly normal.&lt;br /&gt;
&lt;br /&gt;
=== end ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop executing the script.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use this if you have opened a dialog to the player, use &amp;quot;close&amp;quot; instead. Or, use &amp;quot;close2&amp;quot; and *then* &amp;quot;end&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== debugmes ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    debugmes &amp;quot;string&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Print a message to stdout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Message Commands ==&lt;br /&gt;
These are commands for dialog or one-way chat with players.&lt;br /&gt;
&lt;br /&gt;
=== mes ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    mes &amp;quot;string&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display a line of text to the player. If a dialog box is not already open for the attached NPC, one will be created.&lt;br /&gt;
&lt;br /&gt;
It is unknown if the client properly supports dialog with multiple NPCs simultaneously. Note that the server only allows each account one paused script at a time, so it probably wouldn&#039;t work anyway.&lt;br /&gt;
&lt;br /&gt;
=== next ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    next;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop the script until the user presses &amp;quot;Next&amp;quot; in the dialog.&lt;br /&gt;
&lt;br /&gt;
=== close ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    close;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop executing the script and give the user a &amp;quot;Close&amp;quot; button in the dialog.&lt;br /&gt;
&lt;br /&gt;
=== close2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    close2;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop the script until the user presses the &amp;quot;Close&amp;quot; button in the dialog, then keep executing the script.&lt;br /&gt;
&lt;br /&gt;
WARNING: unlike close, this command is a blocking command, the usual caveats apply.&lt;br /&gt;
&lt;br /&gt;
=== menu ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    menu&lt;br /&gt;
        &amp;quot;option 1&amp;quot;, L_1,&lt;br /&gt;
        &amp;quot;option 2&amp;quot;, L_2,&lt;br /&gt;
        &amp;quot;default&amp;quot;, -;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display a list of choices to the player, then branch to the specified label. The special label &amp;quot;-&amp;quot; means don&#039;t branch, just continue with the next statement.&lt;br /&gt;
&lt;br /&gt;
Additionally, the temporary variable &amp;quot;@menu&amp;quot; is set to the 1-based index of the choice.&lt;br /&gt;
&lt;br /&gt;
The options must not contain the character &amp;quot;:&amp;quot;, as the protocol uses it as a separator.&lt;br /&gt;
&lt;br /&gt;
=== input ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    input variable_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Input an integer or string to the given variable, depending on whether has the &#039;$&#039; string postfix.&lt;br /&gt;
&lt;br /&gt;
The implementation allows variable_name to be omitted if input is an integer, in case l14 is used. Don&#039;t use this.&lt;br /&gt;
&lt;br /&gt;
=== announce ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    announce &amp;quot;message&amp;quot;, flag;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Do a GM message.&lt;br /&gt;
&lt;br /&gt;
If flag &amp;amp; 0xF == 0 forward it to all map servers.&lt;br /&gt;
If flag &amp;amp; 0x8, message is from the OID (NPC? usually?) rather than the RID (player).&lt;br /&gt;
&lt;br /&gt;
If (flag &amp;amp; 0x7) == 1, send to all on map.&lt;br /&gt;
If (flag &amp;amp; 0x7) == 2, send to all in line of sight.&lt;br /&gt;
If (flag &amp;amp; 0x7) == 3, send to self only.&lt;br /&gt;
If (flag &amp;amp; 0x7) == anything else, send to all clients.&lt;br /&gt;
&lt;br /&gt;
=== mapannounce ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    mapannounce &amp;quot;mapname&amp;quot;, &amp;quot;message&amp;quot;, flag;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Send an announcement to all players in map.&lt;br /&gt;
&lt;br /&gt;
Only flag &amp;amp; 0x10 is interpreted, which does not work with the Mana client. So, flag must be 0.&lt;br /&gt;
&lt;br /&gt;
=== areaannounce ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    areaannounce &amp;quot;mapname&amp;quot;, x0, y0, x1, y1, &amp;quot;message&amp;quot;, flag;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Send an announcement to all players in area.&lt;br /&gt;
&lt;br /&gt;
Only flag &amp;amp; 0x10 is interpreted, which does not work with the Mana client. So, flag must be 0.&lt;br /&gt;
&lt;br /&gt;
=== message ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    message &amp;quot;player&amp;quot;, &amp;quot;message&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display (in chat) a message from the server to a single user.&lt;br /&gt;
&lt;br /&gt;
=== npctalk ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    npctalk &amp;quot;message&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make an NPC say something publicly.&lt;br /&gt;
&lt;br /&gt;
Note: in many cases areaannounce is a better choice.&lt;br /&gt;
&lt;br /&gt;
== Character Commands ==&lt;br /&gt;
These have to do with attributes of the player.&lt;br /&gt;
&lt;br /&gt;
=== setlook ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setlook type, value;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set an aspect of a character&#039;s appearance. Used e.g. by the barber.&lt;br /&gt;
&lt;br /&gt;
There are constant provided for the LOOK type, and for hair color and hair style.&lt;br /&gt;
&lt;br /&gt;
=== heal ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    heal hp, sp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Increase or decrease the player&#039;s hp and sp.&lt;br /&gt;
&lt;br /&gt;
=== itemheal ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    itemheal &amp;quot;ii&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Increase or decrease the player&#039;s hp and sp, for use in item scripts.&lt;br /&gt;
&lt;br /&gt;
=== percentheal ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    percentheal &amp;quot;ii&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Increase or decrease the player&#039;s hp and sp, by percentage of max HP.&lt;br /&gt;
&lt;br /&gt;
This is probably the best way to instakill the player.&lt;br /&gt;
&lt;br /&gt;
=== readparam ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    readparam(type[, &amp;quot;playername&amp;quot;])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return one of the core parameters of a player.&lt;br /&gt;
&lt;br /&gt;
type is one of the bCamelCase constants, see db/const.txt&lt;br /&gt;
&lt;br /&gt;
=== getcharid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getcharid(type[ &amp;quot;playername&amp;quot;])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get an id of the attached (or given) player.&lt;br /&gt;
&lt;br /&gt;
Type is:&lt;br /&gt;
0: char id&lt;br /&gt;
1: party id&lt;br /&gt;
2: guild id (deprecated)&lt;br /&gt;
3: account id&lt;br /&gt;
&lt;br /&gt;
You usually want 3.&lt;br /&gt;
&lt;br /&gt;
=== getpartyname ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getpartyname(partyid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the name of the party with the given id, or &amp;quot;null&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== getpartymember ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getpartymember partyid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fills in the array $@partymembername$&lt;br /&gt;
&lt;br /&gt;
=== strcharinfo ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    strcharinfo(num)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return string information about an account:&lt;br /&gt;
num==0: name&lt;br /&gt;
num==1: party name&lt;br /&gt;
num==2: guild name (deprecated)&lt;br /&gt;
&lt;br /&gt;
=== sc_start ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sc_start type, tick, val1[, beingid];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Apply a status effect to a player (or monster?).&lt;br /&gt;
&lt;br /&gt;
type is one of the sc_* constants.&lt;br /&gt;
&lt;br /&gt;
=== sc_start2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sc_start2 type, tick, val1, chance[, beingid];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Chance of applying a status effect, out of 10000.&lt;br /&gt;
&lt;br /&gt;
=== sc_end ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sc_end type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Immediately end status effect on current player.&lt;br /&gt;
&lt;br /&gt;
=== sc_check ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sc_check(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Whether a status effect is currently active.&lt;br /&gt;
&lt;br /&gt;
=== getscrate ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getscrate(type, rate[, being_id])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the sc is poison, modify rate by (3 + vit + luk/3) percent.&lt;br /&gt;
&lt;br /&gt;
The form that accepts a being_id is broken in the current stable version of the server.&lt;br /&gt;
&lt;br /&gt;
=== resetlvl ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    resetlvl type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== resetstatus ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    resetstatus;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== resetskill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    resetskill;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== changesex ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    changesex;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ask the login server (via the char server) to toggle this account&#039;s sex, then kick the player.&lt;br /&gt;
&lt;br /&gt;
=== attachrid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    attachrid(id)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Change the being associated with this script.&lt;br /&gt;
&lt;br /&gt;
Return true if such a player is logged in.&lt;br /&gt;
&lt;br /&gt;
=== detachrid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    detachrid;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Detach the player associated with this script.&lt;br /&gt;
&lt;br /&gt;
=== isloggedin ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    isloggedin(id)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return true if the given ID is logged in.&lt;br /&gt;
&lt;br /&gt;
Often you shouldn&#039;t use this, but attachrid(id) instead&lt;br /&gt;
&lt;br /&gt;
=== marriage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    marriage(&amp;quot;otherplayer&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Marry the attached player to the other player.&lt;br /&gt;
&lt;br /&gt;
Return 1 on success and 0 on failure.&lt;br /&gt;
&lt;br /&gt;
=== divorce ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    divorce()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Divorce the attached player from their partner&lt;br /&gt;
&lt;br /&gt;
Return 1 on success and 0 on failure.&lt;br /&gt;
&lt;br /&gt;
=== getpartnerid2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getpartnerid2()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the ID of the attached player&#039;s partner (0 is none).&lt;br /&gt;
&lt;br /&gt;
=== getexp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getexp base, job;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Increase the types of experience.&lt;br /&gt;
&lt;br /&gt;
=== getinventorylist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getinventorylist;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fill in some arrays of useful information: &amp;quot;@inventorylist_id&amp;quot;, &amp;quot;@inventorylist_amount&amp;quot;, &amp;quot;@inventorylist_equip&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The arrays are not cleared between calls, use &amp;quot;@inventory_count&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== getskilllist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getskilllist;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fill in some arrays of useful information: &amp;quot;@skilllist_id&amp;quot;, &amp;quot;@skilllist_lv&amp;quot;, &amp;quot;@skilllist_flag&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The arrays are not cleared between calls, use &amp;quot;@skill_count&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== getpoolskilllist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getpoolskilllist;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Same, but only poolable skills.&lt;br /&gt;
&lt;br /&gt;
=== getactivatedpoolskilllist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getactivatedpoolskilllist;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Same, but only activated pool skills.&lt;br /&gt;
&lt;br /&gt;
=== getunactivatedpoolskilllist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getunactivatedpoolskilllist;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Same, but only unactivated pool skills.&lt;br /&gt;
&lt;br /&gt;
=== poolskill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    poolskill skill_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Activate a poolable skill.&lt;br /&gt;
&lt;br /&gt;
=== unpoolskill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    unpoolskill skill_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Deactivate a poolable skill.&lt;br /&gt;
&lt;br /&gt;
=== checkpoolskill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    checkpoolskill(skill_id)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Check if a pool skill is activated&lt;br /&gt;
&lt;br /&gt;
=== misceffect ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    misceffect type, &amp;quot;player_name&amp;quot;;&lt;br /&gt;
    misceffect type, being_id;&lt;br /&gt;
    misceffect type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display a miscellaneous effect on a being.&lt;br /&gt;
&lt;br /&gt;
In the third form, it will use the OID if possible, and fallback to the RID.&lt;br /&gt;
&lt;br /&gt;
=== getlook ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getlook(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return part of the player&#039;s appearance:&lt;br /&gt;
val==1: hair&lt;br /&gt;
val==2: weapon&lt;br /&gt;
val==3: bottom&lt;br /&gt;
val==4: middle&lt;br /&gt;
val==5: top&lt;br /&gt;
val==6: hair color&lt;br /&gt;
val==8: shield&lt;br /&gt;
val==9: shoes&lt;br /&gt;
&lt;br /&gt;
On failure, return -1.&lt;br /&gt;
&lt;br /&gt;
=== getsavepoint ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getsavepoint(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
type==0: Return savepoint map&lt;br /&gt;
type==1: Return savepoint x&lt;br /&gt;
type==2: Return savepoint y&lt;br /&gt;
&lt;br /&gt;
This is believed to be the only function (other than callfunc and callsub of course) that returns a different type depending on its arguments.&lt;br /&gt;
&lt;br /&gt;
=== shop ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    shop &amp;quot;npcname&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Close the script and open the given NPC&#039;s shop.&lt;br /&gt;
&lt;br /&gt;
=== isdead ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    isdead()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 1 if the attached player is dead, else 0.&lt;br /&gt;
&lt;br /&gt;
=== fakenpcname ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    fakenpcname &amp;quot;name&amp;quot;, &amp;quot;newname&amp;quot;, new_sprite_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Change the appearance of an NPC.&lt;br /&gt;
&lt;br /&gt;
== Location Commands ==&lt;br /&gt;
These are commands that have to do with the location of players&lt;br /&gt;
&lt;br /&gt;
=== warp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    warp &amp;quot;mapname&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Warp the attached player to the given location. &amp;quot;mapname&amp;quot; may have the special values &amp;quot;Random&amp;quot;, &amp;quot;SavePoint&amp;quot;, and &amp;quot;Save&amp;quot; (case-sensitive), but x and y are still required.&lt;br /&gt;
&lt;br /&gt;
=== isat ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    isat(&amp;quot;mapname&amp;quot;, x, y)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 1 if the attached player is at the given location, 0 otherwise.&lt;br /&gt;
&lt;br /&gt;
=== areawarp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    areawarp &amp;quot;src_map&amp;quot;, x0, y0, x1, y1, &amp;quot;dst_map&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Warp all players in the given area to the given location.&lt;br /&gt;
&lt;br /&gt;
=== getusers ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getusers(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count users.&lt;br /&gt;
&lt;br /&gt;
If flag &amp;amp; 0x8, base on OID instead of RID.&lt;br /&gt;
If (flag &amp;amp; 0x7) == 0, return users on the map.&lt;br /&gt;
If (flag &amp;amp; 0x7) == 1, return users on the server.&lt;br /&gt;
&lt;br /&gt;
=== getmapusers ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getmapusers(&amp;quot;mapname&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count users on a given map.&lt;br /&gt;
&lt;br /&gt;
=== getareausers ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getareausers(&amp;quot;mapname&amp;quot;, x0, y0, x1, y1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count users in an area.&lt;br /&gt;
&lt;br /&gt;
=== mapwarp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    mapwarp &amp;quot;src_map&amp;quot;, &amp;quot;dst_map&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Warp all players from source map to destination location.&lt;br /&gt;
&lt;br /&gt;
=== npcwarp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    npcwarp x, y, &amp;quot;npcname&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Move an NPC to a different location on the same map.&lt;br /&gt;
&lt;br /&gt;
=== isin ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    isin(&amp;quot;mapname&amp;quot;, x0, y0, x1, y1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Check if the player is in the area.&lt;br /&gt;
&lt;br /&gt;
=== getx ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getx()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return attached player&#039;s x coordinate.&lt;br /&gt;
&lt;br /&gt;
=== gety ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    gety()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return attached player&#039;s y coordinate.&lt;br /&gt;
&lt;br /&gt;
=== getmap ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getmap()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return attached player&#039;s current map.&lt;br /&gt;
&lt;br /&gt;
== Item Commands ==&lt;br /&gt;
These have to do with items or inventory.&lt;br /&gt;
&lt;br /&gt;
=== getitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getitem &amp;quot;itemname&amp;quot;, count[, unused_argument[, playerid]];&lt;br /&gt;
    getitem itemid, count[, unused_argument[, playerid]];&lt;br /&gt;
&amp;quot;ii**&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Grant the attached player (or the given player) &amp;quot;count&amp;quot; copies of an item.&lt;br /&gt;
&lt;br /&gt;
If itemname is unrecognized you get an iten (727) instead.&lt;br /&gt;
&lt;br /&gt;
=== makeitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    makeitem &amp;quot;itemname&amp;quot;, count, &amp;quot;mapname&amp;quot;, x, y;&lt;br /&gt;
    makeitem itemid, count, &amp;quot;mapname&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Drop items on the ground.&lt;br /&gt;
&lt;br /&gt;
The special &amp;quot;mapname&amp;quot; value &amp;quot;this&amp;quot; means the map of the attached player.&lt;br /&gt;
&lt;br /&gt;
=== delitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    delitem &amp;quot;itemname&amp;quot;, count;&lt;br /&gt;
    delitem itemid, count;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Remove items from the attached player&#039;s inventory.&lt;br /&gt;
&lt;br /&gt;
This command is buggy if the player does not have enough of the item.&lt;br /&gt;
&lt;br /&gt;
=== countitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    countitem(&amp;quot;itemname&amp;quot;)&lt;br /&gt;
    countitem(itemid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the number of the given item in the player&#039;s inventory.&lt;br /&gt;
&lt;br /&gt;
=== checkweight ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    checkweight(&amp;quot;itemname&amp;quot;, count)&lt;br /&gt;
    checkweight(itemid, count)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 0 if adding &amp;quot;count&amp;quot; of the item would put player above max weight, 1 if it would still be less than max weight.&lt;br /&gt;
Also returns 0 if item does not exist.&lt;br /&gt;
&lt;br /&gt;
=== getequipid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getequipid(equip_point)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the ID of the item in the given equip slot.&lt;br /&gt;
&lt;br /&gt;
equip_point is one of the equip_* constants&lt;br /&gt;
&lt;br /&gt;
=== getequipname ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getequipname(equip_point)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the name of the item in the given equip slot.&lt;br /&gt;
&lt;br /&gt;
equip_point is one of the equip_* constants&lt;br /&gt;
&lt;br /&gt;
=== getequipisequiped ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getequipisequiped(num)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 1 if the player currently has an item equipped in the slot.&lt;br /&gt;
&lt;br /&gt;
=== statusup ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    statusup bType;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Permanently increase a stat by one point.&lt;br /&gt;
&lt;br /&gt;
=== statusup2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    statusup2 bType, delta;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Permanently increase or decrease a stat.&lt;br /&gt;
&lt;br /&gt;
=== bonus ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    bonus bType, delta&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Temporarily increase a stat. For use in item scripts only.&lt;br /&gt;
&lt;br /&gt;
=== skill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    skill id, level[, flag = 1];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Grant a skill.&lt;br /&gt;
&lt;br /&gt;
flag==0: permanent skill&lt;br /&gt;
flag==1: temporary skill (item scripts only)&lt;br /&gt;
&lt;br /&gt;
(Untested)&lt;br /&gt;
&lt;br /&gt;
=== setskill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setskill id, level;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Grant a skill permanently.&lt;br /&gt;
&lt;br /&gt;
=== getskilllv ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getskilllv(skill)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the player&#039;s level of the given skill.&lt;br /&gt;
&lt;br /&gt;
=== getgmlevel ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getgmlevel()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the player&#039;s GM level.&lt;br /&gt;
&lt;br /&gt;
=== getopt2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getopt2()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the player&#039;s opt2 flags.&lt;br /&gt;
&lt;br /&gt;
=== setopt2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setopt2 flags;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the player&#039;s opt2 flags.&lt;br /&gt;
&lt;br /&gt;
=== checkoption ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    checkoption(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 1 if the player has any of the given (XOR&#039;ed) option bits. Usually only one is given.&lt;br /&gt;
&lt;br /&gt;
=== setoption ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setoption type&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the player&#039;s option flags exactly (not OR&#039;ing).&lt;br /&gt;
&lt;br /&gt;
=== savepoint ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    savepoint &amp;quot;mapname&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the player&#039;s save point. Used e.g. by Soul Menhirs, and during the time travel quest.&amp;lt;!-- Don&#039;t remove this just because you can&#039;t figure out how to start it from this end. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== openstorage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    openstorage;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Open the player&#039;s storage.&lt;br /&gt;
&lt;br /&gt;
=== getitemname ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getitemname(&amp;quot;itemname&amp;quot;)&lt;br /&gt;
    getitemname(itemid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the name of the item, or &amp;quot;Unknown Item&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== clearitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    clearitem;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Remove all items from a player&#039;s inventory.&lt;br /&gt;
&lt;br /&gt;
=== nude ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    nude;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unequip all items.&lt;br /&gt;
&lt;br /&gt;
=== hasitems ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    hasitems()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 1 if the player has any inventory, 0 otherwise.&lt;br /&gt;
&lt;br /&gt;
=== unequipbyid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    unequipbyid slot_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unequip whatever is in the slot&lt;br /&gt;
&lt;br /&gt;
=== getareadropitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getareadropitem(&amp;quot;mapname&amp;quot;, x0, y0, x1, y1, &amp;quot;itemname&amp;quot;[, delitems = 0]);&lt;br /&gt;
    getareadropitem(&amp;quot;mapname&amp;quot;, x0, y0, x1, y1, itemid[, delitems = 0]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count items on the floor in an area. If delitems, the items will be deleted as well.&lt;br /&gt;
&lt;br /&gt;
== Common Functions ==&lt;br /&gt;
These are not mostly not related to the RPG or the scripting language.&lt;br /&gt;
&lt;br /&gt;
=== rand ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    rand(range)&lt;br /&gt;
    rand(min, max)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In the first form, return a random number between 0 (inclusive) and range (exclusive). Return 0 if range is not positive.&lt;br /&gt;
In the second form, return a random number between min and max, inclusive. Min and max may be swapped.&lt;br /&gt;
&lt;br /&gt;
=== gettimetick ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    gettimetick(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return one of the ticks&lt;br /&gt;
&lt;br /&gt;
type==0 (or other): milliseconds since some point in time, wraps every 50 days.&lt;br /&gt;
type==1: time since midnight, UTC.&lt;br /&gt;
type==2: seconds since the epoch.&lt;br /&gt;
&lt;br /&gt;
You should almost always use type 2.&lt;br /&gt;
&lt;br /&gt;
=== gettime ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    gettime(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get a component of the time (UTC).&lt;br /&gt;
&lt;br /&gt;
1: second (0-59)&lt;br /&gt;
2: minute (0-59)&lt;br /&gt;
3: hour (0-23)&lt;br /&gt;
4: day of week (0-6)&lt;br /&gt;
5: day of month (1-31)&lt;br /&gt;
6: month (1-12)&lt;br /&gt;
7: year (1902-2038)&lt;br /&gt;
&lt;br /&gt;
=== gettimestr ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    gettimestr(&amp;quot;format&amp;quot;, length)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Frontend for strftime(3).&lt;br /&gt;
&lt;br /&gt;
This function may be removed for technical reasons, please construct the string manually using gettime().&lt;br /&gt;
&lt;br /&gt;
There is a script function that does this: callfunct &amp;quot;time_stamp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
== Timers and Events ==&lt;br /&gt;
These have to do with transfering control in ways that are not immediately obvious.&lt;br /&gt;
&lt;br /&gt;
The most common ones are initnpctimer or startnpctimer, stopnpctimer, and setnpctimer.&lt;br /&gt;
&lt;br /&gt;
=== doevent ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    doevent &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Manually invoke an NPC event.&lt;br /&gt;
&lt;br /&gt;
=== donpcevent ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    donpcevent &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Manually invoke an NPC event.&lt;br /&gt;
&lt;br /&gt;
=== addtimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    addtimer tick, &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Invoke an NPC event after a delay, for the attached NPC.&lt;br /&gt;
&lt;br /&gt;
This command does the same thing as areatimer, but for only the attached player.&lt;br /&gt;
&lt;br /&gt;
=== deltimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    deltimer &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This command is untested and might freeze the server.&lt;br /&gt;
&lt;br /&gt;
=== initnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    initnpctimer;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the NPC&#039;s attached timer to tick 0 and start it.&lt;br /&gt;
&lt;br /&gt;
This is equivalent to setnpctimer, 0; startnpctimer;&lt;br /&gt;
&lt;br /&gt;
=== stopnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    stopnpctimer;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop the NPC&#039;s attached timer.&lt;br /&gt;
&lt;br /&gt;
This DOES NOT do anything about the tick. But that&#039;s okay, you should normally be starting it with initnpctimer.&lt;br /&gt;
&lt;br /&gt;
=== startnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    startnpctimer;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Start the NPC&#039;s attached timer, without setting the tick.&lt;br /&gt;
&lt;br /&gt;
=== setnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setnpctimer tick;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the NPC&#039;s timer to a specific tick. Generally, this is only useful for tick 0.&lt;br /&gt;
&lt;br /&gt;
=== getnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getnpctimer(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get the current tick of an NPC&#039;s timer.&lt;br /&gt;
&lt;br /&gt;
type==0: timer event tick (like setnpctimer)&lt;br /&gt;
type==1: bool if it has a next timer.&lt;br /&gt;
type==2: timer amount&lt;br /&gt;
&lt;br /&gt;
=== cmdothernpc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    cmdothernpc &amp;quot;npc&amp;quot;, &amp;quot;Foo&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Invoke ::OnCommandFoo&lt;br /&gt;
&lt;br /&gt;
=== mobcount ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    mobcount(&amp;quot;mapname&amp;quot;, &amp;quot;event&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count the remaining mobs from the spawn with the given event. Has an offset of -1.&lt;br /&gt;
&lt;br /&gt;
=== areatimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    areatimer &amp;quot;mapname&amp;quot;, x0, y0, x1, y1, tick, &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Add a PC event timer to all players in the area.&lt;br /&gt;
&lt;br /&gt;
After &amp;quot;tick&amp;quot; milliseconds, the given NPC event will fire with each player as the RID.&lt;br /&gt;
&lt;br /&gt;
== Unsorted Commands ==&lt;br /&gt;
These are commands that still need sorting, please edit this page, see talk page for category (and subcategory?) suggestions.&lt;br /&gt;
&lt;br /&gt;
=== monster ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    monster &amp;quot;mapname&amp;quot;, x, y, &amp;quot;string&amp;quot;, class, count[, &amp;quot;event&amp;quot;];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Spawn monsters at a point. If you define an OnDead event using a trigger area then the event is shot only inside that area, hence the event is ignored when the monster is killed outside the trigger area.&lt;br /&gt;
&lt;br /&gt;
=== areamonster ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    areamonster &amp;quot;mapname&amp;quot;, x0, y0, x1, y1, &amp;quot;string&amp;quot;, class, count[, &amp;quot;event&amp;quot;];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Spawn monsters in an area. If you define an OnDead event using a trigger area then the event is shot only inside that area, hence the event is ignored when the monster is killed outside the trigger area.&lt;br /&gt;
&lt;br /&gt;
=== killmonster ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    killmonster &amp;quot;mapname&amp;quot;, &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kill monsters on a map.&lt;br /&gt;
&lt;br /&gt;
Unless it is &amp;quot;All&amp;quot;, &amp;quot;event&amp;quot; must match the one used at spawn time.&lt;br /&gt;
&lt;br /&gt;
If &amp;quot;All&amp;quot; is given, this function properly preserves permanently respawning monsters.&lt;br /&gt;
&lt;br /&gt;
=== killmonsterall ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    killmonsterall &amp;quot;mapname&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kill all monsters unconditionally.&lt;br /&gt;
&lt;br /&gt;
This command might prevent monsters from respawning. Instead use &amp;quot;killmonster&amp;quot; with &amp;quot;event&amp;quot; == &amp;quot;All&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== enablenpc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    enablenpc &amp;quot;name&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enable an NPC.&lt;br /&gt;
&lt;br /&gt;
=== disablenpc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    disablenpc &amp;quot;name&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Disable an NPC.&lt;br /&gt;
&lt;br /&gt;
=== hideoffnpc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    hideoffnpc &amp;quot;name&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
What does this do?&lt;br /&gt;
&lt;br /&gt;
=== hideonnpc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    hideonnpc &amp;quot;name&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
What does this do?&lt;br /&gt;
&lt;br /&gt;
=== setmapflagnosave ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setmapflagnosave &amp;quot;mapname&amp;quot;, &amp;quot;savemap&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the nosave flag and respawn location.&lt;br /&gt;
&lt;br /&gt;
=== setmapflag ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setmapflag &amp;quot;mapname&amp;quot;, flag;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set an arbitrary mapflag.&lt;br /&gt;
&lt;br /&gt;
=== removemapflag ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    removemapflag &amp;quot;mapname&amp;quot;, flag;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unset an arbitrary mapflag.&lt;br /&gt;
&lt;br /&gt;
=== getmapflag ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getmapflag(&amp;quot;mapname&amp;quot;, flag);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Check an arbitrary mapflag.&lt;br /&gt;
&lt;br /&gt;
=== pvpon ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    pvpon &amp;quot;mapname&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Allow PvP on a map.&lt;br /&gt;
&lt;br /&gt;
=== pvpoff ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    pvpoff &amp;quot;mapname&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Deny PvP on a map.&lt;br /&gt;
&lt;br /&gt;
=== emotion ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    emotion emote_index;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Show a smiley above the OID.&lt;br /&gt;
&lt;br /&gt;
=== getspellinvocation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getspellinvocation(&amp;quot;spell-identifier&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the #invocation used for a spell, or &amp;quot;...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== getanchorinvocation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getanchorinvocation &amp;quot;anchor-identifier&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the invocation used for a teleport anchor (?)&lt;br /&gt;
&lt;br /&gt;
=== strmobinfo ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    strmobinfo(num, class)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Info about a type of mob:&lt;br /&gt;
num==1: name&lt;br /&gt;
num==2: jname&lt;br /&gt;
num==3: lv&lt;br /&gt;
num==4: maxhp&lt;br /&gt;
num==5: maxsp&lt;br /&gt;
num==6: base_exp&lt;br /&gt;
num==7: job_exp&lt;br /&gt;
&lt;br /&gt;
Note that only types 1 and 2 actually return strings, the rest return integers&lt;br /&gt;
&lt;br /&gt;
=== specialeffect ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    specialeffect type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display a special effect on the OID.&lt;br /&gt;
&lt;br /&gt;
Same as &amp;quot;misceffect&amp;quot;, but does not fallback when there is no OID.&lt;br /&gt;
&lt;br /&gt;
=== specialeffect2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    specialeffect2 type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Same as &amp;quot;misceffect&amp;quot;, but works when there is an OID.&lt;br /&gt;
&lt;br /&gt;
=== gmcommand ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    gmcommand &amp;quot;@command maybe with arguments&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Run a GM command, at level 99.&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Archive:Setting_up_tmwAthena_on_Windows&amp;diff=25670</id>
		<title>Archive:Setting up tmwAthena on Windows</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Archive:Setting_up_tmwAthena_on_Windows&amp;diff=25670"/>
		<updated>2013-02-17T11:27:31Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: /* The Setup */ Update server-repo url from gitorious to github.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:reference]]&lt;br /&gt;
Last updated By DJDrift2222 on 3/3/2012&lt;br /&gt;
==The Setup==&lt;br /&gt;
This article describes how to set up eAthena on a Windows system. There is also an article about [[setting up eAthena on Linux]].&lt;br /&gt;
&lt;br /&gt;
# Download Cygwin from http://www.cygwin.com/&lt;br /&gt;
# Find something to keep you busy, because the next step will take a while&lt;br /&gt;
# Install Cygwin. Select &amp;quot;install from Internet&amp;quot; as download source. When you are on the component select screen make sure the component category &amp;quot;devel&amp;quot; is installed. You technically need not everything from this group but a lot. So just install the whole group.&lt;br /&gt;
# Start Cygwin&lt;br /&gt;
# Enter &#039;&#039;&#039;ln -s flex /usr/bin/lex&#039;&#039;&#039; This is to get the Flex commands ready for use they are not active at first...&lt;br /&gt;
# Browse to the directory where you would like to have eAthena. When you want it in c:/tmw, for example, the command would be &#039;&#039;&#039;cd /cygdrive/c/tmw/&#039;&#039;&#039; (directory must exist. when it does not you can create it with &#039;&#039;&#039;mkdir /cygdrive/c/tmw/&#039;&#039;&#039;)&lt;br /&gt;
# Enter &#039;&#039;&#039;git clone git://github.com/themanaworld/tmwa.git eathena&#039;&#039;&#039; to download the most recent sourcecode of the server.&lt;br /&gt;
[http://i95.photobucket.com/albums/l122/silentdimes/step1.jpg What you should have so far]&lt;br /&gt;
# Enter &#039;&#039;&#039;git clone --recursive git://github.com/themanaworld/tmwa-server-data.git eathena-data&#039;&#039;&#039; to download the most recent game content for the server.&lt;br /&gt;
[http://i95.photobucket.com/albums/l122/silentdimes/step2.jpg Image for this step]&lt;br /&gt;
# Enter &#039;&#039;&#039;cd eathena&#039;&#039;&#039; to browse into the newly created eathena directory&lt;br /&gt;
# Enter &#039;&#039;&#039;make&#039;&#039;&#039; to compile the sourcecode.&lt;br /&gt;
[http://i95.photobucket.com/albums/l122/silentdimes/step3.jpg Step 1 of Make]&lt;br /&gt;
[http://i95.photobucket.com/albums/l122/silentdimes/step4.jpg Step 2 of Make]&lt;br /&gt;
[http://i95.photobucket.com/albums/l122/silentdimes/step5.jpg Step 3 of Make]&lt;br /&gt;
[http://i95.photobucket.com/albums/l122/silentdimes/step6.jpg Step 4 of Make]&lt;br /&gt;
[http://i95.photobucket.com/albums/l122/silentdimes/step7.jpg Step 5 of Make]&lt;br /&gt;
# Enter &#039;&#039;&#039;cp login-server char-server map-server ladmin /usr/local/bin/&#039;&#039;&#039;&lt;br /&gt;
# Enter &#039;&#039;&#039;cd ../eathena-data&#039;&#039;&#039;&lt;br /&gt;
# Enter &#039;&#039;&#039;ln -s ../../git/hooks/post-merge .git/hooks/&#039;&#039;&#039;&lt;br /&gt;
# Enter &#039;&#039;&#039;ln -s ../../../git/hooks/post-merge client-data/.git/hooks/&#039;&#039;&#039;&lt;br /&gt;
[http://i95.photobucket.com/albums/l122/silentdimes/step8.jpg Up to this point]&lt;br /&gt;
# Enter &#039;&#039;&#039;make conf&#039;&#039;&#039;&lt;br /&gt;
# Enter &#039;&#039;&#039;cd client-data&#039;&#039;&#039;&lt;br /&gt;
[http://i95.photobucket.com/albums/l122/silentdimes/step9.jpg what you should have up to this point]&lt;br /&gt;
# Enter &#039;&#039;&#039;git checkout master&#039;&#039;&#039;&lt;br /&gt;
# Enter &#039;&#039;&#039;cd music&#039;&#039;&#039;&lt;br /&gt;
# Enter &#039;&#039;&#039;git checkout master&#039;&#039;&#039;&lt;br /&gt;
[http://i95.photobucket.com/albums/l122/silentdimes/step10.jpg Last Image for these Steps]&lt;br /&gt;
# Copy cygwin1.dll and cygz.dll into the eathena directory. You find them in the subdirectory /bin of your cygwin installation.&lt;br /&gt;
&lt;br /&gt;
==Testing your server==&lt;br /&gt;
Now you can close that terminal and open a new one&lt;br /&gt;
# Open a terminal&lt;br /&gt;
# Enter &#039;&#039;&#039;cd ~/tmw-ea/eathena-data/&#039;&#039;&#039;&lt;br /&gt;
# Enter &#039;&#039;&#039;./char-server&amp;amp; ./login-server&amp;amp; ./map-server&amp;amp;&#039;&#039;&#039;&lt;br /&gt;
When one of them closes immediately after you start it you should try to start it from the command prompt to see the error messages before the window closes.&lt;br /&gt;
&lt;br /&gt;
You should now be able to connect to your server by starting your TMW client and entering &amp;quot;127.0.0.1&amp;quot; as server. Before you announce your server publically for others to play on you should change the server account passwords in accounts.txt, conf/char_local.conf and conf/map_local.conf to avoid abuse.  Register a new character through your client to confirm if everything is working properly.&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=25602</id>
		<title>Classic:TmwAthena Scripting Standards</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=25602"/>
		<updated>2013-02-12T21:22:32Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: /* Labels and Subfunctions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to standardize the eAthena coding. Any suggestions are welcome to be posted on the discussion page before editing.&lt;br /&gt;
=Code Formatting=&lt;br /&gt;
== Indentation ==&lt;br /&gt;
* Code is indented with four spaces. &lt;br /&gt;
* Code in the same block should have the same indentation. &lt;br /&gt;
* Labels have no indentation. &lt;br /&gt;
* Menu options are on their own lines and are indented further. &lt;br /&gt;
Example:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
* When using an if-statement, there should be a line break after the condition and the conditional command should be indented further. An exception to this is a series of if-statements at the beginning of a major code block which use gotos to jump to the correct position in the script. In this case the goto should be in the same line as the if-statement.&lt;br /&gt;
Example:&lt;br /&gt;
 // if-statement and conditional command in the same line, gotos aligned&lt;br /&gt;
 if (@quest &amp;gt;= 3) goto L_Done;&lt;br /&gt;
 if (@quest == 2) goto L_Progress;&lt;br /&gt;
 if (@quest == 1) goto L_Question;&lt;br /&gt;
 &lt;br /&gt;
 // conditional command in the next line and indented further&lt;br /&gt;
 if (BaseLevel &amp;lt; 40)&lt;br /&gt;
     set @cost, 100;&lt;br /&gt;
&lt;br /&gt;
== Whitespaces==&lt;br /&gt;
In many places whitespaces can increase readability. Examples are&lt;br /&gt;
* When concatenating text and variables:&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot; + strcharinfo(0) + &amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
instead of&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot;+strcharinfo(0)+&amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
* When assigning values to variables:&lt;br /&gt;
 set @var, 3;&lt;br /&gt;
instead of&lt;br /&gt;
 set @var,3;&lt;br /&gt;
* In menus:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
instead of&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;,L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;,L_No;&lt;br /&gt;
&lt;br /&gt;
== Code Blocks ==&lt;br /&gt;
* Code blocks should be separated from the others in a dinstinct way: insert a blank line between code blocks. &lt;br /&gt;
* Individual blocks should be together No blank lines within a block. &lt;br /&gt;
* The opening brackets should be at the end of the parent line, not in a new line; the closing ones should be in a line of their own.&lt;br /&gt;
&lt;br /&gt;
==Labels and Subfunctions==&lt;br /&gt;
* Labels should be named in this way: L_CamelCase&lt;br /&gt;
* Subfunctions should be named in this way: S_CamelCase&lt;br /&gt;
* Labels should always start with L_, except those that act as a subfunction, which should start with S_&lt;br /&gt;
* Newline before every label&lt;br /&gt;
* No newline after a label&lt;br /&gt;
* There must not be a fallthrough or goto to a subfunction label.&lt;br /&gt;
* A subfunction label must not goto a normal label. It may, however, goto another label that is specific to that subfunction, and eventually reach a return.&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
At the beginning of a script file there should be documented &lt;br /&gt;
* who is the author&lt;br /&gt;
* the purpose of the script&lt;br /&gt;
* which variables are used and what&#039;s their purpose&lt;br /&gt;
* any additional information that can help to understand the script&lt;br /&gt;
Example:&lt;br /&gt;
 // Author: devxy&lt;br /&gt;
 // This file contains the NPC John, who is part of the Example quest.&lt;br /&gt;
 // Quest states are saved in Quest_Example.&lt;br /&gt;
 // State 1: started the quest&lt;br /&gt;
 // State 2: did the next step&lt;br /&gt;
 [...]&lt;br /&gt;
&lt;br /&gt;
Within the script there should be comments if there are parts which might be difficult to understand.&lt;br /&gt;
&lt;br /&gt;
In some of the older scripts there are boxed comments used like this:&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
 //# NPC John - By Smith                                                           #&lt;br /&gt;
 //#                                                                               #&lt;br /&gt;
 //#  ...                                                                          #&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
Don&#039;t use them in new scripts.&lt;br /&gt;
&lt;br /&gt;
=Variables=&lt;br /&gt;
==Document Variables==&lt;br /&gt;
in every file, document every variable as one of:&lt;br /&gt;
&lt;br /&gt;
* #  account variable (prefix #) (note that there are also ## variable which didn&#039;t work in the stable version of the server)&lt;br /&gt;
*    permanent player variable (no prefix)&lt;br /&gt;
* @  temporary player variable (prefix @) - used after the script close;s or end;s.&lt;br /&gt;
* @  dynamic player variable (prefix @) - passed into or out of callsub or callfunc&lt;br /&gt;
* @  lexical (local) player variable (prefix @) - used only within the function (scripthelp.txt documents that &amp;quot;.@&amp;quot; means this but I don&#039;t know if that works)&lt;br /&gt;
* @  local constant (prefix @) - not dependent on the player, used only within the function. e.g. lots of @QUEST_FOO_{SHIFT,MASK}&lt;br /&gt;
* $  global permanent variable (prefix $) (I&#039;m not sure if we have any of these right now)&lt;br /&gt;
* $  npc permanent variable (prefix $) same as above but only used by one NPC&lt;br /&gt;
* $  global temporary variable (prefix $@)&lt;br /&gt;
* $@ npc temporary variable (prefix $@) same as above but only used by one NPC, scripthelp.txt mentions prefix &amp;quot;.&amp;quot; but I don&#039;t know if that works&lt;br /&gt;
*    special variable (in db/const.txt with a 1 following)&lt;br /&gt;
*    global constant (in const.txt)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If we use a consistent method of documenting these, we can then generate a list of all variables by type.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Variables initialization==&lt;br /&gt;
Check for troublesome arrays:&lt;br /&gt;
A troublesome array is defined as an array that is not&lt;br /&gt;
*initialized all at once&lt;br /&gt;
*initialized by appending elements to the end, for use in a menu&lt;br /&gt;
 Nothing needs to be done, merely document them. I want this information at hand when I design the new scripting language to minimize conversion pains.&lt;br /&gt;
 I wouldn&#039;t be surprised if there were no troublesome arrays at all. If there are only a couple it might be worth refactoring the code to remove them, but that might be a  high-level decision which is beyond the scope of this proposal.&lt;br /&gt;
&lt;br /&gt;
Set dynamic and local @variables to 0 before close;&lt;br /&gt;
==Naming Variables==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using as little variables as you need==&lt;br /&gt;
So there are some quests, which require lots of variables.&lt;br /&gt;
Think of monster oil quest, Oric and Warum quest etc.&lt;br /&gt;
&lt;br /&gt;
This can often be done by bitmasking: &lt;br /&gt;
One variable has 32 bits. So a variabe can store 2^32 different numbers: 4294967296&lt;br /&gt;
&lt;br /&gt;
But sometimes you only need numbers from 0 to 15, but more of these variables.&lt;br /&gt;
but numbers in range 0 to 15 can be stored in 4 bits ( 2^4 = 16 different numbers)&lt;br /&gt;
&lt;br /&gt;
Here is an example how to use bitmasking:&lt;br /&gt;
[[Media:Tester.txt]]&lt;br /&gt;
== Defining Map Objects ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These sections describe how to define map objects.&lt;br /&gt;
&lt;br /&gt;
=== Warp Definitions ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;Shouldn&#039;t be done manually.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
Warps are what move players between maps. They can also be used to move players around a single map, if needed. Warps are defined like this:&lt;br /&gt;
&lt;br /&gt;
 map1,startX,startY|warp|name|width,height,map2,endX,endY&lt;br /&gt;
&lt;br /&gt;
Key:&lt;br /&gt;
{|&lt;br /&gt;
|map1  ||the starting map&lt;br /&gt;
|-&lt;br /&gt;
|startX||the x-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|startY||the y-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|name  ||the name of the warp, unused but must be defined&lt;br /&gt;
|-&lt;br /&gt;
|width ||the width of the warp&lt;br /&gt;
|-&lt;br /&gt;
|height||the height of the warp&lt;br /&gt;
|-&lt;br /&gt;
|map2  ||the ending map&lt;br /&gt;
|-&lt;br /&gt;
|endX  ||the x-coordinate of the tile the player will end up on&lt;br /&gt;
|-&lt;br /&gt;
|endY  ||the y-coordinate of the tile the player will end up on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Width and height are described in detail here: [[EAthena Scripting Standards/Warp Details|Warp Details]].&lt;br /&gt;
&lt;br /&gt;
=== Monster Definitions ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;Shouldn&#039;t be done manually.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
Monsters are defined like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;|monster|&amp;lt;name&amp;gt;|&amp;lt;mobID&amp;gt;,&amp;lt;count&amp;gt;,&amp;lt;spawn1&amp;gt;,&amp;lt;spawn2&amp;gt;,{&amp;lt;eventcode&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|width      ||the tile width of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|name       ||the name of the mob, unused but must be defined. &#039;&#039;&#039;DO NOT&#039;&#039;&#039; use the keywords such as &amp;quot;spawn&amp;quot; in this name to avoid conflict with other game systems (magic for example)&lt;br /&gt;
|-&lt;br /&gt;
|mobID      ||the mob identifier of the desired monster (in the monster db)the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|count      ||the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|spawn1     ||the minimum delay between successive spawns (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|spawn2     ||the minimum delay between death and respawn (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
A detailed description of position and area can be found here: [[EAthena Scripting Standards/Mob Details|Mob Details]].&lt;br /&gt;
&lt;br /&gt;
=== NPC Definitions ===&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;triggerX&amp;gt;,&amp;lt;triggerY&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|facing     ||Direction the NPC faces to. &#039;&#039;&#039;It must be set to 0&#039;&#039;&#039; in TMW&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|Name       ||the name of the NPC&lt;br /&gt;
|-&lt;br /&gt;
|spriteID   ||the mob identifier of the desired NPC. Sprite ID&lt;br /&gt;
|-&lt;br /&gt;
|triggerX   ||&lt;br /&gt;
|-&lt;br /&gt;
|triggerY   ||&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
* Server side :&lt;br /&gt;
::NPC definitions (script) are usually stored as : &amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/&amp;lt;NPC Name&amp;gt;.txt or in the file :&amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/npc.txt&lt;br /&gt;
* Client side :&lt;br /&gt;
::The NPC is associated with a sprite (the image that will appear in the game), and a XML file which tells the client some display parameters.&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.png&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.xml&amp;lt;br/&amp;gt;The NPC spriteID is linked to graphic files and XML in the file : (tmwa-client-data/)npcs.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/NPC Details|NPC Details]]. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Script Functions ==&lt;br /&gt;
 function|script|&amp;lt;function name&amp;gt;|&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Actual script functions are stored or imported in the files : (tmwa-server-data/)world/map/npc/functions/&amp;lt;function name&amp;gt;.txt, regardless rhey are called from a Map, NPC, Mob or item.&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/function Details|function Details]]. --&amp;gt;&lt;br /&gt;
==Script Loading==&lt;br /&gt;
The main script import file is:[https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/scripts.conf (tmwa-server-data/)world/map/npc/scripts.conf] &amp;lt;br/&amp;gt;&lt;br /&gt;
It loads [https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/_import.txt (tmwa-server-data/)world/map/npc/_import.txt] which imports all NPC scripts wich are stored under the respective map name folders, usually under NPC name.&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
== Open a chest and get reward ==&lt;br /&gt;
An example is given by a quest to get a key for a chest (in fact 3 keys):&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:850px;&amp;quot; border=0 cellspacing=&amp;quot;10&amp;quot; &lt;br /&gt;
|-valign=&amp;quot;Top&amp;quot; &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
// A treasure chest. You need three keys to open it.&lt;br /&gt;
//&lt;br /&gt;
// TMW_Quest (document variable here)&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
002-4.gat,93,37,0|script|Treasure|111,{&lt;br /&gt;
&lt;br /&gt;
    if (TMW_Quest &amp;gt;= 38) goto L_Finished;&lt;br /&gt;
&lt;br /&gt;
    mes &amp;quot;There is a chest here.&amp;quot;;&lt;br /&gt;
    mes &amp;quot;Do you want to try to open it?&amp;quot;;&lt;br /&gt;
    next;&lt;br /&gt;
    menu&lt;br /&gt;
        &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
        &amp;quot;No.&amp;quot;, -;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Yes:&lt;br /&gt;
    if(countitem(&amp;quot;TreasureKey&amp;quot;) &amp;lt; 3)&lt;br /&gt;
        goto L_Not_Enough;&lt;br /&gt;
    getinventorylist;&lt;br /&gt;
    if (@inventorylist_count == 100 &amp;amp;&amp;amp; countitem(&amp;quot;TreasureKey&amp;quot;) &amp;gt; 3)&lt;br /&gt;
        goto L_TooMany;&lt;br /&gt;
    mes &amp;quot;You opened the chest and found a short bow!&amp;quot;;&lt;br /&gt;
    delitem &amp;quot;TreasureKey&amp;quot;, 3;&lt;br /&gt;
    getitem &amp;quot;ShortBow&amp;quot;, 1;&lt;br /&gt;
    set TMW_Quest, 38;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Not_Enough:&lt;br /&gt;
    mes &amp;quot;It seems that you do not have the right key for this chest yet...&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Finished:&lt;br /&gt;
    mes &amp;quot;You have already opened this chest.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_TooMany:&lt;br /&gt;
    mes &amp;quot;You do not have enough room to loot this chest. Maybe you should try again later.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
This script starts with describing the NPC (the chest, NPC sprite 111) and its location (map 002-4 X=93, Y=37, in tiles from top left of the map). Then follows what happens on activation:&lt;br /&gt;
First, the variable &#039;&#039;&amp;quot;TMW_Quest&amp;quot;&#039;&#039; is checked to know if the player already accomplished the quest &amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;(the variable should be documented)&#039;&#039;&#039;&amp;lt;/span&amp;gt;, If he has the script continues at label &#039;&#039;L_Finished&#039;&#039;, the player is reminded fe alredy accomplished the task and script finishes, if not the scrip continues. A message is shown (mes), then an option dialog (menu) is displayed with two possible answers : &amp;quot;Yes.&amp;quot; or &amp;quot;No.&amp;quot;. If the player answers &amp;quot;No.&amp;quot; the script stops (close;); if he answers &amp;quot;Yes.&amp;quot; the script continues at label &#039;&#039;L_Yes&#039;&#039;. Now player is checked to know if he has at least 3 keys, if not script branches to label &#039;&#039;L_Not_Enough&#039;&#039; tells the player he  &amp;quot;has not the right key&amp;quot; and script closes. If he has keys enough, his inventory list is retrieved by the built-in function &amp;quot;getinventorylist&amp;quot; and it&#039;s content is checked to know if the player will have room enough to store the reward after the 3 keys use. If not, script goes to label &#039;&#039;L_TooMany&#039;&#039; and script close after a warning message, If yes 3 keys are deleted in player&#039;s inventory,  he gets the reward: a Short Bow and the variable TMW_Quest is set to 38.&lt;br /&gt;
&lt;br /&gt;
For more examples of the current system, check out the current scripts in use by the server. Beware though, this could affect your enjoyment of the game as it does spoil some of the mystery. Here&#039;s a link to git so you can view them in your browser:&lt;br /&gt;
&lt;br /&gt;
https://github.com/themanaworld/tmwa-server-data/tree/master/world/map/npc&lt;br /&gt;
&lt;br /&gt;
Note that anything said by an NPC should be put in double quotes (&amp;quot;). You can do that like this: &amp;quot;&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039;Hello!&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039; she said.&amp;quot;&lt;br /&gt;
=References=&lt;br /&gt;
* [[EAthena Scripting Basics]]&lt;br /&gt;
* [[EAthena Scripting Reference]]&lt;br /&gt;
* [http://forums.themanaworld.org/viewtopic.php?f=13&amp;amp;t=13653 script cleanup/scripting standards proposal]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Guidelines&amp;diff=25320</id>
		<title>Development:Guidelines</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Guidelines&amp;diff=25320"/>
		<updated>2013-01-26T09:36:17Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: /* General */  Remove the request to use Mantis, as it isn&amp;#039;t in use anymore.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Status_green}}&lt;br /&gt;
When creating pixel art for TMW, please make sure to follow these guidelines. Pixel art which does not will have a much-lessened chance of getting into the game.&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
* All graphics &#039;&#039;&#039;must&#039;&#039;&#039; be released under the GNU General Public License or a compatible license.&lt;br /&gt;
* Try to hang around in our development IRC channel #tmw-dev on [irc://irc.themanaworld.org irc.themanaworld.org] whenever possible.&lt;br /&gt;
* Do not be afraid to show us your pixel art, we are here to guide and help you. Pixel art being worked on (Usually tagged with [WIP], for work in progress) can be posted on the [http://forums.themanaworld.org/viewforum.php?f=8 forums].&lt;br /&gt;
* The pixel art &#039;&#039;&#039;must&#039;&#039;&#039; be made by you or derived from TMW&#039;s existing graphics. We will never accept pixel art ripped from other games nor from undisclosed sources.&lt;br /&gt;
* The following games can be used as inspiration:&lt;br /&gt;
**Secret of Mana 2&lt;br /&gt;
**Final Fantasy VI (Named Final Fantasy III in North America)&lt;br /&gt;
**Chrono Trigger&lt;br /&gt;
**Ragnarok Online&lt;br /&gt;
&lt;br /&gt;
=== General Guidelines ===&lt;br /&gt;
* Light Source: Above, from South-West. For tilesets, this roughly means from the bottom-left corner; for items, the top-left. ([[:Image:Lightdirection.png|Example]])&lt;br /&gt;
* Perspective: top-down 45° view angle. ([[:Image:Perspective_Reference.png|Example]])&lt;br /&gt;
* Dyeable Images: Images can be dyed, see [[Image dyeing]] for more information&lt;br /&gt;
* Outlines: 1px, coloured. We use 3 kinds of different outlines:&lt;br /&gt;
**Ground level: should have the dullest colors (no outlines everything blends into each other) ([[:Image:Outlines_ground.png|Example]])&lt;br /&gt;
**Objects level: stands out from the ground level (with more contrast and maybe even a light outline)&lt;br /&gt;
**Sprites (characters, monsters etc.) and item icons level: stands out the most (heavily saturated with dark outlines)&lt;br /&gt;
** Objects should be fully lit ([[:Image:Lighting fill.png|Example]])&lt;br /&gt;
* Wind Direction: From West to East&lt;br /&gt;
* Proportions: A character is approximately one tile wide (32px) and two tiles high (64px) ([[:Image:Size.png|Example]])&lt;br /&gt;
* Drop Shadows:&lt;br /&gt;
**Large objects on outdoor tilesets have a drop shadow to the northeast&lt;br /&gt;
**Flying creatures have a drop shadow ([[:Image:Dropshadow.png|Example]])&lt;br /&gt;
**Shadows should be pure black (#000000), and have a opacity of 30%, the edges have a opacity of 15%&lt;br /&gt;
* Anti-aliasing: Only if it does not look smooth without it&lt;br /&gt;
* Blood: May only be used if it spice up certain environments that needs to be extra creepy. ([[:Image:No_blood_new.png|Example]])&lt;br /&gt;
&lt;br /&gt;
=== Creatures ===&lt;br /&gt;
[[Monsterset development]]&lt;br /&gt;
* Mirroring the shape of a sprite is acceptable, provided the shading is correct on each frame.&lt;br /&gt;
* There is no size restriction, although the &amp;quot;attackable&amp;quot; area of a monster is only 1*1 tile.&lt;br /&gt;
&lt;br /&gt;
=== Icons ===&lt;br /&gt;
[[User:EJlol/Guidelines/Icon examples|Icon Development]]&lt;br /&gt;
* Use other icons as examples if possible ([[:Image:Icons.png|Example]])&lt;br /&gt;
&lt;br /&gt;
=== NPCs ===&lt;br /&gt;
* NPCs must be in the same style as the player sprites.&lt;br /&gt;
** NPCs do not and should not be constrained by player pose and body shape.&lt;br /&gt;
** Shadows should NOT be used for NPCs, shadows are reserved for large objects or flying creatures.&lt;br /&gt;
&lt;br /&gt;
=== Tilesets ===&lt;br /&gt;
[[Tileset development]]&lt;br /&gt;
* All tilesets should have the same amount of texture. Use the [http://gitorious.org/tmwdata/mainline/blobs/master/graphics/tiles/Forest.png New Forest Tileset] as reference&lt;br /&gt;
* Do not use visible outlines&lt;br /&gt;
* Do not use vanishing point projection. All objects have to be drawn in zero-point perspective ([[:Image:Vanishing point perspective.png|Example]])&lt;br /&gt;
* Use pure black (#000000) for &amp;quot;nothing&amp;quot;; eg, the tiles surrounding indoor or dungeon areas.&lt;br /&gt;
* Try to match the brightness and contrast of the reference tileset&lt;br /&gt;
** Outdoor: Woodland tileset&lt;br /&gt;
** Indoor: Woodland Indoor tileset&lt;br /&gt;
** Dungeons: Cave tileset&lt;br /&gt;
* All tiles on a single tileset should have the same warmth to them, unless it should specifically be otherwise.&lt;br /&gt;
* When adding to an existing tileset, try to use the same colours as much as possible to get the same feeling&lt;br /&gt;
&lt;br /&gt;
== How to get your content in to the game ==&lt;br /&gt;
&lt;br /&gt;
*Start a thread in the [http://forums.themanaworld.org/viewforum.php?f=18 forum], with a subject line beginning [WIP] (work in progress).&lt;br /&gt;
*Discuss it and edit it a few times until it&#039;s ready.&lt;br /&gt;
*Change the [WIP] thread&#039;s title to [WIP]&amp;gt;[FND] (finished), and make it clear which is the final version.&lt;br /&gt;
*Wait for the thread to marked [RC] (release candidate) by a developer and then pushed and marked [GIT] by another. Your work will then be included in the next update.&lt;br /&gt;
&lt;br /&gt;
== Tutorials ==&lt;br /&gt;
If you are not very experienced at creating pixel art, you should take a look at the following tutorials. You can learn many interesting tricks from them.&lt;br /&gt;
&lt;br /&gt;
*[http://www.petesqbsite.com/sections/tutorials/tuts/tsugumo/ So You Want To Be A Pixel Artist by Tsugumo].&lt;br /&gt;
*[http://www.natomic.com/hosted/marks/mpat/ Mark&#039;s Pixel Art Tutorial]&lt;br /&gt;
*[http://www.derekyu.com/?page_id=218 Derek Yu&#039;s Pixel Art Tutorial]&lt;br /&gt;
*[http://pixel-zone.rpgdx.net/shtml/tutorials.shtml Pixel-Zone Tutorials]&lt;br /&gt;
*[http://www.pixeljoint.com/pixels/links.asp?id=2192 Pixel Art Links]&lt;br /&gt;
*[http://mruk.wordpress.com/2008/04/06/the-mana-world-pixelart-tutorial-desert-well/ Mruk&#039;s Desert Well Tutorial]&lt;br /&gt;
* [http://mruk.wordpress.com/2009/03/12/the-mana-world-tutorial-challanging-an-imposible-shape/ Mruk&#039;s Impossible Shape Design Tutorial]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=25230</id>
		<title>Classic:TmwAthena Scripting Standards</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=25230"/>
		<updated>2013-01-04T16:06:03Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to standardize the eAthena coding. Any suggestions are welcome to be posted on the discussion page before editing.&lt;br /&gt;
=Code Formatting=&lt;br /&gt;
== Indentation ==&lt;br /&gt;
* Code is indented with four spaces. &lt;br /&gt;
* Code in the same block should have the same indentation. &lt;br /&gt;
* Labels have no indentation. &lt;br /&gt;
* Menu options are on their own lines and are indented further. &lt;br /&gt;
Example:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
* When using an if-statement, there should be a line break after the condition and the conditional command should be indented further. An exception to this is a series of if-statements at the beginning of a major code block which use gotos to jump to the correct position in the script. In this case the goto should be in the same line as the if-statement.&lt;br /&gt;
Example:&lt;br /&gt;
 // if-statement and conditional command in the same line, gotos aligned&lt;br /&gt;
 if (@quest &amp;gt;= 3) goto L_Done;&lt;br /&gt;
 if (@quest == 2) goto L_Progress;&lt;br /&gt;
 if (@quest == 1) goto L_Question;&lt;br /&gt;
 &lt;br /&gt;
 // conditional command in the next line and indented further&lt;br /&gt;
 if (BaseLevel &amp;lt; 40)&lt;br /&gt;
     set @cost, 100;&lt;br /&gt;
&lt;br /&gt;
== Whitespaces==&lt;br /&gt;
In many places whitespaces can increase readability. Examples are&lt;br /&gt;
* When concatenating text and variables:&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot; + strcharinfo(0) + &amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
instead of&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot;+strcharinfo(0)+&amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
* When assigning values to variables:&lt;br /&gt;
 set @var, 3;&lt;br /&gt;
instead of&lt;br /&gt;
 set @var,3;&lt;br /&gt;
* In menus:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
instead of&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;,L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;,L_No;&lt;br /&gt;
&lt;br /&gt;
== Code Blocks ==&lt;br /&gt;
* Code blocks should be separated from the others in a dinstinct way: insert a blank line between code blocks. &lt;br /&gt;
* Individual blocks should be together No blank lines within a block. &lt;br /&gt;
* The opening brackets should be at the end of the parent line, not in a new line; the closing ones should be in a line of their own.&lt;br /&gt;
&lt;br /&gt;
==Labels and Subfunctions==&lt;br /&gt;
* Newline before every label&lt;br /&gt;
* No newline after a label&lt;br /&gt;
* Labels should always start with L_, except those that act as a subfunction, which should start with S_. There must not be a fallthrough or goto to a subfunction label.&lt;br /&gt;
* Lables should be named in this way: L_CamelCase&lt;br /&gt;
* Subfunctions should be named in this way: S_CamelCase&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
At the beginning of a script file there should be documented &lt;br /&gt;
* who is the author&lt;br /&gt;
* the purpose of the script&lt;br /&gt;
* which variables are used and what&#039;s their purpose&lt;br /&gt;
* any additional information that can help to understand the script&lt;br /&gt;
Example:&lt;br /&gt;
 // Author: devxy&lt;br /&gt;
 // This file contains the NPC John, who is part of the Example quest.&lt;br /&gt;
 // Quest states are saved in Quest_Example.&lt;br /&gt;
 // State 1: started the quest&lt;br /&gt;
 // State 2: did the next step&lt;br /&gt;
 [...]&lt;br /&gt;
&lt;br /&gt;
Within the script there should be comments if there are parts which might be difficult to understand.&lt;br /&gt;
&lt;br /&gt;
In some of the older scripts there are boxed comments used like this:&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
 //# NPC John - By Smith                                                           #&lt;br /&gt;
 //#                                                                               #&lt;br /&gt;
 //#  ...                                                                          #&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
Don&#039;t use them in new scripts.&lt;br /&gt;
&lt;br /&gt;
=Variables=&lt;br /&gt;
==Document Variables==&lt;br /&gt;
in every file, document every variable as one of:&lt;br /&gt;
&lt;br /&gt;
* #  account variable (prefix #) (note that there are also ## variable which didn&#039;t work in the stable version of the server)&lt;br /&gt;
*    permanent player variable (no prefix)&lt;br /&gt;
* @  temporary player variable (prefix @) - used after the script close;s or end;s.&lt;br /&gt;
* @  dynamic player variable (prefix @) - passed into or out of callsub or callfunc&lt;br /&gt;
* @  lexical (local) player variable (prefix @) - used only within the function (scripthelp.txt documents that &amp;quot;.@&amp;quot; means this but I don&#039;t know if that works)&lt;br /&gt;
* @  local constant (prefix @) - not dependent on the player, used only within the function. e.g. lots of @QUEST_FOO_{SHIFT,MASK}&lt;br /&gt;
* $  global permanent variable (prefix $) (I&#039;m not sure if we have any of these right now)&lt;br /&gt;
* $  npc permanent variable (prefix $) same as above but only used by one NPC&lt;br /&gt;
* $  global temporary variable (prefix $@)&lt;br /&gt;
* $@ npc temporary variable (prefix $@) same as above but only used by one NPC, scripthelp.txt mentions prefix &amp;quot;.&amp;quot; but I don&#039;t know if that works&lt;br /&gt;
*    special variable (in db/const.txt with a 1 following)&lt;br /&gt;
*    global constant (in const.txt)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If we use a consistent method of documenting these, we can then generate a list of all variables by type.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Variables initialization==&lt;br /&gt;
Check for troublesome arrays:&lt;br /&gt;
A troublesome array is defined as an array that is not&lt;br /&gt;
*initialized all at once&lt;br /&gt;
*initialized by appending elements to the end, for use in a menu&lt;br /&gt;
 Nothing needs to be done, merely document them. I want this information at hand when I design the new scripting language to minimize conversion pains.&lt;br /&gt;
 I wouldn&#039;t be surprised if there were no troublesome arrays at all. If there are only a couple it might be worth refactoring the code to remove them, but that might be a  high-level decision which is beyond the scope of this proposal.&lt;br /&gt;
&lt;br /&gt;
Set dynamic and local @variables to 0 before close;&lt;br /&gt;
==Naming Variables==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using as little variables as you need==&lt;br /&gt;
So there are some quests, which require lots of variables.&lt;br /&gt;
Think of monster oil quest, Oric and Warum quest etc.&lt;br /&gt;
&lt;br /&gt;
This can often be done by bitmasking: &lt;br /&gt;
One variable has 32 bits. So a variabe can store 2^32 different numbers: 4294967296&lt;br /&gt;
&lt;br /&gt;
But sometimes you only need numbers from 0 to 15, but more of these variables.&lt;br /&gt;
but numbers in range 0 to 15 can be stored in 4 bits ( 2^4 = 16 different numbers)&lt;br /&gt;
&lt;br /&gt;
Here is an example how to use bitmasking:&lt;br /&gt;
[[Media:Tester.txt]]&lt;br /&gt;
== Defining Map Objects ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These sections describe how to define map objects.&lt;br /&gt;
&lt;br /&gt;
=== Warp Definitions ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;Shouldn&#039;t be done manually.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
Warps are what move players between maps. They can also be used to move players around a single map, if needed. Warps are defined like this:&lt;br /&gt;
&lt;br /&gt;
 map1,startX,startY|warp|name|width,height,map2,endX,endY&lt;br /&gt;
&lt;br /&gt;
Key:&lt;br /&gt;
{|&lt;br /&gt;
|map1  ||the starting map&lt;br /&gt;
|-&lt;br /&gt;
|startX||the x-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|startY||the y-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|name  ||the name of the warp, unused but must be defined&lt;br /&gt;
|-&lt;br /&gt;
|width ||the width of the warp&lt;br /&gt;
|-&lt;br /&gt;
|height||the height of the warp&lt;br /&gt;
|-&lt;br /&gt;
|map2  ||the ending map&lt;br /&gt;
|-&lt;br /&gt;
|endX  ||the x-coordinate of the tile the player will end up on&lt;br /&gt;
|-&lt;br /&gt;
|endY  ||the y-coordinate of the tile the player will end up on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Width and height are described in detail here: [[EAthena Scripting Standards/Warp Details|Warp Details]].&lt;br /&gt;
&lt;br /&gt;
=== Monster Definitions ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;Shouldn&#039;t be done manually.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
Monsters are defined like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;|monster|&amp;lt;name&amp;gt;|&amp;lt;mobID&amp;gt;,&amp;lt;count&amp;gt;,&amp;lt;spawn1&amp;gt;,&amp;lt;spawn2&amp;gt;,{&amp;lt;eventcode&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|width      ||the tile width of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|name       ||the name of the mob, unused but must be defined. &#039;&#039;&#039;DO NOT&#039;&#039;&#039; use the keywords such as &amp;quot;spawn&amp;quot; in this name to avoid conflict with other game systems (magic for example)&lt;br /&gt;
|-&lt;br /&gt;
|mobID      ||the mob identifier of the desired monster (in the monster db)the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|count      ||the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|spawn1     ||the minimum delay between successive spawns (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|spawn2     ||the minimum delay between death and respawn (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
A detailed description of position and area can be found here: [[EAthena Scripting Standards/Mob Details|Mob Details]].&lt;br /&gt;
&lt;br /&gt;
=== NPC Definitions ===&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;triggerX&amp;gt;,&amp;lt;triggerY&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|facing     ||Direction the NPC faces to. &#039;&#039;&#039;It must be set to 0&#039;&#039;&#039; in TMW&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|Name       ||the name of the NPC&lt;br /&gt;
|-&lt;br /&gt;
|spriteID   ||the mob identifier of the desired NPC. Sprite ID&lt;br /&gt;
|-&lt;br /&gt;
|triggerX   ||&lt;br /&gt;
|-&lt;br /&gt;
|triggerY   ||&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
* Server side :&lt;br /&gt;
::NPC definitions (script) are usually stored as : &amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/&amp;lt;NPC Name&amp;gt;.txt or in the file :&amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/npc.txt&lt;br /&gt;
* Client side :&lt;br /&gt;
::The NPC is associated with a sprite (the image that will appear in the game), and a XML file which tells the client some display parameters.&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.png&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.xml&amp;lt;br/&amp;gt;The NPC spriteID is linked to graphic files and XML in the file : (tmwa-client-data/)npcs.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/NPC Details|NPC Details]]. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Script Functions ==&lt;br /&gt;
 function|script|&amp;lt;function name&amp;gt;|&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Actual script functions are stored or imported in the files : (tmwa-server-data/)world/map/npc/functions/&amp;lt;function name&amp;gt;.txt, regardless rhey are called from a Map, NPC, Mob or item.&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/function Details|function Details]]. --&amp;gt;&lt;br /&gt;
==Script Loading==&lt;br /&gt;
The main script import file is:[https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/scripts.conf (tmwa-server-data/)world/map/npc/scripts.conf] &amp;lt;br/&amp;gt;&lt;br /&gt;
It loads [https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/_import.txt (tmwa-server-data/)world/map/npc/_import.txt] which imports all NPC scripts wich are stored under the respective map name folders, usually under NPC name.&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
== Open a chest and get reward ==&lt;br /&gt;
An example is given by a quest to get a key for a chest (in fact 3 keys):&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:850px;&amp;quot; border=0 cellspacing=&amp;quot;10&amp;quot; &lt;br /&gt;
|-valign=&amp;quot;Top&amp;quot; &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
// A treasure chest. You need three keys to open it.&lt;br /&gt;
//&lt;br /&gt;
// TMW_Quest (document variable here)&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
002-4.gat,93,37,0|script|Treasure|111,{&lt;br /&gt;
&lt;br /&gt;
    if (TMW_Quest &amp;gt;= 38) goto L_Finished;&lt;br /&gt;
&lt;br /&gt;
    mes &amp;quot;There is a chest here.&amp;quot;;&lt;br /&gt;
    mes &amp;quot;Do you want to try to open it?&amp;quot;;&lt;br /&gt;
    next;&lt;br /&gt;
    menu&lt;br /&gt;
        &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
        &amp;quot;No.&amp;quot;, -;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Yes:&lt;br /&gt;
    if(countitem(&amp;quot;TreasureKey&amp;quot;) &amp;lt; 3)&lt;br /&gt;
        goto L_Not_Enough;&lt;br /&gt;
    getinventorylist;&lt;br /&gt;
    if (@inventorylist_count == 100 &amp;amp;&amp;amp; countitem(&amp;quot;TreasureKey&amp;quot;) &amp;gt; 3)&lt;br /&gt;
        goto L_TooMany;&lt;br /&gt;
    mes &amp;quot;You opened the chest and found a short bow!&amp;quot;;&lt;br /&gt;
    delitem &amp;quot;TreasureKey&amp;quot;, 3;&lt;br /&gt;
    getitem &amp;quot;ShortBow&amp;quot;, 1;&lt;br /&gt;
    set TMW_Quest, 38;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Not_Enough:&lt;br /&gt;
    mes &amp;quot;It seems that you do not have the right key for this chest yet...&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Finished:&lt;br /&gt;
    mes &amp;quot;You have already opened this chest.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_TooMany:&lt;br /&gt;
    mes &amp;quot;You do not have enough room to loot this chest. Maybe you should try again later.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
This script starts with describing the NPC (the chest, NPC sprite 111) and its location (map 002-4 X=93, Y=37, in tiles from top left of the map). Then follows what happens on activation:&lt;br /&gt;
First, the variable &#039;&#039;&amp;quot;TMW_Quest&amp;quot;&#039;&#039; is checked to know if the player already accomplished the quest &amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;(the variable should be documented)&#039;&#039;&#039;&amp;lt;/span&amp;gt;, If he has the script continues at label &#039;&#039;L_Finished&#039;&#039;, the player is reminded fe alredy accomplished the task and script finishes, if not the scrip continues. A message is shown (mes), then an option dialog (menu) is displayed with two possible answers : &amp;quot;Yes.&amp;quot; or &amp;quot;No.&amp;quot;. If the player answers &amp;quot;No.&amp;quot; the script stops (close;); if he answers &amp;quot;Yes.&amp;quot; the script continues at label &#039;&#039;L_Yes&#039;&#039;. Now player is checked to know if he has at least 3 keys, if not script branches to label &#039;&#039;L_Not_Enough&#039;&#039; tells the player he  &amp;quot;has not the right key&amp;quot; and script closes. If he has keys enough, his inventory list is retrieved by the built-in function &amp;quot;getinventorylist&amp;quot; and it&#039;s content is checked to know if the player will have room enough to store the reward after the 3 keys use. If not, script goes to label &#039;&#039;L_TooMany&#039;&#039; and script close after a warning message, If yes 3 keys are deleted in player&#039;s inventory,  he gets the reward: a Short Bow and the variable TMW_Quest is set to 38.&lt;br /&gt;
&lt;br /&gt;
For more examples of the current system, check out the current scripts in use by the server. Beware though, this could affect your enjoyment of the game as it does spoil some of the mystery. Here&#039;s a link to git so you can view them in your browser:&lt;br /&gt;
&lt;br /&gt;
https://github.com/themanaworld/tmwa-server-data/tree/master/world/map/npc&lt;br /&gt;
&lt;br /&gt;
Note that anything said by an NPC should be put in double quotes (&amp;quot;). You can do that like this: &amp;quot;&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039;Hello!&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039; she said.&amp;quot;&lt;br /&gt;
=References=&lt;br /&gt;
* [[EAthena Scripting Basics]]&lt;br /&gt;
* [[EAthena Scripting Reference]]&lt;br /&gt;
* [http://forums.themanaworld.org/viewtopic.php?f=13&amp;amp;t=13653 script cleanup/scripting standards proposal]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=25229</id>
		<title>Classic:TmwAthena Scripting Standards</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=25229"/>
		<updated>2013-01-03T21:19:57Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Remove marks about the article being outdated and under construction.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to standardize the eAthena coding. Any suggestions are welcome to be posted on the discussion page before editing.&lt;br /&gt;
=Code Formatting=&lt;br /&gt;
== Indentation ==&lt;br /&gt;
* Code is indented with four spaces. &lt;br /&gt;
* Code in the same block should have the same indentation. &lt;br /&gt;
* Labels have no indentation. &lt;br /&gt;
* Menu options are on their own lines and are indented further. &lt;br /&gt;
Example:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
* When using an if-statement, there should be a line break after the condition and the conditional command should be indented further. An exception to this is a series of if-statements at the beginning of a major code block which use gotos to jump to the correct position in the script. In this case the goto should be in the same line as the if-statement.&lt;br /&gt;
Example:&lt;br /&gt;
 // if-statement and conditional command in the same line, gotos aligned&lt;br /&gt;
 if (@quest &amp;gt;= 3)  goto L_Done;&lt;br /&gt;
 if (@quest == 2) goto L_Progress;&lt;br /&gt;
 if (@quest == 1) goto L_Question;&lt;br /&gt;
 &lt;br /&gt;
 // conditional command in the next line and indented further&lt;br /&gt;
 if (BaseLevel &amp;lt; 40)&lt;br /&gt;
     set @cost, 100;&lt;br /&gt;
&lt;br /&gt;
== Whitespaces==&lt;br /&gt;
In many places whitespaces can increase readability. Examples are&lt;br /&gt;
* When concatenating text and variables:&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot; + strcharinfo(0) + &amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
instead of&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot;+strcharinfo(0)+&amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
* When assigning values to variables:&lt;br /&gt;
 set @var, 3;&lt;br /&gt;
instead of&lt;br /&gt;
 set @var,3;&lt;br /&gt;
* In menus:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
instead of&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;,L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;,L_No;&lt;br /&gt;
&lt;br /&gt;
== Code Blocks ==&lt;br /&gt;
* Code blocks should be separated from the others in a dinstinct way: insert a blank line between code blocks. &lt;br /&gt;
* Individual blocks should be together No blank lines within a block. &lt;br /&gt;
* The opening brackets should be at the end of the parent line, not in a new line; the closing ones should be in a line of their own.&lt;br /&gt;
&lt;br /&gt;
==Labels and Subfunctions==&lt;br /&gt;
* Newline before every label&lt;br /&gt;
* No newline after a label&lt;br /&gt;
* Labels should always start with L_, except those that act as a subfunction, which should start with S_. There must not be a fallthrough or goto to a subfunction label.&lt;br /&gt;
* Lables should be named in this way: L_CamelCase&lt;br /&gt;
* Subfunctions should be named in this way: S_CamelCase&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
At the beginning of a script file there should be documented &lt;br /&gt;
* who is the author&lt;br /&gt;
* the purpose of the script&lt;br /&gt;
* which variables are used and what&#039;s their purpose&lt;br /&gt;
* any additional information that can help to understand the script&lt;br /&gt;
Example:&lt;br /&gt;
 // Author: devxy&lt;br /&gt;
 // This file contains the NPC John, who is part of the Example quest.&lt;br /&gt;
 // Quest states are saved in Quest_Example.&lt;br /&gt;
 // State 1: started the quest&lt;br /&gt;
 // State 2: did the next step&lt;br /&gt;
 [...]&lt;br /&gt;
&lt;br /&gt;
Within the script there should be comments if there are parts which might be difficult to understand.&lt;br /&gt;
&lt;br /&gt;
In some of the older scripts there are boxed comments used like this:&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
 //# NPC John - By Smith                                                           #&lt;br /&gt;
 //#                                                                               #&lt;br /&gt;
 //#  ...                                                                          #&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
Don&#039;t use them in new scripts.&lt;br /&gt;
&lt;br /&gt;
=Variables=&lt;br /&gt;
==Document Variables==&lt;br /&gt;
in every file, document every variable as one of:&lt;br /&gt;
&lt;br /&gt;
* #  account variable (prefix #) (note that there are also ## variable which didn&#039;t work in the stable version of the server)&lt;br /&gt;
*    permanent player variable (no prefix)&lt;br /&gt;
* @  temporary player variable (prefix @) - used after the script close;s or end;s.&lt;br /&gt;
* @  dynamic player variable (prefix @) - passed into or out of callsub or callfunc&lt;br /&gt;
* @  lexical (local) player variable (prefix @) - used only within the function (scripthelp.txt documents that &amp;quot;.@&amp;quot; means this but I don&#039;t know if that works)&lt;br /&gt;
* @  local constant (prefix @) - not dependent on the player, used only within the function. e.g. lots of @QUEST_FOO_{SHIFT,MASK}&lt;br /&gt;
* $  global permanent variable (prefix $) (I&#039;m not sure if we have any of these right now)&lt;br /&gt;
* $  npc permanent variable (prefix $) same as above but only used by one NPC&lt;br /&gt;
* $  global temporary variable (prefix $@)&lt;br /&gt;
* $@ npc temporary variable (prefix $@) same as above but only used by one NPC, scripthelp.txt mentions prefix &amp;quot;.&amp;quot; but I don&#039;t know if that works&lt;br /&gt;
*    special variable (in db/const.txt with a 1 following)&lt;br /&gt;
*    global constant (in const.txt)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If we use a consistent method of documenting these, we can then generate a list of all variables by type.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Variables initialization==&lt;br /&gt;
Check for troublesome arrays:&lt;br /&gt;
A troublesome array is defined as an array that is not&lt;br /&gt;
*initialized all at once&lt;br /&gt;
*initialized by appending elements to the end, for use in a menu&lt;br /&gt;
 Nothing needs to be done, merely document them. I want this information at hand when I design the new scripting language to minimize conversion pains.&lt;br /&gt;
 I wouldn&#039;t be surprised if there were no troublesome arrays at all. If there are only a couple it might be worth refactoring the code to remove them, but that might be a  high-level decision which is beyond the scope of this proposal.&lt;br /&gt;
&lt;br /&gt;
Set dynamic and local @variables to 0 before close;&lt;br /&gt;
==Naming Variables==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using as little variables as you need==&lt;br /&gt;
So there are some quests, which require lots of variables.&lt;br /&gt;
Think of monster oil quest, Oric and Warum quest etc.&lt;br /&gt;
&lt;br /&gt;
This can often be done by bitmasking: &lt;br /&gt;
One variable has 32 bits. So a variabe can store 2^32 different numbers: 4294967296&lt;br /&gt;
&lt;br /&gt;
But sometimes you only need numbers from 0 to 15, but more of these variables.&lt;br /&gt;
but numbers in range 0 to 15 can be stored in 4 bits ( 2^4 = 16 different numbers)&lt;br /&gt;
&lt;br /&gt;
Here is an example how to use bitmasking:&lt;br /&gt;
[[Media:Tester.txt]]&lt;br /&gt;
== Defining Map Objects ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These sections describe how to define map objects.&lt;br /&gt;
&lt;br /&gt;
=== Warp Definitions ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;Shouldn&#039;t be done manually.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
Warps are what move players between maps. They can also be used to move players around a single map, if needed. Warps are defined like this:&lt;br /&gt;
&lt;br /&gt;
 map1,startX,startY|warp|name|width,height,map2,endX,endY&lt;br /&gt;
&lt;br /&gt;
Key:&lt;br /&gt;
{|&lt;br /&gt;
|map1  ||the starting map&lt;br /&gt;
|-&lt;br /&gt;
|startX||the x-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|startY||the y-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|name  ||the name of the warp, unused but must be defined&lt;br /&gt;
|-&lt;br /&gt;
|width ||the width of the warp&lt;br /&gt;
|-&lt;br /&gt;
|height||the height of the warp&lt;br /&gt;
|-&lt;br /&gt;
|map2  ||the ending map&lt;br /&gt;
|-&lt;br /&gt;
|endX  ||the x-coordinate of the tile the player will end up on&lt;br /&gt;
|-&lt;br /&gt;
|endY  ||the y-coordinate of the tile the player will end up on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Width and height are described in detail here: [[EAthena Scripting Standards/Warp Details|Warp Details]].&lt;br /&gt;
&lt;br /&gt;
=== Monster Definitions ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;Shouldn&#039;t be done manually.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
Monsters are defined like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;|monster|&amp;lt;name&amp;gt;|&amp;lt;mobID&amp;gt;,&amp;lt;count&amp;gt;,&amp;lt;spawn1&amp;gt;,&amp;lt;spawn2&amp;gt;,{&amp;lt;eventcode&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|width      ||the tile width of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|name       ||the name of the mob, unused but must be defined. &#039;&#039;&#039;DO NOT&#039;&#039;&#039; use the keywords such as &amp;quot;spawn&amp;quot; in this name to avoid conflict with other game systems (magic for example)&lt;br /&gt;
|-&lt;br /&gt;
|mobID      ||the mob identifier of the desired monster (in the monster db)the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|count      ||the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|spawn1     ||the minimum delay between successive spawns (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|spawn2     ||the minimum delay between death and respawn (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
A detailed description of position and area can be found here: [[EAthena Scripting Standards/Mob Details|Mob Details]].&lt;br /&gt;
&lt;br /&gt;
=== NPC Definitions ===&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;triggerX&amp;gt;,&amp;lt;triggerY&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|facing     ||Direction the NPC faces to. &#039;&#039;&#039;It must be set to 0&#039;&#039;&#039; in TMW&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|Name       ||the name of the NPC&lt;br /&gt;
|-&lt;br /&gt;
|spriteID   ||the mob identifier of the desired NPC. Sprite ID&lt;br /&gt;
|-&lt;br /&gt;
|triggerX   ||&lt;br /&gt;
|-&lt;br /&gt;
|triggerY   ||&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
* Server side :&lt;br /&gt;
::NPC definitions (script) are usually stored as : &amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/&amp;lt;NPC Name&amp;gt;.txt or in the file :&amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/npc.txt&lt;br /&gt;
* Client side :&lt;br /&gt;
::The NPC is associated with a sprite (the image that will appear in the game), and a XML file which tells the client some display parameters.&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.png&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.xml&amp;lt;br/&amp;gt;The NPC spriteID is linked to graphic files and XML in the file : (tmwa-client-data/)npcs.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/NPC Details|NPC Details]]. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Script Functions ==&lt;br /&gt;
 function|script|&amp;lt;function name&amp;gt;|&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Actual script functions are stored or imported in the files : (tmwa-server-data/)world/map/npc/functions/&amp;lt;function name&amp;gt;.txt, regardless rhey are called from a Map, NPC, Mob or item.&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/function Details|function Details]]. --&amp;gt;&lt;br /&gt;
==Script Loading==&lt;br /&gt;
The main script import file is:[https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/scripts.conf (tmwa-server-data/)world/map/npc/scripts.conf] &amp;lt;br/&amp;gt;&lt;br /&gt;
It loads [https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/_import.txt (tmwa-server-data/)world/map/npc/_import.txt] which imports all NPC scripts wich are stored under the respective map name folders, usually under NPC name.&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
== Open a chest and get reward ==&lt;br /&gt;
An example is given by a quest to get a key for a chest (in fact 3 keys):&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:850px;&amp;quot; border=0 cellspacing=&amp;quot;10&amp;quot; &lt;br /&gt;
|-valign=&amp;quot;Top&amp;quot; &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
// A treasure chest. You need three keys to open it.&lt;br /&gt;
//&lt;br /&gt;
// TMW_Quest (document variable here)&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
002-4.gat,93,37,0|script|Treasure|111,{&lt;br /&gt;
&lt;br /&gt;
    if (TMW_Quest &amp;gt;= 38) goto L_Finished;&lt;br /&gt;
&lt;br /&gt;
    mes &amp;quot;There is a chest here.&amp;quot;;&lt;br /&gt;
    mes &amp;quot;Do you want to try to open it?&amp;quot;;&lt;br /&gt;
    next;&lt;br /&gt;
    menu&lt;br /&gt;
        &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
        &amp;quot;No.&amp;quot;, -;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Yes:&lt;br /&gt;
    if(countitem(&amp;quot;TreasureKey&amp;quot;) &amp;lt; 3)&lt;br /&gt;
        goto L_Not_Enough;&lt;br /&gt;
    getinventorylist;&lt;br /&gt;
    if (@inventorylist_count == 100 &amp;amp;&amp;amp; countitem(&amp;quot;TreasureKey&amp;quot;) &amp;gt; 3)&lt;br /&gt;
        goto L_TooMany;&lt;br /&gt;
    mes &amp;quot;You opened the chest and found a short bow!&amp;quot;;&lt;br /&gt;
    delitem &amp;quot;TreasureKey&amp;quot;, 3;&lt;br /&gt;
    getitem &amp;quot;ShortBow&amp;quot;, 1;&lt;br /&gt;
    set TMW_Quest, 38;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Not_Enough:&lt;br /&gt;
    mes &amp;quot;It seems that you do not have the right key for this chest yet...&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Finished:&lt;br /&gt;
    mes &amp;quot;You have already opened this chest.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_TooMany:&lt;br /&gt;
    mes &amp;quot;You do not have enough room to loot this chest. Maybe you should try again later.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
This script starts with describing the NPC (the chest, NPC sprite 111) and its location (map 002-4 X=93, Y=37, in tiles from top left of the map). Then follows what happens on activation:&lt;br /&gt;
First, the variable &#039;&#039;&amp;quot;TMW_Quest&amp;quot;&#039;&#039; is checked to know if the player already accomplished the quest &amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;(the variable should be documented)&#039;&#039;&#039;&amp;lt;/span&amp;gt;, If he has the script continues at label &#039;&#039;L_Finished&#039;&#039;, the player is reminded fe alredy accomplished the task and script finishes, if not the scrip continues. A message is shown (mes), then an option dialog (menu) is displayed with two possible answers : &amp;quot;Yes.&amp;quot; or &amp;quot;No.&amp;quot;. If the player answers &amp;quot;No.&amp;quot; the script stops (close;); if he answers &amp;quot;Yes.&amp;quot; the script continues at label &#039;&#039;L_Yes&#039;&#039;. Now player is checked to know if he has at least 3 keys, if not script branches to label &#039;&#039;L_Not_Enough&#039;&#039; tells the player he  &amp;quot;has not the right key&amp;quot; and script closes. If he has keys enough, his inventory list is retrieved by the built-in function &amp;quot;getinventorylist&amp;quot; and it&#039;s content is checked to know if the player will have room enough to store the reward after the 3 keys use. If not, script goes to label &#039;&#039;L_TooMany&#039;&#039; and script close after a warning message, If yes 3 keys are deleted in player&#039;s inventory,  he gets the reward: a Short Bow and the variable TMW_Quest is set to 38.&lt;br /&gt;
&lt;br /&gt;
For more examples of the current system, check out the current scripts in use by the server. Beware though, this could affect your enjoyment of the game as it does spoil some of the mystery. Here&#039;s a link to git so you can view them in your browser:&lt;br /&gt;
&lt;br /&gt;
https://github.com/themanaworld/tmwa-server-data/tree/master/world/map/npc&lt;br /&gt;
&lt;br /&gt;
Note that anything said by an NPC should be put in double quotes (&amp;quot;). You can do that like this: &amp;quot;&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039;Hello!&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039; she said.&amp;quot;&lt;br /&gt;
=References=&lt;br /&gt;
* [[EAthena Scripting Basics]]&lt;br /&gt;
* [[EAthena Scripting Reference]]&lt;br /&gt;
* [http://forums.themanaworld.org/viewtopic.php?f=13&amp;amp;t=13653 script cleanup/scripting standards proposal]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=25228</id>
		<title>Classic:TmwAthena Scripting Standards</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=25228"/>
		<updated>2013-01-03T21:18:48Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Mark the sections about Warps and Monsters with the note that this shouldn&amp;#039;t be done manually.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Status_construction}}&lt;br /&gt;
{{Status_outdated}}&lt;br /&gt;
{{Gaps|Needs to be updated with {{ForumThread|13653}} and {{ForumThread|13672}}, which are generally accepted but there might be more discussion}}&lt;br /&gt;
&lt;br /&gt;
This is an attempt to standardize the eAthena coding. Any suggestions are welcome to be posted on the discussion page before editing.&lt;br /&gt;
=Code Formatting=&lt;br /&gt;
== Indentation ==&lt;br /&gt;
* Code is indented with four spaces. &lt;br /&gt;
* Code in the same block should have the same indentation. &lt;br /&gt;
* Labels have no indentation. &lt;br /&gt;
* Menu options are on their own lines and are indented further. &lt;br /&gt;
Example:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
* When using an if-statement, there should be a line break after the condition and the conditional command should be indented further. An exception to this is a series of if-statements at the beginning of a major code block which use gotos to jump to the correct position in the script. In this case the goto should be in the same line as the if-statement.&lt;br /&gt;
Example:&lt;br /&gt;
 // if-statement and conditional command in the same line, gotos aligned&lt;br /&gt;
 if (@quest &amp;gt;= 3)  goto L_Done;&lt;br /&gt;
 if (@quest == 2) goto L_Progress;&lt;br /&gt;
 if (@quest == 1) goto L_Question;&lt;br /&gt;
 &lt;br /&gt;
 // conditional command in the next line and indented further&lt;br /&gt;
 if (BaseLevel &amp;lt; 40)&lt;br /&gt;
     set @cost, 100;&lt;br /&gt;
&lt;br /&gt;
== Whitespaces==&lt;br /&gt;
In many places whitespaces can increase readability. Examples are&lt;br /&gt;
* When concatenating text and variables:&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot; + strcharinfo(0) + &amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
instead of&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot;+strcharinfo(0)+&amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
* When assigning values to variables:&lt;br /&gt;
 set @var, 3;&lt;br /&gt;
instead of&lt;br /&gt;
 set @var,3;&lt;br /&gt;
* In menus:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
instead of&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;,L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;,L_No;&lt;br /&gt;
&lt;br /&gt;
== Code Blocks ==&lt;br /&gt;
* Code blocks should be separated from the others in a dinstinct way: insert a blank line between code blocks. &lt;br /&gt;
* Individual blocks should be together No blank lines within a block. &lt;br /&gt;
* The opening brackets should be at the end of the parent line, not in a new line; the closing ones should be in a line of their own.&lt;br /&gt;
&lt;br /&gt;
==Labels and Subfunctions==&lt;br /&gt;
* Newline before every label&lt;br /&gt;
* No newline after a label&lt;br /&gt;
* Labels should always start with L_, except those that act as a subfunction, which should start with S_. There must not be a fallthrough or goto to a subfunction label.&lt;br /&gt;
* Lables should be named in this way: L_CamelCase&lt;br /&gt;
* Subfunctions should be named in this way: S_CamelCase&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
At the beginning of a script file there should be documented &lt;br /&gt;
* who is the author&lt;br /&gt;
* the purpose of the script&lt;br /&gt;
* which variables are used and what&#039;s their purpose&lt;br /&gt;
* any additional information that can help to understand the script&lt;br /&gt;
Example:&lt;br /&gt;
 // Author: devxy&lt;br /&gt;
 // This file contains the NPC John, who is part of the Example quest.&lt;br /&gt;
 // Quest states are saved in Quest_Example.&lt;br /&gt;
 // State 1: started the quest&lt;br /&gt;
 // State 2: did the next step&lt;br /&gt;
 [...]&lt;br /&gt;
&lt;br /&gt;
Within the script there should be comments if there are parts which might be difficult to understand.&lt;br /&gt;
&lt;br /&gt;
In some of the older scripts there are boxed comments used like this:&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
 //# NPC John - By Smith                                                           #&lt;br /&gt;
 //#                                                                               #&lt;br /&gt;
 //#  ...                                                                          #&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
Don&#039;t use them in new scripts.&lt;br /&gt;
&lt;br /&gt;
=Variables=&lt;br /&gt;
==Document Variables==&lt;br /&gt;
in every file, document every variable as one of:&lt;br /&gt;
&lt;br /&gt;
* #  account variable (prefix #) (note that there are also ## variable which didn&#039;t work in the stable version of the server)&lt;br /&gt;
*    permanent player variable (no prefix)&lt;br /&gt;
* @  temporary player variable (prefix @) - used after the script close;s or end;s.&lt;br /&gt;
* @  dynamic player variable (prefix @) - passed into or out of callsub or callfunc&lt;br /&gt;
* @  lexical (local) player variable (prefix @) - used only within the function (scripthelp.txt documents that &amp;quot;.@&amp;quot; means this but I don&#039;t know if that works)&lt;br /&gt;
* @  local constant (prefix @) - not dependent on the player, used only within the function. e.g. lots of @QUEST_FOO_{SHIFT,MASK}&lt;br /&gt;
* $  global permanent variable (prefix $) (I&#039;m not sure if we have any of these right now)&lt;br /&gt;
* $  npc permanent variable (prefix $) same as above but only used by one NPC&lt;br /&gt;
* $  global temporary variable (prefix $@)&lt;br /&gt;
* $@ npc temporary variable (prefix $@) same as above but only used by one NPC, scripthelp.txt mentions prefix &amp;quot;.&amp;quot; but I don&#039;t know if that works&lt;br /&gt;
*    special variable (in db/const.txt with a 1 following)&lt;br /&gt;
*    global constant (in const.txt)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If we use a consistent method of documenting these, we can then generate a list of all variables by type.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Variables initialization==&lt;br /&gt;
Check for troublesome arrays:&lt;br /&gt;
A troublesome array is defined as an array that is not&lt;br /&gt;
*initialized all at once&lt;br /&gt;
*initialized by appending elements to the end, for use in a menu&lt;br /&gt;
 Nothing needs to be done, merely document them. I want this information at hand when I design the new scripting language to minimize conversion pains.&lt;br /&gt;
 I wouldn&#039;t be surprised if there were no troublesome arrays at all. If there are only a couple it might be worth refactoring the code to remove them, but that might be a  high-level decision which is beyond the scope of this proposal.&lt;br /&gt;
&lt;br /&gt;
Set dynamic and local @variables to 0 before close;&lt;br /&gt;
==Naming Variables==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using as little variables as you need==&lt;br /&gt;
So there are some quests, which require lots of variables.&lt;br /&gt;
Think of monster oil quest, Oric and Warum quest etc.&lt;br /&gt;
&lt;br /&gt;
This can often be done by bitmasking: &lt;br /&gt;
One variable has 32 bits. So a variabe can store 2^32 different numbers: 4294967296&lt;br /&gt;
&lt;br /&gt;
But sometimes you only need numbers from 0 to 15, but more of these variables.&lt;br /&gt;
but numbers in range 0 to 15 can be stored in 4 bits ( 2^4 = 16 different numbers)&lt;br /&gt;
&lt;br /&gt;
Here is an example how to use bitmasking:&lt;br /&gt;
[[Media:Tester.txt]]&lt;br /&gt;
== Defining Map Objects ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These sections describe how to define map objects.&lt;br /&gt;
&lt;br /&gt;
=== Warp Definitions ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;Shouldn&#039;t be done manually.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
Warps are what move players between maps. They can also be used to move players around a single map, if needed. Warps are defined like this:&lt;br /&gt;
&lt;br /&gt;
 map1,startX,startY|warp|name|width,height,map2,endX,endY&lt;br /&gt;
&lt;br /&gt;
Key:&lt;br /&gt;
{|&lt;br /&gt;
|map1  ||the starting map&lt;br /&gt;
|-&lt;br /&gt;
|startX||the x-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|startY||the y-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|name  ||the name of the warp, unused but must be defined&lt;br /&gt;
|-&lt;br /&gt;
|width ||the width of the warp&lt;br /&gt;
|-&lt;br /&gt;
|height||the height of the warp&lt;br /&gt;
|-&lt;br /&gt;
|map2  ||the ending map&lt;br /&gt;
|-&lt;br /&gt;
|endX  ||the x-coordinate of the tile the player will end up on&lt;br /&gt;
|-&lt;br /&gt;
|endY  ||the y-coordinate of the tile the player will end up on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Width and height are described in detail here: [[EAthena Scripting Standards/Warp Details|Warp Details]].&lt;br /&gt;
&lt;br /&gt;
=== Monster Definitions ===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;Shouldn&#039;t be done manually.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
Monsters are defined like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;|monster|&amp;lt;name&amp;gt;|&amp;lt;mobID&amp;gt;,&amp;lt;count&amp;gt;,&amp;lt;spawn1&amp;gt;,&amp;lt;spawn2&amp;gt;,{&amp;lt;eventcode&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|width      ||the tile width of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|name       ||the name of the mob, unused but must be defined. &#039;&#039;&#039;DO NOT&#039;&#039;&#039; use the keywords such as &amp;quot;spawn&amp;quot; in this name to avoid conflict with other game systems (magic for example)&lt;br /&gt;
|-&lt;br /&gt;
|mobID      ||the mob identifier of the desired monster (in the monster db)the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|count      ||the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|spawn1     ||the minimum delay between successive spawns (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|spawn2     ||the minimum delay between death and respawn (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
A detailed description of position and area can be found here: [[EAthena Scripting Standards/Mob Details|Mob Details]].&lt;br /&gt;
&lt;br /&gt;
=== NPC Definitions ===&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;triggerX&amp;gt;,&amp;lt;triggerY&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|facing     ||Direction the NPC faces to. &#039;&#039;&#039;It must be set to 0&#039;&#039;&#039; in TMW&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|Name       ||the name of the NPC&lt;br /&gt;
|-&lt;br /&gt;
|spriteID   ||the mob identifier of the desired NPC. Sprite ID&lt;br /&gt;
|-&lt;br /&gt;
|triggerX   ||&lt;br /&gt;
|-&lt;br /&gt;
|triggerY   ||&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
* Server side :&lt;br /&gt;
::NPC definitions (script) are usually stored as : &amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/&amp;lt;NPC Name&amp;gt;.txt or in the file :&amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/npc.txt&lt;br /&gt;
* Client side :&lt;br /&gt;
::The NPC is associated with a sprite (the image that will appear in the game), and a XML file which tells the client some display parameters.&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.png&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.xml&amp;lt;br/&amp;gt;The NPC spriteID is linked to graphic files and XML in the file : (tmwa-client-data/)npcs.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/NPC Details|NPC Details]]. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Script Functions ==&lt;br /&gt;
 function|script|&amp;lt;function name&amp;gt;|&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Actual script functions are stored or imported in the files : (tmwa-server-data/)world/map/npc/functions/&amp;lt;function name&amp;gt;.txt, regardless rhey are called from a Map, NPC, Mob or item.&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/function Details|function Details]]. --&amp;gt;&lt;br /&gt;
==Script Loading==&lt;br /&gt;
The main script import file is:[https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/scripts.conf (tmwa-server-data/)world/map/npc/scripts.conf] &amp;lt;br/&amp;gt;&lt;br /&gt;
It loads [https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/_import.txt (tmwa-server-data/)world/map/npc/_import.txt] which imports all NPC scripts wich are stored under the respective map name folders, usually under NPC name.&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
== Open a chest and get reward ==&lt;br /&gt;
An example is given by a quest to get a key for a chest (in fact 3 keys):&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:850px;&amp;quot; border=0 cellspacing=&amp;quot;10&amp;quot; &lt;br /&gt;
|-valign=&amp;quot;Top&amp;quot; &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
// A treasure chest. You need three keys to open it.&lt;br /&gt;
//&lt;br /&gt;
// TMW_Quest (document variable here)&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
002-4.gat,93,37,0|script|Treasure|111,{&lt;br /&gt;
&lt;br /&gt;
    if (TMW_Quest &amp;gt;= 38) goto L_Finished;&lt;br /&gt;
&lt;br /&gt;
    mes &amp;quot;There is a chest here.&amp;quot;;&lt;br /&gt;
    mes &amp;quot;Do you want to try to open it?&amp;quot;;&lt;br /&gt;
    next;&lt;br /&gt;
    menu&lt;br /&gt;
        &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
        &amp;quot;No.&amp;quot;, -;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Yes:&lt;br /&gt;
    if(countitem(&amp;quot;TreasureKey&amp;quot;) &amp;lt; 3)&lt;br /&gt;
        goto L_Not_Enough;&lt;br /&gt;
    getinventorylist;&lt;br /&gt;
    if (@inventorylist_count == 100 &amp;amp;&amp;amp; countitem(&amp;quot;TreasureKey&amp;quot;) &amp;gt; 3)&lt;br /&gt;
        goto L_TooMany;&lt;br /&gt;
    mes &amp;quot;You opened the chest and found a short bow!&amp;quot;;&lt;br /&gt;
    delitem &amp;quot;TreasureKey&amp;quot;, 3;&lt;br /&gt;
    getitem &amp;quot;ShortBow&amp;quot;, 1;&lt;br /&gt;
    set TMW_Quest, 38;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Not_Enough:&lt;br /&gt;
    mes &amp;quot;It seems that you do not have the right key for this chest yet...&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Finished:&lt;br /&gt;
    mes &amp;quot;You have already opened this chest.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_TooMany:&lt;br /&gt;
    mes &amp;quot;You do not have enough room to loot this chest. Maybe you should try again later.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
This script starts with describing the NPC (the chest, NPC sprite 111) and its location (map 002-4 X=93, Y=37, in tiles from top left of the map). Then follows what happens on activation:&lt;br /&gt;
First, the variable &#039;&#039;&amp;quot;TMW_Quest&amp;quot;&#039;&#039; is checked to know if the player already accomplished the quest &amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;(the variable should be documented)&#039;&#039;&#039;&amp;lt;/span&amp;gt;, If he has the script continues at label &#039;&#039;L_Finished&#039;&#039;, the player is reminded fe alredy accomplished the task and script finishes, if not the scrip continues. A message is shown (mes), then an option dialog (menu) is displayed with two possible answers : &amp;quot;Yes.&amp;quot; or &amp;quot;No.&amp;quot;. If the player answers &amp;quot;No.&amp;quot; the script stops (close;); if he answers &amp;quot;Yes.&amp;quot; the script continues at label &#039;&#039;L_Yes&#039;&#039;. Now player is checked to know if he has at least 3 keys, if not script branches to label &#039;&#039;L_Not_Enough&#039;&#039; tells the player he  &amp;quot;has not the right key&amp;quot; and script closes. If he has keys enough, his inventory list is retrieved by the built-in function &amp;quot;getinventorylist&amp;quot; and it&#039;s content is checked to know if the player will have room enough to store the reward after the 3 keys use. If not, script goes to label &#039;&#039;L_TooMany&#039;&#039; and script close after a warning message, If yes 3 keys are deleted in player&#039;s inventory,  he gets the reward: a Short Bow and the variable TMW_Quest is set to 38.&lt;br /&gt;
&lt;br /&gt;
For more examples of the current system, check out the current scripts in use by the server. Beware though, this could affect your enjoyment of the game as it does spoil some of the mystery. Here&#039;s a link to git so you can view them in your browser:&lt;br /&gt;
&lt;br /&gt;
https://github.com/themanaworld/tmwa-server-data/tree/master/world/map/npc&lt;br /&gt;
&lt;br /&gt;
Note that anything said by an NPC should be put in double quotes (&amp;quot;). You can do that like this: &amp;quot;&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039;Hello!&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039; she said.&amp;quot;&lt;br /&gt;
=References=&lt;br /&gt;
* [[EAthena Scripting Basics]]&lt;br /&gt;
* [[EAthena Scripting Reference]]&lt;br /&gt;
* [http://forums.themanaworld.org/viewtopic.php?f=13&amp;amp;t=13653 script cleanup/scripting standards proposal]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=25227</id>
		<title>Classic:TmwAthena Scripting Standards</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=25227"/>
		<updated>2013-01-03T21:15:01Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Fix indentation of if-statements in example script.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Status_construction}}&lt;br /&gt;
{{Status_outdated}}&lt;br /&gt;
{{Gaps|Needs to be updated with {{ForumThread|13653}} and {{ForumThread|13672}}, which are generally accepted but there might be more discussion}}&lt;br /&gt;
&lt;br /&gt;
This is an attempt to standardize the eAthena coding. Any suggestions are welcome to be posted on the discussion page before editing.&lt;br /&gt;
=Code Formatting=&lt;br /&gt;
== Indentation ==&lt;br /&gt;
* Code is indented with four spaces. &lt;br /&gt;
* Code in the same block should have the same indentation. &lt;br /&gt;
* Labels have no indentation. &lt;br /&gt;
* Menu options are on their own lines and are indented further. &lt;br /&gt;
Example:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
* When using an if-statement, there should be a line break after the condition and the conditional command should be indented further. An exception to this is a series of if-statements at the beginning of a major code block which use gotos to jump to the correct position in the script. In this case the goto should be in the same line as the if-statement.&lt;br /&gt;
Example:&lt;br /&gt;
 // if-statement and conditional command in the same line, gotos aligned&lt;br /&gt;
 if (@quest &amp;gt;= 3)  goto L_Done;&lt;br /&gt;
 if (@quest == 2) goto L_Progress;&lt;br /&gt;
 if (@quest == 1) goto L_Question;&lt;br /&gt;
 &lt;br /&gt;
 // conditional command in the next line and indented further&lt;br /&gt;
 if (BaseLevel &amp;lt; 40)&lt;br /&gt;
     set @cost, 100;&lt;br /&gt;
&lt;br /&gt;
== Whitespaces==&lt;br /&gt;
In many places whitespaces can increase readability. Examples are&lt;br /&gt;
* When concatenating text and variables:&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot; + strcharinfo(0) + &amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
instead of&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot;+strcharinfo(0)+&amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
* When assigning values to variables:&lt;br /&gt;
 set @var, 3;&lt;br /&gt;
instead of&lt;br /&gt;
 set @var,3;&lt;br /&gt;
* In menus:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
instead of&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;,L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;,L_No;&lt;br /&gt;
&lt;br /&gt;
== Code Blocks ==&lt;br /&gt;
* Code blocks should be separated from the others in a dinstinct way: insert a blank line between code blocks. &lt;br /&gt;
* Individual blocks should be together No blank lines within a block. &lt;br /&gt;
* The opening brackets should be at the end of the parent line, not in a new line; the closing ones should be in a line of their own.&lt;br /&gt;
&lt;br /&gt;
==Labels and Subfunctions==&lt;br /&gt;
* Newline before every label&lt;br /&gt;
* No newline after a label&lt;br /&gt;
* Labels should always start with L_, except those that act as a subfunction, which should start with S_. There must not be a fallthrough or goto to a subfunction label.&lt;br /&gt;
* Lables should be named in this way: L_CamelCase&lt;br /&gt;
* Subfunctions should be named in this way: S_CamelCase&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
At the beginning of a script file there should be documented &lt;br /&gt;
* who is the author&lt;br /&gt;
* the purpose of the script&lt;br /&gt;
* which variables are used and what&#039;s their purpose&lt;br /&gt;
* any additional information that can help to understand the script&lt;br /&gt;
Example:&lt;br /&gt;
 // Author: devxy&lt;br /&gt;
 // This file contains the NPC John, who is part of the Example quest.&lt;br /&gt;
 // Quest states are saved in Quest_Example.&lt;br /&gt;
 // State 1: started the quest&lt;br /&gt;
 // State 2: did the next step&lt;br /&gt;
 [...]&lt;br /&gt;
&lt;br /&gt;
Within the script there should be comments if there are parts which might be difficult to understand.&lt;br /&gt;
&lt;br /&gt;
In some of the older scripts there are boxed comments used like this:&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
 //# NPC John - By Smith                                                           #&lt;br /&gt;
 //#                                                                               #&lt;br /&gt;
 //#  ...                                                                          #&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
Don&#039;t use them in new scripts.&lt;br /&gt;
&lt;br /&gt;
=Variables=&lt;br /&gt;
==Document Variables==&lt;br /&gt;
in every file, document every variable as one of:&lt;br /&gt;
&lt;br /&gt;
* #  account variable (prefix #) (note that there are also ## variable which didn&#039;t work in the stable version of the server)&lt;br /&gt;
*    permanent player variable (no prefix)&lt;br /&gt;
* @  temporary player variable (prefix @) - used after the script close;s or end;s.&lt;br /&gt;
* @  dynamic player variable (prefix @) - passed into or out of callsub or callfunc&lt;br /&gt;
* @  lexical (local) player variable (prefix @) - used only within the function (scripthelp.txt documents that &amp;quot;.@&amp;quot; means this but I don&#039;t know if that works)&lt;br /&gt;
* @  local constant (prefix @) - not dependent on the player, used only within the function. e.g. lots of @QUEST_FOO_{SHIFT,MASK}&lt;br /&gt;
* $  global permanent variable (prefix $) (I&#039;m not sure if we have any of these right now)&lt;br /&gt;
* $  npc permanent variable (prefix $) same as above but only used by one NPC&lt;br /&gt;
* $  global temporary variable (prefix $@)&lt;br /&gt;
* $@ npc temporary variable (prefix $@) same as above but only used by one NPC, scripthelp.txt mentions prefix &amp;quot;.&amp;quot; but I don&#039;t know if that works&lt;br /&gt;
*    special variable (in db/const.txt with a 1 following)&lt;br /&gt;
*    global constant (in const.txt)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If we use a consistent method of documenting these, we can then generate a list of all variables by type.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Variables initialization==&lt;br /&gt;
Check for troublesome arrays:&lt;br /&gt;
A troublesome array is defined as an array that is not&lt;br /&gt;
*initialized all at once&lt;br /&gt;
*initialized by appending elements to the end, for use in a menu&lt;br /&gt;
 Nothing needs to be done, merely document them. I want this information at hand when I design the new scripting language to minimize conversion pains.&lt;br /&gt;
 I wouldn&#039;t be surprised if there were no troublesome arrays at all. If there are only a couple it might be worth refactoring the code to remove them, but that might be a  high-level decision which is beyond the scope of this proposal.&lt;br /&gt;
&lt;br /&gt;
Set dynamic and local @variables to 0 before close;&lt;br /&gt;
==Naming Variables==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using as little variables as you need==&lt;br /&gt;
So there are some quests, which require lots of variables.&lt;br /&gt;
Think of monster oil quest, Oric and Warum quest etc.&lt;br /&gt;
&lt;br /&gt;
This can often be done by bitmasking: &lt;br /&gt;
One variable has 32 bits. So a variabe can store 2^32 different numbers: 4294967296&lt;br /&gt;
&lt;br /&gt;
But sometimes you only need numbers from 0 to 15, but more of these variables.&lt;br /&gt;
but numbers in range 0 to 15 can be stored in 4 bits ( 2^4 = 16 different numbers)&lt;br /&gt;
&lt;br /&gt;
Here is an example how to use bitmasking:&lt;br /&gt;
[[Media:Tester.txt]]&lt;br /&gt;
== Defining Map Objects ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These sections describe how to define map objects.&lt;br /&gt;
&lt;br /&gt;
=== Warp Definitions ===&lt;br /&gt;
Warps are what move players between maps. They can also be used to move players around a single map, if needed. Warps are defined like this:&lt;br /&gt;
&lt;br /&gt;
 map1,startX,startY|warp|name|width,height,map2,endX,endY&lt;br /&gt;
&lt;br /&gt;
Key:&lt;br /&gt;
{|&lt;br /&gt;
|map1  ||the starting map&lt;br /&gt;
|-&lt;br /&gt;
|startX||the x-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|startY||the y-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|name  ||the name of the warp, unused but must be defined&lt;br /&gt;
|-&lt;br /&gt;
|width ||the width of the warp&lt;br /&gt;
|-&lt;br /&gt;
|height||the height of the warp&lt;br /&gt;
|-&lt;br /&gt;
|map2  ||the ending map&lt;br /&gt;
|-&lt;br /&gt;
|endX  ||the x-coordinate of the tile the player will end up on&lt;br /&gt;
|-&lt;br /&gt;
|endY  ||the y-coordinate of the tile the player will end up on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Width and height are described in detail here: [[EAthena Scripting Standards/Warp Details|Warp Details]].&lt;br /&gt;
&lt;br /&gt;
=== Monster Definitions ===&lt;br /&gt;
Monsters are defined like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;|monster|&amp;lt;name&amp;gt;|&amp;lt;mobID&amp;gt;,&amp;lt;count&amp;gt;,&amp;lt;spawn1&amp;gt;,&amp;lt;spawn2&amp;gt;,{&amp;lt;eventcode&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|width      ||the tile width of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|name       ||the name of the mob, unused but must be defined. &#039;&#039;&#039;DO NOT&#039;&#039;&#039; use the keywords such as &amp;quot;spawn&amp;quot; in this name to avoid conflict with other game systems (magic for example)&lt;br /&gt;
|-&lt;br /&gt;
|mobID      ||the mob identifier of the desired monster (in the monster db)the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|count      ||the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|spawn1     ||the minimum delay between successive spawns (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|spawn2     ||the minimum delay between death and respawn (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
A detailed description of position and area can be found here: [[EAthena Scripting Standards/Mob Details|Mob Details]].&lt;br /&gt;
&lt;br /&gt;
=== NPC Definitions ===&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;triggerX&amp;gt;,&amp;lt;triggerY&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|facing     ||Direction the NPC faces to. &#039;&#039;&#039;It must be set to 0&#039;&#039;&#039; in TMW&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|Name       ||the name of the NPC&lt;br /&gt;
|-&lt;br /&gt;
|spriteID   ||the mob identifier of the desired NPC. Sprite ID&lt;br /&gt;
|-&lt;br /&gt;
|triggerX   ||&lt;br /&gt;
|-&lt;br /&gt;
|triggerY   ||&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
* Server side :&lt;br /&gt;
::NPC definitions (script) are usually stored as : &amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/&amp;lt;NPC Name&amp;gt;.txt or in the file :&amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/npc.txt&lt;br /&gt;
* Client side :&lt;br /&gt;
::The NPC is associated with a sprite (the image that will appear in the game), and a XML file which tells the client some display parameters.&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.png&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.xml&amp;lt;br/&amp;gt;The NPC spriteID is linked to graphic files and XML in the file : (tmwa-client-data/)npcs.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/NPC Details|NPC Details]]. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Script Functions ==&lt;br /&gt;
 function|script|&amp;lt;function name&amp;gt;|&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Actual script functions are stored or imported in the files : (tmwa-server-data/)world/map/npc/functions/&amp;lt;function name&amp;gt;.txt, regardless rhey are called from a Map, NPC, Mob or item.&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/function Details|function Details]]. --&amp;gt;&lt;br /&gt;
==Script Loading==&lt;br /&gt;
The main script import file is:[https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/scripts.conf (tmwa-server-data/)world/map/npc/scripts.conf] &amp;lt;br/&amp;gt;&lt;br /&gt;
It loads [https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/_import.txt (tmwa-server-data/)world/map/npc/_import.txt] which imports all NPC scripts wich are stored under the respective map name folders, usually under NPC name.&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
== Open a chest and get reward ==&lt;br /&gt;
An example is given by a quest to get a key for a chest (in fact 3 keys):&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:850px;&amp;quot; border=0 cellspacing=&amp;quot;10&amp;quot; &lt;br /&gt;
|-valign=&amp;quot;Top&amp;quot; &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
// A treasure chest. You need three keys to open it.&lt;br /&gt;
//&lt;br /&gt;
// TMW_Quest (document variable here)&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
002-4.gat,93,37,0|script|Treasure|111,{&lt;br /&gt;
&lt;br /&gt;
    if (TMW_Quest &amp;gt;= 38) goto L_Finished;&lt;br /&gt;
&lt;br /&gt;
    mes &amp;quot;There is a chest here.&amp;quot;;&lt;br /&gt;
    mes &amp;quot;Do you want to try to open it?&amp;quot;;&lt;br /&gt;
    next;&lt;br /&gt;
    menu&lt;br /&gt;
        &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
        &amp;quot;No.&amp;quot;, -;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Yes:&lt;br /&gt;
    if(countitem(&amp;quot;TreasureKey&amp;quot;) &amp;lt; 3)&lt;br /&gt;
        goto L_Not_Enough;&lt;br /&gt;
    getinventorylist;&lt;br /&gt;
    if (@inventorylist_count == 100 &amp;amp;&amp;amp; countitem(&amp;quot;TreasureKey&amp;quot;) &amp;gt; 3)&lt;br /&gt;
        goto L_TooMany;&lt;br /&gt;
    mes &amp;quot;You opened the chest and found a short bow!&amp;quot;;&lt;br /&gt;
    delitem &amp;quot;TreasureKey&amp;quot;, 3;&lt;br /&gt;
    getitem &amp;quot;ShortBow&amp;quot;, 1;&lt;br /&gt;
    set TMW_Quest, 38;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Not_Enough:&lt;br /&gt;
    mes &amp;quot;It seems that you do not have the right key for this chest yet...&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Finished:&lt;br /&gt;
    mes &amp;quot;You have already opened this chest.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_TooMany:&lt;br /&gt;
    mes &amp;quot;You do not have enough room to loot this chest. Maybe you should try again later.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
This script starts with describing the NPC (the chest, NPC sprite 111) and its location (map 002-4 X=93, Y=37, in tiles from top left of the map). Then follows what happens on activation:&lt;br /&gt;
First, the variable &#039;&#039;&amp;quot;TMW_Quest&amp;quot;&#039;&#039; is checked to know if the player already accomplished the quest &amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;(the variable should be documented)&#039;&#039;&#039;&amp;lt;/span&amp;gt;, If he has the script continues at label &#039;&#039;L_Finished&#039;&#039;, the player is reminded fe alredy accomplished the task and script finishes, if not the scrip continues. A message is shown (mes), then an option dialog (menu) is displayed with two possible answers : &amp;quot;Yes.&amp;quot; or &amp;quot;No.&amp;quot;. If the player answers &amp;quot;No.&amp;quot; the script stops (close;); if he answers &amp;quot;Yes.&amp;quot; the script continues at label &#039;&#039;L_Yes&#039;&#039;. Now player is checked to know if he has at least 3 keys, if not script branches to label &#039;&#039;L_Not_Enough&#039;&#039; tells the player he  &amp;quot;has not the right key&amp;quot; and script closes. If he has keys enough, his inventory list is retrieved by the built-in function &amp;quot;getinventorylist&amp;quot; and it&#039;s content is checked to know if the player will have room enough to store the reward after the 3 keys use. If not, script goes to label &#039;&#039;L_TooMany&#039;&#039; and script close after a warning message, If yes 3 keys are deleted in player&#039;s inventory,  he gets the reward: a Short Bow and the variable TMW_Quest is set to 38.&lt;br /&gt;
&lt;br /&gt;
For more examples of the current system, check out the current scripts in use by the server. Beware though, this could affect your enjoyment of the game as it does spoil some of the mystery. Here&#039;s a link to git so you can view them in your browser:&lt;br /&gt;
&lt;br /&gt;
https://github.com/themanaworld/tmwa-server-data/tree/master/world/map/npc&lt;br /&gt;
&lt;br /&gt;
Note that anything said by an NPC should be put in double quotes (&amp;quot;). You can do that like this: &amp;quot;&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039;Hello!&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039; she said.&amp;quot;&lt;br /&gt;
=References=&lt;br /&gt;
* [[EAthena Scripting Basics]]&lt;br /&gt;
* [[EAthena Scripting Reference]]&lt;br /&gt;
* [http://forums.themanaworld.org/viewtopic.php?f=13&amp;amp;t=13653 script cleanup/scripting standards proposal]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=25226</id>
		<title>Classic:TmwAthena Scripting Standards</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=25226"/>
		<updated>2013-01-03T21:05:14Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Reworking the section about Labels and Subfunctions.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Status_construction}}&lt;br /&gt;
{{Status_outdated}}&lt;br /&gt;
{{Gaps|Needs to be updated with {{ForumThread|13653}} and {{ForumThread|13672}}, which are generally accepted but there might be more discussion}}&lt;br /&gt;
&lt;br /&gt;
This is an attempt to standardize the eAthena coding. Any suggestions are welcome to be posted on the discussion page before editing.&lt;br /&gt;
=Code Formatting=&lt;br /&gt;
== Indentation ==&lt;br /&gt;
* Code is indented with four spaces. &lt;br /&gt;
* Code in the same block should have the same indentation. &lt;br /&gt;
* Labels have no indentation. &lt;br /&gt;
* Menu options are on their own lines and are indented further. &lt;br /&gt;
Example:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
* When using an if-statement, there should be a line break after the condition and the conditional command should be indented further. An exception to this is a series of if-statements at the beginning of a major code block which use gotos to jump to the correct position in the script. In this case the goto should be in the same line as the if-statement.&lt;br /&gt;
Example:&lt;br /&gt;
 // if-statement and conditional command in the same line, gotos aligned&lt;br /&gt;
 if (@quest &amp;gt;= 3)  goto L_Done;&lt;br /&gt;
 if (@quest == 2) goto L_Progress;&lt;br /&gt;
 if (@quest == 1) goto L_Question;&lt;br /&gt;
 &lt;br /&gt;
 // conditional command in the next line and indented further&lt;br /&gt;
 if (BaseLevel &amp;lt; 40)&lt;br /&gt;
     set @cost, 100;&lt;br /&gt;
&lt;br /&gt;
== Whitespaces==&lt;br /&gt;
In many places whitespaces can increase readability. Examples are&lt;br /&gt;
* When concatenating text and variables:&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot; + strcharinfo(0) + &amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
instead of&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot;+strcharinfo(0)+&amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
* When assigning values to variables:&lt;br /&gt;
 set @var, 3;&lt;br /&gt;
instead of&lt;br /&gt;
 set @var,3;&lt;br /&gt;
* In menus:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
instead of&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;,L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;,L_No;&lt;br /&gt;
&lt;br /&gt;
== Code Blocks ==&lt;br /&gt;
* Code blocks should be separated from the others in a dinstinct way: insert a blank line between code blocks. &lt;br /&gt;
* Individual blocks should be together No blank lines within a block. &lt;br /&gt;
* The opening brackets should be at the end of the parent line, not in a new line; the closing ones should be in a line of their own.&lt;br /&gt;
&lt;br /&gt;
==Labels and Subfunctions==&lt;br /&gt;
* Newline before every label&lt;br /&gt;
* No newline after a label&lt;br /&gt;
* Labels should always start with L_, except those that act as a subfunction, which should start with S_. There must not be a fallthrough or goto to a subfunction label.&lt;br /&gt;
* Lables should be named in this way: L_CamelCase&lt;br /&gt;
* Subfunctions should be named in this way: S_CamelCase&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
At the beginning of a script file there should be documented &lt;br /&gt;
* who is the author&lt;br /&gt;
* the purpose of the script&lt;br /&gt;
* which variables are used and what&#039;s their purpose&lt;br /&gt;
* any additional information that can help to understand the script&lt;br /&gt;
Example:&lt;br /&gt;
 // Author: devxy&lt;br /&gt;
 // This file contains the NPC John, who is part of the Example quest.&lt;br /&gt;
 // Quest states are saved in Quest_Example.&lt;br /&gt;
 // State 1: started the quest&lt;br /&gt;
 // State 2: did the next step&lt;br /&gt;
 [...]&lt;br /&gt;
&lt;br /&gt;
Within the script there should be comments if there are parts which might be difficult to understand.&lt;br /&gt;
&lt;br /&gt;
In some of the older scripts there are boxed comments used like this:&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
 //# NPC John - By Smith                                                           #&lt;br /&gt;
 //#                                                                               #&lt;br /&gt;
 //#  ...                                                                          #&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
Don&#039;t use them in new scripts.&lt;br /&gt;
&lt;br /&gt;
=Variables=&lt;br /&gt;
==Document Variables==&lt;br /&gt;
in every file, document every variable as one of:&lt;br /&gt;
&lt;br /&gt;
* #  account variable (prefix #) (note that there are also ## variable which didn&#039;t work in the stable version of the server)&lt;br /&gt;
*    permanent player variable (no prefix)&lt;br /&gt;
* @  temporary player variable (prefix @) - used after the script close;s or end;s.&lt;br /&gt;
* @  dynamic player variable (prefix @) - passed into or out of callsub or callfunc&lt;br /&gt;
* @  lexical (local) player variable (prefix @) - used only within the function (scripthelp.txt documents that &amp;quot;.@&amp;quot; means this but I don&#039;t know if that works)&lt;br /&gt;
* @  local constant (prefix @) - not dependent on the player, used only within the function. e.g. lots of @QUEST_FOO_{SHIFT,MASK}&lt;br /&gt;
* $  global permanent variable (prefix $) (I&#039;m not sure if we have any of these right now)&lt;br /&gt;
* $  npc permanent variable (prefix $) same as above but only used by one NPC&lt;br /&gt;
* $  global temporary variable (prefix $@)&lt;br /&gt;
* $@ npc temporary variable (prefix $@) same as above but only used by one NPC, scripthelp.txt mentions prefix &amp;quot;.&amp;quot; but I don&#039;t know if that works&lt;br /&gt;
*    special variable (in db/const.txt with a 1 following)&lt;br /&gt;
*    global constant (in const.txt)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If we use a consistent method of documenting these, we can then generate a list of all variables by type.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Variables initialization==&lt;br /&gt;
Check for troublesome arrays:&lt;br /&gt;
A troublesome array is defined as an array that is not&lt;br /&gt;
*initialized all at once&lt;br /&gt;
*initialized by appending elements to the end, for use in a menu&lt;br /&gt;
 Nothing needs to be done, merely document them. I want this information at hand when I design the new scripting language to minimize conversion pains.&lt;br /&gt;
 I wouldn&#039;t be surprised if there were no troublesome arrays at all. If there are only a couple it might be worth refactoring the code to remove them, but that might be a  high-level decision which is beyond the scope of this proposal.&lt;br /&gt;
&lt;br /&gt;
Set dynamic and local @variables to 0 before close;&lt;br /&gt;
==Naming Variables==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using as little variables as you need==&lt;br /&gt;
So there are some quests, which require lots of variables.&lt;br /&gt;
Think of monster oil quest, Oric and Warum quest etc.&lt;br /&gt;
&lt;br /&gt;
This can often be done by bitmasking: &lt;br /&gt;
One variable has 32 bits. So a variabe can store 2^32 different numbers: 4294967296&lt;br /&gt;
&lt;br /&gt;
But sometimes you only need numbers from 0 to 15, but more of these variables.&lt;br /&gt;
but numbers in range 0 to 15 can be stored in 4 bits ( 2^4 = 16 different numbers)&lt;br /&gt;
&lt;br /&gt;
Here is an example how to use bitmasking:&lt;br /&gt;
[[Media:Tester.txt]]&lt;br /&gt;
== Defining Map Objects ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These sections describe how to define map objects.&lt;br /&gt;
&lt;br /&gt;
=== Warp Definitions ===&lt;br /&gt;
Warps are what move players between maps. They can also be used to move players around a single map, if needed. Warps are defined like this:&lt;br /&gt;
&lt;br /&gt;
 map1,startX,startY|warp|name|width,height,map2,endX,endY&lt;br /&gt;
&lt;br /&gt;
Key:&lt;br /&gt;
{|&lt;br /&gt;
|map1  ||the starting map&lt;br /&gt;
|-&lt;br /&gt;
|startX||the x-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|startY||the y-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|name  ||the name of the warp, unused but must be defined&lt;br /&gt;
|-&lt;br /&gt;
|width ||the width of the warp&lt;br /&gt;
|-&lt;br /&gt;
|height||the height of the warp&lt;br /&gt;
|-&lt;br /&gt;
|map2  ||the ending map&lt;br /&gt;
|-&lt;br /&gt;
|endX  ||the x-coordinate of the tile the player will end up on&lt;br /&gt;
|-&lt;br /&gt;
|endY  ||the y-coordinate of the tile the player will end up on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Width and height are described in detail here: [[EAthena Scripting Standards/Warp Details|Warp Details]].&lt;br /&gt;
&lt;br /&gt;
=== Monster Definitions ===&lt;br /&gt;
Monsters are defined like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;|monster|&amp;lt;name&amp;gt;|&amp;lt;mobID&amp;gt;,&amp;lt;count&amp;gt;,&amp;lt;spawn1&amp;gt;,&amp;lt;spawn2&amp;gt;,{&amp;lt;eventcode&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|width      ||the tile width of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|name       ||the name of the mob, unused but must be defined. &#039;&#039;&#039;DO NOT&#039;&#039;&#039; use the keywords such as &amp;quot;spawn&amp;quot; in this name to avoid conflict with other game systems (magic for example)&lt;br /&gt;
|-&lt;br /&gt;
|mobID      ||the mob identifier of the desired monster (in the monster db)the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|count      ||the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|spawn1     ||the minimum delay between successive spawns (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|spawn2     ||the minimum delay between death and respawn (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
A detailed description of position and area can be found here: [[EAthena Scripting Standards/Mob Details|Mob Details]].&lt;br /&gt;
&lt;br /&gt;
=== NPC Definitions ===&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;triggerX&amp;gt;,&amp;lt;triggerY&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|facing     ||Direction the NPC faces to. &#039;&#039;&#039;It must be set to 0&#039;&#039;&#039; in TMW&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|Name       ||the name of the NPC&lt;br /&gt;
|-&lt;br /&gt;
|spriteID   ||the mob identifier of the desired NPC. Sprite ID&lt;br /&gt;
|-&lt;br /&gt;
|triggerX   ||&lt;br /&gt;
|-&lt;br /&gt;
|triggerY   ||&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
* Server side :&lt;br /&gt;
::NPC definitions (script) are usually stored as : &amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/&amp;lt;NPC Name&amp;gt;.txt or in the file :&amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/npc.txt&lt;br /&gt;
* Client side :&lt;br /&gt;
::The NPC is associated with a sprite (the image that will appear in the game), and a XML file which tells the client some display parameters.&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.png&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.xml&amp;lt;br/&amp;gt;The NPC spriteID is linked to graphic files and XML in the file : (tmwa-client-data/)npcs.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/NPC Details|NPC Details]]. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Script Functions ==&lt;br /&gt;
 function|script|&amp;lt;function name&amp;gt;|&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Actual script functions are stored or imported in the files : (tmwa-server-data/)world/map/npc/functions/&amp;lt;function name&amp;gt;.txt, regardless rhey are called from a Map, NPC, Mob or item.&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/function Details|function Details]]. --&amp;gt;&lt;br /&gt;
==Script Loading==&lt;br /&gt;
The main script import file is:[https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/scripts.conf (tmwa-server-data/)world/map/npc/scripts.conf] &amp;lt;br/&amp;gt;&lt;br /&gt;
It loads [https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/_import.txt (tmwa-server-data/)world/map/npc/_import.txt] which imports all NPC scripts wich are stored under the respective map name folders, usually under NPC name.&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
== Open a chest and get reward ==&lt;br /&gt;
An example is given by a quest to get a key for a chest (in fact 3 keys):&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:850px;&amp;quot; border=0 cellspacing=&amp;quot;10&amp;quot; &lt;br /&gt;
|-valign=&amp;quot;Top&amp;quot; &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
// A treasure chest. You need three keys to open it.&lt;br /&gt;
//&lt;br /&gt;
// TMW_Quest (document variable here)&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
002-4.gat,93,37,0|script|Treasure|111,{&lt;br /&gt;
&lt;br /&gt;
    if (TMW_Quest &amp;gt;= 38) goto L_Finished;&lt;br /&gt;
&lt;br /&gt;
    mes &amp;quot;There is a chest here.&amp;quot;;&lt;br /&gt;
    mes &amp;quot;Do you want to try to open it?&amp;quot;;&lt;br /&gt;
    next;&lt;br /&gt;
    menu&lt;br /&gt;
        &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
        &amp;quot;No.&amp;quot;, -;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Yes:&lt;br /&gt;
    if(countitem(&amp;quot;TreasureKey&amp;quot;) &amp;lt; 3) goto L_Not_Enough;&lt;br /&gt;
    getinventorylist;&lt;br /&gt;
    if (@inventorylist_count == 100 &amp;amp;&amp;amp; countitem(&amp;quot;TreasureKey&amp;quot;) &amp;gt; 3) goto L_TooMany;&lt;br /&gt;
    mes &amp;quot;You opened the chest and found a short bow!&amp;quot;;&lt;br /&gt;
    delitem &amp;quot;TreasureKey&amp;quot;, 3;&lt;br /&gt;
    getitem &amp;quot;ShortBow&amp;quot;, 1;&lt;br /&gt;
    set TMW_Quest, 38;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Not_Enough:&lt;br /&gt;
    mes &amp;quot;It seems that you do not have the right key for this chest yet...&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Finished:&lt;br /&gt;
    mes &amp;quot;You have already opened this chest.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_TooMany:&lt;br /&gt;
    mes &amp;quot;You do not have enough room to loot this chest. Maybe you should try again later.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
This script starts with describing the NPC (the chest, NPC sprite 111) and its location (map 002-4 X=93, Y=37, in tiles from top left of the map). Then follows what happens on activation:&lt;br /&gt;
First, the variable &#039;&#039;&amp;quot;TMW_Quest&amp;quot;&#039;&#039; is checked to know if the player already accomplished the quest &amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;(the variable should be documented)&#039;&#039;&#039;&amp;lt;/span&amp;gt;, If he has the script continues at label &#039;&#039;L_Finished&#039;&#039;, the player is reminded fe alredy accomplished the task and script finishes, if not the scrip continues. A message is shown (mes), then an option dialog (menu) is displayed with two possible answers : &amp;quot;Yes.&amp;quot; or &amp;quot;No.&amp;quot;. If the player answers &amp;quot;No.&amp;quot; the script stops (close;); if he answers &amp;quot;Yes.&amp;quot; the script continues at label &#039;&#039;L_Yes&#039;&#039;. Now player is checked to know if he has at least 3 keys, if not script branches to label &#039;&#039;L_Not_Enough&#039;&#039; tells the player he  &amp;quot;has not the right key&amp;quot; and script closes. If he has keys enough, his inventory list is retrieved by the built-in function &amp;quot;getinventorylist&amp;quot; and it&#039;s content is checked to know if the player will have room enough to store the reward after the 3 keys use. If not, script goes to label &#039;&#039;L_TooMany&#039;&#039; and script close after a warning message, If yes 3 keys are deleted in player&#039;s inventory,  he gets the reward: a Short Bow and the variable TMW_Quest is set to 38.&lt;br /&gt;
&lt;br /&gt;
For more examples of the current system, check out the current scripts in use by the server. Beware though, this could affect your enjoyment of the game as it does spoil some of the mystery. Here&#039;s a link to git so you can view them in your browser:&lt;br /&gt;
&lt;br /&gt;
https://github.com/themanaworld/tmwa-server-data/tree/master/world/map/npc&lt;br /&gt;
&lt;br /&gt;
Note that anything said by an NPC should be put in double quotes (&amp;quot;). You can do that like this: &amp;quot;&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039;Hello!&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039; she said.&amp;quot;&lt;br /&gt;
=References=&lt;br /&gt;
* [[EAthena Scripting Basics]]&lt;br /&gt;
* [[EAthena Scripting Reference]]&lt;br /&gt;
* [http://forums.themanaworld.org/viewtopic.php?f=13&amp;amp;t=13653 script cleanup/scripting standards proposal]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=25225</id>
		<title>Classic:TmwAthena Scripting Standards</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=25225"/>
		<updated>2013-01-03T20:55:34Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Remove some notes that aren&amp;#039;t relevant anymore.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Status_construction}}&lt;br /&gt;
{{Status_outdated}}&lt;br /&gt;
{{Gaps|Needs to be updated with {{ForumThread|13653}} and {{ForumThread|13672}}, which are generally accepted but there might be more discussion}}&lt;br /&gt;
&lt;br /&gt;
This is an attempt to standardize the eAthena coding. Any suggestions are welcome to be posted on the discussion page before editing.&lt;br /&gt;
=Code Formatting=&lt;br /&gt;
== Indentation ==&lt;br /&gt;
* Code is indented with four spaces. &lt;br /&gt;
* Code in the same block should have the same indentation. &lt;br /&gt;
* Labels have no indentation. &lt;br /&gt;
* Menu options are on their own lines and are indented further. &lt;br /&gt;
Example:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
* When using an if-statement, there should be a line break after the condition and the conditional command should be indented further. An exception to this is a series of if-statements at the beginning of a major code block which use gotos to jump to the correct position in the script. In this case the goto should be in the same line as the if-statement.&lt;br /&gt;
Example:&lt;br /&gt;
 // if-statement and conditional command in the same line, gotos aligned&lt;br /&gt;
 if (@quest &amp;gt;= 3)  goto L_Done;&lt;br /&gt;
 if (@quest == 2) goto L_Progress;&lt;br /&gt;
 if (@quest == 1) goto L_Question;&lt;br /&gt;
 &lt;br /&gt;
 // conditional command in the next line and indented further&lt;br /&gt;
 if (BaseLevel &amp;lt; 40)&lt;br /&gt;
     set @cost, 100;&lt;br /&gt;
&lt;br /&gt;
== Whitespaces==&lt;br /&gt;
In many places whitespaces can increase readability. Examples are&lt;br /&gt;
* When concatenating text and variables:&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot; + strcharinfo(0) + &amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
instead of&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot;+strcharinfo(0)+&amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
* When assigning values to variables:&lt;br /&gt;
 set @var, 3;&lt;br /&gt;
instead of&lt;br /&gt;
 set @var,3;&lt;br /&gt;
* In menus:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
instead of&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;,L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;,L_No;&lt;br /&gt;
&lt;br /&gt;
== Code Blocks ==&lt;br /&gt;
* Code blocks should be separated from the others in a dinstinct way: insert a blank line between code blocks. &lt;br /&gt;
* Individual blocks should be together No blank lines within a block. &lt;br /&gt;
* The opening brackets should be at the end of the parent line, not in a new line; the closing ones should be in a line of their own.&lt;br /&gt;
&lt;br /&gt;
==Labels and Subfunctions==&lt;br /&gt;
* newline before every label&lt;br /&gt;
* no newline after a label&lt;br /&gt;
* Labels should always start with L_, except those that act as a subfunction, which should start with S_. There must not be a fallthrough or goto to a subfunction label.&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;decision pending&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
 L_CamelCase: Current practice for labels and I don&#039;t think that is worth changing,&lt;br /&gt;
 L_lower_case:, o11c prefers, especially for things like L_close:&lt;br /&gt;
* &#039;&#039;&#039;Subfunctions&#039;&#039;&#039;:&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;to be discussed&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;quot;[...]except those that act as a subfunction, which should start with S_&amp;quot;&lt;br /&gt;
 Also, what should labels within a subfunction label use? I was thinking LS_ or SL_; loratay currently uses L_SUB_ ... or perhaps this should be refactored out into a standalone function?&lt;br /&gt;
 &#039;&#039;summary&#039;&#039;: S_, LS_, SL_, L_SUB_, Sub_, refactor out into a standalone function.&lt;br /&gt;
==Comments==&lt;br /&gt;
At the beginning of a script file there should be documented &lt;br /&gt;
* who is the author&lt;br /&gt;
* the purpose of the script&lt;br /&gt;
* which variables are used and what&#039;s their purpose&lt;br /&gt;
* any additional information that can help to understand the script&lt;br /&gt;
Example:&lt;br /&gt;
 // Author: devxy&lt;br /&gt;
 // This file contains the NPC John, who is part of the Example quest.&lt;br /&gt;
 // Quest states are saved in Quest_Example.&lt;br /&gt;
 // State 1: started the quest&lt;br /&gt;
 // State 2: did the next step&lt;br /&gt;
 [...]&lt;br /&gt;
&lt;br /&gt;
Within the script there should be comments if there are parts which might be difficult to understand.&lt;br /&gt;
&lt;br /&gt;
In some of the older scripts there are boxed comments used like this:&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
 //# NPC John - By Smith                                                           #&lt;br /&gt;
 //#                                                                               #&lt;br /&gt;
 //#  ...                                                                          #&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
Don&#039;t use them in new scripts.&lt;br /&gt;
&lt;br /&gt;
=Variables=&lt;br /&gt;
==Document Variables==&lt;br /&gt;
in every file, document every variable as one of:&lt;br /&gt;
&lt;br /&gt;
* #  account variable (prefix #) (note that there are also ## variable which didn&#039;t work in the stable version of the server)&lt;br /&gt;
*    permanent player variable (no prefix)&lt;br /&gt;
* @  temporary player variable (prefix @) - used after the script close;s or end;s.&lt;br /&gt;
* @  dynamic player variable (prefix @) - passed into or out of callsub or callfunc&lt;br /&gt;
* @  lexical (local) player variable (prefix @) - used only within the function (scripthelp.txt documents that &amp;quot;.@&amp;quot; means this but I don&#039;t know if that works)&lt;br /&gt;
* @  local constant (prefix @) - not dependent on the player, used only within the function. e.g. lots of @QUEST_FOO_{SHIFT,MASK}&lt;br /&gt;
* $  global permanent variable (prefix $) (I&#039;m not sure if we have any of these right now)&lt;br /&gt;
* $  npc permanent variable (prefix $) same as above but only used by one NPC&lt;br /&gt;
* $  global temporary variable (prefix $@)&lt;br /&gt;
* $@ npc temporary variable (prefix $@) same as above but only used by one NPC, scripthelp.txt mentions prefix &amp;quot;.&amp;quot; but I don&#039;t know if that works&lt;br /&gt;
*    special variable (in db/const.txt with a 1 following)&lt;br /&gt;
*    global constant (in const.txt)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If we use a consistent method of documenting these, we can then generate a list of all variables by type.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Variables initialization==&lt;br /&gt;
Check for troublesome arrays:&lt;br /&gt;
A troublesome array is defined as an array that is not&lt;br /&gt;
*initialized all at once&lt;br /&gt;
*initialized by appending elements to the end, for use in a menu&lt;br /&gt;
 Nothing needs to be done, merely document them. I want this information at hand when I design the new scripting language to minimize conversion pains.&lt;br /&gt;
 I wouldn&#039;t be surprised if there were no troublesome arrays at all. If there are only a couple it might be worth refactoring the code to remove them, but that might be a  high-level decision which is beyond the scope of this proposal.&lt;br /&gt;
&lt;br /&gt;
Set dynamic and local @variables to 0 before close;&lt;br /&gt;
==Naming Variables==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using as little variables as you need==&lt;br /&gt;
So there are some quests, which require lots of variables.&lt;br /&gt;
Think of monster oil quest, Oric and Warum quest etc.&lt;br /&gt;
&lt;br /&gt;
This can often be done by bitmasking: &lt;br /&gt;
One variable has 32 bits. So a variabe can store 2^32 different numbers: 4294967296&lt;br /&gt;
&lt;br /&gt;
But sometimes you only need numbers from 0 to 15, but more of these variables.&lt;br /&gt;
but numbers in range 0 to 15 can be stored in 4 bits ( 2^4 = 16 different numbers)&lt;br /&gt;
&lt;br /&gt;
Here is an example how to use bitmasking:&lt;br /&gt;
[[Media:Tester.txt]]&lt;br /&gt;
== Defining Map Objects ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These sections describe how to define map objects.&lt;br /&gt;
&lt;br /&gt;
=== Warp Definitions ===&lt;br /&gt;
Warps are what move players between maps. They can also be used to move players around a single map, if needed. Warps are defined like this:&lt;br /&gt;
&lt;br /&gt;
 map1,startX,startY|warp|name|width,height,map2,endX,endY&lt;br /&gt;
&lt;br /&gt;
Key:&lt;br /&gt;
{|&lt;br /&gt;
|map1  ||the starting map&lt;br /&gt;
|-&lt;br /&gt;
|startX||the x-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|startY||the y-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|name  ||the name of the warp, unused but must be defined&lt;br /&gt;
|-&lt;br /&gt;
|width ||the width of the warp&lt;br /&gt;
|-&lt;br /&gt;
|height||the height of the warp&lt;br /&gt;
|-&lt;br /&gt;
|map2  ||the ending map&lt;br /&gt;
|-&lt;br /&gt;
|endX  ||the x-coordinate of the tile the player will end up on&lt;br /&gt;
|-&lt;br /&gt;
|endY  ||the y-coordinate of the tile the player will end up on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Width and height are described in detail here: [[EAthena Scripting Standards/Warp Details|Warp Details]].&lt;br /&gt;
&lt;br /&gt;
=== Monster Definitions ===&lt;br /&gt;
Monsters are defined like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;|monster|&amp;lt;name&amp;gt;|&amp;lt;mobID&amp;gt;,&amp;lt;count&amp;gt;,&amp;lt;spawn1&amp;gt;,&amp;lt;spawn2&amp;gt;,{&amp;lt;eventcode&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|width      ||the tile width of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|name       ||the name of the mob, unused but must be defined. &#039;&#039;&#039;DO NOT&#039;&#039;&#039; use the keywords such as &amp;quot;spawn&amp;quot; in this name to avoid conflict with other game systems (magic for example)&lt;br /&gt;
|-&lt;br /&gt;
|mobID      ||the mob identifier of the desired monster (in the monster db)the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|count      ||the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|spawn1     ||the minimum delay between successive spawns (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|spawn2     ||the minimum delay between death and respawn (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
A detailed description of position and area can be found here: [[EAthena Scripting Standards/Mob Details|Mob Details]].&lt;br /&gt;
&lt;br /&gt;
=== NPC Definitions ===&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;triggerX&amp;gt;,&amp;lt;triggerY&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|facing     ||Direction the NPC faces to. &#039;&#039;&#039;It must be set to 0&#039;&#039;&#039; in TMW&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|Name       ||the name of the NPC&lt;br /&gt;
|-&lt;br /&gt;
|spriteID   ||the mob identifier of the desired NPC. Sprite ID&lt;br /&gt;
|-&lt;br /&gt;
|triggerX   ||&lt;br /&gt;
|-&lt;br /&gt;
|triggerY   ||&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
* Server side :&lt;br /&gt;
::NPC definitions (script) are usually stored as : &amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/&amp;lt;NPC Name&amp;gt;.txt or in the file :&amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/npc.txt&lt;br /&gt;
* Client side :&lt;br /&gt;
::The NPC is associated with a sprite (the image that will appear in the game), and a XML file which tells the client some display parameters.&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.png&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.xml&amp;lt;br/&amp;gt;The NPC spriteID is linked to graphic files and XML in the file : (tmwa-client-data/)npcs.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/NPC Details|NPC Details]]. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Script Functions ==&lt;br /&gt;
 function|script|&amp;lt;function name&amp;gt;|&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Actual script functions are stored or imported in the files : (tmwa-server-data/)world/map/npc/functions/&amp;lt;function name&amp;gt;.txt, regardless rhey are called from a Map, NPC, Mob or item.&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/function Details|function Details]]. --&amp;gt;&lt;br /&gt;
==Script Loading==&lt;br /&gt;
The main script import file is:[https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/scripts.conf (tmwa-server-data/)world/map/npc/scripts.conf] &amp;lt;br/&amp;gt;&lt;br /&gt;
It loads [https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/_import.txt (tmwa-server-data/)world/map/npc/_import.txt] which imports all NPC scripts wich are stored under the respective map name folders, usually under NPC name.&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
== Open a chest and get reward ==&lt;br /&gt;
An example is given by a quest to get a key for a chest (in fact 3 keys):&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:850px;&amp;quot; border=0 cellspacing=&amp;quot;10&amp;quot; &lt;br /&gt;
|-valign=&amp;quot;Top&amp;quot; &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
// A treasure chest. You need three keys to open it.&lt;br /&gt;
//&lt;br /&gt;
// TMW_Quest (document variable here)&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
002-4.gat,93,37,0|script|Treasure|111,{&lt;br /&gt;
&lt;br /&gt;
    if (TMW_Quest &amp;gt;= 38) goto L_Finished;&lt;br /&gt;
&lt;br /&gt;
    mes &amp;quot;There is a chest here.&amp;quot;;&lt;br /&gt;
    mes &amp;quot;Do you want to try to open it?&amp;quot;;&lt;br /&gt;
    next;&lt;br /&gt;
    menu&lt;br /&gt;
        &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
        &amp;quot;No.&amp;quot;, -;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Yes:&lt;br /&gt;
    if(countitem(&amp;quot;TreasureKey&amp;quot;) &amp;lt; 3) goto L_Not_Enough;&lt;br /&gt;
    getinventorylist;&lt;br /&gt;
    if (@inventorylist_count == 100 &amp;amp;&amp;amp; countitem(&amp;quot;TreasureKey&amp;quot;) &amp;gt; 3) goto L_TooMany;&lt;br /&gt;
    mes &amp;quot;You opened the chest and found a short bow!&amp;quot;;&lt;br /&gt;
    delitem &amp;quot;TreasureKey&amp;quot;, 3;&lt;br /&gt;
    getitem &amp;quot;ShortBow&amp;quot;, 1;&lt;br /&gt;
    set TMW_Quest, 38;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Not_Enough:&lt;br /&gt;
    mes &amp;quot;It seems that you do not have the right key for this chest yet...&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Finished:&lt;br /&gt;
    mes &amp;quot;You have already opened this chest.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_TooMany:&lt;br /&gt;
    mes &amp;quot;You do not have enough room to loot this chest. Maybe you should try again later.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
This script starts with describing the NPC (the chest, NPC sprite 111) and its location (map 002-4 X=93, Y=37, in tiles from top left of the map). Then follows what happens on activation:&lt;br /&gt;
First, the variable &#039;&#039;&amp;quot;TMW_Quest&amp;quot;&#039;&#039; is checked to know if the player already accomplished the quest &amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;(the variable should be documented)&#039;&#039;&#039;&amp;lt;/span&amp;gt;, If he has the script continues at label &#039;&#039;L_Finished&#039;&#039;, the player is reminded fe alredy accomplished the task and script finishes, if not the scrip continues. A message is shown (mes), then an option dialog (menu) is displayed with two possible answers : &amp;quot;Yes.&amp;quot; or &amp;quot;No.&amp;quot;. If the player answers &amp;quot;No.&amp;quot; the script stops (close;); if he answers &amp;quot;Yes.&amp;quot; the script continues at label &#039;&#039;L_Yes&#039;&#039;. Now player is checked to know if he has at least 3 keys, if not script branches to label &#039;&#039;L_Not_Enough&#039;&#039; tells the player he  &amp;quot;has not the right key&amp;quot; and script closes. If he has keys enough, his inventory list is retrieved by the built-in function &amp;quot;getinventorylist&amp;quot; and it&#039;s content is checked to know if the player will have room enough to store the reward after the 3 keys use. If not, script goes to label &#039;&#039;L_TooMany&#039;&#039; and script close after a warning message, If yes 3 keys are deleted in player&#039;s inventory,  he gets the reward: a Short Bow and the variable TMW_Quest is set to 38.&lt;br /&gt;
&lt;br /&gt;
For more examples of the current system, check out the current scripts in use by the server. Beware though, this could affect your enjoyment of the game as it does spoil some of the mystery. Here&#039;s a link to git so you can view them in your browser:&lt;br /&gt;
&lt;br /&gt;
https://github.com/themanaworld/tmwa-server-data/tree/master/world/map/npc&lt;br /&gt;
&lt;br /&gt;
Note that anything said by an NPC should be put in double quotes (&amp;quot;). You can do that like this: &amp;quot;&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039;Hello!&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039; she said.&amp;quot;&lt;br /&gt;
=References=&lt;br /&gt;
* [[EAthena Scripting Basics]]&lt;br /&gt;
* [[EAthena Scripting Reference]]&lt;br /&gt;
* [http://forums.themanaworld.org/viewtopic.php?f=13&amp;amp;t=13653 script cleanup/scripting standards proposal]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=25224</id>
		<title>Classic:TmwAthena Scripting Standards</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=25224"/>
		<updated>2013-01-03T20:53:21Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Remove point about if-statements from section Code Blocks, since it is already mentioned in Indentation.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Status_construction}}&lt;br /&gt;
{{Status_outdated}}&lt;br /&gt;
{{Gaps|Needs to be updated with {{ForumThread|13653}} and {{ForumThread|13672}}, which are generally accepted but there might be more discussion}}&lt;br /&gt;
&lt;br /&gt;
This is an attempt to standardize the eAthena coding. Any suggestions are welcome to be posted on the discussion page before editing.&lt;br /&gt;
=Code Formatting=&lt;br /&gt;
== Indentation ==&lt;br /&gt;
* Code is indented with four spaces. &lt;br /&gt;
* Code in the same block should have the same indentation. &lt;br /&gt;
* Labels have no indentation. &lt;br /&gt;
* Menu options are on their own lines and are indented further. &lt;br /&gt;
Example:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
* When using an if-statement, there should be a line break after the condition and the conditional command should be indented further. An exception to this is a series of if-statements at the beginning of a major code block which use gotos to jump to the correct position in the script. In this case the goto should be in the same line as the if-statement.&lt;br /&gt;
Example:&lt;br /&gt;
 // if-statement and conditional command in the same line, gotos aligned&lt;br /&gt;
 if (@quest &amp;gt;= 3)  goto L_Done;&lt;br /&gt;
 if (@quest == 2) goto L_Progress;&lt;br /&gt;
 if (@quest == 1) goto L_Question;&lt;br /&gt;
 &lt;br /&gt;
 // conditional command in the next line and indented further&lt;br /&gt;
 if (BaseLevel &amp;lt; 40)&lt;br /&gt;
     set @cost, 100;&lt;br /&gt;
&lt;br /&gt;
== Whitespaces==&lt;br /&gt;
In many places whitespaces can increase readability. Examples are&lt;br /&gt;
* When concatenating text and variables:&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot; + strcharinfo(0) + &amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
instead of&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot;+strcharinfo(0)+&amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
* When assigning values to variables:&lt;br /&gt;
 set @var, 3;&lt;br /&gt;
instead of&lt;br /&gt;
 set @var,3;&lt;br /&gt;
* In menus:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
instead of&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;,L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;,L_No;&lt;br /&gt;
&lt;br /&gt;
== Code Blocks ==&lt;br /&gt;
* Code blocks should be separated from the others in a dinstinct way: insert a blank line between code blocks. &lt;br /&gt;
* Individual blocks should be together No blank lines within a block. &lt;br /&gt;
* The opening brackets should be at the end of the parent line, not in a new line; the closing ones should be in a line of their own.&lt;br /&gt;
&lt;br /&gt;
Remove unnecessary next;&lt;br /&gt;
Remove redundant code such as end; after close;&lt;br /&gt;
remove break; instead use end; (requires changing the java converter)&lt;br /&gt;
Replace monsters.txt with _mobs.txt except in special cases.&lt;br /&gt;
A standard for whitespace and comments.&lt;br /&gt;
&lt;br /&gt;
     ?&lt;br /&gt;
    limit line length? (break long strings using + concatentation)&lt;br /&gt;
==Labels and Subfunctions==&lt;br /&gt;
* newline before every label&lt;br /&gt;
* no newline after a label&lt;br /&gt;
* Labels should always start with L_, except those that act as a subfunction, which should start with S_. There must not be a fallthrough or goto to a subfunction label.&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;decision pending&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
 L_CamelCase: Current practice for labels and I don&#039;t think that is worth changing,&lt;br /&gt;
 L_lower_case:, o11c prefers, especially for things like L_close:&lt;br /&gt;
* &#039;&#039;&#039;Subfunctions&#039;&#039;&#039;:&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;to be discussed&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;quot;[...]except those that act as a subfunction, which should start with S_&amp;quot;&lt;br /&gt;
 Also, what should labels within a subfunction label use? I was thinking LS_ or SL_; loratay currently uses L_SUB_ ... or perhaps this should be refactored out into a standalone function?&lt;br /&gt;
 &#039;&#039;summary&#039;&#039;: S_, LS_, SL_, L_SUB_, Sub_, refactor out into a standalone function.&lt;br /&gt;
==Comments==&lt;br /&gt;
At the beginning of a script file there should be documented &lt;br /&gt;
* who is the author&lt;br /&gt;
* the purpose of the script&lt;br /&gt;
* which variables are used and what&#039;s their purpose&lt;br /&gt;
* any additional information that can help to understand the script&lt;br /&gt;
Example:&lt;br /&gt;
 // Author: devxy&lt;br /&gt;
 // This file contains the NPC John, who is part of the Example quest.&lt;br /&gt;
 // Quest states are saved in Quest_Example.&lt;br /&gt;
 // State 1: started the quest&lt;br /&gt;
 // State 2: did the next step&lt;br /&gt;
 [...]&lt;br /&gt;
&lt;br /&gt;
Within the script there should be comments if there are parts which might be difficult to understand.&lt;br /&gt;
&lt;br /&gt;
In some of the older scripts there are boxed comments used like this:&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
 //# NPC John - By Smith                                                           #&lt;br /&gt;
 //#                                                                               #&lt;br /&gt;
 //#  ...                                                                          #&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
Don&#039;t use them in new scripts.&lt;br /&gt;
&lt;br /&gt;
=Variables=&lt;br /&gt;
==Document Variables==&lt;br /&gt;
in every file, document every variable as one of:&lt;br /&gt;
&lt;br /&gt;
* #  account variable (prefix #) (note that there are also ## variable which didn&#039;t work in the stable version of the server)&lt;br /&gt;
*    permanent player variable (no prefix)&lt;br /&gt;
* @  temporary player variable (prefix @) - used after the script close;s or end;s.&lt;br /&gt;
* @  dynamic player variable (prefix @) - passed into or out of callsub or callfunc&lt;br /&gt;
* @  lexical (local) player variable (prefix @) - used only within the function (scripthelp.txt documents that &amp;quot;.@&amp;quot; means this but I don&#039;t know if that works)&lt;br /&gt;
* @  local constant (prefix @) - not dependent on the player, used only within the function. e.g. lots of @QUEST_FOO_{SHIFT,MASK}&lt;br /&gt;
* $  global permanent variable (prefix $) (I&#039;m not sure if we have any of these right now)&lt;br /&gt;
* $  npc permanent variable (prefix $) same as above but only used by one NPC&lt;br /&gt;
* $  global temporary variable (prefix $@)&lt;br /&gt;
* $@ npc temporary variable (prefix $@) same as above but only used by one NPC, scripthelp.txt mentions prefix &amp;quot;.&amp;quot; but I don&#039;t know if that works&lt;br /&gt;
*    special variable (in db/const.txt with a 1 following)&lt;br /&gt;
*    global constant (in const.txt)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If we use a consistent method of documenting these, we can then generate a list of all variables by type.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Variables initialization==&lt;br /&gt;
Check for troublesome arrays:&lt;br /&gt;
A troublesome array is defined as an array that is not&lt;br /&gt;
*initialized all at once&lt;br /&gt;
*initialized by appending elements to the end, for use in a menu&lt;br /&gt;
 Nothing needs to be done, merely document them. I want this information at hand when I design the new scripting language to minimize conversion pains.&lt;br /&gt;
 I wouldn&#039;t be surprised if there were no troublesome arrays at all. If there are only a couple it might be worth refactoring the code to remove them, but that might be a  high-level decision which is beyond the scope of this proposal.&lt;br /&gt;
&lt;br /&gt;
Set dynamic and local @variables to 0 before close;&lt;br /&gt;
==Naming Variables==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using as little variables as you need==&lt;br /&gt;
So there are some quests, which require lots of variables.&lt;br /&gt;
Think of monster oil quest, Oric and Warum quest etc.&lt;br /&gt;
&lt;br /&gt;
This can often be done by bitmasking: &lt;br /&gt;
One variable has 32 bits. So a variabe can store 2^32 different numbers: 4294967296&lt;br /&gt;
&lt;br /&gt;
But sometimes you only need numbers from 0 to 15, but more of these variables.&lt;br /&gt;
but numbers in range 0 to 15 can be stored in 4 bits ( 2^4 = 16 different numbers)&lt;br /&gt;
&lt;br /&gt;
Here is an example how to use bitmasking:&lt;br /&gt;
[[Media:Tester.txt]]&lt;br /&gt;
== Defining Map Objects ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These sections describe how to define map objects.&lt;br /&gt;
&lt;br /&gt;
=== Warp Definitions ===&lt;br /&gt;
Warps are what move players between maps. They can also be used to move players around a single map, if needed. Warps are defined like this:&lt;br /&gt;
&lt;br /&gt;
 map1,startX,startY|warp|name|width,height,map2,endX,endY&lt;br /&gt;
&lt;br /&gt;
Key:&lt;br /&gt;
{|&lt;br /&gt;
|map1  ||the starting map&lt;br /&gt;
|-&lt;br /&gt;
|startX||the x-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|startY||the y-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|name  ||the name of the warp, unused but must be defined&lt;br /&gt;
|-&lt;br /&gt;
|width ||the width of the warp&lt;br /&gt;
|-&lt;br /&gt;
|height||the height of the warp&lt;br /&gt;
|-&lt;br /&gt;
|map2  ||the ending map&lt;br /&gt;
|-&lt;br /&gt;
|endX  ||the x-coordinate of the tile the player will end up on&lt;br /&gt;
|-&lt;br /&gt;
|endY  ||the y-coordinate of the tile the player will end up on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Width and height are described in detail here: [[EAthena Scripting Standards/Warp Details|Warp Details]].&lt;br /&gt;
&lt;br /&gt;
=== Monster Definitions ===&lt;br /&gt;
Monsters are defined like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;|monster|&amp;lt;name&amp;gt;|&amp;lt;mobID&amp;gt;,&amp;lt;count&amp;gt;,&amp;lt;spawn1&amp;gt;,&amp;lt;spawn2&amp;gt;,{&amp;lt;eventcode&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|width      ||the tile width of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|name       ||the name of the mob, unused but must be defined. &#039;&#039;&#039;DO NOT&#039;&#039;&#039; use the keywords such as &amp;quot;spawn&amp;quot; in this name to avoid conflict with other game systems (magic for example)&lt;br /&gt;
|-&lt;br /&gt;
|mobID      ||the mob identifier of the desired monster (in the monster db)the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|count      ||the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|spawn1     ||the minimum delay between successive spawns (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|spawn2     ||the minimum delay between death and respawn (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
A detailed description of position and area can be found here: [[EAthena Scripting Standards/Mob Details|Mob Details]].&lt;br /&gt;
&lt;br /&gt;
=== NPC Definitions ===&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;triggerX&amp;gt;,&amp;lt;triggerY&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|facing     ||Direction the NPC faces to. &#039;&#039;&#039;It must be set to 0&#039;&#039;&#039; in TMW&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|Name       ||the name of the NPC&lt;br /&gt;
|-&lt;br /&gt;
|spriteID   ||the mob identifier of the desired NPC. Sprite ID&lt;br /&gt;
|-&lt;br /&gt;
|triggerX   ||&lt;br /&gt;
|-&lt;br /&gt;
|triggerY   ||&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
* Server side :&lt;br /&gt;
::NPC definitions (script) are usually stored as : &amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/&amp;lt;NPC Name&amp;gt;.txt or in the file :&amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/npc.txt&lt;br /&gt;
* Client side :&lt;br /&gt;
::The NPC is associated with a sprite (the image that will appear in the game), and a XML file which tells the client some display parameters.&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.png&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.xml&amp;lt;br/&amp;gt;The NPC spriteID is linked to graphic files and XML in the file : (tmwa-client-data/)npcs.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/NPC Details|NPC Details]]. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Script Functions ==&lt;br /&gt;
 function|script|&amp;lt;function name&amp;gt;|&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Actual script functions are stored or imported in the files : (tmwa-server-data/)world/map/npc/functions/&amp;lt;function name&amp;gt;.txt, regardless rhey are called from a Map, NPC, Mob or item.&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/function Details|function Details]]. --&amp;gt;&lt;br /&gt;
==Script Loading==&lt;br /&gt;
The main script import file is:[https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/scripts.conf (tmwa-server-data/)world/map/npc/scripts.conf] &amp;lt;br/&amp;gt;&lt;br /&gt;
It loads [https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/_import.txt (tmwa-server-data/)world/map/npc/_import.txt] which imports all NPC scripts wich are stored under the respective map name folders, usually under NPC name.&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
== Open a chest and get reward ==&lt;br /&gt;
An example is given by a quest to get a key for a chest (in fact 3 keys):&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:850px;&amp;quot; border=0 cellspacing=&amp;quot;10&amp;quot; &lt;br /&gt;
|-valign=&amp;quot;Top&amp;quot; &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
// A treasure chest. You need three keys to open it.&lt;br /&gt;
//&lt;br /&gt;
// TMW_Quest (document variable here)&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
002-4.gat,93,37,0|script|Treasure|111,{&lt;br /&gt;
&lt;br /&gt;
    if (TMW_Quest &amp;gt;= 38) goto L_Finished;&lt;br /&gt;
&lt;br /&gt;
    mes &amp;quot;There is a chest here.&amp;quot;;&lt;br /&gt;
    mes &amp;quot;Do you want to try to open it?&amp;quot;;&lt;br /&gt;
    next;&lt;br /&gt;
    menu&lt;br /&gt;
        &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
        &amp;quot;No.&amp;quot;, -;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Yes:&lt;br /&gt;
    if(countitem(&amp;quot;TreasureKey&amp;quot;) &amp;lt; 3) goto L_Not_Enough;&lt;br /&gt;
    getinventorylist;&lt;br /&gt;
    if (@inventorylist_count == 100 &amp;amp;&amp;amp; countitem(&amp;quot;TreasureKey&amp;quot;) &amp;gt; 3) goto L_TooMany;&lt;br /&gt;
    mes &amp;quot;You opened the chest and found a short bow!&amp;quot;;&lt;br /&gt;
    delitem &amp;quot;TreasureKey&amp;quot;, 3;&lt;br /&gt;
    getitem &amp;quot;ShortBow&amp;quot;, 1;&lt;br /&gt;
    set TMW_Quest, 38;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Not_Enough:&lt;br /&gt;
    mes &amp;quot;It seems that you do not have the right key for this chest yet...&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Finished:&lt;br /&gt;
    mes &amp;quot;You have already opened this chest.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_TooMany:&lt;br /&gt;
    mes &amp;quot;You do not have enough room to loot this chest. Maybe you should try again later.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
This script starts with describing the NPC (the chest, NPC sprite 111) and its location (map 002-4 X=93, Y=37, in tiles from top left of the map). Then follows what happens on activation:&lt;br /&gt;
First, the variable &#039;&#039;&amp;quot;TMW_Quest&amp;quot;&#039;&#039; is checked to know if the player already accomplished the quest &amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;(the variable should be documented)&#039;&#039;&#039;&amp;lt;/span&amp;gt;, If he has the script continues at label &#039;&#039;L_Finished&#039;&#039;, the player is reminded fe alredy accomplished the task and script finishes, if not the scrip continues. A message is shown (mes), then an option dialog (menu) is displayed with two possible answers : &amp;quot;Yes.&amp;quot; or &amp;quot;No.&amp;quot;. If the player answers &amp;quot;No.&amp;quot; the script stops (close;); if he answers &amp;quot;Yes.&amp;quot; the script continues at label &#039;&#039;L_Yes&#039;&#039;. Now player is checked to know if he has at least 3 keys, if not script branches to label &#039;&#039;L_Not_Enough&#039;&#039; tells the player he  &amp;quot;has not the right key&amp;quot; and script closes. If he has keys enough, his inventory list is retrieved by the built-in function &amp;quot;getinventorylist&amp;quot; and it&#039;s content is checked to know if the player will have room enough to store the reward after the 3 keys use. If not, script goes to label &#039;&#039;L_TooMany&#039;&#039; and script close after a warning message, If yes 3 keys are deleted in player&#039;s inventory,  he gets the reward: a Short Bow and the variable TMW_Quest is set to 38.&lt;br /&gt;
&lt;br /&gt;
For more examples of the current system, check out the current scripts in use by the server. Beware though, this could affect your enjoyment of the game as it does spoil some of the mystery. Here&#039;s a link to git so you can view them in your browser:&lt;br /&gt;
&lt;br /&gt;
https://github.com/themanaworld/tmwa-server-data/tree/master/world/map/npc&lt;br /&gt;
&lt;br /&gt;
Note that anything said by an NPC should be put in double quotes (&amp;quot;). You can do that like this: &amp;quot;&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039;Hello!&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039; she said.&amp;quot;&lt;br /&gt;
=References=&lt;br /&gt;
* [[EAthena Scripting Basics]]&lt;br /&gt;
* [[EAthena Scripting Reference]]&lt;br /&gt;
* [http://forums.themanaworld.org/viewtopic.php?f=13&amp;amp;t=13653 script cleanup/scripting standards proposal]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=25223</id>
		<title>Classic:TmwAthena Scripting Standards</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=25223"/>
		<updated>2013-01-03T20:51:51Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Updating the section about comments and adding some examples.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Status_construction}}&lt;br /&gt;
{{Status_outdated}}&lt;br /&gt;
{{Gaps|Needs to be updated with {{ForumThread|13653}} and {{ForumThread|13672}}, which are generally accepted but there might be more discussion}}&lt;br /&gt;
&lt;br /&gt;
This is an attempt to standardize the eAthena coding. Any suggestions are welcome to be posted on the discussion page before editing.&lt;br /&gt;
=Code Formatting=&lt;br /&gt;
== Indentation ==&lt;br /&gt;
* Code is indented with four spaces. &lt;br /&gt;
* Code in the same block should have the same indentation. &lt;br /&gt;
* Labels have no indentation. &lt;br /&gt;
* Menu options are on their own lines and are indented further. &lt;br /&gt;
Example:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
* When using an if-statement, there should be a line break after the condition and the conditional command should be indented further. An exception to this is a series of if-statements at the beginning of a major code block which use gotos to jump to the correct position in the script. In this case the goto should be in the same line as the if-statement.&lt;br /&gt;
Example:&lt;br /&gt;
 // if-statement and conditional command in the same line, gotos aligned&lt;br /&gt;
 if (@quest &amp;gt;= 3)  goto L_Done;&lt;br /&gt;
 if (@quest == 2) goto L_Progress;&lt;br /&gt;
 if (@quest == 1) goto L_Question;&lt;br /&gt;
 &lt;br /&gt;
 // conditional command in the next line and indented further&lt;br /&gt;
 if (BaseLevel &amp;lt; 40)&lt;br /&gt;
     set @cost, 100;&lt;br /&gt;
&lt;br /&gt;
== Whitespaces==&lt;br /&gt;
In many places whitespaces can increase readability. Examples are&lt;br /&gt;
* When concatenating text and variables:&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot; + strcharinfo(0) + &amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
instead of&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot;+strcharinfo(0)+&amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
* When assigning values to variables:&lt;br /&gt;
 set @var, 3;&lt;br /&gt;
instead of&lt;br /&gt;
 set @var,3;&lt;br /&gt;
* In menus:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
instead of&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;,L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;,L_No;&lt;br /&gt;
&lt;br /&gt;
== Code Blocks ==&lt;br /&gt;
* Code blocks should be separated from the others in a dinstinct way: insert a blank line between code blocks. &lt;br /&gt;
* Individual blocks should be together No blank lines within a block. &lt;br /&gt;
* The opening brackets should be at the end of the parent line, not in a new line; the closing ones should be in a line of their own.&lt;br /&gt;
* newline between if (condition) and conditional_command, except when conditional_command is a goto at the beginning of a major script block (usually only at the beginning of a script), in which case if there are multiple if statements on adjacent lines, the gotos shall be aligned&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;provide an example&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove unnecessary next;&lt;br /&gt;
Remove redundant code such as end; after close;&lt;br /&gt;
remove break; instead use end; (requires changing the java converter)&lt;br /&gt;
Replace monsters.txt with _mobs.txt except in special cases.&lt;br /&gt;
A standard for whitespace and comments.&lt;br /&gt;
&lt;br /&gt;
     ?&lt;br /&gt;
    limit line length? (break long strings using + concatentation)&lt;br /&gt;
==Labels and Subfunctions==&lt;br /&gt;
* newline before every label&lt;br /&gt;
* no newline after a label&lt;br /&gt;
* Labels should always start with L_, except those that act as a subfunction, which should start with S_. There must not be a fallthrough or goto to a subfunction label.&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;decision pending&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
 L_CamelCase: Current practice for labels and I don&#039;t think that is worth changing,&lt;br /&gt;
 L_lower_case:, o11c prefers, especially for things like L_close:&lt;br /&gt;
* &#039;&#039;&#039;Subfunctions&#039;&#039;&#039;:&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;to be discussed&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;quot;[...]except those that act as a subfunction, which should start with S_&amp;quot;&lt;br /&gt;
 Also, what should labels within a subfunction label use? I was thinking LS_ or SL_; loratay currently uses L_SUB_ ... or perhaps this should be refactored out into a standalone function?&lt;br /&gt;
 &#039;&#039;summary&#039;&#039;: S_, LS_, SL_, L_SUB_, Sub_, refactor out into a standalone function.&lt;br /&gt;
==Comments==&lt;br /&gt;
At the beginning of a script file there should be documented &lt;br /&gt;
* who is the author&lt;br /&gt;
* the purpose of the script&lt;br /&gt;
* which variables are used and what&#039;s their purpose&lt;br /&gt;
* any additional information that can help to understand the script&lt;br /&gt;
Example:&lt;br /&gt;
 // Author: devxy&lt;br /&gt;
 // This file contains the NPC John, who is part of the Example quest.&lt;br /&gt;
 // Quest states are saved in Quest_Example.&lt;br /&gt;
 // State 1: started the quest&lt;br /&gt;
 // State 2: did the next step&lt;br /&gt;
 [...]&lt;br /&gt;
&lt;br /&gt;
Within the script there should be comments if there are parts which might be difficult to understand.&lt;br /&gt;
&lt;br /&gt;
In some of the older scripts there are boxed comments used like this:&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
 //# NPC John - By Smith                                                           #&lt;br /&gt;
 //#                                                                               #&lt;br /&gt;
 //#  ...                                                                          #&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
Don&#039;t use them in new scripts.&lt;br /&gt;
&lt;br /&gt;
=Variables=&lt;br /&gt;
==Document Variables==&lt;br /&gt;
in every file, document every variable as one of:&lt;br /&gt;
&lt;br /&gt;
* #  account variable (prefix #) (note that there are also ## variable which didn&#039;t work in the stable version of the server)&lt;br /&gt;
*    permanent player variable (no prefix)&lt;br /&gt;
* @  temporary player variable (prefix @) - used after the script close;s or end;s.&lt;br /&gt;
* @  dynamic player variable (prefix @) - passed into or out of callsub or callfunc&lt;br /&gt;
* @  lexical (local) player variable (prefix @) - used only within the function (scripthelp.txt documents that &amp;quot;.@&amp;quot; means this but I don&#039;t know if that works)&lt;br /&gt;
* @  local constant (prefix @) - not dependent on the player, used only within the function. e.g. lots of @QUEST_FOO_{SHIFT,MASK}&lt;br /&gt;
* $  global permanent variable (prefix $) (I&#039;m not sure if we have any of these right now)&lt;br /&gt;
* $  npc permanent variable (prefix $) same as above but only used by one NPC&lt;br /&gt;
* $  global temporary variable (prefix $@)&lt;br /&gt;
* $@ npc temporary variable (prefix $@) same as above but only used by one NPC, scripthelp.txt mentions prefix &amp;quot;.&amp;quot; but I don&#039;t know if that works&lt;br /&gt;
*    special variable (in db/const.txt with a 1 following)&lt;br /&gt;
*    global constant (in const.txt)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If we use a consistent method of documenting these, we can then generate a list of all variables by type.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Variables initialization==&lt;br /&gt;
Check for troublesome arrays:&lt;br /&gt;
A troublesome array is defined as an array that is not&lt;br /&gt;
*initialized all at once&lt;br /&gt;
*initialized by appending elements to the end, for use in a menu&lt;br /&gt;
 Nothing needs to be done, merely document them. I want this information at hand when I design the new scripting language to minimize conversion pains.&lt;br /&gt;
 I wouldn&#039;t be surprised if there were no troublesome arrays at all. If there are only a couple it might be worth refactoring the code to remove them, but that might be a  high-level decision which is beyond the scope of this proposal.&lt;br /&gt;
&lt;br /&gt;
Set dynamic and local @variables to 0 before close;&lt;br /&gt;
==Naming Variables==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using as little variables as you need==&lt;br /&gt;
So there are some quests, which require lots of variables.&lt;br /&gt;
Think of monster oil quest, Oric and Warum quest etc.&lt;br /&gt;
&lt;br /&gt;
This can often be done by bitmasking: &lt;br /&gt;
One variable has 32 bits. So a variabe can store 2^32 different numbers: 4294967296&lt;br /&gt;
&lt;br /&gt;
But sometimes you only need numbers from 0 to 15, but more of these variables.&lt;br /&gt;
but numbers in range 0 to 15 can be stored in 4 bits ( 2^4 = 16 different numbers)&lt;br /&gt;
&lt;br /&gt;
Here is an example how to use bitmasking:&lt;br /&gt;
[[Media:Tester.txt]]&lt;br /&gt;
== Defining Map Objects ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These sections describe how to define map objects.&lt;br /&gt;
&lt;br /&gt;
=== Warp Definitions ===&lt;br /&gt;
Warps are what move players between maps. They can also be used to move players around a single map, if needed. Warps are defined like this:&lt;br /&gt;
&lt;br /&gt;
 map1,startX,startY|warp|name|width,height,map2,endX,endY&lt;br /&gt;
&lt;br /&gt;
Key:&lt;br /&gt;
{|&lt;br /&gt;
|map1  ||the starting map&lt;br /&gt;
|-&lt;br /&gt;
|startX||the x-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|startY||the y-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|name  ||the name of the warp, unused but must be defined&lt;br /&gt;
|-&lt;br /&gt;
|width ||the width of the warp&lt;br /&gt;
|-&lt;br /&gt;
|height||the height of the warp&lt;br /&gt;
|-&lt;br /&gt;
|map2  ||the ending map&lt;br /&gt;
|-&lt;br /&gt;
|endX  ||the x-coordinate of the tile the player will end up on&lt;br /&gt;
|-&lt;br /&gt;
|endY  ||the y-coordinate of the tile the player will end up on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Width and height are described in detail here: [[EAthena Scripting Standards/Warp Details|Warp Details]].&lt;br /&gt;
&lt;br /&gt;
=== Monster Definitions ===&lt;br /&gt;
Monsters are defined like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;|monster|&amp;lt;name&amp;gt;|&amp;lt;mobID&amp;gt;,&amp;lt;count&amp;gt;,&amp;lt;spawn1&amp;gt;,&amp;lt;spawn2&amp;gt;,{&amp;lt;eventcode&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|width      ||the tile width of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|name       ||the name of the mob, unused but must be defined. &#039;&#039;&#039;DO NOT&#039;&#039;&#039; use the keywords such as &amp;quot;spawn&amp;quot; in this name to avoid conflict with other game systems (magic for example)&lt;br /&gt;
|-&lt;br /&gt;
|mobID      ||the mob identifier of the desired monster (in the monster db)the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|count      ||the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|spawn1     ||the minimum delay between successive spawns (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|spawn2     ||the minimum delay between death and respawn (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
A detailed description of position and area can be found here: [[EAthena Scripting Standards/Mob Details|Mob Details]].&lt;br /&gt;
&lt;br /&gt;
=== NPC Definitions ===&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;triggerX&amp;gt;,&amp;lt;triggerY&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|facing     ||Direction the NPC faces to. &#039;&#039;&#039;It must be set to 0&#039;&#039;&#039; in TMW&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|Name       ||the name of the NPC&lt;br /&gt;
|-&lt;br /&gt;
|spriteID   ||the mob identifier of the desired NPC. Sprite ID&lt;br /&gt;
|-&lt;br /&gt;
|triggerX   ||&lt;br /&gt;
|-&lt;br /&gt;
|triggerY   ||&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
* Server side :&lt;br /&gt;
::NPC definitions (script) are usually stored as : &amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/&amp;lt;NPC Name&amp;gt;.txt or in the file :&amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/npc.txt&lt;br /&gt;
* Client side :&lt;br /&gt;
::The NPC is associated with a sprite (the image that will appear in the game), and a XML file which tells the client some display parameters.&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.png&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.xml&amp;lt;br/&amp;gt;The NPC spriteID is linked to graphic files and XML in the file : (tmwa-client-data/)npcs.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/NPC Details|NPC Details]]. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Script Functions ==&lt;br /&gt;
 function|script|&amp;lt;function name&amp;gt;|&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Actual script functions are stored or imported in the files : (tmwa-server-data/)world/map/npc/functions/&amp;lt;function name&amp;gt;.txt, regardless rhey are called from a Map, NPC, Mob or item.&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/function Details|function Details]]. --&amp;gt;&lt;br /&gt;
==Script Loading==&lt;br /&gt;
The main script import file is:[https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/scripts.conf (tmwa-server-data/)world/map/npc/scripts.conf] &amp;lt;br/&amp;gt;&lt;br /&gt;
It loads [https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/_import.txt (tmwa-server-data/)world/map/npc/_import.txt] which imports all NPC scripts wich are stored under the respective map name folders, usually under NPC name.&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
== Open a chest and get reward ==&lt;br /&gt;
An example is given by a quest to get a key for a chest (in fact 3 keys):&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:850px;&amp;quot; border=0 cellspacing=&amp;quot;10&amp;quot; &lt;br /&gt;
|-valign=&amp;quot;Top&amp;quot; &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
// A treasure chest. You need three keys to open it.&lt;br /&gt;
//&lt;br /&gt;
// TMW_Quest (document variable here)&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
002-4.gat,93,37,0|script|Treasure|111,{&lt;br /&gt;
&lt;br /&gt;
    if (TMW_Quest &amp;gt;= 38) goto L_Finished;&lt;br /&gt;
&lt;br /&gt;
    mes &amp;quot;There is a chest here.&amp;quot;;&lt;br /&gt;
    mes &amp;quot;Do you want to try to open it?&amp;quot;;&lt;br /&gt;
    next;&lt;br /&gt;
    menu&lt;br /&gt;
        &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
        &amp;quot;No.&amp;quot;, -;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Yes:&lt;br /&gt;
    if(countitem(&amp;quot;TreasureKey&amp;quot;) &amp;lt; 3) goto L_Not_Enough;&lt;br /&gt;
    getinventorylist;&lt;br /&gt;
    if (@inventorylist_count == 100 &amp;amp;&amp;amp; countitem(&amp;quot;TreasureKey&amp;quot;) &amp;gt; 3) goto L_TooMany;&lt;br /&gt;
    mes &amp;quot;You opened the chest and found a short bow!&amp;quot;;&lt;br /&gt;
    delitem &amp;quot;TreasureKey&amp;quot;, 3;&lt;br /&gt;
    getitem &amp;quot;ShortBow&amp;quot;, 1;&lt;br /&gt;
    set TMW_Quest, 38;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Not_Enough:&lt;br /&gt;
    mes &amp;quot;It seems that you do not have the right key for this chest yet...&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Finished:&lt;br /&gt;
    mes &amp;quot;You have already opened this chest.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_TooMany:&lt;br /&gt;
    mes &amp;quot;You do not have enough room to loot this chest. Maybe you should try again later.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
This script starts with describing the NPC (the chest, NPC sprite 111) and its location (map 002-4 X=93, Y=37, in tiles from top left of the map). Then follows what happens on activation:&lt;br /&gt;
First, the variable &#039;&#039;&amp;quot;TMW_Quest&amp;quot;&#039;&#039; is checked to know if the player already accomplished the quest &amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;(the variable should be documented)&#039;&#039;&#039;&amp;lt;/span&amp;gt;, If he has the script continues at label &#039;&#039;L_Finished&#039;&#039;, the player is reminded fe alredy accomplished the task and script finishes, if not the scrip continues. A message is shown (mes), then an option dialog (menu) is displayed with two possible answers : &amp;quot;Yes.&amp;quot; or &amp;quot;No.&amp;quot;. If the player answers &amp;quot;No.&amp;quot; the script stops (close;); if he answers &amp;quot;Yes.&amp;quot; the script continues at label &#039;&#039;L_Yes&#039;&#039;. Now player is checked to know if he has at least 3 keys, if not script branches to label &#039;&#039;L_Not_Enough&#039;&#039; tells the player he  &amp;quot;has not the right key&amp;quot; and script closes. If he has keys enough, his inventory list is retrieved by the built-in function &amp;quot;getinventorylist&amp;quot; and it&#039;s content is checked to know if the player will have room enough to store the reward after the 3 keys use. If not, script goes to label &#039;&#039;L_TooMany&#039;&#039; and script close after a warning message, If yes 3 keys are deleted in player&#039;s inventory,  he gets the reward: a Short Bow and the variable TMW_Quest is set to 38.&lt;br /&gt;
&lt;br /&gt;
For more examples of the current system, check out the current scripts in use by the server. Beware though, this could affect your enjoyment of the game as it does spoil some of the mystery. Here&#039;s a link to git so you can view them in your browser:&lt;br /&gt;
&lt;br /&gt;
https://github.com/themanaworld/tmwa-server-data/tree/master/world/map/npc&lt;br /&gt;
&lt;br /&gt;
Note that anything said by an NPC should be put in double quotes (&amp;quot;). You can do that like this: &amp;quot;&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039;Hello!&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039; she said.&amp;quot;&lt;br /&gt;
=References=&lt;br /&gt;
* [[EAthena Scripting Basics]]&lt;br /&gt;
* [[EAthena Scripting Reference]]&lt;br /&gt;
* [http://forums.themanaworld.org/viewtopic.php?f=13&amp;amp;t=13653 script cleanup/scripting standards proposal]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=25222</id>
		<title>Classic:TmwAthena Scripting Standards</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=25222"/>
		<updated>2013-01-03T20:26:42Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Add an example of how menus should be indented.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Status_construction}}&lt;br /&gt;
{{Status_outdated}}&lt;br /&gt;
{{Gaps|Needs to be updated with {{ForumThread|13653}} and {{ForumThread|13672}}, which are generally accepted but there might be more discussion}}&lt;br /&gt;
&lt;br /&gt;
This is an attempt to standardize the eAthena coding. Any suggestions are welcome to be posted on the discussion page before editing.&lt;br /&gt;
=Code Formatting=&lt;br /&gt;
== Indentation ==&lt;br /&gt;
* Code is indented with four spaces. &lt;br /&gt;
* Code in the same block should have the same indentation. &lt;br /&gt;
* Labels have no indentation. &lt;br /&gt;
* Menu options are on their own lines and are indented further. &lt;br /&gt;
Example:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
* When using an if-statement, there should be a line break after the condition and the conditional command should be indented further. An exception to this is a series of if-statements at the beginning of a major code block which use gotos to jump to the correct position in the script. In this case the goto should be in the same line as the if-statement.&lt;br /&gt;
Example:&lt;br /&gt;
 // if-statement and conditional command in the same line, gotos aligned&lt;br /&gt;
 if (@quest &amp;gt;= 3)  goto L_Done;&lt;br /&gt;
 if (@quest == 2) goto L_Progress;&lt;br /&gt;
 if (@quest == 1) goto L_Question;&lt;br /&gt;
 &lt;br /&gt;
 // conditional command in the next line and indented further&lt;br /&gt;
 if (BaseLevel &amp;lt; 40)&lt;br /&gt;
     set @cost, 100;&lt;br /&gt;
&lt;br /&gt;
== Whitespaces==&lt;br /&gt;
In many places whitespaces can increase readability. Examples are&lt;br /&gt;
* When concatenating text and variables:&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot; + strcharinfo(0) + &amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
instead of&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot;+strcharinfo(0)+&amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
* When assigning values to variables:&lt;br /&gt;
 set @var, 3;&lt;br /&gt;
instead of&lt;br /&gt;
 set @var,3;&lt;br /&gt;
* In menus:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
instead of&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;,L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;,L_No;&lt;br /&gt;
&lt;br /&gt;
== Code Blocks ==&lt;br /&gt;
* Code blocks should be separated from the others in a dinstinct way: insert a blank line between code blocks. &lt;br /&gt;
* Individual blocks should be together No blank lines within a block. &lt;br /&gt;
* The opening brackets should be at the end of the parent line, not in a new line; the closing ones should be in a line of their own.&lt;br /&gt;
* newline between if (condition) and conditional_command, except when conditional_command is a goto at the beginning of a major script block (usually only at the beginning of a script), in which case if there are multiple if statements on adjacent lines, the gotos shall be aligned&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;provide an example&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove unnecessary next;&lt;br /&gt;
Remove redundant code such as end; after close;&lt;br /&gt;
remove break; instead use end; (requires changing the java converter)&lt;br /&gt;
Replace monsters.txt with _mobs.txt except in special cases.&lt;br /&gt;
A standard for whitespace and comments.&lt;br /&gt;
&lt;br /&gt;
     ?&lt;br /&gt;
    limit line length? (break long strings using + concatentation)&lt;br /&gt;
==Labels and Subfunctions==&lt;br /&gt;
* newline before every label&lt;br /&gt;
* no newline after a label&lt;br /&gt;
* Labels should always start with L_, except those that act as a subfunction, which should start with S_. There must not be a fallthrough or goto to a subfunction label.&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;decision pending&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
 L_CamelCase: Current practice for labels and I don&#039;t think that is worth changing,&lt;br /&gt;
 L_lower_case:, o11c prefers, especially for things like L_close:&lt;br /&gt;
* &#039;&#039;&#039;Subfunctions&#039;&#039;&#039;:&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;to be discussed&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;quot;[...]except those that act as a subfunction, which should start with S_&amp;quot;&lt;br /&gt;
 Also, what should labels within a subfunction label use? I was thinking LS_ or SL_; loratay currently uses L_SUB_ ... or perhaps this should be refactored out into a standalone function?&lt;br /&gt;
 &#039;&#039;summary&#039;&#039;: S_, LS_, SL_, L_SUB_, Sub_, refactor out into a standalone function.&lt;br /&gt;
==Comments==&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;to be discussed&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
* o11c suggests:&lt;br /&gt;
 &amp;quot;^///&amp;quot; lines for documentation&lt;br /&gt;
 &amp;quot;^// &amp;quot; lines to be commented out code (because that is what my editor uses automatically to disable code)&lt;br /&gt;
 &amp;quot;^//[^ /]&amp;quot; for &amp;quot;other&amp;quot;. &lt;br /&gt;
 Documentation should maybe have doxygen-like tags?&lt;br /&gt;
 Dislikes boxed comments.&lt;br /&gt;
* Actual&lt;br /&gt;
 // Yellow dog quests&lt;br /&gt;
 // author: Saturn&lt;br /&gt;
 // see bluesageConfig for detailed quest description&lt;br /&gt;
 // NPC Arthur will not make the code for you...&lt;br /&gt;
 // uses global vars ... f&lt;br /&gt;
 // calls  global function  funkbeat () located at ... f&lt;br /&gt;
&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
 //# bla blabla - By Smith, reviewed by john                                       #&lt;br /&gt;
 //# GPL v.2                                                                       #&lt;br /&gt;
 //#  ...                                                                          #&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
=Variables=&lt;br /&gt;
==Document Variables==&lt;br /&gt;
in every file, document every variable as one of:&lt;br /&gt;
&lt;br /&gt;
* #  account variable (prefix #) (note that there are also ## variable which didn&#039;t work in the stable version of the server)&lt;br /&gt;
*    permanent player variable (no prefix)&lt;br /&gt;
* @  temporary player variable (prefix @) - used after the script close;s or end;s.&lt;br /&gt;
* @  dynamic player variable (prefix @) - passed into or out of callsub or callfunc&lt;br /&gt;
* @  lexical (local) player variable (prefix @) - used only within the function (scripthelp.txt documents that &amp;quot;.@&amp;quot; means this but I don&#039;t know if that works)&lt;br /&gt;
* @  local constant (prefix @) - not dependent on the player, used only within the function. e.g. lots of @QUEST_FOO_{SHIFT,MASK}&lt;br /&gt;
* $  global permanent variable (prefix $) (I&#039;m not sure if we have any of these right now)&lt;br /&gt;
* $  npc permanent variable (prefix $) same as above but only used by one NPC&lt;br /&gt;
* $  global temporary variable (prefix $@)&lt;br /&gt;
* $@ npc temporary variable (prefix $@) same as above but only used by one NPC, scripthelp.txt mentions prefix &amp;quot;.&amp;quot; but I don&#039;t know if that works&lt;br /&gt;
*    special variable (in db/const.txt with a 1 following)&lt;br /&gt;
*    global constant (in const.txt)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If we use a consistent method of documenting these, we can then generate a list of all variables by type.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Variables initialization==&lt;br /&gt;
Check for troublesome arrays:&lt;br /&gt;
A troublesome array is defined as an array that is not&lt;br /&gt;
*initialized all at once&lt;br /&gt;
*initialized by appending elements to the end, for use in a menu&lt;br /&gt;
 Nothing needs to be done, merely document them. I want this information at hand when I design the new scripting language to minimize conversion pains.&lt;br /&gt;
 I wouldn&#039;t be surprised if there were no troublesome arrays at all. If there are only a couple it might be worth refactoring the code to remove them, but that might be a  high-level decision which is beyond the scope of this proposal.&lt;br /&gt;
&lt;br /&gt;
Set dynamic and local @variables to 0 before close;&lt;br /&gt;
==Naming Variables==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using as little variables as you need==&lt;br /&gt;
So there are some quests, which require lots of variables.&lt;br /&gt;
Think of monster oil quest, Oric and Warum quest etc.&lt;br /&gt;
&lt;br /&gt;
This can often be done by bitmasking: &lt;br /&gt;
One variable has 32 bits. So a variabe can store 2^32 different numbers: 4294967296&lt;br /&gt;
&lt;br /&gt;
But sometimes you only need numbers from 0 to 15, but more of these variables.&lt;br /&gt;
but numbers in range 0 to 15 can be stored in 4 bits ( 2^4 = 16 different numbers)&lt;br /&gt;
&lt;br /&gt;
Here is an example how to use bitmasking:&lt;br /&gt;
[[Media:Tester.txt]]&lt;br /&gt;
== Defining Map Objects ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These sections describe how to define map objects.&lt;br /&gt;
&lt;br /&gt;
=== Warp Definitions ===&lt;br /&gt;
Warps are what move players between maps. They can also be used to move players around a single map, if needed. Warps are defined like this:&lt;br /&gt;
&lt;br /&gt;
 map1,startX,startY|warp|name|width,height,map2,endX,endY&lt;br /&gt;
&lt;br /&gt;
Key:&lt;br /&gt;
{|&lt;br /&gt;
|map1  ||the starting map&lt;br /&gt;
|-&lt;br /&gt;
|startX||the x-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|startY||the y-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|name  ||the name of the warp, unused but must be defined&lt;br /&gt;
|-&lt;br /&gt;
|width ||the width of the warp&lt;br /&gt;
|-&lt;br /&gt;
|height||the height of the warp&lt;br /&gt;
|-&lt;br /&gt;
|map2  ||the ending map&lt;br /&gt;
|-&lt;br /&gt;
|endX  ||the x-coordinate of the tile the player will end up on&lt;br /&gt;
|-&lt;br /&gt;
|endY  ||the y-coordinate of the tile the player will end up on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Width and height are described in detail here: [[EAthena Scripting Standards/Warp Details|Warp Details]].&lt;br /&gt;
&lt;br /&gt;
=== Monster Definitions ===&lt;br /&gt;
Monsters are defined like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;|monster|&amp;lt;name&amp;gt;|&amp;lt;mobID&amp;gt;,&amp;lt;count&amp;gt;,&amp;lt;spawn1&amp;gt;,&amp;lt;spawn2&amp;gt;,{&amp;lt;eventcode&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|width      ||the tile width of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|name       ||the name of the mob, unused but must be defined. &#039;&#039;&#039;DO NOT&#039;&#039;&#039; use the keywords such as &amp;quot;spawn&amp;quot; in this name to avoid conflict with other game systems (magic for example)&lt;br /&gt;
|-&lt;br /&gt;
|mobID      ||the mob identifier of the desired monster (in the monster db)the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|count      ||the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|spawn1     ||the minimum delay between successive spawns (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|spawn2     ||the minimum delay between death and respawn (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
A detailed description of position and area can be found here: [[EAthena Scripting Standards/Mob Details|Mob Details]].&lt;br /&gt;
&lt;br /&gt;
=== NPC Definitions ===&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;triggerX&amp;gt;,&amp;lt;triggerY&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|facing     ||Direction the NPC faces to. &#039;&#039;&#039;It must be set to 0&#039;&#039;&#039; in TMW&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|Name       ||the name of the NPC&lt;br /&gt;
|-&lt;br /&gt;
|spriteID   ||the mob identifier of the desired NPC. Sprite ID&lt;br /&gt;
|-&lt;br /&gt;
|triggerX   ||&lt;br /&gt;
|-&lt;br /&gt;
|triggerY   ||&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
* Server side :&lt;br /&gt;
::NPC definitions (script) are usually stored as : &amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/&amp;lt;NPC Name&amp;gt;.txt or in the file :&amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/npc.txt&lt;br /&gt;
* Client side :&lt;br /&gt;
::The NPC is associated with a sprite (the image that will appear in the game), and a XML file which tells the client some display parameters.&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.png&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.xml&amp;lt;br/&amp;gt;The NPC spriteID is linked to graphic files and XML in the file : (tmwa-client-data/)npcs.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/NPC Details|NPC Details]]. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Script Functions ==&lt;br /&gt;
 function|script|&amp;lt;function name&amp;gt;|&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Actual script functions are stored or imported in the files : (tmwa-server-data/)world/map/npc/functions/&amp;lt;function name&amp;gt;.txt, regardless rhey are called from a Map, NPC, Mob or item.&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/function Details|function Details]]. --&amp;gt;&lt;br /&gt;
==Script Loading==&lt;br /&gt;
The main script import file is:[https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/scripts.conf (tmwa-server-data/)world/map/npc/scripts.conf] &amp;lt;br/&amp;gt;&lt;br /&gt;
It loads [https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/_import.txt (tmwa-server-data/)world/map/npc/_import.txt] which imports all NPC scripts wich are stored under the respective map name folders, usually under NPC name.&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
== Open a chest and get reward ==&lt;br /&gt;
An example is given by a quest to get a key for a chest (in fact 3 keys):&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:850px;&amp;quot; border=0 cellspacing=&amp;quot;10&amp;quot; &lt;br /&gt;
|-valign=&amp;quot;Top&amp;quot; &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
// A treasure chest. You need three keys to open it.&lt;br /&gt;
//&lt;br /&gt;
// TMW_Quest (document variable here)&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
002-4.gat,93,37,0|script|Treasure|111,{&lt;br /&gt;
&lt;br /&gt;
    if (TMW_Quest &amp;gt;= 38) goto L_Finished;&lt;br /&gt;
&lt;br /&gt;
    mes &amp;quot;There is a chest here.&amp;quot;;&lt;br /&gt;
    mes &amp;quot;Do you want to try to open it?&amp;quot;;&lt;br /&gt;
    next;&lt;br /&gt;
    menu&lt;br /&gt;
        &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
        &amp;quot;No.&amp;quot;, -;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Yes:&lt;br /&gt;
    if(countitem(&amp;quot;TreasureKey&amp;quot;) &amp;lt; 3) goto L_Not_Enough;&lt;br /&gt;
    getinventorylist;&lt;br /&gt;
    if (@inventorylist_count == 100 &amp;amp;&amp;amp; countitem(&amp;quot;TreasureKey&amp;quot;) &amp;gt; 3) goto L_TooMany;&lt;br /&gt;
    mes &amp;quot;You opened the chest and found a short bow!&amp;quot;;&lt;br /&gt;
    delitem &amp;quot;TreasureKey&amp;quot;, 3;&lt;br /&gt;
    getitem &amp;quot;ShortBow&amp;quot;, 1;&lt;br /&gt;
    set TMW_Quest, 38;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Not_Enough:&lt;br /&gt;
    mes &amp;quot;It seems that you do not have the right key for this chest yet...&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Finished:&lt;br /&gt;
    mes &amp;quot;You have already opened this chest.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_TooMany:&lt;br /&gt;
    mes &amp;quot;You do not have enough room to loot this chest. Maybe you should try again later.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
This script starts with describing the NPC (the chest, NPC sprite 111) and its location (map 002-4 X=93, Y=37, in tiles from top left of the map). Then follows what happens on activation:&lt;br /&gt;
First, the variable &#039;&#039;&amp;quot;TMW_Quest&amp;quot;&#039;&#039; is checked to know if the player already accomplished the quest &amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;(the variable should be documented)&#039;&#039;&#039;&amp;lt;/span&amp;gt;, If he has the script continues at label &#039;&#039;L_Finished&#039;&#039;, the player is reminded fe alredy accomplished the task and script finishes, if not the scrip continues. A message is shown (mes), then an option dialog (menu) is displayed with two possible answers : &amp;quot;Yes.&amp;quot; or &amp;quot;No.&amp;quot;. If the player answers &amp;quot;No.&amp;quot; the script stops (close;); if he answers &amp;quot;Yes.&amp;quot; the script continues at label &#039;&#039;L_Yes&#039;&#039;. Now player is checked to know if he has at least 3 keys, if not script branches to label &#039;&#039;L_Not_Enough&#039;&#039; tells the player he  &amp;quot;has not the right key&amp;quot; and script closes. If he has keys enough, his inventory list is retrieved by the built-in function &amp;quot;getinventorylist&amp;quot; and it&#039;s content is checked to know if the player will have room enough to store the reward after the 3 keys use. If not, script goes to label &#039;&#039;L_TooMany&#039;&#039; and script close after a warning message, If yes 3 keys are deleted in player&#039;s inventory,  he gets the reward: a Short Bow and the variable TMW_Quest is set to 38.&lt;br /&gt;
&lt;br /&gt;
For more examples of the current system, check out the current scripts in use by the server. Beware though, this could affect your enjoyment of the game as it does spoil some of the mystery. Here&#039;s a link to git so you can view them in your browser:&lt;br /&gt;
&lt;br /&gt;
https://github.com/themanaworld/tmwa-server-data/tree/master/world/map/npc&lt;br /&gt;
&lt;br /&gt;
Note that anything said by an NPC should be put in double quotes (&amp;quot;). You can do that like this: &amp;quot;&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039;Hello!&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039; she said.&amp;quot;&lt;br /&gt;
=References=&lt;br /&gt;
* [[EAthena Scripting Basics]]&lt;br /&gt;
* [[EAthena Scripting Reference]]&lt;br /&gt;
* [http://forums.themanaworld.org/viewtopic.php?f=13&amp;amp;t=13653 script cleanup/scripting standards proposal]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=25221</id>
		<title>Classic:TmwAthena Scripting Standards</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=25221"/>
		<updated>2013-01-03T20:21:20Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Add example about how to indent if-statements.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Status_construction}}&lt;br /&gt;
{{Status_outdated}}&lt;br /&gt;
{{Gaps|Needs to be updated with {{ForumThread|13653}} and {{ForumThread|13672}}, which are generally accepted but there might be more discussion}}&lt;br /&gt;
&lt;br /&gt;
This is an attempt to standardize the eAthena coding. Any suggestions are welcome to be posted on the discussion page before editing.&lt;br /&gt;
=Code Formatting=&lt;br /&gt;
== Indentation ==&lt;br /&gt;
* Code is indented with four spaces. &lt;br /&gt;
* Code in the same block should have the same indentation. &lt;br /&gt;
* Labels have no indentation. &lt;br /&gt;
* Menu options are on their own lines and are indented further. &lt;br /&gt;
* When using an if-statement, there should be a line break after the condition and the conditional command should be indented further. An exception to this is a series of if-statements at the beginning of a major code block which use gotos to jump to the correct position in the script. In this case the goto should be in the same line as the if-statement.&lt;br /&gt;
Example:&lt;br /&gt;
 // if-statement and conditional command in the same line, gotos aligned&lt;br /&gt;
 if (@quest &amp;gt;= 3)  goto L_Done;&lt;br /&gt;
 if (@quest == 2) goto L_Progress;&lt;br /&gt;
 if (@quest == 1) goto L_Question;&lt;br /&gt;
 &lt;br /&gt;
 // conditional command in the next line and indented further&lt;br /&gt;
 if (BaseLevel &amp;lt; 40)&lt;br /&gt;
     set @cost, 100;&lt;br /&gt;
&lt;br /&gt;
== Whitespaces==&lt;br /&gt;
In many places whitespaces can increase readability. Examples are&lt;br /&gt;
* When concatenating text and variables:&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot; + strcharinfo(0) + &amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
instead of&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot;+strcharinfo(0)+&amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
* When assigning values to variables:&lt;br /&gt;
 set @var, 3;&lt;br /&gt;
instead of&lt;br /&gt;
 set @var,3;&lt;br /&gt;
* In menus:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
instead of&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;,L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;,L_No;&lt;br /&gt;
&lt;br /&gt;
== Code Blocks ==&lt;br /&gt;
* Code blocks should be separated from the others in a dinstinct way: insert a blank line between code blocks. &lt;br /&gt;
* Individual blocks should be together No blank lines within a block. &lt;br /&gt;
* The opening brackets should be at the end of the parent line, not in a new line; the closing ones should be in a line of their own.&lt;br /&gt;
* newline between if (condition) and conditional_command, except when conditional_command is a goto at the beginning of a major script block (usually only at the beginning of a script), in which case if there are multiple if statements on adjacent lines, the gotos shall be aligned&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;provide an example&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove unnecessary next;&lt;br /&gt;
Remove redundant code such as end; after close;&lt;br /&gt;
remove break; instead use end; (requires changing the java converter)&lt;br /&gt;
Replace monsters.txt with _mobs.txt except in special cases.&lt;br /&gt;
A standard for whitespace and comments.&lt;br /&gt;
&lt;br /&gt;
     ?&lt;br /&gt;
    limit line length? (break long strings using + concatentation)&lt;br /&gt;
==Labels and Subfunctions==&lt;br /&gt;
* newline before every label&lt;br /&gt;
* no newline after a label&lt;br /&gt;
* Labels should always start with L_, except those that act as a subfunction, which should start with S_. There must not be a fallthrough or goto to a subfunction label.&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;decision pending&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
 L_CamelCase: Current practice for labels and I don&#039;t think that is worth changing,&lt;br /&gt;
 L_lower_case:, o11c prefers, especially for things like L_close:&lt;br /&gt;
* &#039;&#039;&#039;Subfunctions&#039;&#039;&#039;:&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;to be discussed&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;quot;[...]except those that act as a subfunction, which should start with S_&amp;quot;&lt;br /&gt;
 Also, what should labels within a subfunction label use? I was thinking LS_ or SL_; loratay currently uses L_SUB_ ... or perhaps this should be refactored out into a standalone function?&lt;br /&gt;
 &#039;&#039;summary&#039;&#039;: S_, LS_, SL_, L_SUB_, Sub_, refactor out into a standalone function.&lt;br /&gt;
==Comments==&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;to be discussed&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
* o11c suggests:&lt;br /&gt;
 &amp;quot;^///&amp;quot; lines for documentation&lt;br /&gt;
 &amp;quot;^// &amp;quot; lines to be commented out code (because that is what my editor uses automatically to disable code)&lt;br /&gt;
 &amp;quot;^//[^ /]&amp;quot; for &amp;quot;other&amp;quot;. &lt;br /&gt;
 Documentation should maybe have doxygen-like tags?&lt;br /&gt;
 Dislikes boxed comments.&lt;br /&gt;
* Actual&lt;br /&gt;
 // Yellow dog quests&lt;br /&gt;
 // author: Saturn&lt;br /&gt;
 // see bluesageConfig for detailed quest description&lt;br /&gt;
 // NPC Arthur will not make the code for you...&lt;br /&gt;
 // uses global vars ... f&lt;br /&gt;
 // calls  global function  funkbeat () located at ... f&lt;br /&gt;
&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
 //# bla blabla - By Smith, reviewed by john                                       #&lt;br /&gt;
 //# GPL v.2                                                                       #&lt;br /&gt;
 //#  ...                                                                          #&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
=Variables=&lt;br /&gt;
==Document Variables==&lt;br /&gt;
in every file, document every variable as one of:&lt;br /&gt;
&lt;br /&gt;
* #  account variable (prefix #) (note that there are also ## variable which didn&#039;t work in the stable version of the server)&lt;br /&gt;
*    permanent player variable (no prefix)&lt;br /&gt;
* @  temporary player variable (prefix @) - used after the script close;s or end;s.&lt;br /&gt;
* @  dynamic player variable (prefix @) - passed into or out of callsub or callfunc&lt;br /&gt;
* @  lexical (local) player variable (prefix @) - used only within the function (scripthelp.txt documents that &amp;quot;.@&amp;quot; means this but I don&#039;t know if that works)&lt;br /&gt;
* @  local constant (prefix @) - not dependent on the player, used only within the function. e.g. lots of @QUEST_FOO_{SHIFT,MASK}&lt;br /&gt;
* $  global permanent variable (prefix $) (I&#039;m not sure if we have any of these right now)&lt;br /&gt;
* $  npc permanent variable (prefix $) same as above but only used by one NPC&lt;br /&gt;
* $  global temporary variable (prefix $@)&lt;br /&gt;
* $@ npc temporary variable (prefix $@) same as above but only used by one NPC, scripthelp.txt mentions prefix &amp;quot;.&amp;quot; but I don&#039;t know if that works&lt;br /&gt;
*    special variable (in db/const.txt with a 1 following)&lt;br /&gt;
*    global constant (in const.txt)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If we use a consistent method of documenting these, we can then generate a list of all variables by type.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Variables initialization==&lt;br /&gt;
Check for troublesome arrays:&lt;br /&gt;
A troublesome array is defined as an array that is not&lt;br /&gt;
*initialized all at once&lt;br /&gt;
*initialized by appending elements to the end, for use in a menu&lt;br /&gt;
 Nothing needs to be done, merely document them. I want this information at hand when I design the new scripting language to minimize conversion pains.&lt;br /&gt;
 I wouldn&#039;t be surprised if there were no troublesome arrays at all. If there are only a couple it might be worth refactoring the code to remove them, but that might be a  high-level decision which is beyond the scope of this proposal.&lt;br /&gt;
&lt;br /&gt;
Set dynamic and local @variables to 0 before close;&lt;br /&gt;
==Naming Variables==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using as little variables as you need==&lt;br /&gt;
So there are some quests, which require lots of variables.&lt;br /&gt;
Think of monster oil quest, Oric and Warum quest etc.&lt;br /&gt;
&lt;br /&gt;
This can often be done by bitmasking: &lt;br /&gt;
One variable has 32 bits. So a variabe can store 2^32 different numbers: 4294967296&lt;br /&gt;
&lt;br /&gt;
But sometimes you only need numbers from 0 to 15, but more of these variables.&lt;br /&gt;
but numbers in range 0 to 15 can be stored in 4 bits ( 2^4 = 16 different numbers)&lt;br /&gt;
&lt;br /&gt;
Here is an example how to use bitmasking:&lt;br /&gt;
[[Media:Tester.txt]]&lt;br /&gt;
== Defining Map Objects ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These sections describe how to define map objects.&lt;br /&gt;
&lt;br /&gt;
=== Warp Definitions ===&lt;br /&gt;
Warps are what move players between maps. They can also be used to move players around a single map, if needed. Warps are defined like this:&lt;br /&gt;
&lt;br /&gt;
 map1,startX,startY|warp|name|width,height,map2,endX,endY&lt;br /&gt;
&lt;br /&gt;
Key:&lt;br /&gt;
{|&lt;br /&gt;
|map1  ||the starting map&lt;br /&gt;
|-&lt;br /&gt;
|startX||the x-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|startY||the y-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|name  ||the name of the warp, unused but must be defined&lt;br /&gt;
|-&lt;br /&gt;
|width ||the width of the warp&lt;br /&gt;
|-&lt;br /&gt;
|height||the height of the warp&lt;br /&gt;
|-&lt;br /&gt;
|map2  ||the ending map&lt;br /&gt;
|-&lt;br /&gt;
|endX  ||the x-coordinate of the tile the player will end up on&lt;br /&gt;
|-&lt;br /&gt;
|endY  ||the y-coordinate of the tile the player will end up on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Width and height are described in detail here: [[EAthena Scripting Standards/Warp Details|Warp Details]].&lt;br /&gt;
&lt;br /&gt;
=== Monster Definitions ===&lt;br /&gt;
Monsters are defined like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;|monster|&amp;lt;name&amp;gt;|&amp;lt;mobID&amp;gt;,&amp;lt;count&amp;gt;,&amp;lt;spawn1&amp;gt;,&amp;lt;spawn2&amp;gt;,{&amp;lt;eventcode&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|width      ||the tile width of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|name       ||the name of the mob, unused but must be defined. &#039;&#039;&#039;DO NOT&#039;&#039;&#039; use the keywords such as &amp;quot;spawn&amp;quot; in this name to avoid conflict with other game systems (magic for example)&lt;br /&gt;
|-&lt;br /&gt;
|mobID      ||the mob identifier of the desired monster (in the monster db)the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|count      ||the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|spawn1     ||the minimum delay between successive spawns (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|spawn2     ||the minimum delay between death and respawn (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
A detailed description of position and area can be found here: [[EAthena Scripting Standards/Mob Details|Mob Details]].&lt;br /&gt;
&lt;br /&gt;
=== NPC Definitions ===&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;triggerX&amp;gt;,&amp;lt;triggerY&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|facing     ||Direction the NPC faces to. &#039;&#039;&#039;It must be set to 0&#039;&#039;&#039; in TMW&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|Name       ||the name of the NPC&lt;br /&gt;
|-&lt;br /&gt;
|spriteID   ||the mob identifier of the desired NPC. Sprite ID&lt;br /&gt;
|-&lt;br /&gt;
|triggerX   ||&lt;br /&gt;
|-&lt;br /&gt;
|triggerY   ||&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
* Server side :&lt;br /&gt;
::NPC definitions (script) are usually stored as : &amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/&amp;lt;NPC Name&amp;gt;.txt or in the file :&amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/npc.txt&lt;br /&gt;
* Client side :&lt;br /&gt;
::The NPC is associated with a sprite (the image that will appear in the game), and a XML file which tells the client some display parameters.&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.png&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.xml&amp;lt;br/&amp;gt;The NPC spriteID is linked to graphic files and XML in the file : (tmwa-client-data/)npcs.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/NPC Details|NPC Details]]. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Script Functions ==&lt;br /&gt;
 function|script|&amp;lt;function name&amp;gt;|&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Actual script functions are stored or imported in the files : (tmwa-server-data/)world/map/npc/functions/&amp;lt;function name&amp;gt;.txt, regardless rhey are called from a Map, NPC, Mob or item.&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/function Details|function Details]]. --&amp;gt;&lt;br /&gt;
==Script Loading==&lt;br /&gt;
The main script import file is:[https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/scripts.conf (tmwa-server-data/)world/map/npc/scripts.conf] &amp;lt;br/&amp;gt;&lt;br /&gt;
It loads [https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/_import.txt (tmwa-server-data/)world/map/npc/_import.txt] which imports all NPC scripts wich are stored under the respective map name folders, usually under NPC name.&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
== Open a chest and get reward ==&lt;br /&gt;
An example is given by a quest to get a key for a chest (in fact 3 keys):&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:850px;&amp;quot; border=0 cellspacing=&amp;quot;10&amp;quot; &lt;br /&gt;
|-valign=&amp;quot;Top&amp;quot; &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
// A treasure chest. You need three keys to open it.&lt;br /&gt;
//&lt;br /&gt;
// TMW_Quest (document variable here)&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
002-4.gat,93,37,0|script|Treasure|111,{&lt;br /&gt;
&lt;br /&gt;
    if (TMW_Quest &amp;gt;= 38) goto L_Finished;&lt;br /&gt;
&lt;br /&gt;
    mes &amp;quot;There is a chest here.&amp;quot;;&lt;br /&gt;
    mes &amp;quot;Do you want to try to open it?&amp;quot;;&lt;br /&gt;
    next;&lt;br /&gt;
    menu&lt;br /&gt;
        &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
        &amp;quot;No.&amp;quot;, -;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Yes:&lt;br /&gt;
    if(countitem(&amp;quot;TreasureKey&amp;quot;) &amp;lt; 3) goto L_Not_Enough;&lt;br /&gt;
    getinventorylist;&lt;br /&gt;
    if (@inventorylist_count == 100 &amp;amp;&amp;amp; countitem(&amp;quot;TreasureKey&amp;quot;) &amp;gt; 3) goto L_TooMany;&lt;br /&gt;
    mes &amp;quot;You opened the chest and found a short bow!&amp;quot;;&lt;br /&gt;
    delitem &amp;quot;TreasureKey&amp;quot;, 3;&lt;br /&gt;
    getitem &amp;quot;ShortBow&amp;quot;, 1;&lt;br /&gt;
    set TMW_Quest, 38;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Not_Enough:&lt;br /&gt;
    mes &amp;quot;It seems that you do not have the right key for this chest yet...&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Finished:&lt;br /&gt;
    mes &amp;quot;You have already opened this chest.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_TooMany:&lt;br /&gt;
    mes &amp;quot;You do not have enough room to loot this chest. Maybe you should try again later.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
This script starts with describing the NPC (the chest, NPC sprite 111) and its location (map 002-4 X=93, Y=37, in tiles from top left of the map). Then follows what happens on activation:&lt;br /&gt;
First, the variable &#039;&#039;&amp;quot;TMW_Quest&amp;quot;&#039;&#039; is checked to know if the player already accomplished the quest &amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;(the variable should be documented)&#039;&#039;&#039;&amp;lt;/span&amp;gt;, If he has the script continues at label &#039;&#039;L_Finished&#039;&#039;, the player is reminded fe alredy accomplished the task and script finishes, if not the scrip continues. A message is shown (mes), then an option dialog (menu) is displayed with two possible answers : &amp;quot;Yes.&amp;quot; or &amp;quot;No.&amp;quot;. If the player answers &amp;quot;No.&amp;quot; the script stops (close;); if he answers &amp;quot;Yes.&amp;quot; the script continues at label &#039;&#039;L_Yes&#039;&#039;. Now player is checked to know if he has at least 3 keys, if not script branches to label &#039;&#039;L_Not_Enough&#039;&#039; tells the player he  &amp;quot;has not the right key&amp;quot; and script closes. If he has keys enough, his inventory list is retrieved by the built-in function &amp;quot;getinventorylist&amp;quot; and it&#039;s content is checked to know if the player will have room enough to store the reward after the 3 keys use. If not, script goes to label &#039;&#039;L_TooMany&#039;&#039; and script close after a warning message, If yes 3 keys are deleted in player&#039;s inventory,  he gets the reward: a Short Bow and the variable TMW_Quest is set to 38.&lt;br /&gt;
&lt;br /&gt;
For more examples of the current system, check out the current scripts in use by the server. Beware though, this could affect your enjoyment of the game as it does spoil some of the mystery. Here&#039;s a link to git so you can view them in your browser:&lt;br /&gt;
&lt;br /&gt;
https://github.com/themanaworld/tmwa-server-data/tree/master/world/map/npc&lt;br /&gt;
&lt;br /&gt;
Note that anything said by an NPC should be put in double quotes (&amp;quot;). You can do that like this: &amp;quot;&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039;Hello!&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039; she said.&amp;quot;&lt;br /&gt;
=References=&lt;br /&gt;
* [[EAthena Scripting Basics]]&lt;br /&gt;
* [[EAthena Scripting Reference]]&lt;br /&gt;
* [http://forums.themanaworld.org/viewtopic.php?f=13&amp;amp;t=13653 script cleanup/scripting standards proposal]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=25220</id>
		<title>Classic:TmwAthena Scripting Standards</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=25220"/>
		<updated>2013-01-03T20:12:10Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Adding a section about where to put whitespaces to increase readability.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Status_construction}}&lt;br /&gt;
{{Status_outdated}}&lt;br /&gt;
{{Gaps|Needs to be updated with {{ForumThread|13653}} and {{ForumThread|13672}}, which are generally accepted but there might be more discussion}}&lt;br /&gt;
&lt;br /&gt;
This is an attempt to standardize the eAthena coding. Any suggestions are welcome to be posted on the discussion page before editing.&lt;br /&gt;
=Code Formatting=&lt;br /&gt;
== Indentation ==&lt;br /&gt;
* Code is indented with four spaces. &lt;br /&gt;
* Code in the same block should have the same indentation. &lt;br /&gt;
* Labels have no indentation. &lt;br /&gt;
* Menu options are on their own lines and are indented further. &lt;br /&gt;
* When using an if-statement, there should be a line break after the condition and the conditional command should be indented further.&lt;br /&gt;
&lt;br /&gt;
== Whitespaces==&lt;br /&gt;
In many places whitespaces can increase readability. Examples are&lt;br /&gt;
* When concatenating text and variables:&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot; + strcharinfo(0) + &amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
instead of&lt;br /&gt;
 mes &amp;quot;\&amp;quot;Hello &amp;quot;+strcharinfo(0)+&amp;quot;!\&amp;quot;&amp;quot;;&lt;br /&gt;
* When assigning values to variables:&lt;br /&gt;
 set @var, 3;&lt;br /&gt;
instead of&lt;br /&gt;
 set @var,3;&lt;br /&gt;
* In menus:&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;, L_No;&lt;br /&gt;
instead of&lt;br /&gt;
 menu&lt;br /&gt;
     &amp;quot;Yes.&amp;quot;,L_Yes,&lt;br /&gt;
     &amp;quot;No.&amp;quot;,L_No;&lt;br /&gt;
&lt;br /&gt;
== Code Blocks ==&lt;br /&gt;
* Code blocks should be separated from the others in a dinstinct way: insert a blank line between code blocks. &lt;br /&gt;
* Individual blocks should be together No blank lines within a block. &lt;br /&gt;
* The opening brackets should be at the end of the parent line, not in a new line; the closing ones should be in a line of their own.&lt;br /&gt;
* newline between if (condition) and conditional_command, except when conditional_command is a goto at the beginning of a major script block (usually only at the beginning of a script), in which case if there are multiple if statements on adjacent lines, the gotos shall be aligned&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;provide an example&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove unnecessary next;&lt;br /&gt;
Remove redundant code such as end; after close;&lt;br /&gt;
remove break; instead use end; (requires changing the java converter)&lt;br /&gt;
Replace monsters.txt with _mobs.txt except in special cases.&lt;br /&gt;
A standard for whitespace and comments.&lt;br /&gt;
&lt;br /&gt;
     ?&lt;br /&gt;
    limit line length? (break long strings using + concatentation)&lt;br /&gt;
==Labels and Subfunctions==&lt;br /&gt;
* newline before every label&lt;br /&gt;
* no newline after a label&lt;br /&gt;
* Labels should always start with L_, except those that act as a subfunction, which should start with S_. There must not be a fallthrough or goto to a subfunction label.&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;decision pending&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
 L_CamelCase: Current practice for labels and I don&#039;t think that is worth changing,&lt;br /&gt;
 L_lower_case:, o11c prefers, especially for things like L_close:&lt;br /&gt;
* &#039;&#039;&#039;Subfunctions&#039;&#039;&#039;:&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;to be discussed&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;quot;[...]except those that act as a subfunction, which should start with S_&amp;quot;&lt;br /&gt;
 Also, what should labels within a subfunction label use? I was thinking LS_ or SL_; loratay currently uses L_SUB_ ... or perhaps this should be refactored out into a standalone function?&lt;br /&gt;
 &#039;&#039;summary&#039;&#039;: S_, LS_, SL_, L_SUB_, Sub_, refactor out into a standalone function.&lt;br /&gt;
==Comments==&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;to be discussed&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
* o11c suggests:&lt;br /&gt;
 &amp;quot;^///&amp;quot; lines for documentation&lt;br /&gt;
 &amp;quot;^// &amp;quot; lines to be commented out code (because that is what my editor uses automatically to disable code)&lt;br /&gt;
 &amp;quot;^//[^ /]&amp;quot; for &amp;quot;other&amp;quot;. &lt;br /&gt;
 Documentation should maybe have doxygen-like tags?&lt;br /&gt;
 Dislikes boxed comments.&lt;br /&gt;
* Actual&lt;br /&gt;
 // Yellow dog quests&lt;br /&gt;
 // author: Saturn&lt;br /&gt;
 // see bluesageConfig for detailed quest description&lt;br /&gt;
 // NPC Arthur will not make the code for you...&lt;br /&gt;
 // uses global vars ... f&lt;br /&gt;
 // calls  global function  funkbeat () located at ... f&lt;br /&gt;
&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
 //# bla blabla - By Smith, reviewed by john                                       #&lt;br /&gt;
 //# GPL v.2                                                                       #&lt;br /&gt;
 //#  ...                                                                          #&lt;br /&gt;
 //#################################################################################&lt;br /&gt;
=Variables=&lt;br /&gt;
==Document Variables==&lt;br /&gt;
in every file, document every variable as one of:&lt;br /&gt;
&lt;br /&gt;
* #  account variable (prefix #) (note that there are also ## variable which didn&#039;t work in the stable version of the server)&lt;br /&gt;
*    permanent player variable (no prefix)&lt;br /&gt;
* @  temporary player variable (prefix @) - used after the script close;s or end;s.&lt;br /&gt;
* @  dynamic player variable (prefix @) - passed into or out of callsub or callfunc&lt;br /&gt;
* @  lexical (local) player variable (prefix @) - used only within the function (scripthelp.txt documents that &amp;quot;.@&amp;quot; means this but I don&#039;t know if that works)&lt;br /&gt;
* @  local constant (prefix @) - not dependent on the player, used only within the function. e.g. lots of @QUEST_FOO_{SHIFT,MASK}&lt;br /&gt;
* $  global permanent variable (prefix $) (I&#039;m not sure if we have any of these right now)&lt;br /&gt;
* $  npc permanent variable (prefix $) same as above but only used by one NPC&lt;br /&gt;
* $  global temporary variable (prefix $@)&lt;br /&gt;
* $@ npc temporary variable (prefix $@) same as above but only used by one NPC, scripthelp.txt mentions prefix &amp;quot;.&amp;quot; but I don&#039;t know if that works&lt;br /&gt;
*    special variable (in db/const.txt with a 1 following)&lt;br /&gt;
*    global constant (in const.txt)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If we use a consistent method of documenting these, we can then generate a list of all variables by type.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Variables initialization==&lt;br /&gt;
Check for troublesome arrays:&lt;br /&gt;
A troublesome array is defined as an array that is not&lt;br /&gt;
*initialized all at once&lt;br /&gt;
*initialized by appending elements to the end, for use in a menu&lt;br /&gt;
 Nothing needs to be done, merely document them. I want this information at hand when I design the new scripting language to minimize conversion pains.&lt;br /&gt;
 I wouldn&#039;t be surprised if there were no troublesome arrays at all. If there are only a couple it might be worth refactoring the code to remove them, but that might be a  high-level decision which is beyond the scope of this proposal.&lt;br /&gt;
&lt;br /&gt;
Set dynamic and local @variables to 0 before close;&lt;br /&gt;
==Naming Variables==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Using as little variables as you need==&lt;br /&gt;
So there are some quests, which require lots of variables.&lt;br /&gt;
Think of monster oil quest, Oric and Warum quest etc.&lt;br /&gt;
&lt;br /&gt;
This can often be done by bitmasking: &lt;br /&gt;
One variable has 32 bits. So a variabe can store 2^32 different numbers: 4294967296&lt;br /&gt;
&lt;br /&gt;
But sometimes you only need numbers from 0 to 15, but more of these variables.&lt;br /&gt;
but numbers in range 0 to 15 can be stored in 4 bits ( 2^4 = 16 different numbers)&lt;br /&gt;
&lt;br /&gt;
Here is an example how to use bitmasking:&lt;br /&gt;
[[Media:Tester.txt]]&lt;br /&gt;
== Defining Map Objects ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These sections describe how to define map objects.&lt;br /&gt;
&lt;br /&gt;
=== Warp Definitions ===&lt;br /&gt;
Warps are what move players between maps. They can also be used to move players around a single map, if needed. Warps are defined like this:&lt;br /&gt;
&lt;br /&gt;
 map1,startX,startY|warp|name|width,height,map2,endX,endY&lt;br /&gt;
&lt;br /&gt;
Key:&lt;br /&gt;
{|&lt;br /&gt;
|map1  ||the starting map&lt;br /&gt;
|-&lt;br /&gt;
|startX||the x-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|startY||the y-coordinate of the starting warp tile&lt;br /&gt;
|-&lt;br /&gt;
|name  ||the name of the warp, unused but must be defined&lt;br /&gt;
|-&lt;br /&gt;
|width ||the width of the warp&lt;br /&gt;
|-&lt;br /&gt;
|height||the height of the warp&lt;br /&gt;
|-&lt;br /&gt;
|map2  ||the ending map&lt;br /&gt;
|-&lt;br /&gt;
|endX  ||the x-coordinate of the tile the player will end up on&lt;br /&gt;
|-&lt;br /&gt;
|endY  ||the y-coordinate of the tile the player will end up on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Width and height are described in detail here: [[EAthena Scripting Standards/Warp Details|Warp Details]].&lt;br /&gt;
&lt;br /&gt;
=== Monster Definitions ===&lt;br /&gt;
Monsters are defined like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;width&amp;gt;,&amp;lt;height&amp;gt;|monster|&amp;lt;name&amp;gt;|&amp;lt;mobID&amp;gt;,&amp;lt;count&amp;gt;,&amp;lt;spawn1&amp;gt;,&amp;lt;spawn2&amp;gt;,{&amp;lt;eventcode&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|width      ||the tile width of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|name       ||the name of the mob, unused but must be defined. &#039;&#039;&#039;DO NOT&#039;&#039;&#039; use the keywords such as &amp;quot;spawn&amp;quot; in this name to avoid conflict with other game systems (magic for example)&lt;br /&gt;
|-&lt;br /&gt;
|mobID      ||the mob identifier of the desired monster (in the monster db)the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|count      ||the number to spawn&lt;br /&gt;
|-&lt;br /&gt;
|spawn1     ||the minimum delay between successive spawns (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|spawn2     ||the minimum delay between death and respawn (per individual)&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
A detailed description of position and area can be found here: [[EAthena Scripting Standards/Mob Details|Mob Details]].&lt;br /&gt;
&lt;br /&gt;
=== NPC Definitions ===&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;map name&amp;gt;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;facing&amp;gt;|script|&amp;lt;Name&amp;gt;|&amp;lt;spriteID&amp;gt;,&amp;lt;triggerX&amp;gt;,&amp;lt;triggerY&amp;gt;,&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|map name   ||the map the monsters should appear on&lt;br /&gt;
|-&lt;br /&gt;
|x          ||the x-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|y          ||the y-coordinate of the spawn tile&lt;br /&gt;
|-&lt;br /&gt;
|facing     ||Direction the NPC faces to. &#039;&#039;&#039;It must be set to 0&#039;&#039;&#039; in TMW&lt;br /&gt;
|-&lt;br /&gt;
|height     ||the tile height of the spawn area&lt;br /&gt;
|-&lt;br /&gt;
|Name       ||the name of the NPC&lt;br /&gt;
|-&lt;br /&gt;
|spriteID   ||the mob identifier of the desired NPC. Sprite ID&lt;br /&gt;
|-&lt;br /&gt;
|triggerX   ||&lt;br /&gt;
|-&lt;br /&gt;
|triggerY   ||&lt;br /&gt;
|-&lt;br /&gt;
|eventcode  ||the script event to fire upon death&lt;br /&gt;
|}&lt;br /&gt;
* Server side :&lt;br /&gt;
::NPC definitions (script) are usually stored as : &amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/&amp;lt;NPC Name&amp;gt;.txt or in the file :&amp;lt;br/&amp;gt;(tmwa-server-data/)world/map/npc/&amp;lt;map name&amp;gt;/npc.txt&lt;br /&gt;
* Client side :&lt;br /&gt;
::The NPC is associated with a sprite (the image that will appear in the game), and a XML file which tells the client some display parameters.&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.png&amp;lt;br/&amp;gt;(tmwa-client-data/)graphics/sprites/npcs/npc-&amp;lt;Name&amp;gt;.xml&amp;lt;br/&amp;gt;The NPC spriteID is linked to graphic files and XML in the file : (tmwa-client-data/)npcs.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/NPC Details|NPC Details]]. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Script Functions ==&lt;br /&gt;
 function|script|&amp;lt;function name&amp;gt;|&amp;lt;nowiki&amp;gt;{&amp;lt;code&amp;gt;}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Actual script functions are stored or imported in the files : (tmwa-server-data/)world/map/npc/functions/&amp;lt;function name&amp;gt;.txt, regardless rhey are called from a Map, NPC, Mob or item.&lt;br /&gt;
&amp;lt;!-- A detailed description of position and area can be found here: [[EAthena Scripting Standards/function Details|function Details]]. --&amp;gt;&lt;br /&gt;
==Script Loading==&lt;br /&gt;
The main script import file is:[https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/scripts.conf (tmwa-server-data/)world/map/npc/scripts.conf] &amp;lt;br/&amp;gt;&lt;br /&gt;
It loads [https://github.com/themanaworld/tmwa-server-data/blob/master/world/map/npc/_import.txt (tmwa-server-data/)world/map/npc/_import.txt] which imports all NPC scripts wich are stored under the respective map name folders, usually under NPC name.&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
== Open a chest and get reward ==&lt;br /&gt;
An example is given by a quest to get a key for a chest (in fact 3 keys):&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:850px;&amp;quot; border=0 cellspacing=&amp;quot;10&amp;quot; &lt;br /&gt;
|-valign=&amp;quot;Top&amp;quot; &lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
// A treasure chest. You need three keys to open it.&lt;br /&gt;
//&lt;br /&gt;
// TMW_Quest (document variable here)&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
002-4.gat,93,37,0|script|Treasure|111,{&lt;br /&gt;
&lt;br /&gt;
    if (TMW_Quest &amp;gt;= 38) goto L_Finished;&lt;br /&gt;
&lt;br /&gt;
    mes &amp;quot;There is a chest here.&amp;quot;;&lt;br /&gt;
    mes &amp;quot;Do you want to try to open it?&amp;quot;;&lt;br /&gt;
    next;&lt;br /&gt;
    menu&lt;br /&gt;
        &amp;quot;Yes.&amp;quot;, L_Yes,&lt;br /&gt;
        &amp;quot;No.&amp;quot;, -;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Yes:&lt;br /&gt;
    if(countitem(&amp;quot;TreasureKey&amp;quot;) &amp;lt; 3) goto L_Not_Enough;&lt;br /&gt;
    getinventorylist;&lt;br /&gt;
    if (@inventorylist_count == 100 &amp;amp;&amp;amp; countitem(&amp;quot;TreasureKey&amp;quot;) &amp;gt; 3) goto L_TooMany;&lt;br /&gt;
    mes &amp;quot;You opened the chest and found a short bow!&amp;quot;;&lt;br /&gt;
    delitem &amp;quot;TreasureKey&amp;quot;, 3;&lt;br /&gt;
    getitem &amp;quot;ShortBow&amp;quot;, 1;&lt;br /&gt;
    set TMW_Quest, 38;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Not_Enough:&lt;br /&gt;
    mes &amp;quot;It seems that you do not have the right key for this chest yet...&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_Finished:&lt;br /&gt;
    mes &amp;quot;You have already opened this chest.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
&lt;br /&gt;
L_TooMany:&lt;br /&gt;
    mes &amp;quot;You do not have enough room to loot this chest. Maybe you should try again later.&amp;quot;;&lt;br /&gt;
    close;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
This script starts with describing the NPC (the chest, NPC sprite 111) and its location (map 002-4 X=93, Y=37, in tiles from top left of the map). Then follows what happens on activation:&lt;br /&gt;
First, the variable &#039;&#039;&amp;quot;TMW_Quest&amp;quot;&#039;&#039; is checked to know if the player already accomplished the quest &amp;lt;span style=&amp;quot;color:OrangeRed&amp;quot;&amp;gt;&#039;&#039;&#039;(the variable should be documented)&#039;&#039;&#039;&amp;lt;/span&amp;gt;, If he has the script continues at label &#039;&#039;L_Finished&#039;&#039;, the player is reminded fe alredy accomplished the task and script finishes, if not the scrip continues. A message is shown (mes), then an option dialog (menu) is displayed with two possible answers : &amp;quot;Yes.&amp;quot; or &amp;quot;No.&amp;quot;. If the player answers &amp;quot;No.&amp;quot; the script stops (close;); if he answers &amp;quot;Yes.&amp;quot; the script continues at label &#039;&#039;L_Yes&#039;&#039;. Now player is checked to know if he has at least 3 keys, if not script branches to label &#039;&#039;L_Not_Enough&#039;&#039; tells the player he  &amp;quot;has not the right key&amp;quot; and script closes. If he has keys enough, his inventory list is retrieved by the built-in function &amp;quot;getinventorylist&amp;quot; and it&#039;s content is checked to know if the player will have room enough to store the reward after the 3 keys use. If not, script goes to label &#039;&#039;L_TooMany&#039;&#039; and script close after a warning message, If yes 3 keys are deleted in player&#039;s inventory,  he gets the reward: a Short Bow and the variable TMW_Quest is set to 38.&lt;br /&gt;
&lt;br /&gt;
For more examples of the current system, check out the current scripts in use by the server. Beware though, this could affect your enjoyment of the game as it does spoil some of the mystery. Here&#039;s a link to git so you can view them in your browser:&lt;br /&gt;
&lt;br /&gt;
https://github.com/themanaworld/tmwa-server-data/tree/master/world/map/npc&lt;br /&gt;
&lt;br /&gt;
Note that anything said by an NPC should be put in double quotes (&amp;quot;). You can do that like this: &amp;quot;&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039;Hello!&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039; she said.&amp;quot;&lt;br /&gt;
=References=&lt;br /&gt;
* [[EAthena Scripting Basics]]&lt;br /&gt;
* [[EAthena Scripting Reference]]&lt;br /&gt;
* [http://forums.themanaworld.org/viewtopic.php?f=13&amp;amp;t=13653 script cleanup/scripting standards proposal]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Projects_and_Teams&amp;diff=25128</id>
		<title>Development:Projects and Teams</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Projects_and_Teams&amp;diff=25128"/>
		<updated>2012-12-22T19:01:31Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Add reserved NPC ID to the entry about Hetchel.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;font-size:250%&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&#039;&#039;&#039;Projects&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;Here is a list of the current projects under development. You can see the list of developers [[Developers|here]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Project&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Team&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Description&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Monster Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Item Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Map Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | New NPCs&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Status&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Trade City [[Argaes]]&#039;&#039;&#039;&lt;br /&gt;
| [[User:V0id|V0id]]&lt;br /&gt;
| Assassin Guild quest (Miriam follow-up) in Trade City&lt;br /&gt;
| &lt;br /&gt;
| Assassin Set&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Scenario writing.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;New Desert Area ([[Tonori]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:Yubaba|Yubaba]]&lt;br /&gt;
| Creating Desert maps, area further from Tulimshar and new quests.&lt;br /&gt;
| Snake Lord, Desert Monsters&lt;br /&gt;
| Snake Skin Armour, Desert bow&lt;br /&gt;
| &lt;br /&gt;
| Desert/Egyptian NPCs&lt;br /&gt;
| Mapping and quest writing in progress&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;East [[Argaes]]&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Tux|tux9th]]&lt;br /&gt;
| Extension to the east, including farmlands, port-city, waterfall area&lt;br /&gt;
| Farmmobs&lt;br /&gt;
| TBA&lt;br /&gt;
| 057 - 067&lt;br /&gt;
| Farm NPCs&lt;br /&gt;
| Mapping in progress&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Orum and Waric Continuation&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Tux|tux9th]], mrgrey&lt;br /&gt;
| Continuation of the Orum and Waric quest.&lt;br /&gt;
| Evil Woodland monsters&lt;br /&gt;
| Rose hat, magical flowers&lt;br /&gt;
| 055, 056&lt;br /&gt;
| &lt;br /&gt;
| Scripting in progress, graphics for magical flowers needed&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Barbarian Village ([[Kaizei]]).&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Tux|tux9th]]&lt;br /&gt;
| A village of barbarians yet to be named.&lt;br /&gt;
| TBA&lt;br /&gt;
| TBA&lt;br /&gt;
| 049, 050, 053, 054&lt;br /&gt;
| Barbarian NPCs&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Lumber Camp ([[Argaes]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:o11c|o11c]]&lt;br /&gt;
| Southern [[Argaes]] expansion.  Quests include: Help the Lumberjacks/Save the Dell (a choice); the Naturalist&#039;s Studies; ?&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 035-039&lt;br /&gt;
|&lt;br /&gt;
| on hold, graphics missing?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[[Thermin]] ([[Kaizei]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Alastrim|Alastrim]]&lt;br /&gt;
| [[Kaizei]] area town.  Once a large town that mined the firerock stones beneath the town, it was devastated by a poison gas leak.  During the crisis to survive, they collaborated on several new technologies to both defend the town from the rampaging Yeti surrounding the town and to find ways to get back to using the mine, despite the poison gas problem.&lt;br /&gt;
|&lt;br /&gt;
| GasMask, Monocle&lt;br /&gt;
|&lt;br /&gt;
| Gasmask steam punk NPC, clockwork armor NPC, barbarian NPCs, [http://forums.themanaworld.org/viewtopic.php?f=8&amp;amp;t=12839 generic pose NPCs]&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[[Thermin]] ([[Kaizei]]) Poisonous Mine&#039;&#039;&#039;&lt;br /&gt;
| [[User:Alastrim|Alastrim]]&lt;br /&gt;
| Poison gas mine.  A constant moving adventure with puzzles and traps to solve and disarm along the way.  Suggestions: Barriers of some type, puzzle mini-games (input code words chosen at random, arrange items, push buttons in a certain order, kill a certain monster on the map), a poison map flag, the use of event monster scripting instead of _mobs.txt spawning.&lt;br /&gt;
| Ice Skull, Purple Slime, Acid Goblin, Longjohn, Serqet, Fire Lizard&lt;br /&gt;
| Firerock,&lt;br /&gt;
| 043&lt;br /&gt;
|&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Crypt&#039;&#039;&#039;&lt;br /&gt;
| Skipy,[[User:Yubaba|Yubaba]]&lt;br /&gt;
| Reaper boss quest&lt;br /&gt;
| Reaper, scythe, the lost, ball lightning, vampire bat&lt;br /&gt;
| Death&#039;s Hand, Reaper blade&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| tileset incomplete, art developer inactive.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Ancient Amulets&#039;&#039;&#039;&lt;br /&gt;
| [[User:Alastrim|Alastrim]]&lt;br /&gt;
| Five quests leading to different Four-Leaf Amulets of different strengh.&lt;br /&gt;
| Shadow Elemental (1st Quest)&lt;br /&gt;
| Four-Leaf Amulets&lt;br /&gt;
| 024-3 to 024-8&lt;br /&gt;
| Explorer&lt;br /&gt;
| on hold, developer inactive&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Kageville&#039;&#039;&#039;&lt;br /&gt;
| [[User:Kage|Kage]]&lt;br /&gt;
| TBA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 040&lt;br /&gt;
|&lt;br /&gt;
| on hold, developer inactive&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Hetchel the silk weaver [373] ([[Tulimshar]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:bh28|bh28]]&lt;br /&gt;
| Lora Tay says she can sew Silk Robes provided you give her some silk sheets.and that Hetchel in Tulimshar can weave them for you.&lt;br /&gt;
| &lt;br /&gt;
| Silk Sheet [881], dyed Silk Sheets [2250 to 2259]&lt;br /&gt;
| 021-1&lt;br /&gt;
| Hetchel (373)&lt;br /&gt;
| Lora Tay script mod, 021-2 : add weaver workshop&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:250%&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&#039;&#039;&#039;Teams&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;Here is a list of all the different developer teams. You can see the list of developers [[Developers|here]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Name&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Member(s)&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Role&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;The Mana World - Athena Leader&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]]&lt;br /&gt;
| Coordinates tmwA.  Network and delegate tasks.  Increase participation.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Content Lead&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]]&lt;br /&gt;
| Coordinates tmwA General Content (non-sound, non-art).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Source Lead&#039;&#039;&#039;&lt;br /&gt;
| [[User:o11c|o11c]]&lt;br /&gt;
| Adjusts and coordinates Athena source code.  Meets content team requests for source code adjustments to further content.  Research and development of Athena source code and scripting conventions.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Sound Lead&#039;&#039;&#039;&lt;br /&gt;
| [[User:Yubaba|Yubaba]]&lt;br /&gt;
| Determines if sound on the forums is ready for the game.  Encourages people to get involved in sound and encourage players to try their hand at sound.  Attempts to meet the [REQ]s of content developers as well as creates any sound that may seem to add to the project, from monsters to maps to battle and beyond.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pixel Artists&#039;&#039;&#039;&lt;br /&gt;
| Nami, [[User:Salmondine|Salmondine]]&lt;br /&gt;
| Determines if art is ready for the game.  Helps categorize art topics.  Encourage artists contribute to the game and encourage players to try their hand at art.  Understand content priorities and attempt to steer art to meeting art deadlines.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Mapping Lead&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
| Reviews maps for the game.  Check for proper use of black border, collision tiles, and application of tiles onto the correct layers they belong on.  Fix mapping errors.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Projects_and_Teams&amp;diff=25104</id>
		<title>Development:Projects and Teams</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Projects_and_Teams&amp;diff=25104"/>
		<updated>2012-12-18T09:09:32Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Remove Illia from the list since it has been released.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;font-size:250%&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&#039;&#039;&#039;Projects&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;Here is a list of the current projects under development. You can see the list of developers [[Developers|here]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Project&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Team&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Description&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Monster Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Item Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Map Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | New NPCs&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Status&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Trade City [[Argaes]]&#039;&#039;&#039;&lt;br /&gt;
| [[User:V0id|V0id]]&lt;br /&gt;
| Assassin Guild quest (Miriam follow-up) in Trade City&lt;br /&gt;
| &lt;br /&gt;
| Assassin Set&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Scenario writing.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;New Desert Area&#039;&#039;&#039;&lt;br /&gt;
| [[User:Yubaba|Yubaba]]&lt;br /&gt;
| Creating Desert maps, area further from Tulimshar and new quests.&lt;br /&gt;
| Snake Lord, Desert Monsters&lt;br /&gt;
| Snake Skin Armour, Desert bow&lt;br /&gt;
| &lt;br /&gt;
| Desert/Egyptian NPCs&lt;br /&gt;
| Mapping and quest writing in progress&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;East [[Argaes]]&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Tux|tux9th]]&lt;br /&gt;
| Extension to the east, including farmlands, port-city, waterfall area&lt;br /&gt;
| Farmmobs&lt;br /&gt;
| TBA&lt;br /&gt;
| 057 - 067&lt;br /&gt;
| Farm NPCs&lt;br /&gt;
| Mapping in progress&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Orum and Waric Continuation&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Tux|tux9th]], mrgrey&lt;br /&gt;
| Continuation of the Orum and Waric quest.&lt;br /&gt;
| Evil Woodland monsters&lt;br /&gt;
| Rose hat, magical flowers&lt;br /&gt;
| 055, 056&lt;br /&gt;
| &lt;br /&gt;
| Scripting in progress, graphics for magical flowers needed&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Barbarian Village&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Tux|tux9th]]&lt;br /&gt;
| A village of barbarians yet to be named.&lt;br /&gt;
| TBA&lt;br /&gt;
| TBA&lt;br /&gt;
| 049, 050, 053, 054&lt;br /&gt;
| Barbarian NPCs&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Lumber Camp ([[Argaes]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:o11c|o11c]]&lt;br /&gt;
| Southern [[Argaes]] expansion.  Quests include: Help the Lumberjacks/Save the Dell (a choice); the Naturalist&#039;s Studies; ?&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 035-039&lt;br /&gt;
|&lt;br /&gt;
| on hold, graphics missing?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[[Thermin]] ([[Kaizei]])&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]], [[User:Alastrim|Alastrim]]&lt;br /&gt;
| [[Kaizei]] area town.  Once a large town that mined the firerock stones beneath the town, it was devastated by a poison gas leak.  During the crisis to survive, they collaborated on several new technologies to both defend the town from the rampaging Yeti surrounding the town and to find ways to get back to using the mine, despite the poison gas problem.&lt;br /&gt;
|&lt;br /&gt;
| GasMask, Monocle&lt;br /&gt;
|&lt;br /&gt;
| Gasmask steam punk NPC, clockwork armor NPC, barbarian NPCs, [http://forums.themanaworld.org/viewtopic.php?f=8&amp;amp;t=12839 generic pose NPCs]&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[[Thermin]] ([[Kaizei]]) Poisonous Mine&#039;&#039;&#039;&lt;br /&gt;
| [[User:Alastrim|Alastrim]]&lt;br /&gt;
| Poison gas mine.  A constant moving adventure with puzzles and traps to solve and disarm along the way.  Suggestions: Barriers of some type, puzzle mini-games (input code words chosen at random, arrange items, push buttons in a certain order, kill a certain monster on the map), a poison map flag, the use of event monster scripting instead of _mobs.txt spawning.&lt;br /&gt;
| Ice Skull, Purple Slime, Acid Goblin, Longjohn, Serqet, Fire Lizard&lt;br /&gt;
| Firerock,&lt;br /&gt;
| 043&lt;br /&gt;
|&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Crypt&#039;&#039;&#039;&lt;br /&gt;
| Skipy,[[User:Yubaba|Yubaba]]&lt;br /&gt;
| Reaper boss quest&lt;br /&gt;
| Reaper, scythe, the lost, ball lightning, vampire bat&lt;br /&gt;
| Death&#039;s Hand, Reaper blade&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| tileset incomplete, art developer inactive.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Ancient Amulets&#039;&#039;&#039;&lt;br /&gt;
| [[User:Alastrim|Alastrim]]&lt;br /&gt;
| Five quests leading to different Four-Leaf Amulets of different strengh.&lt;br /&gt;
| Shadow Elemental (1st Quest)&lt;br /&gt;
| Four-Leaf Amulets&lt;br /&gt;
| 024-3 to 024-8&lt;br /&gt;
| Explorer&lt;br /&gt;
| on hold, developer inactive&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Kageville&#039;&#039;&#039;&lt;br /&gt;
| [[User:Kage|Kage]]&lt;br /&gt;
| TBA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 040&lt;br /&gt;
|&lt;br /&gt;
| on hold, developer inactive&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:250%&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&#039;&#039;&#039;Teams&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;Here is a list of all the different developer teams. You can see the list of developers [[Developers|here]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Name&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Member(s)&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Role&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;The Mana World - Athena Leader&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]]&lt;br /&gt;
| Coordinates tmwA.  Network and delegate tasks.  Increase participation.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Content Lead&#039;&#039;&#039;&lt;br /&gt;
| [[User:Jenalya|Jenalya]]&lt;br /&gt;
| Coordinates tmwA General Content (non-sound, non-art).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Source Lead&#039;&#039;&#039;&lt;br /&gt;
| [[User:o11c|o11c]]&lt;br /&gt;
| Adjusts and coordinates Athena source code.  Meets content team requests for source code adjustments to further content.  Research and development of Athena source code and scripting conventions.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Sound Lead&#039;&#039;&#039;&lt;br /&gt;
| [[User:Yubaba|Yubaba]]&lt;br /&gt;
| Determines if sound on the forums is ready for the game.  Encourages people to get involved in sound and encourage players to try their hand at sound.  Attempts to meet the [REQ]s of content developers as well as creates any sound that may seem to add to the project, from monsters to maps to battle and beyond.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pixel Artists&#039;&#039;&#039;&lt;br /&gt;
| Nami, [[User:Salmondine|Salmondine]]&lt;br /&gt;
| Determines if art is ready for the game.  Helps categorize art topics.  Encourage artists contribute to the game and encourage players to try their hand at art.  Understand content priorities and attempt to steer art to meeting art deadlines.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Mapping Lead&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
| Reviews maps for the game.  Check for proper use of black border, collision tiles, and application of tiles onto the correct layers they belong on.  Fix mapping errors.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Reporting_Bugs&amp;diff=25057</id>
		<title>Reporting Bugs</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Reporting_Bugs&amp;diff=25057"/>
		<updated>2012-12-05T21:17:49Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Correct the repositories&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Check that your problem hasn&#039;t been reported already==&lt;br /&gt;
&lt;br /&gt;
The only supported client is the &#039;&#039;&#039;official client&#039;&#039;&#039;. If you have an issue which involve your client switch first to the official client and check if the problem persists before reporting.&lt;br /&gt;
&lt;br /&gt;
First use the &#039;&#039;&#039;Search&#039;&#039;&#039; feature on the forum to check if the issue you are experiencing was not posted before.: http://forums.themanaworld.org/search.php &lt;br /&gt;
&lt;br /&gt;
For server and content bugs, check the &#039;&#039;&#039;mantis&#039;&#039;&#039; Bug Tracker, maybe someone already posted same issue and it is being worked on: http://mantis.themanaworld.org/, and for bugs concerning the official client: http://bugs.manasource.org/&lt;br /&gt;
&lt;br /&gt;
Optionally, check the repositories on &#039;&#039;&#039;Github&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
*server-code: https://github.com/themanaworld/tmwa&lt;br /&gt;
&lt;br /&gt;
*server-data: https://github.com/themanaworld/tmwa-server-data&lt;br /&gt;
&lt;br /&gt;
*client-data: https://github.com/themanaworld/tmwa-client-data&lt;br /&gt;
&lt;br /&gt;
*client-code: https://github.com/mana&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Where to report?==&lt;br /&gt;
&lt;br /&gt;
===Forum===&lt;br /&gt;
If you are not sure that your problem is a bug or you are not sure that you can report it correctly, forum moderators, developers and players will help you or do it for you; report in: &lt;br /&gt;
&#039;&#039;Board index » Community » Player talk&#039;&#039;: http://forums.themanaworld.org/viewforum.php?f=12&lt;br /&gt;
&lt;br /&gt;
You have strong reasons to suspect the content, the server or the client; report in the appropriate forum:&lt;br /&gt;
&#039;&#039;Board index » Support&#039;&#039;: http://forums.themanaworld.org/viewforum.php?f=19&lt;br /&gt;
&lt;br /&gt;
be sure to read: &#039;&#039;Board index » Support » General support » Read Me First: How To Report Bugs&#039;&#039;:  http://forums.themanaworld.org/viewtopic.php?f=3&amp;amp;t=1178&lt;br /&gt;
&lt;br /&gt;
===IRC===&lt;br /&gt;
You are not sure that your problem is a bug:&lt;br /&gt;
IRC #support channel     : [http://irc.themanaworld.org#tmw-support irc.themanaworld.org#tmw-support]&lt;br /&gt;
&lt;br /&gt;
You are almost sure that your problem is a bug:&lt;br /&gt;
IRC #development channel : [http://irc.themanaworld.org#tmw-dev irc.themanaworld.org#tmw-dev]&lt;br /&gt;
&lt;br /&gt;
Your problem concerns the Manaplus Client:&lt;br /&gt;
IRC #ManaPlus channel: [http://irc.freenode.org#manaplus irc.freenode.org#manaplus]&lt;br /&gt;
&lt;br /&gt;
===Bug Tracker===&lt;br /&gt;
Bug tracker is a powerful tool, users need to be a bit aware of the way game works. Anonymous log-in is possible.&lt;br /&gt;
&lt;br /&gt;
*Content and server: Mantis: http://mantis.themanaworld.org/&lt;br /&gt;
&lt;br /&gt;
*Official Client: Manasource: http://bugs.manasource.org/&lt;br /&gt;
&lt;br /&gt;
*If you issue involves the Manaplus Client, report to http://bugs.evolonline.org/&lt;br /&gt;
&lt;br /&gt;
==How to report?==&lt;br /&gt;
&lt;br /&gt;
Here again the information that the developers need to solve the problem must be as complete and precise as possible.&lt;br /&gt;
&lt;br /&gt;
In Client issues, specify your system name, version and architecture, and client version. It is very good idea to include the name of your OS in the topic title, for example: Windows XP: Game is crashing when...&lt;br /&gt;
Be verbose, post backtrace, strace, content of tmw.log, versions of dependent software etc. Make sure that all [[Dependencies]] are installed and have correct versions.&lt;br /&gt;
&lt;br /&gt;
Respect the time of developers and helpers - use descriptive topic titles, subjects like &amp;quot;OMFG game isn&#039;t working&amp;quot;, &amp;quot;WTF HELP!&amp;quot;, &amp;quot;GOT PROBLEM!&amp;quot; are not acceptable, and usually indicates that the author is a person not to be treated seriously. Good topic title is eg.: Linux: Can&#039;t load map file - unknown error. Posts which contains rude remarks, foul language or are duplicated will be closed without any notice. &lt;br /&gt;
&lt;br /&gt;
Note that in order to fix a bug, a programmer needs an exact way to reproduce the circumstances which lead to it:&lt;br /&gt;
&amp;quot;I had Item X and later I hadn&#039;t had it anymore&amp;quot; isn&#039;t enough information to pinpoint an issue. On the other hand &amp;quot;when you do X and Y while W and Z, and then you take a towel our of storage, you always get an orange instead&amp;quot; would be a bug description a programmer can actually use.&lt;br /&gt;
&lt;br /&gt;
If you have a patch, post in Technical Development or Content Development:http://forums.themanaworld.org/viewforum.php?f=18 (Content and Server)  and http://forums.themanaworld.org/viewforum.php?f=19 for client.&lt;br /&gt;
&lt;br /&gt;
When you use a pastebin, make sure to check the longest possible expiration setting.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WIKI errors:&#039;&#039;&#039;&lt;br /&gt;
Errors on the &#039;&#039;&#039;wiki&#039;&#039;&#039; should be fixed by the one who notices them - that&#039;s the point of a wiki. When the documentation is wrong, you should make it correct.&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
&lt;br /&gt;
Before developers release game content onto the official server, they&#039;d like feedback from other developers and playtesters.&lt;br /&gt;
If you are interested in content testing watch the [[Testing Server]] page in this wiki.&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=De:Arkim%27s_Brother&amp;diff=24851</id>
		<title>De:Arkim&#039;s Brother</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=De:Arkim%27s_Brother&amp;diff=24851"/>
		<updated>2012-11-07T22:02:19Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Some spelling and grammar fixes.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{I18n}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:250%&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&#039;&#039;&#039;Arkim&#039;s Bruder&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Category_playerinfo}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;float: right&amp;quot;  border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
| {{Quest&lt;br /&gt;
| Image         = [[Image:NPCMirak.png]]&lt;br /&gt;
| Start         = 056-2, Miraks house (Woods)&lt;br /&gt;
| Level         = 25 (required)&lt;br /&gt;
| Redoable      = Einmal pro 24 h.&lt;br /&gt;
| Reward        = 20 mal Deine Daily Points in Gold und Erfahrung&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
| {{Quest_dev&lt;br /&gt;
| Scenario     = ZdlN, [[User:Tux|Tux9th]]&lt;br /&gt;
| Programmer   = [[User:Tux|Tux9th]]&lt;br /&gt;
| Contributors = -&lt;br /&gt;
| Maps         = [[User:Tux|Tux9th]]&lt;br /&gt;
| Tiles        =-&lt;br /&gt;
| NPCs         = Chef Chelios&lt;br /&gt;
| Items        =-&lt;br /&gt;
| Sound_fx     =-&lt;br /&gt;
| Music        =-&lt;br /&gt;
| Testers      = V0id, Zdln, Jenalya&lt;br /&gt;
}}  &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hintergrundgeschichte ==&lt;br /&gt;
&lt;br /&gt;
Arkim hat einen Bruder. Beide lebten lange zusammen im Hause ihrer Eltern.&lt;br /&gt;
Arkim, durchgeknallt wie er ist, nervte seinen Bruder immer, wenn er mal wieder in die Höhlen ging, mit seinen &amp;quot;Experimenten&amp;quot; an Fledermäusen. &lt;br /&gt;
Sein Bruder ist nach einiger Zeit vom Familienhaus in ein gekauftes Haus in den Wäldern gezogen, um sich vom Rest der Welt zu erholen. Er liebt es zu meditieren und lesen &#039;&#039;&#039;in RUHE&#039;&#039;&#039;!&lt;br /&gt;
Aber Du, lästige Person, kommst in seine Hütte und störst seine gerade gewonnene Freiheit.&lt;br /&gt;
Mirak bevorzugt es zu zahlen, um wieder so schnell wie möglich seine Ruhe zu haben. &lt;br /&gt;
Sei gewarnt! Übertreib es nicht, denn Mirak wird sehr leicht zornig (Sagt er über sich selbst). Außerdem hat er gelernt &amp;quot;Bei den Magiern in Tulimshar!&amp;quot;...&lt;br /&gt;
&lt;br /&gt;
== Ablauf ==&lt;br /&gt;
&lt;br /&gt;
Dieser Spoiler dient als Referenz. Du solltest es bevorzugen, Hinweise selbst herauszufinden wie in Rollenspielen üblich...&lt;br /&gt;
&lt;br /&gt;
=== Was zu machen ist: ===&lt;br /&gt;
&lt;br /&gt;
* Mirak&#039;s Hause befindet sich in den Wäldern nord-östlich. Eintreten und &#039;&#039;lese&#039;&#039; die Notizen&lt;br /&gt;
* Finde deinen Weg zu Mirak und sprich mit ihm. Erstmal wird er Dich ignorieren. Sprich ihn nochmal an und frag nach Gold. Schäm Dich!&lt;br /&gt;
&lt;br /&gt;
=== Hinweise ===&lt;br /&gt;
&lt;br /&gt;
* Warnung: Hast Du Mirak wütend gemacht, oder kommst ohne Energie ([[Daily Quests|Daily Points]]) , wirst Du die Welt der Untoten besuchen und 24 Stunden nicht zurück kommen können.&lt;br /&gt;
* Nachdem Mirak Dich bezahlt hat, kannst Du (24 Stunden) keine andere [[Daily Quests]] mehr machen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Belohnung:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* 20 mal Deine daily points in Exp&lt;br /&gt;
* 20 mal Deine daily points als GP&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Totale Kosten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Alle Deine Daily points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Quest]]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=24606</id>
		<title>Classic:TmwAthena Scripting Standards</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Standards&amp;diff=24606"/>
		<updated>2012-10-03T22:19:47Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: /* Indentation */  Update with results from forum discussion.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Status_outdated}}&lt;br /&gt;
{{Gaps|Needs to be updated with {{ForumThread|13653}} and {{ForumThread|13672}}, which are generally accepted but there might be more discussion}}&lt;br /&gt;
&lt;br /&gt;
This is an attempt to standardize the eAthena coding. Any suggestions are welcome to be posted on the discussion page before editing.&lt;br /&gt;
&lt;br /&gt;
== Indentation ==&lt;br /&gt;
Code is indented with four spaces. Code in the same block should have the same indentation. Labels have no indentation. Menu options are on their own lines and are indented further. When using an if-statement, there should be a line break after the condition and the conditional command should be indented further.&lt;br /&gt;
&lt;br /&gt;
== Code Blocks ==&lt;br /&gt;
* Code blocks should be separated from the others in a dinstinct way; the best way of doing it is to insert a blank line between code blocks. &lt;br /&gt;
&lt;br /&gt;
* Individual blocks should be together (i.e. without blank lines within them). &lt;br /&gt;
&lt;br /&gt;
* The opening brackets should be at the end of the parent line, not in a new line; the closing ones should be in a line of their own.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
An example is given by a quest to get a key for a chest:&lt;br /&gt;
&lt;br /&gt;
{| border=0&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// A treasure chest. You need three keys to open it.&lt;br /&gt;
new_5-1.gat,93,37,0     script  Treasure        111,{&lt;br /&gt;
	mes &amp;quot;Would you try to open it?&amp;quot;;&lt;br /&gt;
	next;&lt;br /&gt;
	menu&lt;br /&gt;
		&amp;quot;Yup&amp;quot;, L_Sure,&lt;br /&gt;
		&amp;quot;Nope&amp;quot;, close;&lt;br /&gt;
&lt;br /&gt;
L_Sure:&lt;br /&gt;
	if (countitem(537) &amp;lt; 3) goto L_WrongKey;&lt;br /&gt;
	delitem 537, 3;&lt;br /&gt;
	getitem 536, 1;&lt;br /&gt;
	mes &amp;quot;You opened it and found a short sword!&amp;quot;;&lt;br /&gt;
	close;&lt;br /&gt;
&lt;br /&gt;
L_WrongKey:&lt;br /&gt;
	mes &amp;quot;It seems that this is not the right key...&amp;quot;;&lt;br /&gt;
	close;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The above script starts with describing the NPC (the chest, NPC sprite 111) and its location. Then follows what happens on activation. A message is shown, then an option dialog is displayed. Then, when the player has less than 3 keys (item id 537), he is told not to have the right key. If he does, the player looses three keys and receives a short sword (item id 536). This quest in particular is questionable as the explanation given to the player doesn&#039;t match the implemented behavior (possibly to make the quest more challenging), but I&#039;ve put it here because it is short and shows one basic way to use the scripting system.&lt;br /&gt;
&lt;br /&gt;
For more examples of the current system, check out the current scripts in use by the server. Beware though, this could affect your enjoyment of the game as it does spoil some of the mystery. Here&#039;s a link to git so you can view them in your browser:&lt;br /&gt;
&lt;br /&gt;
http://gitorious.org/tmw-eathena-data/mainline/trees/master/npc&lt;br /&gt;
&lt;br /&gt;
Note that anything said by an NPC should be put in double quotes (&amp;quot;). You can do that like this: &amp;quot;&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039;Hello!&#039;&#039;&#039;\&amp;quot;&#039;&#039;&#039; she said.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Using as little variables as you need==&lt;br /&gt;
So there are some quests, which require lots of variables.&lt;br /&gt;
Think of monster oil quest, Oric and Warum quest etc.&lt;br /&gt;
&lt;br /&gt;
This can often be done by bitmasking: &lt;br /&gt;
One variable has 32 bits. So a variabe can store 2^32 different numbers: 4294967296&lt;br /&gt;
&lt;br /&gt;
But sometimes you only need numbers from 0 to 15, but more of these variables.&lt;br /&gt;
but numbers in range 0 to 15 can be stored in 4 bits ( 2^4 = 16 different numbers)&lt;br /&gt;
&lt;br /&gt;
Here is an example how to use bitmasking:&lt;br /&gt;
[[Media:Tester.txt]]&lt;br /&gt;
== Defining Map Objects ==&lt;br /&gt;
{|border=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; style=&amp;quot;float: right;&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot;| Key&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;TAB&amp;gt;&lt;br /&gt;
| a tab&lt;br /&gt;
|-&lt;br /&gt;
| text&lt;br /&gt;
| text that must be the same&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;text&#039;&#039;&lt;br /&gt;
| text to be changed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These sections describe how to define map objects.&lt;br /&gt;
&lt;br /&gt;
=== Warp Definitions ===&lt;br /&gt;
Warps are what move players between maps. They can also be used to move players around a single map, if needed. Warps are defined like this:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;map1&#039;&#039;,&#039;&#039;startX&#039;&#039;,&#039;&#039;startY&#039;&#039;&amp;lt;TAB&amp;gt;warp&amp;lt;TAB&amp;gt;&#039;&#039;name&#039;&#039;&amp;lt;TAB&amp;gt;&#039;&#039;width&#039;&#039;,&#039;&#039;height&#039;&#039;,&#039;&#039;map2&#039;&#039;,&#039;&#039;endX&#039;&#039;,&#039;&#039;endY&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Key:&lt;br /&gt;
;map1&lt;br /&gt;
:the starting map&lt;br /&gt;
;startX&lt;br /&gt;
:the x-coordinate of the starting warp tile&lt;br /&gt;
;startY&lt;br /&gt;
:the y-coordinate of the starting warp tile&lt;br /&gt;
;name&lt;br /&gt;
:the name of the warp, unused but must be defined&lt;br /&gt;
;width&lt;br /&gt;
:the width of the warp&lt;br /&gt;
;height&lt;br /&gt;
:the height of the warp&lt;br /&gt;
;map2&lt;br /&gt;
:the ending map&lt;br /&gt;
;endX&lt;br /&gt;
:the x-coordinate of the tile the player will end up on&lt;br /&gt;
;endY&lt;br /&gt;
:the y-coordinate of the tile the player will end up on&lt;br /&gt;
&lt;br /&gt;
Width and height are described in detail here: [[EAthena Scripting Standards/Warp Details|Warp Details]].&lt;br /&gt;
&lt;br /&gt;
=== Monster Definitions ===&lt;br /&gt;
Monsters are defined like this:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;map&#039;&#039;,&#039;&#039;x&#039;&#039;,&#039;&#039;y&#039;&#039;,&#039;&#039;width&#039;&#039;,&#039;&#039;height&#039;&#039;&amp;lt;TAB&amp;gt;monster&amp;lt;TAB&amp;gt;&#039;&#039;name&#039;&#039;&amp;lt;TAB&amp;gt;&#039;&#039;mobID&#039;&#039;,&#039;&#039;count&#039;&#039;,&#039;&#039;spawn1&#039;&#039;,&#039;&#039;spawn2&#039;&#039;,&#039;&#039;event&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
;map&lt;br /&gt;
:the map the monsters should appear on&lt;br /&gt;
;x&lt;br /&gt;
:the x-coordinate of the spawn tile&lt;br /&gt;
;y&lt;br /&gt;
:the y-coordinate of the spawn tile&lt;br /&gt;
;width&lt;br /&gt;
:the tile width of the spawn area&lt;br /&gt;
;height&lt;br /&gt;
:the tile height of the spawn area&lt;br /&gt;
;name&lt;br /&gt;
:the name of the mob, unused but must be defined&lt;br /&gt;
;mobID&lt;br /&gt;
:the mob identifier of the desired monster (in the monster db)&lt;br /&gt;
;count&lt;br /&gt;
:the number to spawn&lt;br /&gt;
;spawn1&lt;br /&gt;
:the minimum delay between successive spawns (per individual)&lt;br /&gt;
;spawn2&lt;br /&gt;
:the minimum delay between death and respawn (per individual)&lt;br /&gt;
;event&lt;br /&gt;
:the script event to fire upon death&lt;br /&gt;
&lt;br /&gt;
A detailed description of position and area can be found here: [[EAthena Scripting Standards/Mob Details|Mob Details]].&lt;br /&gt;
&lt;br /&gt;
=== NPC Definitions ===&lt;br /&gt;
&lt;br /&gt;
== Script Functions ==&lt;br /&gt;
&lt;br /&gt;
See [[EAthena Scripting Reference]]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Developers&amp;diff=24445</id>
		<title>Development:Developers</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Developers&amp;diff=24445"/>
		<updated>2012-09-08T20:36:28Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Update my role&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; width=&amp;quot;100%&amp;quot; style=&amp;quot;border-bottom: 2px solid #efdead&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; width=&amp;quot;150px&amp;quot; align=&amp;quot;left&amp;quot; | Username(s)&lt;br /&gt;
! style=&amp;quot;background:#edfead;&amp;quot; width=&amp;quot;100px&amp;quot; align=&amp;quot;left&amp;quot; | Name&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; width=&amp;quot;170px&amp;quot; align=&amp;quot;left&amp;quot; | tmwAthena roles&lt;br /&gt;
! style=&amp;quot;background:#edfead;&amp;quot; width=&amp;quot;170px&amp;quot; align=&amp;quot;left&amp;quot; | tmw-manaserv roles&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; width=&amp;quot;170px&amp;quot; align=&amp;quot;left&amp;quot; | Other roles&lt;br /&gt;
! style=&amp;quot;background:#edfead;&amp;quot; width=&amp;quot;150px&amp;quot; align=&amp;quot;left&amp;quot; | Location&lt;br /&gt;
&lt;br /&gt;
{{dev1| [[User:Alastrim|Alastrim]]               | - | {{Board|Scripting}} | - | - | Brasil }}&lt;br /&gt;
{{dev2| [[User:Argul|Argul (PjotrOrial) ]]       | Stefan Beller | {{Board|Scripting, Mapping, Programmer}} | - | - | Germany}}&lt;br /&gt;
{{dev1| [[User:Axltrozz|Axltrozz]]               | - | - | Tileset and Mapping | IRC Channel Operator | - }}&lt;br /&gt;
{{dev2| [[User:bcs|bcs]]                         | - | - | Pixel art | - | - }}&lt;br /&gt;
{{dev1| [[User:Bertram|Bertram]]                 | Yohann Ferreira | - | - | dev.themanaworld.org services administrator, IRC Channel Operator, Programmer | France}}&lt;br /&gt;
{{dev2| [[User:Black_Don|Black Don]]             | - | - | Pixel Artist | - | - }}&lt;br /&gt;
{{dev1| [[User:Blue112|BlueSoul]]                | - | - | Programmer | - | - }}&lt;br /&gt;
{{dev2| [[User:Cody_Martin|Cody]]                | Cody Martin | - | - | IRC Channel Operator, Programmer | - }}&lt;br /&gt;
{{dev1| [[User:Crush|Crush]]                     | Philipp Sehmisch | Advisor | Programmer | Forum Moderator | Germany}}&lt;br /&gt;
{{dev3| [[User:Dark_Mage|Dark Mage]]             | - | Scripting, XML | - | Translations (Russian) | Russia}}&lt;br /&gt;
{{dev2| [[User:Rodrigo|Pluto]]                   | Arian Asimi | Pixel artist | Pixel artist | Translations (Shqip) | Kosova}}&lt;br /&gt;
{{dev1| [[User:Poison_ivy|Enchilado]]            | W E Sayers | {{Board|Art Director, Scripting}} | - | - | Australia}}&lt;br /&gt;
{{dev2| [[User:Feline Monstrocity|Feline Monstrocity]]| - | - | Soundscape | - | Wales, UK }}&lt;br /&gt;
{{dev1| [[User:Freeyorp|Freeyorp]]               | - | - | Balance, Mechanics and Systems Lead | server.themanaworld.org and testing.themanaworld.org Services Administrator, IRC Services Administrator, Forums Administrator, Programmer | NZ}}&lt;br /&gt;
{{dev2| [[User:Hal9000|Hal9000]]                 | Francesco Miglietta | Pixel Artist | - | - | Italy}}&lt;br /&gt;
{{dev1| [[User:Irukard|Irukard]]                 | Krzysztof Daszuta | - | Pixel Artist | Translations (Polish), Facebook Community Page Maintainer | Poland}}&lt;br /&gt;
{{dev2| [[User:Ivan|Ivan]]                       | Ivan Morve | - | Pixel Artist | - | - }}&lt;br /&gt;
{{dev1| [[User:Jaxad0127|Jaxad0127]]             | Jared Adams | - | - | server.themanaworld.org and testing.themanaworld.org Services Administrator, Website Services Administrator, IRC Channel Administrator, Forums Administrator, Wiki Sysop and Bureaucrat, Mantis Administrator, Programmer | USA}}&lt;br /&gt;
{{dev2| [[User:John_Pyle|John P]]                | John Pyle | - | Story Lead | - | - }} &lt;br /&gt;
{{dev1| [[User:Jenalya|Jenalya]]                 | - | {{Board|Content Lead, Scripting}} | - | - | Germany}}&lt;br /&gt;
{{dev2| [[User:Kage|Kage]]                       | Chuck Miller | {{Board|Scripting, Programmer}} | - | IRC Channel Operator, Forums Global Moderator, Programmer | USA}}&lt;br /&gt;
{{dev1| [[User:krazyjakee|krazyjakee]]           | - | - | Soundscape | - | - }}&lt;br /&gt;
{{dev2| [[User:Lien|Lien]]                       | - | Pixel artist, Scripting | - | - | France}}&lt;br /&gt;
{{dev1| [[User:Lizandra|Lizandra]]               | Filipa Serra e Silva | Pixel artist | - | - | Portugal}}&lt;br /&gt;
{{dev2| [[User:Hackgrid|Matt]]                   | - | - | - | Blabbering idiot | Germany}}&lt;br /&gt;
{{dev1| [[User:Meway|Meway]]                     | - | Pixel artist | Pixel Artist | - | USA}}&lt;br /&gt;
{{dev2| [[User:Nmaligec|Nmaligec]]               | - | Scripting, XML | - | - | USA}}&lt;br /&gt;
{{dev1| [[User:o11c|o11c]]                       | Ben Longbons | {{Board|Source Lead}} | - | - | Western USA}}&lt;br /&gt;
{{dev2| [[User:Platyna|Platyna]]                 | Zuzanna K. Filutowska | - | - | Server and Network Administrator, IRC Network Administrator, Forums Administrator | Poland}}&lt;br /&gt;
{{dev1| [[User:Rotonen|Rotonen]]                 | Joni Orponen | Advisor | Project Lead | IRC Channel Administrator, Forums Administrator | Finland}}&lt;br /&gt;
{{dev2| [[User:Salmondine|Salmondine]]           | Mark Dunbar | Pixel artist | - | - | USA}}&lt;br /&gt;
{{dev1| [[User:Saturn|Saturn]]                   | - | - | Soundscape Lead | - | - }}&lt;br /&gt;
{{dev2| [[User:Skipy|Skipy]]                     | - | {{Board|Pixel artist}} | - | - | USA}}&lt;br /&gt;
{{dev1| [[User:Wombat|Wombat]]                   | - | {{Board|Leader}} | - | IRC Channel Operator, Forums Global Moderator, Mantis Administrator | USA}}&lt;br /&gt;
{{dev2| [[User:Yubaba|Yubaba]]                     | - | {{Board|Sound Lead}} | - | - | Canada}}&lt;br /&gt;
|}&lt;br /&gt;
[[Category:reference]]&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* [[Projects and Teams]]&lt;br /&gt;
* [[Developer Archive]]&lt;br /&gt;
* [[Contributors]]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Projects_and_Teams&amp;diff=24444</id>
		<title>Development:Projects and Teams</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Projects_and_Teams&amp;diff=24444"/>
		<updated>2012-09-08T20:28:32Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Update &amp;#039;Teams&amp;#039; section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;font-size:250%&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&#039;&#039;&#039;Projects&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;Here is a list of the current projects under development. You can see the list of developers [[Developers|here]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Project&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Team&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Description&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Monster Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Item Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Map Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | New NPCs&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Status&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Farmlands&#039;&#039;&#039;&lt;br /&gt;
| Jenalya, tux9th&lt;br /&gt;
| Creating Farmlands north of Woodland Hills&lt;br /&gt;
| Farmmobs&lt;br /&gt;
| TBA&lt;br /&gt;
| 057 - 067&lt;br /&gt;
| &lt;br /&gt;
| Mapping in progress&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Illia&#039;&#039;&#039;&lt;br /&gt;
| V0id&lt;br /&gt;
| Illia sisters dungeon-like quest&lt;br /&gt;
| IDs 1098 to 1103&lt;br /&gt;
| IDs 871 to 875&lt;br /&gt;
| 051, 052&lt;br /&gt;
| IDs 367 to 371&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Orum and Waric Continuation&#039;&#039;&#039;&lt;br /&gt;
| Jenalya, tux9th, mrgrey&lt;br /&gt;
| Continuation of the Orum and Waric quest.&lt;br /&gt;
| Evil Woodland monsters&lt;br /&gt;
| Rose hat, magical flowers&lt;br /&gt;
| 055, 056&lt;br /&gt;
| &lt;br /&gt;
| Scripting in progress, graphics for magical flowers needed&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Barbarian Village&#039;&#039;&#039;&lt;br /&gt;
| Jenalya, tux9th&lt;br /&gt;
| A village of barbarians yet to be named.&lt;br /&gt;
| TBA&lt;br /&gt;
| TBA&lt;br /&gt;
| 049, 050, 053, 054&lt;br /&gt;
| Barbarian NPCs&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Lumber Camp&#039;&#039;&#039;&lt;br /&gt;
| O11c&lt;br /&gt;
| Southern Argaes expansion.  Quests include: Help the Lumberjacks/Save the Dell (a choice); the Naturalist&#039;s Studies; ?&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 035-039&lt;br /&gt;
|&lt;br /&gt;
| on hold, graphics missing?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Thermin&#039;&#039;&#039;&lt;br /&gt;
| Jenalya, Alastrim&lt;br /&gt;
| Kaizei area town.  Once a large town that mined the firerock stones beneath the town, it was devastated by a poison gas leak.  During the crisis to survive, they collaborated on several new technologies to both defend the town from the rampaging Yeti surrounding the town and to find ways to get back to using the mine, despite the poison gas problem.&lt;br /&gt;
|&lt;br /&gt;
| GasMask, Monocle&lt;br /&gt;
|&lt;br /&gt;
| Gasmask steam punk NPC, clockwork armor NPC, barbarian NPCs, [http://forums.themanaworld.org/viewtopic.php?f=8&amp;amp;t=12839 generic pose NPCs]&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Thermin Poisonous Mine&#039;&#039;&#039;&lt;br /&gt;
| Alastrim&lt;br /&gt;
| Poison gas mine.  A constant moving adventure with puzzles and traps to solve and disarm along the way.  Suggestions: Barriers of some type, puzzle mini-games (input code words chosen at random, arrange items, push buttons in a certain order, kill a certain monster on the map), a poison map flag, the use of event monster scripting instead of _mobs.txt spawning.&lt;br /&gt;
| Ice Skull, Purple Slime, Acid Goblin, Longjohn, Serqet, Fire Lizard&lt;br /&gt;
| Firerock,&lt;br /&gt;
| 043&lt;br /&gt;
|&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Crypt&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
| Reaper boss quest&lt;br /&gt;
| Reaper, scythe, the lost, ball lightning, vampire bat&lt;br /&gt;
| Death&#039;s Hand, Reaper blade&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| tileset incomplete, developer inactive&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Ancient Amulets&#039;&#039;&#039;&lt;br /&gt;
| Alastrim&lt;br /&gt;
| Five quests leading to different Four-Leaf Amulets of different strengh.&lt;br /&gt;
| Shadow Elemental (1st Quest)&lt;br /&gt;
| Four-Leaf Amulets&lt;br /&gt;
| 024-3 to 024-8&lt;br /&gt;
| Explorer&lt;br /&gt;
| on hold, developer inactive&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Kageville&#039;&#039;&#039;&lt;br /&gt;
| Kage&lt;br /&gt;
| TBA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 040&lt;br /&gt;
|&lt;br /&gt;
| on hold, developer inactive&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:250%&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&#039;&#039;&#039;Teams&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;Here is a list of all the different developer teams. You can see the list of developers [[Developers|here]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Name&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Member(s)&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Role&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;The Mana World - Athena Leader&#039;&#039;&#039;&lt;br /&gt;
| Jenalya&lt;br /&gt;
| Coordinates tmwA.  Network and delegate tasks.  Increase participation.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Content Lead&#039;&#039;&#039;&lt;br /&gt;
| Jenalya&lt;br /&gt;
| Coordinates tmwA General Content (non-sound, non-art).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Source Lead&#039;&#039;&#039;&lt;br /&gt;
| o11c&lt;br /&gt;
| Adjusts and coordinates Athena source code.  Meets content team requests for source code adjustments to further content.  Research and development of Athena source code and scripting conventions.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Sound Lead&#039;&#039;&#039;&lt;br /&gt;
| Yubaba&lt;br /&gt;
| Determines if sound on the forums is ready for the game.  Encourages people to get involved in sound and encourage players to try their hand at sound.  Attempts to meet the [REQ]s of content developers as well as creates any sound that may seem to add to the project, from monsters to maps to battle and beyond.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pixel Artists&#039;&#039;&#039;&lt;br /&gt;
| Nami, Salmondine&lt;br /&gt;
| Determines if art is ready for the game.  Helps categorize art topics.  Encourage artists contribute to the game and encourage players to try their hand at art.  Understand content priorities and attempt to steer art to meeting art deadlines.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Mapping Lead&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
| Reviews maps for the game.  Check for proper use of black border, collision tiles, and application of tiles onto the correct layers they belong on.  Fix mapping errors.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Projects_and_Teams&amp;diff=24443</id>
		<title>Development:Projects and Teams</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Projects_and_Teams&amp;diff=24443"/>
		<updated>2012-09-08T20:16:20Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Add new column &amp;#039;Status&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;font-size:250%&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&#039;&#039;&#039;Projects&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;Here is a list of the current projects under development. You can see the list of developers [[Developers|here]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Project&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Team&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Description&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Monster Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Item Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Map Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | New NPCs&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Status&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Farmlands&#039;&#039;&#039;&lt;br /&gt;
| Jenalya, tux9th&lt;br /&gt;
| Creating Farmlands north of Woodland Hills&lt;br /&gt;
| Farmmobs&lt;br /&gt;
| TBA&lt;br /&gt;
| 057 - 067&lt;br /&gt;
| &lt;br /&gt;
| Mapping in progress&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Illia&#039;&#039;&#039;&lt;br /&gt;
| V0id&lt;br /&gt;
| Illia sisters dungeon-like quest&lt;br /&gt;
| IDs 1098 to 1103&lt;br /&gt;
| IDs 871 to 875&lt;br /&gt;
| 051, 052&lt;br /&gt;
| IDs 367 to 371&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Orum and Waric Continuation&#039;&#039;&#039;&lt;br /&gt;
| Jenalya, tux9th, mrgrey&lt;br /&gt;
| Continuation of the Orum and Waric quest.&lt;br /&gt;
| Evil Woodland monsters&lt;br /&gt;
| Rose hat, magical flowers&lt;br /&gt;
| 055, 056&lt;br /&gt;
| &lt;br /&gt;
| Scripting in progress, graphics for magical flowers needed&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Barbarian Village&#039;&#039;&#039;&lt;br /&gt;
| Jenalya, tux9th&lt;br /&gt;
| A village of barbarians yet to be named.&lt;br /&gt;
| TBA&lt;br /&gt;
| TBA&lt;br /&gt;
| 049, 050, 053, 054&lt;br /&gt;
| Barbarian NPCs&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Lumber Camp&#039;&#039;&#039;&lt;br /&gt;
| O11c&lt;br /&gt;
| Southern Argaes expansion.  Quests include: Help the Lumberjacks/Save the Dell (a choice); the Naturalist&#039;s Studies; ?&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 035-039&lt;br /&gt;
|&lt;br /&gt;
| on hold, graphics missing?&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Thermin&#039;&#039;&#039;&lt;br /&gt;
| Jenalya, Alastrim&lt;br /&gt;
| Kaizei area town.  Once a large town that mined the firerock stones beneath the town, it was devastated by a poison gas leak.  During the crisis to survive, they collaborated on several new technologies to both defend the town from the rampaging Yeti surrounding the town and to find ways to get back to using the mine, despite the poison gas problem.&lt;br /&gt;
|&lt;br /&gt;
| GasMask, Monocle&lt;br /&gt;
|&lt;br /&gt;
| Gasmask steam punk NPC, clockwork armor NPC, barbarian NPCs, [http://forums.themanaworld.org/viewtopic.php?f=8&amp;amp;t=12839 generic pose NPCs]&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Thermin Poisonous Mine&#039;&#039;&#039;&lt;br /&gt;
| Alastrim&lt;br /&gt;
| Poison gas mine.  A constant moving adventure with puzzles and traps to solve and disarm along the way.  Suggestions: Barriers of some type, puzzle mini-games (input code words chosen at random, arrange items, push buttons in a certain order, kill a certain monster on the map), a poison map flag, the use of event monster scripting instead of _mobs.txt spawning.&lt;br /&gt;
| Ice Skull, Purple Slime, Acid Goblin, Longjohn, Serqet, Fire Lizard&lt;br /&gt;
| Firerock,&lt;br /&gt;
| 043&lt;br /&gt;
|&lt;br /&gt;
| tilesets missing&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Crypt&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
| Reaper boss quest&lt;br /&gt;
| Reaper, scythe, the lost, ball lightning, vampire bat&lt;br /&gt;
| Death&#039;s Hand, Reaper blade&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| tileset incomplete, developer inactive&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Ancient Amulets&#039;&#039;&#039;&lt;br /&gt;
| Alastrim&lt;br /&gt;
| Five quests leading to different Four-Leaf Amulets of different strengh.&lt;br /&gt;
| Shadow Elemental (1st Quest)&lt;br /&gt;
| Four-Leaf Amulets&lt;br /&gt;
| 024-3 to 024-8&lt;br /&gt;
| Explorer&lt;br /&gt;
| on hold, developer inactive&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Kageville&#039;&#039;&#039;&lt;br /&gt;
| Kage&lt;br /&gt;
| TBA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 040&lt;br /&gt;
|&lt;br /&gt;
| on hold, developer inactive&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:250%&amp;quot; class=&amp;quot;center&amp;quot;&amp;gt;&#039;&#039;&#039;Teams&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;Here is a list of all the different developer teams. You can see the list of developers [[Developers|here]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Name&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Member(s)&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Role&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;The Mana World - Athena Leader&#039;&#039;&#039;&lt;br /&gt;
| Wombat&lt;br /&gt;
| Coordinates tmwA.  Network and delegate tasks.  Increase participation.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Content Lead&#039;&#039;&#039;&lt;br /&gt;
| Jenalya&lt;br /&gt;
| Coordinates tmwA General Content (non-sound, non-art).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Source Lead&#039;&#039;&#039;&lt;br /&gt;
| O11c&lt;br /&gt;
| Adjusts and coordinates Athena source code.  Meets content team requests for source code adjustments to further content.  Research and development of Athena source code and scripting conventions.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Sound Lead&#039;&#039;&#039;&lt;br /&gt;
| Yubaba&lt;br /&gt;
| Determines if sound on the forums is ready for the game.  Encourages people to get involved in sound and encourage players to try their hand at sound.  Attempts to meet the [REQ]s of content developers as well as creates any sound that may seem to add to the project, from monsters to maps to battle and beyond.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Pixel Artists&#039;&#039;&#039;&lt;br /&gt;
| Wombat, Meway, Irukard, Lizandra, Salmondine, Ejlol, Var&lt;br /&gt;
| Determines if art is ready for the game.  Helps categorize art topics.  Encourage artists contribute to the game and encourage players to try their hand at art.  Understand content priorities and attempt to steer art to meeting art deadlines.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;tmwA Development Board&#039;&#039;&#039;&lt;br /&gt;
| Wombat, Jenalya, O11c, Argul, Alastrim&lt;br /&gt;
| Helps coordinate the game through Development Board discussion and proposals.  &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Monster Skills Lead&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
| Research and development with monster skills for complex monsters.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;XML Lead&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
| Fixes item, equipment, monsters, particles, player-set etc. images and xml for game animation.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Mapping Lead&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
| Reviews maps for the game.  Check for proper use of black border, collision tiles, and application of tiles onto the correct layers they belong on.  Fix mapping errors.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Skills and Magic Team&#039;&#039;&#039;&lt;br /&gt;
| Jenalya, Argul&lt;br /&gt;
| Research and development of skills and magic.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Balance&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
| Create a new balance system that can be understood by present and future tmwAthena developers and uses equipment tiers.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Alpha Server&#039;&#039;&#039;&lt;br /&gt;
| Frost, Jenalya, alastrim&lt;br /&gt;
| First line of defense against bugs. Pulls from the server-test repository.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:How_to_Develop&amp;diff=24071</id>
		<title>Development:How to Develop</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:How_to_Develop&amp;diff=24071"/>
		<updated>2012-08-04T19:29:55Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Use upper case for &amp;#039;Git&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We&#039;re using Git as version control system for our source files and content. Have a look at our [http://wiki.themanaworld.org/index.php/Working_With_Git Tutorial] about how to use Git. &lt;br /&gt;
=Set Up=&lt;br /&gt;
This is a how to help content development for official TMW-eA using Ubuntu and the Mana client. Other OS and clients may differ. Following this guide, you should be able to get development testing versions of the client data (tmwdata), server-data (eathena-data) and participate in development by using a localhost server. After getting these, you can both test current development and begin development in the direction you find most fitting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dependencies==&lt;br /&gt;
In addition to the basic build tools (GCC, Make, headers, ...), Bison, and Flex are needed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Debian derivates (including Ubuntu)&#039;&#039;&#039;&lt;br /&gt;
* Open a terminal.&lt;br /&gt;
* &#039;&#039;sudo apt-get install build-essential flex bison&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Set Up Own Server==&lt;br /&gt;
&#039;&#039;&#039;Here are the steps to use when creating a new local testing server.&#039;&#039;&#039;&lt;br /&gt;
* Open a terminal.&lt;br /&gt;
* &#039;&#039;mkdir ~/tmw-ea&#039;&#039;&lt;br /&gt;
* &#039;&#039;cd ~/tmw-ea/&#039;&#039;&lt;br /&gt;
* &#039;&#039;git clone git://gitorious.org/tmw-eathena/mainline.git eathena&#039;&#039;&lt;br /&gt;
* &#039;&#039;git clone --recursive git://github.com/themanaworld/tmwa-server-data.git eathena-data&#039;&#039;&lt;br /&gt;
* &#039;&#039;cd eathena/&#039;&#039;&lt;br /&gt;
* If you are running an older version of make: &#039;&#039;mkdir -p obj/{common,login,char,map,ladmin,tool}&#039;&#039;. Debian and Ubuntu, in particular are famous for still not having Make 3.82, which is a much more compliant implementation. If you are technically inclined, I recommend installing it in /usr/local. -o11c&lt;br /&gt;
* &#039;&#039;make&#039;&#039;&lt;br /&gt;
* &#039;&#039;sudo make install&#039;&#039; (you can use prefix=/path to install somewhere other than /usr/local)&lt;br /&gt;
* &#039;&#039;git config --global url.git@gitorious.org:.pushInsteadOf git://gitorious.org&#039;&#039; {{ref|push}} {{ref|once}}&lt;br /&gt;
* &#039;&#039;git config --global url.git@github.com:.pushInsteadOf git://github.com&#039;&#039; {{ref|push}} {{ref|once}}&lt;br /&gt;
* &#039;&#039;cd ../eathena-data&#039;&#039;&lt;br /&gt;
* Preferably, add the update hooks.&lt;br /&gt;
** &#039;&#039;ln -s ../../git/hooks/post-merge .git/hooks/&#039;&#039;&lt;br /&gt;
** &#039;&#039;ln -s ../../../../git/hooks/post-merge .git/modules/client-data/hooks/&#039;&#039; (git 1.7.8 or newer)&lt;br /&gt;
** &#039;&#039;ln -s ../../../git/hooks/post-merge client-data/.git/hooks/&#039;&#039; (git 1.7.7 or older)&lt;br /&gt;
* &#039;&#039;make conf&#039;&#039;&lt;br /&gt;
* &#039;&#039;cd client-data&#039;&#039;&lt;br /&gt;
* &#039;&#039;git checkout master&#039;&#039;&lt;br /&gt;
* &#039;&#039;cd music&#039;&#039;&lt;br /&gt;
* &#039;&#039;git checkout master&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can now launch your test server.&#039;&#039;&#039;&lt;br /&gt;
* Open a terminal.&lt;br /&gt;
* &#039;&#039;cd ~/tmw-ea/eathena-data/&#039;&#039;&lt;br /&gt;
* &#039;&#039;./char-server&amp;amp; ./login-server&amp;amp; ./map-server&amp;amp;&#039;&#039;&lt;br /&gt;
* Open another terminal.&lt;br /&gt;
* &#039;&#039;mana --server localhost --port 6901 -u -d ~/tmw-ea/eathena-data/client-data&#039;&#039;&lt;br /&gt;
This should run all three of your servers and the client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Make yourself a GM so you can test changes made.&#039;&#039;&#039;&lt;br /&gt;
See [[#Administration]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;See also:&#039;&#039;&#039; [[GM Commands]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You are now free to do some changes, first close the client and your servers.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Notes for client data changes: 1) commit and push them in the client-data repo 2) commit and push &amp;quot;client-data&amp;quot; when it shows &amp;quot;(new commits)&amp;quot; in your server-data 3) commit and push other server data changes.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
* Make your modifications (e.g. Change a map) and save them.&lt;br /&gt;
* Open a terminal.&lt;br /&gt;
* &#039;&#039;cd ~/tmw-ea/eathena-data/client-data&#039;&#039;&lt;br /&gt;
* &#039;&#039;git status&#039;&#039;&lt;br /&gt;
* &#039;&#039;git add [modified files]&#039;&#039;&lt;br /&gt;
* &#039;&#039;git commit&#039;&#039;&lt;br /&gt;
* &#039;&#039;git push&#039;&#039; {{note|push}}&lt;br /&gt;
* &#039;&#039;cd ..&#039;&#039;&lt;br /&gt;
* &#039;&#039;make maps&#039;&#039; (if you changed a map)&lt;br /&gt;
* &#039;&#039;git status&#039;&#039;&lt;br /&gt;
* &#039;&#039;git add [modified files]&#039;&#039;&lt;br /&gt;
* &#039;&#039;git add client-data&#039;&#039; (if &#039;&#039;git status&#039;&#039; shows &#039;&#039;(new commits)&#039;&#039;. &#039;&#039;&#039;Don&#039;t do this if you don&#039;t have push access to client-data!&#039;&#039;&#039;)&lt;br /&gt;
* &#039;&#039;git commit&#039;&#039;&lt;br /&gt;
* &#039;&#039;git push&#039;&#039; {{note|push}}&lt;br /&gt;
* Close the terminal.&lt;br /&gt;
&lt;br /&gt;
{{note|push}} : a step for those with commit access to the remote repositories.  For others, you don&#039;t need to reconfigure your clone and please make a patch on steps where &#039;&#039;git push&#039;&#039; is suggested.  &lt;br /&gt;
&lt;br /&gt;
{{note|once}} : you only need to do this once, no matter how many times you independently clone the repositories.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;git format-patch -M -C origin/master&#039;&#039;&lt;br /&gt;
* pastebin the patch(es) and post for review at irc.themanaworld.org channel: #tmw-dev or on our [http://forums.themanaworld.org/viewforum.php?f=18 development forums]. &#039;&#039;&#039;Extensive patches must be posted on the forum as a series of well-formed patches with descriptive commit messages.&#039;&#039;&#039; In particular, later patches should not fix errors introduced in earlier patches, and each patch should form a logically independent part.&lt;br /&gt;
&lt;br /&gt;
(This is kind of outdated; with github it&#039;s often easier to do patches on branches there)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can also pull the data which has been modified.&#039;&#039;&#039;&lt;br /&gt;
* Open a terminal.&lt;br /&gt;
* &#039;&#039;cd ~/tmw-ea/eathena-data&#039;&#039;&lt;br /&gt;
* &#039;&#039;git pull&#039;&#039;&lt;br /&gt;
* If you haven&#039;t installed the hook, &#039;&#039;git submodule update --merge&#039;&#039; at toplevel (for client-data) and in client-data (for music)&lt;br /&gt;
* Close the terminal.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;See Also:&#039;&#039;&#039; [http://wiki.themanaworld.org/images/3/33/README.mv.txt README.mv.txt] - Documentation on using git submodules, like client-data and tmw-music.&lt;br /&gt;
&lt;br /&gt;
== Administration ==&lt;br /&gt;
# Start the servers.&lt;br /&gt;
# Open a command line terminal.&lt;br /&gt;
# cd ~/tmw-ea/eathena-data/login&lt;br /&gt;
# ladmin (not ./ladmin)&lt;br /&gt;
# add username M password&lt;br /&gt;
# gm username 99&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Connecting ==&lt;br /&gt;
# Open a command line terminal.&lt;br /&gt;
# Run your client pointing to your client data and your local server. E.g. mana -u -d ~/tmw-ea/tmwdata --server localhost --port 6901&lt;br /&gt;
&lt;br /&gt;
If all goes well, you are now ready to test new content and participate with development.&lt;br /&gt;
&lt;br /&gt;
=Making Content=&lt;br /&gt;
==Making Map Content==&lt;br /&gt;
See [[Mapping Tutorial]].&lt;br /&gt;
===Python Converter Tool===&lt;br /&gt;
After editing maps for the client, you need to generate the walkmaps and imports for the server.&lt;br /&gt;
&lt;br /&gt;
To run it, just do:&lt;br /&gt;
&lt;br /&gt;
# cd ~/tmw-ea/eathena-data/&lt;br /&gt;
# make maps&lt;br /&gt;
&lt;br /&gt;
After that, commit and push the files that the converter edited. Note that, if you do not have push access to the main repository, you should let someone else update the submodule itself.&lt;br /&gt;
&lt;br /&gt;
==Getting Art Content Into The Game==&lt;br /&gt;
* Post [CPT] or [WIP] art on the [http://forums.themanaworld.org/viewforum.php?f=8 graphics development forum].&lt;br /&gt;
* Work with the Art Director and collaborators on getting the art consistent.&lt;br /&gt;
* When finished, edit topic as [FND].&lt;br /&gt;
* Art Director approves [FND] art and marks it [RC].  Should the art need animation or special effect, the Art Director requests xml for it.  If not, the Art Director commits it and marks as [GIT].&lt;br /&gt;
* XML Team reviews or drafts xml related to the art, then commits the .png and .xml.  Topic can be marked as [GIT].&lt;br /&gt;
::* Art content affected: client-data/graphics/sprites then related directory for .png and .xml animation addition.&lt;br /&gt;
* Project developer requests database entry reservations from a General Content Team developer.&lt;br /&gt;
::* Map entry server data affected: resnametable.txt and .wlk files in the data directory, map content files in the npc directory.&lt;br /&gt;
::* Map entry client data affected: .tmx files in the maps directory.&lt;br /&gt;
::* Map entry requires the running of the .tmx converter (aka java converter) before commits can be made.&lt;br /&gt;
::* Art content server data affected: entry made in the item_db.txt, mob_db.txt or mob_skills_db.txt in the db directory.&lt;br /&gt;
::* Art content client data affected: entry added in items.xml, monsters.xml or other identification file.&lt;br /&gt;
&lt;br /&gt;
===Handling General Content Team [REQ]s===&lt;br /&gt;
* General Content Team member adds a [REQ] topic to the graphics development forum.&lt;br /&gt;
* General Content Team member adds the [REQ] topic as a hyperlink under &amp;quot;Required Art&amp;quot; on the [[Art in Development]] page.&lt;br /&gt;
* Art Director attempts to network with other artists to assign the art to an artist.&lt;br /&gt;
&lt;br /&gt;
==Bit Masking==&lt;br /&gt;
Bit Masking helps us reduce our variable count while offering a dynamic method of script writing that is versatile and flexible to both linear and non-linear script writing. &lt;br /&gt;
&lt;br /&gt;
[http://dl.dropbox.com/u/6520164/tester1.txt Bit Masking Test Script]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:How_to_Develop&amp;diff=24070</id>
		<title>Development:How to Develop</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:How_to_Develop&amp;diff=24070"/>
		<updated>2012-08-04T19:29:21Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Add link to Working_With_Git&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We&#039;re using Git as version control system for our source files and content. Have a look at our [http://wiki.themanaworld.org/index.php/Working_With_Git Tutorial] about how to use git. &lt;br /&gt;
=Set Up=&lt;br /&gt;
This is a how to help content development for official TMW-eA using Ubuntu and the Mana client. Other OS and clients may differ. Following this guide, you should be able to get development testing versions of the client data (tmwdata), server-data (eathena-data) and participate in development by using a localhost server. After getting these, you can both test current development and begin development in the direction you find most fitting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dependencies==&lt;br /&gt;
In addition to the basic build tools (GCC, Make, headers, ...), Bison, and Flex are needed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Debian derivates (including Ubuntu)&#039;&#039;&#039;&lt;br /&gt;
* Open a terminal.&lt;br /&gt;
* &#039;&#039;sudo apt-get install build-essential flex bison&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Set Up Own Server==&lt;br /&gt;
&#039;&#039;&#039;Here are the steps to use when creating a new local testing server.&#039;&#039;&#039;&lt;br /&gt;
* Open a terminal.&lt;br /&gt;
* &#039;&#039;mkdir ~/tmw-ea&#039;&#039;&lt;br /&gt;
* &#039;&#039;cd ~/tmw-ea/&#039;&#039;&lt;br /&gt;
* &#039;&#039;git clone git://gitorious.org/tmw-eathena/mainline.git eathena&#039;&#039;&lt;br /&gt;
* &#039;&#039;git clone --recursive git://github.com/themanaworld/tmwa-server-data.git eathena-data&#039;&#039;&lt;br /&gt;
* &#039;&#039;cd eathena/&#039;&#039;&lt;br /&gt;
* If you are running an older version of make: &#039;&#039;mkdir -p obj/{common,login,char,map,ladmin,tool}&#039;&#039;. Debian and Ubuntu, in particular are famous for still not having Make 3.82, which is a much more compliant implementation. If you are technically inclined, I recommend installing it in /usr/local. -o11c&lt;br /&gt;
* &#039;&#039;make&#039;&#039;&lt;br /&gt;
* &#039;&#039;sudo make install&#039;&#039; (you can use prefix=/path to install somewhere other than /usr/local)&lt;br /&gt;
* &#039;&#039;git config --global url.git@gitorious.org:.pushInsteadOf git://gitorious.org&#039;&#039; {{ref|push}} {{ref|once}}&lt;br /&gt;
* &#039;&#039;git config --global url.git@github.com:.pushInsteadOf git://github.com&#039;&#039; {{ref|push}} {{ref|once}}&lt;br /&gt;
* &#039;&#039;cd ../eathena-data&#039;&#039;&lt;br /&gt;
* Preferably, add the update hooks.&lt;br /&gt;
** &#039;&#039;ln -s ../../git/hooks/post-merge .git/hooks/&#039;&#039;&lt;br /&gt;
** &#039;&#039;ln -s ../../../../git/hooks/post-merge .git/modules/client-data/hooks/&#039;&#039; (git 1.7.8 or newer)&lt;br /&gt;
** &#039;&#039;ln -s ../../../git/hooks/post-merge client-data/.git/hooks/&#039;&#039; (git 1.7.7 or older)&lt;br /&gt;
* &#039;&#039;make conf&#039;&#039;&lt;br /&gt;
* &#039;&#039;cd client-data&#039;&#039;&lt;br /&gt;
* &#039;&#039;git checkout master&#039;&#039;&lt;br /&gt;
* &#039;&#039;cd music&#039;&#039;&lt;br /&gt;
* &#039;&#039;git checkout master&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can now launch your test server.&#039;&#039;&#039;&lt;br /&gt;
* Open a terminal.&lt;br /&gt;
* &#039;&#039;cd ~/tmw-ea/eathena-data/&#039;&#039;&lt;br /&gt;
* &#039;&#039;./char-server&amp;amp; ./login-server&amp;amp; ./map-server&amp;amp;&#039;&#039;&lt;br /&gt;
* Open another terminal.&lt;br /&gt;
* &#039;&#039;mana --server localhost --port 6901 -u -d ~/tmw-ea/eathena-data/client-data&#039;&#039;&lt;br /&gt;
This should run all three of your servers and the client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Make yourself a GM so you can test changes made.&#039;&#039;&#039;&lt;br /&gt;
See [[#Administration]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;See also:&#039;&#039;&#039; [[GM Commands]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You are now free to do some changes, first close the client and your servers.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Notes for client data changes: 1) commit and push them in the client-data repo 2) commit and push &amp;quot;client-data&amp;quot; when it shows &amp;quot;(new commits)&amp;quot; in your server-data 3) commit and push other server data changes.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
* Make your modifications (e.g. Change a map) and save them.&lt;br /&gt;
* Open a terminal.&lt;br /&gt;
* &#039;&#039;cd ~/tmw-ea/eathena-data/client-data&#039;&#039;&lt;br /&gt;
* &#039;&#039;git status&#039;&#039;&lt;br /&gt;
* &#039;&#039;git add [modified files]&#039;&#039;&lt;br /&gt;
* &#039;&#039;git commit&#039;&#039;&lt;br /&gt;
* &#039;&#039;git push&#039;&#039; {{note|push}}&lt;br /&gt;
* &#039;&#039;cd ..&#039;&#039;&lt;br /&gt;
* &#039;&#039;make maps&#039;&#039; (if you changed a map)&lt;br /&gt;
* &#039;&#039;git status&#039;&#039;&lt;br /&gt;
* &#039;&#039;git add [modified files]&#039;&#039;&lt;br /&gt;
* &#039;&#039;git add client-data&#039;&#039; (if &#039;&#039;git status&#039;&#039; shows &#039;&#039;(new commits)&#039;&#039;. &#039;&#039;&#039;Don&#039;t do this if you don&#039;t have push access to client-data!&#039;&#039;&#039;)&lt;br /&gt;
* &#039;&#039;git commit&#039;&#039;&lt;br /&gt;
* &#039;&#039;git push&#039;&#039; {{note|push}}&lt;br /&gt;
* Close the terminal.&lt;br /&gt;
&lt;br /&gt;
{{note|push}} : a step for those with commit access to the remote repositories.  For others, you don&#039;t need to reconfigure your clone and please make a patch on steps where &#039;&#039;git push&#039;&#039; is suggested.  &lt;br /&gt;
&lt;br /&gt;
{{note|once}} : you only need to do this once, no matter how many times you independently clone the repositories.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;git format-patch -M -C origin/master&#039;&#039;&lt;br /&gt;
* pastebin the patch(es) and post for review at irc.themanaworld.org channel: #tmw-dev or on our [http://forums.themanaworld.org/viewforum.php?f=18 development forums]. &#039;&#039;&#039;Extensive patches must be posted on the forum as a series of well-formed patches with descriptive commit messages.&#039;&#039;&#039; In particular, later patches should not fix errors introduced in earlier patches, and each patch should form a logically independent part.&lt;br /&gt;
&lt;br /&gt;
(This is kind of outdated; with github it&#039;s often easier to do patches on branches there)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can also pull the data which has been modified.&#039;&#039;&#039;&lt;br /&gt;
* Open a terminal.&lt;br /&gt;
* &#039;&#039;cd ~/tmw-ea/eathena-data&#039;&#039;&lt;br /&gt;
* &#039;&#039;git pull&#039;&#039;&lt;br /&gt;
* If you haven&#039;t installed the hook, &#039;&#039;git submodule update --merge&#039;&#039; at toplevel (for client-data) and in client-data (for music)&lt;br /&gt;
* Close the terminal.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;See Also:&#039;&#039;&#039; [http://wiki.themanaworld.org/images/3/33/README.mv.txt README.mv.txt] - Documentation on using git submodules, like client-data and tmw-music.&lt;br /&gt;
&lt;br /&gt;
== Administration ==&lt;br /&gt;
# Start the servers.&lt;br /&gt;
# Open a command line terminal.&lt;br /&gt;
# cd ~/tmw-ea/eathena-data/login&lt;br /&gt;
# ladmin (not ./ladmin)&lt;br /&gt;
# add username M password&lt;br /&gt;
# gm username 99&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Connecting ==&lt;br /&gt;
# Open a command line terminal.&lt;br /&gt;
# Run your client pointing to your client data and your local server. E.g. mana -u -d ~/tmw-ea/tmwdata --server localhost --port 6901&lt;br /&gt;
&lt;br /&gt;
If all goes well, you are now ready to test new content and participate with development.&lt;br /&gt;
&lt;br /&gt;
=Making Content=&lt;br /&gt;
==Making Map Content==&lt;br /&gt;
See [[Mapping Tutorial]].&lt;br /&gt;
===Python Converter Tool===&lt;br /&gt;
After editing maps for the client, you need to generate the walkmaps and imports for the server.&lt;br /&gt;
&lt;br /&gt;
To run it, just do:&lt;br /&gt;
&lt;br /&gt;
# cd ~/tmw-ea/eathena-data/&lt;br /&gt;
# make maps&lt;br /&gt;
&lt;br /&gt;
After that, commit and push the files that the converter edited. Note that, if you do not have push access to the main repository, you should let someone else update the submodule itself.&lt;br /&gt;
&lt;br /&gt;
==Getting Art Content Into The Game==&lt;br /&gt;
* Post [CPT] or [WIP] art on the [http://forums.themanaworld.org/viewforum.php?f=8 graphics development forum].&lt;br /&gt;
* Work with the Art Director and collaborators on getting the art consistent.&lt;br /&gt;
* When finished, edit topic as [FND].&lt;br /&gt;
* Art Director approves [FND] art and marks it [RC].  Should the art need animation or special effect, the Art Director requests xml for it.  If not, the Art Director commits it and marks as [GIT].&lt;br /&gt;
* XML Team reviews or drafts xml related to the art, then commits the .png and .xml.  Topic can be marked as [GIT].&lt;br /&gt;
::* Art content affected: client-data/graphics/sprites then related directory for .png and .xml animation addition.&lt;br /&gt;
* Project developer requests database entry reservations from a General Content Team developer.&lt;br /&gt;
::* Map entry server data affected: resnametable.txt and .wlk files in the data directory, map content files in the npc directory.&lt;br /&gt;
::* Map entry client data affected: .tmx files in the maps directory.&lt;br /&gt;
::* Map entry requires the running of the .tmx converter (aka java converter) before commits can be made.&lt;br /&gt;
::* Art content server data affected: entry made in the item_db.txt, mob_db.txt or mob_skills_db.txt in the db directory.&lt;br /&gt;
::* Art content client data affected: entry added in items.xml, monsters.xml or other identification file.&lt;br /&gt;
&lt;br /&gt;
===Handling General Content Team [REQ]s===&lt;br /&gt;
* General Content Team member adds a [REQ] topic to the graphics development forum.&lt;br /&gt;
* General Content Team member adds the [REQ] topic as a hyperlink under &amp;quot;Required Art&amp;quot; on the [[Art in Development]] page.&lt;br /&gt;
* Art Director attempts to network with other artists to assign the art to an artist.&lt;br /&gt;
&lt;br /&gt;
==Bit Masking==&lt;br /&gt;
Bit Masking helps us reduce our variable count while offering a dynamic method of script writing that is versatile and flexible to both linear and non-linear script writing. &lt;br /&gt;
&lt;br /&gt;
[http://dl.dropbox.com/u/6520164/tester1.txt Bit Masking Test Script]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Mapping_Tutorial&amp;diff=24069</id>
		<title>Development:Mapping Tutorial</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Mapping_Tutorial&amp;diff=24069"/>
		<updated>2012-08-04T19:24:20Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: /* Sending the map to the dev team */  Remove mailing list, as this isn&amp;#039;t really used anymore, and add Fork on Github as option to submit a map.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Status_green}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This tutorial is still based on the old, java-based version of Tiled, not on the rewrite based on QT. While most TMW-specific information in this article still applies, some GUI elements might not be where this guide describes them.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Basics ==&lt;br /&gt;
Making maps for The Mana World is not a task that requires a lot of knowledge but is a very good way to become creative and help the game to become more attractive. But getting started can be a little frustrating. Here is a guide that will help you to learn how to make maps.&lt;br /&gt;
&lt;br /&gt;
=== Folders ===&lt;br /&gt;
You need to use a certain folder structure when mapping for TMW:&lt;br /&gt;
*(some folder)&lt;br /&gt;
**graphics&lt;br /&gt;
***tiles&lt;br /&gt;
****The graphics for the tilesets (png files)&lt;br /&gt;
**tilesets&lt;br /&gt;
***The external tilesets (tsx files)&lt;br /&gt;
**maps&lt;br /&gt;
***The actual maps (tmx files)&lt;br /&gt;
&lt;br /&gt;
=== How to get Tiled ===&lt;br /&gt;
The map editor we are using is called Tiled. You can find it at http://mapeditor.org/.&lt;br /&gt;
&lt;br /&gt;
=== Setting up the data files ===&lt;br /&gt;
&lt;br /&gt;
To create a map, you will first need some graphics, as well as existing maps to use for reference.&lt;br /&gt;
&lt;br /&gt;
You can get all the files in the right directory structure by cloning the &amp;quot;tmwdata&amp;quot; project from our [[Git repository]].&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can use the data files that are downloaded while playing the game.  When you downloaded TMW as an installer packet, all map graphics were downloaded at the start of TMW from the update server and stored in the subfolder &amp;quot;\.tmw\updates&amp;quot; of your home directory as zip archives. Unpack these into the &amp;quot;data&amp;quot; subfolder of your TMW installation.&lt;br /&gt;
&lt;br /&gt;
=== Setting up Tiled for making TMW Maps ===&lt;br /&gt;
&lt;br /&gt;
Tiled is a map editor that isn&#039;t made specifically for TMW. That means it has a lot of options and settings we don&#039;t need. &lt;br /&gt;
[[Image:Maptutorial_Newmap.png|right|Settings for a new tmw map]]&lt;br /&gt;
To create a new map, press File-&amp;gt;New. Use the following settings:&lt;br /&gt;
&lt;br /&gt;
* Map Type: Orthogonal&lt;br /&gt;
* Tile Size: 32x32&lt;br /&gt;
* Tile Spacing: 0&lt;br /&gt;
* Map Size: Should be at least 60x60 but not larger than 200x200 (although the theoretical maximum is much higher). A 20 tile border around the outside of every map is needed ([[Map development/Border|diagram]]). Additionally, a 20 tile border is recommended between rooms for indoor maps; this is to prevent more than one room from showing at a time on the client.&lt;br /&gt;
** In the Argaes woodland, outdoor maps should be 150x120, including the 20 tile border.&lt;br /&gt;
&lt;br /&gt;
=== Importing tilesets ===&lt;br /&gt;
[[Image:Maptutorial_Newtileset.png|right|Settings for importing a tileset]]&lt;br /&gt;
Now you have to choose the tilesets you want to use on the map. To import a tileset, select Tilesets-&amp;gt;Add External Tileset and select the appropriate tsx file from ../tilesets/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need to add a tileset that has never been used before:&lt;br /&gt;
* Choose Map-&amp;gt;New Tileset:&lt;br /&gt;
* Hit browse and select the tileset from graphics/tiles/. The name will be auto-filled.&lt;br /&gt;
* If the tileset is oversized, adjust the tile height (to 64 for an _x2 tileset; 96 for an _x3, etc.)&lt;br /&gt;
* Click OK.&lt;br /&gt;
* In the tileset pane, click the &amp;quot;export&amp;quot; button and browse to the ../tilesets/ directory. Save it with the same name, but with a .tsx extension.&lt;br /&gt;
&lt;br /&gt;
Please try to import tilesets in the same order as other maps, and try to eliminate unused tilesets except when necessary to preserve the order. Add remaining tilesets at the end.&lt;br /&gt;
&lt;br /&gt;
You can list the tileset order of existing maps by running tools/list-tileset-order.&lt;br /&gt;
&lt;br /&gt;
The collision tileset should always be first, and the most-used tileset second. This is a good indicator of which existing pattern to follow, or whether you have enough justification to make a new order.&lt;br /&gt;
&lt;br /&gt;
=== Starting to map ===&lt;br /&gt;
Now you can finally start to map. To place tiles on the map, select the pen tool from the toolbox to the left. Then select a tile from the tile palette. Now you can place the tiles on the map. Please, always take notice of what layer you are drawing on, because the layers play different roles:&lt;br /&gt;
*Use a layer beneath the &amp;quot;Fringe&amp;quot; layer for tiles without transparency. The layers beneath fringe have to be filled completely before you can call the map finished. When there are partially transparent tiles without completely opaque tiles on a layer below, strange graphic bugs will appear in the empty area.&lt;br /&gt;
*The &amp;quot;Fringe&amp;quot; Layer itself is for oversized tiles which have to be drawn in front of or behind moving objects, depending on their location. This sorting takes up CPU, making the game run slower. Thus, you should only use this layer for the tiles which have to use it.&lt;br /&gt;
*Layers above the &amp;quot;Fringe&amp;quot; layer are always drawn over the map sprites. It should be used for objects which are meant to look as if they are far above the game area. Keep in mind that there are also monsters which are larger than player characters.&lt;br /&gt;
*The &amp;quot;Collision&amp;quot; Layer isn&#039;t displayed in the game. It contains information about which parts of the map are walkable and which aren&#039;t. Don&#039;t put any tiles on this layer except for the red collision tiles from the collision tileset.&lt;br /&gt;
&lt;br /&gt;
When you are finished with your map, you have to determine which tiles are walkable and which aren&#039;t. To do so, mark all tiles you want to be blocked with the red squares from the collision tileset on the collision layer. Be careful that even if a tile is not reachable, but is walkable, the server can spawn monsters there which can not be killed by the players because they can&#039;t reach them. This will eventually lead to all monsters accumulating in the unreachable area until there are no monsters left in the reachable areas. &lt;br /&gt;
&lt;br /&gt;
You can check if you did this properly by saving the map, zooming out until the entire map is visible, hiding all layers except for the collision layer, and then using the flood fill tool with the cross tile on the empty area. Any tiles which are still unmarked are not reachable by the players.&lt;br /&gt;
&lt;br /&gt;
Be aware that you need a border of about 20 tiles in every direction that should not be walkable, but should be designed properly ([[Map development/Border|diagram]]). Portals to other maps should only be some tiles wide. (You can&#039;t define the portals with Tiled, by the way. Leave this to the server administrators. The same applies to monster population, NPCs and other interactive objects.)&lt;br /&gt;
&lt;br /&gt;
=== Testing your map ===&lt;br /&gt;
&lt;br /&gt;
To test your map, you have to replace one of the maps in your TMW folder (in the sub folder data/maps). When you start the game and go to the map you replaced you will see your new map. You will see monsters and other players on the map, but don&#039;t worry-- the other players still see their version of the map, and they won&#039;t see you walk through walls. Just ignore them while you explore your map.&lt;br /&gt;
&lt;br /&gt;
Sometimes your changed map is overridden by a new version of the map in the updates. In that case, you won&#039;t see any changes when you change or even remove a map. When you encounter this problem, either skip the update loading by starting tmw with the parameter &amp;quot;-u&amp;quot;, or delete the file you want to change in all the zip archives you find in the subfolder /updates/.&lt;br /&gt;
&lt;br /&gt;
== Intermediate topics ==&lt;br /&gt;
&lt;br /&gt;
=== Over sized tiles ===&lt;br /&gt;
&lt;br /&gt;
You might have noticed the tilesets ending with _x2.png or _x3.png contain graphics that are two or three tiles high. The graphics engine recognizes these oversized tiles when they are placed and automatically draws sprites in front of them when they are south of them and behind them when they are north of them. When importing a _x2 tileset, set the tile height to 64; when importing a _x3 tileset, set it to 96.&lt;br /&gt;
&lt;br /&gt;
=== The Stamp ===&lt;br /&gt;
&lt;br /&gt;
The Stamp Feature is a powerful feature of Tiled that is hard to find but can save a lot of time. It allows you to do quick copy/pasting of a part of a layer. This allows you to draw objects consisting of multiple tiles very quick. Just select the pen tool, press the right mouse button, and drag the mouse over the tiles you want to copy. Now you can draw the whole square of tiles over and over again with a single left click. To return to the normal drawing mode, just select the pen tool again or choose a tile from the tile palette.&lt;br /&gt;
&lt;br /&gt;
=== Making two maps with a fluent transition ===&lt;br /&gt;
&lt;br /&gt;
When you create an outdoor map, it is most likely supposed to be adjacent to an existing map. In this case, the transmission from one map to the other should be as seamless as possible. This can only be reached when the border areas of both maps are identical. Unfortunately, Tiled can&#039;t copy/paste between different maps (well, it is possible, but it only works correctly when both maps use exactly the same tilesets in exactly the same order), so we developed a command-line based program called TMXcopy for this task. You can find the sourcecode on the GIT repository in the folder http://gitorious.org/tmw/mainline/trees/master/tools/tmxcopy . A compiled windows binary can be found at http://www.crushnet.org/TempFiles/tmw/tmxcopy.zip .&lt;br /&gt;
&lt;br /&gt;
An introduction on how to use this program is described in its [http://gitorious.org/tmw/mainline/blobs/HEAD/tools/tmxcopy/readme.txt readme file].&lt;br /&gt;
&lt;br /&gt;
To create a map adjacent to an existing one, you should:&lt;br /&gt;
# Create the new map as described above, and save it.&lt;br /&gt;
# Use TMXcopy to copy the border area of the old map to the opposite side of the new map. The area should have the double width of the unwalkable area.&lt;br /&gt;
# Open the new map and check if the copying worked correctly. Then modify the lower three layers of the copied area to fit into your map. While doing so, you should focus on the half of the new area that is inside the walkable area of your map. The half that lies in the border zone of your map should not be modified too much because it is part of the old map.&lt;br /&gt;
# Use TMXCopy to copy the new area from the new map back to the old map.&lt;br /&gt;
# Update the collision layers on both maps.&lt;br /&gt;
&lt;br /&gt;
Now the border area should be visually identical on both maps. The only difference should be that the unwalkable areas are switched. When sending the map to the team, remember to include the new version of the old map.&lt;br /&gt;
&lt;br /&gt;
=== Ambient effects ===&lt;br /&gt;
[[Image:Maptutorial_Overlayproperties.png|right|Example for 3 independent scrolling overlays]]&lt;br /&gt;
Ambient Effects are a new feature in TMW 0.0.21. They are either background images drawn at places where you place no tiles or tiles with transparency or they are transparent graphics that will be drawn over your map. All these graphics can scroll independent. They can be used to create a variety of special effects like weather, darkness etc.&lt;br /&gt;
&lt;br /&gt;
To add ambient effects to your map open your map with Tiled and click Map-&amp;gt;Properties to open the map properties dialog. The dialog is a little bit buggy in the current version of Tiled, so make sure that the property has really been set before you save the map. Pressing enter after entering each key and value helps... sometimes. &lt;br /&gt;
&lt;br /&gt;
==== adding foreground images ====&lt;br /&gt;
First you have to choose an image. Do so by adding a key &#039;&#039;foreground0image&#039;&#039; and set its value to the path of the image that you want to use relative to the data directory. For the spotlight effect for example enter &#039;&#039;/graphics/images/ambient/spotlight.png&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
When you want the image to move permanently add the new keys &#039;&#039;foreground0scrollX&#039;&#039; and &#039;&#039;foreground0scrollY&#039;&#039; followed by a number (can be a decimal value). &#039;&#039;foreground0scrollX&#039;&#039; determines the scroll speed to the right (negative values mean scrolling to the left) and &#039;&#039;foreground0scrollY&#039;&#039; the scroll speed down (negative values mean up). both values are in pixels per frame. &lt;br /&gt;
&lt;br /&gt;
You can also define a &#039;&#039;foreground0parallax&#039;&#039; parameter. This parameter affects how much the overlay scrolls when the screen scrolls. A value of 1.0 means that the overlay will stay relative to the ground when the screen scrolls. A value of 0.0 means that the overlay stays relative to the &amp;quot;camera&amp;quot; and is not affected by scrolling. It is a decimal value so you can set it to values between 1 and 0 to create the three dimensional illusion of a layer between the &amp;quot;camera&amp;quot; and the map.&lt;br /&gt;
&lt;br /&gt;
When using foregrounds at different resolutions, some would become disproportioned (for instance, the halo in cave maps that had to fill the screen repeated it self in higher resolution than 800x600.). That why, the keepratio parameter has been added: It will scaled up or down the image based on the current resolution.&lt;br /&gt;
&lt;br /&gt;
Remember that the scaling factor is based on the default 800x600 resolution, so new overlay images are to be fitted for that resolution to make this parameter work.&lt;br /&gt;
(The image scaling in 1024x768 resolution mode, for instance, will be calculated this way: New Image Width = image-width / 800 * 1024, New Image Height = image-height / 600 * 768).&lt;br /&gt;
&lt;br /&gt;
To add this parameter to your foreground configuration, you&#039;ll have to define the &#039;&#039;foreground0keepratio&#039;&#039; to the &#039;&#039;true&#039;&#039; value.&lt;br /&gt;
&lt;br /&gt;
You can create any number of independent foreground graphics. To define a 2nd one create keys with 1 instead of 0, for a 3rd one 2, and so on. For instance &#039;&#039;foreground2parallax&#039;&#039; for the third foreground parallax value.&lt;br /&gt;
&lt;br /&gt;
The foregrounds won&#039;t appear in Tiled. They will only appear in the game.&lt;br /&gt;
&lt;br /&gt;
When it doesn&#039;t work please check that all key names are written correctly (they are cAsEsEnSiTiVe) and that the numbers of the foreground are consecutive starting from 0.&lt;br /&gt;
&lt;br /&gt;
When you want to create foreground images yourself (transparent 32bit png graphics of any size) please don&#039;t forget to make them transparent with your image manipulation program. Otherwise the player won&#039;t be able to see the map under it. An opacity of 50% should be the absolute maximum. When you want to create effects that are not meant to obstruct the players view use an opacity between 10% and 20%.&lt;br /&gt;
&lt;br /&gt;
For historical reasons you can also use &amp;quot;overlay&amp;quot; in place of &amp;quot;foreground&amp;quot;. You will notice this annotation in older map files. Please don&#039;t do it and use &amp;quot;foreground&amp;quot; instead, &amp;quot;overlay&amp;quot; is depreciated.&lt;br /&gt;
&lt;br /&gt;
==== adding background images====&lt;br /&gt;
&lt;br /&gt;
Backgrounds are added in the same way foregrounds are, with the exceptions that the property keys don&#039;t start with the prefix foreground but with background. They use their own numbering, so you have to number your backgrounds 0, 1, 2 etc. no matter if you have foregrounds or not.&lt;br /&gt;
 &#039;&#039;background0image&#039;&#039;&lt;br /&gt;
 &#039;&#039;background0scrollY&#039;&#039;&lt;br /&gt;
 &#039;&#039;background0scrollX&#039;&#039;&lt;br /&gt;
 &#039;&#039;background0keepratio&#039;&#039;&lt;br /&gt;
In contrary to all other fore- or background images the first background (background0image) must not have any transparency but should be 100% opaque. Otherwise ugly graphic bugs will appear.&lt;br /&gt;
&lt;br /&gt;
=== Particle effects ===&lt;br /&gt;
&lt;br /&gt;
Check out the article about the [[Particle engine]] for a description about how to add particle effects to your map and how to create new particle effects when the effect you need doesn&#039;t exist yet.&lt;br /&gt;
&lt;br /&gt;
=== Animated tiles ===&lt;br /&gt;
To make a type of tiles animated go to Tilesets-&amp;gt;Tileset Manager. Then select the tileset with the tile and all of its animation frames (they have to be on one tileset) and click on the icon with a pencil on a piece of paper (the tooltip reads &amp;quot;Edit...&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Select the tile you want to be animated on the list to the left. You should see a table on the right with two columns named &amp;quot;Name&amp;quot; and &amp;quot;Value&amp;quot;. You have to describe the animation of the tile in this table. Here an example for a 3-phase animation:&lt;br /&gt;
&lt;br /&gt;
 NAME              VALUE&lt;br /&gt;
 animation-frame0  0&lt;br /&gt;
 animation-delay0  100&lt;br /&gt;
 animation-frame1  16&lt;br /&gt;
 animation-delay1  100&lt;br /&gt;
 animation-frame2  48&lt;br /&gt;
 animation-delay2  100&lt;br /&gt;
&lt;br /&gt;
animation-frameX is the Tile number (as shown in the list on the left) and animation-delayX is how long it is shown (100 is equal to one second).&lt;br /&gt;
&lt;br /&gt;
The animation does not show up in Tiled.&lt;br /&gt;
&lt;br /&gt;
== Advanced Topics/Adding a map to the server ==&lt;br /&gt;
To get the server to use your new map without replacing the old one, you&#039;ll have to create a wlk file (see below).  Then edit the data/resnametable.txt file, you&#039;ll notice the pattern.  Finally, in the npc directory create a directory for your new map, and create a file named _import.txt with the contents:&lt;br /&gt;
&lt;br /&gt;
    map: &amp;lt;map_name&amp;gt;.gat&lt;br /&gt;
&lt;br /&gt;
In npc/_import.txt include your new _import.txt file like all the others.&lt;br /&gt;
&lt;br /&gt;
The clients still need direct access to the tmw file.  To do this put it in an udpate or put it in the ~/.tmw/maps/ directory for every client that needs access to the map.&lt;br /&gt;
&lt;br /&gt;
=== Creating the WLK files ===&lt;br /&gt;
You can either use the tool found in the tools/tmwcon/ directory of the server-data package or use the export plugin that ships with recent java versions of tiled.  To use the export plugin go file-&amp;gt;Save As and under filetype select the wlk extention, or just name the file with that extention.&lt;br /&gt;
&lt;br /&gt;
== Creating a Minimap ==&lt;br /&gt;
&lt;br /&gt;
The Creation of a minimap is a task that requires an image manipulation software that supports multiple layers and the PNG format (we recommend [http://www.gimp.org GIMP]). When you are not familiar with using one you should ask one of the artists to create a minimap for your map. When you want to create your own minimap then you should exactly follow the following steps to ensure to stay in style with the rest of the minimaps:&lt;br /&gt;
#Open your map with tiled, zoom out until the whole map is visible and use the &amp;quot;save as image&amp;quot; option.&lt;br /&gt;
#Open the image with your image manipulation program.&lt;br /&gt;
#Resize it so that one pixel represents one tile. When your map is for example 160x100 tiles large (including border zone) your picture should be 160x100 pixels large.&lt;br /&gt;
#Create a new transparent layer over the existing one.&lt;br /&gt;
#Select the pencil tool with a brush size of 1x1 pixel and with the color #000000 (pure black). Anti aliasing should be deactivated when available.&lt;br /&gt;
#Now draw lines on the new layer along the following map features:&lt;br /&gt;
#*Cliffs and walls (lower and upper edge)&lt;br /&gt;
#*River/lake shores&lt;br /&gt;
#*Roads (both sides of the road as single lines)&lt;br /&gt;
#*The border of any other large map structure that you feel should be on the map&lt;br /&gt;
#Trees or other objects can be represented by single pixels with 50% alpha transparency when there are so many that they affect the game play on the map.&lt;br /&gt;
#When you are finished remove the background layer. Now only the black lines should be visible&lt;br /&gt;
#Resize the image so the sides are half (50%) as long. You should use the best image filtering method available (cubic filtering in GIMP).&lt;br /&gt;
#Save your finished minimap as a PNG image with 32bit color depth and alpha transparency as *your_tmw_folder*/data/graphics/minimaps/*mapname*.png. &lt;br /&gt;
#Open your map with Tiled, click Map-&amp;gt;Properties in the menu bar and add a new property with the key &amp;quot;minimap&amp;quot; and the value &amp;quot;/graphics/minimaps/*mapname*.png&amp;quot;. The properties dialog is a little bit buggy in the current version of Tiled, so make sure that the property has really been set before you save the map.&lt;br /&gt;
#Send us both the map and the minimap image&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;While this is indeed exactly the way I also created the earlier cave and desert minimaps, I am not entirely happy with this method. Mostly because the final result is a really tiny image, without the ability to easily make versions of it on other scales. I would therefore suggest we try to create future minimaps in vector format using Inkscape. The technique would be similar, placing a scaled down version of the map in the background and drawing black lines on top. The result should however be an image that can take any scale. This would allow us both to put more detail in the minimap for larger scales, and to include a zooming feature (or similar) in the game so that notes and other marks can be placed on the map with higher precision.&#039;&#039; --[[User:BjÃ¸rn|BjÃ¸rn]] 16:04, 16 August 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Sending the map to the dev team ==&lt;br /&gt;
&lt;br /&gt;
There are many ways to send us your map so we can include it in the next release.&lt;br /&gt;
;Fork on Github: You can create a fork of our [https://github.com/themanaworld/tmwa-client-data client-data repository] on github and push a commit containing your map. Have a look at our [http://wiki.themanaworld.org/index.php/Working_With_Git Tutorial] for using git and creating a fork.&lt;br /&gt;
;IRC: Join our [irc://irc.freenode.net/themanaworld IRC Channel]. When you are not familiar with irc you can find a guide in this [http://forums.themanaworld.org/viewtopic.php?t=747 Forum Thread]. When you are in the channel ask a developer if you can send him your map using DCC or upload your map to a webspace or one click hoster and give us the link.&lt;br /&gt;
;Forum: Upload your map to any webspace or one click hoster. An overview graphic (can be created with Tileds &amp;quot;Save as Image&amp;quot; feature) would be nice, too. Visit our [http://forums.themanaworld.org/viewforum.php?f=9 Forum] and register a new account. Then open a new thread, introduce yourself and post a link to your map. &lt;br /&gt;
&lt;br /&gt;
Please understand that we will most likely have some details we would like to have changed before we release your map. so please check back or leave some information how to contact you.&lt;br /&gt;
&lt;br /&gt;
== Hints for good mapping ==&lt;br /&gt;
&lt;br /&gt;
* Before you start with a map you should have a loose idea of the layout. Making a sketch of the map on a piece of paper can be very useful.&lt;br /&gt;
* Don&#039;t put too many similar objects on one screen. Very eye catching tiles should only be used sparingly. Try to break up large areas with the same tile over and over again by throwing in some objects.&lt;br /&gt;
* Avoid regular patterns in natural environments. Trees usually don&#039;t grow in grid patterns. Rivers, mountain ridges or corridors in caves should never be completely straight.&lt;br /&gt;
* Don&#039;t map too functional. Give the players something to look at, even when it hasn&#039;t got any relevance for the gameplay.&lt;br /&gt;
* But keep the playability in mind.&lt;br /&gt;
&lt;br /&gt;
{|-&lt;br /&gt;
| A bad mapping style:&lt;br /&gt;
| A better mapping style:&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Badmap.png]]&lt;br /&gt;
| [[Image:Goodmap.png]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Mapping_Tutorial&amp;diff=24068</id>
		<title>Development:Mapping Tutorial</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Mapping_Tutorial&amp;diff=24068"/>
		<updated>2012-08-04T19:14:22Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: /* How to get Tiled */  Remove very outdated information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Status_green}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This tutorial is still based on the old, java-based version of Tiled, not on the rewrite based on QT. While most TMW-specific information in this article still applies, some GUI elements might not be where this guide describes them.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Basics ==&lt;br /&gt;
Making maps for The Mana World is not a task that requires a lot of knowledge but is a very good way to become creative and help the game to become more attractive. But getting started can be a little frustrating. Here is a guide that will help you to learn how to make maps.&lt;br /&gt;
&lt;br /&gt;
=== Folders ===&lt;br /&gt;
You need to use a certain folder structure when mapping for TMW:&lt;br /&gt;
*(some folder)&lt;br /&gt;
**graphics&lt;br /&gt;
***tiles&lt;br /&gt;
****The graphics for the tilesets (png files)&lt;br /&gt;
**tilesets&lt;br /&gt;
***The external tilesets (tsx files)&lt;br /&gt;
**maps&lt;br /&gt;
***The actual maps (tmx files)&lt;br /&gt;
&lt;br /&gt;
=== How to get Tiled ===&lt;br /&gt;
The map editor we are using is called Tiled. You can find it at http://mapeditor.org/.&lt;br /&gt;
&lt;br /&gt;
=== Setting up the data files ===&lt;br /&gt;
&lt;br /&gt;
To create a map, you will first need some graphics, as well as existing maps to use for reference.&lt;br /&gt;
&lt;br /&gt;
You can get all the files in the right directory structure by cloning the &amp;quot;tmwdata&amp;quot; project from our [[Git repository]].&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can use the data files that are downloaded while playing the game.  When you downloaded TMW as an installer packet, all map graphics were downloaded at the start of TMW from the update server and stored in the subfolder &amp;quot;\.tmw\updates&amp;quot; of your home directory as zip archives. Unpack these into the &amp;quot;data&amp;quot; subfolder of your TMW installation.&lt;br /&gt;
&lt;br /&gt;
=== Setting up Tiled for making TMW Maps ===&lt;br /&gt;
&lt;br /&gt;
Tiled is a map editor that isn&#039;t made specifically for TMW. That means it has a lot of options and settings we don&#039;t need. &lt;br /&gt;
[[Image:Maptutorial_Newmap.png|right|Settings for a new tmw map]]&lt;br /&gt;
To create a new map, press File-&amp;gt;New. Use the following settings:&lt;br /&gt;
&lt;br /&gt;
* Map Type: Orthogonal&lt;br /&gt;
* Tile Size: 32x32&lt;br /&gt;
* Tile Spacing: 0&lt;br /&gt;
* Map Size: Should be at least 60x60 but not larger than 200x200 (although the theoretical maximum is much higher). A 20 tile border around the outside of every map is needed ([[Map development/Border|diagram]]). Additionally, a 20 tile border is recommended between rooms for indoor maps; this is to prevent more than one room from showing at a time on the client.&lt;br /&gt;
** In the Argaes woodland, outdoor maps should be 150x120, including the 20 tile border.&lt;br /&gt;
&lt;br /&gt;
=== Importing tilesets ===&lt;br /&gt;
[[Image:Maptutorial_Newtileset.png|right|Settings for importing a tileset]]&lt;br /&gt;
Now you have to choose the tilesets you want to use on the map. To import a tileset, select Tilesets-&amp;gt;Add External Tileset and select the appropriate tsx file from ../tilesets/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need to add a tileset that has never been used before:&lt;br /&gt;
* Choose Map-&amp;gt;New Tileset:&lt;br /&gt;
* Hit browse and select the tileset from graphics/tiles/. The name will be auto-filled.&lt;br /&gt;
* If the tileset is oversized, adjust the tile height (to 64 for an _x2 tileset; 96 for an _x3, etc.)&lt;br /&gt;
* Click OK.&lt;br /&gt;
* In the tileset pane, click the &amp;quot;export&amp;quot; button and browse to the ../tilesets/ directory. Save it with the same name, but with a .tsx extension.&lt;br /&gt;
&lt;br /&gt;
Please try to import tilesets in the same order as other maps, and try to eliminate unused tilesets except when necessary to preserve the order. Add remaining tilesets at the end.&lt;br /&gt;
&lt;br /&gt;
You can list the tileset order of existing maps by running tools/list-tileset-order.&lt;br /&gt;
&lt;br /&gt;
The collision tileset should always be first, and the most-used tileset second. This is a good indicator of which existing pattern to follow, or whether you have enough justification to make a new order.&lt;br /&gt;
&lt;br /&gt;
=== Starting to map ===&lt;br /&gt;
Now you can finally start to map. To place tiles on the map, select the pen tool from the toolbox to the left. Then select a tile from the tile palette. Now you can place the tiles on the map. Please, always take notice of what layer you are drawing on, because the layers play different roles:&lt;br /&gt;
*Use a layer beneath the &amp;quot;Fringe&amp;quot; layer for tiles without transparency. The layers beneath fringe have to be filled completely before you can call the map finished. When there are partially transparent tiles without completely opaque tiles on a layer below, strange graphic bugs will appear in the empty area.&lt;br /&gt;
*The &amp;quot;Fringe&amp;quot; Layer itself is for oversized tiles which have to be drawn in front of or behind moving objects, depending on their location. This sorting takes up CPU, making the game run slower. Thus, you should only use this layer for the tiles which have to use it.&lt;br /&gt;
*Layers above the &amp;quot;Fringe&amp;quot; layer are always drawn over the map sprites. It should be used for objects which are meant to look as if they are far above the game area. Keep in mind that there are also monsters which are larger than player characters.&lt;br /&gt;
*The &amp;quot;Collision&amp;quot; Layer isn&#039;t displayed in the game. It contains information about which parts of the map are walkable and which aren&#039;t. Don&#039;t put any tiles on this layer except for the red collision tiles from the collision tileset.&lt;br /&gt;
&lt;br /&gt;
When you are finished with your map, you have to determine which tiles are walkable and which aren&#039;t. To do so, mark all tiles you want to be blocked with the red squares from the collision tileset on the collision layer. Be careful that even if a tile is not reachable, but is walkable, the server can spawn monsters there which can not be killed by the players because they can&#039;t reach them. This will eventually lead to all monsters accumulating in the unreachable area until there are no monsters left in the reachable areas. &lt;br /&gt;
&lt;br /&gt;
You can check if you did this properly by saving the map, zooming out until the entire map is visible, hiding all layers except for the collision layer, and then using the flood fill tool with the cross tile on the empty area. Any tiles which are still unmarked are not reachable by the players.&lt;br /&gt;
&lt;br /&gt;
Be aware that you need a border of about 20 tiles in every direction that should not be walkable, but should be designed properly ([[Map development/Border|diagram]]). Portals to other maps should only be some tiles wide. (You can&#039;t define the portals with Tiled, by the way. Leave this to the server administrators. The same applies to monster population, NPCs and other interactive objects.)&lt;br /&gt;
&lt;br /&gt;
=== Testing your map ===&lt;br /&gt;
&lt;br /&gt;
To test your map, you have to replace one of the maps in your TMW folder (in the sub folder data/maps). When you start the game and go to the map you replaced you will see your new map. You will see monsters and other players on the map, but don&#039;t worry-- the other players still see their version of the map, and they won&#039;t see you walk through walls. Just ignore them while you explore your map.&lt;br /&gt;
&lt;br /&gt;
Sometimes your changed map is overridden by a new version of the map in the updates. In that case, you won&#039;t see any changes when you change or even remove a map. When you encounter this problem, either skip the update loading by starting tmw with the parameter &amp;quot;-u&amp;quot;, or delete the file you want to change in all the zip archives you find in the subfolder /updates/.&lt;br /&gt;
&lt;br /&gt;
== Intermediate topics ==&lt;br /&gt;
&lt;br /&gt;
=== Over sized tiles ===&lt;br /&gt;
&lt;br /&gt;
You might have noticed the tilesets ending with _x2.png or _x3.png contain graphics that are two or three tiles high. The graphics engine recognizes these oversized tiles when they are placed and automatically draws sprites in front of them when they are south of them and behind them when they are north of them. When importing a _x2 tileset, set the tile height to 64; when importing a _x3 tileset, set it to 96.&lt;br /&gt;
&lt;br /&gt;
=== The Stamp ===&lt;br /&gt;
&lt;br /&gt;
The Stamp Feature is a powerful feature of Tiled that is hard to find but can save a lot of time. It allows you to do quick copy/pasting of a part of a layer. This allows you to draw objects consisting of multiple tiles very quick. Just select the pen tool, press the right mouse button, and drag the mouse over the tiles you want to copy. Now you can draw the whole square of tiles over and over again with a single left click. To return to the normal drawing mode, just select the pen tool again or choose a tile from the tile palette.&lt;br /&gt;
&lt;br /&gt;
=== Making two maps with a fluent transition ===&lt;br /&gt;
&lt;br /&gt;
When you create an outdoor map, it is most likely supposed to be adjacent to an existing map. In this case, the transmission from one map to the other should be as seamless as possible. This can only be reached when the border areas of both maps are identical. Unfortunately, Tiled can&#039;t copy/paste between different maps (well, it is possible, but it only works correctly when both maps use exactly the same tilesets in exactly the same order), so we developed a command-line based program called TMXcopy for this task. You can find the sourcecode on the GIT repository in the folder http://gitorious.org/tmw/mainline/trees/master/tools/tmxcopy . A compiled windows binary can be found at http://www.crushnet.org/TempFiles/tmw/tmxcopy.zip .&lt;br /&gt;
&lt;br /&gt;
An introduction on how to use this program is described in its [http://gitorious.org/tmw/mainline/blobs/HEAD/tools/tmxcopy/readme.txt readme file].&lt;br /&gt;
&lt;br /&gt;
To create a map adjacent to an existing one, you should:&lt;br /&gt;
# Create the new map as described above, and save it.&lt;br /&gt;
# Use TMXcopy to copy the border area of the old map to the opposite side of the new map. The area should have the double width of the unwalkable area.&lt;br /&gt;
# Open the new map and check if the copying worked correctly. Then modify the lower three layers of the copied area to fit into your map. While doing so, you should focus on the half of the new area that is inside the walkable area of your map. The half that lies in the border zone of your map should not be modified too much because it is part of the old map.&lt;br /&gt;
# Use TMXCopy to copy the new area from the new map back to the old map.&lt;br /&gt;
# Update the collision layers on both maps.&lt;br /&gt;
&lt;br /&gt;
Now the border area should be visually identical on both maps. The only difference should be that the unwalkable areas are switched. When sending the map to the team, remember to include the new version of the old map.&lt;br /&gt;
&lt;br /&gt;
=== Ambient effects ===&lt;br /&gt;
[[Image:Maptutorial_Overlayproperties.png|right|Example for 3 independent scrolling overlays]]&lt;br /&gt;
Ambient Effects are a new feature in TMW 0.0.21. They are either background images drawn at places where you place no tiles or tiles with transparency or they are transparent graphics that will be drawn over your map. All these graphics can scroll independent. They can be used to create a variety of special effects like weather, darkness etc.&lt;br /&gt;
&lt;br /&gt;
To add ambient effects to your map open your map with Tiled and click Map-&amp;gt;Properties to open the map properties dialog. The dialog is a little bit buggy in the current version of Tiled, so make sure that the property has really been set before you save the map. Pressing enter after entering each key and value helps... sometimes. &lt;br /&gt;
&lt;br /&gt;
==== adding foreground images ====&lt;br /&gt;
First you have to choose an image. Do so by adding a key &#039;&#039;foreground0image&#039;&#039; and set its value to the path of the image that you want to use relative to the data directory. For the spotlight effect for example enter &#039;&#039;/graphics/images/ambient/spotlight.png&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
When you want the image to move permanently add the new keys &#039;&#039;foreground0scrollX&#039;&#039; and &#039;&#039;foreground0scrollY&#039;&#039; followed by a number (can be a decimal value). &#039;&#039;foreground0scrollX&#039;&#039; determines the scroll speed to the right (negative values mean scrolling to the left) and &#039;&#039;foreground0scrollY&#039;&#039; the scroll speed down (negative values mean up). both values are in pixels per frame. &lt;br /&gt;
&lt;br /&gt;
You can also define a &#039;&#039;foreground0parallax&#039;&#039; parameter. This parameter affects how much the overlay scrolls when the screen scrolls. A value of 1.0 means that the overlay will stay relative to the ground when the screen scrolls. A value of 0.0 means that the overlay stays relative to the &amp;quot;camera&amp;quot; and is not affected by scrolling. It is a decimal value so you can set it to values between 1 and 0 to create the three dimensional illusion of a layer between the &amp;quot;camera&amp;quot; and the map.&lt;br /&gt;
&lt;br /&gt;
When using foregrounds at different resolutions, some would become disproportioned (for instance, the halo in cave maps that had to fill the screen repeated it self in higher resolution than 800x600.). That why, the keepratio parameter has been added: It will scaled up or down the image based on the current resolution.&lt;br /&gt;
&lt;br /&gt;
Remember that the scaling factor is based on the default 800x600 resolution, so new overlay images are to be fitted for that resolution to make this parameter work.&lt;br /&gt;
(The image scaling in 1024x768 resolution mode, for instance, will be calculated this way: New Image Width = image-width / 800 * 1024, New Image Height = image-height / 600 * 768).&lt;br /&gt;
&lt;br /&gt;
To add this parameter to your foreground configuration, you&#039;ll have to define the &#039;&#039;foreground0keepratio&#039;&#039; to the &#039;&#039;true&#039;&#039; value.&lt;br /&gt;
&lt;br /&gt;
You can create any number of independent foreground graphics. To define a 2nd one create keys with 1 instead of 0, for a 3rd one 2, and so on. For instance &#039;&#039;foreground2parallax&#039;&#039; for the third foreground parallax value.&lt;br /&gt;
&lt;br /&gt;
The foregrounds won&#039;t appear in Tiled. They will only appear in the game.&lt;br /&gt;
&lt;br /&gt;
When it doesn&#039;t work please check that all key names are written correctly (they are cAsEsEnSiTiVe) and that the numbers of the foreground are consecutive starting from 0.&lt;br /&gt;
&lt;br /&gt;
When you want to create foreground images yourself (transparent 32bit png graphics of any size) please don&#039;t forget to make them transparent with your image manipulation program. Otherwise the player won&#039;t be able to see the map under it. An opacity of 50% should be the absolute maximum. When you want to create effects that are not meant to obstruct the players view use an opacity between 10% and 20%.&lt;br /&gt;
&lt;br /&gt;
For historical reasons you can also use &amp;quot;overlay&amp;quot; in place of &amp;quot;foreground&amp;quot;. You will notice this annotation in older map files. Please don&#039;t do it and use &amp;quot;foreground&amp;quot; instead, &amp;quot;overlay&amp;quot; is depreciated.&lt;br /&gt;
&lt;br /&gt;
==== adding background images====&lt;br /&gt;
&lt;br /&gt;
Backgrounds are added in the same way foregrounds are, with the exceptions that the property keys don&#039;t start with the prefix foreground but with background. They use their own numbering, so you have to number your backgrounds 0, 1, 2 etc. no matter if you have foregrounds or not.&lt;br /&gt;
 &#039;&#039;background0image&#039;&#039;&lt;br /&gt;
 &#039;&#039;background0scrollY&#039;&#039;&lt;br /&gt;
 &#039;&#039;background0scrollX&#039;&#039;&lt;br /&gt;
 &#039;&#039;background0keepratio&#039;&#039;&lt;br /&gt;
In contrary to all other fore- or background images the first background (background0image) must not have any transparency but should be 100% opaque. Otherwise ugly graphic bugs will appear.&lt;br /&gt;
&lt;br /&gt;
=== Particle effects ===&lt;br /&gt;
&lt;br /&gt;
Check out the article about the [[Particle engine]] for a description about how to add particle effects to your map and how to create new particle effects when the effect you need doesn&#039;t exist yet.&lt;br /&gt;
&lt;br /&gt;
=== Animated tiles ===&lt;br /&gt;
To make a type of tiles animated go to Tilesets-&amp;gt;Tileset Manager. Then select the tileset with the tile and all of its animation frames (they have to be on one tileset) and click on the icon with a pencil on a piece of paper (the tooltip reads &amp;quot;Edit...&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Select the tile you want to be animated on the list to the left. You should see a table on the right with two columns named &amp;quot;Name&amp;quot; and &amp;quot;Value&amp;quot;. You have to describe the animation of the tile in this table. Here an example for a 3-phase animation:&lt;br /&gt;
&lt;br /&gt;
 NAME              VALUE&lt;br /&gt;
 animation-frame0  0&lt;br /&gt;
 animation-delay0  100&lt;br /&gt;
 animation-frame1  16&lt;br /&gt;
 animation-delay1  100&lt;br /&gt;
 animation-frame2  48&lt;br /&gt;
 animation-delay2  100&lt;br /&gt;
&lt;br /&gt;
animation-frameX is the Tile number (as shown in the list on the left) and animation-delayX is how long it is shown (100 is equal to one second).&lt;br /&gt;
&lt;br /&gt;
The animation does not show up in Tiled.&lt;br /&gt;
&lt;br /&gt;
== Advanced Topics/Adding a map to the server ==&lt;br /&gt;
To get the server to use your new map without replacing the old one, you&#039;ll have to create a wlk file (see below).  Then edit the data/resnametable.txt file, you&#039;ll notice the pattern.  Finally, in the npc directory create a directory for your new map, and create a file named _import.txt with the contents:&lt;br /&gt;
&lt;br /&gt;
    map: &amp;lt;map_name&amp;gt;.gat&lt;br /&gt;
&lt;br /&gt;
In npc/_import.txt include your new _import.txt file like all the others.&lt;br /&gt;
&lt;br /&gt;
The clients still need direct access to the tmw file.  To do this put it in an udpate or put it in the ~/.tmw/maps/ directory for every client that needs access to the map.&lt;br /&gt;
&lt;br /&gt;
=== Creating the WLK files ===&lt;br /&gt;
You can either use the tool found in the tools/tmwcon/ directory of the server-data package or use the export plugin that ships with recent java versions of tiled.  To use the export plugin go file-&amp;gt;Save As and under filetype select the wlk extention, or just name the file with that extention.&lt;br /&gt;
&lt;br /&gt;
== Creating a Minimap ==&lt;br /&gt;
&lt;br /&gt;
The Creation of a minimap is a task that requires an image manipulation software that supports multiple layers and the PNG format (we recommend [http://www.gimp.org GIMP]). When you are not familiar with using one you should ask one of the artists to create a minimap for your map. When you want to create your own minimap then you should exactly follow the following steps to ensure to stay in style with the rest of the minimaps:&lt;br /&gt;
#Open your map with tiled, zoom out until the whole map is visible and use the &amp;quot;save as image&amp;quot; option.&lt;br /&gt;
#Open the image with your image manipulation program.&lt;br /&gt;
#Resize it so that one pixel represents one tile. When your map is for example 160x100 tiles large (including border zone) your picture should be 160x100 pixels large.&lt;br /&gt;
#Create a new transparent layer over the existing one.&lt;br /&gt;
#Select the pencil tool with a brush size of 1x1 pixel and with the color #000000 (pure black). Anti aliasing should be deactivated when available.&lt;br /&gt;
#Now draw lines on the new layer along the following map features:&lt;br /&gt;
#*Cliffs and walls (lower and upper edge)&lt;br /&gt;
#*River/lake shores&lt;br /&gt;
#*Roads (both sides of the road as single lines)&lt;br /&gt;
#*The border of any other large map structure that you feel should be on the map&lt;br /&gt;
#Trees or other objects can be represented by single pixels with 50% alpha transparency when there are so many that they affect the game play on the map.&lt;br /&gt;
#When you are finished remove the background layer. Now only the black lines should be visible&lt;br /&gt;
#Resize the image so the sides are half (50%) as long. You should use the best image filtering method available (cubic filtering in GIMP).&lt;br /&gt;
#Save your finished minimap as a PNG image with 32bit color depth and alpha transparency as *your_tmw_folder*/data/graphics/minimaps/*mapname*.png. &lt;br /&gt;
#Open your map with Tiled, click Map-&amp;gt;Properties in the menu bar and add a new property with the key &amp;quot;minimap&amp;quot; and the value &amp;quot;/graphics/minimaps/*mapname*.png&amp;quot;. The properties dialog is a little bit buggy in the current version of Tiled, so make sure that the property has really been set before you save the map.&lt;br /&gt;
#Send us both the map and the minimap image&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;While this is indeed exactly the way I also created the earlier cave and desert minimaps, I am not entirely happy with this method. Mostly because the final result is a really tiny image, without the ability to easily make versions of it on other scales. I would therefore suggest we try to create future minimaps in vector format using Inkscape. The technique would be similar, placing a scaled down version of the map in the background and drawing black lines on top. The result should however be an image that can take any scale. This would allow us both to put more detail in the minimap for larger scales, and to include a zooming feature (or similar) in the game so that notes and other marks can be placed on the map with higher precision.&#039;&#039; --[[User:BjÃ¸rn|BjÃ¸rn]] 16:04, 16 August 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Sending the map to the dev team ==&lt;br /&gt;
&lt;br /&gt;
There are many ways to send us your map so we can include it in the next release.&lt;br /&gt;
;E-Mail: Mail your map to the developers mailing list themanaworld-devel@lists.sourceforge.net. Before you can do so you have to subscribe to it. This is a precaution against spam. You can do so on https://lists.sourceforge.net/lists/listinfo/themanaworld-devel&lt;br /&gt;
;IRC: Join our [irc://irc.freenode.net/themanaworld IRC Channel]. When you are not familiar with irc you can find a guide in this [http://forums.themanaworld.org/viewtopic.php?t=747 Forum Thread]. When you are in the channel ask a developer if you can send him your map using DCC or upload your map to a webspace or one click hoster and give us the link.&lt;br /&gt;
;Forum: Upload your map to any webspace or one click hoster. An overview graphic (can be created with Tileds &amp;quot;Save as Image&amp;quot; feature) would be nice, too. Visit our [http://forums.themanaworld.org/viewforum.php?f=9 Forum] and register a new account. Then open a new thread, introduce yourself and post a link to your map. &lt;br /&gt;
&lt;br /&gt;
Please understand that we will most likely have some details we would like to have changed before we release your map. so please check back or leave some information how to contact you.&lt;br /&gt;
&lt;br /&gt;
== Hints for good mapping ==&lt;br /&gt;
&lt;br /&gt;
* Before you start with a map you should have a loose idea of the layout. Making a sketch of the map on a piece of paper can be very useful.&lt;br /&gt;
* Don&#039;t put too many similar objects on one screen. Very eye catching tiles should only be used sparingly. Try to break up large areas with the same tile over and over again by throwing in some objects.&lt;br /&gt;
* Avoid regular patterns in natural environments. Trees usually don&#039;t grow in grid patterns. Rivers, mountain ridges or corridors in caves should never be completely straight.&lt;br /&gt;
* Don&#039;t map too functional. Give the players something to look at, even when it hasn&#039;t got any relevance for the gameplay.&lt;br /&gt;
* But keep the playability in mind.&lt;br /&gt;
&lt;br /&gt;
{|-&lt;br /&gt;
| A bad mapping style:&lt;br /&gt;
| A better mapping style:&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Badmap.png]]&lt;br /&gt;
| [[Image:Goodmap.png]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Item_Reference/Head_Armor&amp;diff=23752</id>
		<title>Item Reference/Head Armor</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Item_Reference/Head_Armor&amp;diff=23752"/>
		<updated>2012-05-24T20:20:59Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: After discussion in #tmw-private it was decided that dev caps will still be given together with push access to the main repositories.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Category playerinfo}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Item Reference Page}}&lt;br /&gt;
&lt;br /&gt;
The items are sorted first by defense, then by magic bonus, then by price, then by ID.&lt;br /&gt;
&lt;br /&gt;
==Head Armor==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Image&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Name (ID)&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | DEF&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | BUY/Sell&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Weight&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; width=&amp;quot;350px&amp;quot; | Description&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Rarity&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-paperbag.png]]&lt;br /&gt;
| Paper Bag &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1218)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;Agility -1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -1&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;5 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A paper bag with eye holes.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-mouboohead.png]]&lt;br /&gt;
| Mouboo Head &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1216)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 10 GP&amp;lt;br&amp;gt;1 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 80&lt;br /&gt;
| A tightly fitting mouboo head.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-moubootaurhead.png]]&lt;br /&gt;
| Moubootaur Head &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1219)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 10 GP&amp;lt;br&amp;gt;1 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 80&lt;br /&gt;
| The Moubootaur&#039;s head.&lt;br /&gt;
| Unobtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-bunchofparsley.png]]&lt;br /&gt;
| Bunch Of Parsley &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1220)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;Deaf&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 3 GP&amp;lt;br&amp;gt;1 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| A bunch of parsley, useful for salads and many other dishes. In a pinch, it doubles as earplugs.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-pinkiehat.png]]&lt;br /&gt;
| Pinkie Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(751)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +1&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 5,000 GP&amp;lt;br&amp;gt;1,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| With this, you&#039;ll fit right in with those strange pinkies.&lt;br /&gt;
| Rare drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-catears.png]]&lt;br /&gt;
| Cat Ears &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1217)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;Agility +3&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +1&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 50 GP&amp;lt;br&amp;gt;2 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A pair of plush cat ears.&lt;br /&gt;
| [[Cat Ears Quest|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-fluffyhat.png]]&lt;br /&gt;
| Fluffy Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(752)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 7,000 GP&amp;lt;br&amp;gt;2,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| Now you can wear fur on your head.&lt;br /&gt;
| Rare drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-santahat.png]]&lt;br /&gt;
| Santa Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(511)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 400 GP&amp;lt;br&amp;gt;200 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| Ask Santa about this hat.&lt;br /&gt;
| [[Quest Of Snowman|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-earmuffs.png]]&lt;br /&gt;
| Earmuffs &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(848)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -1&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| This earmuffs can keep your ears enjoyably warm.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-rangerhat.png]]&lt;br /&gt;
| Ranger Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1203)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -1&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A leather hat traditionally worn by Rangers.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-goggles.png]]&lt;br /&gt;
| Goggles &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(618)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 500 GP&amp;lt;br&amp;gt;100 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| Goggles designed to take care of your eyes.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-serf.png]]&lt;br /&gt;
| Serf Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(656)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 500 GP&amp;lt;br&amp;gt;100 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A simple hat made from cloth.&lt;br /&gt;
| Buyable, [[Aidan And Ishi&#039;s Monster Points|Ishi]], [[Tulimshar Quests|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-gradcap.png]]&lt;br /&gt;
| Graduation Cap &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(675)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;255 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A traditional cap which a university student may wear upon graduating.&lt;br /&gt;
| [[Newbie Graduation|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-cottonheadband.png]]&lt;br /&gt;
| Cotton Headband &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(724)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyable]]&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 3,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| Just a cotton headband. [[Selim The Dyer|Dyable]]&lt;br /&gt;
| Buyable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-redcottonheadband.png]]&lt;br /&gt;
| Red Cotton Headband &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2140)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 3,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| Just a red cotton headband.&lt;br /&gt;
| Buyable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-greencottonheadband.png]]&lt;br /&gt;
| Green Cotton Headband &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2141)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 3,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| Just a green cotton headband.&lt;br /&gt;
| Buyable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-darkbluecottonheadband.png]]&lt;br /&gt;
| Dark Blue Cotton Headband &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2142)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 3,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| Just a dark blue cotton headband.&lt;br /&gt;
| Buyable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-yellowcottonheadband.png]]&lt;br /&gt;
| Yellow Cotton Headband &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2143)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 3,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| Just a yellow cotton headband.&lt;br /&gt;
| Buyable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-lightbluecottonheadband.png]]&lt;br /&gt;
| Light Blue Cotton Headband &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2144)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 3,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| Just a light blue cotton headband.&lt;br /&gt;
| Buyable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-pinkcottonheadband.png]]&lt;br /&gt;
| Pink Cotton Headband &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2145)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 3,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| Just a pink cotton headband.&lt;br /&gt;
| Buyable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-blackcottonheadband.png]]&lt;br /&gt;
| Black Cotton Headband &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2146)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 3,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| Just a black cotton headband.&lt;br /&gt;
| Buyable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-orangecottonheadband.png]]&lt;br /&gt;
| Orange Cotton Headband &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2147)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 3,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| Just an orange cotton headband.&lt;br /&gt;
| Buyable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-purplecottonheadband.png]]&lt;br /&gt;
| Purple Cotton Headband &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2148)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 3,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| Just a purple cotton headband.&lt;br /&gt;
| Buyable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-darkgreencottonheadband.png]]&lt;br /&gt;
| Dark Green Cotton Headband &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2149)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 3,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| Just a dark green cotton headband.&lt;br /&gt;
| Buyable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-monocle.png]]&lt;br /&gt;
| Monocle &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4031)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;Dexterity +1 / Luck +1 / Critical +20&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 5,000 GP&amp;lt;br&amp;gt;2,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A handy perception tool, even when not at the opera.&lt;br /&gt;
| Unreleased&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-christmastree.png]]&lt;br /&gt;
| Christmas Tree Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1205)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +4&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,000 GP&amp;lt;br&amp;gt;1,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A hat shaped like a Christmas tree.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-facemask.png]]&lt;br /&gt;
| Skull Mask &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1221)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 10,000 GP&amp;lt;br&amp;gt;5,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 150&lt;br /&gt;
| A mask made out of bones.&lt;br /&gt;
| Rare drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-sunglasses.png]]&lt;br /&gt;
| Sunglasses &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(855)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +6&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| Some stealthy sunglasses hiding your eyes from skeptical eyes.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-standardheadband.png]]&lt;br /&gt;
| Standard Headband &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(543)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -3&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 800 GP&amp;lt;br&amp;gt;400 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A standard headband.&lt;br /&gt;
| Frequent drop, Buyable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-leathergoggles.png]]&lt;br /&gt;
| Leather Goggles &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(619)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| Goggles designed for desert storms.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-eyepatch.png]]&lt;br /&gt;
| Eyepatch &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(621)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| What really makes you a pirate.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-bandana.png]]&lt;br /&gt;
| Bandana &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(622)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A striped bandana.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:armor-head-deserthat.png]]&lt;br /&gt;
| Desert Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(723)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyable]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -1&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,400 GP&amp;lt;br&amp;gt;600 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| While the desert hat is perfect for sand storms, it won&#039;t help you much against a blow to the head. [[Selim The Dyer|Dyable]]&lt;br /&gt;
| Buyable, [[Lora Tay The Legendary Seamstress|Tailorable]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:armor-head-reddeserthat.png]]&lt;br /&gt;
| Red Desert Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2130)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -1&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,400 GP&amp;lt;br&amp;gt;600 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| While the red desert hat is perfect for sand storms, it won&#039;t help you much against a blow to the head.&lt;br /&gt;
| Buyable, [[Lora Tay The Legendary Seamstress|Tailorable]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:armor-head-greendeserthat.png]]&lt;br /&gt;
| Green Desert Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2131)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -1&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,400 GP&amp;lt;br&amp;gt;600 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| While the green desert hat is perfect for sand storms, it won&#039;t help you much against a blow to the head.&lt;br /&gt;
| Buyable, [[Lora Tay The Legendary Seamstress|Tailorable]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:armor-head-darkbluedeserthat.png]]&lt;br /&gt;
| Dark Blue Desert Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2132)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -1&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,400 GP&amp;lt;br&amp;gt;600 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| While the dark blue desert hat is perfect for sand storms, it won&#039;t help you much against a blow to the head.&lt;br /&gt;
| Buyable, [[Lora Tay The Legendary Seamstress|Tailorable]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:armor-head-yellowdeserthat.png]]&lt;br /&gt;
| Yellow Desert Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2133)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -1&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,400 GP&amp;lt;br&amp;gt;600 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| While the yellow desert hat is perfect for sand storms, it won&#039;t help you much against a blow to the head.&lt;br /&gt;
| Buyable, [[Lora Tay The Legendary Seamstress|Tailorable]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:armor-head-lightbluedeserthat.png]]&lt;br /&gt;
| Light Blue Desert Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2134)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -1&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,400 GP&amp;lt;br&amp;gt;600 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| While the light blue desert hat is perfect for sand storms, it won&#039;t help you much against a blow to the head.&lt;br /&gt;
| Buyable, [[Lora Tay The Legendary Seamstress|Tailorable]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:armor-head-pinkdeserthat.png]]&lt;br /&gt;
| Pink Desert Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2135)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -1&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,400 GP&amp;lt;br&amp;gt;600 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| While the pink desert hat is perfect for sand storms, it won&#039;t help you much against a blow to the head.&lt;br /&gt;
| Buyable, [[Lora Tay The Legendary Seamstress|Tailorable]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:armor-head-blackdeserthat.png]]&lt;br /&gt;
| Black Desert Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2136)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -1&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,400 GP&amp;lt;br&amp;gt;600 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| While the black desert hat is perfect for sand storms, it won&#039;t help you much against a blow to the head.&lt;br /&gt;
| Buyable, [[Lora Tay The Legendary Seamstress|Tailorable]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:armor-head-orangedeserthat.png]]&lt;br /&gt;
| Orange Desert Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2137)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -1&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,400 GP&amp;lt;br&amp;gt;600 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| While the orange desert hat is perfect for sand storms, it won&#039;t help you much against a blow to the head.&lt;br /&gt;
| Buyable, [[Lora Tay The Legendary Seamstress|Tailorable]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:armor-head-purpledeserthat.png]]&lt;br /&gt;
| Purple Desert Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2138)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -1&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,400 GP&amp;lt;br&amp;gt;600 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| While the purple desert hat is perfect for sand storms, it won&#039;t help you much against a blow to the head.&lt;br /&gt;
| Buyable, [[Lora Tay The Legendary Seamstress|Tailorable]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:armor-head-darkgreendeserthat.png]]&lt;br /&gt;
| Dark Green Desert Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2139)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -1&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,400 GP&amp;lt;br&amp;gt;600 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| While the dark green desert hat is perfect for sand storms, it won&#039;t help you much against a blow to the head.&lt;br /&gt;
| Buyable, [[Lora Tay The Legendary Seamstress|Tailorable]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-knitcap.png]]&lt;br /&gt;
| Knit Cap &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(854)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 50&lt;br /&gt;
| A knitted cap keeping your head warm in the crual cold.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-nohmask.png]]&lt;br /&gt;
| Noh Mask &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(678)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +1&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 7,000 GP&amp;lt;br&amp;gt;1,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 18&lt;br /&gt;
| A mask made out of bones.&lt;br /&gt;
| [[Robberies In Hurnscald|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-demonmask.png]]&lt;br /&gt;
| Demon Mask &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(679)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 10,000 GP&amp;lt;br&amp;gt;5,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 23&lt;br /&gt;
| A scary mask to make you look like a demon.&lt;br /&gt;
| [[Demon Mask|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-elfnightcap.png]]&lt;br /&gt;
| Elf Nightcap &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(854)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 50&lt;br /&gt;
| A comfortable nightcap worn by Santa&#039;s helpers.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-guyfawkesmask.png]]&lt;br /&gt;
| Guy Fawkes Mask &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(769)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| The famous Guy Fawkes mask.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-operamask.png]]&lt;br /&gt;
| Opera Mask &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1276)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 50&lt;br /&gt;
| Pale and broken. There is surely a story to be told here.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-jestermask.png]]&lt;br /&gt;
| Jester Mask &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1277)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 50&lt;br /&gt;
| Laughter with bells on.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-witchhat.png]]&lt;br /&gt;
| Witch Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1278)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 50&lt;br /&gt;
| Big, dark, and pointy. It looks a bit out of place.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-goblinmask.png]]&lt;br /&gt;
| Goblin Mask &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1279)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 50&lt;br /&gt;
| A strange dark mask. Who knows what lurks behind it?&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-witchdoctormask.png]]&lt;br /&gt;
| Witch Doctor&#039;s Mask &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(781)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ? GP&amp;lt;br&amp;gt;? gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A crazy mask from the Voodoo doctor.&lt;br /&gt;
| Unreleased&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-minershat.png]]&lt;br /&gt;
| Miners Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(525)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -8&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 4&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 800 GP&amp;lt;br&amp;gt;400 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 40&lt;br /&gt;
| A hat used by miners.&lt;br /&gt;
| Frequent drop, [[Tulimshar Quests|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-piratehat.png]]&lt;br /&gt;
| Pirate Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(617)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -8&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 4&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,000 GP&amp;lt;br&amp;gt;1,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 40&lt;br /&gt;
| A pirate hat.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-pumpkinhelmet.png]]&lt;br /&gt;
| Pumpkin Helmet &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(615)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -4&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 4&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,000 GP&amp;lt;br&amp;gt;1,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 60&lt;br /&gt;
| A helmet made out of a pumpkin.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-axehat.png]]&lt;br /&gt;
| Axe Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(616)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -4&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 4&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,000 GP&amp;lt;br&amp;gt;1,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 50&lt;br /&gt;
| A really cool joke.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-crown.png]]&lt;br /&gt;
| Crown &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(646)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 4&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 5,000 GP&amp;lt;br&amp;gt;1,000 &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 240&lt;br /&gt;
| A jewel embossed crown fit for any ruler.&lt;br /&gt;
| Unobtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-antlerhat.png]]&lt;br /&gt;
| Antler Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1204)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 4&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 15&lt;br /&gt;
| A hat with antlers sticking out of it.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-circlet.png]]&lt;br /&gt;
| Circlet &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(620)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 4&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,000 GP&amp;lt;br&amp;gt;1,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 25&lt;br /&gt;
| A nice piece of jewelry.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-highpriest-crown.png]]&lt;br /&gt;
| High Priest Crown &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(721)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;SP +20&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +20&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 4&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 20,000 GP&amp;lt;br&amp;gt;5,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 400&lt;br /&gt;
| A golden crown with an enchanted ruby.&lt;br /&gt;
| Buyable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-yeti-mask.png]]&lt;br /&gt;
| Yeti Mask &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4027)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -10&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 4&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 6,000 GP&amp;lt;br&amp;gt;3,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A mask made from the yeti&#039;s head.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-snowgoggles.png]]&lt;br /&gt;
| Snow Goggles &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1242)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 7,500 GP&amp;lt;br&amp;gt;5,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| Snow goggles to keep your eyeballs from freezing.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-fancyhat.png]]&lt;br /&gt;
| Fancy Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(524)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,600 GP&amp;lt;br&amp;gt;800 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A Fancy Hat.&lt;br /&gt;
| Buyable, Frequent drop, [[Aidan And Ishi&#039;s Monster Points|Ishi]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-newcap.png]]&lt;br /&gt;
| Cap &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(654)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A hat with a peak to shield your eyes from the sun.&lt;br /&gt;
| Buyable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-santabeardhat.png]]&lt;br /&gt;
| Santa Beard Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1206)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| Now you will look just like Santa Claus!&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-devcap.png]]&lt;br /&gt;
| Developers Cap &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(647)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A cap which identifies you as a developer.&lt;br /&gt;
| [[User:Fate/Becoming_a_developer|Special quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-gmcap.png]]&lt;br /&gt;
| GM Cap &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(725)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A hat with a peak to shield your eyes from the sun.&lt;br /&gt;
| GM only&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-rabbit ears.png]]&lt;br /&gt;
| White Rabbit Ears &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1255)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyable]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +4&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 7,000 GP&amp;lt;br&amp;gt;5,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A headband with rabbit ears, pure white.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-redrabbitears.png]]&lt;br /&gt;
| Red Rabbit Ears &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2190)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +4&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 7,000 GP&amp;lt;br&amp;gt;5,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 15&lt;br /&gt;
| A headband with rabbit ears, bright red.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-greenrabbitears.png]]&lt;br /&gt;
| Green Rabbit Ears &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2191)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +4&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 7,000 GP&amp;lt;br&amp;gt;5,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 15&lt;br /&gt;
| A headband with rabbit ears, warm green.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-darkbluerabbitears.png]]&lt;br /&gt;
| Dark Blue Rabbit Ears &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2192)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +4&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 7,000 GP&amp;lt;br&amp;gt;5,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 15&lt;br /&gt;
| A headband with rabbit ears, iridescent dark blue.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-yellowrabbitears.png]]&lt;br /&gt;
| Yellow Rabbit Ears &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2193)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +4&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 7,000 GP&amp;lt;br&amp;gt;5,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 15&lt;br /&gt;
| A headband with rabbit ears, soft yellow.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-lightbluerabbitears.png]]&lt;br /&gt;
| Light Blue Rabbit Ears &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2194)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +4&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 7,000 GP&amp;lt;br&amp;gt;5,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 15&lt;br /&gt;
| A headband with rabbit ears, light blue.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-pinkrabbitears.png]]&lt;br /&gt;
| Pink Rabbit Ears &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2195)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +4&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 7,000 GP&amp;lt;br&amp;gt;5,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 15&lt;br /&gt;
| A headband with rabbit ears, bright pink.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-blackrabbitears.png]]&lt;br /&gt;
| Black Rabbit Ears &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2196)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +4&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 7,000 GP&amp;lt;br&amp;gt;5,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 15&lt;br /&gt;
| A headband with rabbit ears, deep black.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-orangerabbitears.png]]&lt;br /&gt;
| Orange Rabbit Ears &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2197)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +4&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 7,000 GP&amp;lt;br&amp;gt;5,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 15&lt;br /&gt;
| A headband with rabbit ears, bright orange.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-purplerabbitears.png]]&lt;br /&gt;
| Purple Rabbit Ears &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2198)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +4&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 7,000 GP&amp;lt;br&amp;gt;5,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 15&lt;br /&gt;
| A headband with rabbit ears, strong purple.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-darkgreenrabbitears.png]]&lt;br /&gt;
| Dark Green Rabbit Ears &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2199)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +4&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 7,000 GP&amp;lt;br&amp;gt;5,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 15&lt;br /&gt;
| A headband with rabbit ears, deep green.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-wizardhat.png]]&lt;br /&gt;
| Wizard Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4028)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;Intelligence +3&amp;lt;/span&amp;gt; - [[Selim The Dyer|Dyable]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 5,000 GP&amp;lt;br&amp;gt;2,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A wizard hat. &lt;br /&gt;
| [[Angela&#039;s Daughter|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-redwizardhat.png]]&lt;br /&gt;
| Red Wizard Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2200)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;Intelligence +3&amp;lt;/span&amp;gt; - [[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 5,000 GP&amp;lt;br&amp;gt;2,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A wizard hat, bright red.&lt;br /&gt;
| [[Angela&#039;s Daughter|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-greenwizardhat.png]]&lt;br /&gt;
| Green Wizard Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2201)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;Intelligence +3&amp;lt;/span&amp;gt; - [[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 5,000 GP&amp;lt;br&amp;gt;2,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A wizard hat, warm green.&lt;br /&gt;
| [[Angela&#039;s Daughter|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-darkbluewizardhat.png]]&lt;br /&gt;
| Dark Blue Wizard Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2202)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;Intelligence +3&amp;lt;/span&amp;gt; - [[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 5,000 GP&amp;lt;br&amp;gt;2,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A wizard hat, iridescent dark blue.&lt;br /&gt;
| [[Angela&#039;s Daughter|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-yellowwizardhat.png]]&lt;br /&gt;
| Yellow Wizard Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2203)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;Intelligence +3&amp;lt;/span&amp;gt; - [[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 5,000 GP&amp;lt;br&amp;gt;2,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A wizard hat, soft yellow.&lt;br /&gt;
| [[Angela&#039;s Daughter|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-lightbluewizardhat.png]]&lt;br /&gt;
| Light Blue Wizard Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2204)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;Intelligence +3&amp;lt;/span&amp;gt; - [[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 5,000 GP&amp;lt;br&amp;gt;2,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A wizard hat, light blue.&lt;br /&gt;
| [[Angela&#039;s Daughter|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-pinkwizardhat.png]]&lt;br /&gt;
| Pink Wizard Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2205)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;Intelligence +3&amp;lt;/span&amp;gt; - [[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 5,000 GP&amp;lt;br&amp;gt;2,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A wizard hat, bright pink.&lt;br /&gt;
| [[Angela&#039;s Daughter|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-blackwizardhat.png]]&lt;br /&gt;
| Black Wizard Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2206)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;Intelligence +3&amp;lt;/span&amp;gt; - [[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 5,000 GP&amp;lt;br&amp;gt;2,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A wizard hat, deep black.&lt;br /&gt;
| [[Angela&#039;s Daughter|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-orangewizardhat.png]]&lt;br /&gt;
| Orange Wizard Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2207)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;Intelligence +3&amp;lt;/span&amp;gt; - [[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 5,000 GP&amp;lt;br&amp;gt;2,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A wizard hat, bright orange.&lt;br /&gt;
| [[Angela&#039;s Daughter|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-purplewizardhat.png]]&lt;br /&gt;
| Purple Wizard Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2208)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;Intelligence +3&amp;lt;/span&amp;gt; - [[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 5,000 GP&amp;lt;br&amp;gt;2,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A wizard hat, strong purple.&lt;br /&gt;
| [[Angela&#039;s Daughter|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-darkgreenwizardhat.png]]&lt;br /&gt;
| Dark Green Wizard Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2209)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;Intelligence +3&amp;lt;/span&amp;gt; - [[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 5,000 GP&amp;lt;br&amp;gt;2,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A wizard hat, dark green.&lt;br /&gt;
| [[Angela&#039;s Daughter|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-sailorhat.png]]&lt;br /&gt;
| Sailor Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(764)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ? GP&amp;lt;br&amp;gt;? gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| A hat worn by brave sailors.&lt;br /&gt;
| Unreleased&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-cowboywhite.png]]&lt;br /&gt;
| White Cowboy Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(643)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -12&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 6&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,800 GP&amp;lt;br&amp;gt;900 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A white cowboy hat with a band.&lt;br /&gt;
| [[Pachua the Hermit Indian|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-cowboyblack.png]]&lt;br /&gt;
| Black Cowboy Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(644)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -12&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 6&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,800 GP&amp;lt;br&amp;gt;900 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A black cowboy hat with shiny buckles.&lt;br /&gt;
| [[Pachua the Hermit Indian|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-monster-skull-helm.png]]&lt;br /&gt;
| Monster Skull Helmet &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(722)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +10&amp;lt;/span&amp;gt; - &amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Defense +20&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 7&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 15,000 GP&amp;lt;br&amp;gt;3,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 250&lt;br /&gt;
| The conserved skull of a mysterious ancient monster.&lt;br /&gt;
| Buyable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-heartglasses.png]]&lt;br /&gt;
| Heart Glasses &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1247)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 8&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 7,500 GP&amp;lt;br&amp;gt;5,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| Heart Glasses from another universe. Decisions were different there.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-fairyhat.png]]&lt;br /&gt;
| Fairy Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(770)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;Luck +3&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -10&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,000 GP&amp;lt;br&amp;gt;1,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| The famous hat worn by Robin Hood.&lt;br /&gt;
| [[Bandit Quest|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-pinkiehelmet.png]]&lt;br /&gt;
| Pinkie Helmet &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(801)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;Luck +1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -20&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 20,000 GP&amp;lt;br&amp;gt;1,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 800&lt;br /&gt;
| A helmet of Pinkie warriors.&lt;br /&gt;
| [[Headless Man&#039;s Helmet|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-silkheadband.png]]&lt;br /&gt;
| Silk Headband &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(544)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -10&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 10,000 GP&amp;lt;br&amp;gt;2,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A cool headband made of silk.&lt;br /&gt;
| Frequent drop, Buyable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-mushroomhat.png]]&lt;br /&gt;
| Mush Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(629)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| Soft and fashionable.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-mask.png]]&lt;br /&gt;
| Face Mask &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(634)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 50&lt;br /&gt;
| A wooden mask to conceal your face.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-bunnyears.png]]&lt;br /&gt;
| Bunny Ears &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1214)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +1&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 5,000 GP&amp;lt;br&amp;gt;2,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A headband with plush bunny ears.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-tophat.png]]&lt;br /&gt;
| Top Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(627)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| For the gentry of The Mana World.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-bowlerhat.png]]&lt;br /&gt;
| Bowler Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4030)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyable]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A hat for those with a bit of class.&lt;br /&gt;
| [[Shannon&#039;s Bowler Hat|Annual Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-redbowlerhat.png]]&lt;br /&gt;
| Red Bowler Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2210)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A hat for those with a bit of class, with a red band.&lt;br /&gt;
| [[Shannon&#039;s Bowler Hat|Annual Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-greenbowlerhat.png]]&lt;br /&gt;
| Green Bowler Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2211)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A hat for those with a bit of class, with a green band.&lt;br /&gt;
| [[Shannon&#039;s Bowler Hat|Annual Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-darkbluebowlerhat.png]]&lt;br /&gt;
| Dark Blue Bowler Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2212)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A hat for those with a bit of class, with a dark blue band.&lt;br /&gt;
| [[Shannon&#039;s Bowler Hat|Annual Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-yellowbowlerhat.png]]&lt;br /&gt;
| Yellow Bowler Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2213)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A hat for those with a bit of class, with a yellow band.&lt;br /&gt;
| [[Shannon&#039;s Bowler Hat|Annual Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-lightbluebowlerhat.png]]&lt;br /&gt;
| Light Blue Bowler Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2214)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A hat for those with a bit of class, with a light blue band.&lt;br /&gt;
| [[Shannon&#039;s Bowler Hat|Annual Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-pinkbowlerhat.png]]&lt;br /&gt;
| Pink Bowler Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2215)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A hat for those with a bit of class, with a pink band.&lt;br /&gt;
| [[Shannon&#039;s Bowler Hat|Annual Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-blackbowlerhat.png]]&lt;br /&gt;
| Black Bowler Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2216)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A hat for those with a bit of class, with a black band.&lt;br /&gt;
| [[Shannon&#039;s Bowler Hat|Annual Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-orangebowlerhat.png]]&lt;br /&gt;
| Orange Bowler Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2217)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A hat for those with a bit of class, with an orange band.&lt;br /&gt;
| [[Shannon&#039;s Bowler Hat|Annual Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-purplebowlerhat.png]]&lt;br /&gt;
| Purple Bowler Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2218)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A hat for those with a bit of class, with a purple band.&lt;br /&gt;
| [[Shannon&#039;s Bowler Hat|Annual Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-darkgreenbowlerhat.png]]&lt;br /&gt;
| Dark Green Bowler Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2219)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A hat for those with a bit of class, with a dark green band.&lt;br /&gt;
| [[Shannon&#039;s Bowler Hat|Annual Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-bowlerhat(brown).png]]&lt;br /&gt;
| Bowler Hat (Brown) &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(800)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyable]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A hat for those with a bit of class.&lt;br /&gt;
| [[Love Triangle Quest|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-redbowlerhat(brown).png]]&lt;br /&gt;
| Red Bowler Hat (Brown) &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2230)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A hat for those with a bit of class, with a red band.&lt;br /&gt;
| [[Love Triangle Quest|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-greenbowlerhat(brown).png]]&lt;br /&gt;
| Green Bowler Hat (Brown) &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2231)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A hat for those with a bit of class, with a green band.&lt;br /&gt;
| [[Love Triangle Quest|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-darkbluebowlerhat(brown).png]]&lt;br /&gt;
| Dark Blue Bowler Hat (Brown) &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2232)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A hat for those with a bit of class, with a dark blue band.&lt;br /&gt;
| [[Love Triangle Quest|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-yellowbowlerhat(brown).png]]&lt;br /&gt;
| Yellow Bowler Hat (Brown) &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2233)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A hat for those with a bit of class, with a yellow band.&lt;br /&gt;
| [[Love Triangle Quest|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-lightbluebowlerhat(brown).png]]&lt;br /&gt;
| Light Blue Bowler Hat (Brown) &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2234)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A hat for those with a bit of class, with a light blue band.&lt;br /&gt;
| [[Love Triangle Quest|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-pinkbowlerhat(brown).png]]&lt;br /&gt;
| Pink Bowler Hat (Brown) &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2235)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A hat for those with a bit of class, with a pink band.&lt;br /&gt;
| [[Love Triangle Quest|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-blackbowlerhat(brown).png]]&lt;br /&gt;
| Black Bowler Hat (Brown) &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2236)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A hat for those with a bit of class, with a black band.&lt;br /&gt;
| [[Love Triangle Quest|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-orangebowlerhat(brown).png]]&lt;br /&gt;
| Orange Bowler Hat (Brown) &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2237)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A hat for those with a bit of class, with a orange band.&lt;br /&gt;
| [[Love Triangle Quest|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-purplebowlerhat(brown).png]]&lt;br /&gt;
| Purple Bowler Hat (Brown) &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2238)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A hat for those with a bit of class, with a purple band.&lt;br /&gt;
| [[Love Triangle Quest|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-darkgreenbowlerhat(brown).png]]&lt;br /&gt;
| Dark Green Bowler Hat (Brown) &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(2239)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;[[Selim The Dyer|Dyed]]&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,500 GP&amp;lt;br&amp;gt;1,250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A hat for those with a bit of class, with a dark green band.&lt;br /&gt;
| [[Love Triangle Quest|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-eggshellhat.png]]&lt;br /&gt;
| Eggshell Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1256)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;Agility -1&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 12&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 7,000 GP&amp;lt;br&amp;gt;5,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 15&lt;br /&gt;
| A novelty hat shaped like an eggshell half.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-shroomhat.png]]&lt;br /&gt;
| Shroom Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(630)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 13&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 3,000 GP&amp;lt;br&amp;gt;1,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| Evil and fashionable.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-funkyhat.png]]&lt;br /&gt;
| Funky Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(628)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 13&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 3,000 GP&amp;lt;br&amp;gt;1,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| Yawn...&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-xmaself.png]]&lt;br /&gt;
| Christmas Elf Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(633)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack +2&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 13&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 3,000 GP&amp;lt;br&amp;gt;1,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A hat worn by christmas elfs.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-infantryhelm.png]]&lt;br /&gt;
| Infantry Helmet &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(638)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -30&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 15&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 15,000 GP&amp;lt;br&amp;gt;1,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 400&lt;br /&gt;
| A helmet for soldiers and guards.&lt;br /&gt;
| Rare drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-bromenalhelmet.png]]&lt;br /&gt;
| Bromenal Helmet &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(795)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -30&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 15&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 15,000 GP&amp;lt;br&amp;gt;1,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 400&lt;br /&gt;
| A hard bromenal helmet.&lt;br /&gt;
| Unreleased&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-knighthelm.png]]&lt;br /&gt;
| Knight&#039;s Helmet &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(637)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -30&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 15&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 20,000 GP&amp;lt;br&amp;gt;2,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 600&lt;br /&gt;
| A helmet with two small wings on it.&lt;br /&gt;
| [[Nicholas The Blacksmith|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Terranite-helmet.png]]&lt;br /&gt;
| Terranite Helmet &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(766)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -12&amp;lt;/span&amp;gt; - &amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Defense +5&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 15&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 200,000 GP&amp;lt;br&amp;gt;3,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 300&lt;br /&gt;
| A magical helmet made out of semi-polished granite that was enchanted to be very light. Great for mages on the battlefield.&lt;br /&gt;
| [[The Terranite Armor|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-captainhat.png]]&lt;br /&gt;
| Captain&#039;s Hat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(765)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 15&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ? GP&amp;lt;br&amp;gt;? gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 8&lt;br /&gt;
| A hat worn by the bravest captains.&lt;br /&gt;
| Unreleased&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-candlehelmet.png]]&lt;br /&gt;
| Candle Helmet &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4020)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;Agility -1 / Intelligence +1&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -25&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 16&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 20,000 GP&amp;lt;br&amp;gt;2,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 450&lt;br /&gt;
| Worn by spelunkers.&lt;br /&gt;
| [[Orum Quest|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-warlordhelm.png]]&lt;br /&gt;
| Warlord Helmet &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(636)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -36&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 18&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 30,000 GP&amp;lt;br&amp;gt;3,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 900&lt;br /&gt;
| Worn by great warriors.&lt;br /&gt;
| [[Nicholas The Blacksmith|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-crusade.png]]&lt;br /&gt;
| Crusade Helmet &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(639)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#007700;&amp;quot;&amp;gt;M. Attack -36&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 18&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 25,000 GP&amp;lt;br&amp;gt;2,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1300&lt;br /&gt;
| Start your own crusade.&lt;br /&gt;
| [[Nicholas The Blacksmith|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-paladinhelmet.png]]&lt;br /&gt;
| Paladin&#039;s Helmet &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(759)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 19&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ? GP&amp;lt;br&amp;gt;? gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 43&lt;br /&gt;
| Worn only by paladins.&lt;br /&gt;
| Unreleased&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-overlordhelm.png]]&lt;br /&gt;
| Overlord Helmet &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(760)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ? GP&amp;lt;br&amp;gt;? gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 45&lt;br /&gt;
| Worn by the greatest warriors.&lt;br /&gt;
| Unreleased&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Armor-head-deserthelmet.png]]&lt;br /&gt;
| Desert Helmet &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(761)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 21&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ? GP&amp;lt;br&amp;gt;? gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 48&lt;br /&gt;
| The perfect desert warriors&#039; helmet.&lt;br /&gt;
| Unreleased&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Item Reference|&amp;lt; Item Reference]]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=User:Fate/Becoming_a_developer&amp;diff=23751</id>
		<title>User:Fate/Becoming a developer</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=User:Fate/Becoming_a_developer&amp;diff=23751"/>
		<updated>2012-05-24T20:16:36Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: After discussion in #tmw-private it was decided that dev caps will still be given together with push access to the main repositories.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Since this question keeps popping up, I&#039;ve decided to put together a brief summary of how (in my experience) someone can become a developer in a Free Software project.  Note that different projects have different cultures, so this advice may not be universal.&lt;br /&gt;
&lt;br /&gt;
As developer, your goal is to &#039;&#039;&#039;maximise your use to the project&#039;&#039;&#039; within what your real life constraints and obligations to other projects allow.  Keep this in mind for all of the following.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
&lt;br /&gt;
First, make sure that you are familiar with the project&#039;s&lt;br /&gt;
* aim&lt;br /&gt;
* principal communication channels&lt;br /&gt;
* organisation&lt;br /&gt;
* technical choices&lt;br /&gt;
&lt;br /&gt;
The last two points, &#039;&#039;organisation&#039;&#039; and &#039;&#039;technical choices&#039;&#039; you need only understand as far as needed for actually interacting with development.&lt;br /&gt;
&lt;br /&gt;
== Starting out ==&lt;br /&gt;
&lt;br /&gt;
Free software developers must be self-reliant.  If you have an idea, chances are that nobody will like it until you&#039;ve finished implementing it (people are silly like that.)&lt;br /&gt;
If you are just starting out, you cannot expect help from the existing developers.&lt;br /&gt;
&lt;br /&gt;
Try to follow the following rules of thumb:&lt;br /&gt;
* Figure things out on your own as much as possible&lt;br /&gt;
* Manage and sanity-check your ideas&lt;br /&gt;
* Allocate time&lt;br /&gt;
** To learn&lt;br /&gt;
** To implement&lt;br /&gt;
&lt;br /&gt;
== Figuring things out ==&lt;br /&gt;
* If you can google for it, don&#039;t ask about it.&lt;br /&gt;
* If it&#039;s documented, don&#039;t ask about it, unless it&#039;s broken.&lt;br /&gt;
* If it&#039;s not in the project&#039;s best interest, don&#039;t even consider it.&lt;br /&gt;
&lt;br /&gt;
== Managing your ideas ==&lt;br /&gt;
* If you think you have a good idea, write it down for yourself first.&lt;br /&gt;
* Check: does this idea introduce security issues or other exploits?&lt;br /&gt;
* Check: is this idea actually useful (or entertaining, for a game)?&lt;br /&gt;
* Check: is this idea usable?&lt;br /&gt;
* Check: does this idea really add something new?&lt;br /&gt;
* Check: does this idea integrate well with the rest of the project?&lt;br /&gt;
* Check: does this idea integrate well with the project&#039;s aim and projected plan?&lt;br /&gt;
* Check: is this idea technically feasible?&lt;br /&gt;
* Check: &#039;&#039;do you have the resources to implement this idea yourself&#039;&#039;?&lt;br /&gt;
&lt;br /&gt;
You can try to answer these questions for yourself or talk them through with your friends.&lt;br /&gt;
If you are just starting out, try to rely on the existing developers&#039; help as little as possible.&lt;br /&gt;
If you need other people&#039;s help, make sure to ask for help politely.  Don&#039;t waste your time on ideas that you cannot implement yourself and that you cannot find help for.  As for requesting help, remember:&lt;br /&gt;
&lt;br /&gt;
* Don&#039;t expect anyone to do your work for you, &#039;&#039;ever&#039;&#039;:&lt;br /&gt;
** Let me repeat that: implementing things is hard work.  Don&#039;t ever expect people to do hard work for you for free.  No matter what you may think, you are not &#039;&#039;that&#039;&#039; brilliant.&lt;br /&gt;
** If you want an idea implemented, show that you are serious about working on it yourself.&lt;br /&gt;
*** Don&#039;t repeat yourself or go into unnecessary detail.&lt;br /&gt;
*** Do check your idea, read up on technical aspects you are not aware of, build prototypes, draw sketches, criticise yourself and revise your idea.&lt;br /&gt;
*** Acquire the skills needed to make your idea a reality.&lt;br /&gt;
&lt;br /&gt;
== Learning and Time Management ==&lt;br /&gt;
Free software development is &#039;&#039;mostly&#039;&#039; about learning, especially at the beginning, so be prepared to learn new languages, radically new ideas, and new techniques in tools that you have been using for years.&lt;br /&gt;
&lt;br /&gt;
Remember:&lt;br /&gt;
* The first revision of anything you try will usually be horrible.&lt;br /&gt;
* The second revision will usually be too bad to be practical.&lt;br /&gt;
* The third revision may or may not be good enough.&lt;br /&gt;
* At any time you may find that you did something very silly and need to read up and start over from the beginning.&lt;br /&gt;
&lt;br /&gt;
Make sure to allocate a lot of time to accommodate for all of this.&lt;br /&gt;
&lt;br /&gt;
== Joining the team ==&lt;br /&gt;
Now that we&#039;ve covered the basics, how can you join a Free Software project&#039;s team?  The most important thing is to show that you are indeed useful to the project.  If you have programming skills, solve an existing problem or limitation of the project using your skills and submit a patch.  If you have writing skills, try to see if there is something you can write for the project.  If you have pixelling or drawing skills, produce some graphics that may help the project.  If you don&#039;t have any of these skills, try to acquire them.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have any skills nor time to acquire them, then test and submit bug reports, or try to answer newbie questions that you know the answers to.  This last step will not make you a developer, but it will give you a starting point in case you do manage to find time later on.&lt;br /&gt;
Also, you help the project by freeing up developer time, so that&#039;s a good thing.&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Reference&amp;diff=23674</id>
		<title>Classic:TmwAthena Scripting Reference</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Reference&amp;diff=23674"/>
		<updated>2012-05-04T15:03:00Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: /* areamonster */  Add note about event behaviour when spawning in an area NPC.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a reference for commands believed to work in the eAthena scripting language still used by tmwAthena.&lt;br /&gt;
&lt;br /&gt;
A number of problematic commands have been removed from this list, but not all commands have been tested.&lt;br /&gt;
&lt;br /&gt;
== Language Commands ==&lt;br /&gt;
These are command that are closely tied to the language itself.&lt;br /&gt;
&lt;br /&gt;
=== goto ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    goto L_1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unconditionally jump to a label. Often used in an &amp;quot;if&amp;quot; body.&lt;br /&gt;
&lt;br /&gt;
=== callsub ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    callsub S_labelname, arguments...;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jump to the given label. When the &amp;quot;return&amp;quot; statement is executed, continue on the next line.&lt;br /&gt;
&lt;br /&gt;
It is not known whether &amp;quot;arguments...&amp;quot; works, we use temporary variables instead.&lt;br /&gt;
&lt;br /&gt;
It might also be possible to use this as a function, if the form of return with a value is used, but we use temporary variables instead.&lt;br /&gt;
&lt;br /&gt;
=== callfunc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    callfunc &amp;quot;function_name&amp;quot;, arguments...;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jump to the given function script. When the &amp;quot;return&amp;quot; statement is executed, continue on the next line of this script.&lt;br /&gt;
&lt;br /&gt;
It is not known whether &amp;quot;arguments...&amp;quot; works, we use temporary variables instead.&lt;br /&gt;
&lt;br /&gt;
It might also be possible to use this as a function, if the form of return with a value is used, but we use temporary variables instead.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;return&amp;quot; is broken if this is used from within an if(). If you need a conditional callfunc, first goto a label.&lt;br /&gt;
&lt;br /&gt;
=== return ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    return;&lt;br /&gt;
    return expr;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return from this script or sublabel to the calling function.&lt;br /&gt;
&lt;br /&gt;
It is unknown what happens if this is used from the top-level script, use &amp;quot;close&amp;quot; or &amp;quot;end&amp;quot; instead.&lt;br /&gt;
&lt;br /&gt;
We use temporary variables instead of the form that returns an expression.&lt;br /&gt;
&lt;br /&gt;
=== getarg ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getarg(index)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return (by reference?) an argument of &amp;quot;callsub&amp;quot; or &amp;quot;callfunc&amp;quot;. Aborts the script if used at toplevel of if out of range.&lt;br /&gt;
&lt;br /&gt;
We use temporary variables instead.&lt;br /&gt;
&lt;br /&gt;
=== set ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    set variable, expression;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Very common command, to set variables.&lt;br /&gt;
&lt;br /&gt;
=== setarray ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setarray arrayvariable, val1, val2, ...;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set elements of an array. Previous elements are not cleared. At most 128 elements can be assigned.&lt;br /&gt;
&lt;br /&gt;
It is currently possible, but deprecated, to specify a (zero-based) array index to start at the given part of an array. It&#039;s pretty amazing that that code works anyway.&lt;br /&gt;
&lt;br /&gt;
Remember that there are no permanent arrays, only temporary.&lt;br /&gt;
&lt;br /&gt;
=== cleararray ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    cleararray variable, value, count;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fill an array with &amp;quot;count&amp;quot; copies of &amp;quot;value&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== copyarray ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    copyarray dest_var, src_var, count;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Copy elements of an array.&lt;br /&gt;
&lt;br /&gt;
This function looks broken to me.&lt;br /&gt;
&lt;br /&gt;
=== getarraysize ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getarraysize variable;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get the size of an array.&lt;br /&gt;
&lt;br /&gt;
The size of an array is simply one more than the index of the last nonzero integer or nonempty string.&lt;br /&gt;
&lt;br /&gt;
WARNING: most functions that set an array do not bother to clear out high indices. You should almost always use an explicitly-provided size instead.&lt;br /&gt;
&lt;br /&gt;
=== deletearray ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    deletearray variable[, count = 1];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Remove count elements from an array.&lt;br /&gt;
&lt;br /&gt;
If there are elements beyond count, they will be shifted into lower indices.&lt;br /&gt;
&lt;br /&gt;
After that, all remaining elements will be set to 0 or &amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This function is currently broken, instead use cleararray variable, 0, count;&lt;br /&gt;
&lt;br /&gt;
=== getelementofarray ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getelementofarray(arrayname, index_expr)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This function is invoked internally by the arrayname[index_expr] syntax.&lt;br /&gt;
&lt;br /&gt;
=== if ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    if (condition) condition_command [conditional_command_args, ...];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If condition is zero, do nothing. Else, evaluate the conditional command.&lt;br /&gt;
&lt;br /&gt;
The only thing special about the if command is the lack of commas during parsing (from my reading this is only a warning?). During execution it is perfectly normal.&lt;br /&gt;
&lt;br /&gt;
=== end ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop executing the script.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use this if you have opened a dialog to the player, use &amp;quot;close&amp;quot; instead. Or, use &amp;quot;close2&amp;quot; and *then* &amp;quot;end&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== debugmes ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    debugmes &amp;quot;string&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Print a message to stdout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Message Commands ==&lt;br /&gt;
These are commands for dialog or one-way chat with players.&lt;br /&gt;
&lt;br /&gt;
=== mes ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    mes &amp;quot;string&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display a line of text to the player. If a dialog box is not already open for the attached NPC, one will be created.&lt;br /&gt;
&lt;br /&gt;
It is unknown if the client properly supports dialog with multiple NPCs simultaneously. Note that the server only allows each account one paused script at a time, so it probably wouldn&#039;t work anyway.&lt;br /&gt;
&lt;br /&gt;
=== next ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    next;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop the script until the user presses &amp;quot;Next&amp;quot; in the dialog.&lt;br /&gt;
&lt;br /&gt;
=== close ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    close;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop executing the script and give the user a &amp;quot;Close&amp;quot; button in the dialog.&lt;br /&gt;
&lt;br /&gt;
=== close2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    close2;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop the script until the user presses the &amp;quot;Close&amp;quot; button in the dialog, then keep executing the script.&lt;br /&gt;
&lt;br /&gt;
WARNING: unlike close, this command is a blocking command, the usual caveats apply.&lt;br /&gt;
&lt;br /&gt;
=== menu ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    menu&lt;br /&gt;
        &amp;quot;option 1&amp;quot;, L_1,&lt;br /&gt;
        &amp;quot;option 2&amp;quot;, L_2,&lt;br /&gt;
        &amp;quot;default&amp;quot;, -;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display a list of choices to the player, then branch to the specified label. The special label &amp;quot;-&amp;quot; means don&#039;t branch, just continue with the next statement.&lt;br /&gt;
&lt;br /&gt;
Additionally, the temporary variable &amp;quot;@menu&amp;quot; is set to the 1-based index of the choice.&lt;br /&gt;
&lt;br /&gt;
The options must not contain the character &amp;quot;:&amp;quot;, as the protocol uses it as a separator.&lt;br /&gt;
&lt;br /&gt;
=== input ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    input variable_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Input an integer or string to the given variable, depending on whether has the &#039;$&#039; string postfix.&lt;br /&gt;
&lt;br /&gt;
The implementation allows variable_name to be omitted if input is an integer, in case l14 is used. Don&#039;t use this.&lt;br /&gt;
&lt;br /&gt;
=== announce ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    announce &amp;quot;message&amp;quot;, flag;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Do a GM message.&lt;br /&gt;
&lt;br /&gt;
If flag &amp;amp; 0xF == 0 forward it to all map servers.&lt;br /&gt;
If flag &amp;amp; 0x8, message is from the OID (NPC? usually?) rather than the RID (player).&lt;br /&gt;
&lt;br /&gt;
If (flag &amp;amp; 0x7) == 1, send to all on map.&lt;br /&gt;
If (flag &amp;amp; 0x7) == 2, send to all in line of sight.&lt;br /&gt;
If (flag &amp;amp; 0x7) == 3, send to self only.&lt;br /&gt;
If (flag &amp;amp; 0x7) == anything else, send to all clients.&lt;br /&gt;
&lt;br /&gt;
=== mapannounce ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    mapannounce &amp;quot;mapname&amp;quot;, &amp;quot;message&amp;quot;, flag;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Send an announcement to all players in map.&lt;br /&gt;
&lt;br /&gt;
Only flag &amp;amp; 0x10 is interpreted, which does not work with the Mana client. So, flag must be 0.&lt;br /&gt;
&lt;br /&gt;
=== areaannounce ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    areaannounce &amp;quot;mapname&amp;quot;, x0, y0, x1, y1, &amp;quot;message&amp;quot;, flag;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Send an announcement to all players in area.&lt;br /&gt;
&lt;br /&gt;
Only flag &amp;amp; 0x10 is interpreted, which does not work with the Mana client. So, flag must be 0.&lt;br /&gt;
&lt;br /&gt;
=== message ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    message &amp;quot;player&amp;quot;, &amp;quot;message&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display (in chat) a message from the server to a single user.&lt;br /&gt;
&lt;br /&gt;
=== npctalk ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    npctalk &amp;quot;message&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make an NPC say something publicly.&lt;br /&gt;
&lt;br /&gt;
Note: in many cases areaannounce is a better choice.&lt;br /&gt;
&lt;br /&gt;
== Character Commands ==&lt;br /&gt;
These have to do with attributes of the player.&lt;br /&gt;
&lt;br /&gt;
=== setlook ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setlook type, value;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set an aspect of a character&#039;s appearance. Used e.g. by the barber.&lt;br /&gt;
&lt;br /&gt;
There are constant provided for the LOOK type, and for hair color and hair style.&lt;br /&gt;
&lt;br /&gt;
=== heal ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    heal hp, sp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Increase or decrease the player&#039;s hp and sp.&lt;br /&gt;
&lt;br /&gt;
=== itemheal ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    itemheal &amp;quot;ii&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Increase or decrease the player&#039;s hp and sp, for use in item scripts.&lt;br /&gt;
&lt;br /&gt;
=== percentheal ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    percentheal &amp;quot;ii&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Increase or decrease the player&#039;s hp and sp, by percentage of max HP.&lt;br /&gt;
&lt;br /&gt;
This is probably the best way to instakill the player.&lt;br /&gt;
&lt;br /&gt;
=== readparam ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    readparam(type[, &amp;quot;playername&amp;quot;])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return one of the core parameters of a player.&lt;br /&gt;
&lt;br /&gt;
type is one of the bCamelCase constants, see db/const.txt&lt;br /&gt;
&lt;br /&gt;
=== getcharid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getcharid(type[ &amp;quot;playername&amp;quot;])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get an id of the attached (or given) player.&lt;br /&gt;
&lt;br /&gt;
Type is:&lt;br /&gt;
0: char id&lt;br /&gt;
1: party id&lt;br /&gt;
2: guild id (deprecated)&lt;br /&gt;
3: account id&lt;br /&gt;
&lt;br /&gt;
You usually want 3.&lt;br /&gt;
&lt;br /&gt;
=== getpartyname ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getpartyname(partyid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the name of the party with the given id, or &amp;quot;null&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== getpartymember ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getpartymember partyid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fills in the array $@partymembername$&lt;br /&gt;
&lt;br /&gt;
=== strcharinfo ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    strcharinfo(num)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return string information about an account:&lt;br /&gt;
num==0: name&lt;br /&gt;
num==1: party name&lt;br /&gt;
num==2: guild name (deprecated)&lt;br /&gt;
&lt;br /&gt;
=== sc_start ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sc_start type, tick, val1[, beingid];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Apply a status effect to a player (or monster?).&lt;br /&gt;
&lt;br /&gt;
type is one of the sc_* constants.&lt;br /&gt;
&lt;br /&gt;
=== sc_start2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sc_start2 type, tick, val1, chance[, beingid];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Chance of applying a status effect, out of 10000.&lt;br /&gt;
&lt;br /&gt;
=== sc_end ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sc_end type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Immediately end status effect on current player.&lt;br /&gt;
&lt;br /&gt;
=== sc_check ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sc_check(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Whether a status effect is currently active.&lt;br /&gt;
&lt;br /&gt;
=== getscrate ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getscrate(type, rate[, being_id])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the sc is poison, modify rate by (3 + vit + luk/3) percent.&lt;br /&gt;
&lt;br /&gt;
The form that accepts a being_id is broken in the current stable version of the server.&lt;br /&gt;
&lt;br /&gt;
=== resetlvl ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    resetlvl type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== resetstatus ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    resetstatus;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== resetskill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    resetskill;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== changesex ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    changesex;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ask the login server (via the char server) to toggle this account&#039;s sex, then kick the player.&lt;br /&gt;
&lt;br /&gt;
=== attachrid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    attachrid(id)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Change the being associated with this script.&lt;br /&gt;
&lt;br /&gt;
Return true if such a player is logged in.&lt;br /&gt;
&lt;br /&gt;
=== detachrid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    detachrid;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Detach the player associated with this script.&lt;br /&gt;
&lt;br /&gt;
=== isloggedin ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    isloggedin(id)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return true if the given ID is logged in.&lt;br /&gt;
&lt;br /&gt;
Often you shouldn&#039;t use this, but attachrid(id) instead&lt;br /&gt;
&lt;br /&gt;
=== marriage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    marriage(&amp;quot;otherplayer&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Marry the attached player to the other player.&lt;br /&gt;
&lt;br /&gt;
Return 1 on success and 0 on failure.&lt;br /&gt;
&lt;br /&gt;
=== divorce ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    divorce()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Divorce the attached player from their partner&lt;br /&gt;
&lt;br /&gt;
Return 1 on success and 0 on failure.&lt;br /&gt;
&lt;br /&gt;
=== getpartnerid2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getpartnerid2()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the ID of the attached player&#039;s partner (0 is none).&lt;br /&gt;
&lt;br /&gt;
=== getexp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getexp base, job;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Increase the types of experience.&lt;br /&gt;
&lt;br /&gt;
=== getinventorylist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getinventorylist;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fill in some arrays of useful information: &amp;quot;@inventorylist_id&amp;quot;, &amp;quot;@inventorylist_amount&amp;quot;, &amp;quot;@inventorylist_equip&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The arrays are not cleared between calls, use &amp;quot;@inventory_count&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== getskilllist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getskilllist;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fill in some arrays of useful information: &amp;quot;@skilllist_id&amp;quot;, &amp;quot;@skilllist_lv&amp;quot;, &amp;quot;@skilllist_flag&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The arrays are not cleared between calls, use &amp;quot;@skill_count&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== getpoolskilllist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getpoolskilllist;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Same, but only poolable skills.&lt;br /&gt;
&lt;br /&gt;
=== getactivatedpoolskilllist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getactivatedpoolskilllist;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Same, but only activated pool skills.&lt;br /&gt;
&lt;br /&gt;
=== getunactivatedpoolskilllist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getunactivatedpoolskilllist;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Same, but only unactivated pool skills.&lt;br /&gt;
&lt;br /&gt;
=== poolskill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    poolskill skill_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Activate a poolable skill.&lt;br /&gt;
&lt;br /&gt;
=== unpoolskill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    unpoolskill skill_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Deactivate a poolable skill.&lt;br /&gt;
&lt;br /&gt;
=== checkpoolskill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    checkpoolskill(skill_id)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Check if a pool skill is activated&lt;br /&gt;
&lt;br /&gt;
=== misceffect ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    misceffect type, &amp;quot;player_name&amp;quot;;&lt;br /&gt;
    misceffect type, being_id;&lt;br /&gt;
    misceffect type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display a miscellaneous effect on a being.&lt;br /&gt;
&lt;br /&gt;
In the third form, it will use the OID if possible, and fallback to the RID.&lt;br /&gt;
&lt;br /&gt;
=== getlook ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getlook(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return part of the player&#039;s appearance:&lt;br /&gt;
val==1: hair&lt;br /&gt;
val==2: weapon&lt;br /&gt;
val==3: bottom&lt;br /&gt;
val==4: middle&lt;br /&gt;
val==5: top&lt;br /&gt;
val==6: hair color&lt;br /&gt;
val==8: shield&lt;br /&gt;
val==9: shoes&lt;br /&gt;
&lt;br /&gt;
On failure, return -1.&lt;br /&gt;
&lt;br /&gt;
=== getsavepoint ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getsavepoint(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
type==0: Return savepoint map&lt;br /&gt;
type==1: Return savepoint x&lt;br /&gt;
type==2: Return savepoint y&lt;br /&gt;
&lt;br /&gt;
This is believed to be the only function (other than callfunc and callsub of course) that returns a different type depending on its arguments.&lt;br /&gt;
&lt;br /&gt;
=== shop ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    shop &amp;quot;npcname&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Close the script and open the given NPC&#039;s shop.&lt;br /&gt;
&lt;br /&gt;
=== isdead ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    isdead()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 1 if the attached player is dead, else 0.&lt;br /&gt;
&lt;br /&gt;
=== fakenpcname ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    fakenpcname &amp;quot;name&amp;quot;, &amp;quot;newname&amp;quot;, new_sprite_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Change the appearance of an NPC.&lt;br /&gt;
&lt;br /&gt;
== Location Commands ==&lt;br /&gt;
These are commands that have to do with the location of players&lt;br /&gt;
&lt;br /&gt;
=== warp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    warp &amp;quot;mapname&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Warp the attached player to the given location. &amp;quot;mapname&amp;quot; may have the special values &amp;quot;Random&amp;quot;, &amp;quot;SavePoint&amp;quot;, and &amp;quot;Save&amp;quot; (case-sensitive), but x and y are still required.&lt;br /&gt;
&lt;br /&gt;
=== isat ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    isat(&amp;quot;mapname&amp;quot;, x, y)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 1 if the attached player is at the given location, 0 otherwise.&lt;br /&gt;
&lt;br /&gt;
=== areawarp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    areawarp &amp;quot;src_map&amp;quot;, x0, y0, x1, y1, &amp;quot;dst_map&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Warp all players in the given area to the given location.&lt;br /&gt;
&lt;br /&gt;
=== getusers ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getusers(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count users.&lt;br /&gt;
&lt;br /&gt;
If flag &amp;amp; 0x8, base on OID instead of RID.&lt;br /&gt;
If (flag &amp;amp; 0x7) == 0, return users on the map.&lt;br /&gt;
If (flag &amp;amp; 0x7) == 1, return users on the server.&lt;br /&gt;
&lt;br /&gt;
=== getmapusers ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getmapusers(&amp;quot;mapname&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count users on a given map.&lt;br /&gt;
&lt;br /&gt;
=== getareausers ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getareausers(&amp;quot;mapname&amp;quot;, x0, y0, x1, y1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count users in an area.&lt;br /&gt;
&lt;br /&gt;
=== mapwarp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    mapwarp &amp;quot;src_map&amp;quot;, &amp;quot;dst_map&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Warp all players from source map to destination location.&lt;br /&gt;
&lt;br /&gt;
=== npcwarp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    npcwarp x, y, &amp;quot;npcname&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Move an NPC to a different location on the same map.&lt;br /&gt;
&lt;br /&gt;
=== isin ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    isin(&amp;quot;mapname&amp;quot;, x0, y0, x1, y1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Check if the player is in the area.&lt;br /&gt;
&lt;br /&gt;
=== getx ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getx()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return attached player&#039;s x coordinate.&lt;br /&gt;
&lt;br /&gt;
=== gety ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    gety()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return attached player&#039;s y coordinate.&lt;br /&gt;
&lt;br /&gt;
== Item Commands ==&lt;br /&gt;
These have to do with items or inventory.&lt;br /&gt;
&lt;br /&gt;
=== getitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getitem &amp;quot;itemname&amp;quot;, count[, unused_argument[, playerid]];&lt;br /&gt;
    getitem itemid, count[, unused_argument[, playerid]];&lt;br /&gt;
&amp;quot;ii**&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Grant the attached player (or the given player) &amp;quot;count&amp;quot; copies of an item.&lt;br /&gt;
&lt;br /&gt;
If itemname is unrecognized you get an iten (727) instead.&lt;br /&gt;
&lt;br /&gt;
=== makeitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    makeitem &amp;quot;itemname&amp;quot;, count, &amp;quot;mapname&amp;quot;, x, y;&lt;br /&gt;
    makeitem itemid, count, &amp;quot;mapname&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Drop items on the ground.&lt;br /&gt;
&lt;br /&gt;
The special &amp;quot;mapname&amp;quot; value &amp;quot;this&amp;quot; means the map of the attached player.&lt;br /&gt;
&lt;br /&gt;
=== delitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    delitem &amp;quot;itemname&amp;quot;, count;&lt;br /&gt;
    delitem itemid, count;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Remove items from the attached player&#039;s inventory.&lt;br /&gt;
&lt;br /&gt;
This command is buggy if the player does not have enough of the item.&lt;br /&gt;
&lt;br /&gt;
=== countitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    countitem(&amp;quot;itemname&amp;quot;)&lt;br /&gt;
    countitem(itemid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the number of the given item in the player&#039;s inventory.&lt;br /&gt;
&lt;br /&gt;
=== checkweight ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    checkweight(&amp;quot;itemname&amp;quot;, count)&lt;br /&gt;
    checkweight(itemid, count)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 0 if adding &amp;quot;count&amp;quot; of the item would put player above max weight, 1 if it would still be less than max weight.&lt;br /&gt;
Also returns 0 if item does not exist.&lt;br /&gt;
&lt;br /&gt;
=== getequipid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getequipid(equip_point)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the ID of the item in the given equip slot.&lt;br /&gt;
&lt;br /&gt;
equip_point is one of the equip_* constants&lt;br /&gt;
&lt;br /&gt;
=== getequipname ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getequipname(equip_point)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the name of the item in the given equip slot.&lt;br /&gt;
&lt;br /&gt;
equip_point is one of the equip_* constants&lt;br /&gt;
&lt;br /&gt;
=== getequipisequiped ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getequipisequiped(num)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 1 if the player currently has an item equipped in the slot.&lt;br /&gt;
&lt;br /&gt;
=== statusup ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    statusup bType;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Permanently increase a stat by one point.&lt;br /&gt;
&lt;br /&gt;
=== statusup2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    statusup2 bType, delta;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Permanently increase or decrease a stat.&lt;br /&gt;
&lt;br /&gt;
=== bonus ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    bonus bType, delta&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Temporarily increase a stat. For use in item scripts only.&lt;br /&gt;
&lt;br /&gt;
=== skill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    skill id, level[, flag = 1];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Grant a skill.&lt;br /&gt;
&lt;br /&gt;
flag==0: permanent skill&lt;br /&gt;
flag==1: temporary skill (item scripts only)&lt;br /&gt;
&lt;br /&gt;
(Untested)&lt;br /&gt;
&lt;br /&gt;
=== setskill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setskill id, level;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Grant a skill permanently.&lt;br /&gt;
&lt;br /&gt;
=== getskilllv ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getskilllv(skill)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the player&#039;s level of the given skill.&lt;br /&gt;
&lt;br /&gt;
=== getgmlevel ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getgmlevel()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the player&#039;s GM level.&lt;br /&gt;
&lt;br /&gt;
=== getopt2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getopt2()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the player&#039;s opt2 flags.&lt;br /&gt;
&lt;br /&gt;
=== setopt2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setopt2 flags;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the player&#039;s opt2 flags.&lt;br /&gt;
&lt;br /&gt;
=== checkoption ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    checkoption(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 1 if the player has any of the given (XOR&#039;ed) option bits. Usually only one is given.&lt;br /&gt;
&lt;br /&gt;
=== setoption ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setoption type&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the player&#039;s option flags exactly (not OR&#039;ing).&lt;br /&gt;
&lt;br /&gt;
=== savepoint ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    savepoint &amp;quot;mapname&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the player&#039;s save point. Used e.g. by Soul Menhirs, and during the time travel quest.&amp;lt;!-- Don&#039;t remove this just because you can&#039;t figure out how to start it from this end. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== openstorage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    openstorage;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Open the player&#039;s storage.&lt;br /&gt;
&lt;br /&gt;
=== getitemname ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getitemname(&amp;quot;itemname&amp;quot;)&lt;br /&gt;
    getitemname(itemid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the name of the item, or &amp;quot;Unknown Item&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== clearitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    clearitem;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Remove all items from a player&#039;s inventory.&lt;br /&gt;
&lt;br /&gt;
=== nude ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    nude;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unequip all items.&lt;br /&gt;
&lt;br /&gt;
=== hasitems ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    hasitems()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 1 if the player has any inventory, 0 otherwise.&lt;br /&gt;
&lt;br /&gt;
=== unequipbyid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    unequipbyid slot_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unequip whatever is in the slot&lt;br /&gt;
&lt;br /&gt;
=== getareadropitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getareadropitem(&amp;quot;mapname&amp;quot;, x0, y0, x1, y1, &amp;quot;itemname&amp;quot;[, delitems = 0]);&lt;br /&gt;
    getareadropitem(&amp;quot;mapname&amp;quot;, x0, y0, x1, y1, itemid[, delitems = 0]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count items on the floor in an area. If delitems, the items will be deleted as well.&lt;br /&gt;
&lt;br /&gt;
== Common Functions ==&lt;br /&gt;
These are not mostly not related to the RPG or the scripting language.&lt;br /&gt;
&lt;br /&gt;
=== rand ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    rand(range)&lt;br /&gt;
    rand(min, max)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In the first form, return a random number between 0 (inclusive) and range (exclusive). Return 0 if range is not positive.&lt;br /&gt;
In the second form, return a random number between min and max, inclusive. Min and max may be swapped.&lt;br /&gt;
&lt;br /&gt;
=== gettimetick ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    gettimetick(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return one of the ticks&lt;br /&gt;
&lt;br /&gt;
type==0 (or other): milliseconds since some point in time, wraps every 50 days.&lt;br /&gt;
type==1: time since midnight, UTC.&lt;br /&gt;
type==2: seconds since the epoch.&lt;br /&gt;
&lt;br /&gt;
You should almost always use type 2.&lt;br /&gt;
&lt;br /&gt;
=== gettime ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    gettime(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get a component of the time (UTC).&lt;br /&gt;
&lt;br /&gt;
1: second (0-59)&lt;br /&gt;
2: minute (0-59)&lt;br /&gt;
3: hour (0-23)&lt;br /&gt;
4: day of week (0-6)&lt;br /&gt;
5: day of month (1-31)&lt;br /&gt;
6: month (1-12)&lt;br /&gt;
7: year (1902-2038)&lt;br /&gt;
&lt;br /&gt;
=== gettimestr ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    gettimestr(&amp;quot;format&amp;quot;, length)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Frontend for strftime(3).&lt;br /&gt;
&lt;br /&gt;
This function may be removed for technical reasons, please construct the string manually using gettime().&lt;br /&gt;
&lt;br /&gt;
There is a script function that does this: callfunct &amp;quot;time_stamp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
== Timers and Events ==&lt;br /&gt;
These have to do with transfering control in ways that are not immediately obvious.&lt;br /&gt;
&lt;br /&gt;
The most common ones are initnpctimer or startnpctimer, stopnpctimer, and setnpctimer.&lt;br /&gt;
&lt;br /&gt;
=== doevent ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    doevent &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Manually invoke an NPC event.&lt;br /&gt;
&lt;br /&gt;
=== donpcevent ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    donpcevent &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Manually invoke an NPC event.&lt;br /&gt;
&lt;br /&gt;
=== addtimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    addtimer tick, &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Invoke an NPC event after a delay, for the attached NPC.&lt;br /&gt;
&lt;br /&gt;
This command does the same thing as areatimer, but for only the attached player.&lt;br /&gt;
&lt;br /&gt;
=== deltimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    deltimer &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This command is untested and might freeze the server.&lt;br /&gt;
&lt;br /&gt;
=== initnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    initnpctimer;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the NPC&#039;s attached timer to tick 0 and start it.&lt;br /&gt;
&lt;br /&gt;
This is equivalent to setnpctimer, 0; startnpctimer;&lt;br /&gt;
&lt;br /&gt;
=== stopnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    stopnpctimer;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop the NPC&#039;s attached timer.&lt;br /&gt;
&lt;br /&gt;
This DOES NOT do anything about the tick. But that&#039;s okay, you should normally be starting it with initnpctimer.&lt;br /&gt;
&lt;br /&gt;
=== startnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    startnpctimer;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Start the NPC&#039;s attached timer, without setting the tick.&lt;br /&gt;
&lt;br /&gt;
=== setnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setnpctimer tick;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the NPC&#039;s timer to a specific tick. Generally, this is only useful for tick 0.&lt;br /&gt;
&lt;br /&gt;
=== getnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getnpctimer(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get the current tick of an NPC&#039;s timer.&lt;br /&gt;
&lt;br /&gt;
type==0: timer event tick (like setnpctimer)&lt;br /&gt;
type==1: bool if it has a next timer.&lt;br /&gt;
type==2: timer amount&lt;br /&gt;
&lt;br /&gt;
=== cmdothernpc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    cmdothernpc &amp;quot;npc&amp;quot;, &amp;quot;Foo&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Invoke ::OnCommandFoo&lt;br /&gt;
&lt;br /&gt;
=== mobcount ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    mobcount(&amp;quot;mapname&amp;quot;, &amp;quot;event&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count the remaining mobs from the spawn with the given event.&lt;br /&gt;
&lt;br /&gt;
=== areatimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    areatimer &amp;quot;mapname&amp;quot;, x0, y0, x1, y1, tick, &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Add a PC event timer to all players in the area.&lt;br /&gt;
&lt;br /&gt;
After &amp;quot;tick&amp;quot; milliseconds, the given NPC event will fire with each player as the RID.&lt;br /&gt;
&lt;br /&gt;
== Unsorted Commands ==&lt;br /&gt;
These are commands that still need sorting, please edit this page, see talk page for category (and subcategory?) suggestions.&lt;br /&gt;
&lt;br /&gt;
=== monster ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    monster &amp;quot;mapname&amp;quot;, x, y, &amp;quot;string&amp;quot;, class, count[, &amp;quot;event&amp;quot;];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Spawn monsters at a point. If you define an OnDead event using a trigger area then the event is shot only inside that area, hence the event is ignored when the monster is killed outside the trigger area.&lt;br /&gt;
&lt;br /&gt;
=== areamonster ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    areamonster &amp;quot;mapname&amp;quot;, x0, y0, x1, y1, &amp;quot;string&amp;quot;, class, count[, &amp;quot;event&amp;quot;];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Spawn monsters in an area. If you define an OnDead event using a trigger area then the event is shot only inside that area, hence the event is ignored when the monster is killed outside the trigger area.&lt;br /&gt;
&lt;br /&gt;
=== killmonster ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    killmonster &amp;quot;mapname&amp;quot;, &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kill monsters on a map.&lt;br /&gt;
&lt;br /&gt;
Unless it is &amp;quot;All&amp;quot;, &amp;quot;event&amp;quot; must match the one used at spawn time.&lt;br /&gt;
&lt;br /&gt;
If &amp;quot;All&amp;quot; is given, this function properly preserves permanently respawning monsters.&lt;br /&gt;
&lt;br /&gt;
=== killmonsterall ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    killmonsterall &amp;quot;mapname&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kill all monsters unconditionally.&lt;br /&gt;
&lt;br /&gt;
This command might prevent monsters from respawning. Instead use &amp;quot;killmonster&amp;quot; with &amp;quot;event&amp;quot; == &amp;quot;All&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== enablenpc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    enablenpc &amp;quot;name&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enable an NPC.&lt;br /&gt;
&lt;br /&gt;
=== disablenpc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    disablenpc &amp;quot;name&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Disable an NPC.&lt;br /&gt;
&lt;br /&gt;
=== hideoffnpc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    hideoffnpc &amp;quot;name&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
What does this do?&lt;br /&gt;
&lt;br /&gt;
=== hideonnpc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    hideonnpc &amp;quot;name&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
What does this do?&lt;br /&gt;
&lt;br /&gt;
=== setmapflagnosave ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setmapflagnosave &amp;quot;mapname&amp;quot;, &amp;quot;savemap&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the nosave flag and respawn location.&lt;br /&gt;
&lt;br /&gt;
=== setmapflag ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setmapflag &amp;quot;mapname&amp;quot;, flag;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set an arbitrary mapflag.&lt;br /&gt;
&lt;br /&gt;
This function may be problematic in the stable version.&lt;br /&gt;
&lt;br /&gt;
=== removemapflag ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    removemapflag &amp;quot;mapname&amp;quot;, flag;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unset an arbitrary mapflag.&lt;br /&gt;
&lt;br /&gt;
This function may be problematic in the stable version.&lt;br /&gt;
&lt;br /&gt;
=== pvpon ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    pvpon &amp;quot;mapname&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Allow PvP on a map.&lt;br /&gt;
&lt;br /&gt;
=== pvpoff ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    pvpoff &amp;quot;mapname&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Deny PvP on a map.&lt;br /&gt;
&lt;br /&gt;
=== emotion ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    emotion emote_index;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Show a smiley above the OID.&lt;br /&gt;
&lt;br /&gt;
=== getspellinvocation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getspellinvocation(&amp;quot;spell-identifier&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the #invocation used for a spell, or &amp;quot;...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== getanchorinvocation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getanchorinvocation &amp;quot;anchor-identifier&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the invocation used for a teleport anchor (?)&lt;br /&gt;
&lt;br /&gt;
=== strmobinfo ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    strmobinfo(num, class)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Info about a type of mob:&lt;br /&gt;
num==1: name&lt;br /&gt;
num==2: jname&lt;br /&gt;
num==3: lv&lt;br /&gt;
num==4: maxhp&lt;br /&gt;
num==5: maxsp&lt;br /&gt;
num==6: base_exp&lt;br /&gt;
num==7: job_exp&lt;br /&gt;
&lt;br /&gt;
Note that only types 1 and 2 actually return strings, the rest return integers&lt;br /&gt;
&lt;br /&gt;
=== specialeffect ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    specialeffect type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display a special effect on the OID.&lt;br /&gt;
&lt;br /&gt;
Same as &amp;quot;misceffect&amp;quot;, but does not fallback when there is no OID.&lt;br /&gt;
&lt;br /&gt;
=== specialeffect2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    specialeffect2 type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Same as &amp;quot;misceffect&amp;quot;, but works when there is an OID.&lt;br /&gt;
&lt;br /&gt;
=== gmcommand ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    gmcommand &amp;quot;@command maybe with arguments&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Run a GM command, at level 99.&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Reference&amp;diff=23673</id>
		<title>Classic:TmwAthena Scripting Reference</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Classic:TmwAthena_Scripting_Reference&amp;diff=23673"/>
		<updated>2012-05-04T15:01:36Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: /* monster */  Add note about behaviour of event monsters in trigger area NPCs.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a reference for commands believed to work in the eAthena scripting language still used by tmwAthena.&lt;br /&gt;
&lt;br /&gt;
A number of problematic commands have been removed from this list, but not all commands have been tested.&lt;br /&gt;
&lt;br /&gt;
== Language Commands ==&lt;br /&gt;
These are command that are closely tied to the language itself.&lt;br /&gt;
&lt;br /&gt;
=== goto ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    goto L_1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unconditionally jump to a label. Often used in an &amp;quot;if&amp;quot; body.&lt;br /&gt;
&lt;br /&gt;
=== callsub ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    callsub S_labelname, arguments...;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jump to the given label. When the &amp;quot;return&amp;quot; statement is executed, continue on the next line.&lt;br /&gt;
&lt;br /&gt;
It is not known whether &amp;quot;arguments...&amp;quot; works, we use temporary variables instead.&lt;br /&gt;
&lt;br /&gt;
It might also be possible to use this as a function, if the form of return with a value is used, but we use temporary variables instead.&lt;br /&gt;
&lt;br /&gt;
=== callfunc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    callfunc &amp;quot;function_name&amp;quot;, arguments...;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jump to the given function script. When the &amp;quot;return&amp;quot; statement is executed, continue on the next line of this script.&lt;br /&gt;
&lt;br /&gt;
It is not known whether &amp;quot;arguments...&amp;quot; works, we use temporary variables instead.&lt;br /&gt;
&lt;br /&gt;
It might also be possible to use this as a function, if the form of return with a value is used, but we use temporary variables instead.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;return&amp;quot; is broken if this is used from within an if(). If you need a conditional callfunc, first goto a label.&lt;br /&gt;
&lt;br /&gt;
=== return ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    return;&lt;br /&gt;
    return expr;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return from this script or sublabel to the calling function.&lt;br /&gt;
&lt;br /&gt;
It is unknown what happens if this is used from the top-level script, use &amp;quot;close&amp;quot; or &amp;quot;end&amp;quot; instead.&lt;br /&gt;
&lt;br /&gt;
We use temporary variables instead of the form that returns an expression.&lt;br /&gt;
&lt;br /&gt;
=== getarg ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getarg(index)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return (by reference?) an argument of &amp;quot;callsub&amp;quot; or &amp;quot;callfunc&amp;quot;. Aborts the script if used at toplevel of if out of range.&lt;br /&gt;
&lt;br /&gt;
We use temporary variables instead.&lt;br /&gt;
&lt;br /&gt;
=== set ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    set variable, expression;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Very common command, to set variables.&lt;br /&gt;
&lt;br /&gt;
=== setarray ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setarray arrayvariable, val1, val2, ...;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set elements of an array. Previous elements are not cleared. At most 128 elements can be assigned.&lt;br /&gt;
&lt;br /&gt;
It is currently possible, but deprecated, to specify a (zero-based) array index to start at the given part of an array. It&#039;s pretty amazing that that code works anyway.&lt;br /&gt;
&lt;br /&gt;
Remember that there are no permanent arrays, only temporary.&lt;br /&gt;
&lt;br /&gt;
=== cleararray ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    cleararray variable, value, count;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fill an array with &amp;quot;count&amp;quot; copies of &amp;quot;value&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== copyarray ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    copyarray dest_var, src_var, count;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Copy elements of an array.&lt;br /&gt;
&lt;br /&gt;
This function looks broken to me.&lt;br /&gt;
&lt;br /&gt;
=== getarraysize ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getarraysize variable;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get the size of an array.&lt;br /&gt;
&lt;br /&gt;
The size of an array is simply one more than the index of the last nonzero integer or nonempty string.&lt;br /&gt;
&lt;br /&gt;
WARNING: most functions that set an array do not bother to clear out high indices. You should almost always use an explicitly-provided size instead.&lt;br /&gt;
&lt;br /&gt;
=== deletearray ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    deletearray variable[, count = 1];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Remove count elements from an array.&lt;br /&gt;
&lt;br /&gt;
If there are elements beyond count, they will be shifted into lower indices.&lt;br /&gt;
&lt;br /&gt;
After that, all remaining elements will be set to 0 or &amp;quot;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This function is currently broken, instead use cleararray variable, 0, count;&lt;br /&gt;
&lt;br /&gt;
=== getelementofarray ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getelementofarray(arrayname, index_expr)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This function is invoked internally by the arrayname[index_expr] syntax.&lt;br /&gt;
&lt;br /&gt;
=== if ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    if (condition) condition_command [conditional_command_args, ...];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If condition is zero, do nothing. Else, evaluate the conditional command.&lt;br /&gt;
&lt;br /&gt;
The only thing special about the if command is the lack of commas during parsing (from my reading this is only a warning?). During execution it is perfectly normal.&lt;br /&gt;
&lt;br /&gt;
=== end ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    end;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop executing the script.&lt;br /&gt;
&lt;br /&gt;
Don&#039;t use this if you have opened a dialog to the player, use &amp;quot;close&amp;quot; instead. Or, use &amp;quot;close2&amp;quot; and *then* &amp;quot;end&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== debugmes ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    debugmes &amp;quot;string&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Print a message to stdout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Message Commands ==&lt;br /&gt;
These are commands for dialog or one-way chat with players.&lt;br /&gt;
&lt;br /&gt;
=== mes ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    mes &amp;quot;string&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display a line of text to the player. If a dialog box is not already open for the attached NPC, one will be created.&lt;br /&gt;
&lt;br /&gt;
It is unknown if the client properly supports dialog with multiple NPCs simultaneously. Note that the server only allows each account one paused script at a time, so it probably wouldn&#039;t work anyway.&lt;br /&gt;
&lt;br /&gt;
=== next ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    next;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop the script until the user presses &amp;quot;Next&amp;quot; in the dialog.&lt;br /&gt;
&lt;br /&gt;
=== close ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    close;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop executing the script and give the user a &amp;quot;Close&amp;quot; button in the dialog.&lt;br /&gt;
&lt;br /&gt;
=== close2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    close2;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop the script until the user presses the &amp;quot;Close&amp;quot; button in the dialog, then keep executing the script.&lt;br /&gt;
&lt;br /&gt;
WARNING: unlike close, this command is a blocking command, the usual caveats apply.&lt;br /&gt;
&lt;br /&gt;
=== menu ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    menu&lt;br /&gt;
        &amp;quot;option 1&amp;quot;, L_1,&lt;br /&gt;
        &amp;quot;option 2&amp;quot;, L_2,&lt;br /&gt;
        &amp;quot;default&amp;quot;, -;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display a list of choices to the player, then branch to the specified label. The special label &amp;quot;-&amp;quot; means don&#039;t branch, just continue with the next statement.&lt;br /&gt;
&lt;br /&gt;
Additionally, the temporary variable &amp;quot;@menu&amp;quot; is set to the 1-based index of the choice.&lt;br /&gt;
&lt;br /&gt;
The options must not contain the character &amp;quot;:&amp;quot;, as the protocol uses it as a separator.&lt;br /&gt;
&lt;br /&gt;
=== input ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    input variable_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Input an integer or string to the given variable, depending on whether has the &#039;$&#039; string postfix.&lt;br /&gt;
&lt;br /&gt;
The implementation allows variable_name to be omitted if input is an integer, in case l14 is used. Don&#039;t use this.&lt;br /&gt;
&lt;br /&gt;
=== announce ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    announce &amp;quot;message&amp;quot;, flag;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Do a GM message.&lt;br /&gt;
&lt;br /&gt;
If flag &amp;amp; 0xF == 0 forward it to all map servers.&lt;br /&gt;
If flag &amp;amp; 0x8, message is from the OID (NPC? usually?) rather than the RID (player).&lt;br /&gt;
&lt;br /&gt;
If (flag &amp;amp; 0x7) == 1, send to all on map.&lt;br /&gt;
If (flag &amp;amp; 0x7) == 2, send to all in line of sight.&lt;br /&gt;
If (flag &amp;amp; 0x7) == 3, send to self only.&lt;br /&gt;
If (flag &amp;amp; 0x7) == anything else, send to all clients.&lt;br /&gt;
&lt;br /&gt;
=== mapannounce ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    mapannounce &amp;quot;mapname&amp;quot;, &amp;quot;message&amp;quot;, flag;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Send an announcement to all players in map.&lt;br /&gt;
&lt;br /&gt;
Only flag &amp;amp; 0x10 is interpreted, which does not work with the Mana client. So, flag must be 0.&lt;br /&gt;
&lt;br /&gt;
=== areaannounce ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    areaannounce &amp;quot;mapname&amp;quot;, x0, y0, x1, y1, &amp;quot;message&amp;quot;, flag;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Send an announcement to all players in area.&lt;br /&gt;
&lt;br /&gt;
Only flag &amp;amp; 0x10 is interpreted, which does not work with the Mana client. So, flag must be 0.&lt;br /&gt;
&lt;br /&gt;
=== message ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    message &amp;quot;player&amp;quot;, &amp;quot;message&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display (in chat) a message from the server to a single user.&lt;br /&gt;
&lt;br /&gt;
=== npctalk ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    npctalk &amp;quot;message&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make an NPC say something publicly.&lt;br /&gt;
&lt;br /&gt;
Note: in many cases areaannounce is a better choice.&lt;br /&gt;
&lt;br /&gt;
== Character Commands ==&lt;br /&gt;
These have to do with attributes of the player.&lt;br /&gt;
&lt;br /&gt;
=== setlook ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setlook type, value;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set an aspect of a character&#039;s appearance. Used e.g. by the barber.&lt;br /&gt;
&lt;br /&gt;
There are constant provided for the LOOK type, and for hair color and hair style.&lt;br /&gt;
&lt;br /&gt;
=== heal ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    heal hp, sp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Increase or decrease the player&#039;s hp and sp.&lt;br /&gt;
&lt;br /&gt;
=== itemheal ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    itemheal &amp;quot;ii&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Increase or decrease the player&#039;s hp and sp, for use in item scripts.&lt;br /&gt;
&lt;br /&gt;
=== percentheal ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    percentheal &amp;quot;ii&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Increase or decrease the player&#039;s hp and sp, by percentage of max HP.&lt;br /&gt;
&lt;br /&gt;
This is probably the best way to instakill the player.&lt;br /&gt;
&lt;br /&gt;
=== readparam ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    readparam(type[, &amp;quot;playername&amp;quot;])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return one of the core parameters of a player.&lt;br /&gt;
&lt;br /&gt;
type is one of the bCamelCase constants, see db/const.txt&lt;br /&gt;
&lt;br /&gt;
=== getcharid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getcharid(type[ &amp;quot;playername&amp;quot;])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get an id of the attached (or given) player.&lt;br /&gt;
&lt;br /&gt;
Type is:&lt;br /&gt;
0: char id&lt;br /&gt;
1: party id&lt;br /&gt;
2: guild id (deprecated)&lt;br /&gt;
3: account id&lt;br /&gt;
&lt;br /&gt;
You usually want 3.&lt;br /&gt;
&lt;br /&gt;
=== getpartyname ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getpartyname(partyid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the name of the party with the given id, or &amp;quot;null&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== getpartymember ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getpartymember partyid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fills in the array $@partymembername$&lt;br /&gt;
&lt;br /&gt;
=== strcharinfo ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    strcharinfo(num)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return string information about an account:&lt;br /&gt;
num==0: name&lt;br /&gt;
num==1: party name&lt;br /&gt;
num==2: guild name (deprecated)&lt;br /&gt;
&lt;br /&gt;
=== sc_start ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sc_start type, tick, val1[, beingid];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Apply a status effect to a player (or monster?).&lt;br /&gt;
&lt;br /&gt;
type is one of the sc_* constants.&lt;br /&gt;
&lt;br /&gt;
=== sc_start2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sc_start2 type, tick, val1, chance[, beingid];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Chance of applying a status effect, out of 10000.&lt;br /&gt;
&lt;br /&gt;
=== sc_end ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sc_end type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Immediately end status effect on current player.&lt;br /&gt;
&lt;br /&gt;
=== sc_check ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sc_check(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Whether a status effect is currently active.&lt;br /&gt;
&lt;br /&gt;
=== getscrate ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getscrate(type, rate[, being_id])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the sc is poison, modify rate by (3 + vit + luk/3) percent.&lt;br /&gt;
&lt;br /&gt;
The form that accepts a being_id is broken in the current stable version of the server.&lt;br /&gt;
&lt;br /&gt;
=== resetlvl ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    resetlvl type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== resetstatus ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    resetstatus;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== resetskill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    resetskill;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== changesex ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    changesex;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ask the login server (via the char server) to toggle this account&#039;s sex, then kick the player.&lt;br /&gt;
&lt;br /&gt;
=== attachrid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    attachrid(id)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Change the being associated with this script.&lt;br /&gt;
&lt;br /&gt;
Return true if such a player is logged in.&lt;br /&gt;
&lt;br /&gt;
=== detachrid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    detachrid;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Detach the player associated with this script.&lt;br /&gt;
&lt;br /&gt;
=== isloggedin ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    isloggedin(id)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return true if the given ID is logged in.&lt;br /&gt;
&lt;br /&gt;
Often you shouldn&#039;t use this, but attachrid(id) instead&lt;br /&gt;
&lt;br /&gt;
=== marriage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    marriage(&amp;quot;otherplayer&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Marry the attached player to the other player.&lt;br /&gt;
&lt;br /&gt;
Return 1 on success and 0 on failure.&lt;br /&gt;
&lt;br /&gt;
=== divorce ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    divorce()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Divorce the attached player from their partner&lt;br /&gt;
&lt;br /&gt;
Return 1 on success and 0 on failure.&lt;br /&gt;
&lt;br /&gt;
=== getpartnerid2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getpartnerid2()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the ID of the attached player&#039;s partner (0 is none).&lt;br /&gt;
&lt;br /&gt;
=== getexp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getexp base, job;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Increase the types of experience.&lt;br /&gt;
&lt;br /&gt;
=== getinventorylist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getinventorylist;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fill in some arrays of useful information: &amp;quot;@inventorylist_id&amp;quot;, &amp;quot;@inventorylist_amount&amp;quot;, &amp;quot;@inventorylist_equip&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The arrays are not cleared between calls, use &amp;quot;@inventory_count&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== getskilllist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getskilllist;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fill in some arrays of useful information: &amp;quot;@skilllist_id&amp;quot;, &amp;quot;@skilllist_lv&amp;quot;, &amp;quot;@skilllist_flag&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The arrays are not cleared between calls, use &amp;quot;@skill_count&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== getpoolskilllist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getpoolskilllist;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Same, but only poolable skills.&lt;br /&gt;
&lt;br /&gt;
=== getactivatedpoolskilllist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getactivatedpoolskilllist;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Same, but only activated pool skills.&lt;br /&gt;
&lt;br /&gt;
=== getunactivatedpoolskilllist ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getunactivatedpoolskilllist;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Same, but only unactivated pool skills.&lt;br /&gt;
&lt;br /&gt;
=== poolskill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    poolskill skill_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Activate a poolable skill.&lt;br /&gt;
&lt;br /&gt;
=== unpoolskill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    unpoolskill skill_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Deactivate a poolable skill.&lt;br /&gt;
&lt;br /&gt;
=== checkpoolskill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    checkpoolskill(skill_id)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Check if a pool skill is activated&lt;br /&gt;
&lt;br /&gt;
=== misceffect ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    misceffect type, &amp;quot;player_name&amp;quot;;&lt;br /&gt;
    misceffect type, being_id;&lt;br /&gt;
    misceffect type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display a miscellaneous effect on a being.&lt;br /&gt;
&lt;br /&gt;
In the third form, it will use the OID if possible, and fallback to the RID.&lt;br /&gt;
&lt;br /&gt;
=== getlook ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getlook(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return part of the player&#039;s appearance:&lt;br /&gt;
val==1: hair&lt;br /&gt;
val==2: weapon&lt;br /&gt;
val==3: bottom&lt;br /&gt;
val==4: middle&lt;br /&gt;
val==5: top&lt;br /&gt;
val==6: hair color&lt;br /&gt;
val==8: shield&lt;br /&gt;
val==9: shoes&lt;br /&gt;
&lt;br /&gt;
On failure, return -1.&lt;br /&gt;
&lt;br /&gt;
=== getsavepoint ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getsavepoint(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
type==0: Return savepoint map&lt;br /&gt;
type==1: Return savepoint x&lt;br /&gt;
type==2: Return savepoint y&lt;br /&gt;
&lt;br /&gt;
This is believed to be the only function (other than callfunc and callsub of course) that returns a different type depending on its arguments.&lt;br /&gt;
&lt;br /&gt;
=== shop ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    shop &amp;quot;npcname&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Close the script and open the given NPC&#039;s shop.&lt;br /&gt;
&lt;br /&gt;
=== isdead ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    isdead()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 1 if the attached player is dead, else 0.&lt;br /&gt;
&lt;br /&gt;
=== fakenpcname ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    fakenpcname &amp;quot;name&amp;quot;, &amp;quot;newname&amp;quot;, new_sprite_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Change the appearance of an NPC.&lt;br /&gt;
&lt;br /&gt;
== Location Commands ==&lt;br /&gt;
These are commands that have to do with the location of players&lt;br /&gt;
&lt;br /&gt;
=== warp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    warp &amp;quot;mapname&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Warp the attached player to the given location. &amp;quot;mapname&amp;quot; may have the special values &amp;quot;Random&amp;quot;, &amp;quot;SavePoint&amp;quot;, and &amp;quot;Save&amp;quot; (case-sensitive), but x and y are still required.&lt;br /&gt;
&lt;br /&gt;
=== isat ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    isat(&amp;quot;mapname&amp;quot;, x, y)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 1 if the attached player is at the given location, 0 otherwise.&lt;br /&gt;
&lt;br /&gt;
=== areawarp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    areawarp &amp;quot;src_map&amp;quot;, x0, y0, x1, y1, &amp;quot;dst_map&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Warp all players in the given area to the given location.&lt;br /&gt;
&lt;br /&gt;
=== getusers ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getusers(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count users.&lt;br /&gt;
&lt;br /&gt;
If flag &amp;amp; 0x8, base on OID instead of RID.&lt;br /&gt;
If (flag &amp;amp; 0x7) == 0, return users on the map.&lt;br /&gt;
If (flag &amp;amp; 0x7) == 1, return users on the server.&lt;br /&gt;
&lt;br /&gt;
=== getmapusers ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getmapusers(&amp;quot;mapname&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count users on a given map.&lt;br /&gt;
&lt;br /&gt;
=== getareausers ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getareausers(&amp;quot;mapname&amp;quot;, x0, y0, x1, y1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count users in an area.&lt;br /&gt;
&lt;br /&gt;
=== mapwarp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    mapwarp &amp;quot;src_map&amp;quot;, &amp;quot;dst_map&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Warp all players from source map to destination location.&lt;br /&gt;
&lt;br /&gt;
=== npcwarp ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    npcwarp x, y, &amp;quot;npcname&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Move an NPC to a different location on the same map.&lt;br /&gt;
&lt;br /&gt;
=== isin ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    isin(&amp;quot;mapname&amp;quot;, x0, y0, x1, y1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Check if the player is in the area.&lt;br /&gt;
&lt;br /&gt;
=== getx ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getx()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return attached player&#039;s x coordinate.&lt;br /&gt;
&lt;br /&gt;
=== gety ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    gety()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return attached player&#039;s y coordinate.&lt;br /&gt;
&lt;br /&gt;
== Item Commands ==&lt;br /&gt;
These have to do with items or inventory.&lt;br /&gt;
&lt;br /&gt;
=== getitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getitem &amp;quot;itemname&amp;quot;, count[, unused_argument[, playerid]];&lt;br /&gt;
    getitem itemid, count[, unused_argument[, playerid]];&lt;br /&gt;
&amp;quot;ii**&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Grant the attached player (or the given player) &amp;quot;count&amp;quot; copies of an item.&lt;br /&gt;
&lt;br /&gt;
If itemname is unrecognized you get an iten (727) instead.&lt;br /&gt;
&lt;br /&gt;
=== makeitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    makeitem &amp;quot;itemname&amp;quot;, count, &amp;quot;mapname&amp;quot;, x, y;&lt;br /&gt;
    makeitem itemid, count, &amp;quot;mapname&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Drop items on the ground.&lt;br /&gt;
&lt;br /&gt;
The special &amp;quot;mapname&amp;quot; value &amp;quot;this&amp;quot; means the map of the attached player.&lt;br /&gt;
&lt;br /&gt;
=== delitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    delitem &amp;quot;itemname&amp;quot;, count;&lt;br /&gt;
    delitem itemid, count;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Remove items from the attached player&#039;s inventory.&lt;br /&gt;
&lt;br /&gt;
This command is buggy if the player does not have enough of the item.&lt;br /&gt;
&lt;br /&gt;
=== countitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    countitem(&amp;quot;itemname&amp;quot;)&lt;br /&gt;
    countitem(itemid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the number of the given item in the player&#039;s inventory.&lt;br /&gt;
&lt;br /&gt;
=== checkweight ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    checkweight(&amp;quot;itemname&amp;quot;, count)&lt;br /&gt;
    checkweight(itemid, count)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 0 if adding &amp;quot;count&amp;quot; of the item would put player above max weight, 1 if it would still be less than max weight.&lt;br /&gt;
Also returns 0 if item does not exist.&lt;br /&gt;
&lt;br /&gt;
=== getequipid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getequipid(equip_point)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the ID of the item in the given equip slot.&lt;br /&gt;
&lt;br /&gt;
equip_point is one of the equip_* constants&lt;br /&gt;
&lt;br /&gt;
=== getequipname ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getequipname(equip_point)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the name of the item in the given equip slot.&lt;br /&gt;
&lt;br /&gt;
equip_point is one of the equip_* constants&lt;br /&gt;
&lt;br /&gt;
=== getequipisequiped ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getequipisequiped(num)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 1 if the player currently has an item equipped in the slot.&lt;br /&gt;
&lt;br /&gt;
=== statusup ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    statusup bType;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Permanently increase a stat by one point.&lt;br /&gt;
&lt;br /&gt;
=== statusup2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    statusup2 bType, delta;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Permanently increase or decrease a stat.&lt;br /&gt;
&lt;br /&gt;
=== bonus ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    bonus bType, delta&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Temporarily increase a stat. For use in item scripts only.&lt;br /&gt;
&lt;br /&gt;
=== skill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    skill id, level[, flag = 1];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Grant a skill.&lt;br /&gt;
&lt;br /&gt;
flag==0: permanent skill&lt;br /&gt;
flag==1: temporary skill (item scripts only)&lt;br /&gt;
&lt;br /&gt;
(Untested)&lt;br /&gt;
&lt;br /&gt;
=== setskill ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setskill id, level;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Grant a skill permanently.&lt;br /&gt;
&lt;br /&gt;
=== getskilllv ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getskilllv(skill)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the player&#039;s level of the given skill.&lt;br /&gt;
&lt;br /&gt;
=== getgmlevel ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getgmlevel()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the player&#039;s GM level.&lt;br /&gt;
&lt;br /&gt;
=== getopt2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getopt2()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the player&#039;s opt2 flags.&lt;br /&gt;
&lt;br /&gt;
=== setopt2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setopt2 flags;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the player&#039;s opt2 flags.&lt;br /&gt;
&lt;br /&gt;
=== checkoption ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    checkoption(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 1 if the player has any of the given (XOR&#039;ed) option bits. Usually only one is given.&lt;br /&gt;
&lt;br /&gt;
=== setoption ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setoption type&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the player&#039;s option flags exactly (not OR&#039;ing).&lt;br /&gt;
&lt;br /&gt;
=== savepoint ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    savepoint &amp;quot;mapname&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the player&#039;s save point. Used e.g. by Soul Menhirs, and during the time travel quest.&amp;lt;!-- Don&#039;t remove this just because you can&#039;t figure out how to start it from this end. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== openstorage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    openstorage;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Open the player&#039;s storage.&lt;br /&gt;
&lt;br /&gt;
=== getitemname ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getitemname(&amp;quot;itemname&amp;quot;)&lt;br /&gt;
    getitemname(itemid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the name of the item, or &amp;quot;Unknown Item&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== clearitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    clearitem;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Remove all items from a player&#039;s inventory.&lt;br /&gt;
&lt;br /&gt;
=== nude ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    nude;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unequip all items.&lt;br /&gt;
&lt;br /&gt;
=== hasitems ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    hasitems()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return 1 if the player has any inventory, 0 otherwise.&lt;br /&gt;
&lt;br /&gt;
=== unequipbyid ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    unequipbyid slot_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unequip whatever is in the slot&lt;br /&gt;
&lt;br /&gt;
=== getareadropitem ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getareadropitem(&amp;quot;mapname&amp;quot;, x0, y0, x1, y1, &amp;quot;itemname&amp;quot;[, delitems = 0]);&lt;br /&gt;
    getareadropitem(&amp;quot;mapname&amp;quot;, x0, y0, x1, y1, itemid[, delitems = 0]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count items on the floor in an area. If delitems, the items will be deleted as well.&lt;br /&gt;
&lt;br /&gt;
== Common Functions ==&lt;br /&gt;
These are not mostly not related to the RPG or the scripting language.&lt;br /&gt;
&lt;br /&gt;
=== rand ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    rand(range)&lt;br /&gt;
    rand(min, max)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In the first form, return a random number between 0 (inclusive) and range (exclusive). Return 0 if range is not positive.&lt;br /&gt;
In the second form, return a random number between min and max, inclusive. Min and max may be swapped.&lt;br /&gt;
&lt;br /&gt;
=== gettimetick ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    gettimetick(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return one of the ticks&lt;br /&gt;
&lt;br /&gt;
type==0 (or other): milliseconds since some point in time, wraps every 50 days.&lt;br /&gt;
type==1: time since midnight, UTC.&lt;br /&gt;
type==2: seconds since the epoch.&lt;br /&gt;
&lt;br /&gt;
You should almost always use type 2.&lt;br /&gt;
&lt;br /&gt;
=== gettime ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    gettime(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get a component of the time (UTC).&lt;br /&gt;
&lt;br /&gt;
1: second (0-59)&lt;br /&gt;
2: minute (0-59)&lt;br /&gt;
3: hour (0-23)&lt;br /&gt;
4: day of week (0-6)&lt;br /&gt;
5: day of month (1-31)&lt;br /&gt;
6: month (1-12)&lt;br /&gt;
7: year (1902-2038)&lt;br /&gt;
&lt;br /&gt;
=== gettimestr ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    gettimestr(&amp;quot;format&amp;quot;, length)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Frontend for strftime(3).&lt;br /&gt;
&lt;br /&gt;
This function may be removed for technical reasons, please construct the string manually using gettime().&lt;br /&gt;
&lt;br /&gt;
There is a script function that does this: callfunct &amp;quot;time_stamp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
== Timers and Events ==&lt;br /&gt;
These have to do with transfering control in ways that are not immediately obvious.&lt;br /&gt;
&lt;br /&gt;
The most common ones are initnpctimer or startnpctimer, stopnpctimer, and setnpctimer.&lt;br /&gt;
&lt;br /&gt;
=== doevent ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    doevent &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Manually invoke an NPC event.&lt;br /&gt;
&lt;br /&gt;
=== donpcevent ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    donpcevent &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Manually invoke an NPC event.&lt;br /&gt;
&lt;br /&gt;
=== addtimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    addtimer tick, &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Invoke an NPC event after a delay, for the attached NPC.&lt;br /&gt;
&lt;br /&gt;
This command does the same thing as areatimer, but for only the attached player.&lt;br /&gt;
&lt;br /&gt;
=== deltimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    deltimer &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This command is untested and might freeze the server.&lt;br /&gt;
&lt;br /&gt;
=== initnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    initnpctimer;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the NPC&#039;s attached timer to tick 0 and start it.&lt;br /&gt;
&lt;br /&gt;
This is equivalent to setnpctimer, 0; startnpctimer;&lt;br /&gt;
&lt;br /&gt;
=== stopnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    stopnpctimer;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Stop the NPC&#039;s attached timer.&lt;br /&gt;
&lt;br /&gt;
This DOES NOT do anything about the tick. But that&#039;s okay, you should normally be starting it with initnpctimer.&lt;br /&gt;
&lt;br /&gt;
=== startnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    startnpctimer;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Start the NPC&#039;s attached timer, without setting the tick.&lt;br /&gt;
&lt;br /&gt;
=== setnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setnpctimer tick;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the NPC&#039;s timer to a specific tick. Generally, this is only useful for tick 0.&lt;br /&gt;
&lt;br /&gt;
=== getnpctimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getnpctimer(type)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get the current tick of an NPC&#039;s timer.&lt;br /&gt;
&lt;br /&gt;
type==0: timer event tick (like setnpctimer)&lt;br /&gt;
type==1: bool if it has a next timer.&lt;br /&gt;
type==2: timer amount&lt;br /&gt;
&lt;br /&gt;
=== cmdothernpc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    cmdothernpc &amp;quot;npc&amp;quot;, &amp;quot;Foo&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Invoke ::OnCommandFoo&lt;br /&gt;
&lt;br /&gt;
=== mobcount ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    mobcount(&amp;quot;mapname&amp;quot;, &amp;quot;event&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Count the remaining mobs from the spawn with the given event.&lt;br /&gt;
&lt;br /&gt;
=== areatimer ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    areatimer &amp;quot;mapname&amp;quot;, x0, y0, x1, y1, tick, &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Add a PC event timer to all players in the area.&lt;br /&gt;
&lt;br /&gt;
After &amp;quot;tick&amp;quot; milliseconds, the given NPC event will fire with each player as the RID.&lt;br /&gt;
&lt;br /&gt;
== Unsorted Commands ==&lt;br /&gt;
These are commands that still need sorting, please edit this page, see talk page for category (and subcategory?) suggestions.&lt;br /&gt;
&lt;br /&gt;
=== monster ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    monster &amp;quot;mapname&amp;quot;, x, y, &amp;quot;string&amp;quot;, class, count[, &amp;quot;event&amp;quot;];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Spawn monsters at a point. If you define an OnDead event using a trigger area then the event is shot only inside that area, hence the event is ignored when the monster is killed outside the trigger area.&lt;br /&gt;
&lt;br /&gt;
=== areamonster ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    areamonster &amp;quot;mapname&amp;quot;, x0, y0, x1, y1, &amp;quot;string&amp;quot;, class, count[, &amp;quot;event&amp;quot;];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Spawn monsters in an area.&lt;br /&gt;
&lt;br /&gt;
=== killmonster ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    killmonster &amp;quot;mapname&amp;quot;, &amp;quot;event&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kill monsters on a map.&lt;br /&gt;
&lt;br /&gt;
Unless it is &amp;quot;All&amp;quot;, &amp;quot;event&amp;quot; must match the one used at spawn time.&lt;br /&gt;
&lt;br /&gt;
If &amp;quot;All&amp;quot; is given, this function properly preserves permanently respawning monsters.&lt;br /&gt;
&lt;br /&gt;
=== killmonsterall ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    killmonsterall &amp;quot;mapname&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kill all monsters unconditionally.&lt;br /&gt;
&lt;br /&gt;
This command might prevent monsters from respawning. Instead use &amp;quot;killmonster&amp;quot; with &amp;quot;event&amp;quot; == &amp;quot;All&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== enablenpc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    enablenpc &amp;quot;name&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Enable an NPC.&lt;br /&gt;
&lt;br /&gt;
=== disablenpc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    disablenpc &amp;quot;name&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Disable an NPC.&lt;br /&gt;
&lt;br /&gt;
=== hideoffnpc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    hideoffnpc &amp;quot;name&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
What does this do?&lt;br /&gt;
&lt;br /&gt;
=== hideonnpc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    hideonnpc &amp;quot;name&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
What does this do?&lt;br /&gt;
&lt;br /&gt;
=== setmapflagnosave ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setmapflagnosave &amp;quot;mapname&amp;quot;, &amp;quot;savemap&amp;quot;, x, y;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set the nosave flag and respawn location.&lt;br /&gt;
&lt;br /&gt;
=== setmapflag ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    setmapflag &amp;quot;mapname&amp;quot;, flag;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set an arbitrary mapflag.&lt;br /&gt;
&lt;br /&gt;
This function may be problematic in the stable version.&lt;br /&gt;
&lt;br /&gt;
=== removemapflag ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    removemapflag &amp;quot;mapname&amp;quot;, flag;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unset an arbitrary mapflag.&lt;br /&gt;
&lt;br /&gt;
This function may be problematic in the stable version.&lt;br /&gt;
&lt;br /&gt;
=== pvpon ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    pvpon &amp;quot;mapname&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Allow PvP on a map.&lt;br /&gt;
&lt;br /&gt;
=== pvpoff ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    pvpoff &amp;quot;mapname&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Deny PvP on a map.&lt;br /&gt;
&lt;br /&gt;
=== emotion ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    emotion emote_index;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Show a smiley above the OID.&lt;br /&gt;
&lt;br /&gt;
=== getspellinvocation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getspellinvocation(&amp;quot;spell-identifier&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the #invocation used for a spell, or &amp;quot;...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== getanchorinvocation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getanchorinvocation &amp;quot;anchor-identifier&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Return the invocation used for a teleport anchor (?)&lt;br /&gt;
&lt;br /&gt;
=== strmobinfo ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    strmobinfo(num, class)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Info about a type of mob:&lt;br /&gt;
num==1: name&lt;br /&gt;
num==2: jname&lt;br /&gt;
num==3: lv&lt;br /&gt;
num==4: maxhp&lt;br /&gt;
num==5: maxsp&lt;br /&gt;
num==6: base_exp&lt;br /&gt;
num==7: job_exp&lt;br /&gt;
&lt;br /&gt;
Note that only types 1 and 2 actually return strings, the rest return integers&lt;br /&gt;
&lt;br /&gt;
=== specialeffect ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    specialeffect type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Display a special effect on the OID.&lt;br /&gt;
&lt;br /&gt;
Same as &amp;quot;misceffect&amp;quot;, but does not fallback when there is no OID.&lt;br /&gt;
&lt;br /&gt;
=== specialeffect2 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    specialeffect2 type;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Same as &amp;quot;misceffect&amp;quot;, but works when there is an OID.&lt;br /&gt;
&lt;br /&gt;
=== gmcommand ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    gmcommand &amp;quot;@command maybe with arguments&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Run a GM command, at level 99.&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Raging_Skill&amp;diff=23658</id>
		<title>Raging Skill</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Raging_Skill&amp;diff=23658"/>
		<updated>2012-04-29T13:10:32Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Some small fixes regarding the backgroundstory of the quests&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{I18n}}&lt;br /&gt;
&lt;br /&gt;
{{Quest&lt;br /&gt;
|Image         = [[Image:yerrnk.png]][[Image:birrod-kimarr.png]]&lt;br /&gt;
|Start         = 033-1 Snow Path, Southwest of Nivalis&lt;br /&gt;
|Prerequisites = [[Focusing Skills]]&lt;br /&gt;
|Level         = 40&lt;br /&gt;
|Reward        = [[Raging Skill]]&lt;br /&gt;
|Cost          = Apples and/or Cakes&lt;br /&gt;
}}&lt;br /&gt;
The Barbarians are members of the Mangarr Tribe. Under the orders of first warrior Yerrnk, warrior Birrod and Hunter/warrior Kimarr are seeking help for a problem with unusually aggressive monsters threatening their tribe. You will have to prove your hunting skills with Kimarr, your chivalrous skill and mind with Birrod, and strength with Yerrnk. This may be adventure may seem hard but getting the Mangarr&#039;s respect and friendship is really worth the pain.&lt;br /&gt;
&lt;br /&gt;
==The First Quest - Hunting Hungry Fluffies==&lt;br /&gt;
# Talk to Kimarr, and he suggests you to prove your warrior ability and enter the closed area near the entrance to the cave. You agree and and are warped inside the area.&lt;br /&gt;
# You have to drop some Red Apples, Green Apples, Cakes or Xmas Cakes in order to call some Hungry Fluffies out. &lt;br /&gt;
##If you drop Apples &#039;&#039;&#039;one&#039;&#039;&#039; Hungry Fluffy is spawned per dropped apple.&lt;br /&gt;
##If you drop Cakes, &#039;&#039;&#039;three&#039;&#039;&#039; Hungry Fluffies are spawned per dropped cake.&lt;br /&gt;
##If you drop Xmas Cakes, &#039;&#039;&#039;five&#039;&#039;&#039; Hungry Fluffies are spawned per dropped Xmas cake.&lt;br /&gt;
# The goal of that minigame is to kill at least 1 + (YourLevel*7)/10 Hungry Fluffies in 3 minutes. If you fail, you may try until you succeed. You get [[Item Reference/Chest Armor#Yeti Shirt|Yeti Shirt]] as a reward for killing the required amount of Hungry Fluffies.&lt;br /&gt;
&lt;br /&gt;
==The Second Quest - Hunting Wolverns==&lt;br /&gt;
# You need to be at least &#039;&#039;&#039;level 40&#039;&#039;&#039; to complete this part.&lt;br /&gt;
# After that you have to talk to Birrod and to get the quest for killing Wolverns in the western Snow Forest (034-1). You have to kill at least 16 Wolverns. These wolverns will prepare ambushes against you by groups of 3 or 4, so watch out while walking in the forest.&lt;br /&gt;
# After killing the required number of Wolverns, go back to Birrod; he will ask you some questions. You will need to show yourself as brave and generous as possible.&lt;br /&gt;
# You will receive the [[Raging Skill]] and 5,000 XP as a reward. Also Birrod welcomes you as a tribe member.&lt;br /&gt;
&lt;br /&gt;
==The Third Quest - Hunting a Yeti==&lt;br /&gt;
# You need to be at least &#039;&#039;&#039;level 70&#039;&#039;&#039; to complete this part.&lt;br /&gt;
# Now talk to Yerrnk and ask him for a task. He asks you to kill a Yeti near a hut in the south-west part of Snow Forest (034-1).&lt;br /&gt;
# When you&#039;re done, return to Yerrnk to receive another reward, the [[Item Reference/Leg Armor#Leather Trousers|Leather Trousers]].&lt;br /&gt;
==Raging Skill==&lt;br /&gt;
&lt;br /&gt;
This [[Skills|skill]] is intended for warriors. When focused on it will make you hit harder with &#039;&#039;&#039;hand weapons&#039;&#039;&#039; by increasing the probablility of critical hits. This additional probability is based on &#039;&#039;&#039;strength&#039;&#039;&#039;, thus the higher strength, the more critical hits (and higher). You pay it with a &#039;&#039;defense noticeable decrease&#039;&#039;, so you may require healing assistance; but here again what is better than comradeship, born in blood, sweat and tears?&lt;br /&gt;
&lt;br /&gt;
==Hints:==&lt;br /&gt;
&lt;br /&gt;
* Every time you drop Apples or Cakes, not only fluffies can appear, but Ice Goblins, Wolverns and Yetis can come out, the number and strength depending on your level when you start the mini-game.&lt;br /&gt;
* If somebody helps you for the First Quest by using attack [[Spells]] for example, this person will die. You can be healed though.&lt;br /&gt;
* Use concentration and iron potions (3 each max)&lt;br /&gt;
&lt;br /&gt;
==Rewards:==&lt;br /&gt;
&lt;br /&gt;
* Yeti Shirt&lt;br /&gt;
* [[Raging Skill]]&lt;br /&gt;
* Leather Trousers&lt;br /&gt;
* 5,000 EXP&lt;br /&gt;
&lt;br /&gt;
==Total Cost:==&lt;br /&gt;
&lt;br /&gt;
* Red Apples&lt;br /&gt;
* Green Apples&lt;br /&gt;
* Cakes&lt;br /&gt;
* Xmas Cakes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Skills]]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Tilesets&amp;diff=23608</id>
		<title>Development:Tilesets</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Tilesets&amp;diff=23608"/>
		<updated>2012-03-23T22:23:17Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: /* Needed tilesets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Category_art}}&lt;br /&gt;
{{Status_green}}&lt;br /&gt;
== Getting started ==&lt;br /&gt;
&lt;br /&gt;
To get started on tileset development, please look into what kind of areas we plan to add to the game or what kind of changes we would still want to make to existing maps. See for example [[Geography]] and [[concept art]]. Ideas of your own are welcome too!&lt;br /&gt;
&lt;br /&gt;
== General specifications ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Tile size:&#039;&#039;&#039; 32x32&lt;br /&gt;
* &#039;&#039;&#039;Tileset size:&#039;&#039;&#039; Width: 512, Max height: 512 (for 1x1 sets)&lt;br /&gt;
* &#039;&#039;&#039;Color Depth:&#039;&#039;&#039; 24 or 32 (alpha layer optional, no magic colors)&lt;br /&gt;
* &#039;&#039;&#039;File Format:&#039;&#039;&#039; [http://www.libpng.org/pub/png/ PNG]&lt;br /&gt;
* &#039;&#039;&#039;Current tilesets:&#039;&#039;&#039; https://github.com/themanaworld/tmwa-client-data/tree/master/graphics/tiles&lt;br /&gt;
&lt;br /&gt;
Please also note our [[Guidelines|style guidelines]].&lt;br /&gt;
&lt;br /&gt;
== Guidelines ==&lt;br /&gt;
*Please keep in mind how maps are made (see [[Map development]]). The lowest layer is usually used for ground tiles/walls.&lt;br /&gt;
&lt;br /&gt;
*Although we prefer high quality tiles over low quality ones, please keep in mind that we try to resemble the look of old SNES games. So please try not to make the tiles too realistic. Please don&#039;t use realistic textures, such as a photo of a wooden piece, and use it for your tiles. We strongly encourage you to &#039;&#039;&#039;manually pixelate every tile&#039;&#039;&#039; and &#039;&#039;&#039;avoid to use gradients or filters (such as blur)&#039;&#039;&#039; excessively.&lt;br /&gt;
&lt;br /&gt;
*Regarding &#039;&#039;&#039;color choice&#039;&#039;&#039;: Keep your color palette narrow. Don&#039;t use more shades per color than necessary. 3 shades of one color are usually enough for small objects. Even very large objects shouldn&#039;t use more than 5 or 7 shades. But how many shades you use is in the end left up to the artists discretion. Keep in mind that dithering is usually used for structure effects in TMW and rarely for blending one color into another. When a structure effect is not needed you shoud better add an additional shade instead of applying too much dithering just for color blending. &lt;br /&gt;
*Try to use the &#039;&#039;&#039;same color palette for the whole tileset&#039;&#039;&#039;. The selection of color is important for the feeling of the tileset. Cold colors with a low saturation are good for a sad and cold feeling for example while warm and saturated colors create a warm and cheerful atmosphere (but please don&#039;t overdo the saturation). Whatever atmosphere you choose, it should be consistent through the whole tileset. When you create new tiles for existing tilesets you should try to use only colors that are already used in the tileset. Otherwise your new tiles will stand out and look weird when next to the old tiles.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Visible outlines&#039;&#039;&#039; are reserved for sprites. Please avoid them when creating map tiles.&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;light direction&#039;&#039;&#039; is south-west for outdoor tilesets. Imagine the light source to be over your left shoulder. Of course there can be exceptions to this rule. Different or special areas may have a different direction of light to give it a subtle different feeling, such as lava caves with subtle orange light from the bottom, and deep in the dark forest with glowing mushrooms. For indoor tilesets diffused light is nice, but overusage could lead into problems with contrast between the inside and the outside.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Perspective:&#039;&#039;&#039; top-down 45Â° view angle (see the schematic to the right).[[Image:Perspective_Reference.png|right|384px]] SVG version: [http://lasdomogrod.pl/tmw/perspective-reference/TMW-PerspectiveReference.svg TMW-PerspectiveReference.svg]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Proportions:&#039;&#039;&#039; A character is approximately one tile wide and two tiles high. Don&#039;t be afraid to copy a player character into your image from time to time to check the size relation.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Drop shadows:&#039;&#039;&#039; Large objects on outdoor tilesets (like buildings, for example) should have drop shadows cast to the northeast. The shadows should be pure black with an opacity of 30%. The edges of the shadows should only have an opacity of 15%.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Reuse:&#039;&#039;&#039; The tiles in one tileset should be able to be put together in as many different ways as possible to allow the mapper to express his creativity.&lt;br /&gt;
&lt;br /&gt;
== Current projects ==&lt;br /&gt;
These are tilesets that are currently under development. The name of the developer in charge is in brackets. When you want to help you should contact them or just write into their threads in the [http://forums.themanaworld.org/viewforum.php?f=8 graphic development forum].&lt;br /&gt;
* Thermin indoor, outdoor and cave Tilesets (Merlin and others): http://forums.themanaworld.org/viewtopic.php?f=8&amp;amp;t=14228&lt;br /&gt;
* Graveyard and crypt tileset (various people): http://forums.themanaworld.org/viewtopic.php?f=4&amp;amp;t=3338&amp;amp;p=47287 http://forums.themanaworld.org/viewtopic.php?f=8&amp;amp;t=3724 https://trello.com/card/crypt-tilesets/4ea730ee9982b463f800497e/89&lt;br /&gt;
&lt;br /&gt;
== Stalled projects ==&lt;br /&gt;
These are tilesets that have been started, but unfortunately the artists who started them haven&#039;t got the time to finish them. So we are searching for people who want to continue their work so that it isn&#039;t wasted.&lt;br /&gt;
*Ice Cave Tileset (data/graphics/tiles/icecave.png)&lt;br /&gt;
*Savannah Tileset (http://forums.themanaworld.org/viewtopic.php?t=1348)&lt;br /&gt;
*Desert Tileset ([[User:VxD|VxD]]) development thread : http://forums.themanaworld.org/viewtopic.php?t=1913&lt;br /&gt;
&lt;br /&gt;
== Needed tilesets ==&lt;br /&gt;
These are tilesets that will be required in the near future.&lt;br /&gt;
* Barbarian village indoor and outdoor&lt;br /&gt;
&lt;br /&gt;
== Other Tilesets ==&lt;br /&gt;
Beside these tilesets there is of course a lot of other stuff planned for the future. Refer to [[Geography]] for a list of regions that we have planned. And then there are a lot of different themed dungeons we could make. When you got an idea about a scenario you could make a tileset for you should post on the graphic design forum so we can refine the concept together.&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Tilesets&amp;diff=23607</id>
		<title>Development:Tilesets</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Tilesets&amp;diff=23607"/>
		<updated>2012-03-23T22:21:52Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: /* Current projects */  Information updated to currently active projects&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Category_art}}&lt;br /&gt;
{{Status_green}}&lt;br /&gt;
== Getting started ==&lt;br /&gt;
&lt;br /&gt;
To get started on tileset development, please look into what kind of areas we plan to add to the game or what kind of changes we would still want to make to existing maps. See for example [[Geography]] and [[concept art]]. Ideas of your own are welcome too!&lt;br /&gt;
&lt;br /&gt;
== General specifications ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Tile size:&#039;&#039;&#039; 32x32&lt;br /&gt;
* &#039;&#039;&#039;Tileset size:&#039;&#039;&#039; Width: 512, Max height: 512 (for 1x1 sets)&lt;br /&gt;
* &#039;&#039;&#039;Color Depth:&#039;&#039;&#039; 24 or 32 (alpha layer optional, no magic colors)&lt;br /&gt;
* &#039;&#039;&#039;File Format:&#039;&#039;&#039; [http://www.libpng.org/pub/png/ PNG]&lt;br /&gt;
* &#039;&#039;&#039;Current tilesets:&#039;&#039;&#039; https://github.com/themanaworld/tmwa-client-data/tree/master/graphics/tiles&lt;br /&gt;
&lt;br /&gt;
Please also note our [[Guidelines|style guidelines]].&lt;br /&gt;
&lt;br /&gt;
== Guidelines ==&lt;br /&gt;
*Please keep in mind how maps are made (see [[Map development]]). The lowest layer is usually used for ground tiles/walls.&lt;br /&gt;
&lt;br /&gt;
*Although we prefer high quality tiles over low quality ones, please keep in mind that we try to resemble the look of old SNES games. So please try not to make the tiles too realistic. Please don&#039;t use realistic textures, such as a photo of a wooden piece, and use it for your tiles. We strongly encourage you to &#039;&#039;&#039;manually pixelate every tile&#039;&#039;&#039; and &#039;&#039;&#039;avoid to use gradients or filters (such as blur)&#039;&#039;&#039; excessively.&lt;br /&gt;
&lt;br /&gt;
*Regarding &#039;&#039;&#039;color choice&#039;&#039;&#039;: Keep your color palette narrow. Don&#039;t use more shades per color than necessary. 3 shades of one color are usually enough for small objects. Even very large objects shouldn&#039;t use more than 5 or 7 shades. But how many shades you use is in the end left up to the artists discretion. Keep in mind that dithering is usually used for structure effects in TMW and rarely for blending one color into another. When a structure effect is not needed you shoud better add an additional shade instead of applying too much dithering just for color blending. &lt;br /&gt;
*Try to use the &#039;&#039;&#039;same color palette for the whole tileset&#039;&#039;&#039;. The selection of color is important for the feeling of the tileset. Cold colors with a low saturation are good for a sad and cold feeling for example while warm and saturated colors create a warm and cheerful atmosphere (but please don&#039;t overdo the saturation). Whatever atmosphere you choose, it should be consistent through the whole tileset. When you create new tiles for existing tilesets you should try to use only colors that are already used in the tileset. Otherwise your new tiles will stand out and look weird when next to the old tiles.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Visible outlines&#039;&#039;&#039; are reserved for sprites. Please avoid them when creating map tiles.&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;light direction&#039;&#039;&#039; is south-west for outdoor tilesets. Imagine the light source to be over your left shoulder. Of course there can be exceptions to this rule. Different or special areas may have a different direction of light to give it a subtle different feeling, such as lava caves with subtle orange light from the bottom, and deep in the dark forest with glowing mushrooms. For indoor tilesets diffused light is nice, but overusage could lead into problems with contrast between the inside and the outside.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Perspective:&#039;&#039;&#039; top-down 45Â° view angle (see the schematic to the right).[[Image:Perspective_Reference.png|right|384px]] SVG version: [http://lasdomogrod.pl/tmw/perspective-reference/TMW-PerspectiveReference.svg TMW-PerspectiveReference.svg]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Proportions:&#039;&#039;&#039; A character is approximately one tile wide and two tiles high. Don&#039;t be afraid to copy a player character into your image from time to time to check the size relation.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Drop shadows:&#039;&#039;&#039; Large objects on outdoor tilesets (like buildings, for example) should have drop shadows cast to the northeast. The shadows should be pure black with an opacity of 30%. The edges of the shadows should only have an opacity of 15%.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Reuse:&#039;&#039;&#039; The tiles in one tileset should be able to be put together in as many different ways as possible to allow the mapper to express his creativity.&lt;br /&gt;
&lt;br /&gt;
== Current projects ==&lt;br /&gt;
These are tilesets that are currently under development. The name of the developer in charge is in brackets. When you want to help you should contact them or just write into their threads in the [http://forums.themanaworld.org/viewforum.php?f=8 graphic development forum].&lt;br /&gt;
* Thermin indoor, outdoor and cave Tilesets (Merlin and others): http://forums.themanaworld.org/viewtopic.php?f=8&amp;amp;t=14228&lt;br /&gt;
* Graveyard and crypt tileset (various people): http://forums.themanaworld.org/viewtopic.php?f=4&amp;amp;t=3338&amp;amp;p=47287 http://forums.themanaworld.org/viewtopic.php?f=8&amp;amp;t=3724 https://trello.com/card/crypt-tilesets/4ea730ee9982b463f800497e/89&lt;br /&gt;
&lt;br /&gt;
== Stalled projects ==&lt;br /&gt;
These are tilesets that have been started, but unfortunately the artists who started them haven&#039;t got the time to finish them. So we are searching for people who want to continue their work so that it isn&#039;t wasted.&lt;br /&gt;
*Ice Cave Tileset (data/graphics/tiles/icecave.png)&lt;br /&gt;
*Savannah Tileset (http://forums.themanaworld.org/viewtopic.php?t=1348)&lt;br /&gt;
*Desert Tileset ([[User:VxD|VxD]]) development thread : http://forums.themanaworld.org/viewtopic.php?t=1913&lt;br /&gt;
&lt;br /&gt;
== Needed tilesets ==&lt;br /&gt;
These are tilesets that will be required in the near future.&lt;br /&gt;
Right now, there are no tilesets required, but when there are, they will be posted here.&lt;br /&gt;
&lt;br /&gt;
== Other Tilesets ==&lt;br /&gt;
Beside these tilesets there is of course a lot of other stuff planned for the future. Refer to [[Geography]] for a list of regions that we have planned. And then there are a lot of different themed dungeons we could make. When you got an idea about a scenario you could make a tileset for you should post on the graphic design forum so we can refine the concept together.&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Tilesets&amp;diff=23606</id>
		<title>Development:Tilesets</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Tilesets&amp;diff=23606"/>
		<updated>2012-03-23T22:15:58Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: /* General specifications */  Update link to git repository&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Category_art}}&lt;br /&gt;
{{Status_green}}&lt;br /&gt;
== Getting started ==&lt;br /&gt;
&lt;br /&gt;
To get started on tileset development, please look into what kind of areas we plan to add to the game or what kind of changes we would still want to make to existing maps. See for example [[Geography]] and [[concept art]]. Ideas of your own are welcome too!&lt;br /&gt;
&lt;br /&gt;
== General specifications ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Tile size:&#039;&#039;&#039; 32x32&lt;br /&gt;
* &#039;&#039;&#039;Tileset size:&#039;&#039;&#039; Width: 512, Max height: 512 (for 1x1 sets)&lt;br /&gt;
* &#039;&#039;&#039;Color Depth:&#039;&#039;&#039; 24 or 32 (alpha layer optional, no magic colors)&lt;br /&gt;
* &#039;&#039;&#039;File Format:&#039;&#039;&#039; [http://www.libpng.org/pub/png/ PNG]&lt;br /&gt;
* &#039;&#039;&#039;Current tilesets:&#039;&#039;&#039; https://github.com/themanaworld/tmwa-client-data/tree/master/graphics/tiles&lt;br /&gt;
&lt;br /&gt;
Please also note our [[Guidelines|style guidelines]].&lt;br /&gt;
&lt;br /&gt;
== Guidelines ==&lt;br /&gt;
*Please keep in mind how maps are made (see [[Map development]]). The lowest layer is usually used for ground tiles/walls.&lt;br /&gt;
&lt;br /&gt;
*Although we prefer high quality tiles over low quality ones, please keep in mind that we try to resemble the look of old SNES games. So please try not to make the tiles too realistic. Please don&#039;t use realistic textures, such as a photo of a wooden piece, and use it for your tiles. We strongly encourage you to &#039;&#039;&#039;manually pixelate every tile&#039;&#039;&#039; and &#039;&#039;&#039;avoid to use gradients or filters (such as blur)&#039;&#039;&#039; excessively.&lt;br /&gt;
&lt;br /&gt;
*Regarding &#039;&#039;&#039;color choice&#039;&#039;&#039;: Keep your color palette narrow. Don&#039;t use more shades per color than necessary. 3 shades of one color are usually enough for small objects. Even very large objects shouldn&#039;t use more than 5 or 7 shades. But how many shades you use is in the end left up to the artists discretion. Keep in mind that dithering is usually used for structure effects in TMW and rarely for blending one color into another. When a structure effect is not needed you shoud better add an additional shade instead of applying too much dithering just for color blending. &lt;br /&gt;
*Try to use the &#039;&#039;&#039;same color palette for the whole tileset&#039;&#039;&#039;. The selection of color is important for the feeling of the tileset. Cold colors with a low saturation are good for a sad and cold feeling for example while warm and saturated colors create a warm and cheerful atmosphere (but please don&#039;t overdo the saturation). Whatever atmosphere you choose, it should be consistent through the whole tileset. When you create new tiles for existing tilesets you should try to use only colors that are already used in the tileset. Otherwise your new tiles will stand out and look weird when next to the old tiles.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Visible outlines&#039;&#039;&#039; are reserved for sprites. Please avoid them when creating map tiles.&lt;br /&gt;
&lt;br /&gt;
*The &#039;&#039;&#039;light direction&#039;&#039;&#039; is south-west for outdoor tilesets. Imagine the light source to be over your left shoulder. Of course there can be exceptions to this rule. Different or special areas may have a different direction of light to give it a subtle different feeling, such as lava caves with subtle orange light from the bottom, and deep in the dark forest with glowing mushrooms. For indoor tilesets diffused light is nice, but overusage could lead into problems with contrast between the inside and the outside.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Perspective:&#039;&#039;&#039; top-down 45Â° view angle (see the schematic to the right).[[Image:Perspective_Reference.png|right|384px]] SVG version: [http://lasdomogrod.pl/tmw/perspective-reference/TMW-PerspectiveReference.svg TMW-PerspectiveReference.svg]&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Proportions:&#039;&#039;&#039; A character is approximately one tile wide and two tiles high. Don&#039;t be afraid to copy a player character into your image from time to time to check the size relation.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Drop shadows:&#039;&#039;&#039; Large objects on outdoor tilesets (like buildings, for example) should have drop shadows cast to the northeast. The shadows should be pure black with an opacity of 30%. The edges of the shadows should only have an opacity of 15%.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Reuse:&#039;&#039;&#039; The tiles in one tileset should be able to be put together in as many different ways as possible to allow the mapper to express his creativity.&lt;br /&gt;
&lt;br /&gt;
== Current projects ==&lt;br /&gt;
These are tilesets that are currently under development. The name of the developer in charge is in brackets. When you want to help you should contact them or just write into their threads in the [http://forums.themanaworld.org/viewforum.php?f=8 graphic development forum].&lt;br /&gt;
*Castle Walls Tileset ([[User:Irukard|Irukard]]) : http://forums.themanaworld.org/viewtopic.php?t=2034&lt;br /&gt;
* Graveyard tileset (various people): http://forums.themanaworld.org/viewtopic.php?f=4&amp;amp;t=3338&amp;amp;p=47287 http://forums.themanaworld.org/viewtopic.php?f=8&amp;amp;t=3724&lt;br /&gt;
&lt;br /&gt;
== Stalled projects ==&lt;br /&gt;
These are tilesets that have been started, but unfortunately the artists who started them haven&#039;t got the time to finish them. So we are searching for people who want to continue their work so that it isn&#039;t wasted.&lt;br /&gt;
*Ice Cave Tileset (data/graphics/tiles/icecave.png)&lt;br /&gt;
*Savannah Tileset (http://forums.themanaworld.org/viewtopic.php?t=1348)&lt;br /&gt;
*Desert Tileset ([[User:VxD|VxD]]) development thread : http://forums.themanaworld.org/viewtopic.php?t=1913&lt;br /&gt;
&lt;br /&gt;
== Needed tilesets ==&lt;br /&gt;
These are tilesets that will be required in the near future.&lt;br /&gt;
Right now, there are no tilesets required, but when there are, they will be posted here.&lt;br /&gt;
&lt;br /&gt;
== Other Tilesets ==&lt;br /&gt;
Beside these tilesets there is of course a lot of other stuff planned for the future. Refer to [[Geography]] for a list of regions that we have planned. And then there are a lot of different themed dungeons we could make. When you got an idea about a scenario you could make a tileset for you should post on the graphic design forum so we can refine the concept together.&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:How_to_Develop&amp;diff=23502</id>
		<title>Development:How to Develop</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:How_to_Develop&amp;diff=23502"/>
		<updated>2012-02-16T20:30:25Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: Update the url for the content repository&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Set Up=&lt;br /&gt;
This is a how to help content development for official TMW-eA using Ubuntu and the Mana client. Other OS and clients may differ. Following this guide, you should be able to get development testing versions of the client data (tmwdata), server-data (eathena-data) and participate in development by using a localhost server. After getting these, you can both test current development and begin development in the direction you find most fitting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dependencies==&lt;br /&gt;
In addition to the basic build tools (GCC, Make, headers, ...), Bison, and Flex are needed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Debian derivates (including Ubuntu)&#039;&#039;&#039;&lt;br /&gt;
* Open a terminal.&lt;br /&gt;
* &#039;&#039;sudo apt-get install build-essential flex bison&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Set Up Own Server==&lt;br /&gt;
&#039;&#039;&#039;Here are the steps to use when creating a new local testing server.&#039;&#039;&#039;&lt;br /&gt;
* Open a terminal.&lt;br /&gt;
* &#039;&#039;mkdir ~/tmw-ea&#039;&#039;&lt;br /&gt;
* &#039;&#039;cd ~/tmw-ea/&#039;&#039;&lt;br /&gt;
* &#039;&#039;git clone git://gitorious.org/tmw-eathena/mainline.git eathena&#039;&#039;&lt;br /&gt;
* &#039;&#039;git clone --recursive git://github.com/themanaworld/tmwa-server-data.git eathena-data&#039;&#039;&lt;br /&gt;
* &#039;&#039;cd eathena/&#039;&#039;&lt;br /&gt;
* If you are running and older version of make: &#039;&#039;mkdir -p obj/{common,login,char,map,ladmin,tool}&#039;&#039;. Debian, Ubuntu, Redhat, SuSE, Knoppix, and Cygwin in particular are famous for still not having Make 3.82, which is a much more compliant implementation. If you are technically inclined, I recommend installing it in /usr/local. -o11c&lt;br /&gt;
* &#039;&#039;make&#039;&#039;&lt;br /&gt;
* &#039;&#039;sudo cp login-server char-server map-server ladmin /usr/local/bin/&#039;&#039;&lt;br /&gt;
* &#039;&#039;git config --global url.git@gitorious.org:.pushInsteadOf git://gitorious.org&#039;&#039; {{ref|push}} {{ref|once}}&lt;br /&gt;
* &#039;&#039;cd ../eathena-data&#039;&#039;&lt;br /&gt;
* Preferably, add the update hooks.&lt;br /&gt;
** &#039;&#039;ln -s ../../git/hooks/post-merge .git/hooks/&#039;&#039;&lt;br /&gt;
** &#039;&#039;ln -s ../../../git/hooks/post-merge client-data/.git/hooks/&#039;&#039;&lt;br /&gt;
* &#039;&#039;make conf&#039;&#039;&lt;br /&gt;
* &#039;&#039;cd client-data&#039;&#039;&lt;br /&gt;
* &#039;&#039;git checkout master&#039;&#039;&lt;br /&gt;
* &#039;&#039;cd music&#039;&#039;&lt;br /&gt;
* &#039;&#039;git checkout master&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can now launch your test server.&#039;&#039;&#039;&lt;br /&gt;
* Open a terminal.&lt;br /&gt;
* &#039;&#039;cd ~/tmw-ea/eathena-data/&#039;&#039;&lt;br /&gt;
* &#039;&#039;./char-server&amp;amp; ./login-server&amp;amp; ./map-server&amp;amp;&#039;&#039;&lt;br /&gt;
* Open another terminal.&lt;br /&gt;
* &#039;&#039;mana --server localhost --port 6901 -u -d ~/tmw-ea/eathena-data/client-data&#039;&#039;&lt;br /&gt;
This should run all three of your servers and the client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Make yourself a GM so you can test changes made.&#039;&#039;&#039;&lt;br /&gt;
See [[#Administration]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;See also:&#039;&#039;&#039; [[GM Commands]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You are now free to do some changes, first close the client and your servers.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Notes for client data changes: 1) commit and push them in the client-data repo 2) commit and push &amp;quot;client-data&amp;quot; when it shows &amp;quot;(new commits)&amp;quot; in your server-data 3) commit and push other server data changes.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
* Make your modifications (e.g. Change a map) and save them.&lt;br /&gt;
* Open a terminal.&lt;br /&gt;
* &#039;&#039;cd ~/tmw-ea/eathena-data/client-data&#039;&#039;&lt;br /&gt;
* &#039;&#039;git status&#039;&#039;&lt;br /&gt;
* &#039;&#039;git add [modified files]&#039;&#039;&lt;br /&gt;
* &#039;&#039;git commit&#039;&#039;&lt;br /&gt;
* &#039;&#039;git push&#039;&#039; {{note|push}}&lt;br /&gt;
* &#039;&#039;cd ..&#039;&#039;&lt;br /&gt;
* &#039;&#039;make maps&#039;&#039; (if you changed a map)&lt;br /&gt;
* &#039;&#039;git status&#039;&#039;&lt;br /&gt;
* &#039;&#039;git add [modified files]&#039;&#039;&lt;br /&gt;
* &#039;&#039;git add client-data&#039;&#039; (if &#039;&#039;git status&#039;&#039; shows &#039;&#039;(new commits)&#039;&#039;. &#039;&#039;&#039;Don&#039;t do this if you don&#039;t have push access to client-data!&#039;&#039;&#039;)&lt;br /&gt;
* &#039;&#039;git commit&#039;&#039;&lt;br /&gt;
* &#039;&#039;git push&#039;&#039; {{note|push}}&lt;br /&gt;
* Close the terminal.&lt;br /&gt;
&lt;br /&gt;
{{note|push}} : a step for those with commit access to the remote repositories.  For others, you don&#039;t need to reconfigure your clone and please make a patch on steps where &#039;&#039;git push&#039;&#039; is suggested.  &lt;br /&gt;
&lt;br /&gt;
{{note|once}} : you only need to do this once, no matter how many times you independently clone the repositories.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;git format-patch -M -C origin/master&#039;&#039;&lt;br /&gt;
* pastebin the patch(es) and post for review at irc.themanaworld.org channel: #tmw-dev or on our [http://forums.themanaworld.org/viewforum.php?f=18 development forums]. &#039;&#039;&#039;Extensive patches must be posted on the forum as a series of well-formed patches with descriptive commit messages.&#039;&#039;&#039; In particular, later patches should not fix errors introduced in earlier patches, and each patch should form a logically independent part.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can also pull the data which has been modified.&#039;&#039;&#039;&lt;br /&gt;
* Open a terminal.&lt;br /&gt;
* &#039;&#039;cd ~/tmw-ea/eathena-data&#039;&#039;&lt;br /&gt;
* &#039;&#039;git pull&#039;&#039;&lt;br /&gt;
* If you haven&#039;t installed the hook, &#039;&#039;git submodule update --merge&#039;&#039; at toplevel (for client-data) and in client-data (for music)&lt;br /&gt;
* Close the terminal.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;See Also:&#039;&#039;&#039; [http://wiki.themanaworld.org/images/3/33/README.mv.txt README.mv.txt] - Documentation on using git submodules, like client-data and tmw-music.&lt;br /&gt;
&lt;br /&gt;
== Administration ==&lt;br /&gt;
# Start the servers.&lt;br /&gt;
# Open a command line terminal.&lt;br /&gt;
# cd ~/tmw-ea/eathena-data/login&lt;br /&gt;
# ladmin (not ./ladmin)&lt;br /&gt;
# add username M password&lt;br /&gt;
# gm username 99&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Connecting ==&lt;br /&gt;
# Open a command line terminal.&lt;br /&gt;
# Run your client pointing to your client data and your local server. E.g. mana -u -d ~/tmw-ea/tmwdata --server localhost --port 6901&lt;br /&gt;
&lt;br /&gt;
If all goes well, you are now ready to test new content and participate with development.&lt;br /&gt;
&lt;br /&gt;
=Making Content=&lt;br /&gt;
==Making Map Content==&lt;br /&gt;
===Java Converter Tool===&lt;br /&gt;
This has been my experience on running the java Converter tools, which takes map data from client-data and applies it to the server-data.  The README addresses dependencies for using this tool.  It suggests there are other ways it can work in the README, if this method does work for you.&lt;br /&gt;
&lt;br /&gt;
Edit your map and save it. You can push the client data now. Now, you need to run the converter.&lt;br /&gt;
# cd ~/tmw-ea/eathena-data/&lt;br /&gt;
# make maps&lt;br /&gt;
After that, commit and push the files that the converter edited.&lt;br /&gt;
&lt;br /&gt;
==Getting Art Content Into The Game==&lt;br /&gt;
* Post [CPT] or [WIP] art on the [http://forums.themanaworld.org/viewforum.php?f=8 graphics development forum].&lt;br /&gt;
* Work with the Art Director and collaborators on getting the art consistent.&lt;br /&gt;
* When finished, edit topic as [FND].&lt;br /&gt;
* Art Director approves [FND] art and marks it [RC].  Should the art need animation or special effect, the Art Director requests xml for it.  If not, the Art Director commits it and marks as [GIT].&lt;br /&gt;
* XML Team reviews or drafts xml related to the art, then commits the .png and .xml.  Topic can be marked as [GIT].&lt;br /&gt;
::* Art content affected: client-data/graphics/sprites then related directory for .png and .xml animation addition.&lt;br /&gt;
* Project developer requests database entry reservations from a General Content Team developer.&lt;br /&gt;
::* Map entry server data affected: resnametable.txt and .wlk files in the data directory, map content files in the npc directory.&lt;br /&gt;
::* Map entry client data affected: .tmx files in the maps directory.&lt;br /&gt;
::* Map entry requires the running of the .tmx converter (aka java converter) before commits can be made.&lt;br /&gt;
::* Art content server data affected: entry made in the item_db.txt, mob_db.txt or mob_skills_db.txt in the db directory.&lt;br /&gt;
::* Art content client data affected: entry added in items.xml, monsters.xml or other identification file.&lt;br /&gt;
&lt;br /&gt;
===Handling General Content Team [REQ]s===&lt;br /&gt;
* General Content Team member adds a [REQ] topic to the graphics development forum.&lt;br /&gt;
* General Content Team member adds the [REQ] topic as a hyperlink under &amp;quot;Required Art&amp;quot; on the [[Art in Development]] page.&lt;br /&gt;
* Art Director attempts to network with other artists to assign the art to an artist.&lt;br /&gt;
&lt;br /&gt;
==Bit Masking==&lt;br /&gt;
Bit Masking helps us reduce our variable count while offering a dynamic method of script writing that is versatile and flexible to both linear and non-linear script writing. &lt;br /&gt;
&lt;br /&gt;
[http://dl.dropbox.com/u/6520164/tester1.txt Bit Masking Test Script]&lt;br /&gt;
&lt;br /&gt;
=Using the Test Server=&lt;br /&gt;
*[[Testing Server]]&lt;br /&gt;
=Using The Mana World Workshop=&lt;br /&gt;
*[http://locke.suu.edu/~adams/mana/workshop/manual/ The Mana World Workshop Manual]&lt;br /&gt;
&lt;br /&gt;
=Trouble Shooting=&lt;br /&gt;
see [http://wiki.themanaworld.org/index.php/Setting_up_eAthena_on_Linux#Troubleshooting for Linux Troubleshooting]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Item_Reference/Miscellaneous&amp;diff=23260</id>
		<title>Item Reference/Miscellaneous</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Item_Reference/Miscellaneous&amp;diff=23260"/>
		<updated>2012-01-15T10:18:05Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: The Hitchhiker&amp;#039;s Towels are still obtainable.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Category playerinfo}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Item Reference Page}}&lt;br /&gt;
&lt;br /&gt;
The items are sorted first by price, then by ID.&lt;br /&gt;
&lt;br /&gt;
==Other==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Image&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Name (ID)&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | BUY/Sell&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Weight&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; width=&amp;quot;350px&amp;quot; | Description&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Rarity&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-mopoxcurepotion.png]]&lt;br /&gt;
| Mopox Cure Potion &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(746)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0 GP&amp;lt;br&amp;gt;0 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| A gooey brew with a vile smell, supposedly able to cure Mopox.&lt;br /&gt;
| Unreleased&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-bluehint.png]]&lt;br /&gt;
| Aqua Hint &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(551)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 20 GP&amp;lt;br&amp;gt;0 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A hint.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-magentahint.png]]&lt;br /&gt;
| Magenta Hint &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(552)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 20 GP&amp;lt;br&amp;gt;0 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A hint.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-yellowhint.png]]&lt;br /&gt;
| Yellow Hint &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(553)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 20 GP&amp;lt;br&amp;gt;0 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A hint.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-greenhint.png]]&lt;br /&gt;
| Green Hint &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(554)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 20 GP&amp;lt;br&amp;gt;0 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A hint.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-tealhint.png]]&lt;br /&gt;
| Teal Hint &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(555)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 20 GP&amp;lt;br&amp;gt;0 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A hint.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-purplehint.png]]&lt;br /&gt;
| Purple Hint &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(556)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 20 GP&amp;lt;br&amp;gt;0 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A hint.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-redhint.png]]&lt;br /&gt;
| Red Hint &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(557)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 20 GP&amp;lt;br&amp;gt;0 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A hint.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-otherbluehint.png]]&lt;br /&gt;
| Blue Hint &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(558)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 20 GP&amp;lt;br&amp;gt;0 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A hint.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-orangehint.png]]&lt;br /&gt;
| Orange Hint &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(559)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 20 GP&amp;lt;br&amp;gt;0 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A hint.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-greyhint.png]]&lt;br /&gt;
| Grey Hint &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(560)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 20 GP&amp;lt;br&amp;gt;0 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A hint.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:generic-iten.png]]&lt;br /&gt;
| Iten &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(727)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0 GP&amp;lt;br&amp;gt;0 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 8000&lt;br /&gt;
| An iten.&lt;br /&gt;
| [[Tulimshar Quests|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:generic-warped-log.png]]&lt;br /&gt;
| Warped Log &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(729)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0 GP&amp;lt;br&amp;gt;0 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 8&lt;br /&gt;
| A piece of wood, warped and twisted by some unnatural force.&lt;br /&gt;
| Spellable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-lifestone.png]]&lt;br /&gt;
| [[Lifestone]] &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(730)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0 GP&amp;lt;br&amp;gt;0 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| A small crystal shard, warm to the touch.&lt;br /&gt;
| Spellable, [[Aidan And Ishi&#039;s Monster Points|Ishi]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Use-potion-purificationpotion.png]]&lt;br /&gt;
| Purification Potion &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(733)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0 GP&amp;lt;br&amp;gt;0 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 15&lt;br /&gt;
| A transparent, odorless liquid that feels strangely lighter than water.&lt;br /&gt;
| [[Magic Quests|Magic Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Mauve-herb.png]]&lt;br /&gt;
| Mauve Herb &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(680)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2 GP&amp;lt;br&amp;gt;1 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| An ingredient for brewing healing potions.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Cobalt-herb.png]]&lt;br /&gt;
| Cobalt Herb &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(681)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2 GP&amp;lt;br&amp;gt;1 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| An ingredient for brewing healing potions.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Gamboge-herb.png]]&lt;br /&gt;
| Gamboge Herb &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(682)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2 GP&amp;lt;br&amp;gt;1 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| An ingredient for brewing healing potions.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Alizarin-herb.png]]&lt;br /&gt;
| Alizarin Herb &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(683)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2 GP&amp;lt;br&amp;gt;1 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| An ingredient for brewing healing potions.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:generic-mouboo-figurine.png]]&lt;br /&gt;
| Mouboo Figurine &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(728)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0 GP&amp;lt;br&amp;gt;1 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 9&lt;br /&gt;
| A small, wooden figurine of a mouboo.&lt;br /&gt;
| Spellable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:generic-broken-four-leaf-amulet.png]]&lt;br /&gt;
| Broken Four-Leaf Amulet &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(833)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 100 GP&amp;lt;br&amp;gt;1 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A broken four-leaf clover amulet.&lt;br /&gt;
| Unreleased&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:generic-jacko-soul.png]]&lt;br /&gt;
| Jack O Soul &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1198)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0 GP&amp;lt;br&amp;gt;1 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| The soul of a Jack O.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:generic-pumpkinseed.png]]&lt;br /&gt;
| Pumpkin Seeds &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(3011)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 5 GP&amp;lt;br&amp;gt;1 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| The seeds from a seasonal pumpkin vine.&lt;br /&gt;
| Unobtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:generic-dry-branch.png]]&lt;br /&gt;
| Druid Tree Branch &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(732)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 0 GP&amp;lt;br&amp;gt;2 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| A branch cut off from the druid tree. It feels strangely leathery to the touch.&lt;br /&gt;
| [[Magic Quests|Magic Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-cocoon-silk.png]]&lt;br /&gt;
| Silk Cocoon &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(718)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 200 GP&amp;lt;br&amp;gt;3 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| A silkworm&#039;s cocoon.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-maggotslime.png]]&lt;br /&gt;
| Maggot Slime &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(505)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 8 GP&amp;lt;br&amp;gt;4 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Slimy maggot slime.&lt;br /&gt;
| Frequent drop, [[Aidan And Ishi&#039;s Monster Points|Ishi]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-whitefur.png]]&lt;br /&gt;
| White Fur &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(611)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 8 GP&amp;lt;br&amp;gt;4 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 8&lt;br /&gt;
| A patch of white, fluffy fur.&lt;br /&gt;
| Frequent drop, [[Aidan And Ishi&#039;s Monster Points|Ishi]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-pinkantennae.png]]&lt;br /&gt;
| Pink Antenna &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(614)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 10 GP&amp;lt;br&amp;gt;5 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| No-one knows why violets got these antennaes.&lt;br /&gt;
| Frequent drop, [[Aidan And Ishi&#039;s Monster Points|Ishi]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-doll.png]]&lt;br /&gt;
| Broken Doll &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(834)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 20 GP&amp;lt;br&amp;gt;5 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 15&lt;br /&gt;
| An ancient doll taken from a fallen Fey Element that used it as a lure for its young victims.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-redpowder.png]]&lt;br /&gt;
| Red Powder &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4017)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 3,000 GP&amp;lt;br&amp;gt;5 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A pile of magical red powder.&lt;br /&gt;
| [[Orum Quest|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-yellowpowder.png]]&lt;br /&gt;
| Yellow Powder &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4018)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 3,000 GP&amp;lt;br&amp;gt;5 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A pile of magical yellow powder.&lt;br /&gt;
| [[Orum Quest|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-bluepowder.png]]&lt;br /&gt;
| Blue Powder &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4019)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 3,000 GP&amp;lt;br&amp;gt;5 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A pile of magical blue powder.&lt;br /&gt;
| [[Orum Quest|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-casinocoins.png]]&lt;br /&gt;
| Casino Coins &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(503)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 20 GP&amp;lt;br&amp;gt;10 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Just some casino coins.&lt;br /&gt;
| Frequent drop, [[Aidan And Ishi&#039;s Monster Points|Ishi]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-greenpresentbox.png]]&lt;br /&gt;
| Green Present Box &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(538)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 20 GP&amp;lt;br&amp;gt;10 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| Something mysterious inside.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-emptybottle.png]]&lt;br /&gt;
| Empty Bottle &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(540)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 20 GP&amp;lt;br&amp;gt;10 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| An empty bottle.&lt;br /&gt;
| Rare drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-rawlog2.png]]&lt;br /&gt;
| Raw Log &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(569)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 20 GP&amp;lt;br&amp;gt;10 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A raw log.&lt;br /&gt;
| Frequent drop, [[Aidan And Ishi&#039;s Monster Points|Ishi]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Use-food-decorcandy.png]]&lt;br /&gt;
| Decor Candy &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(504)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 25 GP&amp;lt;br&amp;gt;10 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| A leftover decor candy from last Christmas.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-batwing.png]]&lt;br /&gt;
| Bat Wing &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(753)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 500 GP&amp;lt;br&amp;gt;10 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| The wing from a bat.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-reedbundle.png]]&lt;br /&gt;
| Reed Bundles &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(806)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 20 GP&amp;lt;br&amp;gt;10 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 7&lt;br /&gt;
| A bundle of reed.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-grassseeds.png]]&lt;br /&gt;
| Grass Seeds &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(807)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 20 GP&amp;lt;br&amp;gt;10 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| Some grass seeds.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-yellowpresentbox.png]]&lt;br /&gt;
| Yellow Present Box &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4021)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 20 GP&amp;lt;br&amp;gt;10 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| Something mysterious inside?&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-whitepresentbox.png]]&lt;br /&gt;
| White Present Box &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4022)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 20 GP&amp;lt;br&amp;gt;10 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| Something very mysterious inside.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-Grimaceofdementia.png]]&lt;br /&gt;
| [[Dementia Potion|Grimace of Dementia]] &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4029)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 20 GP&amp;lt;br&amp;gt;10 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A feared potion. If done wrong... what did you say?&lt;br /&gt;
| [[Dementia Potion|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-hardspike.png]]&lt;br /&gt;
| Hard Spike &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(613)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 40 GP&amp;lt;br&amp;gt;10 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| The hard spike of a slain monster.&lt;br /&gt;
| Buyable, Frequent drop, [[Aidan And Ishi&#039;s Monster Points|Ishi]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-grub-slime.png]]&lt;br /&gt;
| Grub Slime &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(836)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 40 GP&amp;lt;br&amp;gt;10 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| The orifice secretions of a grub.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-batteeth.png]]&lt;br /&gt;
| Bat Teeth &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(754)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 600 GP&amp;lt;br&amp;gt;12 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| The teeth from a bat. Rather sharp.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-ear-zombie.png]]&lt;br /&gt;
| Undead Ear &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(779)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 30 GP&amp;lt;br&amp;gt;15 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| An ear from a zombie.&lt;br /&gt;
| Rare drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-eyeball.png]]&lt;br /&gt;
| Undead Eye &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(780)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 30 GP&amp;lt;br&amp;gt;15 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| An eye from a zombie.&lt;br /&gt;
| Rare drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:generic-newstinger.png]]&lt;br /&gt;
| Scorpion Stinger &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(507)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 50 GP&amp;lt;br&amp;gt;25 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| A poisoned scorpion stinger.&lt;br /&gt;
| Frequent drop, [[Aidan And Ishi&#039;s Monster Points|Ishi]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-purplepresentbox.png]]&lt;br /&gt;
| Purple Present Box &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(515)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 50 GP&amp;lt;br&amp;gt;25 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| Something mysterious inside.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-sulphurpowder.png]]&lt;br /&gt;
| Sulphur Powder &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(703)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;25 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| A small pile of sulphur.&lt;br /&gt;
| Frequent drop, Spellable, [[Rauk The Alchemist|Craftable]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-hyvern-stinger.png]]&lt;br /&gt;
| Hyvern Stinger &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(835)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 100 GP&amp;lt;br&amp;gt;25 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A stinger snapped off the end of a Hyvern&#039;s abdomen.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-squirrelpelt.png]]&lt;br /&gt;
| Squirrel Pelt &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(860)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 50 GP&amp;lt;br&amp;gt;25 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| The pelt of a squirrel. Trophy of the less experienced hunters, can be used to create clothes.&lt;br /&gt;
| Unreleased&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-angryscorpionstinger.png]]&lt;br /&gt;
| Angry Scorpion Stinger &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4000)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 50 GP&amp;lt;br&amp;gt;25 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| An angry scorpion stinger.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-animal-bones.png]]&lt;br /&gt;
| Animal Bones &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4023)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 50 GP&amp;lt;br&amp;gt;25 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| Bones from an animal.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-bugleg.png]]&lt;br /&gt;
| Bug Leg &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(518)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 100 GP&amp;lt;br&amp;gt;25 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| A bug&#039;s leg. Mostly used for alchemy.&lt;br /&gt;
| Buyable, Frequent drop, [[Aidan And Ishi&#039;s Monster Points|Ishi]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-bluepresentbox.png]]&lt;br /&gt;
| Blue Present Box &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(516)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 60 GP&amp;lt;br&amp;gt;30 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| Something mysterious inside.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-normal-snaketongue.png]]&lt;br /&gt;
| Snake Tongue &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(710)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 60 GP&amp;lt;br&amp;gt;30 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| The forked tongue of a snake.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-bottleofsand.png]]&lt;br /&gt;
| Bottle of Sand &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(542)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 70 GP&amp;lt;br&amp;gt;35 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A bottle with sand in it.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-cavesnakelamp.png]]&lt;br /&gt;
| Cave Snake Lamp &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(612)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 80 GP&amp;lt;br&amp;gt;40 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| Feeler of a lamp snake that glows in the dark.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-mountain-snaketongue.png]]&lt;br /&gt;
| Mountain Snake Tongue &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(711)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 80 GP&amp;lt;br&amp;gt;40 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| The forked tongue of a mountain snake.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-coinbag.png]]&lt;br /&gt;
| Coin Bag &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(526)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| A bag used to transport coins in it. If you own it you can take more coins with you.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-treasurekey.png]]&lt;br /&gt;
| [[Treasure Key]] &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(537)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 100 GP&amp;lt;br&amp;gt;50 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| A rusty key.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-rags-rotten.png]]&lt;br /&gt;
| Rotten Rags &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(777)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 100 GP&amp;lt;br&amp;gt;50 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 15&lt;br /&gt;
| Rotten rags from an undead creature.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-wolvern-tooth.png]]&lt;br /&gt;
| Wolvern Tooth &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(858)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 100 GP&amp;lt;br&amp;gt;50 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| A tooth from a wolvern.&lt;br /&gt;
| Unreleased&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-bandit-hood.png]]&lt;br /&gt;
| Bandit Hood &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4016)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 100 GP&amp;lt;br&amp;gt;50 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 50&lt;br /&gt;
| A bandit hood crawling with lice.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-cave-snaketongue.png]]&lt;br /&gt;
| Cave Snake Tongue &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(713)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 120 GP&amp;lt;br&amp;gt;60 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| The forked tongue of a cave snake.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-bone.png]]&lt;br /&gt;
| Bone &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(775)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 140 GP&amp;lt;br&amp;gt;70 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A bone.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-yeticlaw.png]]&lt;br /&gt;
| Yeti Claw &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4025)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 150 GP&amp;lt;br&amp;gt;75 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| A claw broken off from a yeti.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-ironpowder.png]]&lt;br /&gt;
| [[Iron Powder]] &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(704)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 800 GP&amp;lt;br&amp;gt;80 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| A pile of powdered iron.&lt;br /&gt;
| Spellable, [[Rauk The Alchemist|Craftable]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-grass-snaketongue.png]]&lt;br /&gt;
| Grass Snake Tongue &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(712)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 160 GP&amp;lt;br&amp;gt;80 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| The forked tongue of a grass snake.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-redscorpionstinger.png]]&lt;br /&gt;
| Red Scorpion Stinger &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(517)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 170 GP&amp;lt;br&amp;gt;85 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| A highly poisoned red scorpion stinger.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-heart-diseased.png]]&lt;br /&gt;
| Diseased Heart &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(778)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 180 GP&amp;lt;br&amp;gt;90 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A diseased heart. Likely from a zombie.&lt;br /&gt;
| Rare drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-ironore.png]]&lt;br /&gt;
| [[Iron Ore]] &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(640)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 250 GP&amp;lt;br&amp;gt;100 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 40&lt;br /&gt;
| A lump of iron ore.&lt;br /&gt;
| Frequent drop, [[Aidan And Ishi&#039;s Monster Points|Ishi]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-snakeskin.png]]&lt;br /&gt;
| Snake Skin &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(641)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 250 GP&amp;lt;br&amp;gt;100 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 15&lt;br /&gt;
| The skin of a slain snake.&lt;br /&gt;
| Frequent drop, [[Aidan And Ishi&#039;s Monster Points|Ishi]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:cotton-cloth.png]]&lt;br /&gt;
| Cotton Cloth &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(660)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 400 GP&amp;lt;br&amp;gt;100 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A piece of cotton cloth.&lt;br /&gt;
| Frequent drop, [[Aidan And Ishi&#039;s Monster Points|Ishi]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:pile-of-ash.png]]&lt;br /&gt;
| Pile Of Ash &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(701)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 3,000 GP&amp;lt;br&amp;gt;100 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| A pile of ash similar to volcanic ash.&lt;br /&gt;
| Frequent drop, [[Aidan And Ishi&#039;s Monster Points|Ishi]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-blackscorpionstinger.png]]&lt;br /&gt;
| Black Scorpion Stinger &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(709)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 250 GP&amp;lt;br&amp;gt;100 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| A black scorpion stinger, dripping with poison.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:generic-coal.png]]&lt;br /&gt;
| [[Coal]] &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4001)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 250 GP&amp;lt;br&amp;gt;100 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A lump of coal.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:generic-ice-cube.png]]&lt;br /&gt;
| Ice Cube &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4026)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 200 GP&amp;lt;br&amp;gt;100 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| Very cold ice cube that never seems to completely melt.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:generic-jackolantern.png]]&lt;br /&gt;
| Jack-o-Lantern &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(3000)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 200 GP&amp;lt;br&amp;gt;100 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1000&lt;br /&gt;
| A pumpkin that has been carved into a super-scary face for Hallowe&#039;en.&lt;br /&gt;
| Rare drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:generic-rubberbat.png]]&lt;br /&gt;
| Rubber Bat &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(3001)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 200 GP&amp;lt;br&amp;gt;100 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| Squeaks when you squeeze it.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:generic-realisticbrain.png]]&lt;br /&gt;
| Realistic Brain &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(3002)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 200 GP&amp;lt;br&amp;gt;100 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 50&lt;br /&gt;
| This brain sure is realistic.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:generic-jarofblood.png]]&lt;br /&gt;
| Jar Of Blood &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(3003)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 200 GP&amp;lt;br&amp;gt;100 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 375&lt;br /&gt;
| Just the thing to scare the kids at Hallowe&#039;en.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-patch-leather.png]]&lt;br /&gt;
| Leather Patch &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(708)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 300 GP&amp;lt;br&amp;gt;150 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 18&lt;br /&gt;
| A patch of tanned leather.&lt;br /&gt;
| [[Pachua the Hermit Indian|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-root.png]]&lt;br /&gt;
| Root &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(740)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 500 GP&amp;lt;br&amp;gt;200 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| A root from a plant.&lt;br /&gt;
| Buyable, Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-terraniteore.png]]&lt;br /&gt;
| Terranite Ore &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(763)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 500 GP&amp;lt;br&amp;gt;250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 40&lt;br /&gt;
| Some ore collected out of terranite.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-darkcrystal.png]]&lt;br /&gt;
| Dark Crystal &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(631)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A dark crystal that emits a demonic aura.&lt;br /&gt;
| Buyable, Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-wolvernpelt.png]]&lt;br /&gt;
| Wolvern Pelt &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(859)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 500 GP&amp;lt;br&amp;gt;205 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 50&lt;br /&gt;
| The pelt of a wolvern. Can be used to make clothes, blankets, or tents.&lt;br /&gt;
| Unreleased&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:lightcrystal.png]]&lt;br /&gt;
| Light Crystal &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1228)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A light crystal that emits an angelic aura.&lt;br /&gt;
| Unreleased&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-ingot.png]]&lt;br /&gt;
| [[Iron Ingots|Iron Ingot]] &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4015)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 500 GP&amp;lt;br&amp;gt;250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 200&lt;br /&gt;
| An ingot of iron.&lt;br /&gt;
| [[Iron Ingots|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-frozen-yeti-tear.png]]&lt;br /&gt;
| Frozen Yeti Tear &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4024)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 500 GP&amp;lt;br&amp;gt;250 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| A tear from a yeti, frozen.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Use-potion-manapotion.png]]&lt;br /&gt;
| [[Mana Potion]] &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(705)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,000 GP&amp;lt;br&amp;gt;300 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 50&lt;br /&gt;
| A dark, sirupy brew, with a smell reminiscent of manaberries.&lt;br /&gt;
| [[Magic Quests|Magic Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:wisppowder.png]]&lt;br /&gt;
| Wisp Powder &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(772)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 700 GP&amp;lt;br&amp;gt;350 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| Powder froma wisp.&lt;br /&gt;
| Buyable, Frequent drop, [[Aidan And Ishi&#039;s Monster Points|Ishi]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:spectrepowder.png]]&lt;br /&gt;
| Spectre Powder &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(773)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 700 GP&amp;lt;br&amp;gt;350 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| Powder from a spectre.&lt;br /&gt;
| Buyable, Frequent drop, [[Aidan And Ishi&#039;s Monster Points|Ishi]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:poltergeistpowder.png]]&lt;br /&gt;
| Poltergeist Powder &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(774)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 700 GP&amp;lt;br&amp;gt;350 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| Powder from a portergeist.&lt;br /&gt;
| Buyable, Frequent drop, [[Aidan And Ishi&#039;s Monster Points|Ishi]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-skull.png]]&lt;br /&gt;
| Skull &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(776)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 900 GP&amp;lt;br&amp;gt;450 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| A skull.&lt;br /&gt;
| Frequent drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:hitch-towel.png]]&lt;br /&gt;
| Hitchhiker&#039;s Towel &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(808)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| An inconspicuous towel. [[The Lost Hitchhiker|Dyable]]&lt;br /&gt;
| [[The Lost Hitchhiker|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:hitch-whitetowel.png]]&lt;br /&gt;
| White Hitchhiker&#039;s Towel &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(809)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;Warp: Nivalis (020-1 66,91)&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| An inconspicuous white towel.&lt;br /&gt;
| [[The Lost Hitchhiker|Quest]], [[The Lost Hitchhiker|Colored]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:hitch-redtowel.png]]&lt;br /&gt;
| Red Hitchhiker&#039;s Towel &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(810)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;Warp: Hurnscald (009-1 51,40)&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| An inconspicuous red towel.&lt;br /&gt;
| [[The Lost Hitchhiker|Quest]], [[The Lost Hitchhiker|Colored]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:hitch-greentowel.png]]&lt;br /&gt;
| Green Hitchhiker&#039;s Towel &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(811)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| An inconspicuous green towel.&lt;br /&gt;
| Unreleased&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:hitch-bluetowel.png]]&lt;br /&gt;
| Blue Hitchhiker&#039;s Towel &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(812)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| An inconspicuous blue towel.&lt;br /&gt;
| Unreleased&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:hitch-yellowtowel.png]]&lt;br /&gt;
| Yellow Hitchhiker&#039;s Towel &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(813)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;Warp: Tulimshar (003-1 40,71)&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| An inconspicuous yellow towel.&lt;br /&gt;
| [[The Lost Hitchhiker|Quest]], [[The Lost Hitchhiker|Colored]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:hitch-purpletowel.png]]&lt;br /&gt;
| Purple Hitchhiker&#039;s Towel &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(814)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| An inconspicuous purple towel.&lt;br /&gt;
| Unreleased&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:hitch-orangetowel.png]]&lt;br /&gt;
| Orange Hitchhiker&#039;s Towel &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(815)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;Warp: Graveyard (027-1 70,100)&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| An inconspicuous Orange towel.&lt;br /&gt;
| [[The Lost Hitchhiker|Quest]], [[The Lost Hitchhiker|Colored]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:hitch-pinktowel.png]]&lt;br /&gt;
| Pink Hitchhiker&#039;s Towel &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(816)&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;span style=&amp;quot;font-size: smaller;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:#ad1818;&amp;quot;&amp;gt;Warp: Terranite Cave (012-3 448,66)&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| An inconspicuous pink towel.&lt;br /&gt;
| [[The Lost Hitchhiker|Quest]], [[The Lost Hitchhiker|Colored]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:hitch-tealtowel.png]]&lt;br /&gt;
| Teal Hitchhiker&#039;s Towel &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(817)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| An inconspicuous teal towel.&lt;br /&gt;
| Unreleased&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:hitch-limetowel.png]]&lt;br /&gt;
| Lime Hitchhiker&#039;s Towel &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(818)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 30&lt;br /&gt;
| An inconspicuous lime towel.&lt;br /&gt;
| Unreleased&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:diamondpowder.png]]&lt;br /&gt;
| Diamond Powder &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(819)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| A white powder made out of a diamond.&lt;br /&gt;
| [[The Lost Hitchhiker|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:rubypowder.png]]&lt;br /&gt;
| Ruby Powder &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(820)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| A red powder made out of a ruby.&lt;br /&gt;
| [[The Lost Hitchhiker|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:emeraldpowder.png]]&lt;br /&gt;
| Emerald Powder &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(821)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| A green powder made out of an emerald.&lt;br /&gt;
| [[The Lost Hitchhiker|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:sapphirepowder.png]]&lt;br /&gt;
| Sapphire Powder &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(822)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| A blue powder made out of a sapphire.&lt;br /&gt;
| [[The Lost Hitchhiker|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:topazpowder.png]]&lt;br /&gt;
| Topaz Powder &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(823)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| A yellow powder made out of a topaz.&lt;br /&gt;
| [[The Lost Hitchhiker|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:amethystpowder.png]]&lt;br /&gt;
| Amethyst Powder &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(824)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 1,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| A purple powder made out of an amethyst.&lt;br /&gt;
| [[The Lost Hitchhiker|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Generic-goldenscorpionstinger.png]]&lt;br /&gt;
| Golden Scorpion Stinger &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(706)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 2,000 GP&amp;lt;br&amp;gt;500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2&lt;br /&gt;
| A golden scorpion stinger, tipped with lethal poison.&lt;br /&gt;
| [[Setzer Quest|Quest]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Use-potion-monsteroilpotion.png]]&lt;br /&gt;
| Monster Oil Potion &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(707)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 10,000 GP&amp;lt;br&amp;gt;2,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 50&lt;br /&gt;
| A dark, oily liquid with a sinister stench.&lt;br /&gt;
| [[Setzer Quest|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Diamond.png]]&lt;br /&gt;
| Diamond &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4002)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 5,000 GP&amp;lt;br&amp;gt;2,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A raw diamond gemstone.&lt;br /&gt;
| Rare drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Ruby.png]]&lt;br /&gt;
| Ruby &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4003)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 5,000 GP&amp;lt;br&amp;gt;2,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A raw ruby gemstone.&lt;br /&gt;
| Rare drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Emerald.png]]&lt;br /&gt;
| Emerald &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4004)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 5,000 GP&amp;lt;br&amp;gt;2,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A raw emerald gemstone.&lt;br /&gt;
| Rare drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Sapphire.png]]&lt;br /&gt;
| Sapphire &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4005)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 5,000 GP&amp;lt;br&amp;gt;2,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A raw sapphire gemstone.&lt;br /&gt;
| Rare drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Topaz.png]]&lt;br /&gt;
| Topaz &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4006)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 5,000 GP&amp;lt;br&amp;gt;2,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A raw toapaz gemstone.&lt;br /&gt;
| Rare drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Amethyst.png]]&lt;br /&gt;
| Amethyst &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(4007)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 5,000 GP&amp;lt;br&amp;gt;2,500 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 20&lt;br /&gt;
| A raw amethyst gemstone.&lt;br /&gt;
| Rare drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:Pearl.png]]&lt;br /&gt;
| Pearl &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(700)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 5,000 GP&amp;lt;br&amp;gt;3,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| A pearl, round and shiny.&lt;br /&gt;
| Rare drop&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:mylarin-dust.png]]&lt;br /&gt;
| Mylarin Dust &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(799)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 10,000 GP&amp;lt;br&amp;gt;5,000 gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 3&lt;br /&gt;
| A bottle of mylarin particles.&lt;br /&gt;
| [[Love Triangle Quest|Quest]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:generic-smallclay.png]]&lt;br /&gt;
| Small Piece Of Clay &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1222)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ? GP&amp;lt;br&amp;gt;? gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5&lt;br /&gt;
| A small piece of clay, used to make different shapes.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:generic-bigclay.png]]&lt;br /&gt;
| Big Piece Of Clay &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1223)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ? GP&amp;lt;br&amp;gt;? gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 10&lt;br /&gt;
| A big piece of white clay, used to make bigger shapes.&lt;br /&gt;
| No longer obtainable&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:generic-paperscroll.png]]&lt;br /&gt;
| Scroll Of Paper &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1224)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ? GP&amp;lt;br&amp;gt;? gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| A scroll made of fine paper.&lt;br /&gt;
| Unreleased&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:generic-firescroll.png]]&lt;br /&gt;
| Fire Scroll &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1225)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ? GP&amp;lt;br&amp;gt;? gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1&lt;br /&gt;
| A scroll on which is written an ancient formula giving birth to fire.&lt;br /&gt;
| Unreleased&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; height=&amp;quot;65px&amp;quot; width=&amp;quot;65px&amp;quot; | [[Image:generic-silverbell.png]]&lt;br /&gt;
| Silver Bell &amp;lt;span style=&amp;quot;color:#969696;&amp;quot;&amp;gt;(1226)&amp;lt;/span&amp;gt;&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ? GP&amp;lt;br&amp;gt;? gp&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 25&lt;br /&gt;
| A tiny bell made of silver.&lt;br /&gt;
| Unreleased&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[Item Reference|&amp;lt; Item Reference]]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Testing_Server&amp;diff=23239</id>
		<title>Development:Testing Server</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Testing_Server&amp;diff=23239"/>
		<updated>2012-01-05T11:28:44Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: /* GM Abilities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Before developers release game content onto the official server, they&#039;d like feedback from other developers and playtesters.  This testing server regularly restarts for content fixes and tweaks.  &lt;br /&gt;
&lt;br /&gt;
===IRC===&lt;br /&gt;
Those interested in content testing should come to irc.themanaworld.org channel: #tmw-dev.&lt;br /&gt;
&lt;br /&gt;
===Gitorious===&lt;br /&gt;
Keep track of our testing phase by following us on gitorious.org: [https://gitorious.org/+tmw-admins/tmw/tmwa-server-test Server-data], [https://gitorious.org/+tmw-admins/tmw/tmwa-client-test client-data].&lt;br /&gt;
&lt;br /&gt;
===Forums===&lt;br /&gt;
Before content is tested and/or while it is being tested, content is often discussed on the [http://forums.themanaworld.org/viewforum.php?f=18 tmwAthena development forums].&lt;br /&gt;
&lt;br /&gt;
===Client===&lt;br /&gt;
Those interested in playtesting need to get a client, which can be found on our [http://themanaworld.org/downloads.php downloads] page.&lt;br /&gt;
&lt;br /&gt;
===GM Abilities===&lt;br /&gt;
There are several levels of GM ability, depending on the person&#039;s role on the development team.&lt;br /&gt;
Note that the primary purpose of this server is to allow developers and testers to test new and unfinished content. To keep it open to the public, we&#039;ve restricted access to certain GM commands which have been abused to interfere with testing.&lt;br /&gt;
&lt;br /&gt;
;Everyone: To get access to this commands type &amp;quot;@gm gm&amp;quot; in normal chat.&lt;br /&gt;
*@warp to map locations&lt;br /&gt;
*@item and @zeny to make items for your character&lt;br /&gt;
*@heal, @alive, @die&lt;br /&gt;
*@hide to avoid being attacked by monsters&lt;br /&gt;
Use the Debug NPCs in each town to set levels and skills&lt;br /&gt;
&lt;br /&gt;
;Official Testers&lt;br /&gt;
*all the above plus&lt;br /&gt;
*@spawn monsters to fight&lt;br /&gt;
*@broadcast announcements to others on the server&lt;br /&gt;
*@pvpon/pvpoff on maps&lt;br /&gt;
*@killmonster&lt;br /&gt;
*@blvl and @jlvl to change level&lt;br /&gt;
&lt;br /&gt;
;Official Content Developers&lt;br /&gt;
*access to almost all GM commands&lt;br /&gt;
&lt;br /&gt;
===Location===&lt;br /&gt;
Our server is located at caliban.homeip.net port 6901.&lt;br /&gt;
&lt;br /&gt;
===See Also===&lt;br /&gt;
* [[How to Develop]]&lt;br /&gt;
* [[Projects and Teams]]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Projects_and_Teams&amp;diff=19889</id>
		<title>Development:Projects and Teams</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Development:Projects_and_Teams&amp;diff=19889"/>
		<updated>2011-08-31T17:34:09Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: /* Projects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;&#039;&#039;&#039;Projects&#039;&#039;&#039;&amp;lt;/div&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Here is a list of the current projects under development.&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Project&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Team&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Description&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Monster Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Item Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Map Reservations&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | New NPCs&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Alpha Server&#039;&#039;&#039;&lt;br /&gt;
| Frost, Jenalya, alastrim, Wombat&lt;br /&gt;
| First line of defense against bugs.  Pulls from the server-test repository.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Watch out for debugging NPCs on the Alpha server, they can help with testing.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Hide and Seek&#039;&#039;&#039;&lt;br /&gt;
| Ali-G, Dark_Mage&lt;br /&gt;
| A labyrinth adventure to get the Four Leaf Clover to the enchanted silver pool.&lt;br /&gt;
| elemental boss monster (shadow?)&lt;br /&gt;
| Four Leaf Clover Necklace&lt;br /&gt;
| 024-3 to 024-8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Barbarian Hunting Grounds&#039;&#039;&#039;&lt;br /&gt;
| Jenalya, alastrim, o11c&lt;br /&gt;
| Barbarians hunt large game as a way of life.&lt;br /&gt;
| Hungry Fluffy, Wolf monster&lt;br /&gt;
| Yeti Skin Shirt&lt;br /&gt;
| 033 &amp;amp; 034&lt;br /&gt;
| Barbarian NPCs&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Thermin&#039;&#039;&#039;&lt;br /&gt;
| Lien, Jenalya, Ali-G, alastrim&lt;br /&gt;
| Kaizei area town.  Once a large town that mined the firerock stones beneath the town, it was devastated by a poison gas leak.  During the crisis to survive, they collaborated on several new technologies to both defend the town from the rampaging Yeti surrounding the town and to find ways to get back to using the mine, despite the poison gas problem.&lt;br /&gt;
|&lt;br /&gt;
| GasMask, Monocle&lt;br /&gt;
|&lt;br /&gt;
| Gasmask steam punk NPC, clockwork armor NPC, barbarian NPCs, [http://forums.themanaworld.org/viewtopic.php?f=8&amp;amp;t=12839 generic pose NPCs]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Thermin Poisonous Mine&#039;&#039;&#039;&lt;br /&gt;
| Ali-G, Dark_Mage,&lt;br /&gt;
| Poison gas mine.  A constant moving adventure with puzzles and traps to solve and disarm along the way.  Suggestions: Barriers of some type, puzzle mini-games (input code words chosen at random, arrange items, push buttons in a certain order, kill a certain monster on the map), a poison map flag, the use of event monster scripting instead of _mobs.txt spawning.&lt;br /&gt;
| Ice Skull, Purple Slime, Acid Goblin, Longjohn, Serqet, Fire Lizard&lt;br /&gt;
| Firerock, Savior Chest Armor, Savior Leg Armor, Overlord Helmet, Paladin Helmet, 1,000 bone arrows&lt;br /&gt;
| 043&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Crypt&#039;&#039;&#039;&lt;br /&gt;
| Nmaligec, Argul&lt;br /&gt;
| Reaper boss quest&lt;br /&gt;
| Reaper, scythe, the lost, ball lightning, vampire bat&lt;br /&gt;
| Death&#039;s Hand, Reaper blade&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Lumber Camp&#039;&#039;&#039;&lt;br /&gt;
| Poison Ivy, O11c&lt;br /&gt;
| Southern Argaes expansion.  Quests include: Help the Lumberjacks/Save the Dell (a choice); the Naturalist&#039;s Studies; ?&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 035-039&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Kageville&#039;&#039;&#039;&lt;br /&gt;
| Kage&lt;br /&gt;
| TBA&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 040&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;div class=&amp;quot;center&amp;quot;&amp;gt;&#039;&#039;&#039;Teams&#039;&#039;&#039;&amp;lt;/div&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Name&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Member(s)&lt;br /&gt;
! style=&amp;quot;background:#efdead;&amp;quot; | Role&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;The Mana World - Athena Leader&#039;&#039;&#039;&lt;br /&gt;
| Wombat&lt;br /&gt;
|Coordinate tmwA.  Network and delegate tasks.  Increase participation.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Sound Lead&#039;&#039;&#039;&lt;br /&gt;
| Yubabax116&lt;br /&gt;
| Determines if sound on the forums is ready for the game.  Encourages people to get involved in sound and encourage players to try their hand at sound.  Attempts to meet the [REQ]s of content developers as well as creates any sound that may seem to add to the project, from monsters to maps to battle and beyond.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Art Director&#039;&#039;&#039;&lt;br /&gt;
| Poison_Ivy&lt;br /&gt;
| Determines if art on the forums is ready for the game.  Adds tags to be put on art topics.  Encourage artists contribute to the game and encourage players to try their hand at art.  Understand content priorities and attempt to steer art to meeting content [REQ]s when an artist is open to suggestion.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Source Lead&#039;&#039;&#039;&lt;br /&gt;
| o11c&lt;br /&gt;
| Adjusts and coordinates Athena source code.  Meets content team requests for source code adjustments to further content.  Research and development of Athena source code and scripting conventions.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;General Content Team&#039;&#039;&#039;&lt;br /&gt;
| Argul, Wombat, Jenalya, Alastrim, theKandiman, Poison_Ivy&lt;br /&gt;
| Coordinates non-sound/non-art related content, adds content to the gitorious repositories.  Review content for mainline release.  Give reservations for requested maps.  Give reservations for existing items, equipment and monsters in their respective databases.  Communicates through IRC with the General Content Team, the Content Lead and Administration. Channel: #tmw-dev Server: irc.themanaworld.org&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Monster Skills Lead&#039;&#039;&#039;&lt;br /&gt;
| Nmaligec&lt;br /&gt;
| Research and development with monster skills for complex monsters.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;XML Team&#039;&#039;&#039;&lt;br /&gt;
| Poison Ivy, Wombat, Ali-G&lt;br /&gt;
| Fixes item, equipment, monsters, particles, player-set etc. images and xml for game animation.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Mapping Team&#039;&#039;&#039;&lt;br /&gt;
| Ali-G&lt;br /&gt;
| Given maps by the General Content Team for review.  Check for proper use of black border, collision tiles, and application of tiles onto the correct layers they belong on.  Fix mapping errors.  If map has many errors, the Mapping team can return the map to its creator for fixing.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Skills and Magic Team&#039;&#039;&#039;&lt;br /&gt;
| Jenalya, Argul&lt;br /&gt;
| Research and development of skills and magic.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Balance&#039;&#039;&#039;&lt;br /&gt;
| General Content Team&lt;br /&gt;
| Create a new balance system that can be understood by present and future tmwAthena developers and uses equipment tiers.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Battle Systems Team&#039;&#039;&#039;&lt;br /&gt;
| Phoenix Council (theKandiman)&lt;br /&gt;
| Research and development of a working battle system for the game using various balance parameters as guidelines.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
	<entry>
		<id>https://oldwiki.devbox.themanaworld.org/index.php?title=Shannon%27s_Bowler_Hat&amp;diff=18970</id>
		<title>Shannon&#039;s Bowler Hat</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.devbox.themanaworld.org/index.php?title=Shannon%27s_Bowler_Hat&amp;diff=18970"/>
		<updated>2011-07-22T13:42:04Z</updated>

		<summary type="html">&lt;p&gt;Jenalya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quest&lt;br /&gt;
|img           = [[Image:Shanon.png]]&lt;br /&gt;
|Start         = 010-2 First floor of Dimond&#039;s Cove&lt;br /&gt;
|Redoable      = No, only once&lt;br /&gt;
|Reward        = 1 Bowler Hat&lt;br /&gt;
|Cost          = 20 items of the list&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:#ad1818&amp;quot;&amp;gt;This is an annual quest, open from the 24th of January 2011 to the 26th January 2011. So if you missed it this year, come back next year!&amp;lt;/span&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What To Do:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Head southwest of Hurnscald down to Dimond&#039;s Cove, the big house in the middle of the forst. At the first floor, talk to Shanon.&lt;br /&gt;
# Talk to Shanon. You have the choice of giving her a total of twenty of the following items: Steaks, Chicken Legs, Red Apples, Green Apples or Beers. This can be for example 15 Red Apples and 5 Green Apples.&lt;br /&gt;
# Then listen to her poem by giving her one item each time&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hints:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* You cannot complete the quest with a full inventory!&lt;br /&gt;
* Your level doesn&#039;t matter but your account has to be 2 weeks old to be able to do the quest.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Steaks are dropped by:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Grass Snakes (5%)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Red Apples are dropped by:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Sea Slime (8%)&lt;br /&gt;
* Green Slimes (7,5%)&lt;br /&gt;
* Red Slimes (7,5%)&lt;br /&gt;
* Evil Mushroom (5%)&lt;br /&gt;
* Fluffies (4%)&lt;br /&gt;
* Bandits (2%)&lt;br /&gt;
* Archants (1%)&lt;br /&gt;
* Pink Flower (1%)&lt;br /&gt;
* Spider (1%)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Reward:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* 1 Bowler Hat&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Total Cost:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
You will need to give &#039;&#039;&#039;only twenty&#039;&#039;&#039; items that belong to the list below:&lt;br /&gt;
&lt;br /&gt;
* Steaks&lt;br /&gt;
* Chicken Legs&lt;br /&gt;
* Red Apples&lt;br /&gt;
* Green Apples&lt;br /&gt;
* Beers&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Quest]]&lt;/div&gt;</summary>
		<author><name>Jenalya</name></author>
	</entry>
</feed>