<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://wiki.herc.ws/w/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.herc.ws/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sevenzz23</id>
		<title>Hercules Wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.herc.ws/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sevenzz23"/>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Special:Contributions/Sevenzz23"/>
		<updated>2026-05-02T03:04:26Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.21.11</generator>

	<entry>
		<id>https://wiki.herc.ws/wiki/Hercules_Hierarchy</id>
		<title>Hercules Hierarchy</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Hercules_Hierarchy"/>
				<updated>2015-02-19T01:05:15Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: /* Portuguese */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Staff Titles =&lt;br /&gt;
Ordered alphabetically.&amp;lt;br/&amp;gt;All staff titles, regardless of their description, possesses full moderation powers.&lt;br /&gt;
&lt;br /&gt;
== Administrators ==&lt;br /&gt;
They administrate.&lt;br /&gt;
* [http://hercules.ws/board/user/307-haru/ Haru] ([http://hercules.ws/board/index.php?app=members&amp;amp;filter=4 Development Administrator])&lt;br /&gt;
* [http://hercules.ws/board/user/1-ind/ Ind] ([http://hercules.ws/board/index.php?app=members&amp;amp;filter=4 Development Administrator])&lt;br /&gt;
* [http://hercules.ws/board/user/43-mister-e/ Mister-e] ([http://hercules.ws/board/index.php?app=members&amp;amp;filter=4 Community Administrator])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Core Developers ==&lt;br /&gt;
The kings of the code hill.&lt;br /&gt;
* [http://hercules.ws/board/user/20-malufett/ malufett]&lt;br /&gt;
* [http://hercules.ws/board/user/49-mkbu95/ mkbu95]&lt;br /&gt;
* [http://hercules.ws/board/user/4055-pan/ Pan]&lt;br /&gt;
* [http://hercules.ws/board/user/50-michieru/ Michieru]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Script Developers ==&lt;br /&gt;
Usually the members with the fastest key/second typing ratio.&lt;br /&gt;
* [http://hercules.ws/board/user/48-dastgir/ Dastgir]&lt;br /&gt;
* [http://hercules.ws/board/user/1664-kisuka/ Kisuka]&lt;br /&gt;
&lt;br /&gt;
== Scripting Moderators ==&lt;br /&gt;
* [http://hercules.ws/board/user/4102-annieruru/ AnnieRuru]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Global Moderators ==&lt;br /&gt;
Global Moderators are individuals who moderate all of the forums excluding International Communities, however, may still moderate.&amp;lt;br/&amp;gt;&lt;br /&gt;
Global Moderator ensure that all of the forums are cleaned by removing duplicate topics, ensuring posts/topics don't have spam, moving topics where need be, and locking topics.&amp;lt;br/&amp;gt;&lt;br /&gt;
Global Moderators also provide support to support topics, however, not to an extent as Support Leaders. This is not a position one can apply to, but be promoted to from other moderation position thanks to one's efforts and commitment to moderation.&lt;br /&gt;
* [http://hercules.ws/board/user/387-jabote/ jaBote]&lt;br /&gt;
* [http://hercules.ws/board/user/83-mumbles/ Mumbles]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Support Leaders ==&lt;br /&gt;
In charge of all the main supporting areas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Graphics Moderators ==&lt;br /&gt;
In charge of all the main graphics areas.&lt;br /&gt;
* [http://hercules.ws/board/user/1460-uzieal/ Uzieal]&lt;br /&gt;
* [http://hercules.ws/board/user/11-olrox/ Orlox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Int'l Moderators ==&lt;br /&gt;
International Moderators are individuals who moderate their respective International Community.&amp;lt;br/&amp;gt;&lt;br /&gt;
They are solely responsible in making sure their respective community is cleaned by moving, locking, removing, and cleaning topics of spams.&amp;lt;br/&amp;gt;&lt;br /&gt;
International Moderators don't have sole responsibility of other forums outside their community and they must provide support to individuals in their community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Filipino====&lt;br /&gt;
* [http://hercules.ws/board/user/1582-mhalicot/ Mhalicot]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Portuguese====&lt;br /&gt;
* [http://hercules.ws/board/user/63-juliocf/ JulioCF]&lt;br /&gt;
* [http://hercules.ws/board/user/192-wolf/ Wolf]&lt;br /&gt;
&lt;br /&gt;
====Spanish====&lt;br /&gt;
* [http://hercules.ws/board/user/125-m45t3r/ M45T3R]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== High Council ==&lt;br /&gt;
They're an upgrade from the [[#Community_Contributor | Community Contributor]] title.&lt;br /&gt;
* [http://hercules.ws/board/user/59-beret/ Beret]&lt;br /&gt;
* [http://hercules.ws/board/user/6674-csnv/ csnv]&lt;br /&gt;
* [http://hercules.ws/board/user/6-eiphes/ Eiphes]&lt;br /&gt;
* [http://hercules.ws/board/user/8-eurydice/ Eurydice]&lt;br /&gt;
* [http://hercules.ws/board/user/1160-gepard/ Gepard]&lt;br /&gt;
* [http://hercules.ws/board/user/88-kyeme/ kyeme]&lt;br /&gt;
* [http://hercules.ws/board/user/99-muad_dib/ Muad_Dib]&lt;br /&gt;
* [http://hercules.ws/board/user/456-rytech/ Rytech]&lt;br /&gt;
* [http://hercules.ws/board/user/409-yommy/ Yommy]&lt;br /&gt;
* [http://hercules.ws/board/user/67-xgear/ Xgear]&lt;br /&gt;
&lt;br /&gt;
= Former Staff Members =&lt;br /&gt;
Former staff members who've contributed throughout Hercules.&lt;br /&gt;
&lt;br /&gt;
== Former Administrators ==&lt;br /&gt;
* [http://hercules.ws/board/user/2-jman/ Jman]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former Core Developers ==&lt;br /&gt;
* [http://hercules.ws/board/user/28-greenbox/ GreenBox] &lt;br /&gt;
* [http://hercules.ws/board/user/725-susu/ Susu]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former Script Developers ==&lt;br /&gt;
* [http://hercules.ws/board/user/756-joseph/ Joseph]&lt;br /&gt;
* [http://hercules.ws/board/user/5-kenpachi/ Kenpachi]&lt;br /&gt;
* [http://hercules.ws/board/user/23-martin/ Martin]&lt;br /&gt;
* [http://hercules.ws/board/user/757-masao/ Masao]&lt;br /&gt;
* [http://hercules.ws/board/user/7-nameless2you/ Nameless2you]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former Scripting Moderators ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former Global Moderators ==&lt;br /&gt;
* [http://hercules.ws/board/user/10-judas/ Judas]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former Support Leaders ==&lt;br /&gt;
* [http://hercules.ws/board/user/4-emistry/ Emistry]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former Graphic Moderators ==&lt;br /&gt;
* [http://hercules.ws/board/user/129-adel/ Adel]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former International Moderators ==&lt;br /&gt;
==== Filipino ====&lt;br /&gt;
* [http://hercules.ws/board/user/25-jaypee/ JayPee]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Community Contributors =&lt;br /&gt;
This title is awarded to community members for their outstanding support of Hercules. For more information, [http://hercules.ws/board/topic/376-hercules-cc-program/ read the thread about it on the forum.]&lt;br /&gt;
* [http://hercules.ws/board/user/137-bgamez23/ bgamez23]&lt;br /&gt;
* [http://hercules.ws/board/user/1352-evilpuncker/ evilpuncker]&lt;br /&gt;
* [http://hercules.ws/board/user/5970-gmocean/ GmOcean]&lt;br /&gt;
* [http://hercules.ws/board/user/118-mleo1/ mleo1]&lt;br /&gt;
* [http://hercules.ws/board/user/315-neo/ Neo]&lt;br /&gt;
* [http://hercules.ws/board/user/87-ossi0110/ ossi0110]&lt;br /&gt;
* [http://hercules.ws/board/user/449-patskie/ Patskie]&lt;br /&gt;
* [http://hercules.ws/board/user/303-ryuuzaki/ Ryuuzaki]&lt;br /&gt;
* [http://hercules.ws/board/user/297-shakto/ Shakto]&lt;br /&gt;
&lt;br /&gt;
[[Category:Hercules]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Hercules_Hierarchy</id>
		<title>Hercules Hierarchy</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Hercules_Hierarchy"/>
				<updated>2015-02-19T01:04:47Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: /* Script Developers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Staff Titles =&lt;br /&gt;
Ordered alphabetically.&amp;lt;br/&amp;gt;All staff titles, regardless of their description, possesses full moderation powers.&lt;br /&gt;
&lt;br /&gt;
== Administrators ==&lt;br /&gt;
They administrate.&lt;br /&gt;
* [http://hercules.ws/board/user/307-haru/ Haru] ([http://hercules.ws/board/index.php?app=members&amp;amp;filter=4 Development Administrator])&lt;br /&gt;
* [http://hercules.ws/board/user/1-ind/ Ind] ([http://hercules.ws/board/index.php?app=members&amp;amp;filter=4 Development Administrator])&lt;br /&gt;
* [http://hercules.ws/board/user/43-mister-e/ Mister-e] ([http://hercules.ws/board/index.php?app=members&amp;amp;filter=4 Community Administrator])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Core Developers ==&lt;br /&gt;
The kings of the code hill.&lt;br /&gt;
* [http://hercules.ws/board/user/20-malufett/ malufett]&lt;br /&gt;
* [http://hercules.ws/board/user/49-mkbu95/ mkbu95]&lt;br /&gt;
* [http://hercules.ws/board/user/4055-pan/ Pan]&lt;br /&gt;
* [http://hercules.ws/board/user/50-michieru/ Michieru]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Script Developers ==&lt;br /&gt;
Usually the members with the fastest key/second typing ratio.&lt;br /&gt;
* [http://hercules.ws/board/user/48-dastgir/ Dastgir]&lt;br /&gt;
* [http://hercules.ws/board/user/1664-kisuka/ Kisuka]&lt;br /&gt;
&lt;br /&gt;
== Scripting Moderators ==&lt;br /&gt;
* [http://hercules.ws/board/user/4102-annieruru/ AnnieRuru]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Global Moderators ==&lt;br /&gt;
Global Moderators are individuals who moderate all of the forums excluding International Communities, however, may still moderate.&amp;lt;br/&amp;gt;&lt;br /&gt;
Global Moderator ensure that all of the forums are cleaned by removing duplicate topics, ensuring posts/topics don't have spam, moving topics where need be, and locking topics.&amp;lt;br/&amp;gt;&lt;br /&gt;
Global Moderators also provide support to support topics, however, not to an extent as Support Leaders. This is not a position one can apply to, but be promoted to from other moderation position thanks to one's efforts and commitment to moderation.&lt;br /&gt;
* [http://hercules.ws/board/user/387-jabote/ jaBote]&lt;br /&gt;
* [http://hercules.ws/board/user/83-mumbles/ Mumbles]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Support Leaders ==&lt;br /&gt;
In charge of all the main supporting areas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Graphics Moderators ==&lt;br /&gt;
In charge of all the main graphics areas.&lt;br /&gt;
* [http://hercules.ws/board/user/1460-uzieal/ Uzieal]&lt;br /&gt;
* [http://hercules.ws/board/user/11-olrox/ Orlox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Int'l Moderators ==&lt;br /&gt;
International Moderators are individuals who moderate their respective International Community.&amp;lt;br/&amp;gt;&lt;br /&gt;
They are solely responsible in making sure their respective community is cleaned by moving, locking, removing, and cleaning topics of spams.&amp;lt;br/&amp;gt;&lt;br /&gt;
International Moderators don't have sole responsibility of other forums outside their community and they must provide support to individuals in their community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Filipino====&lt;br /&gt;
* [http://hercules.ws/board/user/1582-mhalicot/ Mhalicot]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Portuguese====&lt;br /&gt;
* [http://hercules.ws/board/user/63-juliocf/ JulioCF]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Spanish====&lt;br /&gt;
* [http://hercules.ws/board/user/125-m45t3r/ M45T3R]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== High Council ==&lt;br /&gt;
They're an upgrade from the [[#Community_Contributor | Community Contributor]] title.&lt;br /&gt;
* [http://hercules.ws/board/user/59-beret/ Beret]&lt;br /&gt;
* [http://hercules.ws/board/user/6674-csnv/ csnv]&lt;br /&gt;
* [http://hercules.ws/board/user/6-eiphes/ Eiphes]&lt;br /&gt;
* [http://hercules.ws/board/user/8-eurydice/ Eurydice]&lt;br /&gt;
* [http://hercules.ws/board/user/1160-gepard/ Gepard]&lt;br /&gt;
* [http://hercules.ws/board/user/88-kyeme/ kyeme]&lt;br /&gt;
* [http://hercules.ws/board/user/99-muad_dib/ Muad_Dib]&lt;br /&gt;
* [http://hercules.ws/board/user/456-rytech/ Rytech]&lt;br /&gt;
* [http://hercules.ws/board/user/409-yommy/ Yommy]&lt;br /&gt;
* [http://hercules.ws/board/user/67-xgear/ Xgear]&lt;br /&gt;
&lt;br /&gt;
= Former Staff Members =&lt;br /&gt;
Former staff members who've contributed throughout Hercules.&lt;br /&gt;
&lt;br /&gt;
== Former Administrators ==&lt;br /&gt;
* [http://hercules.ws/board/user/2-jman/ Jman]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former Core Developers ==&lt;br /&gt;
* [http://hercules.ws/board/user/28-greenbox/ GreenBox] &lt;br /&gt;
* [http://hercules.ws/board/user/725-susu/ Susu]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former Script Developers ==&lt;br /&gt;
* [http://hercules.ws/board/user/756-joseph/ Joseph]&lt;br /&gt;
* [http://hercules.ws/board/user/5-kenpachi/ Kenpachi]&lt;br /&gt;
* [http://hercules.ws/board/user/23-martin/ Martin]&lt;br /&gt;
* [http://hercules.ws/board/user/757-masao/ Masao]&lt;br /&gt;
* [http://hercules.ws/board/user/7-nameless2you/ Nameless2you]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former Scripting Moderators ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former Global Moderators ==&lt;br /&gt;
* [http://hercules.ws/board/user/10-judas/ Judas]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former Support Leaders ==&lt;br /&gt;
* [http://hercules.ws/board/user/4-emistry/ Emistry]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former Graphic Moderators ==&lt;br /&gt;
* [http://hercules.ws/board/user/129-adel/ Adel]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former International Moderators ==&lt;br /&gt;
==== Filipino ====&lt;br /&gt;
* [http://hercules.ws/board/user/25-jaypee/ JayPee]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Community Contributors =&lt;br /&gt;
This title is awarded to community members for their outstanding support of Hercules. For more information, [http://hercules.ws/board/topic/376-hercules-cc-program/ read the thread about it on the forum.]&lt;br /&gt;
* [http://hercules.ws/board/user/137-bgamez23/ bgamez23]&lt;br /&gt;
* [http://hercules.ws/board/user/1352-evilpuncker/ evilpuncker]&lt;br /&gt;
* [http://hercules.ws/board/user/5970-gmocean/ GmOcean]&lt;br /&gt;
* [http://hercules.ws/board/user/118-mleo1/ mleo1]&lt;br /&gt;
* [http://hercules.ws/board/user/315-neo/ Neo]&lt;br /&gt;
* [http://hercules.ws/board/user/87-ossi0110/ ossi0110]&lt;br /&gt;
* [http://hercules.ws/board/user/449-patskie/ Patskie]&lt;br /&gt;
* [http://hercules.ws/board/user/303-ryuuzaki/ Ryuuzaki]&lt;br /&gt;
* [http://hercules.ws/board/user/297-shakto/ Shakto]&lt;br /&gt;
&lt;br /&gt;
[[Category:Hercules]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Hercules_Hierarchy</id>
		<title>Hercules Hierarchy</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Hercules_Hierarchy"/>
				<updated>2015-01-08T08:46:47Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Staff Titles =&lt;br /&gt;
Ordered alphabetically.&amp;lt;br/&amp;gt;All staff titles, regardless of their description, possesses full moderation powers.&lt;br /&gt;
&lt;br /&gt;
== Administrators ==&lt;br /&gt;
They administrate.&lt;br /&gt;
* [http://hercules.ws/board/user/307-haru/ Haru] ([http://hercules.ws/board/index.php?app=members&amp;amp;filter=4 Development Administrator])&lt;br /&gt;
* [http://hercules.ws/board/user/1-ind/ Ind] ([http://hercules.ws/board/index.php?app=members&amp;amp;filter=4 Development Administrator])&lt;br /&gt;
* [http://hercules.ws/board/user/43-mister-e/ Mister-e] ([http://hercules.ws/board/index.php?app=members&amp;amp;filter=4 Community Administrator])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Core Developers ==&lt;br /&gt;
The kings of the code hill.&lt;br /&gt;
* [http://hercules.ws/board/user/20-malufett/ malufett]&lt;br /&gt;
* [http://hercules.ws/board/user/49-mkbu95/ mkbu95]&lt;br /&gt;
* [http://hercules.ws/board/user/4055-pan/ Pan]&lt;br /&gt;
* [http://hercules.ws/board/user/50-michieru/ Michieru]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Script Developers ==&lt;br /&gt;
Usually the members with the fastest key/second typing ratio.&lt;br /&gt;
* [http://hercules.ws/board/user/48-dastgir/ Dastgir]&lt;br /&gt;
* [http://hercules.ws/board/user/1664-kisuka/ Kisuka]&lt;br /&gt;
* [http://hercules.ws/board/user/192-wolf/ Wolf]&lt;br /&gt;
&lt;br /&gt;
== Scripting Moderators ==&lt;br /&gt;
* [http://hercules.ws/board/user/4102-annieruru/ AnnieRuru]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Global Moderators ==&lt;br /&gt;
Global Moderators are individuals who moderate all of the forums excluding International Communities, however, may still moderate.&amp;lt;br/&amp;gt;&lt;br /&gt;
Global Moderator ensure that all of the forums are cleaned by removing duplicate topics, ensuring posts/topics don't have spam, moving topics where need be, and locking topics.&amp;lt;br/&amp;gt;&lt;br /&gt;
Global Moderators also provide support to support topics, however, not to an extent as Support Leaders. This is not a position one can apply to, but be promoted to from other moderation position thanks to one's efforts and commitment to moderation.&lt;br /&gt;
* [http://hercules.ws/board/user/387-jabote/ jaBote]&lt;br /&gt;
* [http://hercules.ws/board/user/83-mumbles/ Mumbles]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Support Leaders ==&lt;br /&gt;
In charge of all the main supporting areas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Graphics Moderators ==&lt;br /&gt;
In charge of all the main graphics areas.&lt;br /&gt;
* [http://hercules.ws/board/user/1460-uzieal/ Uzieal]&lt;br /&gt;
* [http://hercules.ws/board/user/11-olrox/ Orlox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Int'l Moderators ==&lt;br /&gt;
International Moderators are individuals who moderate their respective International Community.&amp;lt;br/&amp;gt;&lt;br /&gt;
They are solely responsible in making sure their respective community is cleaned by moving, locking, removing, and cleaning topics of spams.&amp;lt;br/&amp;gt;&lt;br /&gt;
International Moderators don't have sole responsibility of other forums outside their community and they must provide support to individuals in their community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Filipino====&lt;br /&gt;
* [http://hercules.ws/board/user/1582-mhalicot/ Mhalicot]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Portuguese====&lt;br /&gt;
* [http://hercules.ws/board/user/63-juliocf/ JulioCF]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Spanish====&lt;br /&gt;
* [http://hercules.ws/board/user/125-m45t3r/ M45T3R]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== High Council ==&lt;br /&gt;
They're an upgrade from the [[#Community_Contributor | Community Contributor]] title.&lt;br /&gt;
* [http://hercules.ws/board/user/59-beret/ Beret]&lt;br /&gt;
* [http://hercules.ws/board/user/6674-csnv/ csnv]&lt;br /&gt;
* [http://hercules.ws/board/user/6-eiphes/ Eiphes]&lt;br /&gt;
* [http://hercules.ws/board/user/8-eurydice/ Eurydice]&lt;br /&gt;
* [http://hercules.ws/board/user/1160-gepard/ Gepard]&lt;br /&gt;
* [http://hercules.ws/board/user/88-kyeme/ kyeme]&lt;br /&gt;
* [http://hercules.ws/board/user/99-muad_dib/ Muad_Dib]&lt;br /&gt;
* [http://hercules.ws/board/user/456-rytech/ Rytech]&lt;br /&gt;
* [http://hercules.ws/board/user/409-yommy/ Yommy]&lt;br /&gt;
* [http://hercules.ws/board/user/67-xgear/ Xgear]&lt;br /&gt;
&lt;br /&gt;
= Former Staff Members =&lt;br /&gt;
Former staff members who've contributed throughout Hercules.&lt;br /&gt;
&lt;br /&gt;
== Former Administrators ==&lt;br /&gt;
* [http://hercules.ws/board/user/2-jman/ Jman]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former Core Developers ==&lt;br /&gt;
* [http://hercules.ws/board/user/28-greenbox/ GreenBox] &lt;br /&gt;
* [http://hercules.ws/board/user/725-susu/ Susu]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former Script Developers ==&lt;br /&gt;
* [http://hercules.ws/board/user/756-joseph/ Joseph]&lt;br /&gt;
* [http://hercules.ws/board/user/5-kenpachi/ Kenpachi]&lt;br /&gt;
* [http://hercules.ws/board/user/23-martin/ Martin]&lt;br /&gt;
* [http://hercules.ws/board/user/757-masao/ Masao]&lt;br /&gt;
* [http://hercules.ws/board/user/7-nameless2you/ Nameless2you]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former Scripting Moderators ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former Global Moderators ==&lt;br /&gt;
* [http://hercules.ws/board/user/10-judas/ Judas]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former Support Leaders ==&lt;br /&gt;
* [http://hercules.ws/board/user/4-emistry/ Emistry]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former Graphic Moderators ==&lt;br /&gt;
* [http://hercules.ws/board/user/129-adel/ Adel]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former International Moderators ==&lt;br /&gt;
==== Filipino ====&lt;br /&gt;
* [http://hercules.ws/board/user/25-jaypee/ JayPee]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Community Contributors =&lt;br /&gt;
This title is awarded to community members for their outstanding support of Hercules. For more information, [http://hercules.ws/board/topic/376-hercules-cc-program/ read the thread about it on the forum.]&lt;br /&gt;
* [http://hercules.ws/board/user/137-bgamez23/ bgamez23]&lt;br /&gt;
* [http://hercules.ws/board/user/1352-evilpuncker/ evilpuncker]&lt;br /&gt;
* [http://hercules.ws/board/user/5970-gmocean/ GmOcean]&lt;br /&gt;
* [http://hercules.ws/board/user/118-mleo1/ mleo1]&lt;br /&gt;
* [http://hercules.ws/board/user/315-neo/ Neo]&lt;br /&gt;
* [http://hercules.ws/board/user/87-ossi0110/ ossi0110]&lt;br /&gt;
* [http://hercules.ws/board/user/449-patskie/ Patskie]&lt;br /&gt;
* [http://hercules.ws/board/user/303-ryuuzaki/ Ryuuzaki]&lt;br /&gt;
* [http://hercules.ws/board/user/297-shakto/ Shakto]&lt;br /&gt;
&lt;br /&gt;
[[Category:Hercules]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Getguildmember</id>
		<title>Getguildmember</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Getguildmember"/>
				<updated>2014-11-11T08:34:58Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: Created page with &amp;quot;==Syntax== *getguildmember &amp;lt;guild id&amp;gt;{,&amp;lt;type&amp;gt;};  ==Description== This command will find all members of a specified guild and returns their names  (or character id or accou...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Syntax==&lt;br /&gt;
*[[getguildmember]] &amp;lt;guild id&amp;gt;{,&amp;lt;type&amp;gt;};&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
This command will find all members of a specified guild and returns their names &lt;br /&gt;
(or character id or account id depending on the value of &amp;quot;type&amp;quot;) into an array&lt;br /&gt;
of temporary global variables.&lt;br /&gt;
&lt;br /&gt;
Upon executing this,&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$@guildmembername$[] is a global temporary string array which contains all the &lt;br /&gt;
                     names of these guild members.&lt;br /&gt;
                     (only set when type is 0 or not specified)&lt;br /&gt;
&lt;br /&gt;
$@guildmembercid[]   is a global temporary number array which contains the &lt;br /&gt;
                     character id of these guild members.&lt;br /&gt;
                     (only set when type is 1)&lt;br /&gt;
&lt;br /&gt;
$@guildmemberaid[]   is a global temporary number array which contains the &lt;br /&gt;
                     account id of these guild members.&lt;br /&gt;
                     (only set when type is 2)&lt;br /&gt;
&lt;br /&gt;
$@guildmembercount   is the number of guild members that were found.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The guild members will be found regardless of whether they are online or offline.&lt;br /&gt;
Note that the names come in no particular order.&lt;br /&gt;
&lt;br /&gt;
Be sure to use $@guildmembercount to go through this array, and not &lt;br /&gt;
'[[getarraysize]]', because it is not cleared between runs of '[[getguildmember]]'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
For usage examples, see '[[getpartymember]]'.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[getguildmaster]]&lt;br /&gt;
*[[getguildmasterid]]&lt;br /&gt;
*[[getguildname]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Donpcevent</id>
		<title>Donpcevent</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Donpcevent"/>
				<updated>2014-11-11T05:10:33Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Syntax==&lt;br /&gt;
*[[donpcevent]] &amp;quot;&amp;lt;NPC object name&amp;gt;::&amp;lt;event label&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
This command invokes the event label code within an another [[NPC]] or NPCs. If ''event label'' has the form &amp;quot;NpcName::OnLabel&amp;quot;, then only given NPC's event label will be invoked (much like [[goto]] into another NPC). If the form is &amp;quot;::OnLabel&amp;quot; (''NpcName'' ommited), the event code of all NPCs with given label will be invoked, one after another. In both cases the invoked script will run without an attached [[RID]], whether or not the invoking script was attached to a player. The event label name is required to start with ''On''.&lt;br /&gt;
&lt;br /&gt;
This command can be used to make other NPCs act, as if they were responding to the invoking NPC's actions, such as using an [[emotion]] or [[npctalk|talking]].&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
 prontera,150,150,3	script	NPC	53,{&lt;br /&gt;
     [[mes]] &amp;quot;Hey NPC2 copies what I do.&amp;quot;;&lt;br /&gt;
     [[close2]];&lt;br /&gt;
     [[set]] .@emote, [[rand]](1,30);&lt;br /&gt;
     donpcevent &amp;quot;NPC2::OnEmote&amp;quot;;&lt;br /&gt;
 OnEmote:&lt;br /&gt;
     [[emotion]] .@emote;&lt;br /&gt;
     [[end]];&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 prontera,152,150,5	script	NPC2	53,{&lt;br /&gt;
     mes &amp;quot;Hey NPC copies what I do.&amp;quot;;&lt;br /&gt;
     close2;&lt;br /&gt;
     set .@emote, rand(1,30);&lt;br /&gt;
     donpcevent &amp;quot;NPC::OnEmote&amp;quot;;&lt;br /&gt;
 OnEmote:&lt;br /&gt;
     emotion .@emote;&lt;br /&gt;
     end;&lt;br /&gt;
 }&lt;br /&gt;
Whichever of the both NPCs is talked to, both will show a random emotion at the same time.&lt;br /&gt;
&lt;br /&gt;
Command returns 1 or 0 on success and failure. A debug message also shows on the console when no events are triggered.&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[doevent]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Save_point</id>
		<title>Save point</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Save_point"/>
				<updated>2014-11-11T05:05:13Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Syntax==&lt;br /&gt;
*'''savepoint''' &amp;lt;&amp;quot;map name&amp;quot;&amp;gt;, &amp;lt;x&amp;gt;, &amp;lt;y&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
This command stores the location, where the [[RID#Usage|invoking character]] will be warped to, when re-spawning after death, getting warped out of a [[WoE]] castle or using skill Teleport Lv2. Map flags, which would otherwise prohibit setting a save point or warping to a map, are ignored by this script command.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
 [[mes]] &amp;quot;[Kafra Employee]&amp;quot;;&lt;br /&gt;
 mes &amp;quot;Your Respawn Point&amp;quot;;&lt;br /&gt;
 mes &amp;quot;has been saved here&amp;quot;;&lt;br /&gt;
 mes &amp;quot;in the city of Payon.&amp;quot;;&lt;br /&gt;
 mes &amp;quot;Thank you for using&amp;quot;;&lt;br /&gt;
 mes &amp;quot;the Kafra Services.&amp;quot;;&lt;br /&gt;
 savepoint &amp;quot;payon&amp;quot;, 257, 242;&lt;br /&gt;
 [[close2]];&lt;br /&gt;
 [[cutin]] &amp;quot;&amp;quot;, 255;&lt;br /&gt;
 [[end]];&lt;br /&gt;
&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Save_point</id>
		<title>Save point</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Save_point"/>
				<updated>2014-11-11T05:04:44Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Syntax==&lt;br /&gt;
*[[savepoint]] &amp;lt;&amp;quot;map name&amp;quot;&amp;gt;, &amp;lt;x&amp;gt;, &amp;lt;y&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
This command stores the location, where the [[RID#Usage|invoking character]] will be warped to, when re-spawning after death, getting warped out of a [[WoE]] castle or using skill Teleport Lv2. Map flags, which would otherwise prohibit setting a save point or warping to a map, are ignored by this script command.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
 [[mes]] &amp;quot;[Kafra Employee]&amp;quot;;&lt;br /&gt;
 mes &amp;quot;Your Respawn Point&amp;quot;;&lt;br /&gt;
 mes &amp;quot;has been saved here&amp;quot;;&lt;br /&gt;
 mes &amp;quot;in the city of Payon.&amp;quot;;&lt;br /&gt;
 mes &amp;quot;Thank you for using&amp;quot;;&lt;br /&gt;
 mes &amp;quot;the Kafra Services.&amp;quot;;&lt;br /&gt;
 savepoint &amp;quot;payon&amp;quot;, 257, 242;&lt;br /&gt;
 [[close2]];&lt;br /&gt;
 [[cutin]] &amp;quot;&amp;quot;, 255;&lt;br /&gt;
 [[end]];&lt;br /&gt;
&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Max</id>
		<title>Max</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Max"/>
				<updated>2014-11-11T05:01:25Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: Created page with &amp;quot;== Syntax == *max(&amp;lt;number&amp;gt;{,&amp;lt;number&amp;gt;...&amp;lt;number&amp;gt;}) *min(&amp;lt;number&amp;gt;{,&amp;lt;number&amp;gt;...&amp;lt;number&amp;gt;})  == Description == Returns the smallest (or biggest) from the set of given numbe...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Syntax ==&lt;br /&gt;
*[[max]](&amp;lt;number&amp;gt;{,&amp;lt;number&amp;gt;...&amp;lt;number&amp;gt;})&lt;br /&gt;
*[[min]](&amp;lt;number&amp;gt;{,&amp;lt;number&amp;gt;...&amp;lt;number&amp;gt;})&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Returns the smallest (or biggest) from the set of given numbers.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&amp;lt;pre&amp;gt;	.@minimum = min(1, -6, -2, 8, 2); // .@minimum will be equal to -6&lt;br /&gt;
	.@maximum = max(0, 5, 10, 4); // .@maximum will be equal to 10&lt;br /&gt;
	.@level = min(BaseLevel, 70); // .@level will be the character's base level, capped to 70&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Min</id>
		<title>Min</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Min"/>
				<updated>2014-11-11T05:01:04Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: Created page with &amp;quot;== Syntax == *min(&amp;lt;number&amp;gt;{,&amp;lt;number&amp;gt;...&amp;lt;number&amp;gt;}) *max(&amp;lt;number&amp;gt;{,&amp;lt;number&amp;gt;...&amp;lt;number&amp;gt;})  == Description == Returns the smallest (or biggest) from the set of given numbe...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Syntax ==&lt;br /&gt;
*[[min]](&amp;lt;number&amp;gt;{,&amp;lt;number&amp;gt;...&amp;lt;number&amp;gt;})&lt;br /&gt;
*[[max]](&amp;lt;number&amp;gt;{,&amp;lt;number&amp;gt;...&amp;lt;number&amp;gt;})&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Returns the smallest (or biggest) from the set of given numbers.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&amp;lt;pre&amp;gt;	.@minimum = min(1, -6, -2, 8, 2); // .@minimum will be equal to -6&lt;br /&gt;
	.@maximum = max(0, 5, 10, 4); // .@maximum will be equal to 10&lt;br /&gt;
	.@level = min(BaseLevel, 70); // .@level will be the character's base level, capped to 70&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Setmount</id>
		<title>Setmount</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Setmount"/>
				<updated>2014-11-11T04:50:23Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: Created page with &amp;quot;== Syntax == *setmount {&amp;lt;flag&amp;gt;}; *checkmount() == Description == If &amp;lt;flag&amp;gt; is MOUNT_NONE (or 0) this command will remove the mount from the character.&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; Otherwise i...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Syntax ==&lt;br /&gt;
*[[setmount]] {&amp;lt;flag&amp;gt;};&lt;br /&gt;
*checkmount()&lt;br /&gt;
== Description ==&lt;br /&gt;
If &amp;lt;flag&amp;gt; is MOUNT_NONE (or 0) this command will remove the mount from the&lt;br /&gt;
character.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Otherwise it gives the invoking character the desired combat mount, where&lt;br /&gt;
allowed by their class and skills.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If no flag is specified, the mount is automatically chosen according to the&lt;br /&gt;
character's class and skills.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The following flag values are accepted:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 	MOUNT_NONE:&lt;br /&gt;
 	   - Dismount&lt;br /&gt;
 	MOUNT_PECO:&lt;br /&gt;
 	   - PecoPeco (Knight series class)&lt;br /&gt;
 	   - GrandPeco (Crusader series class)&lt;br /&gt;
 	   - Gryphon (Royal Guard)&lt;br /&gt;
 	MOUNT_WUG:&lt;br /&gt;
 	   - Warg (Ranger)&lt;br /&gt;
 	MOUNT_MADO:&lt;br /&gt;
 	   - Mado Gear (Mechanic)&lt;br /&gt;
 	MOUNT_DRAGON:&lt;br /&gt;
 	MOUNT_DRAGON_GREEN:&lt;br /&gt;
 	MOUNT_DRAGON_BROWN:&lt;br /&gt;
 	MOUNT_DRAGON_GRAY:&lt;br /&gt;
 	MOUNT_DRAGON_BLUE:&lt;br /&gt;
 	MOUNT_DRAGON_RED:&lt;br /&gt;
 	   - Dragon (Rune Knight)&lt;br /&gt;
 	   if MOUNT_DRAGON is specified, a the default (green) dragon will be used.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Unlike '[[setfalcon]]' and '[[setcart]]' this will not work at all if they aren't of a &lt;br /&gt;
class which can ride a mount.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The accompanying function will return 0 if the invoking character is not on a&lt;br /&gt;
mount, and a non-zero value (according to the above constants) if they are.&lt;br /&gt;
&amp;lt;br&amp;gt;Note: in case of dragons, the returned value will always be MOUNT_DRAGON,&lt;br /&gt;
regardless of color.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 	if (checkmount())&lt;br /&gt;
 		mes &amp;quot;Leave your mount outside! No riding mounts on the floor here!&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 	if (checkmount() == MOUNT_DRAGON)&lt;br /&gt;
 		mes &amp;quot;Wow, your dragon is cool! Can I pet it?&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Quest_Log_System</id>
		<title>Quest Log System</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Quest_Log_System"/>
				<updated>2014-11-11T04:37:25Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: /* Erase Quest */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quest Log System ==&lt;br /&gt;
&lt;br /&gt;
==== Basic Structure of NPC ====&lt;br /&gt;
&lt;br /&gt;
First of all you must have a knowledge on basic scripting, if not please kindly Click [[Basic_Scripting|Here!]].&lt;br /&gt;
&lt;br /&gt;
==== Quest Window ====&lt;br /&gt;
&lt;br /&gt;
The Quest Window or Quest Journal (Opened via Alt+U) allows the player to view all quests their character has started but not yet completed (Except for instance dungeon quests and Battlegrounds instances, which always remain once started).&lt;br /&gt;
To place a quest in the Inactive tab, right click once on it and the name will turn gray. It will then appear on the Inactive tab instead of Active. Right clicking the name again will bring it back to the Active tab. Moving the quest back and forth has no effect on whether you can continue it or not.&lt;br /&gt;
Not every quest has a quest window component. Those quests who have quest window walkthroughs can be found in this category as well as by having their infobox in gold. Additionally, the Quest Window guides are not comprehensive, and do not specify the exact coordinates of the next NPC or location the player must visit. It is highly recommended to continue using the wiki guides along with the in-game walkthroughs.&lt;br /&gt;
&lt;br /&gt;
[[File:QWindow.jpg|center|caption]]&lt;br /&gt;
&lt;br /&gt;
== Quest Database - Adding Quest ==&lt;br /&gt;
&lt;br /&gt;
=== Structure ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Quest ID,Time Limit,Target1,Val1,Target2,Val2,Target3,Val3,Quest Title&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quest ID - ID of the quest, must increment and should not be duplicated.&amp;lt;br&amp;gt;&lt;br /&gt;
Time Limit - Time limit for the quest to be finish.&amp;lt;br&amp;gt;&lt;br /&gt;
Target 1 - Monster ID.&amp;lt;br&amp;gt;&lt;br /&gt;
Val1 - Value of Monster to be killed.&amp;lt;br&amp;gt;&lt;br /&gt;
Target 2 - Monster ID.&amp;lt;br&amp;gt;&lt;br /&gt;
Val2 - Value of Monster to be killed.&amp;lt;br&amp;gt;&lt;br /&gt;
Target 3 - Monster ID.&amp;lt;br&amp;gt;&lt;br /&gt;
Val3 - Value of Monster to be killed.&amp;lt;br&amp;gt;&lt;br /&gt;
Quest Title - The title of the Quest you made.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For this example I will make a quest that will require to kill 10 Poring's.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;65000,0,1002,10,0,0,0,0,&amp;quot;Quest - Poring Hunt&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Client Side Editing ====&lt;br /&gt;
&lt;br /&gt;
You have to edit your questid2display.txt&lt;br /&gt;
&lt;br /&gt;
==== Structure ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QUESTID#Quest Name#FILENAME#LOG_FILENAME#&lt;br /&gt;
Summary description#&lt;br /&gt;
Objective description#&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
=== Example ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65000#Quest - Poring Hunt#SG_FEEL#QUE_NOIMAGE#&lt;br /&gt;
Find the monster named Poring and kill 10#&lt;br /&gt;
Hunting 10 Poring#&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== Quest Log Commands ==&lt;br /&gt;
&lt;br /&gt;
=== Set Quest ===&lt;br /&gt;
&amp;lt;pre&amp;gt;*setquest &amp;lt;ID&amp;gt;;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Place quest of &amp;lt;ID&amp;gt; in the users quest log, the state of which is &amp;quot;active&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&amp;lt;pre&amp;gt;prontera,xx,xx,4	script	SetQuest	51,{&lt;br /&gt;
setquest 65000;	// This will add the Quest ID 65000 to your Quest Window.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This sample will add the quest &amp;quot;Quest - Poring Hunt&amp;quot; which I stated on the Adding Quest.&lt;br /&gt;
'''Note''': The example is just a simple NPC that will add Quest ID 65000 every time you click it, You can add conditions so that it can only be taken once. &lt;br /&gt;
&lt;br /&gt;
=== Complete Quest ===&lt;br /&gt;
&amp;lt;pre&amp;gt;*completequest &amp;lt;ID&amp;gt;{,&amp;lt;ID2&amp;gt;};&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the state for the given quest &amp;lt;ID&amp;gt; to &amp;quot;complete&amp;quot; and remove from &lt;br /&gt;
the users quest log.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If a second quest id of greater value is specified, all quests between the two&lt;br /&gt;
will be completed.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&amp;lt;pre&amp;gt;prontera,xx,xx,4	script	CompleteQuest	51,{&lt;br /&gt;
completequest 65000;	// This will change the state of the quest to &amp;quot;complete&amp;quot;&lt;br /&gt;
set zeny,zeny + 100;   //just add line like this if you want to give zeny reward if a player finish the quest.&lt;br /&gt;
getitem 501,1;         //just add line like this if you want to give item reward if a player finish the quest.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erase Quest ===&lt;br /&gt;
&amp;lt;pre&amp;gt;*erasequest &amp;lt;ID&amp;gt;{,&amp;lt;ID2&amp;gt;};&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove the quest of the given &amp;lt;ID&amp;gt; from the user's quest log.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If a second quest id of greater value is specified, all quests between the two&lt;br /&gt;
will be erased.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&amp;lt;pre&amp;gt;prontera,xx,xx,4	script	EraseQuest	51,{&lt;br /&gt;
erasequest 65000;	// This will remove the quest to your Quest Window.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Change Quest ===&lt;br /&gt;
&amp;lt;pre&amp;gt;*changequest &amp;lt;ID&amp;gt;,&amp;lt;ID2&amp;gt;;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove quest of the given &amp;lt;ID&amp;gt; from the user's quest log.&lt;br /&gt;
Add quest of the &amp;lt;ID2&amp;gt; to the the quest log, and the state is &amp;quot;active&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&amp;lt;pre&amp;gt;prontera,xx,xx,4	script	ChangeQuest	51,{&lt;br /&gt;
changequest 65000,65001; // This will remove the quest ID 65000 and change it to 65001 with the state &amp;quot;active&amp;quot;.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Check Quest Progress ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;*questprogress(&amp;lt;ID&amp;gt;{,PLAYTIME|HUNTING})&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If no additional argument supplied, return the state of the quest: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0 = Quest not started (not in quest log)&lt;br /&gt;
1  = Quest has been given&lt;br /&gt;
2  = Quest completed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;*questactive(&amp;lt;ID&amp;gt;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Check whether the given quest is in its active state.&lt;br /&gt;
Returns true if the quest is active, false otherwise (quest not started, inactive or completed)&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&amp;lt;pre&amp;gt;prontera,xx,xx,4	script	CheckQuest	51,{&lt;br /&gt;
&lt;br /&gt;
if(!questactive(65000)) { //Quest is Inactive&lt;br /&gt;
mes &amp;quot;[Jelly]&amp;quot;;&lt;br /&gt;
mes &amp;quot;Quest is Inactive&amp;quot;;&lt;br /&gt;
close;&lt;br /&gt;
} else if(!questprogress(65000)) { //Quest Not started yet &lt;br /&gt;
mes &amp;quot;[Jelly]&amp;quot;;&lt;br /&gt;
mes &amp;quot;Quest Not Started&amp;quot;;&lt;br /&gt;
close;&lt;br /&gt;
} else if(questactive(65000)) { //Quest is Active&lt;br /&gt;
mes &amp;quot;[Jelly]&amp;quot;;&lt;br /&gt;
mes &amp;quot;Quest is Active!&amp;quot;;&lt;br /&gt;
close;&lt;br /&gt;
} else if(questprogress(65000) == 2) {	// Quest finished.&lt;br /&gt;
mes &amp;quot;[Jelly]&amp;quot;;&lt;br /&gt;
mes &amp;quot;Quest Finished!&amp;quot;;&lt;br /&gt;
completequest 65000;&lt;br /&gt;
close;&lt;br /&gt;
} &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If parameter &amp;quot;PLAYTIME&amp;quot; is supplied:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0 = Quest not started (not in quest log)&lt;br /&gt;
1  = the time limit has not yet been reached&lt;br /&gt;
2  = the time limit has been reached&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If parameter &amp;quot;HUNTING&amp;quot; is supplied:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0 = Quest not started (not in quest log)&lt;br /&gt;
1 = Player hasn't killed all of the target monsters&lt;br /&gt;
2 = Player has killed all of the target monsters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example | Hunting ===&lt;br /&gt;
&amp;lt;pre&amp;gt;prontera,xx,xx,4	script	CheckQuest	51,{&lt;br /&gt;
&lt;br /&gt;
if (!questprogress(65000,HUNTING)) {&lt;br /&gt;
mes &amp;quot;[Jelly]&amp;quot;;&lt;br /&gt;
mes &amp;quot;Quest not Started&amp;quot;,&lt;br /&gt;
close;&lt;br /&gt;
} else if (questprogress(65000,HUNTING) == 1) {&lt;br /&gt;
mes &amp;quot;[Jelly]&amp;quot;;&lt;br /&gt;
mes &amp;quot;You haven't killed all of the target monsters.&amp;quot;;&lt;br /&gt;
close;&lt;br /&gt;
} else if (questprogress(65000,HUNTING) == 2) {&lt;br /&gt;
completequest 65000;&lt;br /&gt;
set zeny,zeny+100;      //Zeny Reward&lt;br /&gt;
getitem 501,1;          // Item Reward&lt;br /&gt;
mes &amp;quot;[Jelly]&amp;quot;;&lt;br /&gt;
mes &amp;quot;Quest Finished&amp;quot;;&lt;br /&gt;
close;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Show Event ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*showevent &amp;lt;state&amp;gt;, &amp;lt;color&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
Show a colored mark in the mini-map like &amp;quot;viewpoint&amp;quot; and an emotion on top &lt;br /&gt;
of a NPC. This is used to indicate that a NPC has a quest or an event to &lt;br /&gt;
certain player/s. &lt;br /&gt;
&lt;br /&gt;
state can be:&lt;br /&gt;
	0 = disable ( Used to disable and remove the mark and the emotion from &lt;br /&gt;
		the NPC. )&lt;br /&gt;
	1 = exclamation emotion ( Used to show an important quest event to &lt;br /&gt;
		certain player. )&lt;br /&gt;
	2 = interrogation emotion ( Used to show an non-important quest event &lt;br /&gt;
		to certain player. )&lt;br /&gt;
Other value may cause client crashes.&lt;br /&gt;
&lt;br /&gt;
color can be:&lt;br /&gt;
	0 = yellow &amp;quot;Quest&amp;quot;&lt;br /&gt;
	1 = orange &amp;quot;Job&amp;quot;&lt;br /&gt;
	2 = green &amp;quot;Event&amp;quot;&lt;br /&gt;
	3 = an MVP flag&lt;br /&gt;
Other values show a transparent mark in the mini-map.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Increasing Max Quest DB ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
trunk/src/map/quest.h &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Find this line and increase the value.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define MAX_QUEST_DB (60355+1) // Highest quest ID + 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recompile, Cheers!&lt;br /&gt;
&lt;br /&gt;
(If you don't know how to recompile click [[Compiling|Here!]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Quest_Log_System</id>
		<title>Quest Log System</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Quest_Log_System"/>
				<updated>2014-11-11T04:36:09Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: /* Complete Quest */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quest Log System ==&lt;br /&gt;
&lt;br /&gt;
==== Basic Structure of NPC ====&lt;br /&gt;
&lt;br /&gt;
First of all you must have a knowledge on basic scripting, if not please kindly Click [[Basic_Scripting|Here!]].&lt;br /&gt;
&lt;br /&gt;
==== Quest Window ====&lt;br /&gt;
&lt;br /&gt;
The Quest Window or Quest Journal (Opened via Alt+U) allows the player to view all quests their character has started but not yet completed (Except for instance dungeon quests and Battlegrounds instances, which always remain once started).&lt;br /&gt;
To place a quest in the Inactive tab, right click once on it and the name will turn gray. It will then appear on the Inactive tab instead of Active. Right clicking the name again will bring it back to the Active tab. Moving the quest back and forth has no effect on whether you can continue it or not.&lt;br /&gt;
Not every quest has a quest window component. Those quests who have quest window walkthroughs can be found in this category as well as by having their infobox in gold. Additionally, the Quest Window guides are not comprehensive, and do not specify the exact coordinates of the next NPC or location the player must visit. It is highly recommended to continue using the wiki guides along with the in-game walkthroughs.&lt;br /&gt;
&lt;br /&gt;
[[File:QWindow.jpg|center|caption]]&lt;br /&gt;
&lt;br /&gt;
== Quest Database - Adding Quest ==&lt;br /&gt;
&lt;br /&gt;
=== Structure ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Quest ID,Time Limit,Target1,Val1,Target2,Val2,Target3,Val3,Quest Title&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quest ID - ID of the quest, must increment and should not be duplicated.&amp;lt;br&amp;gt;&lt;br /&gt;
Time Limit - Time limit for the quest to be finish.&amp;lt;br&amp;gt;&lt;br /&gt;
Target 1 - Monster ID.&amp;lt;br&amp;gt;&lt;br /&gt;
Val1 - Value of Monster to be killed.&amp;lt;br&amp;gt;&lt;br /&gt;
Target 2 - Monster ID.&amp;lt;br&amp;gt;&lt;br /&gt;
Val2 - Value of Monster to be killed.&amp;lt;br&amp;gt;&lt;br /&gt;
Target 3 - Monster ID.&amp;lt;br&amp;gt;&lt;br /&gt;
Val3 - Value of Monster to be killed.&amp;lt;br&amp;gt;&lt;br /&gt;
Quest Title - The title of the Quest you made.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
For this example I will make a quest that will require to kill 10 Poring's.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;65000,0,1002,10,0,0,0,0,&amp;quot;Quest - Poring Hunt&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Client Side Editing ====&lt;br /&gt;
&lt;br /&gt;
You have to edit your questid2display.txt&lt;br /&gt;
&lt;br /&gt;
==== Structure ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QUESTID#Quest Name#FILENAME#LOG_FILENAME#&lt;br /&gt;
Summary description#&lt;br /&gt;
Objective description#&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
=== Example ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65000#Quest - Poring Hunt#SG_FEEL#QUE_NOIMAGE#&lt;br /&gt;
Find the monster named Poring and kill 10#&lt;br /&gt;
Hunting 10 Poring#&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== Quest Log Commands ==&lt;br /&gt;
&lt;br /&gt;
=== Set Quest ===&lt;br /&gt;
&amp;lt;pre&amp;gt;*setquest &amp;lt;ID&amp;gt;;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Place quest of &amp;lt;ID&amp;gt; in the users quest log, the state of which is &amp;quot;active&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&amp;lt;pre&amp;gt;prontera,xx,xx,4	script	SetQuest	51,{&lt;br /&gt;
setquest 65000;	// This will add the Quest ID 65000 to your Quest Window.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This sample will add the quest &amp;quot;Quest - Poring Hunt&amp;quot; which I stated on the Adding Quest.&lt;br /&gt;
'''Note''': The example is just a simple NPC that will add Quest ID 65000 every time you click it, You can add conditions so that it can only be taken once. &lt;br /&gt;
&lt;br /&gt;
=== Complete Quest ===&lt;br /&gt;
&amp;lt;pre&amp;gt;*completequest &amp;lt;ID&amp;gt;{,&amp;lt;ID2&amp;gt;};&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the state for the given quest &amp;lt;ID&amp;gt; to &amp;quot;complete&amp;quot; and remove from &lt;br /&gt;
the users quest log.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If a second quest id of greater value is specified, all quests between the two&lt;br /&gt;
will be completed.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&amp;lt;pre&amp;gt;prontera,xx,xx,4	script	CompleteQuest	51,{&lt;br /&gt;
completequest 65000;	// This will change the state of the quest to &amp;quot;complete&amp;quot;&lt;br /&gt;
set zeny,zeny + 100;   //just add line like this if you want to give zeny reward if a player finish the quest.&lt;br /&gt;
getitem 501,1;         //just add line like this if you want to give item reward if a player finish the quest.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erase Quest ===&lt;br /&gt;
&amp;lt;pre&amp;gt;*erasequest &amp;lt;ID&amp;gt;;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove the quest of the given &amp;lt;ID&amp;gt; from the user's quest log.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&amp;lt;pre&amp;gt;prontera,xx,xx,4	script	EraseQuest	51,{&lt;br /&gt;
erasequest 65000;	// This will remove the quest to your Quest Window.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Change Quest ===&lt;br /&gt;
&amp;lt;pre&amp;gt;*changequest &amp;lt;ID&amp;gt;,&amp;lt;ID2&amp;gt;;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remove quest of the given &amp;lt;ID&amp;gt; from the user's quest log.&lt;br /&gt;
Add quest of the &amp;lt;ID2&amp;gt; to the the quest log, and the state is &amp;quot;active&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&amp;lt;pre&amp;gt;prontera,xx,xx,4	script	ChangeQuest	51,{&lt;br /&gt;
changequest 65000,65001; // This will remove the quest ID 65000 and change it to 65001 with the state &amp;quot;active&amp;quot;.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Check Quest Progress ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;*questprogress(&amp;lt;ID&amp;gt;{,PLAYTIME|HUNTING})&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If no additional argument supplied, return the state of the quest: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0 = Quest not started (not in quest log)&lt;br /&gt;
1  = Quest has been given&lt;br /&gt;
2  = Quest completed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;*questactive(&amp;lt;ID&amp;gt;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
Check whether the given quest is in its active state.&lt;br /&gt;
Returns true if the quest is active, false otherwise (quest not started, inactive or completed)&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&amp;lt;pre&amp;gt;prontera,xx,xx,4	script	CheckQuest	51,{&lt;br /&gt;
&lt;br /&gt;
if(!questactive(65000)) { //Quest is Inactive&lt;br /&gt;
mes &amp;quot;[Jelly]&amp;quot;;&lt;br /&gt;
mes &amp;quot;Quest is Inactive&amp;quot;;&lt;br /&gt;
close;&lt;br /&gt;
} else if(!questprogress(65000)) { //Quest Not started yet &lt;br /&gt;
mes &amp;quot;[Jelly]&amp;quot;;&lt;br /&gt;
mes &amp;quot;Quest Not Started&amp;quot;;&lt;br /&gt;
close;&lt;br /&gt;
} else if(questactive(65000)) { //Quest is Active&lt;br /&gt;
mes &amp;quot;[Jelly]&amp;quot;;&lt;br /&gt;
mes &amp;quot;Quest is Active!&amp;quot;;&lt;br /&gt;
close;&lt;br /&gt;
} else if(questprogress(65000) == 2) {	// Quest finished.&lt;br /&gt;
mes &amp;quot;[Jelly]&amp;quot;;&lt;br /&gt;
mes &amp;quot;Quest Finished!&amp;quot;;&lt;br /&gt;
completequest 65000;&lt;br /&gt;
close;&lt;br /&gt;
} &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If parameter &amp;quot;PLAYTIME&amp;quot; is supplied:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0 = Quest not started (not in quest log)&lt;br /&gt;
1  = the time limit has not yet been reached&lt;br /&gt;
2  = the time limit has been reached&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If parameter &amp;quot;HUNTING&amp;quot; is supplied:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0 = Quest not started (not in quest log)&lt;br /&gt;
1 = Player hasn't killed all of the target monsters&lt;br /&gt;
2 = Player has killed all of the target monsters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example | Hunting ===&lt;br /&gt;
&amp;lt;pre&amp;gt;prontera,xx,xx,4	script	CheckQuest	51,{&lt;br /&gt;
&lt;br /&gt;
if (!questprogress(65000,HUNTING)) {&lt;br /&gt;
mes &amp;quot;[Jelly]&amp;quot;;&lt;br /&gt;
mes &amp;quot;Quest not Started&amp;quot;,&lt;br /&gt;
close;&lt;br /&gt;
} else if (questprogress(65000,HUNTING) == 1) {&lt;br /&gt;
mes &amp;quot;[Jelly]&amp;quot;;&lt;br /&gt;
mes &amp;quot;You haven't killed all of the target monsters.&amp;quot;;&lt;br /&gt;
close;&lt;br /&gt;
} else if (questprogress(65000,HUNTING) == 2) {&lt;br /&gt;
completequest 65000;&lt;br /&gt;
set zeny,zeny+100;      //Zeny Reward&lt;br /&gt;
getitem 501,1;          // Item Reward&lt;br /&gt;
mes &amp;quot;[Jelly]&amp;quot;;&lt;br /&gt;
mes &amp;quot;Quest Finished&amp;quot;;&lt;br /&gt;
close;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Show Event ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*showevent &amp;lt;state&amp;gt;, &amp;lt;color&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
Show a colored mark in the mini-map like &amp;quot;viewpoint&amp;quot; and an emotion on top &lt;br /&gt;
of a NPC. This is used to indicate that a NPC has a quest or an event to &lt;br /&gt;
certain player/s. &lt;br /&gt;
&lt;br /&gt;
state can be:&lt;br /&gt;
	0 = disable ( Used to disable and remove the mark and the emotion from &lt;br /&gt;
		the NPC. )&lt;br /&gt;
	1 = exclamation emotion ( Used to show an important quest event to &lt;br /&gt;
		certain player. )&lt;br /&gt;
	2 = interrogation emotion ( Used to show an non-important quest event &lt;br /&gt;
		to certain player. )&lt;br /&gt;
Other value may cause client crashes.&lt;br /&gt;
&lt;br /&gt;
color can be:&lt;br /&gt;
	0 = yellow &amp;quot;Quest&amp;quot;&lt;br /&gt;
	1 = orange &amp;quot;Job&amp;quot;&lt;br /&gt;
	2 = green &amp;quot;Event&amp;quot;&lt;br /&gt;
	3 = an MVP flag&lt;br /&gt;
Other values show a transparent mark in the mini-map.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Increasing Max Quest DB ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
trunk/src/map/quest.h &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Find this line and increase the value.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define MAX_QUEST_DB (60355+1) // Highest quest ID + 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recompile, Cheers!&lt;br /&gt;
&lt;br /&gt;
(If you don't know how to recompile click [[Compiling|Here!]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Getbrokencount</id>
		<title>Getbrokencount</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Getbrokencount"/>
				<updated>2014-11-11T04:33:45Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: Created page with &amp;quot;== Syntax == *getbrokencount() == Description == This function will return the total amount of broken equipment on the invoking character.  Category:Script Command&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Syntax ==&lt;br /&gt;
*[[getbrokencount]]()&lt;br /&gt;
== Description ==&lt;br /&gt;
This function will return the total amount of broken equipment on the&lt;br /&gt;
invoking character.&lt;br /&gt;
&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Setcashmount</id>
		<title>Setcashmount</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Setcashmount"/>
				<updated>2014-11-11T04:31:17Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: Created page with &amp;quot;== Syntax == *setcashmount; *hascashmount()  == Description == The 'setcashmount' function toggles cash mount for the invoking character. It will return 1 if successfu...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Syntax ==&lt;br /&gt;
*[[setcashmount]];&lt;br /&gt;
*hascashmount()&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
The '[[setcashmount]]' function toggles cash mount for the invoking character.&lt;br /&gt;
It will return 1 if successful, 0 otherwise.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; Note: Character must not be mounting a non-cash mount (eg. dragon, peco, &lt;br /&gt;
	  wug, etc.)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The accompanying function will return 1 if the invoking character has a &lt;br /&gt;
cash mount and 0 if they don't.&lt;br /&gt;
&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Addtimer</id>
		<title>Addtimer</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Addtimer"/>
				<updated>2014-06-08T14:23:55Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Script_Command]]&lt;br /&gt;
==Syntax==&lt;br /&gt;
* [[addtimer]] &amp;lt;ticks&amp;gt;,&amp;quot;NPC::OnEvent&amp;quot;;&lt;br /&gt;
* [[addtimercount]] &amp;quot;NPC::OnLabel&amp;quot;,&amp;lt;ticks&amp;gt;;&lt;br /&gt;
* [[deltimer]] &amp;quot;NPC::OnEvent&amp;quot;;&lt;br /&gt;
==Description==&lt;br /&gt;
These commands will create, destroy, and delay a countdown timer - 'addtimer' to&lt;br /&gt;
create, 'deltimer' to destroy and 'addtimercount' to delay it by the specified&lt;br /&gt;
number of ticks. For all three cases, the event label given is the identifier of&lt;br /&gt;
that timer. The timer runs on the character object that is attached to the script (and I'm not sure what happens when nothing is attached), and can have multiple instances. When the label is ran, it is ran as if the player that the timer runs on has clicked the NPC.&lt;br /&gt;
&lt;br /&gt;
When this timer runs out, a new execution thread will start in the specified NPC&lt;br /&gt;
object at the specified label. If no such label is found in the NPC object, it&lt;br /&gt;
will run as if clicked.&lt;br /&gt;
&lt;br /&gt;
The ticks are given in 1/1000ths of a second.&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Setfont</id>
		<title>Setfont</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Setfont"/>
				<updated>2014-04-11T07:21:59Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: Created page with &amp;quot;==Syntax== *setfont &amp;quot;&amp;lt; font &amp;gt;&amp;quot;; ==Description== &amp;lt;p&amp;gt;This command sets the current RO client interface font to one of the fonts  stored in data\*.eot by using an ID of the f...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Syntax==&lt;br /&gt;
*[[setfont]] &amp;quot;&amp;lt; font &amp;gt;&amp;quot;;&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;p&amp;gt;This command sets the current RO client interface font to one of the fonts &lt;br /&gt;
stored in data\*.eot by using an ID of the font. When the ID of the &lt;br /&gt;
currently used font is used, default interface font is used again.&amp;lt;/p&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
:	0 - Default&amp;lt;br&amp;gt;&lt;br /&gt;
:	1 - RixLoveangel&amp;lt;br&amp;gt;&lt;br /&gt;
:	2 - RixSquirrel&amp;lt;br&amp;gt;&lt;br /&gt;
:	3 - NHCgogo&amp;lt;br&amp;gt;&lt;br /&gt;
:	4 - RixDiary&amp;lt;br&amp;gt;&lt;br /&gt;
:	5 - RixMiniHeart&amp;lt;br&amp;gt;&lt;br /&gt;
:	6 - RixFreshman&amp;lt;br&amp;gt;&lt;br /&gt;
:	7 - RixKid&amp;lt;br&amp;gt;&lt;br /&gt;
:	8 -: RixMagic&amp;lt;br&amp;gt;&lt;br /&gt;
:	9 - RixJJangu&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
 	Id: 12287&lt;br /&gt;
 	AegisName: &amp;quot;Love_Angel&amp;quot;&lt;br /&gt;
 	Name: &amp;quot;Love Angel Magic Powder&amp;quot;&lt;br /&gt;
 	Type: 11&lt;br /&gt;
 	Buy: 0&lt;br /&gt;
 	Script: &amp;lt;&amp;quot; setfont 1; &amp;quot;&amp;gt;&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Hercules_Hierarchy</id>
		<title>Hercules Hierarchy</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Hercules_Hierarchy"/>
				<updated>2014-02-12T00:19:52Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Staff Titles =&lt;br /&gt;
Ordered alphabetically.&amp;lt;br/&amp;gt;All staff titles, regardless of their description, possesses full moderation powers.&lt;br /&gt;
&lt;br /&gt;
== Administrators ==&lt;br /&gt;
They administrate.&lt;br /&gt;
* [http://hercules.ws/board/user/307-haru/ Haru] ([http://hercules.ws/board/index.php?app=members&amp;amp;filter=4 Development Administrator])&lt;br /&gt;
* [http://hercules.ws/board/user/1-ind/ Ind] ([http://hercules.ws/board/index.php?app=members&amp;amp;filter=4 Development Administrator])&lt;br /&gt;
* [http://hercules.ws/board/user/43-mysterious/ Mysterious] ([http://hercules.ws/board/index.php?app=members&amp;amp;filter=4 Community Administrator])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Core Developers ==&lt;br /&gt;
The kings of the code hill.&lt;br /&gt;
* [http://hercules.ws/board/user/20-malufett/ malufett]&lt;br /&gt;
* [http://hercules.ws/board/user/49-mkbu95/ mkbu95]&lt;br /&gt;
* [http://hercules.ws/board/user/4055-pan/ Pan]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Script Developers ==&lt;br /&gt;
Usually the members with the fastest key/second typing ratio.&lt;br /&gt;
* [http://hercules.ws/board/user/1664-kisuka/ Kisuka]&lt;br /&gt;
* [http://hercules.ws/board/user/50-michieru/ Michieru]&lt;br /&gt;
* [http://hercules.ws/board/user/192-wolf/ Wolf]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scripting Moderators ==&lt;br /&gt;
* [http://hercules.ws/board/user/4102-annieruru/ AnnieRuru]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Global Moderators ==&lt;br /&gt;
Global Moderators are individuals who moderate all of the forums excluding International Communities, however, may still moderate.&amp;lt;br/&amp;gt;&lt;br /&gt;
Global Moderator ensure that all of the forums are cleaned by removing duplicate topics, ensuring posts/topics don't have spam, moving topics where need be, and locking topics.&amp;lt;br/&amp;gt;&lt;br /&gt;
Global Moderators also provide support to support topics, however, not to an extent as Support Leaders. This is not a position one can apply to, but be promoted to from other moderation position thanks to one's efforts and commitment to moderation.&lt;br /&gt;
* [http://hercules.ws/board/user/387-jabote/ jaBote]&lt;br /&gt;
* [http://hercules.ws/board/user/83-mumbles/ Mumbles]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Support Leaders ==&lt;br /&gt;
In charge of all the main supporting areas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Graphics Moderators ==&lt;br /&gt;
In charge of all the main graphics areas.&lt;br /&gt;
* [http://hercules.ws/board/user/1460-uzieal/ Uzieal]&lt;br /&gt;
* [http://hercules.ws/board/user/11-olrox/ Orlox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Int'l Moderators ==&lt;br /&gt;
International Moderators are individuals who moderate their respective International Community.&amp;lt;br/&amp;gt;&lt;br /&gt;
They are solely responsible in making sure their respective community is cleaned by moving, locking, removing, and cleaning topics of spams.&amp;lt;br/&amp;gt;&lt;br /&gt;
International Moderators don't have sole responsibility of other forums outside their community and they must provide support to individuals in their community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Filipino====&lt;br /&gt;
* [http://hercules.ws/board/user/1582-mhalicot/ Mhalicot]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Portuguese====&lt;br /&gt;
* [http://hercules.ws/board/user/63-juliocf/ JulioCF]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Spanish====&lt;br /&gt;
* [http://hercules.ws/board/user/125-m45t3r/ M45T3R]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== High Council ==&lt;br /&gt;
They're an upgrade from the [[#Community_Contributor | Community Contributor]] title.&lt;br /&gt;
* [http://hercules.ws/board/user/59-beret/ Beret]&lt;br /&gt;
* [http://hercules.ws/board/user/6-eiphes/ Eiphes]&lt;br /&gt;
* [http://hercules.ws/board/user/8-eurydice/ Eurydice]&lt;br /&gt;
* [http://hercules.ws/board/user/1160-gepard/ Gepard]&lt;br /&gt;
* [http://hercules.ws/board/user/88-kyeme/ kyeme]&lt;br /&gt;
* [http://hercules.ws/board/user/99-muad_dib/ Muad_Dib]&lt;br /&gt;
* [http://hercules.ws/board/user/456-rytech/ Rytech]&lt;br /&gt;
* [http://hercules.ws/board/user/409-yommy/ Yommy]&lt;br /&gt;
* [http://hercules.ws/board/user/67-xgear/ Xgear]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Former Staff Members =&lt;br /&gt;
Former staff members who've contributed throughout Hercules.&lt;br /&gt;
&lt;br /&gt;
== Former Administrators ==&lt;br /&gt;
* [http://hercules.ws/board/user/2-jman/ Jman]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former Core Developers ==&lt;br /&gt;
* [http://hercules.ws/board/user/28-greenbox/ GreenBox] &lt;br /&gt;
* [http://hercules.ws/board/user/725-susu/ Susu]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former Script Developers ==&lt;br /&gt;
* [http://hercules.ws/board/user/756-joseph/ Joseph]&lt;br /&gt;
* [http://hercules.ws/board/user/5-kenpachi/ Kenpachi]&lt;br /&gt;
* [http://hercules.ws/board/user/23-martin/ Martin]&lt;br /&gt;
* [http://hercules.ws/board/user/757-masao/ Masao]&lt;br /&gt;
* [http://hercules.ws/board/user/7-nameless2you/ Nameless2you]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former Scripting Moderators ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former Global Moderators ==&lt;br /&gt;
* [http://hercules.ws/board/user/10-judas/ Judas]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former Support Leaders ==&lt;br /&gt;
* [http://hercules.ws/board/user/4-emistry/ Emistry]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former Graphic Moderators ==&lt;br /&gt;
* [http://hercules.ws/board/user/129-adel/ Adel]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Former International Moderators ==&lt;br /&gt;
==== Filipino ====&lt;br /&gt;
* [http://hercules.ws/board/user/25-jaypee/ JayPee]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Community Contributors =&lt;br /&gt;
This title is awarded to community members for their outstanding support of Hercules. For more information, [http://hercules.ws/board/topic/376-hercules-cc-program/ read the thread about it on the forum.]&lt;br /&gt;
* [http://hercules.ws/board/user/48-dastgir-pojee/ Dastgir Pojee]&lt;br /&gt;
* [http://hercules.ws/board/user/1352-evilpuncker/ evilpuncker]&lt;br /&gt;
* [http://hercules.ws/board/user/118-mleo1/ mleo1]&lt;br /&gt;
* [http://hercules.ws/board/user/315-neo/ Neo]&lt;br /&gt;
* [http://hercules.ws/board/user/87-ossi0110/ ossi0110]&lt;br /&gt;
* [http://hercules.ws/board/user/449-patskie/ Patskie]&lt;br /&gt;
* [http://hercules.ws/board/user/303-ryuuzaki/ Ryuuzaki]&lt;br /&gt;
* [http://hercules.ws/board/user/297-shakto/ Shakto]&lt;br /&gt;
&lt;br /&gt;
[[Category:Hercules]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Checkcell</id>
		<title>Checkcell</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Checkcell"/>
				<updated>2014-01-29T06:52:57Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Syntax==&lt;br /&gt;
*[[checkcell]] (&amp;quot;&amp;lt;map name&amp;gt;&amp;quot;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;type&amp;gt;);&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;p&amp;gt;This command will return 1 or 0, depending on whether the specified cell &lt;br /&gt;
has the '''type''' flag set or not. There are various types to check, all &lt;br /&gt;
mimicking the server's cell_chk enumeration. The types can be found in &lt;br /&gt;
[https://github.com/HerculesWS/Hercules/blob/master/db/const.txt db/const.txt.].&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The meaning of the individual types can be confusing, so here's an &amp;lt;br&amp;gt;&lt;br /&gt;
===Overview===&lt;br /&gt;
  - cell_chkwall/water/cliff&lt;br /&gt;
    these check directly for the '''terrain component''' of the specified cell&lt;br /&gt;
  - cell_chkpass/reach/nopass/noreach&lt;br /&gt;
    passable = not wall &amp;amp; not cliff, reachable = passable &lt;br /&gt;
    wrt. no-stacking mod&lt;br /&gt;
  - cell_chknpc/basilica/landprotector/novending/nochat&lt;br /&gt;
    these check for specific dynamic flags (name indicates what they do)&lt;br /&gt;
==Examples==&lt;br /&gt;
 	mes &amp;quot;Pick a destination map.&amp;quot;;&lt;br /&gt;
 	input .@map$;&lt;br /&gt;
 	mes &amp;quot;Alright, now give me the coordinates.&amp;quot;;&lt;br /&gt;
 	input .@x;&lt;br /&gt;
 	input .@y;&lt;br /&gt;
 	if( !checkcell(.@map$,.@x,.@y,cell_chkpass) )&lt;br /&gt;
 	{&lt;br /&gt;
 		mes &amp;quot;Can't warp you there, sorry!&amp;quot;;&lt;br /&gt;
 		close;&lt;br /&gt;
 	}&lt;br /&gt;
 	else&lt;br /&gt;
 	{&lt;br /&gt;
 		mes &amp;quot;Ok, get ready...&amp;quot;;&lt;br /&gt;
 		close2;&lt;br /&gt;
 		warp .@map$, .@x, .@y;&lt;br /&gt;
 		end;&lt;br /&gt;
 	}&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[setcell]]&lt;br /&gt;
* [[setwall]]&lt;br /&gt;
* [[delwall]]&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Setcell</id>
		<title>Setcell</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Setcell"/>
				<updated>2014-01-29T06:52:48Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: /* See Also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Syntax==&lt;br /&gt;
*[[setcell]] &amp;quot;&amp;lt;map name&amp;gt;&amp;quot;,&amp;lt;x1&amp;gt;,&amp;lt;y1&amp;gt;,&amp;lt;x2&amp;gt;,&amp;lt;y2&amp;gt;,&amp;lt;type&amp;gt;,&amp;lt;flag&amp;gt;;&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;p&amp;gt;Each map cell has several '''flags''' that specify the properties of that cell.&lt;br /&gt;
These include terrain properties (walkability, shootability, presence of &lt;br /&gt;
water), skills (basilica, land protector, ...) and other (NPC nearby, no &lt;br /&gt;
vending, ...).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Each of these can be '''on''' or '''off'''. Together they define a cell's behavior.&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This command lets you alter these flags for all map cells in the specified &lt;br /&gt;
(x1,y1)-(x2,y2) rectangle.&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;'''type''' defines which flag to modify. Possible options include cell_walkable,&lt;br /&gt;
cell_shootable, cell_basilica. For a full list, see [https://github.com/HerculesWS/Hercules/blob/master/db/const.txt const.txt.]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;'''flag''' can be 0 or 1 (0:clear flag, 1:set flag). &amp;lt;/p&amp;gt;&lt;br /&gt;
==Examples==&lt;br /&gt;
 	setcell &amp;quot;arena&amp;quot;,0,0,300,300,cell_basilica,1;&lt;br /&gt;
 	setcell &amp;quot;arena&amp;quot;,140,140,160,160,cell_basilica,0;&lt;br /&gt;
 	setcell &amp;quot;arena&amp;quot;,135,135,165,165,cell_walkable,0;&lt;br /&gt;
 	setcell &amp;quot;arena&amp;quot;,140,140,160,160,cell_walkable,1;&lt;br /&gt;
&amp;lt;p&amp;gt;This will add a makeshift ring into the center of the map. The ring will &lt;br /&gt;
be surrounded by a 5-cell wide '''gap''' to prevent interference from outside, &lt;br /&gt;
and the rest of the map will be marked as '''basilica''', preventing observers &lt;br /&gt;
from casting any offensive skills or fighting among themselves. Note that &lt;br /&gt;
the wall will not be shown nor known client-side, which may cause movement &lt;br /&gt;
problems.&amp;lt;/p&amp;gt;&lt;br /&gt;
==Examples 2==&lt;br /&gt;
 OnBarricadeDeploy:&lt;br /&gt;
 	setcell &amp;quot;schg_cas05&amp;quot;,114,51,125,51,cell_walkable,0;&lt;br /&gt;
 	end;&lt;br /&gt;
 OnBarricadeBreak:&lt;br /&gt;
 	setcell &amp;quot;schg_cas05&amp;quot;,114,51,125,51,cell_walkable,1;&lt;br /&gt;
 	end;&lt;br /&gt;
&amp;lt;p&amp;gt;This could be a part of the WoE:SE script, where attackers are not allowed&lt;br /&gt;
to proceed until all barricades are destroyed. This script would place and&lt;br /&gt;
remove a nonwalkable row of cells after the barricade mobs.&amp;lt;/p&amp;gt;&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[checkcell]]&lt;br /&gt;
* [[setwall]]&lt;br /&gt;
* [[delwall]]&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Setcell</id>
		<title>Setcell</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Setcell"/>
				<updated>2014-01-29T06:51:49Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Syntax==&lt;br /&gt;
*[[setcell]] &amp;quot;&amp;lt;map name&amp;gt;&amp;quot;,&amp;lt;x1&amp;gt;,&amp;lt;y1&amp;gt;,&amp;lt;x2&amp;gt;,&amp;lt;y2&amp;gt;,&amp;lt;type&amp;gt;,&amp;lt;flag&amp;gt;;&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;p&amp;gt;Each map cell has several '''flags''' that specify the properties of that cell.&lt;br /&gt;
These include terrain properties (walkability, shootability, presence of &lt;br /&gt;
water), skills (basilica, land protector, ...) and other (NPC nearby, no &lt;br /&gt;
vending, ...).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Each of these can be '''on''' or '''off'''. Together they define a cell's behavior.&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This command lets you alter these flags for all map cells in the specified &lt;br /&gt;
(x1,y1)-(x2,y2) rectangle.&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;'''type''' defines which flag to modify. Possible options include cell_walkable,&lt;br /&gt;
cell_shootable, cell_basilica. For a full list, see [https://github.com/HerculesWS/Hercules/blob/master/db/const.txt const.txt.]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;'''flag''' can be 0 or 1 (0:clear flag, 1:set flag). &amp;lt;/p&amp;gt;&lt;br /&gt;
==Examples==&lt;br /&gt;
 	setcell &amp;quot;arena&amp;quot;,0,0,300,300,cell_basilica,1;&lt;br /&gt;
 	setcell &amp;quot;arena&amp;quot;,140,140,160,160,cell_basilica,0;&lt;br /&gt;
 	setcell &amp;quot;arena&amp;quot;,135,135,165,165,cell_walkable,0;&lt;br /&gt;
 	setcell &amp;quot;arena&amp;quot;,140,140,160,160,cell_walkable,1;&lt;br /&gt;
&amp;lt;p&amp;gt;This will add a makeshift ring into the center of the map. The ring will &lt;br /&gt;
be surrounded by a 5-cell wide '''gap''' to prevent interference from outside, &lt;br /&gt;
and the rest of the map will be marked as '''basilica''', preventing observers &lt;br /&gt;
from casting any offensive skills or fighting among themselves. Note that &lt;br /&gt;
the wall will not be shown nor known client-side, which may cause movement &lt;br /&gt;
problems.&amp;lt;/p&amp;gt;&lt;br /&gt;
==Examples 2==&lt;br /&gt;
 OnBarricadeDeploy:&lt;br /&gt;
 	setcell &amp;quot;schg_cas05&amp;quot;,114,51,125,51,cell_walkable,0;&lt;br /&gt;
 	end;&lt;br /&gt;
 OnBarricadeBreak:&lt;br /&gt;
 	setcell &amp;quot;schg_cas05&amp;quot;,114,51,125,51,cell_walkable,1;&lt;br /&gt;
 	end;&lt;br /&gt;
&amp;lt;p&amp;gt;This could be a part of the WoE:SE script, where attackers are not allowed&lt;br /&gt;
to proceed until all barricades are destroyed. This script would place and&lt;br /&gt;
remove a nonwalkable row of cells after the barricade mobs.&amp;lt;/p&amp;gt;&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[checkwall]]&lt;br /&gt;
* [[setwall]]&lt;br /&gt;
* [[delwall]]&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Checkcell</id>
		<title>Checkcell</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Checkcell"/>
				<updated>2014-01-29T06:51:42Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: Created page with &amp;quot;==Syntax== *checkwall (&amp;quot;&amp;lt;map name&amp;gt;&amp;quot;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;type&amp;gt;); ==Description== &amp;lt;p&amp;gt;This command will return 1 or 0, depending on whether the specified cell  has the '''type''' flag s...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Syntax==&lt;br /&gt;
*[[checkwall]] (&amp;quot;&amp;lt;map name&amp;gt;&amp;quot;,&amp;lt;x&amp;gt;,&amp;lt;y&amp;gt;,&amp;lt;type&amp;gt;);&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;p&amp;gt;This command will return 1 or 0, depending on whether the specified cell &lt;br /&gt;
has the '''type''' flag set or not. There are various types to check, all &lt;br /&gt;
mimicking the server's cell_chk enumeration. The types can be found in &lt;br /&gt;
[https://github.com/HerculesWS/Hercules/blob/master/db/const.txt db/const.txt.].&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The meaning of the individual types can be confusing, so here's an &amp;lt;br&amp;gt;&lt;br /&gt;
===Overview===&lt;br /&gt;
  - cell_chkwall/water/cliff&lt;br /&gt;
    these check directly for the '''terrain component''' of the specified cell&lt;br /&gt;
  - cell_chkpass/reach/nopass/noreach&lt;br /&gt;
    passable = not wall &amp;amp; not cliff, reachable = passable &lt;br /&gt;
    wrt. no-stacking mod&lt;br /&gt;
  - cell_chknpc/basilica/landprotector/novending/nochat&lt;br /&gt;
    these check for specific dynamic flags (name indicates what they do)&lt;br /&gt;
==Examples==&lt;br /&gt;
 	mes &amp;quot;Pick a destination map.&amp;quot;;&lt;br /&gt;
 	input .@map$;&lt;br /&gt;
 	mes &amp;quot;Alright, now give me the coordinates.&amp;quot;;&lt;br /&gt;
 	input .@x;&lt;br /&gt;
 	input .@y;&lt;br /&gt;
 	if( !checkcell(.@map$,.@x,.@y,cell_chkpass) )&lt;br /&gt;
 	{&lt;br /&gt;
 		mes &amp;quot;Can't warp you there, sorry!&amp;quot;;&lt;br /&gt;
 		close;&lt;br /&gt;
 	}&lt;br /&gt;
 	else&lt;br /&gt;
 	{&lt;br /&gt;
 		mes &amp;quot;Ok, get ready...&amp;quot;;&lt;br /&gt;
 		close2;&lt;br /&gt;
 		warp .@map$, .@x, .@y;&lt;br /&gt;
 		end;&lt;br /&gt;
 	}&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[setcell]]&lt;br /&gt;
* [[setwall]]&lt;br /&gt;
* [[delwall]]&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Setcell</id>
		<title>Setcell</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Setcell"/>
				<updated>2014-01-29T06:40:51Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: Created page with &amp;quot;==Syntax== *'''setcell''' &amp;quot;&amp;lt;map name&amp;gt;&amp;quot;,&amp;lt;x1&amp;gt;,&amp;lt;y1&amp;gt;,&amp;lt;x2&amp;gt;,&amp;lt;y2&amp;gt;,&amp;lt;type&amp;gt;,&amp;lt;flag&amp;gt;; ==Description== &amp;lt;p&amp;gt;Each map cell has several '''flags''' that specify the properties of that cell. Th...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Syntax==&lt;br /&gt;
*'''setcell''' &amp;quot;&amp;lt;map name&amp;gt;&amp;quot;,&amp;lt;x1&amp;gt;,&amp;lt;y1&amp;gt;,&amp;lt;x2&amp;gt;,&amp;lt;y2&amp;gt;,&amp;lt;type&amp;gt;,&amp;lt;flag&amp;gt;;&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;p&amp;gt;Each map cell has several '''flags''' that specify the properties of that cell.&lt;br /&gt;
These include terrain properties (walkability, shootability, presence of &lt;br /&gt;
water), skills (basilica, land protector, ...) and other (NPC nearby, no &lt;br /&gt;
vending, ...).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Each of these can be '''on''' or '''off'''. Together they define a cell's behavior.&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This command lets you alter these flags for all map cells in the specified &lt;br /&gt;
(x1,y1)-(x2,y2) rectangle.&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;'''type''' defines which flag to modify. Possible options include cell_walkable,&lt;br /&gt;
cell_shootable, cell_basilica. For a full list, see [https://github.com/HerculesWS/Hercules/blob/master/db/const.txt const.txt.]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;'''flag''' can be 0 or 1 (0:clear flag, 1:set flag). &amp;lt;/p&amp;gt;&lt;br /&gt;
==Examples==&lt;br /&gt;
 	setcell &amp;quot;arena&amp;quot;,0,0,300,300,cell_basilica,1;&lt;br /&gt;
 	setcell &amp;quot;arena&amp;quot;,140,140,160,160,cell_basilica,0;&lt;br /&gt;
 	setcell &amp;quot;arena&amp;quot;,135,135,165,165,cell_walkable,0;&lt;br /&gt;
 	setcell &amp;quot;arena&amp;quot;,140,140,160,160,cell_walkable,1;&lt;br /&gt;
&amp;lt;p&amp;gt;This will add a makeshift ring into the center of the map. The ring will &lt;br /&gt;
be surrounded by a 5-cell wide '''gap''' to prevent interference from outside, &lt;br /&gt;
and the rest of the map will be marked as '''basilica''', preventing observers &lt;br /&gt;
from casting any offensive skills or fighting among themselves. Note that &lt;br /&gt;
the wall will not be shown nor known client-side, which may cause movement &lt;br /&gt;
problems.&amp;lt;/p&amp;gt;&lt;br /&gt;
==Examples 2==&lt;br /&gt;
 OnBarricadeDeploy:&lt;br /&gt;
 	setcell &amp;quot;schg_cas05&amp;quot;,114,51,125,51,cell_walkable,0;&lt;br /&gt;
 	end;&lt;br /&gt;
 OnBarricadeBreak:&lt;br /&gt;
 	setcell &amp;quot;schg_cas05&amp;quot;,114,51,125,51,cell_walkable,1;&lt;br /&gt;
 	end;&lt;br /&gt;
&amp;lt;p&amp;gt;This could be a part of the WoE:SE script, where attackers are not allowed&lt;br /&gt;
to proceed until all barricades are destroyed. This script would place and&lt;br /&gt;
remove a nonwalkable row of cells after the barricade mobs.&amp;lt;/p&amp;gt;&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[setwall]]&lt;br /&gt;
* [[delwall]]&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Getmobdrops</id>
		<title>Getmobdrops</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Getmobdrops"/>
				<updated>2014-01-20T14:08:00Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: Created page with &amp;quot;== Syntax == * getmobdrops (&amp;lt;mob id&amp;gt;);  == Description == &amp;lt;p&amp;gt;This command will find all drops of the specified mob and return the item  IDs and drop percentages into array...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Syntax ==&lt;br /&gt;
* [[getmobdrops]] (&amp;lt;mob id&amp;gt;);&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&amp;lt;p&amp;gt;This command will find all drops of the specified mob and return the item &lt;br /&gt;
IDs and drop percentages into arrays of temporary global variables. &lt;br /&gt;
'getmobdrops' returns 1 if successful and 0 if the mob ID doesn't exist.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upon executing this,&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Array&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| '''$@MobDrop_item[]''' || is a global temporary number array which contains the item IDs of the monster's drops.&lt;br /&gt;
|-&lt;br /&gt;
| '''$@MobDrop_rate[]''' || is a global temporary number array which contains the drop percentages of each item. (1 = .01%)&lt;br /&gt;
|-&lt;br /&gt;
| '''$@MobDrop_count''' || is the number of item drops found.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Be sure to use '''$@MobDrop_count''' to go through the arrays, and not [[getarraysize]], because the temporary global arrays are not cleared between runs of [[getmobdrops]]. If a mob with 7 item drops is looked up, &lt;br /&gt;
the arrays would have 7 elements. But if another mob is looked up and it only has 5 item drops, the server will not clear the arrays for you, overwriting the values instead. So in addition to returning the 5 item drops, the 6th and 7th elements from the last call remain, and you will get 5+2 item drops, of which the last 2 don't belong to the new mob. &lt;br /&gt;
'''$@MobDrop_count''' will always contain the correct number (5), unlike &lt;br /&gt;
[[getarraysize]] which would return 7 in this case.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
 	// get a Mob ID from the user&lt;br /&gt;
 	input .@mob_id;&lt;br /&gt;
 	&lt;br /&gt;
 	if (getmobdrops(.@mob_id)) {	// 'getmobdrops' returns 1 on success&lt;br /&gt;
 		// immediately copy global temporary variables into scope &lt;br /&gt;
 		// variables, since we don't know when 'getmobdrops' will get &lt;br /&gt;
 		// called again for another mob, overwriting your global temporary &lt;br /&gt;
 		// variables.&lt;br /&gt;
 		set .@count, $@MobDrop_count;&lt;br /&gt;
 		copyarray .@item[0],$@MobDrop_item[0],.@count;&lt;br /&gt;
 		copyarray .@rate[0],$@MobDrop_rate[0],.@count;&lt;br /&gt;
 		&lt;br /&gt;
 		mes getmonsterinfo(.@mob_id,MOB_NAME) + &amp;quot; - &amp;quot; + .@count + &amp;quot; drops found:&amp;quot;;&lt;br /&gt;
 		for( set .@i,0; .@i &amp;lt; .@count; set .@i,.@i +1 ) {&lt;br /&gt;
 			mes .@item[.@i] + &amp;quot; (&amp;quot; + getitemname(.@item[.@i]) + &amp;quot;) &amp;quot; &lt;br /&gt;
 			+ .@rate[.@i]/100 + ((.@rate[.@i]%100 &amp;lt; 10) ? &amp;quot;.0&amp;quot;:&amp;quot;.&amp;quot;) + .@rate[.@i]%100 + &amp;quot;%&amp;quot;;&lt;br /&gt;
 		}&lt;br /&gt;
 	} else {&lt;br /&gt;
 		mes &amp;quot;Unknown monster ID.&amp;quot;;&lt;br /&gt;
 	}&lt;br /&gt;
 	close;&lt;br /&gt;
&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Delmonsterdrop</id>
		<title>Delmonsterdrop</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Delmonsterdrop"/>
				<updated>2014-01-20T13:45:22Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: Created page with &amp;quot;== Syntax == * delmonsterdrop (&amp;lt;mob id or name&amp;gt;, &amp;lt;item id&amp;gt;); == Description == &amp;lt;p&amp;gt;This command will temporarily remove a drop from an existing monster.&amp;lt;/p&amp;gt;  &amp;lt;p&amp;gt;Both the mo...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Syntax ==&lt;br /&gt;
* [[delmonsterdrop]] (&amp;lt;mob id or name&amp;gt;, &amp;lt;item id&amp;gt;);&lt;br /&gt;
== Description ==&lt;br /&gt;
&amp;lt;p&amp;gt;This command will temporarily remove a drop from an existing monster.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Both the monster and the item must be valid.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Return value will be 1 in case of success (the item was removed), and 0&amp;lt;br&amp;gt;&lt;br /&gt;
otherwise (the monster didn't have the specified item in its drop list).&amp;lt;/p&amp;gt;&lt;br /&gt;
== Example ==&lt;br /&gt;
 	// Remove Jellopy (909) from the Poring's (1002) drops&lt;br /&gt;
 	delmonsterdrop(1002, 909);&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[addmonsterdrop]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Addmonsterdrop</id>
		<title>Addmonsterdrop</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Addmonsterdrop"/>
				<updated>2014-01-20T13:35:42Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: Created page with &amp;quot;== Syntax == * addmonsterdrop (&amp;lt;mob id or name&amp;gt;, &amp;lt;item id&amp;gt;, &amp;lt;rate&amp;gt;); == Description == &amp;lt;p&amp;gt;This command will temporarily add a drop to an existing monster. If the&amp;lt;br&amp;gt; monst...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Syntax ==&lt;br /&gt;
* [[addmonsterdrop]] (&amp;lt;mob id or name&amp;gt;, &amp;lt;item id&amp;gt;, &amp;lt;rate&amp;gt;);&lt;br /&gt;
== Description ==&lt;br /&gt;
&amp;lt;p&amp;gt;This command will temporarily add a drop to an existing monster. If the&amp;lt;br&amp;gt;&lt;br /&gt;
monster already drops the specified item, its drop rate will be updated to the&amp;lt;br&amp;gt;&lt;br /&gt;
given value.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Both the monster and the item must be valid.  Acceptable values for the drop&amp;lt;br&amp;gt;&lt;br /&gt;
rate are in the range [1:10000].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Return value will be 1 in case of success (the item was added or its drop rate&amp;lt;br&amp;gt;&lt;br /&gt;
was updated), and 0 otherwise (there were no free item drop slots).&amp;lt;/p&amp;gt;&lt;br /&gt;
== Example ==&lt;br /&gt;
 	// Add Poring Doll (741) to the Poring's (1002) drops, with 1% (100) rate&lt;br /&gt;
 	addmonsterdrop(1002, 741, 100);&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[delmonsterdrop]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Server_Modification</id>
		<title>Server Modification</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Server_Modification"/>
				<updated>2014-01-04T12:32:56Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: /* Source Modifications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;You can find here some information to start making server-side source modifications.&lt;br /&gt;
&lt;br /&gt;
== How Hercules works ==&lt;br /&gt;
Hercules has a multi-process architecture. It runs three different processes: '''login-server''', '''char-server''' and '''map-server'''.&lt;br /&gt;
&lt;br /&gt;
=== Login Server ===&lt;br /&gt;
'''Login server''' ''':''' receives the login packet, checks if account exists and if the password is correct. If all is OK, the connection is then passed to the '''char-server'''.&lt;br /&gt;
&lt;br /&gt;
=== Char-Server ===&lt;br /&gt;
&lt;br /&gt;
'''Char-server''' ''':''' controls all the character related, Guild, party, pet, inventory etc.&lt;br /&gt;
&lt;br /&gt;
=== Map-Server ===&lt;br /&gt;
The last one is the '''map-server''', which controls char and NPC position, chats, skills, exp etc.&lt;br /&gt;
&lt;br /&gt;
== Source Modifications ==&lt;br /&gt;
Before you start modifying [[Hercules]], you should better take a look first on [[:Category:Source_Functions]]. &lt;br /&gt;
Remember, it's necessary to [[Compiling|re-compile]] [[Hercules]] after a source modification.&lt;br /&gt;
You can also find information about [[packets]].&lt;br /&gt;
&lt;br /&gt;
=== Pre-Made Modifications ===&lt;br /&gt;
Also can take a look at modifications made by other users.&lt;br /&gt;
* [[:Category:Source Snippets|Source Snippets]]&lt;br /&gt;
* [[Customizing Sheet]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Customization]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Custom_Pets</id>
		<title>Custom Pets</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Custom_Pets"/>
				<updated>2013-12-27T05:53:30Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==The Pet DB==&lt;br /&gt;
The information about pets are stored in the pet_db.txt file in the db folder. Here is a quick &lt;br /&gt;
rundown of what the database contains. We will look at a Poring, as an example.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MobID,Name,JName,ItemID,EggID,AcceID,FoodID,&lt;br /&gt;
Fullness,HungryDelay,R_Hungry,,R_Full,Intimate,Die,&lt;br /&gt;
Capture,Speed,S_Performance,talk_convert_class, &lt;br /&gt;
attack_rate,defence_attack_rate,change_target_rate, pet_script&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1002,PORING,Poring,619,9001,10013,531,80,20,50,100,250,20,2000,400,1,0,350,400,800,{ petloot 10; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* '''MobID:''' Obvious, check mob_db.txt for a monster's MobID.&lt;br /&gt;
* '''Name:''' Again, check mob_db.txt for this value. It is the second value in mob_db.&lt;br /&gt;
* '''JName:''' Basically will be the default name for your pet.&lt;br /&gt;
* '''ItemID:''' The taming item's ID. In this case, an Unripe Apple(619).&lt;br /&gt;
* '''EggID:''' The egg's ID.&lt;br /&gt;
* '''AcceID:''' The item ID of the accessory. '''For custom pets, leave this value to be 0.'''&lt;br /&gt;
* '''FoodID:''' The food for your pet. In this case, Apple Juice(531).&lt;br /&gt;
* '''Fullness:''' No idea, but every pet seems to have a value of 80. Keep it at that.&lt;br /&gt;
* '''HungryDelay:''' The rate the pet gets hungry. The lower the number, the faster it will get hungry.&lt;br /&gt;
* '''R_Hungry:''' No idea. I made the value for mine 20.&lt;br /&gt;
* '''R_Full:''' No idea. I made the value for mine 100.&lt;br /&gt;
* '''Intimate:''' No idea. I made the value for mine 250.&lt;br /&gt;
* '''Die:''' How much intimacy points you lose when you die. Usually set to 20.&lt;br /&gt;
* '''Capture:''' The rate of capture. 1% = 100 and 100% = 10000. Basically, choose your percentage and add two zeroes to the end.&lt;br /&gt;
* '''Speed:''' The speed in which the pet will follow you (not sure). I set mine at 200.&lt;br /&gt;
* '''S_Performance:''' No idea. I set mine at 1.&lt;br /&gt;
* '''talk_convert_class:''' The pet's dialogue used in pettalktable. This will allow your custom pets to talk like certain pets.&lt;br /&gt;
* '''attack_rate:''' Chance the pet will attack. Same format as Capture rate.&lt;br /&gt;
* '''defence_rate:''' Chance the pet will attack when master is attacked. Same format as Capture rate.&lt;br /&gt;
* '''change_target_rate:''' Chance the pet will change targets. Same format as Capture rate.&lt;br /&gt;
* '''pet_script:''' The special skill used by the pet.&amp;lt;br&amp;gt;&lt;br /&gt;
As to pet skills, pet_db gives an in depth explanation on how to use it. It's quite simple to &lt;br /&gt;
give your custom pet custom skills, so I will not be detailing this in this guide. If you want &lt;br /&gt;
your custom pets to use skills, you may have to change:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Does the pet need its equipment before it does its skill? (Note 1)&lt;br /&gt;
pet_equip_required: yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to no, since they will not have equipment&lt;br /&gt;
&lt;br /&gt;
==The Item DB==&lt;br /&gt;
Taming items and pet egg information are stored in the item_db.conf file. A taming item format &lt;br /&gt;
is the following, using an Unripe Apple(619) as an example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	Id: 619&lt;br /&gt;
	AegisName: &amp;quot;Unripe_Apple&amp;quot;&lt;br /&gt;
	Name: &amp;quot;Unripe Apple&amp;quot;&lt;br /&gt;
	Type: 2&lt;br /&gt;
	Buy: 1000&lt;br /&gt;
	Weight: 50&lt;br /&gt;
	Upper: 63&lt;br /&gt;
	Script: &amp;lt;&amp;quot; pet 1002; &amp;quot;&amp;gt;&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Important to note is the part in bold. The ETC item you use for custom taming items will need &lt;br /&gt;
to follow this same format.&amp;lt;br&amp;gt;&lt;br /&gt;
A pet egg format is the following, using a Poring Egg(9001) as an example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	Id: 9001&lt;br /&gt;
	AegisName: &amp;quot;Poring_Egg&amp;quot;&lt;br /&gt;
	Name: &amp;quot;Poring Egg&amp;quot;&lt;br /&gt;
	Type: 7&lt;br /&gt;
	Buy: 20&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This part is very easy, as you can see.&amp;lt;br&amp;gt;&lt;br /&gt;
Basically, model your taming items and eggs to these formats, and you will not need to know any specifics.&lt;br /&gt;
&lt;br /&gt;
==Replacing A Pet==&lt;br /&gt;
The easiest way to have a custom pet is to replace a current pet. Say you want a Succubus&lt;br /&gt;
(1370). Choose a pet that you don't want anymore. For our example, we will replace a Poring. To do this, simply replace the following to get a custom pet that has the exact same status and skills as a Poring.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1370,SUCCUBUS,Succubus,619,9001,0,531,80,20,50,100,250,20,2000,400,1,0,350,400,800,{ petloot 10; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can customize this further by editing the values you wish. Notice that the accessory value has been changed to 0.&amp;lt;br&amp;gt;&lt;br /&gt;
Next, you must inherit the item in item_db2.conf for information about the taming item. To do this,  Add the following values, following the format of the Item DB explained above:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	Id: 619&lt;br /&gt;
	Inherit: true&lt;br /&gt;
	Script: &amp;lt;&amp;quot; pet 1370; &amp;quot;&amp;gt;&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;''Note: Read more information about [http://hercules.ws/board/topic/2954-item-db-file-structure-overhaul/ Item DB file structure overhaul]''&amp;lt;/small&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Now you are done, and have a Succubus instead of a Poring. To catch a Succubus, you will use an Unripe Apple (619). To change the item descriptions and egg sprites, please refer to another section of this guide.&lt;br /&gt;
&lt;br /&gt;
==Adding A New Pet==&lt;br /&gt;
I didn't like the idea of replacing an existing pet, so I sought to add in pets. The process is&lt;br /&gt;
a little similar to replacing a pet. Instead, you create a new line in pet_db.txt with your &lt;br /&gt;
new pet information. As an example, we will add a Succubus to the pet_db.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1370,SUCCUBUS,Succubus,739,9031,0,537,80,20,20,100,250,20,150,200,1,0,800,400,200,&lt;br /&gt;
{ petskillbonus bLuk,20,10,90; }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
I made the Succubus's taming item a Rouge(739), her food Pet Food(537), her capture rate 1.5%, and her pet skill +20 Luck for 10 seconds every 90 seconds.&amp;lt;br&amp;gt;&lt;br /&gt;
Add the above line to the end of pet_db, and you are done. Now we have all the original pets AND a Succubus.&amp;lt;br&amp;gt;&lt;br /&gt;
The next step is to create a taming item and an egg for this Succubus. To create the taming &lt;br /&gt;
item, go to item_db, and pick an item you want to use for the taming item and add Inherit it on item_db2. I suggest using an ETC item, as they really do not serve much purpose. Edit the values accordingly to follow the pet taming item format. An example of Rouge for the Succubus taming item:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	Id: 739&lt;br /&gt;
	Inherit: true&lt;br /&gt;
	Type: 2&lt;br /&gt;
	Upper: 63&lt;br /&gt;
	Script: &amp;lt;&amp;quot; pet 1370; &amp;quot;&amp;gt;&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Next, we need a pet egg. This, you will have to actually create. Choose an available Item ID. I&lt;br /&gt;
suggest starting from 9028, if not already used, and work your way up, for pet eggs. Add a line to item_db2.conf with the values for a pet egg. For example, a Succubus egg:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	Id: 9031&lt;br /&gt;
	AegisName: &amp;quot;Succubus_Egg&amp;quot;&lt;br /&gt;
	Name: &amp;quot;Succubus Egg&amp;quot;&lt;br /&gt;
	Type: 7&lt;br /&gt;
	Buy: 20&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The egg ID is 9031, as you can also see from the entry in pet_db.&amp;lt;br&amp;gt;&lt;br /&gt;
After doing this, you now have added a Succubus into the database, with her own taming item and egg. Everything is now ready on the server side.&lt;br /&gt;
&lt;br /&gt;
==Egg Sprites and Item Descriptions==&lt;br /&gt;
In order for your client to not crash, you must have information and a sprite for the pet egg.&lt;br /&gt;
For old client. Go to your idnum2itemdesctable.txt, idnum2itemdisplaynametable.txt, num2itemdesctable.txt, and num2itemdisplaynametable.txt, and create a new entry for the egg. I will not go into detail on how to do this; there are other guides for this. You may also choose to edit the item &lt;br /&gt;
description of the taming item, though this is not necessary.&amp;lt;br&amp;gt;&lt;br /&gt;
Next, you have to give the egg a sprite, or else your client will crash. To do this, edit &lt;br /&gt;
idnum2itemresnametable.txt and num2itemresnametable.txt and add in an entry for the egg. Refer to this topic for what to use for egg sprites. If you have no clue how to work with resnametables, then search the forums.&amp;lt;br&amp;gt;&lt;br /&gt;
I will give examples of the values I put in my tables.&amp;lt;br&amp;gt;&lt;br /&gt;
idnum2itemdesctable and num2itemdesctable:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
9031#&lt;br /&gt;
An egg in which a Succubus Cute Pet rests. Can be hatched by using a ^33CC33Pet Incubator^000000.&lt;br /&gt;
Class :^777777 Monster Egg^000000&lt;br /&gt;
#&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
idnum2itemdisplaynametable and num2itemdisplaynametable:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
9031#Succubus_Egg#&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
idnum2itemresnametable and num2itemresnametable:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
9031#Áö¼Ó¼º¾Ë#&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you use 2013 client, edit your iteminfo.lua\lub. Visit [[Custom_Items#Item_Placement_on_Data_Folder_.28For_New_Clients.29|Item Placement on Data Folder]]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	[9031] = {&lt;br /&gt;
		unidentifiedDisplayName = &amp;quot;Succubus Egg&amp;quot;,&lt;br /&gt;
		unidentifiedResourceName = &amp;quot;¾Ï¼Ó¼º¾Ë&amp;quot;,&lt;br /&gt;
		unidentifiedDescriptionName = {&lt;br /&gt;
			&amp;quot;An egg in which a&amp;quot;,&lt;br /&gt;
			&amp;quot;Succubus Cute Pet rests.&amp;quot;,&lt;br /&gt;
			&amp;quot;Can be hatched by&amp;quot;,&lt;br /&gt;
			&amp;quot;using a ^33CC33Pet Incubator^000000.&amp;quot;,&lt;br /&gt;
			&amp;quot;^33CC33Cordial/Loyal Bonus^000000&amp;quot;,&lt;br /&gt;
			&amp;quot;When summoned,&amp;quot;,&lt;br /&gt;
			&amp;quot;Has a chance of draining 2% of enemy's HP while attacking.&amp;quot;,&lt;br /&gt;
			&amp;quot;Class: ^777777Monster Egg^000000&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		identifiedDisplayName = &amp;quot;Succubus Egg&amp;quot;,&lt;br /&gt;
		identifiedResourceName = &amp;quot;¾Ï¼Ó¼º¾Ë&amp;quot;,&lt;br /&gt;
		identifiedDescriptionName = {&lt;br /&gt;
			&amp;quot;An egg in which a&amp;quot;,&lt;br /&gt;
			&amp;quot;Succubus Cute Pet rests.&amp;quot;,&lt;br /&gt;
			&amp;quot;Can be hatched by&amp;quot;,&lt;br /&gt;
			&amp;quot;using a ^33CC33Pet Incubator^000000.&amp;quot;,&lt;br /&gt;
			&amp;quot;^33CC33Cordial/Loyal Bonus^000000&amp;quot;,&lt;br /&gt;
			&amp;quot;When summoned,&amp;quot;,&lt;br /&gt;
			&amp;quot;while physically attacking, physical damage done to enemy, 5% will transfer as your HP&amp;quot;,&lt;br /&gt;
			&amp;quot;Class: ^777777Monster Egg^000000&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		slotCount = 0,&lt;br /&gt;
		ClassNum = 0&lt;br /&gt;
	},&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pettalktable==&lt;br /&gt;
By default, your pet will talk like a Poring. If you wish to change this, edit the &lt;br /&gt;
talk_convert_class value in pet_db to the ID of one of the original pets. For example, to make our Succubus talk like a Zealotus, edit her talk_convert_class to 1200. Now she will talk like a Zealotus.&amp;lt;br&amp;gt;&lt;br /&gt;
If you want to edit what she says, then you may. However, note that if you edit this, both the&lt;br /&gt;
Zealotus and Succubus will say the same things. It is not currently possibly to add in talk &lt;br /&gt;
for Succubus and not replace anything. I recommend choosing a pet that you or your clients may never use, and replace that pet's dialogue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Q&amp;amp;A==&lt;br /&gt;
Q. What will the pet portrait be?&amp;lt;br&amp;gt;&lt;br /&gt;
A. The pet portrait will be a Poring by default. Customised images should be placed in:&lt;br /&gt;
:data\texture\À¯ÀúÀÎÅÍÆäÀÌ½º\illust&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Q. What will the new pet's performance be?&amp;lt;br&amp;gt;&lt;br /&gt;
A. Nothing. The sprite will disappear and reappear quickly. Your game won't crash.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Q. How many pets can I add?&amp;lt;br&amp;gt;&lt;br /&gt;
A. Up to 300. I believe that if you change the MAX_PET_DB value in pet.h in the src/map folder, you can add more. Note that you will have to recompile.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Q. Why does the egg name become red when I try to hatch it and the pet not show up?&amp;lt;br&amp;gt;&lt;br /&gt;
A. This is caused by the egg being spawned via an @item command (or equivalent). To create the egg you need to use the @makeegg command.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Customization]]&lt;br /&gt;
[[Category:Data]]&lt;br /&gt;
[[Category:Database]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Adding_new_statuses</id>
		<title>Adding new statuses</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Adding_new_statuses"/>
				<updated>2013-12-25T12:06:54Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Information ==&lt;br /&gt;
&lt;br /&gt;
When modifying your server, the time may come when you need to add or ammend status effects, and the bonuses or the 'scripts' that they provide. To do so, will require some source modifications, but will result in the ability to create and initialize status effects.&lt;br /&gt;
&lt;br /&gt;
== Open {{git|src/map/status.h}} ==&lt;br /&gt;
&lt;br /&gt;
You will notice a large enumerator called &amp;quot;sc_type&amp;quot;, which defines the different statuses. When creating a new status, we need to move to the ''end'' of the enumerator, and add a custom SC type like below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	SC_HELLPOWER = 294,&lt;br /&gt;
	SC_INVINCIBLE, //295&lt;br /&gt;
	SC_INVINCIBLEOFF,&lt;br /&gt;
	SC_CUSTOMSTATUS, // This is our custom status effect&lt;br /&gt;
&lt;br /&gt;
	SC_MAX, //Automatically updated max, used in for's to check we are within bounds.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that SC_CUSTOMSTATUS is placed ''before'' the SC_MAX entry. Any new status effects must be placed before SC_MAX and preceed with a comma. Here we have declared a new status effect, so we can now move onto use it.&lt;br /&gt;
&lt;br /&gt;
== Open {{git|src/map/status.c}} ==&lt;br /&gt;
&lt;br /&gt;
Jump to the function ''status_change_start'':&lt;br /&gt;
&lt;br /&gt;
=== Status effect immunity ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	undead_flag = battle-&amp;gt;check_undead(status-&amp;gt;race,status-&amp;gt;def_ele);&lt;br /&gt;
	//Check for inmunities / sc fails&lt;br /&gt;
	switch (type)&lt;br /&gt;
	{&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This block is where we actually perform any checks, such as circumstances which disallow a status from being used.&lt;br /&gt;
For example, let's say that SC_CUSTOMSTATUS cannot be inflicted when the target has SC_BLIND active.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	case SC_CUSTOMSTATUS:&lt;br /&gt;
		if(sc-&amp;gt;data[SC_BLIND])&lt;br /&gt;
			return 0;&lt;br /&gt;
	break;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And now, if the target has SC_BLIND active, the status will not be inflicted at all.&lt;br /&gt;
&lt;br /&gt;
=== Status effect curing ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	//Before overlapping fail, one must check for status cured.&lt;br /&gt;
	switch (type)&lt;br /&gt;
	{&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This block actually cancels ''other'' status effects if your status effect is being activated. Like the above, it's not necessary, but let's say that SC_CUSTOMSTATUS ''removes'' SC_BLIND.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	case SC_CUSTOMSTATUS:&lt;br /&gt;
		status_change_end(bl, SC_BLIND, -1);&lt;br /&gt;
		break;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As simple as that, now whenever SC_CUSTOMSTATUS is inflicted, SC_BLIND will be removed.&lt;br /&gt;
&lt;br /&gt;
=== val1, val2, val3 and val4 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;		case SC_REBIRTH:&lt;br /&gt;
			val2 = 20*val1; //% of life to be revived with&lt;br /&gt;
			break;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you find this piece of code, it means you're in the actual block which manipulates val1, val2, val3, val4 and tick. This is especially useful when altering status effects that have been initialized by skills.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;		case SC_CUSTOMSTATUS:&lt;br /&gt;
			val2 = val1 * 30; // HIT reduced by 30 per val1.&lt;br /&gt;
			break;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this block of code, we set the 'val2' property of SC_CUSTOMSTATUS to ''val1 * 30''. Therefore, if val1 is set to 1, val2 is 30, is val1 is set to 2, val2 is 60. Usually, skills pass '''skill_lv''' (the level of the skill used) into val1, which means you can adjust the settings for val2, val3 and val4 based on the skill level used.&lt;br /&gt;
&lt;br /&gt;
=== Using the status effect ===&lt;br /&gt;
&lt;br /&gt;
Jump to the function ''status_calc_hit'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	if(sc-&amp;gt;data[SC_MERC_HIT])&lt;br /&gt;
		hit += sc-&amp;gt;data[SC_MERC_HIT]-&amp;gt;val2;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see, SC_MERC_HIT directly influences the HIT rate as calculated in ''status_calc_hit''. We can add a custom code which will also modify HIT, such as below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	if(sc-&amp;gt;data[SC_CUSTOMSTATUS])&lt;br /&gt;
		hit -= sc-&amp;gt;data[SC_CUSTOMSTATUS]-&amp;gt;val2;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means that HIT will be decreased by whatever value is in val2 (as calculated in ''status_change_start'').&lt;br /&gt;
&lt;br /&gt;
== Open {{git|db/const.txt}} ==&lt;br /&gt;
&lt;br /&gt;
=== Implementing ===&lt;br /&gt;
&lt;br /&gt;
Find&lt;br /&gt;
&amp;lt;pre&amp;gt;SC_INVINCIBLEOFF&amp;lt;tab&amp;gt;296&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add below&lt;br /&gt;
&amp;lt;pre&amp;gt;SC_CUSTOMSTATUS&amp;lt;tab&amp;gt;297&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And there you go. The status effect ''SC_CUSTOMSTATUS'' is now ready for use.&lt;br /&gt;
&lt;br /&gt;
=== Using the status ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sc_start SC_CUSTOMSTATUS, 60000, 2;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will start SC_CUSTOMSTATUS, it will last for 60 seconds and it will remove SC_BLIND if it is active.&lt;br /&gt;
The '2' is the ''val1'' entry, which means that ''val2 = 2 * 30;'', which will cause HIT to be decreased by 60 for 60 seconds.&lt;br /&gt;
&lt;br /&gt;
[[Category:Source Snippets]]&lt;br /&gt;
[[Category:Customization]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Adding_new_skills</id>
		<title>Adding new skills</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Adding_new_skills"/>
				<updated>2013-12-25T11:31:26Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
A large area where players have difficulty is adding new skills to the source and client. To implement new skills, it's required that you use an XRay client (if you don't want to use XRay, you will have to replace existing, un-used skills and edit their previous descriptions).&lt;br /&gt;
&lt;br /&gt;
Below will be documentation on how to implement these new skills&lt;br /&gt;
&lt;br /&gt;
== The skill ==&lt;br /&gt;
&lt;br /&gt;
The skill I will be working on is a simple one.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Earth Bolt&lt;br /&gt;
Max Level: 10&lt;br /&gt;
Type: Active&lt;br /&gt;
SP Cost: 20 + 5*SkillLV&lt;br /&gt;
Target: 1 Enemy&lt;br /&gt;
Cast Time: 2 sec&lt;br /&gt;
Cool Down: 1 sec&lt;br /&gt;
Duration: Instant&lt;br /&gt;
Deals SkillLV bolts of Earth magic damage to one enemy, at 150% MATK per hit.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basically, this skill should target 1 enemy, and deal 10 hits of 150% MATK, Earth elemental property and should be magic damage based.&lt;br /&gt;
&lt;br /&gt;
== Open /src/map/skill.h ==&lt;br /&gt;
&lt;br /&gt;
Scroll down until you find&lt;br /&gt;
&amp;lt;pre&amp;gt;	EL_STONE_HAMMER,&lt;br /&gt;
	EL_ROCK_CRUSHER,&lt;br /&gt;
	EL_ROCK_CRUSHER_ATK,&lt;br /&gt;
	EL_STONE_RAIN,&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After here is where we add any additional skills. It's better to give the skills a custom ID to begin with. So, let's add our &amp;quot;Earth Bolt&amp;quot; skill.&lt;br /&gt;
&lt;br /&gt;
After those, add&lt;br /&gt;
&amp;lt;pre&amp;gt;	MG_EARTHBOLT = 8443,&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MG_ definitively means &amp;quot;Mage&amp;quot;, you'll work out the acronyms as you scroll through the skills.&lt;br /&gt;
We have defined the basis of the skill. As you can see, the skill id is set to '8443' since Earth Elemental's Stone Rain is set to 8442 (and is the last player accessible skill).&lt;br /&gt;
&lt;br /&gt;
== Open /src/map/skill.c ==&lt;br /&gt;
&lt;br /&gt;
This file is where we define the actual skill implementations. For single-target skills, all processing of that skill will go in ''skill_castend_damage_id'' (for damaging skills) or ''skill_castend_nodamage_id'' (for non-damage skills).&lt;br /&gt;
&lt;br /&gt;
=== Magic based skills ===&lt;br /&gt;
&lt;br /&gt;
Because Earth Bolt is '''damage''' based, find the ''skill_castend_damage_id'' function and find:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	case AB_RENOVATIO:&lt;br /&gt;
	case AB_HIGHNESSHEAL:&lt;br /&gt;
	case AB_DUPLELIGHT_MAGIC:&lt;br /&gt;
	case WM_METALICSOUND:&lt;br /&gt;
	case MH_ERASER_CUTTER:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The reason we will be placing the ''case'' for Earth Bolt here is because:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;		skill-&amp;gt;attack(BF_MAGIC,src,src,bl,skill_id,skill_lv,tick,flag);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The BF_MAGIC quality means that the skill is magic based, and should be calculated under the magic battle calculations.&lt;br /&gt;
So, after &amp;lt;code&amp;gt;case NJ_HUUJIN&amp;lt;/code&amp;gt; add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	case MG_EARTHBOLT:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Weapon based skills ===&lt;br /&gt;
&lt;br /&gt;
In the event of wanting to add a skill that's based on Weapon, rather than Magic, find:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	case WM_GREAT_ECHO:&lt;br /&gt;
	case GN_SLINGITEM_RANGEMELEEATK:&lt;br /&gt;
	case KO_JYUMONJIKIRI:&lt;br /&gt;
	case KO_SETSUDAN:&lt;br /&gt;
	case KO_KAIHOU:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And add the case after those.&lt;br /&gt;
If we wanted Earth Bolt to be weapon based, it would look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	case WM_GREAT_ECHO:&lt;br /&gt;
	case GN_SLINGITEM_RANGEMELEEATK:&lt;br /&gt;
	case KO_JYUMONJIKIRI:&lt;br /&gt;
	case KO_SETSUDAN:&lt;br /&gt;
	case KO_KAIHOU:&lt;br /&gt;
	case MG_EARTHBOLT:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, we will stick to the Magic function instead.&lt;br /&gt;
&lt;br /&gt;
== Open /src/map/battle.c ==&lt;br /&gt;
&lt;br /&gt;
In this function, all main damage calculations are performed. And in seperate functions, the % modifiers for the skills are stored. Therefore, for our 150% damage, we add the extra 50% (since 100% is the default) in the appropriate function.&lt;br /&gt;
&lt;br /&gt;
=== Weapon based attacks ===&lt;br /&gt;
&lt;br /&gt;
For '''Weapon''' based attacks, the modifiers are found in ''battle_calc_weapon_attack''.&lt;br /&gt;
Simply find:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	case NPC_VAMPIRE_GIFT:&lt;br /&gt;
		skillratio += ((skill_lv-1)%5+1)*100;&lt;br /&gt;
		break;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And add your damage modifier there.&lt;br /&gt;
For example, if Earth Bolt was Weapon based, we would add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	case MG_EARTHBOLT:&lt;br /&gt;
		skillratio += 50;&lt;br /&gt;
		break;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ''+= 50'' simply means &amp;quot;Add 50% onto the 100%&amp;quot; for 150% ATK damage.&lt;br /&gt;
&lt;br /&gt;
=== Magic based attacks ===&lt;br /&gt;
&lt;br /&gt;
For '''Magic''' based attacks, the modifiers are found in ''battle_calc_magic_attack''.&lt;br /&gt;
Simply find:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	case NPC_EARTHQUAKE:&lt;br /&gt;
		skillratio += 100 +100*skill_lv +100*(skill_lv/2);&lt;br /&gt;
		break;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And add the damage modifier below. Since Earth Bolt is magic based, we add it here.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	case MG_EARTHBOLT:&lt;br /&gt;
		skillratio += 50;&lt;br /&gt;
		break;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This now means that Earth Bolt will deal Magic damage at 150% MATK.&lt;br /&gt;
&lt;br /&gt;
== Skill database support ==&lt;br /&gt;
&lt;br /&gt;
Technically speaking, the basis of the skill is now in place. Of course, if you want to implement more complex skills, there's a lot more to it. A seperate section will be created in the future for this. But for now, we need to implement the skill database entries.&lt;br /&gt;
The files below can be find within db/(pre/re)/.&lt;br /&gt;
Only one from both (pre/re) need to be updated, it's one you use in your server.&lt;br /&gt;
&lt;br /&gt;
=== skill_db.txt ===&lt;br /&gt;
&lt;br /&gt;
For our Earth Bolt, we can now enter this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;8443,5,8,1,2,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0,0,magic,0,MG_EARTHBOLT,Earth Bolt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This defines that:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Earth Bolt has a range of 5 cells, hits multiple times, is Earth element and targets 1 enemy. It can be interrupted, and is of magic type damage. The amount of hits increases by 1 every level, with a maximum level of 10.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== skill_cast_db.txt ===&lt;br /&gt;
&lt;br /&gt;
For our Earth Bolt, we can now enter this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;8443,2000,1000,0,0,0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This defines that:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Earth Bolt has a 2 second cast time, and a 1 second delay time. There is no after-cast walk-delay&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== skill_require_db.txt ===&lt;br /&gt;
&lt;br /&gt;
For our Earth Bolt, we can now enter this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;8443,0,0,25:30:35:40:45:50:55:60:65:70,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This defines that:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Earth Bolt requires 25 SP at level 1, 30 SP at level 2 .. 70 SP at level 10. Can be cast with any weapon, doesn't require a state and doesn't require any items to be consumed.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== skill_tree.txt ===&lt;br /&gt;
&lt;br /&gt;
This part of the database isn't necessary if it can't be learned by a class. However, if you want a class to learn a skill, you have to make an entry in skill_tree.txt. An example below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MG_EARTHBOLT: {&lt;br /&gt;
			MaxLevel: 10&lt;br /&gt;
			MG_FIREBOLT: 5&lt;br /&gt;
			MG_LIGHTNINGBOLT: 5&lt;br /&gt;
		}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This defines that:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Earth Bolt can be learned by Mage, has a maximum level of 10 (for this class), and requires skill MG_FIREBOLT at level 5, and skill MG_LIGHTNINGBOLT at level 5.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Technically, this is usually all the areas that you'd usually cover with skill database files. There are more, but that's for you to explore.&lt;br /&gt;
&lt;br /&gt;
== XRay support ==&lt;br /&gt;
&lt;br /&gt;
To support the skill in the actual client, assuming you're using XRay (required to add new IDs for skills), you can do the following:&lt;br /&gt;
&lt;br /&gt;
=== ability_tab.txt ===&lt;br /&gt;
&lt;br /&gt;
To add in the custom skill, find:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;NJ_ISSEN&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And below it, add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MG_EARTHBOLT&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== leveluseskillspamount.txt ===&lt;br /&gt;
&lt;br /&gt;
To make the skill level-selectable, simply add an entry in leveluseskillspamount.txt in the data folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;8443#&lt;br /&gt;
25#&lt;br /&gt;
30#&lt;br /&gt;
35#&lt;br /&gt;
40#&lt;br /&gt;
45#&lt;br /&gt;
50#&lt;br /&gt;
55#&lt;br /&gt;
60#&lt;br /&gt;
65#&lt;br /&gt;
70#&lt;br /&gt;
@&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will allow the skill to be level selectable.&lt;br /&gt;
&lt;br /&gt;
== Renewal/Non-Xray Support ==&lt;br /&gt;
The following implementations are according to Revision 228 from Lua Project(2012-05-23)+.&lt;br /&gt;
To support Renewal and post 10/13/2009 Clients (or the last Xray) we'd need to make use of .[[lua]] and .[[lub]] files.&lt;br /&gt;
&lt;br /&gt;
The implementation is different between then many client versions, but there's generally 2 implementations:&lt;br /&gt;
=== no skillinfoz folder ===&lt;br /&gt;
&lt;br /&gt;
in data/lua files/skillinfo/skilltreeview.lua find:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&amp;quot;MG_FIREWALL&amp;quot;, 18; Pos = 19, MaxLv = 10, NeedSkillList = {6, 12}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
change to:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&amp;quot;MG_FIREWALL&amp;quot;, 18; Pos = 19, MaxLv = 10, NeedSkillList = {6, 12}},&lt;br /&gt;
{&amp;quot;MG_EARTHBOLT&amp;quot;,8443; Pos = 20, MaxLv = 10, NeedSkillList = {19,20}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== has skillinfoz folder ===&lt;br /&gt;
skillid.lua find:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ECLAGE_RECALL = 3035,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After Add:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MG_EARTHBOLT = 8443,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in data/lua files/skillinfo/skilldescript.lua find:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	[SKID.MG_THUNDERSTORM] = {&lt;br /&gt;
&lt;br /&gt;
		&amp;quot;Thunder Storm&amp;quot;,&lt;br /&gt;
		&amp;quot;Max Level:^777777 10 ^000000&amp;quot;,&lt;br /&gt;
		&amp;quot;Type:^777777 Offensive ^000000&amp;quot;,&lt;br /&gt;
		&amp;quot;SP Cost:^777777 24 + 5*SkillLV ^000000&amp;quot;,&lt;br /&gt;
		&amp;quot;Target:^777777 cell ^000000&amp;quot;,&lt;br /&gt;
		&amp;quot;Range:^777777 9 cells ^000000&amp;quot;,&lt;br /&gt;
		&amp;quot;Cast Time:^777777 1*SkillLV sec ^000000&amp;quot;,&lt;br /&gt;
		&amp;quot;Cool Down:^777777 2 sec ^000000&amp;quot;,&lt;br /&gt;
		&amp;quot;Duration:^777777 0.2*SkillLV sec ^000000&amp;quot;,&lt;br /&gt;
		&amp;quot;Effect:^777777 Hits every Enemy in a 5x5 area around the targeted cell with 1 Wind Element Bolt per level at a rate of 1 bolt every 0.2 seconds. Each bolt does 0.8*MATK Wind element damage. ^000000&amp;quot;,&lt;br /&gt;
		&amp;quot;[LV 1]^777777 1 Bolt ^000000&amp;quot;,&lt;br /&gt;
		&amp;quot;[LV 2]^777777 2 Bolts ^000000&amp;quot;,&lt;br /&gt;
		&amp;quot;[LV 3]^777777 3 Bolts ^000000&amp;quot;,&lt;br /&gt;
		&amp;quot;[LV 4]^777777 4 Bolts ^000000&amp;quot;,&lt;br /&gt;
		&amp;quot;[LV 5]^777777 5 Bolts ^000000&amp;quot;,&lt;br /&gt;
		&amp;quot;[LV 6]^777777 6 Bolts ^000000&amp;quot;,&lt;br /&gt;
		&amp;quot;[LV 7]^777777 7 Bolts ^000000&amp;quot;,&lt;br /&gt;
		&amp;quot;[LV 8]^777777 8 Bolts ^000000&amp;quot;,&lt;br /&gt;
		&amp;quot;[LV 9]^777777 9 Bolts ^000000&amp;quot;,&lt;br /&gt;
		&amp;quot;[LV 10]^777777 10 Bolts ^000000&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After Add:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	[SKID.MG_EARTHBOLT] = {&lt;br /&gt;
		&amp;quot;Earth Bolt&amp;quot;,&lt;br /&gt;
		&amp;quot;Max Level:^777777 10 ^000000&amp;quot;&lt;br /&gt;
		&amp;quot;Type:^77777 Active ^000000&amp;quot;&lt;br /&gt;
		&amp;quot;SP Cost:^777777 20 + 5*SkillLV ^000000&amp;quot;&lt;br /&gt;
		&amp;quot;Target:^777777 1 Enemy ^000000&amp;quot;&lt;br /&gt;
		&amp;quot;Cast Time:^777777 2 sec ^000000&amp;quot;&lt;br /&gt;
		&amp;quot;Cool Down:^777777 1 sec ^000000&amp;quot;&lt;br /&gt;
		&amp;quot;Duration:^777777 Instant ^000000&amp;quot;&lt;br /&gt;
		&amp;quot;Effect: ^777777 Deals SkillLV bolts of Earth magic damage to one enemy, at 150% MATK per hit.^000000&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
skilltreeview.lua change:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[JOBID.JT_MAGICIAN] = {&lt;br /&gt;
		[1] = SKID.MG_STONECURSE,&lt;br /&gt;
		[2] = SKID.MG_COLDBOLT,&lt;br /&gt;
		[3] = SKID.MG_LIGHTNINGBOLT,&lt;br /&gt;
		[4] = SKID.MG_NAPALMBEAT,&lt;br /&gt;
		[5] = SKID.MG_FIREBOLT,&lt;br /&gt;
		[6] = SKID.MG_SIGHT,&lt;br /&gt;
		[8] = SKID.MG_SRECOVERY,&lt;br /&gt;
		[9] = SKID.MG_FROSTDIVER,&lt;br /&gt;
		[10] = SKID.MG_THUNDERSTORM,&lt;br /&gt;
		[11] = SKID.MG_SOULSTRIKE,&lt;br /&gt;
		[12] = SKID.MG_FIREBALL,&lt;br /&gt;
		[13] = SKID.MG_ENERGYCOAT,&lt;br /&gt;
		[18] = SKID.MG_SAFETYWALL,&lt;br /&gt;
		[19] = SKID.MG_FIREWALL&lt;br /&gt;
	},	&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	[JOBID.JT_MAGICIAN] = {&lt;br /&gt;
		[1] = SKID.MG_STONECURSE,&lt;br /&gt;
		[2] = SKID.MG_COLDBOLT,&lt;br /&gt;
		[3] = SKID.MG_LIGHTNINGBOLT,&lt;br /&gt;
		[4] = SKID.MG_NAPALMBEAT,&lt;br /&gt;
		[5] = SKID.MG_FIREBOLT,&lt;br /&gt;
		[6] = SKID.MG_SIGHT,&lt;br /&gt;
		[8] = SKID.MG_SRECOVERY,&lt;br /&gt;
		[9] = SKID.MG_FROSTDIVER,&lt;br /&gt;
		[10] = SKID.MG_THUNDERSTORM,&lt;br /&gt;
		[11] = SKID.MG_SOULSTRIKE,&lt;br /&gt;
		[12] = SKID.MG_FIREBALL,&lt;br /&gt;
		[13] = SKID.MG_ENERGYCOAT,&lt;br /&gt;
		[18] = SKID.MG_SAFETYWALL,&lt;br /&gt;
		[19] = SKID.MG_FIREWALL,&lt;br /&gt;
		[20] = SKID.MG_EARTHBOLT&lt;br /&gt;
	},&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
skillinfolist.lua&lt;br /&gt;
Change:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	[SKID.ECL_SEQUOIADUST] = {&lt;br /&gt;
		&amp;quot;ECL_SEQUOIADUST&amp;quot;;&lt;br /&gt;
		SkillName = &amp;quot;Sequoia Dust&amp;quot;,&lt;br /&gt;
		MaxLv = 1,&lt;br /&gt;
		SpAmount = { 0 },&lt;br /&gt;
		bSeperateLv = false,&lt;br /&gt;
		AttackRange = { 7 },&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	[SKID.ECL_SEQUOIADUST] = {&lt;br /&gt;
		&amp;quot;ECL_SEQUOIADUST&amp;quot;;&lt;br /&gt;
		SkillName = &amp;quot;Sequoia Dust&amp;quot;,&lt;br /&gt;
		MaxLv = 1,&lt;br /&gt;
		SpAmount = { 0 },&lt;br /&gt;
		bSeperateLv = false,&lt;br /&gt;
		AttackRange = { 7 },&lt;br /&gt;
	},&lt;br /&gt;
	[SKID.MG_EARTHBOLT] = {&lt;br /&gt;
		&amp;quot;MG_EARTHBOLT&amp;quot;;&lt;br /&gt;
		SkillName = &amp;quot;Earth Bolt&amp;quot;,&lt;br /&gt;
		MaxLv = 10,&lt;br /&gt;
		SpAmount = { 25, 30, 35, 40, 45, 50, 55, 60, 65, 70 },&lt;br /&gt;
		_NeedSkillList = {&lt;br /&gt;
			{ SKID.MG_FIREBOLT, 5},&lt;br /&gt;
			{ SKID.MG_LIGHTNINGBOLT, 5}&lt;br /&gt;
		}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Finishing up ===&lt;br /&gt;
&lt;br /&gt;
You can add the rest of the information in skillnametable.txt, skilldesctable2.txt and you'll need to add the appropriate Sprite and BMP file for the skill. Use the name MG_EARTHBOLT as the name of the file, and for the entries in the two text files.&lt;br /&gt;
&lt;br /&gt;
[[Category:Source Snippets]]&lt;br /&gt;
[[Category:Customization]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Adding_New_Mapflag</id>
		<title>Adding New Mapflag</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Adding_New_Mapflag"/>
				<updated>2013-12-25T10:50:29Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
When scripting, or creating custom automated events, you may wish to add your own custom mapflags. In order to do so, you'll need to complete some source edits. This article will explain how.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
This article was originally created by [http://www.eathena.ws/board/index.php?showuser=273955 TecnoCronus] on the eAthena forums.&lt;br /&gt;
&lt;br /&gt;
== Adding your mapflag ==&lt;br /&gt;
&lt;br /&gt;
=== Open /src/map/map.h ===&lt;br /&gt;
----&lt;br /&gt;
'''Find:'''&lt;br /&gt;
 unsigned src4instance : 1; // To flag this map when it's used as a src map for instances&lt;br /&gt;
&lt;br /&gt;
'''Add below:'''&lt;br /&gt;
 unsigned mymapflag : 1;&lt;br /&gt;
&lt;br /&gt;
=== Open /src/map/map.c ===&lt;br /&gt;
----&lt;br /&gt;
'''Find:'''&lt;br /&gt;
    } else if (!strcmpi(flag,&amp;quot;nocashshop&amp;quot;)) {&lt;br /&gt;
        if( state &amp;amp;&amp;amp; map-&amp;gt;list[m].flag.nocashshop )&lt;br /&gt;
            ;/* nothing to do */&lt;br /&gt;
        else {&lt;br /&gt;
            if( state )&lt;br /&gt;
                map_zone_mf_cache_add(m,&amp;quot;nocashshop\toff&amp;quot;);&lt;br /&gt;
            else if( map-&amp;gt;list[m].flag.nocashshop )&lt;br /&gt;
                map_zone_mf_cache_add(m,&amp;quot;nocashshop&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
'''Add below:'''&lt;br /&gt;
  else if( !strcmpi(flag,&amp;quot;mymapflag&amp;quot;)) {&lt;br /&gt;
        if( state &amp;amp;&amp;amp; map-&amp;gt;list[m].flag.mymapflag )&lt;br /&gt;
            ; /* nothing to do */&lt;br /&gt;
        else {&lt;br /&gt;
            if( state )&lt;br /&gt;
                map_zone_mf_cache_add(m,&amp;quot;mymapflag\toff&amp;quot;);&lt;br /&gt;
            else if( map-&amp;gt;list[m].flag.mymapflag )&lt;br /&gt;
                map_zone_mf_cache_add(m,&amp;quot;mymapflag&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
=== Open /src/map/script.h ===&lt;br /&gt;
----&lt;br /&gt;
'''Find:'''&lt;br /&gt;
 MF_NOCASHSHOP&lt;br /&gt;
&lt;br /&gt;
'''Replace with:'''&lt;br /&gt;
 MF_NOCASHSHOP,&lt;br /&gt;
 MF_MYMAPFLAG&lt;br /&gt;
&lt;br /&gt;
=== Open /src/map/script.c ===&lt;br /&gt;
----&lt;br /&gt;
'''Find:'''&lt;br /&gt;
 case MF_GUILDLOCK:        script_pushint(st,map-&amp;gt;list[m].flag.guildlock); break;&lt;br /&gt;
&lt;br /&gt;
'''Below add:'''&lt;br /&gt;
 case MF_MYMAPFLAG:        script_pushint(st,map-&amp;gt;list[m].flag.mymapflag); break;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Find:'''&lt;br /&gt;
 case MF_GUILDLOCK:     map-&amp;gt;list[m].flag.guildlock=1; break;&lt;br /&gt;
&lt;br /&gt;
'''Below add:'''&lt;br /&gt;
 case MF_MYMAPFLAG:     map-&amp;gt;list[m].flag.mymapflag=1; break;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Find:'''&lt;br /&gt;
 case MF_GUILDLOCK:     map-&amp;gt;list[m].flag.guildlock=0; break;&lt;br /&gt;
&lt;br /&gt;
'''Below add:'''&lt;br /&gt;
 case MF_MYMAPFLAG:     map-&amp;gt;list[m].flag.mymapflag=0; break;&lt;br /&gt;
&lt;br /&gt;
=== Open /src/map/npc.c ===&lt;br /&gt;
----&lt;br /&gt;
'''Find:'''&lt;br /&gt;
 else if (!strcmpi(w3,&amp;quot;guildlock&amp;quot;))&lt;br /&gt;
 	map-&amp;gt;list[m].flag.guildlock=state;&lt;br /&gt;
&lt;br /&gt;
'''Below add:'''&lt;br /&gt;
 else if (!strcmpi(w3,&amp;quot;mymapflag&amp;quot;))&lt;br /&gt;
 	map-&amp;gt;list[m].flag.mymapflag=state;&lt;br /&gt;
&lt;br /&gt;
=== Open /db/const.txt ===&lt;br /&gt;
----&lt;br /&gt;
'''Find:'''&lt;br /&gt;
 mf_guildlock&amp;lt;tab&amp;gt;45&lt;br /&gt;
&lt;br /&gt;
'''Below add:'''&lt;br /&gt;
 mf_mymapflag&amp;lt;tab&amp;gt;46&lt;br /&gt;
&lt;br /&gt;
== Listing your mapflag in atcommands ==&lt;br /&gt;
&lt;br /&gt;
=== Open /src/map/atcommand.c ===&lt;br /&gt;
----&lt;br /&gt;
'''Find:'''&lt;br /&gt;
    if (map-&amp;gt;list[m_id].flag.nomemo)&lt;br /&gt;
        strcat(atcmd_output, msg_txt(1064)); // NoMemo |&lt;br /&gt;
&lt;br /&gt;
'''Below add:'''&lt;br /&gt;
    if (map-&amp;gt;list[m_id].flag.mymapflag)&lt;br /&gt;
        strcat(atcmd_output, &amp;quot;mymapflag |&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
'''Find:'''&lt;br /&gt;
 CHECKFLAG(nocashshop);&lt;br /&gt;
&lt;br /&gt;
'''Below add:'''&lt;br /&gt;
 CHECKFLAG(mymapflag);&lt;br /&gt;
&lt;br /&gt;
'''Find:'''&lt;br /&gt;
 SETFLAG(nocashshop);&lt;br /&gt;
&lt;br /&gt;
'''Below add:'''&lt;br /&gt;
 SETFLAG(mymapflag);&lt;br /&gt;
&lt;br /&gt;
'''Find:'''&lt;br /&gt;
 clif-&amp;gt;message(sd-&amp;gt;fd,&amp;quot;guildlock, src4instance, notomb, nocashshop&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
'''Replace it with:'''&lt;br /&gt;
 clif-&amp;gt;message(sd-&amp;gt;fd,&amp;quot;guildlock, src4instance, notomb, nocashshop, mymapflag&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Recompile and you can now set &amp;quot;mymapflag&amp;quot; to any value. Remember, you can rename the mapflag to whatever, and later use the flag option anywhere else in your source code.&lt;br /&gt;
&lt;br /&gt;
[[Category:Source Snippets]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Custom_weapons</id>
		<title>Custom weapons</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Custom_weapons"/>
				<updated>2013-12-23T07:19:09Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: /* The ID */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The ID ==&lt;br /&gt;
Why the ID first?  The ID controls what type of weapon sprite is displayed.  Going outside the ID range will cause you to &amp;quot;punch&amp;quot; when attacking.&lt;br /&gt;
&lt;br /&gt;
Open your {{git|db/re/item_db.conf}} or {{git|db/pre-re/item_db.conf}} and find the section with the weapon type you need.  The allowable range is usually obvious.&lt;br /&gt;
&lt;br /&gt;
{| {| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Item ID&lt;br /&gt;
!Item Type&lt;br /&gt;
|-&lt;br /&gt;
|1100-1149, 13400-13499||One-Handed Swords&lt;br /&gt;
|-&lt;br /&gt;
|1150-1199, 21000-21999||Two-Handed Swords&lt;br /&gt;
|-&lt;br /&gt;
|1200-1249, 13000-13099||Knives, Daggers, Etc.&lt;br /&gt;
|-&lt;br /&gt;
|1250-1299||Katars&lt;br /&gt;
|-&lt;br /&gt;
|1300-1349||One-Handed Axes&lt;br /&gt;
|-&lt;br /&gt;
|1350-1399||Two-Handed Axes&lt;br /&gt;
|-&lt;br /&gt;
|1400-1449||One-Handed Spears&lt;br /&gt;
|-&lt;br /&gt;
|1450-1471, 1474-1499||Two-Handed Spears&lt;br /&gt;
|-&lt;br /&gt;
|1500-1549, 16000-16999||Maces&lt;br /&gt;
|-&lt;br /&gt;
|1550-1599||Books&lt;br /&gt;
|-&lt;br /&gt;
|1600-1699||One Handed Rods/Staves&lt;br /&gt;
|-&lt;br /&gt;
|1700-1749, 18100-18499||Bows&lt;br /&gt;
|-&lt;br /&gt;
|1750-1799||Arrows&lt;br /&gt;
|-&lt;br /&gt;
|1800-1849||Knuckles&lt;br /&gt;
|-&lt;br /&gt;
|1900-1949||Guitars/Instruments&lt;br /&gt;
|-&lt;br /&gt;
|1950-1999||Whips&lt;br /&gt;
|-&lt;br /&gt;
|1472,1473,2000-2099||Two Handed Rods/Staves&lt;br /&gt;
|-&lt;br /&gt;
|13100-13149||Handgun&lt;br /&gt;
|-&lt;br /&gt;
|13150-13199||Other Guns&lt;br /&gt;
|-&lt;br /&gt;
|13300-13399||Ninja Weapons&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
To make a custom bow, searching for &amp;quot;Bows&amp;quot; in item_db shows that bow IDs start at 1701 and end at 1749. Since there are no remaining IDs, commenting out an unused bow would work.&lt;br /&gt;
&lt;br /&gt;
Otherwise, skip to the next set of bows, which start at 18101.  Select an open ID in that range.&lt;br /&gt;
&lt;br /&gt;
== The Sprite ==&lt;br /&gt;
The client requires a sprite for every job the weapon can be used by.  Some programs can automatically organize the files:&lt;br /&gt;
* [http://rathena.org/board/files/file/2494-ra-sprite-name-gen/ clydelion's Sprite Name Generator]&amp;lt;br&amp;gt;&lt;br /&gt;
* [http://rathena.org/board/files/file/2386-ea-sprite-name-generator/ Myzter's Sprite Name Generator]&lt;br /&gt;
&lt;br /&gt;
Don't forget to give the weapon an icon in '''/sprite/¾ÆÀÌÅÛ/''', as well as an inventory icon and collection image in '''/texture/À¯ÀúÀÎÅÍÆäÀÌ½º/item/''' and '''/texture/À¯ÀúÀÎÅÍÆäÀÌ½º/collection/'''.&lt;br /&gt;
&lt;br /&gt;
== Other Client Data ==&lt;br /&gt;
Lastly, the client data tables need to be filled out:&lt;br /&gt;
&lt;br /&gt;
*'''idnum2itemdesctable.txt''': Identified item description.&lt;br /&gt;
*'''idnum2itemdisplaynametable.txt''': Identified item display name.&lt;br /&gt;
*'''idnum2itemresnametable.txt''': Identified sprite name.&lt;br /&gt;
*'''itemslotcounttable.txt''': Number of weapon slots, if necessary (skip if 0).&lt;br /&gt;
*'''num2itemdesctable.txt''': Unidentified item description, if necessary.&lt;br /&gt;
*'''num2itemdisplaynametable.txt''': Unidentified item display name, if necessary.&lt;br /&gt;
*'''num2itemresnametable.txt''': Unidentified sprite name, if necessary.&lt;br /&gt;
&lt;br /&gt;
''And... you are done!''&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
'''Q: Weapon is an Unknown Item.'''&lt;br /&gt;
&lt;br /&gt;
A: An error in resnametable. The client is not reading any value, so it becomes unknown.&lt;br /&gt;
&lt;br /&gt;
'''Q: The weapon sprite shows fine when standing, turns to punches when attacking.'''&lt;br /&gt;
&lt;br /&gt;
A: The ID for the weapon isn't in the allowed range.  Make sure the value is correct.&lt;br /&gt;
&lt;br /&gt;
'''Q: The weapon sprite doesn't show at all.'''&lt;br /&gt;
&lt;br /&gt;
A: Re-check file/folder names and placement.&lt;br /&gt;
&lt;br /&gt;
[[Category:Customization]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Changebase</id>
		<title>Changebase</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Changebase"/>
				<updated>2013-12-14T03:32:30Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: Created page with &amp;quot;== Syntax == * changebase &amp;lt;job ID number&amp;gt;; == Description == This command will change the appearance of the invoking character to that  of a specified job class. Nothing b...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Syntax ==&lt;br /&gt;
* [[changebase]] &amp;lt;job ID number&amp;gt;;&lt;br /&gt;
== Description ==&lt;br /&gt;
This command will change the appearance of the invoking character to that &lt;br /&gt;
of a specified job class. Nothing but appearance will change.&lt;br /&gt;
&lt;br /&gt;
== Examples== &lt;br /&gt;
&lt;br /&gt;
 2338,Wedding_Dress,Wedding Dress,5,43000,,500,,0,,0,119529470,7,0,16,,0,1,0,{ bonus bMdef,15; changebase 22; }&lt;br /&gt;
 &lt;br /&gt;
 changebase Job_Novice; // Changes player to Novice sprite.&lt;br /&gt;
 &lt;br /&gt;
 changebase Class; // Changes player back to default sprite.&lt;br /&gt;
&lt;br /&gt;
[[Category:Script_Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Custom_Items</id>
		<title>Custom Items</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Custom_Items"/>
				<updated>2013-12-13T17:59:51Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: /* Structure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Structure=&lt;br /&gt;
First, let's take a look at the item_db.conf in the db folder, and its structure:&lt;br /&gt;
 item_db: (&lt;br /&gt;
 {&lt;br /&gt;
 	// =================== Mandatory fields ===============================&lt;br /&gt;
 	Id: ID                        (int)&lt;br /&gt;
 	AegisName: &amp;quot;Aegis_Name&amp;quot;       (string, optional if Inherit: true)&lt;br /&gt;
 	Name: &amp;quot;Item Name&amp;quot;             (string, optional if Inherit: true)&lt;br /&gt;
 	// =================== Optional fields ================================&lt;br /&gt;
 	Type: Item Type               (int, defaults to 3 = etc item)&lt;br /&gt;
 	Buy: Buy Price                (int, defaults to Sell * 2)&lt;br /&gt;
 	Sell: Sell Price              (int, defaults to Buy / 2)&lt;br /&gt;
 	Weight: Item Weight           (int, defaults to 0)&lt;br /&gt;
 	Atk: Attack                   (int, defaults to 0)&lt;br /&gt;
 	Matk: Magical Attack          (int, defaults to 0, ignored in pre-re)&lt;br /&gt;
 	Def: Defense                  (int, defaults to 0)&lt;br /&gt;
 	Range: Attack Range           (int, defaults to 0)&lt;br /&gt;
 	Slots: Slots                  (int, defaults to 0)&lt;br /&gt;
 	Job: Job mask                 (int, defaults to all jobs = 0xFFFFFFFF)&lt;br /&gt;
 	Upper: Upper mask             (int, defaults to any = 0x3f)&lt;br /&gt;
 	Gender: Gender                (int, defaults to both = 2)&lt;br /&gt;
 	Loc: Equip location           (int, required value for equipment)&lt;br /&gt;
 	WeaponLv: Weapon Level        (int, defaults to 0)&lt;br /&gt;
 	EquipLv: Equip required level (int, defaults to 0)&lt;br /&gt;
 	EquipLv: [min, max]           (alternative syntax with min / max level)&lt;br /&gt;
 	Refine: Refineable            (boolean, defaults to true)&lt;br /&gt;
 	View: View ID                 (int, defaults to 0)&lt;br /&gt;
 	BindOnEquip: true/false       (boolean, defaults to false)&lt;br /&gt;
 	Script: &amp;lt;&amp;quot;&lt;br /&gt;
 		Script&lt;br /&gt;
 		(it can be multi-line)&lt;br /&gt;
 	&amp;quot;&amp;gt;&lt;br /&gt;
 	OnEquipScript: &amp;lt;&amp;quot; OnEquip Script (can also be multi-line) &amp;quot;&amp;gt;&lt;br /&gt;
 	OnUnequipScript: &amp;lt;&amp;quot; OnUnequip Script (can also be multi-line) &amp;quot;&amp;gt;&lt;br /&gt;
 	// =================== Optional fields (item_db2 only) ================&lt;br /&gt;
 	Inherit: true/false           (boolean, if true, inherit the values&lt;br /&gt;
 	                              that weren't specified, from item_db.conf,&lt;br /&gt;
 	                              else override it and use default values)&lt;br /&gt;
 },&lt;br /&gt;
 ...&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
* '''ID''': ID of the item.&lt;br /&gt;
* '''AegisName''': Server name to reference the item in scripts and lookups, should use no spaces.&lt;br /&gt;
* '''Name''': Name in English for displaying as output for @ and script commands.&lt;br /&gt;
* '''Type''': Purpose of the item.&lt;br /&gt;
 0 = Usable : healing&lt;br /&gt;
 2 = Usable : other&lt;br /&gt;
 3 = Misc&lt;br /&gt;
 4 = Weapon&lt;br /&gt;
 5 = Armor&lt;br /&gt;
 6 = Card&lt;br /&gt;
 7 = Pet Egg&lt;br /&gt;
 8 = Pet Equipment&lt;br /&gt;
 10 = Arrow/Ammunition&lt;br /&gt;
 11 = Usable : delayed consumption (items with script &amp;quot;pet&amp;quot; or &amp;quot;itemskill&amp;quot;)&lt;br /&gt;
 18 = Another delayed consume that requires user confirmation before using item.&lt;br /&gt;
* '''Buy''': Default [[NPC]] buying price in Zeny. When not specified, becomes double the sell price.&lt;br /&gt;
* '''Sell''': Default [[NPC]] selling price in Zeny. When not specified, becomes half the buy price.&lt;br /&gt;
* '''Weight''': Item's weight. Each 10 is 1 weight. When not specified, becomes 0.&lt;br /&gt;
* '''ATK''': Base weapon attack, in case of a weapon. When not specified, becomes 0.&lt;br /&gt;
** In '''RE''' enabled servers this field have a optional delimiter ''':''' to define this item's weaponMATK bonus, for example, '''30:50''' would mean the item gives 30 atk and 50 weaponMATK&lt;br /&gt;
* '''Matk''': Weapon's magical attack (only used in renewal mode, ignored in pre-renewal). When not specified, becomes 0.&lt;br /&gt;
* '''DEF''': Base defense for armor-type items. When not specified, becomes 0.&lt;br /&gt;
* '''Range''': Maximum range in map cells a weapon allows to be the player apart from it's target. When not specified, becomes 0.&lt;br /&gt;
* '''Slots''': Amount of card slots in weapon/armor-type items. When not specified, becomes 0.&lt;br /&gt;
* '''Job''': Which jobs this item is available for. Values below can be combined to achieve availability for multiple job classes, i. e. &amp;lt;code&amp;gt;0x2|0x4 -&amp;gt; 0x6&amp;lt;/code&amp;gt; (Swordman+Mage)&lt;br /&gt;
 (S.) Novice         (2^00): 0x00000001&lt;br /&gt;
 Swordman            (2^01): 0x00000002&lt;br /&gt;
 Mage                (2^02): 0x00000004&lt;br /&gt;
 Archer              (2^03): 0x00000008&lt;br /&gt;
 Acolyte             (2^04): 0x00000010&lt;br /&gt;
 Merchant            (2^05): 0x00000020&lt;br /&gt;
 Thief               (2^06): 0x00000040&lt;br /&gt;
 Knight              (2^07): 0x00000080&lt;br /&gt;
 Priest              (2^08): 0x00000100&lt;br /&gt;
 Wizard              (2^09): 0x00000200&lt;br /&gt;
 Blacksmith          (2^10): 0x00000400&lt;br /&gt;
 Hunter              (2^11): 0x00000800&lt;br /&gt;
 Assassin            (2^12): 0x00001000&lt;br /&gt;
 ''Unused''              (2^13): 0x00002000&lt;br /&gt;
 Crusader            (2^14): 0x00004000&lt;br /&gt;
 Monk                (2^15): 0x00008000&lt;br /&gt;
 Sage                (2^16): 0x00010000&lt;br /&gt;
 Rogue               (2^17): 0x00020000&lt;br /&gt;
 Alchemist           (2^18): 0x00040000&lt;br /&gt;
 Bard/Dancer         (2^19): 0x00080000&lt;br /&gt;
 ''Unused''              (2^20): 0x00100000&lt;br /&gt;
 Taekwon             (2^21): 0x00200000&lt;br /&gt;
 StarGladiator       (2^22): 0x00400000&lt;br /&gt;
 Soul Linker         (2^23): 0x00800000&lt;br /&gt;
 Gunslinger          (2^24): 0x01000000&lt;br /&gt;
 Ninja               (2^25): 0x02000000&lt;br /&gt;
 Gangsi              (2^26): 0x04000000&lt;br /&gt;
 Death Knight        (2^27): 0x08000000&lt;br /&gt;
 Dark Collector      (2^28): 0x10000000&lt;br /&gt;
 Kagerou/Oboro       (2^29): 0x20000000&lt;br /&gt;
 Rebellion           (2^30): 0x40000000&lt;br /&gt;
 '''Some other commonly used values:'''&lt;br /&gt;
 All Classes               : 0xFFFFFFFF&lt;br /&gt;
 Every Job Except Novice   : 0xFFFFFFFE&lt;br /&gt;
* '''Upper''': Specifies whether the item can be used by normal, baby or reborn classes. Values below can be combined, i. e. &amp;lt;code&amp;gt;1|4 -&amp;gt; 5&amp;lt;/code&amp;gt; (Normal+Baby Classes)&lt;br /&gt;
** Note: Setting &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; enables the item for Transcendant and 3rd classes. Use &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; to enable the item for 3rd classes only.&lt;br /&gt;
 Normal jobs:      0x01 (1)&lt;br /&gt;
 Upper jobs:       0x02 (2)&lt;br /&gt;
 Baby jobs:        0x04 (4)&lt;br /&gt;
 Third jobs:       0x08 (8)&lt;br /&gt;
 Upper Third jobs: 0x10 (16)&lt;br /&gt;
 Baby Third jobs:  0x20 (32)&lt;br /&gt;
 &lt;br /&gt;
 Under pre-re mode third classes are considered upper, making use of&lt;br /&gt;
 the 8 and above masks is therefore not necessary unless in renewal&lt;br /&gt;
 mode. When no value is specified, all classes (mask 0x3f) are able to&lt;br /&gt;
 equip the item.&lt;br /&gt;
* '''Gender''': Gender restriction for the item.&lt;br /&gt;
 0 = Female&lt;br /&gt;
 1 = Male&lt;br /&gt;
 2 = No restriction (both)&lt;br /&gt;
* '''Loc''': Equipment location of armor and arrow-type items. Values below can be combined, i. e. 136 would indicate both accessory slots (typical value for accessories).&lt;br /&gt;
 (2^0)        1 = Lower headgear&lt;br /&gt;
 (2^1)        2 = Right hand&lt;br /&gt;
 (2^2)        4 = Mantle&lt;br /&gt;
 (2^3)        8 = Accessory 1&lt;br /&gt;
 (2^4)       16 = Armor&lt;br /&gt;
 (2^5)       32 = Left hand&lt;br /&gt;
 (2^6)       64 = Shoes&lt;br /&gt;
 (2^7)      128 = Accessory 2&lt;br /&gt;
 (2^8)      256 = Upper headgear&lt;br /&gt;
 (2^9)      512 = Middle headgear&lt;br /&gt;
 (2^10)    1024 = Costume Top Headgear&lt;br /&gt;
 (2^11)    2048 = Costume Mid Headgear&lt;br /&gt;
 (2^12)    4096 = Costume Low Headgear&lt;br /&gt;
 (2^13)    8192 = Costume Garment/Robe&lt;br /&gt;
 (2^15)   32768 = Arrow (arrow-type items only)&lt;br /&gt;
 (2^16)   65536 = Shadow Armor&lt;br /&gt;
 (2^17)  131072 = Shadow Weapon&lt;br /&gt;
 (2^18)  262144 = Shadow Shield&lt;br /&gt;
 (2^18)  524288 = Shadow Shoes&lt;br /&gt;
 (2^20) 1048576 = Shadow Accessory 2&lt;br /&gt;
 (2^21) 2097152 = Shadow Accessory 1&lt;br /&gt;
* '''WeaponLv''': Weapon level of an item (1-4), Becomes 0 when not specified.&lt;br /&gt;
* '''EquipLv''': Base level required to be able to equip. It is possible to specify two values, if an item has a maximum level, by using the following syntax:&lt;br /&gt;
 EquipLv: [minLv, maxLv]&lt;br /&gt;
 &lt;br /&gt;
 	If only one value is specified, maxLv becomes the current server's&lt;br /&gt;
 	MAX_LEVEL. If no values are specified, minLv becomes 0.&lt;br /&gt;
* '''Refineable''': Whether the item is available for refining (1) or not (0). If no value is specified, it defaults to true.&lt;br /&gt;
* '''View''': For normal items, defines a replacement view-sprite for the item &lt;br /&gt;
:(eg: Making apples look like apple juice). The special case are weapons and ammo where this value indicates the weapon-class of the item.&lt;br /&gt;
** Weapon-type items:&lt;br /&gt;
**# Daggers&lt;br /&gt;
**# One-Handed Swords&lt;br /&gt;
**# Two-Handed Swords&lt;br /&gt;
**# One-Handed Spears&lt;br /&gt;
**# Two-Handed Spears&lt;br /&gt;
**# One-Handed Axes&lt;br /&gt;
**# Two-Handed Axes&lt;br /&gt;
**# Maces&lt;br /&gt;
**# ''(not used)''&lt;br /&gt;
**# Wand/Staff&lt;br /&gt;
**# Bows/Crossbows&lt;br /&gt;
**# Knuckle Weapons&lt;br /&gt;
**# Musical Instruments&lt;br /&gt;
**# Whips&lt;br /&gt;
**# Books&lt;br /&gt;
**# Katars&lt;br /&gt;
**# Revolvers&lt;br /&gt;
**# Rifles&lt;br /&gt;
**# Shotguns&lt;br /&gt;
**# Gatling guns&lt;br /&gt;
**# Grenade launchers&lt;br /&gt;
**# Fuuma shuriken&lt;br /&gt;
** Shield-type items:&lt;br /&gt;
**# Guard, Novice Guard&lt;br /&gt;
**# Buckler&lt;br /&gt;
**# Shield, Holy Guard, Evangelist&lt;br /&gt;
**# Mirror Shield&lt;br /&gt;
** Ammunition-type items:&lt;br /&gt;
**# Arrows&lt;br /&gt;
**# Throw-able daggers&lt;br /&gt;
**# Bullets&lt;br /&gt;
**# Shells&lt;br /&gt;
**# Grenades&lt;br /&gt;
**# Shuriken&lt;br /&gt;
**# Kunai&lt;br /&gt;
**# Cannonballs&lt;br /&gt;
**# Throwable Items (Sling Item)&lt;br /&gt;
** Headgear-type items: Please see the View IDs section of this guide.&lt;br /&gt;
* '''BindOnEquip''': Whether the item will automatically bind to the character when it is equipped for the first time. &lt;br /&gt;
:An item that has this field set, will display a confirmation dialog the first time it is equipped, and, if accepted, the item will become character-bound.&lt;br /&gt;
* '''Script''': This is where you put your item bonus. Whether it's an usable item or an equip item, it will take effect according to the item type.&lt;br /&gt;
* '''OnEquip_Script''': Script to execute when the item is equipped. Warning, not all item bonuses will work here as expected.&lt;br /&gt;
* '''OnUnequip_Script''': Script to execute when the item is unequipped. Warning, not all item bonuses will work here as expected.&lt;br /&gt;
* '''Inherit''': This can be used only in item_db2.conf, and if set to true, and the item already exists in item_db.conf, &lt;br /&gt;
:all the missing fields will be inherited from there rather than using their default values.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
In the doc folder look for a text file called &amp;quot;item_bonus&amp;quot;, it shows all the scripts items can have and how they work.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
For more information about this structure read [http://hercules.ws/board/topic/2954-item-db-file-structure-overhaul/ Item DB file structure overhaul]&lt;br /&gt;
&lt;br /&gt;
=Item Placement on Data Folder (Renewal Clients &amp;lt;= 2012-04-10a &amp;amp; Main Clients &amp;lt;= 2012-07-10a) =&lt;br /&gt;
After you make your item, put it in your item_db2.txt, so that you will not run into conflicts when updating the SVN later. Then go to your data folder and modify the following files, one after another.&lt;br /&gt;
&lt;br /&gt;
==idnum2itemdisplaynametable.txt==&lt;br /&gt;
This file holds the item names, as displayed inside the client. Each item added as:&lt;br /&gt;
 ItemID#ItemName#&lt;br /&gt;
ItemID is the number from your ID column inside the item db. If your item name contains spaces, replace those with _ (underscore).&lt;br /&gt;
&lt;br /&gt;
==idnum2itemdesctable.txt==&lt;br /&gt;
This file contains the description of your item, when it is right-clicked. The syntax for an item is:&lt;br /&gt;
 ItemID#&lt;br /&gt;
 Item Description Line 1&lt;br /&gt;
 Item Description Line 2&lt;br /&gt;
 #&lt;br /&gt;
You can use any amount of lines for the description. If your description contains a #, make sure it is followed by a space character.&lt;br /&gt;
==idnum2itemresnametable.txt==&lt;br /&gt;
This file sets the inventory and drop-sprite for an the item. Item is defined as follows:&lt;br /&gt;
 ItemID#SpriteName#&lt;br /&gt;
The SpriteName is the name of the files in collection and item folders inside texture and the ones inside sprite folder. If you want to use the look of an another item, search for it's id and copy the sprite name from there.&lt;br /&gt;
==itemslotcounttable.txt==&lt;br /&gt;
In this file you set the amount of visible slots for the item. You do not need to add 0 slot items or items, which do not have slots at all (i. e. usable items). Syntax:&lt;br /&gt;
 ItemID#NumberOfSlots#&lt;br /&gt;
NumberOfSlots should be a number from 1-4, larger values might have undesired effects.&lt;br /&gt;
==Files for non-identified items==&lt;br /&gt;
The following files specify the name, description and look for items, which have not yet been identified. Their syntax follows the same rules as for the files with ''idnum'' prefix. Normally the same text is entered for non-equipment and generic description (which can be copied from official items) is used for equipment of all sorts (weapons, armor, headgears).&lt;br /&gt;
* num2itemdesctable.txt&lt;br /&gt;
* num2itemdisplaynametable.txt&lt;br /&gt;
* num2itemresnametable.txt&lt;br /&gt;
&lt;br /&gt;
=Item Placement on Data Folder (For New Clients)=&lt;br /&gt;
If your client date is newer than specified above then you need to specify all the above item information in 1 file &lt;br /&gt;
&lt;br /&gt;
==System/ItemInfo.lub==&lt;br /&gt;
Since ItemInfo.lub is compiled, you need to decompile it to lua , add your customs and recompile back to lub file (Some have said that renaming a decompiled file to lub also works)&lt;br /&gt;
Syntax:&lt;br /&gt;
 [&amp;lt;item id&amp;gt;] = {&lt;br /&gt;
    unidentifiedDisplayName = &amp;lt;item name to show when not magnified&amp;gt;,&lt;br /&gt;
    unidentifiedResourceName = &amp;lt;file name prefix used for all the images and drop sprite when not magnified&amp;gt;,&lt;br /&gt;
    unidentifiedDescriptionName = { &amp;lt;comma separated list of strings&amp;gt;,&amp;lt;to get multiple lines&amp;gt;,&amp;lt;in item description&amp;gt; },&lt;br /&gt;
    identifiedDisplayName = &amp;lt;item name to show when magnified&amp;gt;,&lt;br /&gt;
    identifiedResourceName = &amp;lt;file name prefix used for all the images and drop sprite when magnified&amp;gt;,&lt;br /&gt;
    identifiedDescriptionName = { &amp;lt;same format as unidentifiedDescriptionName but for magnified items&amp;gt; },&lt;br /&gt;
    slotCount = &amp;lt;number of slots&amp;gt;,&lt;br /&gt;
    ClassNum = &amp;lt;View ID - yes the same one that was there item_db&amp;gt;&lt;br /&gt;
  },&lt;br /&gt;
&amp;lt;b&amp;gt;For Weapons, ClassNum = View ID specified in Weapon_IDs table (inside weapontable.lub file). Look [[Custom_Items#Weapon_Sprite_Solution_.28For_New_Clients.29|below]] for details.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also put the different values in DescriptionName in separate lines.&lt;br /&gt;
&lt;br /&gt;
Example: Lets say i want to add a weapon to item id 25000 - a One handed sword named Devastator with 3 slots &amp;amp; the image files &amp;amp; drop sprite files are all named Black_Sword.* . Also i want to display a Sword when not magnified.&lt;br /&gt;
&lt;br /&gt;
 [25000] = {&lt;br /&gt;
    unidentifiedDisplayName = &amp;quot;Sword&amp;quot;,&lt;br /&gt;
    unidentifiedResourceName = &amp;quot;¼Òµå&amp;quot;,&lt;br /&gt;
    unidentifiedDescriptionName = { &amp;quot;Unidentified item, can be identified with [Magnifier].&amp;quot; },&lt;br /&gt;
    identifiedDisplayName = &amp;quot;Devastator&amp;quot;,&lt;br /&gt;
    identifiedResourceName = &amp;quot;Black_Sword&amp;quot;,&lt;br /&gt;
    identifiedDescriptionName = { &lt;br /&gt;
                                  &amp;quot;An Unholy Sword that was created with the sole purpose of destruction&amp;quot;,&lt;br /&gt;
                                  &amp;quot;Class :^777777 Sword^000000&amp;quot;,&lt;br /&gt;
                                  &amp;quot;Attack :^777777 325^000000&amp;quot;,&lt;br /&gt;
                                  &amp;quot;Weight :^777777 80^000000&amp;quot;,&lt;br /&gt;
                                  &amp;quot;Weapon Level :^777777 4^000000&amp;quot;,&lt;br /&gt;
                                  &amp;quot;Required Level :^777777 100^000000&amp;quot;,&lt;br /&gt;
                                  &amp;quot;Applicable Job :^777777 Novice, Swordsman Class, Merchant Class, Thief Class^000000&amp;quot;&lt;br /&gt;
                                },&lt;br /&gt;
    slotCount = 3,&lt;br /&gt;
    ClassNum = 2&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
= Allocating Items on Client Side =&lt;br /&gt;
Your custom item will have 4 (6 in case its a headgear or garment) files:&lt;br /&gt;
 1) Drop sprite -&amp;gt; Helmet_drop.spr &lt;br /&gt;
 2) Drop act file -&amp;gt; Helmet_drop.act&lt;br /&gt;
 3) Item Inventory image -&amp;gt; Helmet_item.bmp&lt;br /&gt;
 4) Item Collection image -&amp;gt; Helmet_collection.bmp (the one you see on its description window)&lt;br /&gt;
 5) Headgear View sprite -&amp;gt; Helmet.spr&lt;br /&gt;
 6) Headgear View act file -&amp;gt; Helmet.act&lt;br /&gt;
&lt;br /&gt;
Lets say i downloaded a custom item called Helmet which serves as a headgear and the above six files were in them.&lt;br /&gt;
&lt;br /&gt;
==Step 1:==&lt;br /&gt;
We place the first four files based on what we specified in id2numresnametable.txt (IdentifiedResourceName in Iteminfo.lub).&lt;br /&gt;
For our example lets say i used &amp;quot;Helmet&amp;quot; as the resource name :&lt;br /&gt;
 i)   Copy Helmet_drop.spr to [RO Folder]\data\sprite\¾ÆÀÌÅÛ\Helmet.spr&lt;br /&gt;
 ii)  Copy Helmet_drop.act to [RO Folder]\data\sprite\¾ÆÀÌÅÛ\Helmet.act&lt;br /&gt;
 iii) Copy Helmet_item.bmp to [RO Folder]\data\texture\À¯ÀúÀÎÅÍÆäÀÌ½º\item\Helmet.bmp&lt;br /&gt;
 iv)  Copy Helmet_collection.bmp to [RO Folder]\data\texture\À¯ÀúÀÎÅÍÆäÀÌ½º\collection\Helmet.bmp &lt;br /&gt;
==Step 2 (only for Headgears):==&lt;br /&gt;
For displaying headgear on the character there will be two additional files (sprite &amp;amp; act) or 4 if the sprite author intended for a separate set of files for male &amp;amp; female. In my example i have considered the first scenario.&lt;br /&gt;
&lt;br /&gt;
The filename for headgear sprite are now specified in accname.lua file &amp;lt;b&amp;gt;(details of which is available in the [[Custom_Items#View_IDs.2C_Having_A_Custom_Headgear_Without_Xray|View IDs Section]])&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
lets say i used &lt;br /&gt;
 [ACCESSORY_IDs.HELMET] = &amp;quot;_Helmet&amp;quot;,&lt;br /&gt;
then we need to:&lt;br /&gt;
 i)   Copy Helmet.spr to [RO Folder]\data\sprite\¾Ç¼¼»ç¸®\¿©\¿©_Helmet.spr (Female)&lt;br /&gt;
 ii)  Copy Helmet.act to [RO Folder]\data\sprite\¾Ç¼¼»ç¸®\¿©\¿©_Helmet.act &lt;br /&gt;
 iii) Copy Helmet.spr to [RO Folder]\data\sprite\¾Ç¼¼»ç¸®\³²\³²_Helmet.spr (Male)&lt;br /&gt;
 iv)  Copy Helmet.act to [RO Folder]\data\sprite\¾Ç¼¼»ç¸®\³²\³²_Helmet.act &lt;br /&gt;
&lt;br /&gt;
Now it is ready to be used provided you have added entries properly to the lua files.&lt;br /&gt;
&lt;br /&gt;
==Specifications of the files==&lt;br /&gt;
1) Drop sprites - ideally have 1 frame &amp;amp; its act file will be just an empty act (only header will be there inside)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) Equip sprites - typically have 3+ frames to show images for various orientations &amp;amp; its act file will have the info on where to place each frame.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Item bmp - 24x24 size 256 bit bmp file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4) Collection bmp - 75x100 size bmp file (usually 256 bit but there is no restriction)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;How to differentiate between sprite files?&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Open both sprite files in [http://ratemyserver.net/download_agent.php?type=1&amp;amp;file_num=10 Spr Conview]. The number of frames in the files can be seen at bottom (Sprite: &amp;lt;currentframe&amp;gt;/&amp;lt;total&amp;gt;). If it says Sprite: 1/1 then its a drop sprite and the other is equip sprite.&lt;br /&gt;
&lt;br /&gt;
Sometimes what sprite authors do is they simply copy the original sprite itself to make a drop sprite. In this case you will see both of them as identical when opened in Spr Conview &amp;amp; we don't need to worry about which one is which (since they are the same).&lt;br /&gt;
&lt;br /&gt;
If the process confused you, [http://www.mediafire.com/?8lzt4cbot100w44 here is an example folder], the sprite is done by drkangel. The folder is virus free.&lt;br /&gt;
&lt;br /&gt;
= View IDs, Having A Custom Headgear Without Xray =&lt;br /&gt;
Look in your data folder and make sure there is a folder named &amp;quot;lua files&amp;quot;, if there is not make it.[http://svn6.assembla.com/svn/ClientSide/Lua_Project/lubs/ Download the most recent lub package] and extract it to your lua files folder in your data folder. [http://svn6.assembla.com/svn/ClientSide/Lua_Project/lua%20files/datainfo/ Download the most recent accname.lua and accessoryid.lua], put it in your datainfo folder that is inside the lua files folder. Now download [http://svn6.assembla.com/svn/ClientSide/Lua_Project/tool/luac5.0.2.exe this lub compiling tool], and put it in the datainfo folder. &lt;br /&gt;
Now, Open accessoryid.lua in the datainfo folder with notepad or a text editor of your choice, go all the way down until the names stop. Add your custom gears before the } symbol. You should use a high number just like with your custom item's database ID, or use unused IDs to be sure you won't have to redo them all in the future, or at least for a while. Example:&lt;br /&gt;
 	ACCESSORY_PINKBUNNY_HAIRBAND = 663,&lt;br /&gt;
 	ACCESSORY_GREENBUNNY_HAIRBAND = 664,&lt;br /&gt;
 	ACCESSORY_OLD_ELFEAR = 665,&lt;br /&gt;
 	ACCESSORY_THA_MAERO_MASK = 666,&lt;br /&gt;
 	ACCESSORY_THANATOS_MAI_MASK = 667,&lt;br /&gt;
 	--668 free&lt;br /&gt;
 	ACCESSORY_FISHPIN = 669,&lt;br /&gt;
 	ACCESSORY_CUSTOM_HAT = 900,&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
''You must compile to lub if you leave space between IDs, if you don't plan on compiling to lub, make sure you do not skip any numbers.''&lt;br /&gt;
&lt;br /&gt;
Now open accname.lua, do basically the same thing but just in a different way, and for the sprite. Add your item to the bottom, have it look like the ones above it, except have your items name and the item's sprite name.&lt;br /&gt;
 	[ACCESSORY_IDs.ACCESSORY_PINKBUNNY_HAIRBAND] = &amp;quot;_ÇÎÅ©Åä³¢¸Ó¸®¶ì&amp;quot;,&lt;br /&gt;
 	[ACCESSORY_IDs.ACCESSORY_GREENBUNNY_HAIRBAND] = &amp;quot;_±×¸°Åä³¢¸Ó¸®¶ì&amp;quot;,&lt;br /&gt;
 	[ACCESSORY_IDs.ACCESSORY_OLD_ELFEAR] = &amp;quot;_°í´ë¿äÁ¤ÀÇ±Í&amp;quot;,&lt;br /&gt;
 	[ACCESSORY_IDs.ACCESSORY_THA_MAERO_MASK] = &amp;quot;_Å¸³ªÅä½ºÀÇ½½ÇÄ°¡¸é&amp;quot;,&lt;br /&gt;
 	[ACCESSORY_IDs.ACCESSORY_THANATOS_MAI_MASK] = &amp;quot;_Å¸³ªÅä½ºÀÇÁõ¿À°¡¸é&amp;quot;,&lt;br /&gt;
 	[ACCESSORY_IDs.ACCESSORY_FISHPIN] = &amp;quot;_¹°°í±âÇÉ&amp;quot;,&lt;br /&gt;
 	[ACCESSORY_IDs.ACCESSORY_CUSTOM_HAT] = &amp;quot;_Sprite_Name_Here&amp;quot;,&lt;br /&gt;
 }&lt;br /&gt;
Delete the accname.lub and accessoryid.lub. Now that you are done, make sure luac.exe is in your datainfo folder, right click the luac.exe, create a shortcut, right click the shortcut, and click properties, in the target area, add right after the quotes, with the quotes:&lt;br /&gt;
 -o &amp;quot;accessoryid.lub&amp;quot; &amp;quot;accessoryid.lua&amp;quot;&lt;br /&gt;
So that it looks something like this:&lt;br /&gt;
 &amp;quot;C:\Program Files (x86)\Gravity\RO\data\lua files\datainfo\luac5.0.2.exe&amp;quot; -o &amp;quot;accessoryid.lub&amp;quot; &amp;quot;accessoryid.lua&amp;quot;&lt;br /&gt;
Do this also to &amp;quot;accname.lub&amp;quot; except instead of accessoryid in the quotes, do accname. If there is any lua file leftover, you may want to move it somewhere else just for future changes, like My Documents. For future reference, this is also how you turn the other lub files to lua files.&lt;br /&gt;
&lt;br /&gt;
=Modifications=&lt;br /&gt;
==Sprite Replacement==&lt;br /&gt;
To replace a headgear with your customized headgear, just delete one of the items you want, and replace your customised item ID with that id.&lt;br /&gt;
&lt;br /&gt;
Lets say you have something like this:&lt;br /&gt;
 15000,Angel_Wing,Angel Wing,4,,10,10,0,,1,0,0,3,0,0,0,0,0,{},{},{}&lt;br /&gt;
And there's an item you wont need, such as:&lt;br /&gt;
 2220,Hat,Hat,5,1000,,200,,2,,0,10477567,2,256,,0,1,16,{},{},{}&lt;br /&gt;
Well, to replace it, just delete everything in the hat line but its ID, and paste there your custom item, all the line but the ID. Should be like this:&lt;br /&gt;
 '''2220''',Hat,Hat,5,1000,,200,,2,,0,10477567,2,256,,0,1,16,{},{},{}&lt;br /&gt;
 15000,'''Angel_Wing,Angel Wing,4,,10,10,0,,1,0,0,3,0,0,0,0,0,{},{},{}'''&lt;br /&gt;
 '''2220,Angel_Wing,Angel Wing,4,,10,10,0,,1,0,0,3,0,0,0,0,0,{},{},{}'''&lt;br /&gt;
All you need to do now is changing the View ID to the Hat, and change your file names to its name. You can find them on the idnum2resnametable.txt Search for 2220 and the gibberish besides it, w/o the # # is the file name, then rename it to your custom item name.&lt;br /&gt;
&lt;br /&gt;
Remember to add the files to data\sprite\¾ÆÀÌÅÛ (Icon sprite) and both data\sprite\¾Ç¼¼»ç¸®\³² (Male Item Sprite) and data\sprite\¾Ç¼¼»ç¸®\¿© (Female Item Sprite). Remember, these 2 last item names, must have either a ³²_ for male or ¿©_ for female, at the beginning of the name, both .spr and .act. Also, don't forget to change the other files:&lt;br /&gt;
&lt;br /&gt;
idnum2itemdisplaynametable.txt , idnum2itemdesctable.txt , idnum2itemdesctable.txt , num2itemdesctable.txt , num2itemdisplaynametable.txt , num2itemresnametable.txt and itemslotcounttable.txt&lt;br /&gt;
&lt;br /&gt;
Use these files if you want to replace sprites, they will be useful.&lt;br /&gt;
* '''actOR:''' with the actor you modify the act file, which is the one who tells the client where does the weapon go and what does it have to do and at a certain moment.&lt;br /&gt;
* '''SPR Conview:''' you can use these to view which sprite is which, and also see sequence per sequence.&lt;br /&gt;
&lt;br /&gt;
==Item Restrictions==&lt;br /&gt;
Look on your db folder for a file called item_trade.txt and open it&lt;br /&gt;
&lt;br /&gt;
Now, the pattern for a flag is:&lt;br /&gt;
&lt;br /&gt;
 Item ID, TradeMask, GM-Level Override&lt;br /&gt;
&lt;br /&gt;
* '''Item ID''': the ID of your item.&lt;br /&gt;
* '''TradeMask''': Testrictions the item will have, such as being dropped, stored or traded. These values can be combined to achieve multiple effects.&lt;br /&gt;
 1:Item can't be dropped&lt;br /&gt;
 2:Item can't be traded (nor vended)&lt;br /&gt;
 4:Item can only be traded with wedded partner&lt;br /&gt;
 8:Item can't be sold to NPCs&lt;br /&gt;
 16:Item can't be placed in the cart&lt;br /&gt;
 32:Item can't be placed in the storage&lt;br /&gt;
 64:Item can't be placed in the guild storage&lt;br /&gt;
* '''GM-Level Override''': This is the minimum GM level a player must have to avoid these restrictions.&lt;br /&gt;
&lt;br /&gt;
==Item Script==&lt;br /&gt;
{{duplication&lt;br /&gt;
|type=section&lt;br /&gt;
|what=[[itemskill]], [[sc_start]] and [[skilleffect]]}}&lt;br /&gt;
{{disputed&lt;br /&gt;
|type=section&lt;br /&gt;
|date=September 2010}}&lt;br /&gt;
Okay, I'll update this as I go; otherwise, I wont have anything new to show. First with usable items.&lt;br /&gt;
&lt;br /&gt;
Well, there are 3 types of usables:&lt;br /&gt;
&lt;br /&gt;
1.- Healing items, they have in the type field a 0.&lt;br /&gt;
&lt;br /&gt;
2.- Other uses items, such as fly wings and so, which doesn't heal, but does have an instant effect, they have in the type field a 2.&lt;br /&gt;
&lt;br /&gt;
3.- Usable items, which are skills that requires a target selection, therefore they have a delayed use, and in newer SVNs the item wont be gone until the target is chosen and the cast has finished. Means, you wont lose the item if the skill hasn't been done. They have in the type field an 11.&lt;br /&gt;
&lt;br /&gt;
Now, for an item skill, the pattern for a skill is:&lt;br /&gt;
 itemskill &amp;lt;skill id&amp;gt;,&amp;lt;skill level&amp;gt;;&lt;br /&gt;
Without &amp;lt;&amp;gt; of course.&lt;br /&gt;
&lt;br /&gt;
Now, we go to our db\skill_db.txt and search for the blessing ID, searching for AL_ or blessing, but first, the structure of a skill:&lt;br /&gt;
 id,range,hit,inf,element,nk,splash,max,list_num,castcancel,cast_defence_rate,inf2,maxcount,skill_type,blow_count,name,description&lt;br /&gt;
Now, the AL_BLESSING or Blessing Skill:&lt;br /&gt;
 34,9,6,16,0,0x1,0,10,1,yes,0,0,0,magic,0,	AL_BLESSING,Blessing&lt;br /&gt;
We grab the ID and put it on our code:&lt;br /&gt;
 itemskill 34,&amp;lt;skill lvl&amp;gt;;&lt;br /&gt;
Don't mind the actual level of the skill_db.txt for the skill level part. You can actually put the level you want here below 99, so lets pick 4:&lt;br /&gt;
 itemskill 34,4;&lt;br /&gt;
And finally, insert it on the code.&lt;br /&gt;
&amp;lt;pre&amp;gt;,{ itemskill 34,4; },{},{}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There, we have a Lvl 4 Blessing item skill.&lt;br /&gt;
&lt;br /&gt;
Remember, one space before and one after the script, NOT TAB!&lt;br /&gt;
&lt;br /&gt;
And so on with other skills. Just remember these steps and they should be fine. And remember, itemskill is NOT the same as skill. itemskill will make you CAST that skill, while skill will GIVE you the skill. If you give an item, whether delayed use or normal usable two itemskill commands, only the latter will come into effect, as you cannot cast two skills at the same time.&lt;br /&gt;
&lt;br /&gt;
Now, for Potions.&lt;br /&gt;
&lt;br /&gt;
Instead of using itemskill, we will use itemheal:&lt;br /&gt;
 ,{ itemheal 100,0; },{},{}&lt;br /&gt;
The green is the HP, the blue is the SP. To add that random heal amount effect, just pick a set amount, let's say 120, then pick 1 or 2 numbers, up to you. Then, add the rand() command, like this:&lt;br /&gt;
 ,{ itemheal rand(120,9,49),0; },{},{}&lt;br /&gt;
Explanation: This item will heal about 49~120 hp and 0 SP. To heal SP you change the 0 to a number. Like this:&lt;br /&gt;
 ,{ itemheal rand(120,9,49),50; },{},{}&lt;br /&gt;
It will now heal 50 SP.&lt;br /&gt;
Now, for skilleffect and sc_start.&lt;br /&gt;
&lt;br /&gt;
Okay, let's see. Here's a example of an item casting a skill and simulating a skill.&lt;br /&gt;
 ,{ itemskill 34,10; skilleffect 29,0; sc_start 12,140000,5; },{},{}&lt;br /&gt;
skilleffect will display on your client a skill visual effect. The pattern is:&lt;br /&gt;
&lt;br /&gt;
 skilleffect &amp;lt;skill ID&amp;gt;,&amp;lt;number&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
;skill ID&lt;br /&gt;
:Self-explanatory.&lt;br /&gt;
;number&lt;br /&gt;
:Have you seen those skills that shows up numbers upon casting? Such as heal? Well, putting a number there will display it. But only works on skills with numbers floating.&lt;br /&gt;
&lt;br /&gt;
sc_start has the following pattern:&lt;br /&gt;
&lt;br /&gt;
 sc_start &amp;lt;status id&amp;gt;,&amp;lt;duration&amp;gt;,&amp;lt;val1&amp;gt;[,&amp;lt;unit id&amp;gt;];&lt;br /&gt;
&lt;br /&gt;
;status id&lt;br /&gt;
:Refer to const.txt in your db folder for all effects. Open it with a text editor then search by either clicking edit, then find, or press and hold the ctrl key, and while still holding it press the f key, then release, and search for &amp;quot;SC_ALL -1&amp;quot;. Everything below this is an effect. The effects stop at &amp;quot;e_gasp    0&amp;quot; which are emoticons.&lt;br /&gt;
;duration&lt;br /&gt;
:Is the amount time in milliseconds (1000 msec = 1 sec) that the status will be active.&lt;br /&gt;
;val1&lt;br /&gt;
:Typically it's the level of the skill, associated with this status.&lt;br /&gt;
;unit id&lt;br /&gt;
:Allows to start the status on an other unit, than the attached player. For players this is account id. This parameter is optional, and can be omitted.&lt;br /&gt;
&lt;br /&gt;
Now, for the item I said, it will show you the visual effect of Blessing and cast on you a lvl 5 Agi-Up! skill for 140 seconds.&lt;br /&gt;
&lt;br /&gt;
For more item scripts see script_commands.txt in your doc folder, as well as item_bonus.txt in your doc folder.&lt;br /&gt;
&lt;br /&gt;
==Weapon Sprite Solution (Renewal Clients &amp;lt;= 2012-04-10a &amp;amp; Main Clients &amp;lt;= 2012-07-10a)==&lt;br /&gt;
For these clients, Weapons are limited to use a range of Item IDs hardcoded in the clientn for each type.&lt;br /&gt;
For e.g.&lt;br /&gt;
&lt;br /&gt;
 1265,Bloody_Roar,Bloody Roar,4,,10,1000,120,,1,0,4096,7,2,34,4,75,1,16,{ bonus bIgnoreDefRace,RC_DemiHuman; bonus bFlee,-160; bonus bFlee2,-160; bonus bNoRegen,1; bonus bNoRegen,2; },{},{}&lt;br /&gt;
 1266,Test,Test,4,4000,2000,10,165,,1,0,4096,7,2,34,3,33,1,16,{}&lt;br /&gt;
&lt;br /&gt;
 // 1-Handed Axes&lt;br /&gt;
 1301,Axe,Axe,4,500,,800,38,,1,3,8803555,7,2,2,1,3,1,6,{}&lt;br /&gt;
&lt;br /&gt;
Here the item 1266 is a custom katar and it does show up as a katar (if you have the proper sprite files ofcourse). but if i use some id like say 22000, client wont display it. So what is the range of item ids you can use? Look below:&lt;br /&gt;
&lt;br /&gt;
* One handed Swords = 1100-1149, 13400-13499&lt;br /&gt;
* Two handed Swords = 1150-1199, 21000-21999&lt;br /&gt;
 &lt;br /&gt;
* Knives, Daggers etc = 1200-1249, 13000-13099&lt;br /&gt;
* Katars = 1250-1299 ; Has 35 free IDs&lt;br /&gt;
 &lt;br /&gt;
* One handed Axes = 1300-1349; Has 43 free IDs&lt;br /&gt;
* Two handed Axes = 1350-1399; Has 32 free IDs&lt;br /&gt;
 &lt;br /&gt;
* One handed Spears = 1400-1449; Has 34 free IDs&lt;br /&gt;
* Two Handed Spears = 1450-1471, 1474-1499&lt;br /&gt;
 &lt;br /&gt;
* Maces = 1500-1549, 16000-16999&lt;br /&gt;
* Books = 1550-1599 ; Has only 2 IDs.&lt;br /&gt;
* Knuckles = 1800-1899 ; Has 95 free IDs&lt;br /&gt;
 &lt;br /&gt;
* One Handed Staves/Rods = 1600-1699; Has 79 free IDs&lt;br /&gt;
* Two Handed Staves/Rods = 1472,1473,2000-2099&lt;br /&gt;
 &lt;br /&gt;
* Bows = 1700-1749, 18100-18499&lt;br /&gt;
* Guitars = 1900-1949 ; Has 32 free IDs&lt;br /&gt;
* Whips = 1950-1999 ; Has 130 free IDs&lt;br /&gt;
 &lt;br /&gt;
* Handguns = 13100-13149&lt;br /&gt;
* Other guns = 13150-13199&lt;br /&gt;
 &lt;br /&gt;
* Ninja weapons = 13300-13399&lt;br /&gt;
&lt;br /&gt;
The number of unused Item IDs left known for a range has also been mentioned above. Best practice to follow check in your range in official db before adding custom weapon.&lt;br /&gt;
&lt;br /&gt;
==Weapon Sprite Solution (For New Clients) ==&lt;br /&gt;
For new clients the view id system is also applicable to client. To add a custom weapon you need to first edit a file&lt;br /&gt;
called weapontable.lub in your data folder&lt;br /&gt;
 data/luafiles514/lua files/datainfo/weapontable.lub&lt;br /&gt;
&lt;br /&gt;
I will be adding &amp;lt;b&amp;gt;Oriental_Sword&amp;lt;/b&amp;gt; which will be a 1-Handed sword. Open weapontable.lub.&lt;br /&gt;
First you will see a table called &amp;lt;b&amp;gt;Weapon_IDs&amp;lt;/b&amp;gt;. Take note of the first 30 values in this table - these are the only available Weapon types in the client right now.&lt;br /&gt;
&lt;br /&gt;
Anyways go to the last entry which should be for Wizardy Staff = 97. You can use a view id after that like shown below&lt;br /&gt;
  WEAPONTYPE_Oriental_Sword = 98,&lt;br /&gt;
&lt;br /&gt;
Come down and you see the next table called &amp;lt;b&amp;gt;WeaponNameTable&amp;lt;/b&amp;gt;. Here is where you add your sprite name suffix.&amp;lt;br&amp;gt;&lt;br /&gt;
What do i mean by that? Its the last part in your weapon sprite &amp;amp; act file. Before it used to be _&amp;lt;Item ID&amp;gt;.&lt;br /&gt;
 data/sprite/&amp;lt;job dependent folder&amp;gt;/&amp;lt;job dependent prefix&amp;gt;_&amp;lt;gender&amp;gt;&amp;lt;weapon suffix&amp;gt;.spr&lt;br /&gt;
&lt;br /&gt;
OK Back to topic. so I add my entry like shown below.&lt;br /&gt;
 [Weapon_IDs.WEAPONTYPE_Oriental_Sword] = &amp;quot;_Oriental&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Lastly come down further in weapontable.lub and you see the last table called &amp;lt;b&amp;gt;Expansion_Weapon_IDs&amp;lt;/b&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Remember the 30 types i told you to take note of ? here we assign one of those to our custom (like a mapping or connection).&amp;lt;br&amp;gt;&lt;br /&gt;
Since mine is a 1-Handed Sword I specify it like below.&lt;br /&gt;
 [Weapon_IDs.WEAPONTYPE_Oriental_Sword] = Weapon_IDs.WPCLASS_WEAPONTYPE_SWORD &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Now for the most important part. For our client to actually pick up all these details we need to provide the view id which we used in Weapon_IDs table as the ClassNum value in ItemInfo.lua. Check the [[Custom_Items#System.2FItemInfo.lub|ItemInfo.lub format]] shown above for details.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this your weapon sprite will become visible while attacking.&lt;br /&gt;
[[Category:Database]]&lt;br /&gt;
[[Category:Data]]&lt;br /&gt;
[[Category:Customization]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Removemapflag</id>
		<title>Removemapflag</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Removemapflag"/>
				<updated>2013-12-06T23:42:13Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Syntax==&lt;br /&gt;
* [[removemapflag]] &amp;quot;&amp;lt;map name&amp;gt;&amp;quot;,&amp;lt;flag&amp;gt;;&lt;br /&gt;
==Description==&lt;br /&gt;
This command checks the status of a given mapflag and returns the &lt;br /&gt;
[[mapflag]]'s state. &lt;br /&gt;
0 means OFF, and 1 means ON. See [[setmapflag]] for a list of [[mapflags]].&lt;br /&gt;
[[Category:Script_Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Building_HPM_Plugin_for_MSVC</id>
		<title>Building HPM Plugin for MSVC</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Building_HPM_Plugin_for_MSVC"/>
				<updated>2013-12-06T07:43:49Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: /* Guide */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a guide on how to prepare your MSVC environment for a new [[HPM]] plugin.&lt;br /&gt;
= Guide =&lt;br /&gt;
1. Go to '''src/plugins/''' folder, create a new '''.c''' file, e.g. '''dance.c''' (this name will be used throughout this guide)&lt;br /&gt;
[[File:step1.JPG|center|750px]]&lt;br /&gt;
2. Open dance.c and paste this code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;quot;../common/HPMi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;../map/script.h&amp;quot;&lt;br /&gt;
#include &amp;quot;../map/pc.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
HPExport struct hplugin_info pinfo =&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;@dance&amp;quot;,		// Plugin name&lt;br /&gt;
    SERVER_TYPE_MAP,// Which server types this plugin works with?&lt;br /&gt;
    &amp;quot;0.1a&amp;quot;,			// Plugin version&lt;br /&gt;
    HPM_VERSION,	// HPM Version (don't change, macro is automatically updated)&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
ACMD(dance)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
      if (!message || !*message) {&lt;br /&gt;
		  clif-&amp;gt;message(fd, &amp;quot;usage: @dance 1-9&amp;quot;);&lt;br /&gt;
return -1;&lt;br /&gt;
   }&lt;br /&gt;
   if ( atoi(message) == 1 ) {&lt;br /&gt;
clif-&amp;gt;specialeffect(&amp;amp;sd-&amp;gt;bl, 413, ALL_CLIENT);&lt;br /&gt;
   } else if ( atoi(message) == 2 ) {&lt;br /&gt;
clif-&amp;gt;specialeffect(&amp;amp;sd-&amp;gt;bl, 414, ALL_CLIENT);&lt;br /&gt;
   } else if ( atoi(message) == 3 ) {&lt;br /&gt;
clif-&amp;gt;specialeffect(&amp;amp;sd-&amp;gt;bl, 415, ALL_CLIENT);&lt;br /&gt;
   } else if ( atoi(message) == 4 ) {&lt;br /&gt;
clif-&amp;gt;specialeffect(&amp;amp;sd-&amp;gt;bl, 426, ALL_CLIENT);&lt;br /&gt;
   } else if ( atoi(message) == 5 ) {&lt;br /&gt;
clif-&amp;gt;specialeffect(&amp;amp;sd-&amp;gt;bl, 458, ALL_CLIENT);&lt;br /&gt;
   } else if ( atoi(message) == 6 ) {&lt;br /&gt;
clif-&amp;gt;specialeffect(&amp;amp;sd-&amp;gt;bl, 466, ALL_CLIENT);&lt;br /&gt;
   } else if ( atoi(message) == 7 ) {&lt;br /&gt;
clif-&amp;gt;specialeffect(&amp;amp;sd-&amp;gt;bl, 501, ALL_CLIENT);&lt;br /&gt;
   } else if ( atoi(message) == 8 ) {&lt;br /&gt;
clif-&amp;gt;specialeffect(&amp;amp;sd-&amp;gt;bl, 540, ALL_CLIENT);&lt;br /&gt;
   } else if ( atoi(message) == 9 ) {&lt;br /&gt;
clif-&amp;gt;specialeffect(&amp;amp;sd-&amp;gt;bl, 550, ALL_CLIENT);&lt;br /&gt;
   }&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
	clif-&amp;gt;message(fd, &amp;quot;usage: @dance 1-9&amp;quot;); &lt;br /&gt;
	}&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Server Startup */&lt;br /&gt;
HPExport void plugin_init (void)&lt;br /&gt;
{&lt;br /&gt;
    clif = GET_SYMBOL(&amp;quot;clif&amp;quot;);&lt;br /&gt;
    script = GET_SYMBOL(&amp;quot;script&amp;quot;);&lt;br /&gt;
    skill = GET_SYMBOL(&amp;quot;skill&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    addAtcommand(&amp;quot;dance&amp;quot;,dance);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
3. Open your MSVC project (e.g. '''Hercules-10.sln'')&lt;br /&gt;
[[File:step2.JPG|center|750px]]&lt;br /&gt;
4. Go to the '''Solution Explorer'''&lt;br /&gt;
[[File:step3.JPG|center|750px]]&lt;br /&gt;
5. Right click the Hercules project (first item in '''Solution Explorer'''), and click '''Add-&amp;gt;New Project'''&lt;br /&gt;
[[File:step4.JPG|center|750px]]&lt;br /&gt;
6. Select '''General''', and pick '''Empty Project'''.&lt;br /&gt;
[[File:step5.JPG|center|750px]]&lt;br /&gt;
7. Enter the name of your plugin in the '''Name''' field, and click OK.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. In the solution explorer it'll display the new project.&lt;br /&gt;
[[File:step6.JPG|center|750px]]&lt;br /&gt;
9. Right click the new project, and open '''Add-&amp;gt;Existing Item'''&lt;br /&gt;
[[File:step7.JPG|center|750px]]&lt;br /&gt;
10. Browse to '''src/plugins/''' and select the '''dance.c''' file, and hit OK.&lt;br /&gt;
[[File:step8.JPG|center|750px]]&lt;br /&gt;
11. It will place the '''dance.c''' file under the '''Source Files''' folder, drag it to the project you created and drop it (in a manner it be placed out of the source files folder.)&lt;br /&gt;
[[File:step9.JPG|center|750px]]&lt;br /&gt;
(It should look like the image below)&lt;br /&gt;
[[File:step10.JPG|center|750px]]&lt;br /&gt;
12. With the '''dance.c''' out of the folders, delete the 3 of them (select the 3, hit delete, hit ok)&lt;br /&gt;
[[File:step11.JPG|center|750px]]&lt;br /&gt;
(It should look like the image below)&lt;br /&gt;
[[File:step12.JPG|center|750px]]&lt;br /&gt;
13. Right click the project you created, open '''Properties'''&lt;br /&gt;
[[File:step13.JPG|center|750px]]&lt;br /&gt;
14. Under '''Configuration Properties''' click '''General''', change '''Output Directory''' to '''..\plugins''', '''Intermediate Directory''' to '''$(ProjectName)\$(ConfigurationName)''' and  '''Configuration Type''' to '''Dynamic Library (.dll)'''&lt;br /&gt;
[[File:step14.JPG|center|750px]]&lt;br /&gt;
15. Under '''Configuration Properties''' click '''C/C++''' and open '''General''', change '''Additional Include Directories''' to '''..\src\common;..\3rdparty\msinttypes\include'''&lt;br /&gt;
[[File:step15.JPG|center|750px]]&lt;br /&gt;
16. Under '''Configuration Properties''' click '''Linker''' and open '''General''', change '''Output File''' to '''$(OutDir)\dance.dll''' (change dance.dll with your actual name, if you used a different one)&lt;br /&gt;
[[File:step16.JPG|center|750px]]&lt;br /&gt;
17. Add your code to the '''dance.c''' file, and then right-click the project you created, and select '''Build'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
18. Add it to ''' /conf/plugins.conf'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugins_list: [&lt;br /&gt;
	/* Enable HPMHooking when plugins in use rely on Hooking */&lt;br /&gt;
	//&amp;quot;HPMHooking&amp;quot;,&lt;br /&gt;
	//&amp;quot;db2sql&amp;quot;,&lt;br /&gt;
	//&amp;quot;sample&amp;quot;,&lt;br /&gt;
	//&amp;quot;other&amp;quot;,&lt;br /&gt;
	&amp;quot;dance&amp;quot;, // dance.c&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
* This guide is probably the worst I've ever written, if you can do better please hit the 'Edit' button, will be most welcome. - Ind&lt;br /&gt;
* I used MSVC 2008 when testing this guide.&lt;br /&gt;
&lt;br /&gt;
= New Note =&lt;br /&gt;
* Sorry for editing this page, I added step by step images for other people to follow so they can easily follow one of the best feature Hercules have, the HPM. - Thanna&lt;br /&gt;
* The tutorial is tested on MSVC 2010.&lt;br /&gt;
&lt;br /&gt;
[[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Hercules_Plugin_Manager</id>
		<title>Hercules Plugin Manager</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Hercules_Plugin_Manager"/>
				<updated>2013-12-06T07:19:33Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: /* HPM Custom Packets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Often referred to as the [[HPM]], the '''Hercules Plugin Manager''' is yet another [[Hercules Original]]&lt;br /&gt;
= Building a plugin =&lt;br /&gt;
While the [[C]] code for the plugin normally won't have discrepancies, in order to [[compile]] the plugin certain criteria must be met depending on your Operating System, there are 2 guides below, one for windows and other for everything else (which should work on any *nix distro, as well as on OSX).&lt;br /&gt;
;Windows&lt;br /&gt;
: [[Building HPM Plugin for MSVC]]&lt;br /&gt;
;All Others&lt;br /&gt;
: [[Building HPM Plugin for gcc]]&lt;br /&gt;
&lt;br /&gt;
= Creating a plugin =&lt;br /&gt;
After following the [[#Building_a_plugin|building a plugin]] guide, all thats left is for your plugin's code to be made, the following will guide you through the basics of how a [[HPM]] plugin works.&lt;br /&gt;
== HPM Events ==&lt;br /&gt;
Events are functions in a plugin that are triggered by the '''Hercules Plugin Mananger''' when they meet certain criteria.&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;void plugin_init (void)&amp;lt;/code&amp;gt;&lt;br /&gt;
** Triggered when the server starts&lt;br /&gt;
* &amp;lt;code&amp;gt;void plugin_final (void)&amp;lt;/code&amp;gt;&lt;br /&gt;
** Triggered when the server starts to shut itself down&lt;br /&gt;
* &amp;lt;code&amp;gt;void server_ready (void)&amp;lt;/code&amp;gt;&lt;br /&gt;
** Triggered after the server is done starting, and is online.&lt;br /&gt;
* &amp;lt;code&amp;gt;void server_post_final (void)&amp;lt;/code&amp;gt;&lt;br /&gt;
** Triggered after the server's main shutdown procedures are complete, core functionality such as memory manager, timer, and sockets are still available at this point.&lt;br /&gt;
With the [[HPM]] you only need to code the events your plugin will use.&lt;br /&gt;
== HPM Hooks ==&lt;br /&gt;
In Hercules, hooking is a simple operation, it is possible to hook an infinite number of times to the over 2k hookable functions (all the interfaced ones, accounting for over 99% of map server)&amp;lt;br/&amp;gt;&lt;br /&gt;
 HPExport void plugin_init (void) {&lt;br /&gt;
 	addHookPre(&amp;quot;pc-&amp;gt;dropitem&amp;quot;,my_pc_dropitem_preHook);  /* int my_pc_dropitem_preHook(struct map_session_data *sd,int *n,int *amount) */&lt;br /&gt;
 	addHookPost(&amp;quot;pc-&amp;gt;dropitem&amp;quot;,my_pc_dropitem_postHook);/* int my_pc_dropitem_postHook(int retVal, struct map_session_data *sd,int *n,int *amount) */&lt;br /&gt;
 }&lt;br /&gt;
Hooks receive all function params as pointers, whereas the original may be&lt;br /&gt;
 int pc_dropitem(struct map_session_data *sd,int n,int amount)&lt;br /&gt;
the one for the hook shall be&lt;br /&gt;
 (struct map_session_data *sd,int *n,int *amount)&lt;br /&gt;
which allows for hooks to modify any and all data as it pleases.&amp;lt;br/&amp;gt;&lt;br /&gt;
postHooks receive one additional param, which accounts for the result of the original function,&lt;br /&gt;
 int &amp;lt;name&amp;gt;(int retVal, struct map_session_data *sd,int *n,int *amount)&lt;br /&gt;
In this case it'd allow for the postHook to react properly to what the original returned, in this case (for pc_dropitem) 0 (failure) or 1 (success)&amp;lt;br/&amp;gt;&lt;br /&gt;
A full usage of this is demonstrated in the [[HPM]]'s sample {{git|src/plugins/sample.c}}&lt;br /&gt;
== HPM @commands ==&lt;br /&gt;
The [[HPM]] makes it very simple to provide [[@commands]] through plugins.&amp;lt;br/&amp;gt;&lt;br /&gt;
You define a new atcommand exactly as it'd normally be done in {{git|src/map/atcommand.c}}&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Example:'''&lt;br /&gt;
 ACMD(sample) {//@sample command - 5 params: const int fd, struct map_session_data* sd, const char* command, const char* message, struct AtCommandInfo *info&lt;br /&gt;
 	clif-&amp;gt;message(fd,&amp;quot;You used the @sample command!&amp;quot;);&lt;br /&gt;
 	ShowDebug(&amp;quot;I'm being run! message -&amp;gt; '%s' by '%s'\n&amp;quot;,message,sd-&amp;gt;status.name);&lt;br /&gt;
 	return true;&lt;br /&gt;
 }&lt;br /&gt;
After that you just have to link your new command, to do that you use the &amp;lt;code&amp;gt;void plugin_init (void)&amp;lt;/code&amp;gt; event.&lt;br /&gt;
 addAtcommand(&amp;quot;sample&amp;quot;,sample);&lt;br /&gt;
and voila, your plugin now adds the '''@sample''' command.&amp;lt;br/&amp;gt;&lt;br /&gt;
A full usage of this is demonstrated in the [[HPM]]'s sample {{git|src/plugins/sample.c}}&lt;br /&gt;
&lt;br /&gt;
As of [https://github.com/HerculesWS/Hercules/commit/778facb21f822cea549939c8dbee886e1cd342aa 778facb21f], atcommands loaded via plugins will overwrite default/original commands with the same name.&lt;br /&gt;
&lt;br /&gt;
== HPM Script Commands ==&lt;br /&gt;
The [[HPM]] makes it very simple to provide [[Category:Script_Command|script commands]] through plugins.&amp;lt;br/&amp;gt;&lt;br /&gt;
You define a new script command exactly as it'd normally be done in {{git|src/map/script.c}}&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Example:'''&lt;br /&gt;
 BUILDIN(sample) {//script command 'sample(num);' - 1 param: struct script_state* st&lt;br /&gt;
 	int arg = script_getnum(st,2);&lt;br /&gt;
 	ShowInfo(&amp;quot;I'm being run! arg -&amp;gt; '%d'\n&amp;quot;,arg);&lt;br /&gt;
 	return true;&lt;br /&gt;
 }&lt;br /&gt;
After that you just have to link your new script command, to do that you use the &amp;lt;code&amp;gt;void plugin_init (void)&amp;lt;/code&amp;gt; event.&lt;br /&gt;
 addScriptCommand(&amp;quot;sample&amp;quot;,&amp;quot;i&amp;quot;,sample); //note the 2nd param is this commands' arg-types (in this case, a number)&lt;br /&gt;
and voila, your plugin now adds the '''sample''' script command.&amp;lt;br/&amp;gt;&lt;br /&gt;
A full usage of this is demonstrated in the [[HPM]]'s sample {{git|src/plugins/sample.c}}&lt;br /&gt;
&lt;br /&gt;
== HPM Console Commands ==&lt;br /&gt;
The [[HPM]] makes it very simple to provide [[Category:Console_Command|console commands]] through plugins.&amp;lt;br/&amp;gt;&lt;br /&gt;
You define a new console command exactly as it'd normally be done in {{git|src/common/console.c}}&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Example:'''&lt;br /&gt;
 CPCMD(sample) {//console command 'sample' - 1 param: char *line&lt;br /&gt;
 	ShowInfo(&amp;quot;I'm being run! arg -&amp;gt; '%s'\n&amp;quot;,line?line:&amp;quot;NONE&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
After that you just have to link your new script command, to do that you use the &amp;lt;code&amp;gt;void plugin_init (void)&amp;lt;/code&amp;gt; event.&lt;br /&gt;
 addCPCommand(&amp;quot;this:is:a:sample&amp;quot;,CPCMD_A(sample)); // note the first param is the path to this command, in this case it translates to 'this is a sample' and everything afterwards is the commands' params&lt;br /&gt;
and voila, your plugin now adds the '''sample''' console command.&amp;lt;br/&amp;gt;&lt;br /&gt;
A full usage of this is demonstrated in the [[HPM]]'s sample {{git|src/plugins/sample.c}}&lt;br /&gt;
== HPM Custom Packets ==&lt;br /&gt;
The HPM makes it possible for a plugin to add or override packets within all 3 servers&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Example:'''&lt;br /&gt;
 /* sample packet implementation */&lt;br /&gt;
 /* cmd 0xf3 - it is a client-server existent id, for clif_parse_GlobalMessage */&lt;br /&gt;
 /* in this sample we do nothing and simply redirect */&lt;br /&gt;
 void sample_packet0f3(int fd) {&lt;br /&gt;
 	struct map_session_data *sd = session[fd]-&amp;gt;session_data;&lt;br /&gt;
  	&lt;br /&gt;
 	if( !sd ) return;/* socket didn't fully log-in? this packet shouldn't do anything then! */&lt;br /&gt;
 &lt;br /&gt;
 	ShowInfo(&amp;quot;sample_packet0f3: Hello World! received 0xf3 for '%s', redirecting!\n&amp;quot;,sd-&amp;gt;status.name);&lt;br /&gt;
 &lt;br /&gt;
 	clif-&amp;gt;pGlobalMessage(fd,sd);&lt;br /&gt;
 }&lt;br /&gt;
 void plugin_init(void) {&lt;br /&gt;
 	addPacket(0xf3,-1,sample_packet0f3,hpClif_Parse);&lt;br /&gt;
 }&lt;br /&gt;
and voila, your plugin just changed the map server's '''0xf3''' packet to pass by '''sample_packet0f3''' prior to being sent to '''clif_parse_GlobalMessage'''&amp;lt;br/&amp;gt;&lt;br /&gt;
A full usage of this is demonstrated in the [[HPM]]'s sample {{git|src/plugins/sample.c}}&lt;br /&gt;
&lt;br /&gt;
== HPM Custom Data Structs ==&lt;br /&gt;
The HPM makes it possible for a plugin to create and append structs to existent data, this feature is currently supported on player units (map_session_data) and network pipes (socket_data)&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Example:'''&lt;br /&gt;
 /* can be of any size, using any data types */&lt;br /&gt;
 struct sample_data_struct {&lt;br /&gt;
 	struct point lastMSGPosition;&lt;br /&gt;
 	unsigned int someNumber;&lt;br /&gt;
 };&lt;br /&gt;
 /* appends/reads sample_data_struct in a network session data entry (socket_data) */&lt;br /&gt;
 void some_function_receiving_a_socket_fd(int fd) {&lt;br /&gt;
 	struct sample_data_struct *data;&lt;br /&gt;
 &lt;br /&gt;
 	if( !(data = HPMi-&amp;gt;getFromSession(session[fd],HPMi-&amp;gt;pid,0)) ) {&lt;br /&gt;
 		CREATE(data,struct sample_data_struct,1);&lt;br /&gt;
 		&lt;br /&gt;
 		data-&amp;gt;lastMSGPosition.map = 1;&lt;br /&gt;
 		data-&amp;gt;lastMSGPosition.x = 150;&lt;br /&gt;
 		data-&amp;gt;lastMSGPosition.y = 150;&lt;br /&gt;
 		data-&amp;gt;someNumber = rand()%777;&lt;br /&gt;
 		&lt;br /&gt;
 		ShowInfo(&amp;quot;Created Appended session[] data, %d %d %d %d\n&amp;quot;,data-&amp;gt;lastMSGPosition.map,data-&amp;gt;lastMSGPosition.x,data-&amp;gt;lastMSGPosition.y,data-&amp;gt;someNumber);&lt;br /&gt;
 		HPMi-&amp;gt;addToSession(session[fd],data,HPMi-&amp;gt;pid,0,true);&lt;br /&gt;
 	} else {&lt;br /&gt;
 		ShowInfo(&amp;quot;Existent Appended session[] data, %d %d %d %d\n&amp;quot;,data-&amp;gt;lastMSGPosition.map,data-&amp;gt;lastMSGPosition.x,data-&amp;gt;lastMSGPosition.y,data-&amp;gt;someNumber);&lt;br /&gt;
 		if( rand()%4 == 2 ) {&lt;br /&gt;
 			ShowInfo(&amp;quot;Removing Appended session[] data\n&amp;quot;);&lt;br /&gt;
 			HPMi-&amp;gt;removeFromSession(session[fd],HPMi-&amp;gt;pid,0);&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
and voila, your plugin becomes capable of appending and handling your custom struct data&amp;lt;br/&amp;gt;&lt;br /&gt;
A full usage of this is demonstrated in the [[HPM]]'s sample {{git|src/plugins/sample.c}}&lt;br /&gt;
== HPM Function Overloading ==&lt;br /&gt;
Thanks to [[Hercules Renewal Phase One]], you're capable of overloading all functions covered by the [[Hercules Renewal Phase One]] interfaces, with your plugin.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Example:'''&lt;br /&gt;
 int my_custom_check_target_function( struct block_list *src, struct block_list *target,int flag) {&lt;br /&gt;
 	//&amp;lt;...&amp;gt; code&lt;br /&gt;
 }&lt;br /&gt;
 void server_ready(void) {&lt;br /&gt;
 	battle = GET_SYMBOL(&amp;quot;battle&amp;quot;);&lt;br /&gt;
 	battle-&amp;gt;check_target = &amp;amp;my_custom_check_target_function;&lt;br /&gt;
 }&lt;br /&gt;
and voila, your plugin just overloaded the game server's '''battle_check_target''' function with your plugin's own, this is greatly handy to ensure your customs do not create conflicts when updating your [[Hercules|Hercules Repository]]&lt;br /&gt;
= Other Features =&lt;br /&gt;
Is there something you'd like to do with your plugin that requires modifications to [[HPM]]'s core? [http://hercules.ws/board/forum/55-suggestions/ let we know], and we'll do our best to make it happen.&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://hercules.ws/board/forum/55-suggestions/ Post your suggestions here]&lt;br /&gt;
= Support =&lt;br /&gt;
Need help writing your plugin? [http://hercules.ws/board/forum/26-source-support/ post your question on our support forum]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Hercules_Plugin_Manager</id>
		<title>Hercules Plugin Manager</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Hercules_Plugin_Manager"/>
				<updated>2013-12-06T07:15:20Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: /* HPM Script Commands */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Often referred to as the [[HPM]], the '''Hercules Plugin Manager''' is yet another [[Hercules Original]]&lt;br /&gt;
= Building a plugin =&lt;br /&gt;
While the [[C]] code for the plugin normally won't have discrepancies, in order to [[compile]] the plugin certain criteria must be met depending on your Operating System, there are 2 guides below, one for windows and other for everything else (which should work on any *nix distro, as well as on OSX).&lt;br /&gt;
;Windows&lt;br /&gt;
: [[Building HPM Plugin for MSVC]]&lt;br /&gt;
;All Others&lt;br /&gt;
: [[Building HPM Plugin for gcc]]&lt;br /&gt;
&lt;br /&gt;
= Creating a plugin =&lt;br /&gt;
After following the [[#Building_a_plugin|building a plugin]] guide, all thats left is for your plugin's code to be made, the following will guide you through the basics of how a [[HPM]] plugin works.&lt;br /&gt;
== HPM Events ==&lt;br /&gt;
Events are functions in a plugin that are triggered by the '''Hercules Plugin Mananger''' when they meet certain criteria.&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;void plugin_init (void)&amp;lt;/code&amp;gt;&lt;br /&gt;
** Triggered when the server starts&lt;br /&gt;
* &amp;lt;code&amp;gt;void plugin_final (void)&amp;lt;/code&amp;gt;&lt;br /&gt;
** Triggered when the server starts to shut itself down&lt;br /&gt;
* &amp;lt;code&amp;gt;void server_ready (void)&amp;lt;/code&amp;gt;&lt;br /&gt;
** Triggered after the server is done starting, and is online.&lt;br /&gt;
* &amp;lt;code&amp;gt;void server_post_final (void)&amp;lt;/code&amp;gt;&lt;br /&gt;
** Triggered after the server's main shutdown procedures are complete, core functionality such as memory manager, timer, and sockets are still available at this point.&lt;br /&gt;
With the [[HPM]] you only need to code the events your plugin will use.&lt;br /&gt;
== HPM Hooks ==&lt;br /&gt;
In Hercules, hooking is a simple operation, it is possible to hook an infinite number of times to the over 2k hookable functions (all the interfaced ones, accounting for over 99% of map server)&amp;lt;br/&amp;gt;&lt;br /&gt;
 HPExport void plugin_init (void) {&lt;br /&gt;
 	addHookPre(&amp;quot;pc-&amp;gt;dropitem&amp;quot;,my_pc_dropitem_preHook);  /* int my_pc_dropitem_preHook(struct map_session_data *sd,int *n,int *amount) */&lt;br /&gt;
 	addHookPost(&amp;quot;pc-&amp;gt;dropitem&amp;quot;,my_pc_dropitem_postHook);/* int my_pc_dropitem_postHook(int retVal, struct map_session_data *sd,int *n,int *amount) */&lt;br /&gt;
 }&lt;br /&gt;
Hooks receive all function params as pointers, whereas the original may be&lt;br /&gt;
 int pc_dropitem(struct map_session_data *sd,int n,int amount)&lt;br /&gt;
the one for the hook shall be&lt;br /&gt;
 (struct map_session_data *sd,int *n,int *amount)&lt;br /&gt;
which allows for hooks to modify any and all data as it pleases.&amp;lt;br/&amp;gt;&lt;br /&gt;
postHooks receive one additional param, which accounts for the result of the original function,&lt;br /&gt;
 int &amp;lt;name&amp;gt;(int retVal, struct map_session_data *sd,int *n,int *amount)&lt;br /&gt;
In this case it'd allow for the postHook to react properly to what the original returned, in this case (for pc_dropitem) 0 (failure) or 1 (success)&amp;lt;br/&amp;gt;&lt;br /&gt;
A full usage of this is demonstrated in the [[HPM]]'s sample {{git|src/plugins/sample.c}}&lt;br /&gt;
== HPM @commands ==&lt;br /&gt;
The [[HPM]] makes it very simple to provide [[@commands]] through plugins.&amp;lt;br/&amp;gt;&lt;br /&gt;
You define a new atcommand exactly as it'd normally be done in {{git|src/map/atcommand.c}}&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Example:'''&lt;br /&gt;
 ACMD(sample) {//@sample command - 5 params: const int fd, struct map_session_data* sd, const char* command, const char* message, struct AtCommandInfo *info&lt;br /&gt;
 	clif-&amp;gt;message(fd,&amp;quot;You used the @sample command!&amp;quot;);&lt;br /&gt;
 	ShowDebug(&amp;quot;I'm being run! message -&amp;gt; '%s' by '%s'\n&amp;quot;,message,sd-&amp;gt;status.name);&lt;br /&gt;
 	return true;&lt;br /&gt;
 }&lt;br /&gt;
After that you just have to link your new command, to do that you use the &amp;lt;code&amp;gt;void plugin_init (void)&amp;lt;/code&amp;gt; event.&lt;br /&gt;
 addAtcommand(&amp;quot;sample&amp;quot;,sample);&lt;br /&gt;
and voila, your plugin now adds the '''@sample''' command.&amp;lt;br/&amp;gt;&lt;br /&gt;
A full usage of this is demonstrated in the [[HPM]]'s sample {{git|src/plugins/sample.c}}&lt;br /&gt;
&lt;br /&gt;
As of [https://github.com/HerculesWS/Hercules/commit/778facb21f822cea549939c8dbee886e1cd342aa 778facb21f], atcommands loaded via plugins will overwrite default/original commands with the same name.&lt;br /&gt;
&lt;br /&gt;
== HPM Script Commands ==&lt;br /&gt;
The [[HPM]] makes it very simple to provide [[Category:Script_Command|script commands]] through plugins.&amp;lt;br/&amp;gt;&lt;br /&gt;
You define a new script command exactly as it'd normally be done in {{git|src/map/script.c}}&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Example:'''&lt;br /&gt;
 BUILDIN(sample) {//script command 'sample(num);' - 1 param: struct script_state* st&lt;br /&gt;
 	int arg = script_getnum(st,2);&lt;br /&gt;
 	ShowInfo(&amp;quot;I'm being run! arg -&amp;gt; '%d'\n&amp;quot;,arg);&lt;br /&gt;
 	return true;&lt;br /&gt;
 }&lt;br /&gt;
After that you just have to link your new script command, to do that you use the &amp;lt;code&amp;gt;void plugin_init (void)&amp;lt;/code&amp;gt; event.&lt;br /&gt;
 addScriptCommand(&amp;quot;sample&amp;quot;,&amp;quot;i&amp;quot;,sample); //note the 2nd param is this commands' arg-types (in this case, a number)&lt;br /&gt;
and voila, your plugin now adds the '''sample''' script command.&amp;lt;br/&amp;gt;&lt;br /&gt;
A full usage of this is demonstrated in the [[HPM]]'s sample {{git|src/plugins/sample.c}}&lt;br /&gt;
&lt;br /&gt;
== HPM Console Commands ==&lt;br /&gt;
The [[HPM]] makes it very simple to provide [[Category:Console_Command|console commands]] through plugins.&amp;lt;br/&amp;gt;&lt;br /&gt;
You define a new console command exactly as it'd normally be done in {{git|src/common/console.c}}&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Example:'''&lt;br /&gt;
 CPCMD(sample) {//console command 'sample' - 1 param: char *line&lt;br /&gt;
 	ShowInfo(&amp;quot;I'm being run! arg -&amp;gt; '%s'\n&amp;quot;,line?line:&amp;quot;NONE&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
After that you just have to link your new script command, to do that you use the &amp;lt;code&amp;gt;void plugin_init (void)&amp;lt;/code&amp;gt; event.&lt;br /&gt;
 addCPCommand(&amp;quot;this:is:a:sample&amp;quot;,CPCMD_A(sample)); // note the first param is the path to this command, in this case it translates to 'this is a sample' and everything afterwards is the commands' params&lt;br /&gt;
and voila, your plugin now adds the '''sample''' console command.&amp;lt;br/&amp;gt;&lt;br /&gt;
A full usage of this is demonstrated in the [[HPM]]'s sample {{git|src/plugins/sample.c}}&lt;br /&gt;
== HPM Custom Packets ==&lt;br /&gt;
The HPM makes it possible for a plugin to add or override packets within all 3 servers&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Example:'''&lt;br /&gt;
 /* sample packet implementation */&lt;br /&gt;
 /* cmd 0xf3 - it is a client-server existent id, for clif_parse_GlobalMessage */&lt;br /&gt;
 /* in this sample we do nothing and simply redirect */&lt;br /&gt;
 void sample_packet0f3(int fd) {&lt;br /&gt;
 	struct map_session_data *sd = session[fd]-&amp;gt;session_data;&lt;br /&gt;
  	&lt;br /&gt;
 	if( !sd ) return;/* socket didn't fully log-in? this packet shouldn't do anything then! */&lt;br /&gt;
 &lt;br /&gt;
 	ShowInfo(&amp;quot;sample_packet0f3: Hello World! received 0xf3 for '%s', redirecting!\n&amp;quot;,sd-&amp;gt;status.name);&lt;br /&gt;
 &lt;br /&gt;
 	clif-&amp;gt;pGlobalMessage(fd,sd);&lt;br /&gt;
 }&lt;br /&gt;
 void plugin_init(void) {&lt;br /&gt;
 	HPMi-&amp;gt;addPacket(0xf3,-1,sample_packet0f3,hpClif_Parse,HPMi-&amp;gt;pid);&lt;br /&gt;
 }&lt;br /&gt;
and voila, your plugin just changed the map server's '''0xf3''' packet to pass by '''sample_packet0f3''' prior to being sent to '''clif_parse_GlobalMessage'''&amp;lt;br/&amp;gt;&lt;br /&gt;
A full usage of this is demonstrated in the [[HPM]]'s sample {{git|src/plugins/sample.c}}&lt;br /&gt;
== HPM Custom Data Structs ==&lt;br /&gt;
The HPM makes it possible for a plugin to create and append structs to existent data, this feature is currently supported on player units (map_session_data) and network pipes (socket_data)&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Example:'''&lt;br /&gt;
 /* can be of any size, using any data types */&lt;br /&gt;
 struct sample_data_struct {&lt;br /&gt;
 	struct point lastMSGPosition;&lt;br /&gt;
 	unsigned int someNumber;&lt;br /&gt;
 };&lt;br /&gt;
 /* appends/reads sample_data_struct in a network session data entry (socket_data) */&lt;br /&gt;
 void some_function_receiving_a_socket_fd(int fd) {&lt;br /&gt;
 	struct sample_data_struct *data;&lt;br /&gt;
 &lt;br /&gt;
 	if( !(data = HPMi-&amp;gt;getFromSession(session[fd],HPMi-&amp;gt;pid,0)) ) {&lt;br /&gt;
 		CREATE(data,struct sample_data_struct,1);&lt;br /&gt;
 		&lt;br /&gt;
 		data-&amp;gt;lastMSGPosition.map = 1;&lt;br /&gt;
 		data-&amp;gt;lastMSGPosition.x = 150;&lt;br /&gt;
 		data-&amp;gt;lastMSGPosition.y = 150;&lt;br /&gt;
 		data-&amp;gt;someNumber = rand()%777;&lt;br /&gt;
 		&lt;br /&gt;
 		ShowInfo(&amp;quot;Created Appended session[] data, %d %d %d %d\n&amp;quot;,data-&amp;gt;lastMSGPosition.map,data-&amp;gt;lastMSGPosition.x,data-&amp;gt;lastMSGPosition.y,data-&amp;gt;someNumber);&lt;br /&gt;
 		HPMi-&amp;gt;addToSession(session[fd],data,HPMi-&amp;gt;pid,0,true);&lt;br /&gt;
 	} else {&lt;br /&gt;
 		ShowInfo(&amp;quot;Existent Appended session[] data, %d %d %d %d\n&amp;quot;,data-&amp;gt;lastMSGPosition.map,data-&amp;gt;lastMSGPosition.x,data-&amp;gt;lastMSGPosition.y,data-&amp;gt;someNumber);&lt;br /&gt;
 		if( rand()%4 == 2 ) {&lt;br /&gt;
 			ShowInfo(&amp;quot;Removing Appended session[] data\n&amp;quot;);&lt;br /&gt;
 			HPMi-&amp;gt;removeFromSession(session[fd],HPMi-&amp;gt;pid,0);&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
and voila, your plugin becomes capable of appending and handling your custom struct data&amp;lt;br/&amp;gt;&lt;br /&gt;
A full usage of this is demonstrated in the [[HPM]]'s sample {{git|src/plugins/sample.c}}&lt;br /&gt;
== HPM Function Overloading ==&lt;br /&gt;
Thanks to [[Hercules Renewal Phase One]], you're capable of overloading all functions covered by the [[Hercules Renewal Phase One]] interfaces, with your plugin.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Example:'''&lt;br /&gt;
 int my_custom_check_target_function( struct block_list *src, struct block_list *target,int flag) {&lt;br /&gt;
 	//&amp;lt;...&amp;gt; code&lt;br /&gt;
 }&lt;br /&gt;
 void server_ready(void) {&lt;br /&gt;
 	battle = GET_SYMBOL(&amp;quot;battle&amp;quot;);&lt;br /&gt;
 	battle-&amp;gt;check_target = &amp;amp;my_custom_check_target_function;&lt;br /&gt;
 }&lt;br /&gt;
and voila, your plugin just overloaded the game server's '''battle_check_target''' function with your plugin's own, this is greatly handy to ensure your customs do not create conflicts when updating your [[Hercules|Hercules Repository]]&lt;br /&gt;
= Other Features =&lt;br /&gt;
Is there something you'd like to do with your plugin that requires modifications to [[HPM]]'s core? [http://hercules.ws/board/forum/55-suggestions/ let we know], and we'll do our best to make it happen.&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://hercules.ws/board/forum/55-suggestions/ Post your suggestions here]&lt;br /&gt;
= Support =&lt;br /&gt;
Need help writing your plugin? [http://hercules.ws/board/forum/26-source-support/ post your question on our support forum]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Hercules_Plugin_Manager</id>
		<title>Hercules Plugin Manager</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Hercules_Plugin_Manager"/>
				<updated>2013-12-06T07:13:45Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: /* HPM @commands */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Often referred to as the [[HPM]], the '''Hercules Plugin Manager''' is yet another [[Hercules Original]]&lt;br /&gt;
= Building a plugin =&lt;br /&gt;
While the [[C]] code for the plugin normally won't have discrepancies, in order to [[compile]] the plugin certain criteria must be met depending on your Operating System, there are 2 guides below, one for windows and other for everything else (which should work on any *nix distro, as well as on OSX).&lt;br /&gt;
;Windows&lt;br /&gt;
: [[Building HPM Plugin for MSVC]]&lt;br /&gt;
;All Others&lt;br /&gt;
: [[Building HPM Plugin for gcc]]&lt;br /&gt;
&lt;br /&gt;
= Creating a plugin =&lt;br /&gt;
After following the [[#Building_a_plugin|building a plugin]] guide, all thats left is for your plugin's code to be made, the following will guide you through the basics of how a [[HPM]] plugin works.&lt;br /&gt;
== HPM Events ==&lt;br /&gt;
Events are functions in a plugin that are triggered by the '''Hercules Plugin Mananger''' when they meet certain criteria.&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;void plugin_init (void)&amp;lt;/code&amp;gt;&lt;br /&gt;
** Triggered when the server starts&lt;br /&gt;
* &amp;lt;code&amp;gt;void plugin_final (void)&amp;lt;/code&amp;gt;&lt;br /&gt;
** Triggered when the server starts to shut itself down&lt;br /&gt;
* &amp;lt;code&amp;gt;void server_ready (void)&amp;lt;/code&amp;gt;&lt;br /&gt;
** Triggered after the server is done starting, and is online.&lt;br /&gt;
* &amp;lt;code&amp;gt;void server_post_final (void)&amp;lt;/code&amp;gt;&lt;br /&gt;
** Triggered after the server's main shutdown procedures are complete, core functionality such as memory manager, timer, and sockets are still available at this point.&lt;br /&gt;
With the [[HPM]] you only need to code the events your plugin will use.&lt;br /&gt;
== HPM Hooks ==&lt;br /&gt;
In Hercules, hooking is a simple operation, it is possible to hook an infinite number of times to the over 2k hookable functions (all the interfaced ones, accounting for over 99% of map server)&amp;lt;br/&amp;gt;&lt;br /&gt;
 HPExport void plugin_init (void) {&lt;br /&gt;
 	addHookPre(&amp;quot;pc-&amp;gt;dropitem&amp;quot;,my_pc_dropitem_preHook);  /* int my_pc_dropitem_preHook(struct map_session_data *sd,int *n,int *amount) */&lt;br /&gt;
 	addHookPost(&amp;quot;pc-&amp;gt;dropitem&amp;quot;,my_pc_dropitem_postHook);/* int my_pc_dropitem_postHook(int retVal, struct map_session_data *sd,int *n,int *amount) */&lt;br /&gt;
 }&lt;br /&gt;
Hooks receive all function params as pointers, whereas the original may be&lt;br /&gt;
 int pc_dropitem(struct map_session_data *sd,int n,int amount)&lt;br /&gt;
the one for the hook shall be&lt;br /&gt;
 (struct map_session_data *sd,int *n,int *amount)&lt;br /&gt;
which allows for hooks to modify any and all data as it pleases.&amp;lt;br/&amp;gt;&lt;br /&gt;
postHooks receive one additional param, which accounts for the result of the original function,&lt;br /&gt;
 int &amp;lt;name&amp;gt;(int retVal, struct map_session_data *sd,int *n,int *amount)&lt;br /&gt;
In this case it'd allow for the postHook to react properly to what the original returned, in this case (for pc_dropitem) 0 (failure) or 1 (success)&amp;lt;br/&amp;gt;&lt;br /&gt;
A full usage of this is demonstrated in the [[HPM]]'s sample {{git|src/plugins/sample.c}}&lt;br /&gt;
== HPM @commands ==&lt;br /&gt;
The [[HPM]] makes it very simple to provide [[@commands]] through plugins.&amp;lt;br/&amp;gt;&lt;br /&gt;
You define a new atcommand exactly as it'd normally be done in {{git|src/map/atcommand.c}}&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Example:'''&lt;br /&gt;
 ACMD(sample) {//@sample command - 5 params: const int fd, struct map_session_data* sd, const char* command, const char* message, struct AtCommandInfo *info&lt;br /&gt;
 	clif-&amp;gt;message(fd,&amp;quot;You used the @sample command!&amp;quot;);&lt;br /&gt;
 	ShowDebug(&amp;quot;I'm being run! message -&amp;gt; '%s' by '%s'\n&amp;quot;,message,sd-&amp;gt;status.name);&lt;br /&gt;
 	return true;&lt;br /&gt;
 }&lt;br /&gt;
After that you just have to link your new command, to do that you use the &amp;lt;code&amp;gt;void plugin_init (void)&amp;lt;/code&amp;gt; event.&lt;br /&gt;
 addAtcommand(&amp;quot;sample&amp;quot;,sample);&lt;br /&gt;
and voila, your plugin now adds the '''@sample''' command.&amp;lt;br/&amp;gt;&lt;br /&gt;
A full usage of this is demonstrated in the [[HPM]]'s sample {{git|src/plugins/sample.c}}&lt;br /&gt;
&lt;br /&gt;
As of [https://github.com/HerculesWS/Hercules/commit/778facb21f822cea549939c8dbee886e1cd342aa 778facb21f], atcommands loaded via plugins will overwrite default/original commands with the same name.&lt;br /&gt;
&lt;br /&gt;
== HPM Script Commands ==&lt;br /&gt;
The [[HPM]] makes it very simple to provide [[Category:Script_Command|script commands]] through plugins.&amp;lt;br/&amp;gt;&lt;br /&gt;
You define a new script command exactly as it'd normally be done in {{git|src/map/script.c}}&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Example:'''&lt;br /&gt;
 BUILDIN(sample) {//script command 'sample(num);' - 1 param: struct script_state* st&lt;br /&gt;
 	int arg = script_getnum(st,2);&lt;br /&gt;
 	ShowInfo(&amp;quot;I'm being run! arg -&amp;gt; '%d'\n&amp;quot;,arg);&lt;br /&gt;
 	return true;&lt;br /&gt;
 }&lt;br /&gt;
After that you just have to link your new script command, to do that you use the &amp;lt;code&amp;gt;void plugin_init (void)&amp;lt;/code&amp;gt; event.&lt;br /&gt;
 HPMi-&amp;gt;addScript(&amp;quot;sample&amp;quot;,&amp;quot;i&amp;quot;,BUILDIN_A(sample)); //note the 2nd param is this commands' arg-types (in this case, a number)&lt;br /&gt;
and voila, your plugin now adds the '''sample''' script command.&amp;lt;br/&amp;gt;&lt;br /&gt;
A full usage of this is demonstrated in the [[HPM]]'s sample {{git|src/plugins/sample.c}}&lt;br /&gt;
== HPM Console Commands ==&lt;br /&gt;
The [[HPM]] makes it very simple to provide [[Category:Console_Command|console commands]] through plugins.&amp;lt;br/&amp;gt;&lt;br /&gt;
You define a new console command exactly as it'd normally be done in {{git|src/common/console.c}}&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Example:'''&lt;br /&gt;
 CPCMD(sample) {//console command 'sample' - 1 param: char *line&lt;br /&gt;
 	ShowInfo(&amp;quot;I'm being run! arg -&amp;gt; '%s'\n&amp;quot;,line?line:&amp;quot;NONE&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
After that you just have to link your new script command, to do that you use the &amp;lt;code&amp;gt;void plugin_init (void)&amp;lt;/code&amp;gt; event.&lt;br /&gt;
 addCPCommand(&amp;quot;this:is:a:sample&amp;quot;,CPCMD_A(sample)); // note the first param is the path to this command, in this case it translates to 'this is a sample' and everything afterwards is the commands' params&lt;br /&gt;
and voila, your plugin now adds the '''sample''' console command.&amp;lt;br/&amp;gt;&lt;br /&gt;
A full usage of this is demonstrated in the [[HPM]]'s sample {{git|src/plugins/sample.c}}&lt;br /&gt;
== HPM Custom Packets ==&lt;br /&gt;
The HPM makes it possible for a plugin to add or override packets within all 3 servers&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Example:'''&lt;br /&gt;
 /* sample packet implementation */&lt;br /&gt;
 /* cmd 0xf3 - it is a client-server existent id, for clif_parse_GlobalMessage */&lt;br /&gt;
 /* in this sample we do nothing and simply redirect */&lt;br /&gt;
 void sample_packet0f3(int fd) {&lt;br /&gt;
 	struct map_session_data *sd = session[fd]-&amp;gt;session_data;&lt;br /&gt;
  	&lt;br /&gt;
 	if( !sd ) return;/* socket didn't fully log-in? this packet shouldn't do anything then! */&lt;br /&gt;
 &lt;br /&gt;
 	ShowInfo(&amp;quot;sample_packet0f3: Hello World! received 0xf3 for '%s', redirecting!\n&amp;quot;,sd-&amp;gt;status.name);&lt;br /&gt;
 &lt;br /&gt;
 	clif-&amp;gt;pGlobalMessage(fd,sd);&lt;br /&gt;
 }&lt;br /&gt;
 void plugin_init(void) {&lt;br /&gt;
 	HPMi-&amp;gt;addPacket(0xf3,-1,sample_packet0f3,hpClif_Parse,HPMi-&amp;gt;pid);&lt;br /&gt;
 }&lt;br /&gt;
and voila, your plugin just changed the map server's '''0xf3''' packet to pass by '''sample_packet0f3''' prior to being sent to '''clif_parse_GlobalMessage'''&amp;lt;br/&amp;gt;&lt;br /&gt;
A full usage of this is demonstrated in the [[HPM]]'s sample {{git|src/plugins/sample.c}}&lt;br /&gt;
== HPM Custom Data Structs ==&lt;br /&gt;
The HPM makes it possible for a plugin to create and append structs to existent data, this feature is currently supported on player units (map_session_data) and network pipes (socket_data)&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Example:'''&lt;br /&gt;
 /* can be of any size, using any data types */&lt;br /&gt;
 struct sample_data_struct {&lt;br /&gt;
 	struct point lastMSGPosition;&lt;br /&gt;
 	unsigned int someNumber;&lt;br /&gt;
 };&lt;br /&gt;
 /* appends/reads sample_data_struct in a network session data entry (socket_data) */&lt;br /&gt;
 void some_function_receiving_a_socket_fd(int fd) {&lt;br /&gt;
 	struct sample_data_struct *data;&lt;br /&gt;
 &lt;br /&gt;
 	if( !(data = HPMi-&amp;gt;getFromSession(session[fd],HPMi-&amp;gt;pid,0)) ) {&lt;br /&gt;
 		CREATE(data,struct sample_data_struct,1);&lt;br /&gt;
 		&lt;br /&gt;
 		data-&amp;gt;lastMSGPosition.map = 1;&lt;br /&gt;
 		data-&amp;gt;lastMSGPosition.x = 150;&lt;br /&gt;
 		data-&amp;gt;lastMSGPosition.y = 150;&lt;br /&gt;
 		data-&amp;gt;someNumber = rand()%777;&lt;br /&gt;
 		&lt;br /&gt;
 		ShowInfo(&amp;quot;Created Appended session[] data, %d %d %d %d\n&amp;quot;,data-&amp;gt;lastMSGPosition.map,data-&amp;gt;lastMSGPosition.x,data-&amp;gt;lastMSGPosition.y,data-&amp;gt;someNumber);&lt;br /&gt;
 		HPMi-&amp;gt;addToSession(session[fd],data,HPMi-&amp;gt;pid,0,true);&lt;br /&gt;
 	} else {&lt;br /&gt;
 		ShowInfo(&amp;quot;Existent Appended session[] data, %d %d %d %d\n&amp;quot;,data-&amp;gt;lastMSGPosition.map,data-&amp;gt;lastMSGPosition.x,data-&amp;gt;lastMSGPosition.y,data-&amp;gt;someNumber);&lt;br /&gt;
 		if( rand()%4 == 2 ) {&lt;br /&gt;
 			ShowInfo(&amp;quot;Removing Appended session[] data\n&amp;quot;);&lt;br /&gt;
 			HPMi-&amp;gt;removeFromSession(session[fd],HPMi-&amp;gt;pid,0);&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
and voila, your plugin becomes capable of appending and handling your custom struct data&amp;lt;br/&amp;gt;&lt;br /&gt;
A full usage of this is demonstrated in the [[HPM]]'s sample {{git|src/plugins/sample.c}}&lt;br /&gt;
== HPM Function Overloading ==&lt;br /&gt;
Thanks to [[Hercules Renewal Phase One]], you're capable of overloading all functions covered by the [[Hercules Renewal Phase One]] interfaces, with your plugin.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Example:'''&lt;br /&gt;
 int my_custom_check_target_function( struct block_list *src, struct block_list *target,int flag) {&lt;br /&gt;
 	//&amp;lt;...&amp;gt; code&lt;br /&gt;
 }&lt;br /&gt;
 void server_ready(void) {&lt;br /&gt;
 	battle = GET_SYMBOL(&amp;quot;battle&amp;quot;);&lt;br /&gt;
 	battle-&amp;gt;check_target = &amp;amp;my_custom_check_target_function;&lt;br /&gt;
 }&lt;br /&gt;
and voila, your plugin just overloaded the game server's '''battle_check_target''' function with your plugin's own, this is greatly handy to ensure your customs do not create conflicts when updating your [[Hercules|Hercules Repository]]&lt;br /&gt;
= Other Features =&lt;br /&gt;
Is there something you'd like to do with your plugin that requires modifications to [[HPM]]'s core? [http://hercules.ws/board/forum/55-suggestions/ let we know], and we'll do our best to make it happen.&amp;lt;br/&amp;gt;&lt;br /&gt;
[http://hercules.ws/board/forum/55-suggestions/ Post your suggestions here]&lt;br /&gt;
= Support =&lt;br /&gt;
Need help writing your plugin? [http://hercules.ws/board/forum/26-source-support/ post your question on our support forum]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Hercules_Original</id>
		<title>Hercules Original</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Hercules_Original"/>
				<updated>2013-12-06T06:18:19Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of [[Hercules Original|Original Hercules Features]]&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;'''[New]'''&amp;lt;/span&amp;gt;[http://hercules.ws/board/topic/2954-item-db-file-structure-overhaul/ Item DB File Structure Overhaul]&lt;br /&gt;
* [http://hercules.ws/board/topic/302-introducing-hercules-map-zone-database/ Hercules Map Zone DB]&lt;br /&gt;
* [[HPM|Hercules Plugin Mananger]]&lt;br /&gt;
* [http://hercules.ws/board/topic/316-introducing-hercules-channel-system/ Hercules Channel System]&lt;br /&gt;
* [http://hercules.ws/board/topic/353-packetdb-overhaul/ Packet DB Overhaul]&lt;br /&gt;
* [http://hercules.ws/board/topic/548-hercules-console-input-update/ Console Input Redesign]&lt;br /&gt;
[[Category:Hercules]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Adding_a_Script</id>
		<title>Adding a Script</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Adding_a_Script"/>
				<updated>2013-12-06T04:19:07Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: /* Lua */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Adding and Activating Scripts ==&lt;br /&gt;
Scripts are usually kept in the ''npc'' folder for the sake of organization even though scripts can contain more than a mere NPC.  All files are saved as text files.  Scripts cannot be loaded on to the server unless their text file is activated in a *.conf file.&lt;br /&gt;
&lt;br /&gt;
=== A New Script ===&lt;br /&gt;
New scripts must be saved as a text file first.  The file may be located anywhere in the Hercules directory, but is in the ''npc'' folder by default.&lt;br /&gt;
&lt;br /&gt;
=== Configuration Files ===&lt;br /&gt;
Any text editor may be used to edit *.conf files.  The ''npc/*.conf'' files are used to determine which script text files should be loaded.  There are about a dozen *.conf that handle different groups of scripts for the purpose of organization.  It does not matter which *.conf holds your custom scripts as long as the path is correct.&lt;br /&gt;
&lt;br /&gt;
Typical *.conf entry layout:&lt;br /&gt;
 npc: npc/path/to/yourscript1.txt&lt;br /&gt;
 // npc: npc/path/to/yourscript2.txt&lt;br /&gt;
Note how the second line is preceded with a double slash.  Content on the same line after double slashes will not be parsed.  In other words, ''script2.txt'' will not be loaded.  The slashes can be used to write comments.&lt;br /&gt;
&lt;br /&gt;
{{git|npc/scripts_main.conf}} determines which of the *.conf will be read by the server.&lt;br /&gt;
 import: npc/path/to/configuration.conf&lt;br /&gt;
&lt;br /&gt;
=== The NPC in Game ===&lt;br /&gt;
After adding the script, it must be loaded before the script contents take effect in game.  There are a few ways to do this.&lt;br /&gt;
* The map server can be rebooted.  This is generally the safest route though not the most convenient for active servers.&lt;br /&gt;
* The GM command '''@reloadscript''' maybe used in game, though this may cause monster spawn bugs.&lt;br /&gt;
* If a script needs to be reloaded because it has been edited, the GM commands '''@loadnpc''' and '''@unloadnpc''' may be used.  This method is not convenient for script texts that contain multiple NPCs.&lt;br /&gt;
&lt;br /&gt;
== Client Side ==&lt;br /&gt;
The NPC name used in examples is &amp;quot;Teddy&amp;quot;.&lt;br /&gt;
===Lua===&lt;br /&gt;
The two files you will need to open and edit are &amp;quot;jobname.lua&amp;quot; and &amp;quot;npcidentity.lua&amp;quot;. Jobname.lua will look like:&lt;br /&gt;
&lt;br /&gt;
 	[jobtbl.NPCNAME] = &amp;quot;NPCNAME&amp;quot;,&lt;br /&gt;
Example:&lt;br /&gt;
 	[jobtbl.TEDDY] = &amp;quot;TEDDY&amp;quot;,&lt;br /&gt;
npcidentity.lua will look like:&lt;br /&gt;
 	[&amp;quot;NPCNAME&amp;quot;] = NPCID,&lt;br /&gt;
Example:&lt;br /&gt;
 	[&amp;quot;TEDDY&amp;quot;] = 587,&lt;br /&gt;
If your NPC has spaces in its name, its best to either remove them or replace them with underscores. So if the NPC's name was Brown Teddy the sprite's name would be Brown_Teddy.spr or BrownTeddy.spr and the lua files would be BROWN_TEDDY or BROWNTEDDY. Whatever ID you choose for your sprite neither NPC's name or ID will be use in the script. The beginning of my script will look like:&lt;br /&gt;
&lt;br /&gt;
 	xmas_in,111,107,3	script	Teddy	587,{&lt;br /&gt;
 	xmas_in,111,107,3	script	Teddy	TEDDY,{&lt;br /&gt;
&lt;br /&gt;
===Sprite===&lt;br /&gt;
The sprite part is straightforward, just Teddy.spr is fine, you don't need Teddy_m.spr or anything like that, but if you want to add m for male to the name you can do that, but it won't effect its functionality in-game. NPC sprites are located in data/sprite/npc.&lt;br /&gt;
&lt;br /&gt;
== Tips &amp;amp; Hints ==&lt;br /&gt;
* If you are copy/pasting a script from a forum, be sure to check that the tabs are still intact.&lt;br /&gt;
* Remember that paths and file names are case sensitive.&lt;br /&gt;
* Remember to save after editing.&lt;br /&gt;
* Create your own NPC folder and *.conf file.  This will make it much easier to keep track of your own scripts and can reduce the hassle when merging new revisions of rA.  Follow the basic layout of the other *.conf files and remember to import the *.conf in {{git|npc/scripts_main.conf}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Autobonus</id>
		<title>Autobonus</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Autobonus"/>
				<updated>2013-12-05T12:46:27Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Syntax ==&lt;br /&gt;
* [[autobonus]] &amp;lt;bonus script&amp;gt;,&amp;lt;rate&amp;gt;,&amp;lt;duration&amp;gt;{,&amp;lt;flag&amp;gt;,{&amp;lt;other script&amp;gt;}};&lt;br /&gt;
* autobonus2 &amp;lt;bonus script&amp;gt;,&amp;lt;rate&amp;gt;,&amp;lt;duration&amp;gt;{,&amp;lt;flag&amp;gt;,{&amp;lt;other script&amp;gt;}};&lt;br /&gt;
* autobonus3 &amp;lt;bonus script&amp;gt;,&amp;lt;rate&amp;gt;,&amp;lt;duration&amp;gt;,&amp;lt;skill id&amp;gt;,{&amp;lt;other script&amp;gt;};&lt;br /&gt;
* autobonus3 &amp;lt;bonus script&amp;gt;,&amp;lt;rate&amp;gt;,&amp;lt;duration&amp;gt;,&amp;quot;&amp;lt;skill name&amp;gt;&amp;quot;,{&amp;lt;other script&amp;gt;};&lt;br /&gt;
== Description ==&lt;br /&gt;
These commands are meant to be used in item scripts. They will probably &lt;br /&gt;
work outside item scripts, but the bonus will not persist for long. They, &lt;br /&gt;
as expected, refer only to an invoking character.&lt;br /&gt;
&lt;br /&gt;
What these commands do is '''attach''' a script to the player which will get&lt;br /&gt;
executed on attack (or when attacked in the case of autobonus2).&lt;br /&gt;
&lt;br /&gt;
Rate is the trigger rate of the script (10000 = 100%). &lt;br /&gt;
&lt;br /&gt;
Duration is the time that the bonus will last for since the script has &lt;br /&gt;
triggered.&lt;br /&gt;
&lt;br /&gt;
Skill ID/skill name the skill which will be used as trigger to start the &lt;br /&gt;
bonus (for autobonus3).&lt;br /&gt;
&lt;br /&gt;
The optional argument 'flag' is used to classify the type of attack where &lt;br /&gt;
the script can trigger (it shares the same flags as the bAutoSpell bonus &lt;br /&gt;
script):&lt;br /&gt;
&lt;br /&gt;
 Range criteria:&lt;br /&gt;
 	BF_SHORT:  Trigger on melee attack&lt;br /&gt;
 	BF_LONG:   Trigger on ranged attack&lt;br /&gt;
 	Default:   BF_SHORT+BF_LONG&lt;br /&gt;
 Attack type criteria:&lt;br /&gt;
 	BF_WEAPON: Trigger on weapon skills &lt;br /&gt;
 	BF_MAGIC:  Trigger on magic skills &lt;br /&gt;
 	BF_MISC:   Trigger on misc skills&lt;br /&gt;
 	Default:   BF_WEAPON&lt;br /&gt;
 Skill criteria:&lt;br /&gt;
 	BF_NORMAL: Trigger on normal attacks&lt;br /&gt;
 	BF_SKILL:  Trigger on skills&lt;br /&gt;
 	default:   If the attack type is BF_WEAPON (only) BF_NORMAL is used,&lt;br /&gt;
 		       otherwise BF_SKILL+BF_NORMAL is used.&lt;br /&gt;
&lt;br /&gt;
The difference between the optional argument '''other script''' and the '''bonus &lt;br /&gt;
script''' is that, the former one triggers only when attacking (or attacked) &lt;br /&gt;
and the latter one runs on status calculation as well, which makes sure, &lt;br /&gt;
within the duration, the ''bonus''that get lost on status calculation is &lt;br /&gt;
restored. So, '''bonus script''' is technically supposed to accept ''bonus''&lt;br /&gt;
command only. And we usually use '''other script''' to show visual effects.&lt;br /&gt;
&lt;br /&gt;
:In all cases, when the script triggers, the attached player will be the &lt;br /&gt;
:one who holds the bonus. There is currently no way of knowing within this &lt;br /&gt;
:script who was the other character (the attacker in autobonus2, or the &lt;br /&gt;
:target in autobonus and autobonus3).&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
 //Grants a 1% chance of starting the state &amp;quot;all stats +10&amp;quot; for 10 seconds &lt;br /&gt;
 //when using weapon or misc attacks (both melee and ranged skills) and &lt;br /&gt;
 //shows a special effect when the bonus is active.&lt;br /&gt;
 	autobonus &amp;quot;{ bonus bAllStats,10; }&amp;quot;,10,10000,BF_WEAPON|BF_MISC,&amp;quot;{ specialeffect2 EF_FIRESPLASHHIT; }&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
[[Category:Script Commands]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Autobonus</id>
		<title>Autobonus</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Autobonus"/>
				<updated>2013-12-05T12:44:58Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: Created page with &amp;quot;== Syntax == *autobonus &amp;lt;bonus script&amp;gt;,&amp;lt;rate&amp;gt;,&amp;lt;duration&amp;gt;{,&amp;lt;flag&amp;gt;,{&amp;lt;other script&amp;gt;}}; *autobonus2 &amp;lt;bonus script&amp;gt;,&amp;lt;rate&amp;gt;,&amp;lt;duration&amp;gt;{,&amp;lt;flag&amp;gt;,{&amp;lt;other script&amp;gt;}}; *autobonus3 &amp;lt;bonus ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Syntax ==&lt;br /&gt;
*autobonus &amp;lt;bonus script&amp;gt;,&amp;lt;rate&amp;gt;,&amp;lt;duration&amp;gt;{,&amp;lt;flag&amp;gt;,{&amp;lt;other script&amp;gt;}};&lt;br /&gt;
*autobonus2 &amp;lt;bonus script&amp;gt;,&amp;lt;rate&amp;gt;,&amp;lt;duration&amp;gt;{,&amp;lt;flag&amp;gt;,{&amp;lt;other script&amp;gt;}};&lt;br /&gt;
*autobonus3 &amp;lt;bonus script&amp;gt;,&amp;lt;rate&amp;gt;,&amp;lt;duration&amp;gt;,&amp;lt;skill id&amp;gt;,{&amp;lt;other script&amp;gt;};&lt;br /&gt;
*autobonus3 &amp;lt;bonus script&amp;gt;,&amp;lt;rate&amp;gt;,&amp;lt;duration&amp;gt;,&amp;quot;&amp;lt;skill name&amp;gt;&amp;quot;,{&amp;lt;other script&amp;gt;};&lt;br /&gt;
== Description ==&lt;br /&gt;
These commands are meant to be used in item scripts. They will probably &lt;br /&gt;
work outside item scripts, but the bonus will not persist for long. They, &lt;br /&gt;
as expected, refer only to an invoking character.&lt;br /&gt;
&lt;br /&gt;
What these commands do is '''attach''' a script to the player which will get&lt;br /&gt;
executed on attack (or when attacked in the case of autobonus2).&lt;br /&gt;
&lt;br /&gt;
Rate is the trigger rate of the script (10000 = 100%). &lt;br /&gt;
&lt;br /&gt;
Duration is the time that the bonus will last for since the script has &lt;br /&gt;
triggered.&lt;br /&gt;
&lt;br /&gt;
Skill ID/skill name the skill which will be used as trigger to start the &lt;br /&gt;
bonus (for autobonus3).&lt;br /&gt;
&lt;br /&gt;
The optional argument 'flag' is used to classify the type of attack where &lt;br /&gt;
the script can trigger (it shares the same flags as the bAutoSpell bonus &lt;br /&gt;
script):&lt;br /&gt;
&lt;br /&gt;
 Range criteria:&lt;br /&gt;
 	BF_SHORT:  Trigger on melee attack&lt;br /&gt;
 	BF_LONG:   Trigger on ranged attack&lt;br /&gt;
 	Default:   BF_SHORT+BF_LONG&lt;br /&gt;
 Attack type criteria:&lt;br /&gt;
 	BF_WEAPON: Trigger on weapon skills &lt;br /&gt;
 	BF_MAGIC:  Trigger on magic skills &lt;br /&gt;
 	BF_MISC:   Trigger on misc skills&lt;br /&gt;
 	Default:   BF_WEAPON&lt;br /&gt;
 Skill criteria:&lt;br /&gt;
 	BF_NORMAL: Trigger on normal attacks&lt;br /&gt;
 	BF_SKILL:  Trigger on skills&lt;br /&gt;
 	default:   If the attack type is BF_WEAPON (only) BF_NORMAL is used,&lt;br /&gt;
 		       otherwise BF_SKILL+BF_NORMAL is used.&lt;br /&gt;
&lt;br /&gt;
The difference between the optional argument '''other script''' and the '''bonus &lt;br /&gt;
script''' is that, the former one triggers only when attacking (or attacked) &lt;br /&gt;
and the latter one runs on status calculation as well, which makes sure, &lt;br /&gt;
within the duration, the ''bonus''that get lost on status calculation is &lt;br /&gt;
restored. So, '''bonus script''' is technically supposed to accept ''bonus''&lt;br /&gt;
command only. And we usually use '''other script''' to show visual effects.&lt;br /&gt;
&lt;br /&gt;
:In all cases, when the script triggers, the attached player will be the &lt;br /&gt;
:one who holds the bonus. There is currently no way of knowing within this &lt;br /&gt;
:script who was the other character (the attacker in autobonus2, or the &lt;br /&gt;
:target in autobonus and autobonus3).&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
//Grants a 1% chance of starting the state &amp;quot;all stats +10&amp;quot; for 10 seconds &lt;br /&gt;
//when using weapon or misc attacks (both melee and ranged skills) and &lt;br /&gt;
//shows a special effect when the bonus is active.&lt;br /&gt;
	autobonus &amp;quot;{ bonus bAllStats,10; }&amp;quot;,10,10000,BF_WEAPON|BF_MISC,&amp;quot;{ specialeffect2 EF_FIRESPLASHHIT; }&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
[[Category:Script Commands]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Compiling/Windows</id>
		<title>Compiling/Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Compiling/Windows"/>
				<updated>2013-12-05T05:54:02Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: /* Using Visual Studio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For compiling on Windows, Visual Studio is the preferred method, although using Cygwin is also possible.&lt;br /&gt;
&lt;br /&gt;
=== Using Visual Studio ===&lt;br /&gt;
[[Image:Compile-hercules.PNG|thumb|300px|MS Visual Studio 2010: Compile configuration (&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;red&amp;lt;/span&amp;gt;) and solution (&amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;blue&amp;lt;/span&amp;gt;) with it's child projects.]]&lt;br /&gt;
Hercules ships with solution and project files for Visual Studio from 9 onwards. Usage of both the paid and free (express) versions is same, although the paid one produces more efficient code [http://nn.nachtwolke.com/dev/ref/msvcperf.htm]. &lt;br /&gt;
* Download [http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express MS Visual C++ 2010 Express Edition],[http://www.microsoft.com/visualstudio/en-us/products/2008-editions/express MS Visual C++ 2008 Express Edition], &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;MS Visual Studio 2012&amp;lt;/span&amp;gt; or &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;MS Visual Studio 2013&amp;lt;/span&amp;gt; and install it, if you do not have Visual Studio/Visual C++ already installed.&lt;br /&gt;
* Open '''Hercules-10.sln''' in your Hercules folder if you use Visual C++ 2010, for Visual C++ 2008, you need to open '''Hercules-9.sln''', for Visual Studio 2012, you need to open '''Hercules-11.sln''', If you use Visual Studio 2013, you need to open '''Hercules-12.sln''' instead.&lt;br /&gt;
* Select the desired compile configuration (marked &amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;red&amp;lt;/span&amp;gt;). Use '''Release''' when you compile the server, where players will be playing on. '''Debug''' compiles the server without optimizations and with debugging information.&lt;br /&gt;
* Right-click the solution node (marked &amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;blue&amp;lt;/span&amp;gt;) and select '''Build solution'''. If you have compiled the server before, it is recommended to use '''Rebuild solution''', as it forces the compiling of all components, not just those, which seem to have changed since last compile.&lt;br /&gt;
* If the compilation was successful, the resulting executables are in the same folder as the solution named ''login-server.exe'', ''char-server.exe'', ''map-server.exe'' and ''mapcache.exe''.&lt;br /&gt;
&lt;br /&gt;
=== Using Cygwin ===&lt;br /&gt;
[http://www.cygwin.com/ Cygwin] is a Linux environment emulation for Windows. As such it enables compiling the way it would be done on Linux. Compiling in Cygwin is '''not recommended''' due to lower performance and increased installation complexity.&lt;br /&gt;
&lt;br /&gt;
* Download [http://www.cygwin.com/setup.exe Cygwin] and install it, if not already done so. When installing, select following packages:&lt;br /&gt;
** from ''Devel'': ''cmake'', ''gcc'' and ''make'' &lt;br /&gt;
** from ''Lib'': ''libidn-devel'', ''libpcre-devel'', ''readline'', ''zlib-devel''&lt;br /&gt;
* Running Cygwin Terminal will create folder &amp;lt;code&amp;gt;'''home/user'''&amp;lt;/code&amp;gt; inside Cygwin installation folder, where ''user'' is the name currently logged on Windows user.&lt;br /&gt;
* SQL server needs to be installed in Cygwin so the compiler can access the SQL libraries. Download the .tar.gz archive from the [http://dev.mysql.com/downloads/mysql/?current_os=src MySQL website], such as '''mysql-5.5.20.tar.gz'''.&lt;br /&gt;
* Place the archive into &amp;lt;code&amp;gt;'''/home/user'''&amp;lt;/code&amp;gt; and execute following inside Cygwin Terminal to unpack it:&lt;br /&gt;
  cd ~&lt;br /&gt;
  tar xvzf mysql-5.5.20.tar.gz&lt;br /&gt;
* Navigate to directory with unpacked archive:&lt;br /&gt;
  cd mysql-5.5.20&lt;br /&gt;
* To avoid conficts, replace ''dtoa()'' with ''_dtoa()'' in ''strings/dtoa.c'' file:&lt;br /&gt;
  sed -i 's/dtoa(/_dtoa(/g' ./strings/dtoa.c&lt;br /&gt;
* Build MySQL with following commands:&lt;br /&gt;
  cmake .&lt;br /&gt;
  make mysqlclient libmysql&lt;br /&gt;
  make install&lt;br /&gt;
* After everything completes, Cygwin is ready for compiling Hercules. Navigate to the Hercules folder in Cygwin. Windows drives are accesible as &amp;lt;code&amp;gt;/cygdrive/x&amp;lt;/code&amp;gt; where ''x'' is the letter assigned to the drive by Windows.&lt;br /&gt;
* Execute following commands inside Hercules folder to compile it:&lt;br /&gt;
  ./configure --with-mysql=/usr/local/mysql/bin/mysql_config&lt;br /&gt;
  make sql&lt;br /&gt;
* If the compilation was successful, the resulting executables are in the Hercules folder named ''login-server_sql.exe'', ''char-server_sql.exe'' and ''map-server_sql.exe''.&lt;br /&gt;
* Server executables can be run inside Cygwin Terminal or directly, but in this case you need to copy required libraries to Hercules folder:&lt;br /&gt;
** ''cygwin1.dll'', ''cygz.dll'', ''cyggcc_s-1.dll'', ''cygpcre-0.dll'' from &amp;lt;code&amp;gt;/bin&amp;lt;/code&amp;gt;&lt;br /&gt;
** ''cygmysqlclient-18.dll'' from &amp;lt;code&amp;gt;/usr/local/mysql/lib&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Getitem</id>
		<title>Getitem</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Getitem"/>
				<updated>2013-12-05T04:36:58Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Script_Command]]&lt;br /&gt;
==Syntax==&lt;br /&gt;
* [[getitem]] &amp;lt;item id&amp;gt;,&amp;lt;amount&amp;gt;{,&amp;lt;account ID&amp;gt;};&lt;br /&gt;
* [[getitem]] &amp;quot;&amp;lt;item name&amp;gt;&amp;quot;,&amp;lt;amount&amp;gt;{,&amp;lt;account ID&amp;gt;};&lt;br /&gt;
==Description==&lt;br /&gt;
This command will give a specific amount of specified items to the target &lt;br /&gt;
character. If the character is not online, nothing will happen.&lt;br /&gt;
If &amp;lt;character ID&amp;gt; is not specified, items will be created in the invoking &lt;br /&gt;
character inventory instead.&lt;br /&gt;
&lt;br /&gt;
In the first and most commonly used version of this command, items are &lt;br /&gt;
referred to by their database ID number, which can be found in {{git|db/pre-re/item_db.txt}} or {{git|db/re/item_db.txt}}&lt;br /&gt;
&lt;br /&gt;
Giving an item ID of -1 will give a specified number of random items from the &lt;br /&gt;
list of those that fall out of Old Blue Box. Unlike in all other cases, these &lt;br /&gt;
will be unidentified, if they turn out to be equipment. This is exactly what's &lt;br /&gt;
written in the Old Blue Box's item script.&lt;br /&gt;
&lt;br /&gt;
Other negative IDs also correspond to other random item generating item tables:&lt;br /&gt;
&lt;br /&gt;
Giving an item ID of -2 will produce the effects of Old Violet Box.&lt;br /&gt;
Giving an item ID of -3 will produce the effects of Old Card Album.&lt;br /&gt;
Giving an item ID of -4 will produce the effects of Gift Box.&lt;br /&gt;
Giving an item ID of -5 will produce the effects of Worn Out Scroll, which drops only Jellopies anyway.&lt;br /&gt;
&lt;br /&gt;
This transaction is logged if the log script generated transactions option is &lt;br /&gt;
enabled.&lt;br /&gt;
&lt;br /&gt;
You may also create an item by it's name in the 'english name' field in the &lt;br /&gt;
item database:&lt;br /&gt;
&lt;br /&gt;
Which will do what you'd expect. If it can't find that name in the database, &lt;br /&gt;
apples will be created anyway. It is often a VERY GOOD IDEA to use it like this.&lt;br /&gt;
&lt;br /&gt;
This is used in pretty much all NPC scripts that have to do with items and &lt;br /&gt;
quite a few item scripts. For more examples check just about any official script.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    getitem 502,10; // The person will receive 10 apples&lt;br /&gt;
    getitem 617,1;  // The person will receive 1 Old Violet Box&lt;br /&gt;
    getitem &amp;quot;RED_POTION&amp;quot;,10;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[getitem2]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Getitem2</id>
		<title>Getitem2</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Getitem2"/>
				<updated>2013-12-05T04:33:51Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Syntax ==&lt;br /&gt;
* [[getitem2]] &amp;lt;item id&amp;gt;,&amp;lt;amount&amp;gt;,&amp;lt;identify&amp;gt;,&amp;lt;refine&amp;gt;,&amp;lt;attribute&amp;gt;,&amp;lt;card1&amp;gt;,&amp;lt;card2&amp;gt;,&amp;lt;card3&amp;gt;,&amp;lt;card4&amp;gt;{,&amp;lt;account ID&amp;gt;};&lt;br /&gt;
* [[getitem2]] &amp;quot;&amp;lt;item name&amp;gt;&amp;quot;,&amp;lt;amount&amp;gt;,&amp;lt;identify&amp;gt;,&amp;lt;refine&amp;gt;,&amp;lt;attribute&amp;gt;,&amp;lt;card1&amp;gt;,&amp;lt;card2&amp;gt;,&amp;lt;card3&amp;gt;,&amp;lt;card4&amp;gt;{,&amp;lt;account ID&amp;gt;};&lt;br /&gt;
==Description==&lt;br /&gt;
This command will give an amount of specified items to the invoking &lt;br /&gt;
character. If an optional account ID is specified, and the target &lt;br /&gt;
character is currently online, items will be created in their inventory &lt;br /&gt;
instead. If they are not online, nothing will happen. It works essentially &lt;br /&gt;
the same as [[getitem]] (it even works for negative ID numbers the same way) &lt;br /&gt;
but is a lot more flexible.&lt;br /&gt;
&lt;br /&gt;
Those parameters that are different from [[getitem]] are:&lt;br /&gt;
&lt;br /&gt;
 identify	- Whether you want the item to be identified (1) or not (0).&lt;br /&gt;
 refine		- For how many pluses will it be refined. It will not let you &lt;br /&gt;
 			  refine an item higher than the max refine.&lt;br /&gt;
 attribute	- Whether the item is broken (1) or not (0).&lt;br /&gt;
 card1,2,3,4	- If you want a card compound to it, place the card ID number &lt;br /&gt;
 			  into the specific card slot.&lt;br /&gt;
&lt;br /&gt;
Card1-card4 values are also used to store name information for named &lt;br /&gt;
items, as well as the elemental property of weapons and armor. You can &lt;br /&gt;
create a named item in this manner, however, if you just need a named &lt;br /&gt;
piece of standard equipment, it is much easier to the [[getnameditem]] &lt;br /&gt;
function instead.&lt;br /&gt;
&lt;br /&gt;
You will need to keep these values if you want to destroy and then &lt;br /&gt;
perfectly recreate a named item, for this see [[getinventorylist]].&lt;br /&gt;
&lt;br /&gt;
If you still want to try creating a named item with this command because &lt;br /&gt;
[[getnameditem]] won't do it for you cause it's too limited, you can do it &lt;br /&gt;
like this. Careful, minor magic ahead.&lt;br /&gt;
==Examples==&lt;br /&gt;
 	// First, let's get an ID of a character who's name will be on the &lt;br /&gt;
 	// item. Only an existing character's name may be there.&lt;br /&gt;
 	// Let's assume our character is 'Adam' and find his ID.&lt;br /&gt;
 &lt;br /&gt;
 	set @charid,getcharid(0,&amp;quot;Adam&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 	// Now we split the character ID number into two portions with a &lt;br /&gt;
 	// binary shift operation. If you don't understand what this does, &lt;br /&gt;
 	// just copy it.&lt;br /&gt;
 &lt;br /&gt;
 	set @card3, @charid &amp;amp; 65535;&lt;br /&gt;
 	set @card4, @charid &amp;gt;&amp;gt; 16;&lt;br /&gt;
 &lt;br /&gt;
 	// If you're inscribing non-equipment, @card1 must be 254.&lt;br /&gt;
 	// Arrows are also not equipment. :)&lt;br /&gt;
 	set @card1,254;&lt;br /&gt;
 &lt;br /&gt;
 	// For named equipment, card2 means the Star Crumbs and elemental &lt;br /&gt;
 	// crystals used to make this equipment. For everything else, it's 0.&lt;br /&gt;
 &lt;br /&gt;
 	set @card2,0;&lt;br /&gt;
 &lt;br /&gt;
 	// Now, let's give the character who invoked the script some &lt;br /&gt;
 	// Adam's Apples:&lt;br /&gt;
 &lt;br /&gt;
 	getitem2 512,1,1,0,0,@card1,@card2,@card3,@card4;&lt;br /&gt;
&lt;br /&gt;
==Description continue...==&lt;br /&gt;
This wasn't tested with all possible items, so I can't give any promises, &lt;br /&gt;
experiment first before relying on it.&lt;br /&gt;
&lt;br /&gt;
To create equipment, continue this example it like this:&lt;br /&gt;
==Examples continue...==&lt;br /&gt;
 	// We've already have card3 and card4 loaded with correct&lt;br /&gt;
 	// values so we'll just set up card1 and card2 with data&lt;br /&gt;
 	// for an Ice Stiletto.&lt;br /&gt;
 &lt;br /&gt;
 	// If you're inscribing equipment, @card1 must be 255.&lt;br /&gt;
 	set @card1,255;&lt;br /&gt;
 &lt;br /&gt;
 	// That's the number of star crumbs in a weapon.&lt;br /&gt;
 	set @sc,2;&lt;br /&gt;
 &lt;br /&gt;
 	// That's the number of elemental property of the weapon.&lt;br /&gt;
 	set @ele,1;&lt;br /&gt;
 &lt;br /&gt;
 	// And that's the wacky formula that makes them into&lt;br /&gt;
 	// a single number.    &lt;br /&gt;
 	set @card2,@ele+((@sc*5)&amp;lt;&amp;lt;8);&lt;br /&gt;
 &lt;br /&gt;
 	// That will make us an Adam's +2 VVS Ice Stiletto:&lt;br /&gt;
 &lt;br /&gt;
 	getitem2 1216,1,1,2,0,@card1,@card2,@card3,@card4;&lt;br /&gt;
&lt;br /&gt;
Experiment with the number of star crumbs - I'm not certain just how much &lt;br /&gt;
will work most and what it depends on. The valid element numbers are:&lt;br /&gt;
&lt;br /&gt;
 1 - Ice, 2 - Earth 3 - Fire 4 - Wind.&lt;br /&gt;
&lt;br /&gt;
You can, apparently, even create duplicates of the same pet egg with this &lt;br /&gt;
command, creating a pet which is the same, but simultaneously exists in &lt;br /&gt;
two eggs, and may hatch from either, although, I'm not sure what kind of a &lt;br /&gt;
mess will this really cause.&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[getitem]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Script_Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Getitembound</id>
		<title>Getitembound</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Getitembound"/>
				<updated>2013-12-05T04:31:25Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Syntax ==&lt;br /&gt;
* [[getitembound]] &amp;lt;item id&amp;gt;,&amp;lt;amount&amp;gt;,&amp;lt;bound type&amp;gt;{,&amp;lt;account ID&amp;gt;};&lt;br /&gt;
* [[getitembound]] &amp;quot;&amp;lt;item name&amp;gt;&amp;quot;,&amp;lt;amount&amp;gt;,&amp;lt;bound type&amp;gt;{,&amp;lt;account ID&amp;gt;};&lt;br /&gt;
== Description ==&lt;br /&gt;
These commands will create bounded items.&lt;br /&gt;
&lt;br /&gt;
This command behaves identically to [[getitem]], but the items created will be&lt;br /&gt;
bound to the target character as specified by the bound type. All items created&lt;br /&gt;
in this manner cannot be dropped, sold, vended, auctioned, or mailed, and in&lt;br /&gt;
some cases cannot be traded or stored.&lt;br /&gt;
&lt;br /&gt;
Valid bound types are:&lt;br /&gt;
 0 - Regular [[getitem]]&lt;br /&gt;
 1 - Account Bound&lt;br /&gt;
 2 - Guild Bound&lt;br /&gt;
 3 - Party Bound&lt;br /&gt;
 4 - Character Bound&lt;br /&gt;
&lt;br /&gt;
Default is 0 if not defined.&lt;br /&gt;
== Example ==&lt;br /&gt;
    getitembound 2220,1,1; // The person will receive 1 Account bounded Hat that can store in storage.&lt;br /&gt;
    getitembound 2226,1,2;  // The person will receive 1 Guild Bound Cap that can share and store in Guild Storage.&lt;br /&gt;
    getitembound &amp;quot;Crown&amp;quot;,1,4; // The person will receive 1 Char Bound Crown that cannot store sell or drop.&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[getitembound2]]&lt;br /&gt;
* [[countbound]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Getitembound2</id>
		<title>Getitembound2</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Getitembound2"/>
				<updated>2013-12-05T04:31:12Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Syntax ==&lt;br /&gt;
* [[getitembound2]] &amp;lt;item id&amp;gt;,&amp;lt;amount&amp;gt;,&amp;lt;identify&amp;gt;,&amp;lt;refine&amp;gt;,&amp;lt;attribute&amp;gt;,&amp;lt;card1&amp;gt;,&amp;lt;card2&amp;gt;,&amp;lt;card3&amp;gt;,&amp;lt;card4&amp;gt;,&amp;lt;bound type&amp;gt;;&lt;br /&gt;
* [[getitembound2]] &amp;quot;&amp;lt;item name&amp;gt;&amp;quot;,&amp;lt;amount&amp;gt;,&amp;lt;identify&amp;gt;,&amp;lt;refine&amp;gt;,&amp;lt;attribute&amp;gt;,&amp;lt;card1&amp;gt;,&amp;lt;card2&amp;gt;,&amp;lt;card3&amp;gt;,&amp;lt;card4&amp;gt;,&amp;lt;bound type&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
This command behaves identically to [[getitem2]], but the items created will be&lt;br /&gt;
bound to the target character as specified by the bound type. All items created&lt;br /&gt;
in this manner cannot be dropped, sold, vended, auctioned, or mailed, and in&lt;br /&gt;
some cases cannot be traded or stored.&lt;br /&gt;
&lt;br /&gt;
For a list of bound types see [[getitembound]].&lt;br /&gt;
&lt;br /&gt;
Default is 0 if not defined.&lt;br /&gt;
== Example ==&lt;br /&gt;
    getitembound2 1602,1,1,2,0,4004,4004,4004,4004,1; // The person will receive 1 Account bounded &amp;quot;Rod with 4 Drops card&amp;quot; on it.&lt;br /&gt;
&lt;br /&gt;
See example script in npc/costum/itembind.txt&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[getitembound]]&lt;br /&gt;
* [[countbound]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Countbound</id>
		<title>Countbound</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Countbound"/>
				<updated>2013-12-05T04:30:33Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: /* See Also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Syntax ==&lt;br /&gt;
* [[countbound]] ({&amp;lt;bound type&amp;gt;})&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
This function will return the number of bounded items in the character's&lt;br /&gt;
inventory, and sets an array @bound_items[] containing all item IDs of the&lt;br /&gt;
counted items. If a bound type is specified, only those items will be counted.&lt;br /&gt;
&lt;br /&gt;
For a list of bound types see [[getitembound]].&lt;br /&gt;
== Example==&lt;br /&gt;
 Example:&lt;br /&gt;
 	mes &amp;quot;You currently have &amp;quot;+countbound()+&amp;quot; bounded items.&amp;quot;;&lt;br /&gt;
 	next;&lt;br /&gt;
 	mes &amp;quot;The list of bounded items include:&amp;quot;;&lt;br /&gt;
 	for(set .@i,0; .@i&amp;lt;getarraysize(@bound_items); set .@i,.@i+1)&lt;br /&gt;
 		mes getitemname(@bound_items[.@i]);&lt;br /&gt;
 	close;&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[getitembound]]&lt;br /&gt;
* [[getitembound2]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Countbound</id>
		<title>Countbound</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Countbound"/>
				<updated>2013-12-05T04:30:06Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Syntax ==&lt;br /&gt;
* [[countbound]] ({&amp;lt;bound type&amp;gt;})&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
This function will return the number of bounded items in the character's&lt;br /&gt;
inventory, and sets an array @bound_items[] containing all item IDs of the&lt;br /&gt;
counted items. If a bound type is specified, only those items will be counted.&lt;br /&gt;
&lt;br /&gt;
For a list of bound types see [[getitembound]].&lt;br /&gt;
== Example==&lt;br /&gt;
 Example:&lt;br /&gt;
 	mes &amp;quot;You currently have &amp;quot;+countbound()+&amp;quot; bounded items.&amp;quot;;&lt;br /&gt;
 	next;&lt;br /&gt;
 	mes &amp;quot;The list of bounded items include:&amp;quot;;&lt;br /&gt;
 	for(set .@i,0; .@i&amp;lt;getarraysize(@bound_items); set .@i,.@i+1)&lt;br /&gt;
 		mes getitemname(@bound_items[.@i]);&lt;br /&gt;
 	close;&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[getitembound]]&lt;br /&gt;
* [[getitembound]]&lt;br /&gt;
* [[getitembound2]]&lt;br /&gt;
* [[getitembound2]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Getitembound2</id>
		<title>Getitembound2</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Getitembound2"/>
				<updated>2013-12-05T04:28:13Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Syntax ==&lt;br /&gt;
* [[getitembound2]] &amp;lt;item id&amp;gt;,&amp;lt;amount&amp;gt;,&amp;lt;identify&amp;gt;,&amp;lt;refine&amp;gt;,&amp;lt;attribute&amp;gt;,&amp;lt;card1&amp;gt;,&amp;lt;card2&amp;gt;,&amp;lt;card3&amp;gt;,&amp;lt;card4&amp;gt;,&amp;lt;bound type&amp;gt;;&lt;br /&gt;
* [[getitembound2]] &amp;quot;&amp;lt;item name&amp;gt;&amp;quot;,&amp;lt;amount&amp;gt;,&amp;lt;identify&amp;gt;,&amp;lt;refine&amp;gt;,&amp;lt;attribute&amp;gt;,&amp;lt;card1&amp;gt;,&amp;lt;card2&amp;gt;,&amp;lt;card3&amp;gt;,&amp;lt;card4&amp;gt;,&amp;lt;bound type&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
This command behaves identically to [[getitem2]], but the items created will be&lt;br /&gt;
bound to the target character as specified by the bound type. All items created&lt;br /&gt;
in this manner cannot be dropped, sold, vended, auctioned, or mailed, and in&lt;br /&gt;
some cases cannot be traded or stored.&lt;br /&gt;
&lt;br /&gt;
For a list of bound types see [[getitembound]].&lt;br /&gt;
&lt;br /&gt;
Default is 0 if not defined.&lt;br /&gt;
== Example ==&lt;br /&gt;
    getitembound2 1602,1,1,2,0,4004,4004,4004,4004,1; // The person will receive 1 Account bounded &amp;quot;Rod with 4 Drops card&amp;quot; on it.&lt;br /&gt;
&lt;br /&gt;
See example script in npc/costum/itembind.txt&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[getitembound]] &amp;lt;item id&amp;gt;,&amp;lt;amount&amp;gt;,&amp;lt;bound type&amp;gt;{,&amp;lt;account ID&amp;gt;};&lt;br /&gt;
* [[getitembound]] &amp;quot;&amp;lt;item name&amp;gt;&amp;quot;,&amp;lt;amount&amp;gt;,&amp;lt;bound type&amp;gt;{,&amp;lt;account ID&amp;gt;};&lt;br /&gt;
* [[countbound]] ({&amp;lt;bound type&amp;gt;})&lt;br /&gt;
&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	<entry>
		<id>https://wiki.herc.ws/wiki/Getitembound</id>
		<title>Getitembound</title>
		<link rel="alternate" type="text/html" href="https://wiki.herc.ws/wiki/Getitembound"/>
				<updated>2013-12-05T04:17:44Z</updated>
		
		<summary type="html">&lt;p&gt;Sevenzz23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Syntax ==&lt;br /&gt;
* [[getitembound]] &amp;lt;item id&amp;gt;,&amp;lt;amount&amp;gt;,&amp;lt;bound type&amp;gt;{,&amp;lt;account ID&amp;gt;};&lt;br /&gt;
* [[getitembound]] &amp;quot;&amp;lt;item name&amp;gt;&amp;quot;,&amp;lt;amount&amp;gt;,&amp;lt;bound type&amp;gt;{,&amp;lt;account ID&amp;gt;};&lt;br /&gt;
== Description ==&lt;br /&gt;
These commands will create bounded items.&lt;br /&gt;
&lt;br /&gt;
This command behaves identically to [[getitem]], but the items created will be&lt;br /&gt;
bound to the target character as specified by the bound type. All items created&lt;br /&gt;
in this manner cannot be dropped, sold, vended, auctioned, or mailed, and in&lt;br /&gt;
some cases cannot be traded or stored.&lt;br /&gt;
&lt;br /&gt;
Valid bound types are:&lt;br /&gt;
 0 - Regular [[getitem]]&lt;br /&gt;
 1 - Account Bound&lt;br /&gt;
 2 - Guild Bound&lt;br /&gt;
 3 - Party Bound&lt;br /&gt;
 4 - Character Bound&lt;br /&gt;
&lt;br /&gt;
Default is 0 if not defined.&lt;br /&gt;
== Example ==&lt;br /&gt;
    getitembound 2220,1,1; // The person will receive 1 Account bounded Hat that can store in storage.&lt;br /&gt;
    getitembound 2226,1,2;  // The person will receive 1 Guild Bound Cap that can share and store in Guild Storage.&lt;br /&gt;
    getitembound &amp;quot;Crown&amp;quot;,1,4; // The person will receive 1 Char Bound Crown that cannot store sell or drop.&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[getitembound2]] &amp;lt;item id&amp;gt;,&amp;lt;amount&amp;gt;,&amp;lt;identify&amp;gt;,&amp;lt;refine&amp;gt;,&amp;lt;attribute&amp;gt;,&amp;lt;card1&amp;gt;,&amp;lt;card2&amp;gt;,&amp;lt;card3&amp;gt;,&amp;lt;card4&amp;gt;,&amp;lt;bound type&amp;gt;;&lt;br /&gt;
* [[getitembound2]] &amp;quot;&amp;lt;item name&amp;gt;&amp;quot;,&amp;lt;amount&amp;gt;,&amp;lt;identify&amp;gt;,&amp;lt;refine&amp;gt;,&amp;lt;attribute&amp;gt;,&amp;lt;card1&amp;gt;,&amp;lt;card2&amp;gt;,&amp;lt;card3&amp;gt;,&amp;lt;card4&amp;gt;,&amp;lt;bound type&amp;gt;;&lt;br /&gt;
* [[countbound]] ({&amp;lt;bound type&amp;gt;})&lt;br /&gt;
&lt;br /&gt;
[[Category:Script Command]]&lt;/div&gt;</summary>
		<author><name>Sevenzz23</name></author>	</entry>

	</feed>