diff options
author | brianluau <brianluau@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2009-07-27 16:56:26 +0000 |
---|---|---|
committer | brianluau <brianluau@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2009-07-27 16:56:26 +0000 |
commit | a269c22b8d92b56a6b09bc2fa8375d1803cab909 (patch) | |
tree | 758a3a283bbfe847cdfde9cd3416f55270fb6844 | |
parent | fc079afd18a8189b8542bc4ec989dc4f123e30a7 (diff) | |
download | hercules-a269c22b8d92b56a6b09bc2fa8375d1803cab909.tar.gz hercules-a269c22b8d92b56a6b09bc2fa8375d1803cab909.tar.bz2 hercules-a269c22b8d92b56a6b09bc2fa8375d1803cab909.tar.xz hercules-a269c22b8d92b56a6b09bc2fa8375d1803cab909.zip |
- Added svn:eol-style native for some conf/css/html/pl/sql/txt files.
- Added svn:executable property for several batch/shell scripts.
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@13972 54d463be-8e91-2dee-dedb-b68131a5f0ec
42 files changed, 9384 insertions, 9384 deletions
@@ -1,340 +1,340 @@ - GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
+ GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/LICENCE_JA b/LICENCE_JA index 0888c67e2..d6306074a 100644 --- a/LICENCE_JA +++ b/LICENCE_JA @@ -1,416 +1,416 @@ - GNU 一般公衆利用許諾契約書
- バージョン2、1991年6月
- 日本語訳、2002年5月20日
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- この利用許諾契約書を、一字一句そのままに複製し頒布することは許可する。
- しかし変更は認めない。
-
- This is an unofficial translation of the GNU General Public License
- into Japanese. It was not published by the Free Software Foundation,
- and does not legally state the distribution terms for software that
- uses the GNU GPL--only the original English text of the GNU GPL does
- that. However, we hope that this translation will help Japanese
- speakers understand the GNU GPL better.
-
- (訳: 以下はGNU General Public Licenseの非公式な日本語訳です。これはフ
- リーソフトウェア財団(the Free Software Foundataion)によって発表された
- ものではなく、GNU GPLを適用したソフトウェアの頒布条件を法的に有効な形
- で述べたものではありません。頒布条件としてはGNU GPLの英語版テキストで
- 指定されているもののみが有効です。しかしながら、私たちはこの翻訳が、
- 日本語を使用する人々にとってGNU GPLをより良く理解する助けとなることを
- 望んでいます。)
-
- 翻訳は 八田真行<mhatta@gnu.org>が行った。原文は
- http://www.gnu.org/licenses/gpl.txtである。誤訳の指摘や改善案を歓迎す
- る。
- はじめに
-
-ソフトウェア向けライセンスの大半は、あなたがそのソフトウェアを共有した
-り変更したりする自由を奪うように設計されています。対照的に、GNU 一般公
-衆利用許諾契約書は、あなたがフリーソフトウェアを共有したり変更したりす
-る自由を保証する--すなわち、ソフトウェアがそのユーザすべてにとってフリー
-であることを保証することを目的としています。この一般公衆利用許諾契約書
-はフリーソフトウェア財団のソフトウェアのほとんどに適用されており、また
-GNU GPLを適用すると決めたフリーソフトウェア財団以外の作者によるプログ
-ラムにも適用されています(いくつかのフリーソフトウェア財団のソフトウェ
-アには、GNU GPLではなくGNU ライブラリ一般公衆利用許諾契約書が適用され
-ていることもあります)。あなたもまた、ご自分のプログラムにGNU GPLを適用
-することが可能です。
-
-私たちがフリーソフトウェアと言うとき、それは利用の自由について言及して
-いるのであって、価格は問題にしていません。私たちの一般公衆利用許諾契約
-書は、あなたがフリーソフトウェアの複製物を頒布する自由を保証するよう設
-計されています(希望に応じてその種のサービスに手数料を課す自由も保証さ
-れます)。また、あなたがソースコードを受け取るか、あるいは望めばそれを
-入手することが可能であるということ、あなたがソフトウェアを変更し、その
-一部を新たなフリーのプログラムで利用できるということ、そして、以上で述
-べたようなことができるということがあなたに知らされるということも保証さ
-れます。
-
-あなたの権利を守るため、私たちは誰かがあなたの有するこれらの権利を否定
-することや、これらの権利を放棄するよう要求することを禁止するという制限
-を加える必要があります。よって、あなたがソフトウェアの複製物を頒布した
-りそれを変更したりする場合には、これらの制限のためにあなたにある種の責
-任が発生することになります。
-
-例えば、あなたがフリーなプログラムの複製物を頒布する場合、有料か無料に
-関わらず、あなたは自分が有する権利を全て受領者に与えなければなりません。
-また、あなたは彼らもソースコードを受け取るか手に入れることができるよう
-保証しなければなりません。そして、あなたは彼らに対して以下で述べる条件
-を示し、彼らに自らの持つ権利について知らしめるようにしなければなりませ
-ん。
-
-私たちはあなたの権利を二段階の手順を踏んで保護します。(1) まずソフトウェ
-アに対して著作権を主張し、そして (2) あなたに対して、ソフトウェアの複
-製や頒布または改変についての法的な許可を与えるこの契約書を提示します。
-
-また、各作者や私たちを保護するため、私たちはこのフリーソフトウェアには
-何の保証も無いということを誰もが確実に理解するようにし、またソフトウェ
-アが誰か他人によって改変され、それが次々と頒布されていったとしても、そ
-の受領者は彼らが手に入れたソフトウェアがオリジナルのバージョンでは無い
-こと、そして原作者の名声は他人によって持ち込まれた可能性のある問題によっ
-て影響されることがないということを周知させたいと思います。
-
-最後に、ソフトウェア特許がいかなるフリーのプログラムの存在にも不断の脅
-威を投げかけていますが、私たちは、フリーなプログラムの再頒布者が個々に
-特許ライセンスを取得することによって、事実上プログラムを独占的にしてし
-まうという危険を避けたいと思います。こういった事態を予防するため、私た
-ちはいかなる特許も誰もが自由に利用できるようライセンスされるか、全くラ
-イセンスされないかのどちらかでなければならないことを明確にしました。
-
-(訳注: 本契約書で「独占的(proprietary)」とは、ソフトウェアの利用や再頒
-布、改変が禁止されているか、許可を得ることが必要とされているか、あるい
-は厳しい制限が課せられていて自由にそうすることが事実上できなくなってい
-る状態のことを指す。詳しくは
-http://www.gnu.org/philosophy/categories.ja.html#ProprietarySoftwareを
-参照せよ。)
-
-複製や頒布、改変についての正確な条件と制約を以下で述べていきます。
-
- GNU 一般公衆利用許諾契約書
- 複製、頒布、改変に関する条件と制約
-
-0. この利用許諾契約書は、そのプログラム(またはその他の著作物)をこの一
-般公衆利用許諾契約書の定める条件の下で頒布できるという告知が著作権者に
-よって記載されたプログラムまたはその他の著作物全般に適用される。以下で
-は、「『プログラム』」とはそのようにしてこの契約書が適用されたプログラ
-ムや著作物全般を意味し、また「『プログラム』を基にした著作物」とは『プ
-ログラム』やその他著作権法の下で派生物と見なされるもの全般を指す。すな
-わち、『プログラム』かその一部を、全く同一のままか、改変を加えたか、あ
-るいは他の言語に翻訳された形で含む著作物のことである(「改変」という語
-の本来の意味からはずれるが、以下では翻訳も改変の一種と見なす)。それぞ
-れの契約者は「あなた」と表現される。
-
-複製や頒布、改変以外の活動はこの契約書ではカバーされない。それらはこの
-契約書の対象外である。『プログラム』を実行する行為自体に制限はない。ま
-た、そのような『プログラム』の出力結果は、その内容が『プログラム』を基
-にした著作物を構成する場合のみこの契約書によって保護される(『プログラ
-ム』を実行したことによって作成されたということとは無関係である)。この
-ような線引きの妥当性は、『プログラム』が何をするのかに依存する。
-
-1. それぞれの複製物において適切な著作権表示と保証の否認声明(disclaimer
-of warranty)を目立つよう適切に掲載し、またこの契約書および一切の保証の
-不在に触れた告知すべてをそのまま残し、そしてこの契約書の複製物を『プロ
-グラム』のいかなる受領者にも『プログラム』と共に頒布する限り、あなたは
-『プログラム』のソースコードの複製物を、あなたが受け取った通りの形で複
-製または頒布することができる。媒体は問わない。
-
-あなたは、物理的に複製物を譲渡するという行為に関して手数料を課しても良
-いし、希望によっては手数料を取って交換における保護の保証を提供しても良
-い。
-
-2. あなたは自分の『プログラム』の複製物かその一部を改変して『プログラ
-ム』を基にした著作物を形成し、そのような改変点や著作物を上記第1節の定
-める条件の下で複製または頒布することができる。ただし、そのためには以下
-の条件すべてを満たしていなければならない:
-
- a) あなたがそれらのファイルを変更したということと変更した日時が良
- く分かるよう、改変されたファイルに告示しなければならない。
-
- b) 『プログラム』またはその一部を含む著作物、あるいは『プログラム』
- かその一部から派生した著作物を頒布あるいは発表する場合には、その全
- 体をこの契約書の条件に従って第三者へ無償で利用許諾しなければならな
- い。
-
- c) 改変されたプログラムが、通常実行する際に対話的にコマンドを読む
- ようになっているならば、そのプログラムを最も一般的な方法で対話的に
- 実行する際、適切な著作権表示、無保証であること(あるいはあなたが保
- 証を提供するということ)、ユーザがプログラムをこの契約書で述べた条
- 件の下で頒布することができるということ、そしてこの契約書の複製物を
- 閲覧するにはどうしたらよいかというユーザへの説明を含む告知が印刷さ
- れるか、あるいは画面に表示されるようにしなければならない(例外とし
- て、『プログラム』そのものは対話的であっても通常そのような告知を印
- 刷しない場合には、『プログラム』を基にしたあなたの著作物にそのよう
- な告知を印刷させる必要はない)。
-
-以上の必要条件は全体としての改変された著作物に適用される。著作物の一部
-が『プログラム』から派生したものではないと確認でき、それら自身別の独立
-した著作物であると合理的に考えられるならば、あなたがそれらを別の著作物
-として分けて頒布する場合、そういった部分にはこの契約書とその条件は
-適用されない。しかし、あなたが同じ部分を『プログラム』を基にした著作物
-全体の一部として頒布するならば、全体としての頒布物は、この契約書が
-課す条件に従わなければならない。というのは、この契約書が他の契約者
-に与える許可は『プログラム』丸ごと全体に及び、誰が書いたかは関係なく各
-部分のすべてを保護するからである。
-
-よって、すべてあなたによって書かれた著作物に対し、権利を主張したりあな
-たの権利に異議を申し立てることはこの節の意図するところではない。むしろ、
-その趣旨は『プログラム』を基にした派生物ないし集合著作物の頒布を管理す
-る権利を行使するということにある。
-
-また、『プログラム』を基にしていないその他の著作物を『プログラム』(あ
-るいは『プログラム』を基にした著作物)と一緒に集めただけのものを一巻の
-保管装置ないし頒布媒体に収めても、その他の著作物までこの契約書が保
-護する対象になるということにはならない。
-
-3. あなたは上記第1節および2節の条件に従い、『プログラム』(あるいは第2
-節における派生物)をオブジェクトコードないし実行形式で複製または頒布す
-ることができる。ただし、その場合あなたは以下のうちどれか一つを実施しな
-ければならない:
-
- a) 著作物に、『プログラム』に対応した完全かつ機械で読み取り可能な
- ソースコードを添付する。ただし、ソースコードは上記第1節および2節の
- 条件に従いソフトウェアの交換で習慣的に使われる媒体で頒布しなければ
- ならない。あるいは、
-
- b) 著作物に、いかなる第三者に対しても、『プログラム』に対応した完
- 全かつ機械で読み取り可能なソースコードを、頒布に要する物理的コスト
- を上回らない程度の手数料と引き換えに提供する旨述べた少なくとも3年
- 間は有効な書面になった申し出を添える。ただし、ソースコードは上記第
- 1節および2節の条件に従いソフトウェアの交換で習慣的に使われる媒体で
- 頒布しなければならない。あるいは、
-
- c) 対応するソースコード頒布の申し出に際して、あなたが得た情報を一
- 緒に引き渡す(この選択肢は、営利を目的としない頒布であって、かつあ
- なたが上記小節bで指定されているような申し出と共にオブジェクトコー
- ドあるいは実行形式のプログラムしか入手していない場合に限り許可され
- る)。
-
-著作物のソースコードとは、それに対して改変を加える上で好ましいとされる
-著作物の形式を意味する。ある実行形式の著作物にとって完全なソースコード
-とは、それが含むモジュールすべてのソースコード全部に加え、関連するイン
-ターフェース定義ファイルのすべてとライブラリのコンパイルやインストール
-を制御するために使われるスクリプトをも加えたものを意味する。しかし特別
-な例外として、そのコンポーネント自体が実行形式に付随するのでは無い限り、
-頒布されるものの中に、実行形式が実行されるオペレーティングシステムの主
-要なコンポーネント(コンパイラやカーネル等)と通常一緒に(ソースかバイナ
-リ形式のどちらかで)頒布されるものを含んでいる必要はないとする。
-
-実行形式またはオブジェクトコードの頒布が、指定された場所からコピーする
-ためのアクセス手段を提供することで為されるとして、その上でソースコード
-も同等のアクセス手段によって同じ場所からコピーできるようになっているな
-らば、第三者がオブジェクトコードと一緒にソースも強制的にコピーさせられ
-るようになっていなくてもソースコード頒布の条件を満たしているものとする。
-
-4. あなたは『プログラム』を、この契約書において明確に提示された行
-為を除き複製や改変、サブライセンス、あるいは頒布してはならない。他に
-『プログラム』を複製や改変、サブライセンス、あるいは頒布する企てはすべ
-て無効であり、この契約書の下でのあなたの権利を自動的に終結させるこ
-とになろう。しかし、複製物や権利をこの契約書に従ってあなたから得た
-人々に関しては、そのような人々がこの契約書に完全に従っている限り彼
-らのライセンスまで終結することはない。
-
-5. あなたはこの契約書を受諾する必要は無い。というのは、あなたはこ
-れに署名していないからである。しかし、この契約書以外にあなたに対し
-て『プログラム』やその派生物を変更、頒布する許可を与えるものは存在しな
-い。これらの行為は、あなたがこの契約書を受け入れない限り法によって
-禁じられている。そこで、『プログラム』(あるいは『プログラム』を基にし
-た著作物のすべて)を改変ないし頒布することにより、あなたは自分がそのよ
-うな行為を行うためにこの契約書を受諾したということ、そして『プログ
-ラム』とそれに基づく著作物の複製や頒布、改変についてこの契約書が課
-す制約と条件をすべて受け入れたということを示したものと見なす。
-
-6. あなたが『プログラム』(または『プログラム』を基にした著作物全般)を
-再頒布するたびに、その受領者は元々のライセンス許可者から、この契約書で
-指定された条件と制約の下で『プログラム』を複製や頒布、あるいは改変する
-許可を自動的に得るものとする。あなたは、受領者がここで認められた権利を
-行使することに関してこれ以上他のいかなる制限も課すことができない。あな
-たには、第三者がこの契約書に従うことを強制する責任はない。
-
-7. 特許侵害あるいはその他の理由(特許関係に限らない)から、裁判所の判決
-あるいは申し立ての結果としてあなたに(裁判所命令や契約などにより)この契
-約書の条件と矛盾する制約が課された場合でも、あなたがこの契約書の条件を
-免除されるわけではない。もしこの契約書の下であなたに課せられた責任と他
-の関連する責任を同時に満たすような形で頒布できないならば、結果としてあ
-なたは『プログラム』を頒布することが全くできないということである。例え
-ば特許ライセンスが、あなたから直接間接を問わずコピーを受け取った人が誰
-でも『プログラム』を使用料無料で再頒布することを認めていない場合、あな
-たがその制約とこの契約書を両方とも満たすには『プログラム』の頒布を完全
-に中止するしかないだろう。
-
-この節の一部分が特定の状況の下で無効ないし実施不可能な場合でも、節の残
-りの部分は適用されるよう意図されている。その他の状況では節が全体として
-適用されるよう意図されている。
-
-特許やその他の財産権を侵害したり、そのような権利の主張の効力に異議を唱
-えたりするようあなたを誘惑することがこの節の目的ではない。この節には、
-人々によってライセンス慣行として実現されてきた、フリーソフトウェア頒布
-のシステムの完全性を護るという目的しかない。多くの人々が、フリーソフト
-ウェアの頒布システムが首尾一貫して適用されているという信頼に基づき、こ
-のシステムを通じて頒布される多様なソフトウェアに寛大な貢献をしてきたの
-は事実であるが、人がどのようなシステムを通じてソフトウェアを頒布したい
-と思うかはあくまでも作者/寄与者次第であり、あなたが選択を押しつけるこ
-とはできない。
-
-この節は、この契約書のこの節以外の部分の一帰結になると考えられるケー
-スを徹底的に明らかにすることを目的としている。
-
-8. 『プログラム』の頒布や利用が、ある国においては特許または著作権が主
-張されたインターフェースのいずれかによって制限されている場合、『プログ
-ラム』にこの契約書を適用した元の著作権者は、そういった国々を排除し
-た明確な地理的頒布制限を加え、そこで排除されていない国の中やそれらの国々
-の間でのみ頒布が許可されるようにしても構わない。その場合、そのような制
-限はこの契約書本文で書かれているのと同様に見なされる。
-
-9. フリーソフトウェア財団は、時によって改訂または新版の一般公衆利用許
-諾書を発表することができる。そのような新版は現在のバージョンとその精神
-においては似たものになるだろうが、新たな問題や懸念を解決するため細部で
-は異なる可能性がある。
-
-それぞれのバージョンには、見分けが付くようにバージョン番号が振られてい
-る。『プログラム』においてそれに適用されるこの契約書のバージョン番号が
-指定されていて、更に「それ以降のいかなるバージョン」も適用して良いとなっ
-ていた場合、あなたは従う条件と制約として、指定のバージョンか、フリーソ
-フトウェア財団によって発行された指定のバージョン以降の版のどれか一つの
-どちらかを選ぶことが出来る。『プログラム』でライセンスのバージョン番号
-が指定されていないならば、あなたは今までにフリーソフトウェア財団から発
-行されたバージョンの中から好きに選んで構わない。
-
-10. もしあなたが『プログラム』の一部を、その頒布条件がこの契約書と
-異なる他のフリーなプログラムと統合したいならば、作者に連絡して許可を求
-めよ。フリーソフトウェア財団が著作権を保有するソフトウェアについては、
-フリーソフトウェア財団に連絡せよ。私たちは、このような場合のために特別
-な例外を設けることもある。私たちが決定を下すにあたっては、私たちのフリー
-ソフトウェアの派生物すべてがフリーな状態に保たれるということと、一般的
-にソフトウェアの共有と再利用を促進するという二つの目標を規準に検討され
-るであろう。
- 無保証について
-
-11. 『プログラム』は代価無しに利用が許可されるので、適切な法が認める限
-りにおいて、『プログラム』に関するいかなる保証も存在しない。書面で別に
-述べる場合を除いて、著作権者、またはその他の団体は、『プログラム』を、
-表明されたか言外にかは問わず、商業的適性を保証するほのめかしやある特定
-の目的への適合性(に限られない)を含む一切の保証無しに「あるがまま」で提
-供する。『プログラム』の質と性能に関するリスクのすべてはあなたに帰属す
-る。『プログラム』に欠陥があると判明した場合、あなたは必要な保守点検や
-補修、修正に要するコストのすべてを引き受けることになる。
-
-12. 適切な法か書面での同意によって命ぜられない限り、著作権者、または上
-記で許可されている通りに『プログラム』を改変または再頒布したその他の団
-体は、あなたに対して『プログラム』の利用ないし利用不能で生じた一般的、
-特別的、偶然的、必然的な損害(データの消失や不正確な処理、あなたか第三
-者が被った損失、あるいは『プログラム』が他のソフトウェアと一緒に動作し
-ないという不具合などを含むがそれらに限らない)に一切の責任を負わない。
-そのような損害が生ずる可能性について彼らが忠告されていたとしても同様で
-ある。
-
- 条件と制約終わり
-
- 以上の条項をあなたの新しいプログラムに適用する方法
-
-あなたが新しいプログラムを開発したとして、公衆によってそれが利用される
-可能性を最大にしたいなら、そのプログラムをこの契約書の条項に従って
-誰でも再頒布あるいは変更できるようフリーソフトウェアにするのが最善です。
-
-そのためには、プログラムに以下のような表示を添付してください。その場合、
-保証が排除されているということを最も効果的に伝えるために、それぞれのソー
-スファイルの冒頭に表示を添付すれば最も安全です。少なくとも、「著作権表
-示」という行と全文がある場所へのポインタだけは各ファイルに含めて置いて
-ください。
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
- (訳:
-
- <プログラムの名前と、それが何をするかについての簡単な説明。>
- Copyright (C) <西暦年> <作者の名前>
-
- このプログラムはフリーソフトウェアです。あなたはこれを、フリーソフ
- トウェア財団によって発行された GNU 一般公衆利用許諾契約書(バージョ
- ン2か、希望によってはそれ以降のバージョンのうちどれか)の定める条件
- の下で再頒布または改変することができます。
-
- このプログラムは有用であることを願って頒布されますが、*全くの無保
- 証* です。商業可能性の保証や特定の目的への適合性は、言外に示された
- ものも含め全く存在しません。詳しくはGNU 一般公衆利用許諾契約書をご
- 覧ください。
-
- あなたはこのプログラムと共に、GNU 一般公衆利用許諾契約書の複製物を
- 一部受け取ったはずです。もし受け取っていなければ、フリーソフトウェ
- ア財団まで請求してください(宛先は the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA)。
-
- )
-
-電子ないし紙のメールであなたに問い合わせる方法についての情報も書き加え
-ましょう。
-
-プログラムが対話的なものならば、対話モードで起動した際に出力として以下
-のような短い告知が表示されるようにしてください:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
- (訳:
-
- Gnomovision バージョン 69, Copyright (C) 年 作者の名前
- Gnomovision は*全くの無保証*で提供されます。詳しくは「show w」
- とタイプして下さい。これはフリーソフトウェアであり、ある条件の下で
- 再頒布することが奨励されています。詳しくは「show c」とタイプして下
- さい。
-
- )
-
-ここで、仮想的なコマンド「show w」と「show c」は一般公衆利用許諾契約書
-の適切な部分を表示するようになっていなければなりません。もちろん、あな
-たが使うコマンドを「show w」や「show c」と呼ぶ必然性はありませんので、
-あなたのプログラムに合わせてマウスのクリックやメニューのアイテムにして
-も結構です。
-
-またあなたは、必要ならば(プログラマーとして働いていたら)あなたの雇用主、
-あるいは場合によっては学校から、そのプログラムに関する「著作権放棄声明
-(copyright disclaimer)」に署名してもらうべきです。以下は例ですので、名
-前を変えてください:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
- (訳:
-
- Yoyodyne社はここに、James Hackerによって書かれたプログラム
- 「Gnomovision」(コンパイラへ通すプログラム)に関する一切の著作権の利
- 益を放棄します。
-
- <Ty Coon氏の署名>、1989年4月1日
- Ty Coon、副社長
-
- )
-
-この一般公衆利用許諾契約書では、あなたのプログラムを独占的なプログラム
-に統合することを認めていません。あなたのプログラムがサブルーチンライブ
-ラリならば、独占的なアプリケーションとあなたのライブラリをリンクするこ
-とを許可したほうがより便利であると考えるかもしれません。もしこれがあな
-たの望むことならば、この契約書の代わりにGNU ライブラリ一般公衆利用許諾
-契約書を適用してください。
+ GNU 一般公衆利用許諾契約書 + バージョン2、1991年6月 + 日本語訳、2002年5月20日 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + この利用許諾契約書を、一字一句そのままに複製し頒布することは許可する。 + しかし変更は認めない。 + + This is an unofficial translation of the GNU General Public License + into Japanese. It was not published by the Free Software Foundation, + and does not legally state the distribution terms for software that + uses the GNU GPL--only the original English text of the GNU GPL does + that. However, we hope that this translation will help Japanese + speakers understand the GNU GPL better. + + (訳: 以下はGNU General Public Licenseの非公式な日本語訳です。これはフ + リーソフトウェア財団(the Free Software Foundataion)によって発表された + ものではなく、GNU GPLを適用したソフトウェアの頒布条件を法的に有効な形 + で述べたものではありません。頒布条件としてはGNU GPLの英語版テキストで + 指定されているもののみが有効です。しかしながら、私たちはこの翻訳が、 + 日本語を使用する人々にとってGNU GPLをより良く理解する助けとなることを + 望んでいます。) + + 翻訳は 八田真行<mhatta@gnu.org>が行った。原文は + http://www.gnu.org/licenses/gpl.txtである。誤訳の指摘や改善案を歓迎す + る。 + はじめに + +ソフトウェア向けライセンスの大半は、あなたがそのソフトウェアを共有した +り変更したりする自由を奪うように設計されています。対照的に、GNU 一般公 +衆利用許諾契約書は、あなたがフリーソフトウェアを共有したり変更したりす +る自由を保証する--すなわち、ソフトウェアがそのユーザすべてにとってフリー +であることを保証することを目的としています。この一般公衆利用許諾契約書 +はフリーソフトウェア財団のソフトウェアのほとんどに適用されており、また +GNU GPLを適用すると決めたフリーソフトウェア財団以外の作者によるプログ +ラムにも適用されています(いくつかのフリーソフトウェア財団のソフトウェ +アには、GNU GPLではなくGNU ライブラリ一般公衆利用許諾契約書が適用され +ていることもあります)。あなたもまた、ご自分のプログラムにGNU GPLを適用 +することが可能です。 + +私たちがフリーソフトウェアと言うとき、それは利用の自由について言及して +いるのであって、価格は問題にしていません。私たちの一般公衆利用許諾契約 +書は、あなたがフリーソフトウェアの複製物を頒布する自由を保証するよう設 +計されています(希望に応じてその種のサービスに手数料を課す自由も保証さ +れます)。また、あなたがソースコードを受け取るか、あるいは望めばそれを +入手することが可能であるということ、あなたがソフトウェアを変更し、その +一部を新たなフリーのプログラムで利用できるということ、そして、以上で述 +べたようなことができるということがあなたに知らされるということも保証さ +れます。 + +あなたの権利を守るため、私たちは誰かがあなたの有するこれらの権利を否定 +することや、これらの権利を放棄するよう要求することを禁止するという制限 +を加える必要があります。よって、あなたがソフトウェアの複製物を頒布した +りそれを変更したりする場合には、これらの制限のためにあなたにある種の責 +任が発生することになります。 + +例えば、あなたがフリーなプログラムの複製物を頒布する場合、有料か無料に +関わらず、あなたは自分が有する権利を全て受領者に与えなければなりません。 +また、あなたは彼らもソースコードを受け取るか手に入れることができるよう +保証しなければなりません。そして、あなたは彼らに対して以下で述べる条件 +を示し、彼らに自らの持つ権利について知らしめるようにしなければなりませ +ん。 + +私たちはあなたの権利を二段階の手順を踏んで保護します。(1) まずソフトウェ +アに対して著作権を主張し、そして (2) あなたに対して、ソフトウェアの複 +製や頒布または改変についての法的な許可を与えるこの契約書を提示します。 + +また、各作者や私たちを保護するため、私たちはこのフリーソフトウェアには +何の保証も無いということを誰もが確実に理解するようにし、またソフトウェ +アが誰か他人によって改変され、それが次々と頒布されていったとしても、そ +の受領者は彼らが手に入れたソフトウェアがオリジナルのバージョンでは無い +こと、そして原作者の名声は他人によって持ち込まれた可能性のある問題によっ +て影響されることがないということを周知させたいと思います。 + +最後に、ソフトウェア特許がいかなるフリーのプログラムの存在にも不断の脅 +威を投げかけていますが、私たちは、フリーなプログラムの再頒布者が個々に +特許ライセンスを取得することによって、事実上プログラムを独占的にしてし +まうという危険を避けたいと思います。こういった事態を予防するため、私た +ちはいかなる特許も誰もが自由に利用できるようライセンスされるか、全くラ +イセンスされないかのどちらかでなければならないことを明確にしました。 + +(訳注: 本契約書で「独占的(proprietary)」とは、ソフトウェアの利用や再頒 +布、改変が禁止されているか、許可を得ることが必要とされているか、あるい +は厳しい制限が課せられていて自由にそうすることが事実上できなくなってい +る状態のことを指す。詳しくは +http://www.gnu.org/philosophy/categories.ja.html#ProprietarySoftwareを +参照せよ。) + +複製や頒布、改変についての正確な条件と制約を以下で述べていきます。 + + GNU 一般公衆利用許諾契約書 + 複製、頒布、改変に関する条件と制約 + +0. この利用許諾契約書は、そのプログラム(またはその他の著作物)をこの一 +般公衆利用許諾契約書の定める条件の下で頒布できるという告知が著作権者に +よって記載されたプログラムまたはその他の著作物全般に適用される。以下で +は、「『プログラム』」とはそのようにしてこの契約書が適用されたプログラ +ムや著作物全般を意味し、また「『プログラム』を基にした著作物」とは『プ +ログラム』やその他著作権法の下で派生物と見なされるもの全般を指す。すな +わち、『プログラム』かその一部を、全く同一のままか、改変を加えたか、あ +るいは他の言語に翻訳された形で含む著作物のことである(「改変」という語 +の本来の意味からはずれるが、以下では翻訳も改変の一種と見なす)。それぞ +れの契約者は「あなた」と表現される。 + +複製や頒布、改変以外の活動はこの契約書ではカバーされない。それらはこの +契約書の対象外である。『プログラム』を実行する行為自体に制限はない。ま +た、そのような『プログラム』の出力結果は、その内容が『プログラム』を基 +にした著作物を構成する場合のみこの契約書によって保護される(『プログラ +ム』を実行したことによって作成されたということとは無関係である)。この +ような線引きの妥当性は、『プログラム』が何をするのかに依存する。 + +1. それぞれの複製物において適切な著作権表示と保証の否認声明(disclaimer +of warranty)を目立つよう適切に掲載し、またこの契約書および一切の保証の +不在に触れた告知すべてをそのまま残し、そしてこの契約書の複製物を『プロ +グラム』のいかなる受領者にも『プログラム』と共に頒布する限り、あなたは +『プログラム』のソースコードの複製物を、あなたが受け取った通りの形で複 +製または頒布することができる。媒体は問わない。 + +あなたは、物理的に複製物を譲渡するという行為に関して手数料を課しても良 +いし、希望によっては手数料を取って交換における保護の保証を提供しても良 +い。 + +2. あなたは自分の『プログラム』の複製物かその一部を改変して『プログラ +ム』を基にした著作物を形成し、そのような改変点や著作物を上記第1節の定 +める条件の下で複製または頒布することができる。ただし、そのためには以下 +の条件すべてを満たしていなければならない: + + a) あなたがそれらのファイルを変更したということと変更した日時が良 + く分かるよう、改変されたファイルに告示しなければならない。 + + b) 『プログラム』またはその一部を含む著作物、あるいは『プログラム』 + かその一部から派生した著作物を頒布あるいは発表する場合には、その全 + 体をこの契約書の条件に従って第三者へ無償で利用許諾しなければならな + い。 + + c) 改変されたプログラムが、通常実行する際に対話的にコマンドを読む + ようになっているならば、そのプログラムを最も一般的な方法で対話的に + 実行する際、適切な著作権表示、無保証であること(あるいはあなたが保 + 証を提供するということ)、ユーザがプログラムをこの契約書で述べた条 + 件の下で頒布することができるということ、そしてこの契約書の複製物を + 閲覧するにはどうしたらよいかというユーザへの説明を含む告知が印刷さ + れるか、あるいは画面に表示されるようにしなければならない(例外とし + て、『プログラム』そのものは対話的であっても通常そのような告知を印 + 刷しない場合には、『プログラム』を基にしたあなたの著作物にそのよう + な告知を印刷させる必要はない)。 + +以上の必要条件は全体としての改変された著作物に適用される。著作物の一部 +が『プログラム』から派生したものではないと確認でき、それら自身別の独立 +した著作物であると合理的に考えられるならば、あなたがそれらを別の著作物 +として分けて頒布する場合、そういった部分にはこの契約書とその条件は +適用されない。しかし、あなたが同じ部分を『プログラム』を基にした著作物 +全体の一部として頒布するならば、全体としての頒布物は、この契約書が +課す条件に従わなければならない。というのは、この契約書が他の契約者 +に与える許可は『プログラム』丸ごと全体に及び、誰が書いたかは関係なく各 +部分のすべてを保護するからである。 + +よって、すべてあなたによって書かれた著作物に対し、権利を主張したりあな +たの権利に異議を申し立てることはこの節の意図するところではない。むしろ、 +その趣旨は『プログラム』を基にした派生物ないし集合著作物の頒布を管理す +る権利を行使するということにある。 + +また、『プログラム』を基にしていないその他の著作物を『プログラム』(あ +るいは『プログラム』を基にした著作物)と一緒に集めただけのものを一巻の +保管装置ないし頒布媒体に収めても、その他の著作物までこの契約書が保 +護する対象になるということにはならない。 + +3. あなたは上記第1節および2節の条件に従い、『プログラム』(あるいは第2 +節における派生物)をオブジェクトコードないし実行形式で複製または頒布す +ることができる。ただし、その場合あなたは以下のうちどれか一つを実施しな +ければならない: + + a) 著作物に、『プログラム』に対応した完全かつ機械で読み取り可能な + ソースコードを添付する。ただし、ソースコードは上記第1節および2節の + 条件に従いソフトウェアの交換で習慣的に使われる媒体で頒布しなければ + ならない。あるいは、 + + b) 著作物に、いかなる第三者に対しても、『プログラム』に対応した完 + 全かつ機械で読み取り可能なソースコードを、頒布に要する物理的コスト + を上回らない程度の手数料と引き換えに提供する旨述べた少なくとも3年 + 間は有効な書面になった申し出を添える。ただし、ソースコードは上記第 + 1節および2節の条件に従いソフトウェアの交換で習慣的に使われる媒体で + 頒布しなければならない。あるいは、 + + c) 対応するソースコード頒布の申し出に際して、あなたが得た情報を一 + 緒に引き渡す(この選択肢は、営利を目的としない頒布であって、かつあ + なたが上記小節bで指定されているような申し出と共にオブジェクトコー + ドあるいは実行形式のプログラムしか入手していない場合に限り許可され + る)。 + +著作物のソースコードとは、それに対して改変を加える上で好ましいとされる +著作物の形式を意味する。ある実行形式の著作物にとって完全なソースコード +とは、それが含むモジュールすべてのソースコード全部に加え、関連するイン +ターフェース定義ファイルのすべてとライブラリのコンパイルやインストール +を制御するために使われるスクリプトをも加えたものを意味する。しかし特別 +な例外として、そのコンポーネント自体が実行形式に付随するのでは無い限り、 +頒布されるものの中に、実行形式が実行されるオペレーティングシステムの主 +要なコンポーネント(コンパイラやカーネル等)と通常一緒に(ソースかバイナ +リ形式のどちらかで)頒布されるものを含んでいる必要はないとする。 + +実行形式またはオブジェクトコードの頒布が、指定された場所からコピーする +ためのアクセス手段を提供することで為されるとして、その上でソースコード +も同等のアクセス手段によって同じ場所からコピーできるようになっているな +らば、第三者がオブジェクトコードと一緒にソースも強制的にコピーさせられ +るようになっていなくてもソースコード頒布の条件を満たしているものとする。 + +4. あなたは『プログラム』を、この契約書において明確に提示された行 +為を除き複製や改変、サブライセンス、あるいは頒布してはならない。他に +『プログラム』を複製や改変、サブライセンス、あるいは頒布する企てはすべ +て無効であり、この契約書の下でのあなたの権利を自動的に終結させるこ +とになろう。しかし、複製物や権利をこの契約書に従ってあなたから得た +人々に関しては、そのような人々がこの契約書に完全に従っている限り彼 +らのライセンスまで終結することはない。 + +5. あなたはこの契約書を受諾する必要は無い。というのは、あなたはこ +れに署名していないからである。しかし、この契約書以外にあなたに対し +て『プログラム』やその派生物を変更、頒布する許可を与えるものは存在しな +い。これらの行為は、あなたがこの契約書を受け入れない限り法によって +禁じられている。そこで、『プログラム』(あるいは『プログラム』を基にし +た著作物のすべて)を改変ないし頒布することにより、あなたは自分がそのよ +うな行為を行うためにこの契約書を受諾したということ、そして『プログ +ラム』とそれに基づく著作物の複製や頒布、改変についてこの契約書が課 +す制約と条件をすべて受け入れたということを示したものと見なす。 + +6. あなたが『プログラム』(または『プログラム』を基にした著作物全般)を +再頒布するたびに、その受領者は元々のライセンス許可者から、この契約書で +指定された条件と制約の下で『プログラム』を複製や頒布、あるいは改変する +許可を自動的に得るものとする。あなたは、受領者がここで認められた権利を +行使することに関してこれ以上他のいかなる制限も課すことができない。あな +たには、第三者がこの契約書に従うことを強制する責任はない。 + +7. 特許侵害あるいはその他の理由(特許関係に限らない)から、裁判所の判決 +あるいは申し立ての結果としてあなたに(裁判所命令や契約などにより)この契 +約書の条件と矛盾する制約が課された場合でも、あなたがこの契約書の条件を +免除されるわけではない。もしこの契約書の下であなたに課せられた責任と他 +の関連する責任を同時に満たすような形で頒布できないならば、結果としてあ +なたは『プログラム』を頒布することが全くできないということである。例え +ば特許ライセンスが、あなたから直接間接を問わずコピーを受け取った人が誰 +でも『プログラム』を使用料無料で再頒布することを認めていない場合、あな +たがその制約とこの契約書を両方とも満たすには『プログラム』の頒布を完全 +に中止するしかないだろう。 + +この節の一部分が特定の状況の下で無効ないし実施不可能な場合でも、節の残 +りの部分は適用されるよう意図されている。その他の状況では節が全体として +適用されるよう意図されている。 + +特許やその他の財産権を侵害したり、そのような権利の主張の効力に異議を唱 +えたりするようあなたを誘惑することがこの節の目的ではない。この節には、 +人々によってライセンス慣行として実現されてきた、フリーソフトウェア頒布 +のシステムの完全性を護るという目的しかない。多くの人々が、フリーソフト +ウェアの頒布システムが首尾一貫して適用されているという信頼に基づき、こ +のシステムを通じて頒布される多様なソフトウェアに寛大な貢献をしてきたの +は事実であるが、人がどのようなシステムを通じてソフトウェアを頒布したい +と思うかはあくまでも作者/寄与者次第であり、あなたが選択を押しつけるこ +とはできない。 + +この節は、この契約書のこの節以外の部分の一帰結になると考えられるケー +スを徹底的に明らかにすることを目的としている。 + +8. 『プログラム』の頒布や利用が、ある国においては特許または著作権が主 +張されたインターフェースのいずれかによって制限されている場合、『プログ +ラム』にこの契約書を適用した元の著作権者は、そういった国々を排除し +た明確な地理的頒布制限を加え、そこで排除されていない国の中やそれらの国々 +の間でのみ頒布が許可されるようにしても構わない。その場合、そのような制 +限はこの契約書本文で書かれているのと同様に見なされる。 + +9. フリーソフトウェア財団は、時によって改訂または新版の一般公衆利用許 +諾書を発表することができる。そのような新版は現在のバージョンとその精神 +においては似たものになるだろうが、新たな問題や懸念を解決するため細部で +は異なる可能性がある。 + +それぞれのバージョンには、見分けが付くようにバージョン番号が振られてい +る。『プログラム』においてそれに適用されるこの契約書のバージョン番号が +指定されていて、更に「それ以降のいかなるバージョン」も適用して良いとなっ +ていた場合、あなたは従う条件と制約として、指定のバージョンか、フリーソ +フトウェア財団によって発行された指定のバージョン以降の版のどれか一つの +どちらかを選ぶことが出来る。『プログラム』でライセンスのバージョン番号 +が指定されていないならば、あなたは今までにフリーソフトウェア財団から発 +行されたバージョンの中から好きに選んで構わない。 + +10. もしあなたが『プログラム』の一部を、その頒布条件がこの契約書と +異なる他のフリーなプログラムと統合したいならば、作者に連絡して許可を求 +めよ。フリーソフトウェア財団が著作権を保有するソフトウェアについては、 +フリーソフトウェア財団に連絡せよ。私たちは、このような場合のために特別 +な例外を設けることもある。私たちが決定を下すにあたっては、私たちのフリー +ソフトウェアの派生物すべてがフリーな状態に保たれるということと、一般的 +にソフトウェアの共有と再利用を促進するという二つの目標を規準に検討され +るであろう。 + 無保証について + +11. 『プログラム』は代価無しに利用が許可されるので、適切な法が認める限 +りにおいて、『プログラム』に関するいかなる保証も存在しない。書面で別に +述べる場合を除いて、著作権者、またはその他の団体は、『プログラム』を、 +表明されたか言外にかは問わず、商業的適性を保証するほのめかしやある特定 +の目的への適合性(に限られない)を含む一切の保証無しに「あるがまま」で提 +供する。『プログラム』の質と性能に関するリスクのすべてはあなたに帰属す +る。『プログラム』に欠陥があると判明した場合、あなたは必要な保守点検や +補修、修正に要するコストのすべてを引き受けることになる。 + +12. 適切な法か書面での同意によって命ぜられない限り、著作権者、または上 +記で許可されている通りに『プログラム』を改変または再頒布したその他の団 +体は、あなたに対して『プログラム』の利用ないし利用不能で生じた一般的、 +特別的、偶然的、必然的な損害(データの消失や不正確な処理、あなたか第三 +者が被った損失、あるいは『プログラム』が他のソフトウェアと一緒に動作し +ないという不具合などを含むがそれらに限らない)に一切の責任を負わない。 +そのような損害が生ずる可能性について彼らが忠告されていたとしても同様で +ある。 + + 条件と制約終わり + + 以上の条項をあなたの新しいプログラムに適用する方法 + +あなたが新しいプログラムを開発したとして、公衆によってそれが利用される +可能性を最大にしたいなら、そのプログラムをこの契約書の条項に従って +誰でも再頒布あるいは変更できるようフリーソフトウェアにするのが最善です。 + +そのためには、プログラムに以下のような表示を添付してください。その場合、 +保証が排除されているということを最も効果的に伝えるために、それぞれのソー +スファイルの冒頭に表示を添付すれば最も安全です。少なくとも、「著作権表 +示」という行と全文がある場所へのポインタだけは各ファイルに含めて置いて +ください。 + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + (訳: + + <プログラムの名前と、それが何をするかについての簡単な説明。> + Copyright (C) <西暦年> <作者の名前> + + このプログラムはフリーソフトウェアです。あなたはこれを、フリーソフ + トウェア財団によって発行された GNU 一般公衆利用許諾契約書(バージョ + ン2か、希望によってはそれ以降のバージョンのうちどれか)の定める条件 + の下で再頒布または改変することができます。 + + このプログラムは有用であることを願って頒布されますが、*全くの無保 + 証* です。商業可能性の保証や特定の目的への適合性は、言外に示された + ものも含め全く存在しません。詳しくはGNU 一般公衆利用許諾契約書をご + 覧ください。 + + あなたはこのプログラムと共に、GNU 一般公衆利用許諾契約書の複製物を + 一部受け取ったはずです。もし受け取っていなければ、フリーソフトウェ + ア財団まで請求してください(宛先は the Free Software Foundation, + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA)。 + + ) + +電子ないし紙のメールであなたに問い合わせる方法についての情報も書き加え +ましょう。 + +プログラムが対話的なものならば、対話モードで起動した際に出力として以下 +のような短い告知が表示されるようにしてください: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + + (訳: + + Gnomovision バージョン 69, Copyright (C) 年 作者の名前 + Gnomovision は*全くの無保証*で提供されます。詳しくは「show w」 + とタイプして下さい。これはフリーソフトウェアであり、ある条件の下で + 再頒布することが奨励されています。詳しくは「show c」とタイプして下 + さい。 + + ) + +ここで、仮想的なコマンド「show w」と「show c」は一般公衆利用許諾契約書 +の適切な部分を表示するようになっていなければなりません。もちろん、あな +たが使うコマンドを「show w」や「show c」と呼ぶ必然性はありませんので、 +あなたのプログラムに合わせてマウスのクリックやメニューのアイテムにして +も結構です。 + +またあなたは、必要ならば(プログラマーとして働いていたら)あなたの雇用主、 +あるいは場合によっては学校から、そのプログラムに関する「著作権放棄声明 +(copyright disclaimer)」に署名してもらうべきです。以下は例ですので、名 +前を変えてください: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + + (訳: + + Yoyodyne社はここに、James Hackerによって書かれたプログラム + 「Gnomovision」(コンパイラへ通すプログラム)に関する一切の著作権の利 + 益を放棄します。 + + <Ty Coon氏の署名>、1989年4月1日 + Ty Coon、副社長 + + ) + +この一般公衆利用許諾契約書では、あなたのプログラムを独占的なプログラム +に統合することを認めていません。あなたのプログラムがサブルーチンライブ +ラリならば、独占的なアプリケーションとあなたのライブラリをリンクするこ +とを許可したほうがより便利であると考えるかもしれません。もしこれがあな +たの望むことならば、この契約書の代わりにGNU ライブラリ一般公衆利用許諾 +契約書を適用してください。 diff --git a/conf/battle/battleground.conf b/conf/battle/battleground.conf index 80bb0477a..a91e1ddd6 100644 --- a/conf/battle/battleground.conf +++ b/conf/battle/battleground.conf @@ -1,44 +1,44 @@ -// ______ __ __
-// /\ _ \/\ \__/\ \
-// __\ \ \L\ \ \ ,_\ \ \___ __ ___ __
-// /'__`\ \ __ \ \ \/\ \ _ `\ /'__`\/' _ `\ /'__`\
-///\ __/\ \ \/\ \ \ \_\ \ \ \ \/\ __//\ \/\ \/\ \L\.\_
-//\ \____\\ \_\ \_\ \__\\ \_\ \_\ \____\ \_\ \_\ \__/.\_\
-// \/____/ \/_/\/_/\/__/ \/_/\/_/\/____/\/_/\/_/\/__/\/_/
-// _ _ _ _ _ _ _ _ _ _ _ _ _
-// / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
-//( e | n | g | l | i | s | h ) ( A | t | h | e | n | a )
-// \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
-//
-//--------------------------------------------------------------
-// eAthena Battle Configuration File
-// Originally Translated by Peter Kieser <pfak@telus.net>
-// Made in to plainer English by Ancyker
-//--------------------------------------------------------------
-// Note 1: Value is a config switch (on/off, yes/no or 1/0)
-// Note 2: Value is in percents (100 means 100%)
-// Note 3: Value is a bit field. If no description is given,
-// assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun)
-//--------------------------------------------------------------
-
-// Melee damage adjustments (non skills) for Battleground maps (Note 2)
-bg_short_attack_damage_rate: 80
-
-// Ranged damage adjustments (non skills) for Battleground maps (Note 2)
-bg_long_attack_damage_rate: 80
-
-// Weapon skills damage adjustments for Battleground maps (Note 2)
-bg_weapon_attack_damage_rate: 60
-
-// Magic skills damage adjustments for Battleground maps (Note 2)
-bg_magic_attack_damage_rate: 60
-
-// Misc skills damage adjustments for Battleground maps (Note 2)
-bg_misc_attack_damage_rate: 60
-
-// Flee penalty on BG grounds.
-// NOTE: It's %, not absolute, so 20 is -20% of your total flee
-bg_flee_penalty: 20
-
-// Interval before updating the bg-member map mini-dots (milliseconds)
-bg_update_interval: 1000
+// ______ __ __ +// /\ _ \/\ \__/\ \ +// __\ \ \L\ \ \ ,_\ \ \___ __ ___ __ +// /'__`\ \ __ \ \ \/\ \ _ `\ /'__`\/' _ `\ /'__`\ +///\ __/\ \ \/\ \ \ \_\ \ \ \ \/\ __//\ \/\ \/\ \L\.\_ +//\ \____\\ \_\ \_\ \__\\ \_\ \_\ \____\ \_\ \_\ \__/.\_\ +// \/____/ \/_/\/_/\/__/ \/_/\/_/\/____/\/_/\/_/\/__/\/_/ +// _ _ _ _ _ _ _ _ _ _ _ _ _ +// / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ +//( e | n | g | l | i | s | h ) ( A | t | h | e | n | a ) +// \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ +// +//-------------------------------------------------------------- +// eAthena Battle Configuration File +// Originally Translated by Peter Kieser <pfak@telus.net> +// Made in to plainer English by Ancyker +//-------------------------------------------------------------- +// Note 1: Value is a config switch (on/off, yes/no or 1/0) +// Note 2: Value is in percents (100 means 100%) +// Note 3: Value is a bit field. If no description is given, +// assume unit types (1: Pc, 2: Mob, 4: Pet, 8: Homun) +//-------------------------------------------------------------- + +// Melee damage adjustments (non skills) for Battleground maps (Note 2) +bg_short_attack_damage_rate: 80 + +// Ranged damage adjustments (non skills) for Battleground maps (Note 2) +bg_long_attack_damage_rate: 80 + +// Weapon skills damage adjustments for Battleground maps (Note 2) +bg_weapon_attack_damage_rate: 60 + +// Magic skills damage adjustments for Battleground maps (Note 2) +bg_magic_attack_damage_rate: 60 + +// Misc skills damage adjustments for Battleground maps (Note 2) +bg_misc_attack_damage_rate: 60 + +// Flee penalty on BG grounds. +// NOTE: It's %, not absolute, so 20 is -20% of your total flee +bg_flee_penalty: 20 + +// Interval before updating the bg-member map mini-dots (milliseconds) +bg_update_interval: 1000 diff --git a/db/mercenary_db.txt b/db/mercenary_db.txt index 572228229..23bd4970d 100644 --- a/db/mercenary_db.txt +++ b/db/mercenary_db.txt @@ -1,39 +1,39 @@ -//ID,Sprite_Name,Name,LV,HP,SP,Range1,ATK1,ATK2,DEF,MDEF,STR,AGI,VIT,INT,DEX,LUK,Range2,Range3,Scale,Race,Element,Speed,aDelay,aMotion,dMotion
-// Monster Mercenaries
-1191,MIMIC,Mimic,51,6120,100,2,150,900,10,40,44,121,1,60,75,110,10,12,1,0,60,100,972,500,288
-1506,DISGUISE,Disguise,55,7543,100,2,279,546,18,29,0,72,45,35,48,65,10,12,1,6,82,147,516,768,384
-1275,ALICE,Alice,62,10000,100,2,550,700,5,5,64,64,42,85,100,130,10,12,1,7,60,200,502,2304,480
-1965,M_WILD_ROSE,Wild Rose,38,2980,130,2,315,360,0,15,65,85,15,35,65,80,10,12,0,2,24,100,964,864,288
-1966,M_DOPPELGANGER,Doppelganger,72,249000,200,2,1340,1590,60,35,88,90,30,35,125,65,10,12,1,6,67,100,480,480,288
-1967,M_YGNIZEM,Egnigem Cenia,58,11200,320,2,823,1212,35,8,60,35,52,18,79,20,10,12,1,7,43,145,576,432,288
-// Normal Mercenaries
-6017,MER_ARCHER01,Mina,20,256,200,10,170,85,7,5,1,16,5,1,28,8,10,0,0,7,20,150,700,432,300
-6018,MER_ARCHER02,Dororu,30,457,70,10,228,114,11,7,1,18,8,1,40,11,10,0,0,7,20,150,700,432,300
-6019,MER_ARCHER03,Nami,40,732,93,10,260,130,15,9,3,21,12,4,52,17,10,0,0,7,20,150,700,432,300
-6020,MER_ARCHER04,Elfin,50,1092,116,10,310,155,18,11,5,33,17,6,60,23,10,0,0,7,20,150,575,432,300
-6021,MER_ARCHER05,Clara,60,2212,280,10,360,180,20,13,5,41,17,12,75,30,10,0,0,7,20,150,575,432,300
-6022,MER_ARCHER06,Dali,70,3098,353,10,424,212,21,15,11,46,24,22,83,37,10,0,0,7,20,150,575,432,300
-6023,MER_ARCHER07,Karaya,80,4051,415,10,468,234,22,16,14,55,27,26,91,44,10,0,0,7,20,150,450,432,300
-6024,MER_ARCHER08,Hiyori,90,5039,469,10,482,241,24,18,19,65,27,27,103,49,10,0,0,7,20,150,450,432,300
-6025,MER_ARCHER09,Kero,95,5572,499,10,500,250,25,20,20,71,27,28,110,51,10,0,0,7,20,150,450,432,300
-6026,MER_ARCHER10,Sukye,99,7381,642,10,816,308,49,49,21,83,27,28,123,52,10,0,0,7,20,150,450,432,300
-6027,MER_LANCER01,David,22,2071,100,2,168,84,30,1,27,1,4,1,30,2,10,0,0,7,20,150,700,432,300
-6028,MER_LANCER02,Ellen,34,2523,131,2,208,104,33,1,37,1,4,1,37,4,10,0,0,7,20,150,700,432,300
-6029,MER_LANCER03,Luise,41,3397,161,2,248,124,36,5,45,1,22,1,40,6,10,0,0,7,20,150,700,432,300
-6030,MER_LANCER04,Frank,55,4580,191,2,300,150,39,5,55,2,35,1,50,8,10,0,0,7,20,150,575,432,300
-6031,MER_LANCER05,Ryan,60,5899,221,2,350,160,42,10,65,2,39,1,60,10,10,0,0,7,20,150,575,432,300
-6032,MER_LANCER06,Paolo,72,7874,252,2,370,185,46,10,75,3,15,77,61,12,10,0,0,7,20,150,575,432,300
-6033,MER_LANCER07,Jens,81,10260,330,2,380,190,50,15,85,3,63,20,61,14,10,0,0,7,20,150,450,432,300
-6034,MER_LANCER08,Thierry,90,13167,366,2,400,200,55,20,95,20,74,20,63,16,10,0,0,7,20,150,450,432,300
-6035,MER_LANCER09,Steven,95,14648,398,2,440,220,60,25,100,25,77,25,63,18,10,0,0,7,20,150,450,432,300
-6036,MER_LANCER10,Wayne,99,18000,413,2,700,250,70,30,120,30,90,30,70,30,10,0,0,7,20,150,450,432,300
-6037,MER_SWORDMAN01,Rodin,20,502,70,2,174,87,26,0,21,27,5,1,30,3,10,0,0,7,20,150,700,432,300
-6038,MER_SWORDMAN02,Lancer,30,979,99,2,258,129,31,0,26,38,6,1,35,3,10,0,0,7,20,150,700,432,300
-6039,MER_SWORDMAN03,Nathan,40,1555,134,2,326,163,36,3,31,45,7,6,40,6,10,0,0,7,20,150,700,432,300
-6040,MER_SWORDMAN04,Roan,50,2397,162,2,382,191,39,5,37,59,8,6,40,6,10,0,0,7,20,150,575,432,300
-6041,MER_SWORDMAN05,Orizaro,60,3387,195,2,406,203,42,7,48,68,9,6,45,9,10,0,0,7,20,150,575,432,300
-6042,MER_SWORDMAN06,Thyla,70,4495,241,2,436,218,45,12,53,79,10,12,50,9,10,0,0,7,20,150,575,432,300
-6043,MER_SWORDMAN07,Ben,80,5889,279,2,468,234,47,15,59,88,11,12,55,12,10,0,0,7,20,150,450,432,300
-6044,MER_SWORDMAN08,Pinaka,90,7520,325,2,500,250,49,18,70,95,12,18,60,15,10,0,0,7,20,150,450,432,300
-6045,MER_SWORDMAN09,Kuhlmann,95,9052,348,2,524,262,51,22,80,95,18,18,60,15,10,0,0,7,20,150,450,432,300
-6046,MER_SWORDMAN10,Roux,99,12355,451,2,760,280,64,30,99,105,30,30,60,30,10,0,0,7,20,150,450,432,300
+//ID,Sprite_Name,Name,LV,HP,SP,Range1,ATK1,ATK2,DEF,MDEF,STR,AGI,VIT,INT,DEX,LUK,Range2,Range3,Scale,Race,Element,Speed,aDelay,aMotion,dMotion +// Monster Mercenaries +1191,MIMIC,Mimic,51,6120,100,2,150,900,10,40,44,121,1,60,75,110,10,12,1,0,60,100,972,500,288 +1506,DISGUISE,Disguise,55,7543,100,2,279,546,18,29,0,72,45,35,48,65,10,12,1,6,82,147,516,768,384 +1275,ALICE,Alice,62,10000,100,2,550,700,5,5,64,64,42,85,100,130,10,12,1,7,60,200,502,2304,480 +1965,M_WILD_ROSE,Wild Rose,38,2980,130,2,315,360,0,15,65,85,15,35,65,80,10,12,0,2,24,100,964,864,288 +1966,M_DOPPELGANGER,Doppelganger,72,249000,200,2,1340,1590,60,35,88,90,30,35,125,65,10,12,1,6,67,100,480,480,288 +1967,M_YGNIZEM,Egnigem Cenia,58,11200,320,2,823,1212,35,8,60,35,52,18,79,20,10,12,1,7,43,145,576,432,288 +// Normal Mercenaries +6017,MER_ARCHER01,Mina,20,256,200,10,170,85,7,5,1,16,5,1,28,8,10,0,0,7,20,150,700,432,300 +6018,MER_ARCHER02,Dororu,30,457,70,10,228,114,11,7,1,18,8,1,40,11,10,0,0,7,20,150,700,432,300 +6019,MER_ARCHER03,Nami,40,732,93,10,260,130,15,9,3,21,12,4,52,17,10,0,0,7,20,150,700,432,300 +6020,MER_ARCHER04,Elfin,50,1092,116,10,310,155,18,11,5,33,17,6,60,23,10,0,0,7,20,150,575,432,300 +6021,MER_ARCHER05,Clara,60,2212,280,10,360,180,20,13,5,41,17,12,75,30,10,0,0,7,20,150,575,432,300 +6022,MER_ARCHER06,Dali,70,3098,353,10,424,212,21,15,11,46,24,22,83,37,10,0,0,7,20,150,575,432,300 +6023,MER_ARCHER07,Karaya,80,4051,415,10,468,234,22,16,14,55,27,26,91,44,10,0,0,7,20,150,450,432,300 +6024,MER_ARCHER08,Hiyori,90,5039,469,10,482,241,24,18,19,65,27,27,103,49,10,0,0,7,20,150,450,432,300 +6025,MER_ARCHER09,Kero,95,5572,499,10,500,250,25,20,20,71,27,28,110,51,10,0,0,7,20,150,450,432,300 +6026,MER_ARCHER10,Sukye,99,7381,642,10,816,308,49,49,21,83,27,28,123,52,10,0,0,7,20,150,450,432,300 +6027,MER_LANCER01,David,22,2071,100,2,168,84,30,1,27,1,4,1,30,2,10,0,0,7,20,150,700,432,300 +6028,MER_LANCER02,Ellen,34,2523,131,2,208,104,33,1,37,1,4,1,37,4,10,0,0,7,20,150,700,432,300 +6029,MER_LANCER03,Luise,41,3397,161,2,248,124,36,5,45,1,22,1,40,6,10,0,0,7,20,150,700,432,300 +6030,MER_LANCER04,Frank,55,4580,191,2,300,150,39,5,55,2,35,1,50,8,10,0,0,7,20,150,575,432,300 +6031,MER_LANCER05,Ryan,60,5899,221,2,350,160,42,10,65,2,39,1,60,10,10,0,0,7,20,150,575,432,300 +6032,MER_LANCER06,Paolo,72,7874,252,2,370,185,46,10,75,3,15,77,61,12,10,0,0,7,20,150,575,432,300 +6033,MER_LANCER07,Jens,81,10260,330,2,380,190,50,15,85,3,63,20,61,14,10,0,0,7,20,150,450,432,300 +6034,MER_LANCER08,Thierry,90,13167,366,2,400,200,55,20,95,20,74,20,63,16,10,0,0,7,20,150,450,432,300 +6035,MER_LANCER09,Steven,95,14648,398,2,440,220,60,25,100,25,77,25,63,18,10,0,0,7,20,150,450,432,300 +6036,MER_LANCER10,Wayne,99,18000,413,2,700,250,70,30,120,30,90,30,70,30,10,0,0,7,20,150,450,432,300 +6037,MER_SWORDMAN01,Rodin,20,502,70,2,174,87,26,0,21,27,5,1,30,3,10,0,0,7,20,150,700,432,300 +6038,MER_SWORDMAN02,Lancer,30,979,99,2,258,129,31,0,26,38,6,1,35,3,10,0,0,7,20,150,700,432,300 +6039,MER_SWORDMAN03,Nathan,40,1555,134,2,326,163,36,3,31,45,7,6,40,6,10,0,0,7,20,150,700,432,300 +6040,MER_SWORDMAN04,Roan,50,2397,162,2,382,191,39,5,37,59,8,6,40,6,10,0,0,7,20,150,575,432,300 +6041,MER_SWORDMAN05,Orizaro,60,3387,195,2,406,203,42,7,48,68,9,6,45,9,10,0,0,7,20,150,575,432,300 +6042,MER_SWORDMAN06,Thyla,70,4495,241,2,436,218,45,12,53,79,10,12,50,9,10,0,0,7,20,150,575,432,300 +6043,MER_SWORDMAN07,Ben,80,5889,279,2,468,234,47,15,59,88,11,12,55,12,10,0,0,7,20,150,450,432,300 +6044,MER_SWORDMAN08,Pinaka,90,7520,325,2,500,250,49,18,70,95,12,18,60,15,10,0,0,7,20,150,450,432,300 +6045,MER_SWORDMAN09,Kuhlmann,95,9052,348,2,524,262,51,22,80,95,18,18,60,15,10,0,0,7,20,150,450,432,300 +6046,MER_SWORDMAN10,Roux,99,12355,451,2,760,280,64,30,99,105,30,30,60,30,10,0,0,7,20,150,450,432,300 diff --git a/db/mercenary_skill_db.txt b/db/mercenary_skill_db.txt index f0134c184..e1b8a20c1 100644 --- a/db/mercenary_skill_db.txt +++ b/db/mercenary_skill_db.txt @@ -1,118 +1,118 @@ -//MercenryID,SkillID,SkillLevel
-// Archer Mercenaries Level 1-10.
-// MER_ARCHER01
-6017,8207,2 //MA_DOUBLE
-6017,8233,1 //MER_AUTOBERSERK
-// MER_ARCHER02
-6018,8208,2 //MA_SHOWER
-6018,8224,1 //MER_SIGHT
-// MER_ARCHER03
-6019,8214,1 //MA_CHARGEARROW
-6019,8223,1 //MER_QUICKEN
-// MER_ARCHER04
-6020,8237,1 //MER_ESTIMATION
-6020,8222,1 //MER_MAGNIFICAT
-6020,8227,1 //MER_TENDER
-// MER_ARCHER05
-6021,8207,5 //MA_DOUBLE
-6021,8232,1 //MER_PROVOKE
-6021,8213,1 //MA_REMOVETRAP
-// MER_ARCHER06
-6022,8207,7 //MA_DOUBLE
-6022,8209,3 //MA_SKIDTRAP
-6022,8234,1 //MER_DECAGI
-// MER_ARCHER07
-6023,8208,10 //MA_SHOWER
-6023,8230,1 //MER_MENTALCURE
-6023,8212,2 //MA_FREEZINGTRAP
-// MER_ARCHER08
-6024,8223,2 //MER_QUICKEN
-6024,8232,3 //MER_PROVOKE
-6024,8211,3 //MA_SANDMAN
-// MER_ARCHER09
-6025,8207,10 //MA_DOUBLE
-6025,8214,1 //MA_CHARGEARROW
-6025,8210,5 //MA_LANDMINE
-// MER_ARCHER10
-6026,8214,1 //MA_CHARGEARROW
-6026,8215,5 //MA_SHARPSHOOTING
-6026,8223,5 //MER_QUICKEN
-6026,8233,1 //MER_AUTOBERSERK
-// Lancer Mercenaries Level 1-10.
-// MER_LANCER01
-6027,8216,1 //ML_PIERCE
-6027,8226,1 //MER_REGAIN
-// MER_LANCER02
-6028,8217,2 //ML_BRANDISH
-6028,8236,1 //MER_LEXDIVINA
-// MER_LANCER03
-6029,8216,2 //ML_PIERCE
-6029,8221,1 //ML_DEVOTION
-6029,8229,1 //MER_RECUPERATE
-// MER_LANCER04
-6030,8219,1 //ML_DEFENDER
-6030,8225,4 //MER_CRASH
-// MER_LANCER05
-6031,8216,5 //ML_PIERCE
-6031,8220,3 //ML_AUTOGUARD
-// MER_LANCER06
-6032,8223,2 //MER_QUICKEN
-6032,8217,5 //ML_BRANDISH
-// MER_LANCER07
-6033,8221,1 //ML_DEVOTION
-6033,8233,1 //MER_AUTOBERSERK
-// MER_LANCER08
-6034,8235,1 //MER_SCAPEGOAT
-6034,8216,10 //ML_PIERCE
-6034,8232,5 //MER_PROVOKE
-// MER_LANCER09
-6035,8217,10 //ML_BRANDISH
-6035,8220,7 //ML_AUTOGUARD
-6035,8219,3 //ML_DEFENDER
-// MER_LANCER10
-6036,8223,5 //MER_QUICKEN
-6036,8220,10 //ML_AUTOGUARD
-6036,8221,3 //ML_DEVOTION
-6036,8218,5 //ML_SPIRALPIERCE
-// Swordman Mercenaries Level 1-10.
-// MER_SWORDMAN01
-6037,8201,1 //MS_BASH
-6037,8234,1 //MER_DECAGI
-// MER_SWORDMAN02
-6038,8232,5 //MER_PROVOKE
-6038,8202,3 //MS_MAGNUM
-// MER_SWORDMAN03
-6039,8223,1 //MER_QUICKEN
-6039,8228,1 //MER_BENEDICTION
-// MER_SWORDMAN04
-6040,8225,1 //MER_CRASH
-6040,8202,5 //MS_MAGNUM
-// MER_SWORDMAN05
-6041,8201,5 //MS_BASH
-6041,8225,4 //MER_CRASH
-6041,8228,1 //MER_BENEDICTION
-// MER_SWORDMAN06
-6042,8223,5 //MER_QUICKEN
-6042,8237,1 //MER_ESTIMATION
-6042,8234,3 //MER_DECAGI
-// MER_SWORDMAN07
-6043,8201,10 //MS_BASH
-6043,8233,1 //MER_AUTOBERSERK
-6043,8235,1 //MER_SCAPEGOAT
-// MER_SWORDMAN08
-6044,8223,10 //MER_QUICKEN
-6044,8203,5 //MS_BOWLINGABASH
-6044,8231,1 //MER_COMPRESS
-6044,8204,4 //MS_PARRYING
-// MER_SWORDMAN09
-6045,8203,8 //MS_BOWLINGABASH
-6045,8225,3 //MER_CRASH
-6045,8205,5 //MS_REFLECTSHIELD
-// MER_SWORDMAN10
-6046,8223,10 //MER_QUICKEN
-6046,8203,10 //MS_BOWLINGABASH
-6046,8201,10 //MS_BASH
-6046,8206,1 //MS_BERSERK
-// Monster Mercenaries
-// Wild Rose
-1965,8201,5 //MS_BASH
+//MercenryID,SkillID,SkillLevel +// Archer Mercenaries Level 1-10. +// MER_ARCHER01 +6017,8207,2 //MA_DOUBLE +6017,8233,1 //MER_AUTOBERSERK +// MER_ARCHER02 +6018,8208,2 //MA_SHOWER +6018,8224,1 //MER_SIGHT +// MER_ARCHER03 +6019,8214,1 //MA_CHARGEARROW +6019,8223,1 //MER_QUICKEN +// MER_ARCHER04 +6020,8237,1 //MER_ESTIMATION +6020,8222,1 //MER_MAGNIFICAT +6020,8227,1 //MER_TENDER +// MER_ARCHER05 +6021,8207,5 //MA_DOUBLE +6021,8232,1 //MER_PROVOKE +6021,8213,1 //MA_REMOVETRAP +// MER_ARCHER06 +6022,8207,7 //MA_DOUBLE +6022,8209,3 //MA_SKIDTRAP +6022,8234,1 //MER_DECAGI +// MER_ARCHER07 +6023,8208,10 //MA_SHOWER +6023,8230,1 //MER_MENTALCURE +6023,8212,2 //MA_FREEZINGTRAP +// MER_ARCHER08 +6024,8223,2 //MER_QUICKEN +6024,8232,3 //MER_PROVOKE +6024,8211,3 //MA_SANDMAN +// MER_ARCHER09 +6025,8207,10 //MA_DOUBLE +6025,8214,1 //MA_CHARGEARROW +6025,8210,5 //MA_LANDMINE +// MER_ARCHER10 +6026,8214,1 //MA_CHARGEARROW +6026,8215,5 //MA_SHARPSHOOTING +6026,8223,5 //MER_QUICKEN +6026,8233,1 //MER_AUTOBERSERK +// Lancer Mercenaries Level 1-10. +// MER_LANCER01 +6027,8216,1 //ML_PIERCE +6027,8226,1 //MER_REGAIN +// MER_LANCER02 +6028,8217,2 //ML_BRANDISH +6028,8236,1 //MER_LEXDIVINA +// MER_LANCER03 +6029,8216,2 //ML_PIERCE +6029,8221,1 //ML_DEVOTION +6029,8229,1 //MER_RECUPERATE +// MER_LANCER04 +6030,8219,1 //ML_DEFENDER +6030,8225,4 //MER_CRASH +// MER_LANCER05 +6031,8216,5 //ML_PIERCE +6031,8220,3 //ML_AUTOGUARD +// MER_LANCER06 +6032,8223,2 //MER_QUICKEN +6032,8217,5 //ML_BRANDISH +// MER_LANCER07 +6033,8221,1 //ML_DEVOTION +6033,8233,1 //MER_AUTOBERSERK +// MER_LANCER08 +6034,8235,1 //MER_SCAPEGOAT +6034,8216,10 //ML_PIERCE +6034,8232,5 //MER_PROVOKE +// MER_LANCER09 +6035,8217,10 //ML_BRANDISH +6035,8220,7 //ML_AUTOGUARD +6035,8219,3 //ML_DEFENDER +// MER_LANCER10 +6036,8223,5 //MER_QUICKEN +6036,8220,10 //ML_AUTOGUARD +6036,8221,3 //ML_DEVOTION +6036,8218,5 //ML_SPIRALPIERCE +// Swordman Mercenaries Level 1-10. +// MER_SWORDMAN01 +6037,8201,1 //MS_BASH +6037,8234,1 //MER_DECAGI +// MER_SWORDMAN02 +6038,8232,5 //MER_PROVOKE +6038,8202,3 //MS_MAGNUM +// MER_SWORDMAN03 +6039,8223,1 //MER_QUICKEN +6039,8228,1 //MER_BENEDICTION +// MER_SWORDMAN04 +6040,8225,1 //MER_CRASH +6040,8202,5 //MS_MAGNUM +// MER_SWORDMAN05 +6041,8201,5 //MS_BASH +6041,8225,4 //MER_CRASH +6041,8228,1 //MER_BENEDICTION +// MER_SWORDMAN06 +6042,8223,5 //MER_QUICKEN +6042,8237,1 //MER_ESTIMATION +6042,8234,3 //MER_DECAGI +// MER_SWORDMAN07 +6043,8201,10 //MS_BASH +6043,8233,1 //MER_AUTOBERSERK +6043,8235,1 //MER_SCAPEGOAT +// MER_SWORDMAN08 +6044,8223,10 //MER_QUICKEN +6044,8203,5 //MS_BOWLINGABASH +6044,8231,1 //MER_COMPRESS +6044,8204,4 //MS_PARRYING +// MER_SWORDMAN09 +6045,8203,8 //MS_BOWLINGABASH +6045,8225,3 //MER_CRASH +6045,8205,5 //MS_REFLECTSHIELD +// MER_SWORDMAN10 +6046,8223,10 //MER_QUICKEN +6046,8203,10 //MS_BOWLINGABASH +6046,8201,10 //MS_BASH +6046,8206,1 //MS_BERSERK +// Monster Mercenaries +// Wild Rose +1965,8201,5 //MS_BASH diff --git a/doc/map_cache.txt b/doc/map_cache.txt index c235e8022..394a5c802 100644 --- a/doc/map_cache.txt +++ b/doc/map_cache.txt @@ -1,67 +1,67 @@ -//===== Athena Doc ========================================
-//= eAthena Map Cache Builder and Format Documentation
-//===== By ================================================
-//= DracoRPG
-//===== Version ===========================================
-//= 1.0
-//=========================================================
-//= 0.1 - Short howto for the initial builder version
-//= 1.0 - Complete manual covering the improved version
-//===== Description =======================================
-//= A complete manual for eAthena's map cache generator
-//= as well as a reference on the map cache format used
-//=========================================================
-
-Preface:
--------------------------------------------------------------------------------
-
-Since SVN revision ~10000, the map-server does not know how to read RO client files anymore. It reads maps from a
-"map cache" file that contains all and only the useful data about the maps. A map cache containing every official
-kRO Sakray map currently supported by eAthena is provided as a default.
-If you have custom maps or want to minimize the size of your map cache because your server does not load all of them
-(multi-map-server or light test server), you can use the map cache builder to generate a new one fitting your needs.
-
-Map cache builder manual:
--------------------------------------------------------------------------------
-
-The source code for the map cache builder is located in src/tool/. It can be built using "make tools" if you use the Makefile
-or using the "mapcache" project under Visual Studio. Named "mapcache", the executable will be in your eAthena main folder.
-The map cache builder needs 3 file paths : one is a list of GRFs and/or data directory containing the maps, the second
-is the list of maps to add to the map cache, and the last one is the path of the map cache to generate. Default values for
-those paths are "tools/mapcache/grf_files.txt", "db/map_index.txt" and "db/map_cache.dat".
-The list of GRF and/or data directory must follow the format and indication of the default file: as many "grf:" entries as
-you wish and optionally one only "data_dir:" entry with trailing backslash included. // comments are supported as usual.
-In fact, any file with one map name per line can be used as a map list, that's why the map index list is used as a default:
-we are sure it contains every map supported by the server. Anything after the map name is ignored, // comments are supported
-and if the first word on the line is "map:" then the second word is used as the map name instead: that allows using
-maps_athena.conf as your map list, which is handy if you want to generate a minimal map cache for each of your multiple
-map-servers.
-The map cache file path can point to an already existing file, as the builder adds a map only if it's not already cached.
-This way, you can add custom maps to the base map cache without even needing kRO Sakray maps. If you wish to rebuild the
-entire map cache, though, you can either provide a path to a non-existing file, or force the rebuild mode.
-
-Here are the command-line arguments you can provide to the map cache builder to customize its behavior:
- -grf path/to/grf/list
- Allows to specify the file containing the list of GRFs and/or data directory
- -list path/to/map/list
- Allows to specify the file containing the list of maps to add to the map cache
- -cache path/to/map/cache
- Allows to specify the path to the generated map cache
- -rebuild
- Allows to force the rebuild mode (map cache will be overwritten even if it already exists)
-
-
-Map cache format reference:
--------------------------------------------------------------------------------
-
-The file is written as little-endian, even on big-endian systems, for cross-compatibility reasons. Appropriate conversions
-are done when generating it, so don't worry about it.
-The first 6 bytes are a main header:
-<unsigned long> file size
-<unsigned short> number of maps
-Then maps are stored one right after another:
-<12-characters-long string> map name
-<short> X size
-<short> Y size
-<long> compressed cell data length
-<variable> compressed cell data
+//===== Athena Doc ======================================== +//= eAthena Map Cache Builder and Format Documentation +//===== By ================================================ +//= DracoRPG +//===== Version =========================================== +//= 1.0 +//========================================================= +//= 0.1 - Short howto for the initial builder version +//= 1.0 - Complete manual covering the improved version +//===== Description ======================================= +//= A complete manual for eAthena's map cache generator +//= as well as a reference on the map cache format used +//========================================================= + +Preface: +------------------------------------------------------------------------------- + +Since SVN revision ~10000, the map-server does not know how to read RO client files anymore. It reads maps from a +"map cache" file that contains all and only the useful data about the maps. A map cache containing every official +kRO Sakray map currently supported by eAthena is provided as a default. +If you have custom maps or want to minimize the size of your map cache because your server does not load all of them +(multi-map-server or light test server), you can use the map cache builder to generate a new one fitting your needs. + +Map cache builder manual: +------------------------------------------------------------------------------- + +The source code for the map cache builder is located in src/tool/. It can be built using "make tools" if you use the Makefile +or using the "mapcache" project under Visual Studio. Named "mapcache", the executable will be in your eAthena main folder. +The map cache builder needs 3 file paths : one is a list of GRFs and/or data directory containing the maps, the second +is the list of maps to add to the map cache, and the last one is the path of the map cache to generate. Default values for +those paths are "tools/mapcache/grf_files.txt", "db/map_index.txt" and "db/map_cache.dat". +The list of GRF and/or data directory must follow the format and indication of the default file: as many "grf:" entries as +you wish and optionally one only "data_dir:" entry with trailing backslash included. // comments are supported as usual. +In fact, any file with one map name per line can be used as a map list, that's why the map index list is used as a default: +we are sure it contains every map supported by the server. Anything after the map name is ignored, // comments are supported +and if the first word on the line is "map:" then the second word is used as the map name instead: that allows using +maps_athena.conf as your map list, which is handy if you want to generate a minimal map cache for each of your multiple +map-servers. +The map cache file path can point to an already existing file, as the builder adds a map only if it's not already cached. +This way, you can add custom maps to the base map cache without even needing kRO Sakray maps. If you wish to rebuild the +entire map cache, though, you can either provide a path to a non-existing file, or force the rebuild mode. + +Here are the command-line arguments you can provide to the map cache builder to customize its behavior: + -grf path/to/grf/list + Allows to specify the file containing the list of GRFs and/or data directory + -list path/to/map/list + Allows to specify the file containing the list of maps to add to the map cache + -cache path/to/map/cache + Allows to specify the path to the generated map cache + -rebuild + Allows to force the rebuild mode (map cache will be overwritten even if it already exists) + + +Map cache format reference: +------------------------------------------------------------------------------- + +The file is written as little-endian, even on big-endian systems, for cross-compatibility reasons. Appropriate conversions +are done when generating it, so don't worry about it. +The first 6 bytes are a main header: +<unsigned long> file size +<unsigned short> number of maps +Then maps are stored one right after another: +<12-characters-long string> map name +<short> X size +<short> Y size +<long> compressed cell data length +<variable> compressed cell data diff --git a/npc/battleground/bg_common.txt b/npc/battleground/bg_common.txt index 21eb9520f..fb33570d7 100644 --- a/npc/battleground/bg_common.txt +++ b/npc/battleground/bg_common.txt @@ -1,1258 +1,1258 @@ -// ==============================================================================
-// BattleGround System - Common NPCs
-// ==============================================================================
-
-// MapFlags
-// *********************************************************************
-
-bat_room mapflag nomemo
-bat_room mapflag nowarpto
-bat_room mapflag nobranch
-bat_room mapflag nopenalty
-bat_room mapflag noteleport
-bat_room mapflag nosave SavePoint
-
-// BattleGround Warper - Entrance
-// *********************************************************************
-
-payon,189,104,3 script Maroll Battle Recruiter::BatRecruit 728,{
- mes "[Maroll Battle Recruiter]";
- mes "Good day, adventurer.";
- mes "I'm a knight from a far country called Maroll Kingdom.";
- next;
- mes "[Maroll Battle Recruiter]";
- mes "The two princes of the kingdom are now battling for the throne of Maroll, and are in need of experienced soldiers like you. How would you like to lend your power to one of the princes in the Maroll Kingdom?";
- next;
- if( select("Join:Don't Join") == 2 )
- {
- mes "[Maroll Battle Recruiter]";
- mes "I'll always be stationed here for more soldiers. Fell free to come back whenever you're interested.";
- close;
- }
- mes "[Maroll Battle Recruiter]";
- mes "May the war god bless you.";
- close2;
- warp "bat_room",155,150;
- end;
-}
-
-prontera,123,83,5 duplicate(BatRecruit) Maroll Battle Recruiter::BatRecruit2 728
-rachel,149,138,5 duplicate(BatRecruit) Maroll Battle Recruiter::BatRecruit3 728
-moc_ruins,75,162,5 duplicate(BatRecruit) Maroll Battle Recruiter::BatRecruit4 728
-aldebaran,146,109,5 duplicate(BatRecruit) Maroll Battle Recruiter::BatRecruit5 728
-lighthalzen,153,86,5 duplicate(BatRecruit) Maroll Battle Recruiter::BatRecruit6 728
-
-// BattleGround Warper - Exit
-// *********************************************************************
-
-bat_room,148,150,4 script Teleporter#bat 124,{
- mes "[Teleporter]";
- mes "Do you wish to leave the battlefield? Use my service to return to town.";
- next;
- if( select("Leave:Don't Leave") == 2 )
- {
- mes "[Teleporter]";
- mes "I'll be here whenever you're in need of my service.";
- close;
- }
-
- set .@spoint$, getsavepoint(0);
- set .@x, getsavepoint(1);
- set .@y, getsavepoint(2);
- mes "[Teleporter]";
- mes "You will be sent back to " + .@spoint$ + ".";
- close2;
- warp .@spoint$, .@x, .@y;
- end;
-}
-
-// Kafra
-// *********************************************************************
-bat_room,148,147,4 script Kafra Staff::kaf_bat 861,{
- cutin "kafra_09",2;
- callfunc "F_Kafra",0,2,1,150,0;
-}
-
-// General Guillaume
-// *********************************************************************
-bat_room,160,159,3 script General Guillaume 420,{
- cutin "bat_kiyom2",2;
- mes "[General Guillaume]";
- mes "Hot-blooded adventurer, we need your ability to win this battle.";
- next;
- cutin "bat_kiyom1",2;
- mes "[General Guillaume]";
- mes "Our great king, Marcel Marollo VII, is very sick lately. His Majesty has declared that he chosen either me or Prince Croix as the next king amongst his 9 sons.";
- next;
- mes "[General Guillaume]";
- mes "Two kings can't share a nation!";
- mes "Only the one victorious from His Majesty's appointed battle will be enthroned.";
- next;
- mes "[General Guillaume]";
- mes "This is however, not just a battle between us. This battle will determine the future of this country. I pledge on my honor to prove that I'm the one who can protect this Maroll from outside threats.";
- next;
- if( select("Yes, I want to join you.:End Conversation") == 2 )
- {
- mes "[General Guillaume]";
- mes "I'll be the one who will capture the flag!";
- close2;
- cutin "",255;
- end;
- }
- cutin "bat_kiyom2",2;
- mes "[General Guillaume]";
- mes "Welcome to my army, comrade.";
- mes "Your eyes tell me that you're a soldier that I can trust.";
- set Bat_Team,1;
- next;
- mes "[General Guillaume]";
- mes "Now, go upstairs and apply for battle with your comrades. I'm sure they'll welcome you whole-heartedly!";
- close2;
- cutin "",255;
- end;
-}
-
-// General Croix
-// *********************************************************************
-bat_room,160,140,3 script Prince Croix 416,{
- cutin "bat_crua1",2;
- mes "[Prince Croix]";
- mes "Wise adventurer, why don't you lend us your power for victory?";
- next;
- cutin "bat_crua2",2;
- mes "[Prince Croix]";
- mes "I do not wish to shed blood, but I have no choice but to fight for the possibility of peace and for the sake of my people.";
- next;
- mes "[Prince Croix]";
- mes "General Guillaume may have an advantage in this battle as he is the great general of Maroll, but that doesn't automatically mean he'll win. I want to win this battle so that I can grant a better future for my people.";
- next;
- if( select("Yes, I want to join you!:End Conversation") == 2 )
- {
- mes "[Prince Croix]";
- mes "For Maroll!";
- close2;
- cutin "",255;
- end;
- }
- mes "[Prince Croix]";
- mes "Thank you so much. I feel like I can win with the help of adventurers like you. Now, please go downstairs and join your comrades in sharpening their skills to fight the enemy!";
- set Bat_Team,2;
- close2;
- cutin "",255;
- end;
-}
-
-// Time calculation Function
-// *********************************************************************
-function script Time2Str {
- set .@Time_Left, getarg(0) - gettimetick(2);
-
- set .@Days, .@Time_Left / 86400;
- set .@Time_Left, .@Time_Left - (.@Days * 86400);
- set .@Hours, .@Time_Left / 3600;
- set .@Time_Left, .@Time_Left - (.@Hours * 3600);
- set .@Minutes, .@Time_Left / 60;
- set .@Time_Left, .@Time_Left - (.@Minutes * 60);
-
- set .@Time$, "";
- if( .@Days > 1 )
- set .@Time$, .@Time$ + .@Days + " days, ";
- else if( .@Days > 0 )
- set .@Time$, .@Time$ + .@Days + " day, ";
-
- if( .@Hours > 1 )
- set .@Time$, .@Time$ + .@Hours + " hours, ";
- else if( .@Hours > 0 )
- set .@Time$, .@Time$ + .@Hours + " hour, ";
-
- if( .@Minutes > 1 )
- set .@Time$, .@Time$ + .@Minutes + " minutes, ";
- else if( .@Minutes > 0 )
- set .@Time$, .@Time$ + .@Minutes + " minute, ";
-
- if( .@Time_Left > 1 || .@Time_Left == 0 )
- set .@Time$, .@Time$ + .@Time_Left + " seconds.";
- else if( .@Time_Left == 1 )
- set .@Time$, .@Time$ + .@Time_Left + " second.";
-
- return .@Time$;
-}
-
-// Guillaume Knight - Tierra Valley
-// *********************************************************************
-bat_room,159,178,5 script Guillaume Knight#1 417,{
- mes "[Guillaume Knight]";
- mes "Tierra Gorge is a very steep canyon with two forts residing in the north and south ends of the map.";
- next;
- mes "[Guillaume Knight]";
- mes "There is a ration depot for the Guillaume and Croix armies at the 11 and 8 o'clock directions.";
- next;
- mes "[Guillaume Knight]";
- mes "The battle starts at your army's ship, and the goal is to advance and destroy your enemy's rations depot faster than they can destroy yours.";
- mes "";
- mes "The army that captures the neutral flag in the center of the battlefield will be rewarded with extra regeneration points, meaning their soldiers will resurrect more than the other side, giving them an advantage.";
- next;
- mes "[Guillaume Knight]";
- mes "Are you ready for battle? Then apply with the recruiter next to me!";
- close;
-}
-
-// Tierra Officerer - Guillaume
-// *********************************************************************
-bat_room,156,178,5 script Tierra Valley Officer#1 418,{
- mes "[Tierra Officer]";
- if( Bat_Team == 2 )
- {
- mes "Get out of here you stinky Croix!";
- close;
- }
-
- if( Bat_Team == 0 )
- {
- mes "Please sign up for an army with Prince Croix or General Guillaume!";
- close;
- }
-
- mes "Hello " + strcharinfo(0) + ", let's show the power of the Guillaume Army to those stinky Croixs!";
- next;
- if( select("I want to join your army!:End Conversation") == 2 )
- close;
-
- mes "[Tierra Officer]";
- if( BG_Delay_Tick >= gettimetick(2) )
- {
- mes "You are a Deserter!!";
- mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
- close;
- }
- if( Tierra_BG_Tick >= gettimetick(2) )
- {
- mes "Sorry, you can't join the battle right now.";
- mes "You need to wait ^0000FF" + callfunc("Time2Str",Tierra_BG_Tick) + "^000000 to join again Tierra Valley.";
- close;
- }
- if( BaseLevel < 80 )
- {
- mes "I'm very please you want to join our army, but I'm sorry: I can't send a rookie like you to die on the cruel battlefield";
- close;
- }
-
- mes "Good luck!";
- close2;
- warp "bat_room",85,224;
- end;
-}
-
-// Croix Knight - Tierra Valley
-// *********************************************************************
-bat_room,159,121,1 script Croix Knight#1 413,{
- mes "[Croix Knight]";
- mes "Tierra Gorge is a very steep canyon with two forts residing in the north and south ends of the map.";
- next;
- mes "[Croix Knight]";
- mes "There is a ration depot for the Guillaume and Croix armies at the 11 and 8 o'clock directions.";
- next;
- mes "[Croix Knight]";
- mes "The battle starts at your army's ship, and the goal is to advance and destroy your enemy's rations depot faster than they can destroy yours.";
- mes "";
- mes "The army that captures the neutral flag in the center of the battlefield will be rewarded with extra regeneration points, meaning their soldiers will resurrect more than the other side, giving them an advantage.";
- next;
- mes "[Croix Knight]";
- mes "Are you ready for battle? Then apply with the recruiter next to me!";
- close;
-}
-
-// Tierra Officer - Croix
-// *********************************************************************
-bat_room,156,121,1 script Tierra Valley Officer#2 414,{
- mes "[Tierra Officer]";
- if( Bat_Team == 1 )
- {
- mes "Get out of here you stupid Guillaume!";
- close;
- }
-
- if( Bat_Team == 0 )
- {
- mes "Please sign up for an army with Prince Croix or General Guillaume!";
- close;
- }
-
- mes "Hello " + strcharinfo(0) + ", let's show the power of the Croix Army to those stinky Guillaumes!";
- next;
- if( select("I want to join your army!:End Conversation") == 2 )
- close;
-
- mes "[Tierra Officer]";
- if( BG_Delay_Tick >= gettimetick(2) )
- {
- mes "You are a Deserter!!";
- mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
- close;
- }
- if( Tierra_BG_Tick >= gettimetick(2) )
- {
- mes "Sorry, you can't join the battle right now.";
- mes "You need to wait ^0000FF" + callfunc("Time2Str",Tierra_BG_Tick) + "^000000 to join again Tierra Valley.";
- close;
- }
- if( BaseLevel < 80 )
- {
- mes "I'm very please you want to join our army, but I'm sorry: I can't send a rookie like you to die on the cruel battlefield";
- close;
- }
-
- mes "Good luck!";
- close2;
- warp "bat_room",85,208;
- end;
-}
-
-// Guillaume Knight - Tierra
-// *********************************************************************
-bat_room,175,178,5 script Guillaume Knight#2 417,{
- mes "[Guillaume Knight]";
- mes "Tierra Gorge is a very steep canyon with two forts residing in the north and south ends of the map.";
- next;
- mes "[Guillaume Knight]";
- mes "There is a ration depot for the Guillaume and Croix armies at the 11 and 8 o'clock directions.";
- next;
- mes "[Guillaume Knight]";
- mes "The battle starts at your army's ship, and the goal is to advance and destroy your enemy's rations depot faster than they can destroy yours.";
- mes "";
- mes "The army that captures the neutral flag in the center of the battlefield will be rewarded with extra regeneration points, meaning their soldiers will resurrect more than the other side, giving them an advantage.";
- next;
- mes "[Guillaume Knight]";
- mes "Are you ready for battle? Then apply with the recruiter next to me!";
- close;
-}
-
-// Tierra Officer - Guillaume
-// *********************************************************************
-bat_room,172,178,5 script Tierra Valley Officer#3 418,{
- mes "[Tierra Officer]";
- if( Bat_Team == 2 )
- {
- mes "Get out of here you stinky Croix!";
- close;
- }
-
- if( Bat_Team == 0 )
- {
- mes "Please sign up for an army with Prince Croix or General Guillaume!";
- close;
- }
-
- mes "Hello " + strcharinfo(0) + ", let's show the power of the Guillaume Army to those stinky Croixs!";
- next;
- if( select("I want to join your army!:End Conversation") == 2 )
- close;
-
- mes "[Tierra Officer]";
- if( BG_Delay_Tick >= gettimetick(2) )
- {
- mes "You are a Deserter!!";
- mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
- close;
- }
- if( Tierra_BG_Tick >= gettimetick(2) )
- {
- mes "Sorry, you can't join the battle right now.";
- mes "You need to wait ^0000FF" + callfunc("Time2Str",Tierra_BG_Tick) + "^000000 to join again Tierra Valley.";
- close;
- }
- if( BaseLevel < 80 )
- {
- mes "I'm very please you want to join our army, but I'm sorry: I can't send a rookie like you to die on the cruel battlefield";
- close;
- }
-
- mes "Good luck!";
- close2;
- warp "bat_room",85,94;
- end;
-}
-
-// Croix Knight - Tierra
-// *********************************************************************
-bat_room,175,121,1 script Croix Knight#2 413,{
- mes "[Croix Knight]";
- mes "Tierra Gorge is a very steep canyon with two forts residing in the north and south ends of the map.";
- next;
- mes "[Croix Knight]";
- mes "There is a ration depot for the Guillaume and Croix armies at the 11 and 8 o'clock directions.";
- next;
- mes "[Croix Knight]";
- mes "The battle starts at your army's ship, and the goal is to advance and destroy your enemy's rations depot faster than they can destroy yours.";
- mes "";
- mes "The army that captures the neutral flag in the center of the battlefield will be rewarded with extra regeneration points, meaning their soldiers will resurrect more than the other side, giving them an advantage.";
- next;
- mes "[Croix Knight]";
- mes "Are you ready for battle? Then apply with the recruiter next to me!";
- close;
-}
-
-// Tierra Officer - Croix
-// *********************************************************************
-bat_room,172,121,1 script Tierra Valley Officer#4 414,{
- mes "[Tierra Officer]";
- if( Bat_Team == 1 )
- {
- mes "Get out of here you stupid Guillaume!";
- close;
- }
-
- if( Bat_Team == 0 )
- {
- mes "Please sign up for an army with Prince Croix or General Guillaume!";
- close;
- }
-
- mes "Hello " + strcharinfo(0) + ", let's show the power of the Croix Army to those stinky Guillaumes!";
- next;
- if( select("I want to join your army!:End Conversation") == 2 )
- close;
-
- mes "[Tierra Officer]";
- if( BG_Delay_Tick >= gettimetick(2) )
- {
- mes "You are a Deserter!!";
- mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
- close;
- }
- if( Tierra_BG_Tick >= gettimetick(2) )
- {
- mes "Sorry, you can't join the battle right now.";
- mes "You need to wait ^0000FF" + callfunc("Time2Str",Tierra_BG_Tick) + "^000000 to join again Tierra Valley.";
- close;
- }
- if( BaseLevel < 80 )
- {
- mes "I'm very please you want to join our army, but I'm sorry: I can't send a rookie like you to die on the cruel battlefield";
- close;
- }
-
- mes "Good luck!";
- close2;
- warp "bat_room",85,77;
- end;
-}
-
-// Guillaune Knight - Flavius
-// *********************************************************************
-bat_room,151,178,5 script Guillaume Knight#3 417,{
- mes "[Guillaume Knight]";
- mes "The objective of the Flavius Battle is to score 2 points before your enemy by destroying their crystal.";
- next;
- mes "[Guillaume Knight]";
- mes "The crystals for both armies are protected by special barricades that cannot be destroyed by direct attacks.";
- next;
- mes "[Guillaume Knight]";
- mes "But they can be removed by destroying the Guardians that protect the enemy army base.";
- next;
- mes "[Guillaume Knight]";
- mes "The crystals are immune to every type of skill; your physical attacks are the only choice for destroying your enemy's crystal.";
- next;
- mes "[Guillaume Knight]";
- mes "Are you ready for battle? Then apply with the recruiter next to me!";
- close;
-}
-
-// Flavius Officerer - Guillaume
-// *********************************************************************
-bat_room,148,178,5 script Flavius Officer#1 418,{
- mes "[Flavius Officer]";
- if( Bat_Team == 2 )
- {
- mes "Get out of here you stupid Croix!";
- close;
- }
-
- if( Bat_Team == 0 )
- {
- mes "Please sign up for an army with Prince Croix or General Guillaume!";
- close;
- }
-
- mes "Hello " + strcharinfo(0) + ", let's show the power of the Guillaume Army to those stinky Croixs!";
- next;
- if( select("I want to join your army!:End Conversation") == 2 )
- close;
-
- mes "[Flavius Officer]";
- if( BG_Delay_Tick >= gettimetick(2) )
- {
- mes "You are a Deserter!!";
- mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
- close;
- }
- if( Flavius_BG_Tick >= gettimetick(2) )
- {
- mes "Sorry, you can't join the battle right now.";
- mes "You need to wait ^0000FF" + callfunc("Time2Str",Flavius_BG_Tick) + "^000000 to join again Flavius.";
- close;
- }
- if( BaseLevel < 80 )
- {
- mes "I'm very please you want to join our army, but I'm sorry: I can't send a rookie like you to die on the cruel battlefield";
- close;
- }
-
- mes "Good luck!";
- close2;
- warp "bat_room",253,94;
- end;
-}
-
-// Croix Knight - Flavius
-// *********************************************************************
-bat_room,151,121,1 script Croix Knight#3 413,{
- mes "[Croix Knight]";
- mes "The objective of the Flavius Battle is to score 2 points before your enemy by destroying their crystal.";
- next;
- mes "[Croix Knight]";
- mes "The crystals for both armies are protected by special barricades that cannot be destroyed by direct attacks.";
- next;
- mes "[Croix Knight]";
- mes "But they can be removed by destroying the Guardians that protect the enemy army base.";
- next;
- mes "[Croix Knight]";
- mes "The crystals are immune to every type of skill; your physical attacks are the only choice for destroying your enemy's crystal.";
- next;
- mes "[Croix Knight]";
- mes "Are you ready for battle? Then apply with the recruiter next to me!";
- close;
-}
-
-// Flavius Officerer - Croix
-// *********************************************************************
-bat_room,148,121,1 script Flavius Officer#2 414,{
- mes "[Flavius Officer]";
- if( Bat_Team == 1 )
- {
- mes "Get out of here you stupid Guillaume!";
- close;
- }
-
- if( Bat_Team == 0 )
- {
- mes "Please sign up for an army with Prince Croix or General Guillaume!";
- close;
- }
-
- mes "Hello " + strcharinfo(0) + ", let's show the power of the Croix Army to those stinky Guillaumes!";
- next;
- if( select("I want to join your army!:End Conversation") == 2 )
- close;
-
- mes "[Flavius Officer]";
- if( BG_Delay_Tick >= gettimetick(2) )
- {
- mes "You are a Deserter!!";
- mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
- close;
- }
- if( Flavius_BG_Tick >= gettimetick(2) )
- {
- mes "Sorry, you can't join the battle right now.";
- mes "You need to wait ^0000FF" + callfunc("Time2Str",Flavius_BG_Tick) + "^000000 to join again Flavius.";
- close;
- }
- if( BaseLevel < 80 )
- {
- mes "I'm very please you want to join our army, but I'm sorry: I can't send a rookie like you to die on the cruel battlefield";
- close;
- }
-
- mes "Good luck!";
- close2;
- warp "bat_room",253,77;
- end;
-}
-
-// Guillaune Knight - Flavius
-// *********************************************************************
-bat_room,167,178,5 script Guillaume Knight#4 417,{
- mes "[Guillaume Knight]";
- mes "The objective of the Flavius Battle is to score 2 points before your enemy by destroying their crystal.";
- next;
- mes "[Guillaume Knight]";
- mes "The crystals for both armies are protected by special barricades that cannot be destroyed by direct attacks.";
- next;
- mes "[Guillaume Knight]";
- mes "But they can be removed by destroying the Guardians that protect the enemy army base.";
- next;
- mes "[Guillaume Knight]";
- mes "The crystals are immune to every type of skill; your physical attacks are the only choice for destroying your enemy's crystal.";
- next;
- mes "[Guillaume Knight]";
- mes "Are you ready for battle? Then apply with the recruiter next to me!";
- close;
-}
-
-// Flavius Officerer - Guillaume
-// *********************************************************************
-bat_room,164,178,5 script Flavius Officer#3 418,{
- mes "[Flavius Officer]";
- if( Bat_Team == 2 )
- {
- mes "Get out of here you stupid Croix!";
- close;
- }
-
- if( Bat_Team == 0 )
- {
- mes "Please sign up for an army with Prince Croix or General Guillaume!";
- close;
- }
-
- mes "Hello " + strcharinfo(0) + ", let's show the power of the Guillaume Army to those stinky Croixs!";
- next;
- if( select("I want to join your army!:End Conversation") == 2 )
- close;
-
- mes "[Flavius Officer]";
- if( BG_Delay_Tick >= gettimetick(2) )
- {
- mes "You are a Deserter!!";
- mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
- close;
- }
- if( Flavius_BG_Tick >= gettimetick(2) )
- {
- mes "Sorry, you can't join the battle right now.";
- mes "You need to wait ^0000FF" + callfunc("Time2Str",Flavius_BG_Tick) + "^000000 to join again Flavius.";
- close;
- }
- if( BaseLevel < 80 )
- {
- mes "I'm very please you want to join our army, but I'm sorry: I can't send a rookie like you to die on the cruel battlefield";
- close;
- }
-
- mes "Good luck!";
- close2;
- warp "bat_room",57,94;
- end;
-}
-
-// Croix Knight - Flavius
-// *********************************************************************
-bat_room,167,121,1 script Croix Knight#4 413,{
- mes "[Croix Knight]";
- mes "The objective of the Flavius Battle is to score 2 points before your enemy by destroying their crystal.";
- next;
- mes "[Croix Knight]";
- mes "The crystals for both armies are protected by special barricades that cannot be destroyed by direct attacks.";
- next;
- mes "[Croix Knight]";
- mes "But they can be removed by destroying the Guardians that protect the enemy army base.";
- next;
- mes "[Croix Knight]";
- mes "The crystals are immune to every type of skill; your physical attacks are the only choice for destroying your enemy's crystal.";
- next;
- mes "[Croix Knight]";
- mes "Are you ready for battle? Then apply with the recruiter next to me!";
- close;
-}
-
-// Flavius Officerer - Croix
-// *********************************************************************
-bat_room,164,121,1 script Flavius Officer#4 414,{
- mes "[Flavius Officer]";
- if( Bat_Team == 1 )
- {
- mes "Get out of here you stupid Guillaume!";
- close;
- }
-
- if( Bat_Team == 0 )
- {
- mes "Please sign up for an army with Prince Croix or General Guillaume!";
- close;
- }
-
- mes "Hello " + strcharinfo(0) + ", let's show the power of the Croix Army to those stinky Guillaumes!";
- next;
- if( select("I want to join your army!:End Conversation") == 2 )
- close;
-
- mes "[Flavius Officer]";
- if( BG_Delay_Tick >= gettimetick(2) )
- {
- mes "You are a Deserter!!";
- mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
- close;
- }
- if( Flavius_BG_Tick >= gettimetick(2) )
- {
- mes "Sorry, you can't join the battle right now.";
- mes "You need to wait ^0000FF" + callfunc("Time2Str",Flavius_BG_Tick) + "^000000 to join again Flavius.";
- close;
- }
- if( BaseLevel < 80 )
- {
- mes "I'm very please you want to join our army, but I'm sorry: I can't send a rookie like you to die on the cruel battlefield";
- close;
- }
-
- mes "Good luck!";
- close2;
- warp "bat_room",57,77;
- end;
-}
-
-// Guillaume Knight - KvM
-// *********************************************************************
-bat_room,143,178,5 script Guillaume Knight#5 417,{
- mes "[Guillaume Knight]";
- mes "To win the Battle of Kriger Von Midgard you and your team must kill all the other opponents before all of you die.";
- next;
- mes "[Guillaume Knight]";
- mes "The first team to lose all their soldiers loses.";
- next;
- mes "[Guillaume Knight]";
- mes "Since you cannot come back to battle after you die, taking care on the battlefield is essential.";
- next;
- mes "[Guillaume Knight]";
- mes "Are you ready for battle? Then apply with the recruiter next to me!";
- close;
-}
-
-// KvM Officerer - Guillaume
-// *********************************************************************
-bat_room,140,178,5 script KVM [80-99] Officer#1 418,{
- mes "[KVM Officer]";
- if( Bat_Team == 2 )
- {
- mes "Get out of here you stinky Croix!";
- close;
- }
-
- if( Bat_Team == 0 )
- {
- mes "Please sign up for an army with Prince Croix or General Guillaume!";
- close;
- }
-
- mes "Hello " + strcharinfo(0) + ", let's show the power of the Guillaume Army to those stinky Croixs!";
- next;
- if( select("I want to join your army!:End Conversation") == 2 )
- close;
-
- mes "[KVM Officer]";
- if( BG_Delay_Tick >= gettimetick(2) )
- {
- mes "You are a Deserter!!";
- mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
- close;
- }
- if( KvM_BG_Tick >= gettimetick(2) )
- {
- mes "Sorry, you can't join the battle right now.";
- mes "You need to wait ^0000FF" + callfunc("Time2Str",KvM_BG_Tick) + "^000000 to join KvM.";
- close;
- }
- if( BaseLevel < 80 )
- {
- mes "I'm very please you want to join our army, but I'm sorry: This arena is for players with baselevel from 80 to 99.";
- close;
- }
-
- mes "Good luck!";
- close2;
- warp "bat_room",253,224;
- end;
-}
-
-// Croix Knight - KvM
-// *********************************************************************
-bat_room,143,121,1 script Croix Knight#5 413,{
- mes "[Croix Knight]";
- mes "To win the Battle of Kriger Von Midgard you and your team must kill all the other opponents before all of you die.";
- next;
- mes "[Croix Knight]";
- mes "The first team to lose all their soldiers loses.";
- next;
- mes "[Croix Knight]";
- mes "Since you cannot come back to battle after you die, taking care on the battlefield is essential.";
- next;
- mes "[Croix Knight]";
- mes "Are you ready for battle? Then apply with the recruiter next to me!";
- close;
-}
-
-// KvM Officer - Croix
-// *********************************************************************
-bat_room,140,121,1 script KVM [80-99] Officer#2 414,{
- mes "[KVM Officer]";
- if( Bat_Team == 1 )
- {
- mes "Get out of here you stupid Guillaume!";
- close;
- }
-
- if( Bat_Team == 0 )
- {
- mes "Please sign up for an army with Prince Croix or General Guillaume!";
- close;
- }
-
- mes "Hello " + strcharinfo(0) + ", let's show the power of the Croix Army to those stinky Guillaumes!";
- next;
- if( select("I want to join your army!:End Conversation") == 2 )
- close;
-
- mes "[KVM Officer]";
- if( BG_Delay_Tick >= gettimetick(2) )
- {
- mes "You are a Deserter!!";
- mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
- close;
- }
- if( KvM_BG_Tick >= gettimetick(2) )
- {
- mes "Sorry, you can't join the battle right now.";
- mes "You need to wait ^0000FF" + callfunc("Time2Str",KvM_BG_Tick) + "^000000 to join KvM.";
- close;
- }
- if( BaseLevel < 80 )
- {
- mes "I'm very please you want to join our army, but I'm sorry: This arena is for players with baselevel from 80 to 99.";
- close;
- }
-
- mes "Good luck!";
- close2;
- warp "bat_room",253,208;
- end;
-}
-
-// Guillaume Knight - KvM
-// *********************************************************************
-bat_room,135,178,5 script Guillaume Knight#6 417,{
- mes "[Guillaume Knight]";
- mes "To win the Battle of Kriger Von Midgard you and your team must kill all the other opponents before all of you die.";
- next;
- mes "[Guillaume Knight]";
- mes "The first team to lose all their soldiers loses.";
- next;
- mes "[Guillaume Knight]";
- mes "Since you cannot come back to battle after you die, taking care on the battlefield is essential.";
- next;
- mes "[Guillaume Knight]";
- mes "Are you ready for battle? Then apply with the recruiter next to me!";
- close;
-}
-
-// KvM Officerer - Guillaume
-// *********************************************************************
-bat_room,132,178,5 script KVM [60-79] Officer#1 418,{
- mes "[KVM Officer]";
- if( Bat_Team == 2 )
- {
- mes "Get out of here you stinky Croix!";
- close;
- }
-
- if( Bat_Team == 0 )
- {
- mes "Please sign up for an army with Prince Croix or General Guillaume!";
- close;
- }
-
- mes "Hello " + strcharinfo(0) + ", let's show the power of the Guillaume Army to those stinky Croixs!";
- next;
- if( select("I want to join your army!:End Conversation") == 2 )
- close;
-
- mes "[KVM Officer]";
- if( BG_Delay_Tick >= gettimetick(2) )
- {
- mes "You are a Deserter!!";
- mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
- close;
- }
- if( KvM_BG_Tick >= gettimetick(2) )
- {
- mes "Sorry, you can't join the battle right now.";
- mes "You need to wait ^0000FF" + callfunc("Time2Str",KvM_BG_Tick) + "^000000 to join KvM.";
- close;
- }
- if( BaseLevel < 60 || BaseLevel > 79 )
- {
- mes "I'm very please you want to join our army, but I'm sorry: This arena is for players with baselevel from 60 to 79.";
- close;
- }
-
- mes "Good luck!";
- close2;
- warp "bat_room",225,224;
- end;
-}
-
-// Croix Knight - KvM
-// *********************************************************************
-bat_room,135,121,1 script Croix Knight#6 413,{
- mes "[Croix Knight]";
- mes "To win the Battle of Kriger Von Midgard you and your team must kill all the other opponents before all of you die.";
- next;
- mes "[Croix Knight]";
- mes "The first team to lose all their soldiers loses.";
- next;
- mes "[Croix Knight]";
- mes "Since you cannot come back to battle after you die, taking care on the battlefield is essential.";
- next;
- mes "[Croix Knight]";
- mes "Are you ready for battle? Then apply with the recruiter next to me!";
- close;
-}
-
-// KvM Officer - Croix
-// *********************************************************************
-bat_room,132,121,1 script KVM [60-79] Officer#2 414,{
- mes "[KVM Officer]";
- if( Bat_Team == 1 )
- {
- mes "Get out of here you stupid Guillaume!";
- close;
- }
-
- if( Bat_Team == 0 )
- {
- mes "Please sign up for an army with Prince Croix or General Guillaume!";
- close;
- }
-
- mes "Hello " + strcharinfo(0) + ", let's show the power of the Croix Army to those stinky Guillaumes!";
- next;
- if( select("I want to join your army!:End Conversation") == 2 )
- close;
-
- mes "[KVM Officer]";
- if( BG_Delay_Tick >= gettimetick(2) )
- {
- mes "You are a Deserter!!";
- mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
- close;
- }
- if( KvM_BG_Tick >= gettimetick(2) )
- {
- mes "Sorry, you can't join the battle right now.";
- mes "You need to wait ^0000FF" + callfunc("Time2Str",KvM_BG_Tick) + "^000000 to join KvM.";
- close;
- }
- if( BaseLevel < 60 || BaseLevel > 79 )
- {
- mes "I'm very please you want to join our army, but I'm sorry: This arena is for players with baselevel from 60 to 79.";
- close;
- }
-
- mes "Good luck!";
- close2;
- warp "bat_room",225,208;
- end;
-}
-
-// Guillaume Knight - KvM
-// *********************************************************************
-bat_room,127,178,5 script Guillaume Knight#7 417,{
- mes "[Guillaume Knight]";
- mes "To win the Battle of Kriger Von Midgard you and your team must kill all the other opponents before all of you die.";
- next;
- mes "[Guillaume Knight]";
- mes "The first team to lose all their soldiers loses.";
- next;
- mes "[Guillaume Knight]";
- mes "Since you cannot come back to battle after you die, taking care on the battlefield is essential.";
- next;
- mes "[Guillaume Knight]";
- mes "Are you ready for battle? Then apply with the recruiter next to me!";
- close;
-}
-
-// KvM Officerer - Guillaume
-// *********************************************************************
-bat_room,124,178,5 script KVM [1-59] Officer#1 418,{
- mes "[KVM Officer]";
- if( Bat_Team == 2 )
- {
- mes "Get out of here you stinky Croix!";
- close;
- }
-
- if( Bat_Team == 0 )
- {
- mes "Please sign up for an army with Prince Croix or General Guillaume!";
- close;
- }
-
- mes "Hello " + strcharinfo(0) + ", let's show the power of the Guillaume Army to those stinky Croixs!";
- next;
- if( select("I want to join your army!:End Conversation") == 2 )
- close;
-
- mes "[KVM Officer]";
- if( BG_Delay_Tick >= gettimetick(2) )
- {
- mes "You are a Deserter!!";
- mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
- close;
- }
- if( KvM_BG_Tick >= gettimetick(2) )
- {
- mes "Sorry, you can't join the battle right now.";
- mes "You need to wait ^0000FF" + callfunc("Time2Str",KvM_BG_Tick) + "^000000 to join KvM.";
- close;
- }
- if( BaseLevel > 59 )
- {
- mes "I'm very please you want to join our army, but I'm sorry: This arena is for players with baselevel from 1 to 59.";
- close;
- }
-
- mes "Good luck!";
- close2;
- warp "bat_room",197,224;
- end;
-}
-
-// Croix Knight - KvM
-// *********************************************************************
-bat_room,127,121,1 script Croix Knight#7 413,{
- mes "[Croix Knight]";
- mes "To win the Battle of Kriger Von Midgard you and your team must kill all the other opponents before all of you die.";
- next;
- mes "[Croix Knight]";
- mes "The first team to lose all their soldiers loses.";
- next;
- mes "[Croix Knight]";
- mes "Since you cannot come back to battle after you die, taking care on the battlefield is essential.";
- next;
- mes "[Croix Knight]";
- mes "Are you ready for battle? Then apply with the recruiter next to me!";
- close;
-}
-
-// KvM Officer - Croix
-// *********************************************************************
-bat_room,124,121,1 script KVM [1-59] Officer#2 414,{
- mes "[KVM Officer]";
- if( Bat_Team == 1 )
- {
- mes "Get out of here you stupid Guillaume!";
- close;
- }
-
- if( Bat_Team == 0 )
- {
- mes "Please sign up for an army with Prince Croix or General Guillaume!";
- close;
- }
-
- mes "Hello " + strcharinfo(0) + ", let's show the power of the Croix Army to those stinky Guillaumes!";
- next;
- if( select("I want to join your army!:End Conversation") == 2 )
- close;
-
- mes "[KVM Officer]";
- if( BG_Delay_Tick >= gettimetick(2) )
- {
- mes "You are a Deserter!!";
- mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround.";
- close;
- }
- if( KvM_BG_Tick >= gettimetick(2) )
- {
- mes "Sorry, you can't join the battle right now.";
- mes "You need to wait ^0000FF" + callfunc("Time2Str",KvM_BG_Tick) + "^000000 to join KvM.";
- close;
- }
- if( BaseLevel > 59 )
- {
- mes "I'm very please you want to join our army, but I'm sorry: This arena is for players with baselevel from 1 to 59.";
- close;
- }
-
- mes "Good luck!";
- close2;
- warp "bat_room",197,208;
- end;
-}
-
-// Guard Dummy
-// *********************************************************************
-
-bat_room,161,141,3 script Prince Croix's Aid::bat_aid 415,{ end; }
-bat_room,161,139,3 duplicate(bat_aid) Prince Croix's Aid::bat_aid2 415
-bat_room,161,160,3 duplicate(bat_aid) General Guillaume's Aid::bat_aid3 419
-bat_room,161,158,3 duplicate(bat_aid) General Guillaume's Aid::bat_aid4 419
-
-// Flags
-// *********************************************************************
-
-- script Guillaume camp#bat 973,{ end; }
-- script Croix camp#bat 974,{ end; }
-
-// Exit from Registration
-// *********************************************************************
-// Flavius bat_b02
-bat_room,57,81,0 warp bat1 2,2,bat_room,154,149
-bat_room,57,90,0 warp bat2 2,2,bat_room,154,149
-// Free BG
-bat_room,57,220,0 warp bat3 2,2,bat_room,154,149
-bat_room,57,211,0 warp bat4 2,2,bat_room,154,149
-// Tierra Valley bat_a02
-bat_room,85,81,0 warp bat5 2,2,bat_room,154,149
-bat_room,85,90,0 warp bat6 2,2,bat_room,154,149
-// Tierra Valley bat_a01
-bat_room,85,220,0 warp bat7 2,2,bat_room,154,149
-bat_room,85,211,0 warp bat8 2,2,bat_room,154,149
-// Free BG
-bat_room,113,81,0 warp bat9 2,2,bat_room,154,149
-bat_room,113,90,0 warp bat10 2,2,bat_room,154,149
-// Free BG
-bat_room,113,220,0 warp bat11 2,2,bat_room,154,149
-bat_room,113,211,0 warp bat12 2,2,bat_room,154,149
-// Free BG
-bat_room,141,81,0 warp bat13 2,2,bat_room,154,149
-bat_room,141,90,0 warp bat14 2,2,bat_room,154,149
-// Free BG
-bat_room,141,220,0 warp bat15 2,2,bat_room,154,149
-bat_room,141,211,0 warp bat16 2,2,bat_room,154,149
-// Free BG
-bat_room,169,81,0 warp bat17 2,2,bat_room,154,149
-bat_room,169,90,0 warp bat18 2,2,bat_room,154,149
-// Free BG
-bat_room,169,220,0 warp bat19 2,2,bat_room,154,149
-bat_room,169,211,0 warp bat20 2,2,bat_room,154,149
-// Free BG
-bat_room,197,81,0 warp bat21 2,2,bat_room,154,149
-bat_room,197,90,0 warp bat22 2,2,bat_room,154,149
-// KvM bat_c03
-bat_room,197,220,0 warp bat23 2,2,bat_room,154,149
-bat_room,197,211,0 warp bat24 2,2,bat_room,154,149
-// Free BG
-bat_room,225,81,0 warp bat25 2,2,bat_room,154,149
-bat_room,225,90,0 warp bat26 2,2,bat_room,154,149
-// KvM bat_c02
-bat_room,225,220,0 warp bat27 2,2,bat_room,154,149
-bat_room,225,211,0 warp bat28 2,2,bat_room,154,149
-// Flavius bat_b01
-bat_room,253,81,0 warp bat29 2,2,bat_room,154,149
-bat_room,253,90,0 warp bat30 2,2,bat_room,154,149
-// KvM bat_c01
-bat_room,253,220,0 warp bat31 2,2,bat_room,154,149
-bat_room,253,211,0 warp bat32 2,2,bat_room,154,149
-
-// Badges Repairman
-// *********************************************************************
-
-bat_room,138,144,5 script Repairman#bg 99,{
- callfunc "repairmain","Repairman";
- end;
-}
-
-// Badges Exchange
-// *********************************************************************
-
-bat_room,160,150,3 script Erundek 109,{
- mes "[Erundek]";
- mes "Welcome, mighty warrior.";
- mes "What can I do for you today ?";
- next;
- switch( select("Check the Catalog","Exchange Bravery Badges","Exchange Valor Badges","Exchange Heroism Badges","Hmm, nothing I guess.") )
- {
- case 1:
- mes "[Erundek]";
- mes "We have many items, so please take a look and purchase deliberately.";
- close2;
- Readbook 11010,1;
- end;
- case 5:
- mes "[Erundek]";
- mes "As you wish.";
- mes "See you later.";
- close;
- case 2: // Bravery Badges
- mes "[Erundek]";
- mes "So you want to exchange ^0000FFBravery Badges^000000 from the Battle of Tierra Valley.";
- mes "What kind of item do you want to exchange?";
- next;
- deletearray .@Item_DB[0],127;
- set .@Badge, 7828;
-
- switch( select("Weapons:Garment:Footgear:Armor:Accessory") )
- {
- case 1: setarray .@Item_DB[0],13036,13411,1425,1632,1634,1543,1924,1978,1574,1824,1183,1380,13305,1279,1739,13108,13172; set .@Value, 100; break;
- case 2: setarray .@Item_DB[0],2538,2539,2540; set .@Value, 50; break;
- case 3: setarray .@Item_DB[0],2435,2436,2437; set .@Value, 50; break;
- case 4: setarray .@Item_DB[0],2376,2377,2378,2379,2380,2381,2382; set .@Value, 80; break;
- case 5: setarray .@Item_DB[0],2720,2721,2722,2723,2724,2725,2733; set .@Value, 500; break;
- }
-
- break;
- case 3: // Valor Badges
- mes "[Erundek]";
- mes "So you want to exchange ^FF0000Valor Badges^000000 from the Battle of Flavius.";
- mes "What kind of item do you want to exchange?";
- next;
- deletearray .@Item_DB[0],127;
- set .@Badge, 7829;
-
- switch( select("Weapons:Garment:Footgear:Armor:Accessory") )
- {
- case 1: setarray .@Item_DB[0],13037,13410,1633,1635,1542,1923,1977,1575,1823,1184,1482,1379,13306,1280,1738,13171,13173,13174; set .@Value, 100; break;
- case 2: setarray .@Item_DB[0],2538,2539,2540; set .@Value, 50; break;
- case 3: setarray .@Item_DB[0],2435,2436,2437; set .@Value, 50; break;
- case 4: setarray .@Item_DB[0],2376,2377,2378,2379,2380,2381,2382; set .@Value, 80; break;
- case 5: setarray .@Item_DB[0],2720,2721,2722,2723,2724,2725,2733; set .@Value, 500; break;
- }
-
- break;
- case 4: // Heroism Badge
- mes "[Erundek]";
- mes "So you want to exchange ^FFA500Heroism Badges^000000 from the Battle of Kriger Von Midgard.";
- mes "This shop is not available at the moment.";
- close;
- }
-
- mes "[Erundek]";
- mes "What item do you want to exchange?";
- mes "If you are not sure, check the catalog.";
- next;
-
- set .@Menu$, "";
- set .@Count, getarraysize(.@Item_DB);
- for( set .@i, 0; .@i < .@Count; set .@i, .@i + 1 )
- set .@Menu$, .@Menu$ + getitemname(.@Item_DB[.@i]) + ":";
-
- set .@Item_ID, .@Item_DB[select(.@Menu$) - 1];
-
- mes "[Erundek]";
- mes "Would you like to exchange ^FF0000" + .@Value + " " + getitemname(.@Badge) + "^000000 for a ^0000FF" + getitemname(.@Item_ID) + "^000000?";
- next;
- mes "Remember, Battleground Reward Items are ^FF0000Character Bound^000000.";
- mes "Are you sure you want this item?";
- next;
-
- if( select("Yes:No") == 2 )
- {
- mes "[Erundek]";
- mes "Do you need more time to check the items?";
- close;
- }
-
- if( countitem(.@Badge) < .@Value )
- {
- mes "[Erundek]";
- mes "I'm sorry, but you don't have enough badges to exchange.";
- close;
- }
-
- delitem .@Badge,.@Value;
- getitem .@Item_ID,1;
- mes "[Erundek]";
- mes "Thank you for exchanging.";
- close;
-}
+// ============================================================================== +// BattleGround System - Common NPCs +// ============================================================================== + +// MapFlags +// ********************************************************************* + +bat_room mapflag nomemo +bat_room mapflag nowarpto +bat_room mapflag nobranch +bat_room mapflag nopenalty +bat_room mapflag noteleport +bat_room mapflag nosave SavePoint + +// BattleGround Warper - Entrance +// ********************************************************************* + +payon,189,104,3 script Maroll Battle Recruiter::BatRecruit 728,{ + mes "[Maroll Battle Recruiter]"; + mes "Good day, adventurer."; + mes "I'm a knight from a far country called Maroll Kingdom."; + next; + mes "[Maroll Battle Recruiter]"; + mes "The two princes of the kingdom are now battling for the throne of Maroll, and are in need of experienced soldiers like you. How would you like to lend your power to one of the princes in the Maroll Kingdom?"; + next; + if( select("Join:Don't Join") == 2 ) + { + mes "[Maroll Battle Recruiter]"; + mes "I'll always be stationed here for more soldiers. Fell free to come back whenever you're interested."; + close; + } + mes "[Maroll Battle Recruiter]"; + mes "May the war god bless you."; + close2; + warp "bat_room",155,150; + end; +} + +prontera,123,83,5 duplicate(BatRecruit) Maroll Battle Recruiter::BatRecruit2 728 +rachel,149,138,5 duplicate(BatRecruit) Maroll Battle Recruiter::BatRecruit3 728 +moc_ruins,75,162,5 duplicate(BatRecruit) Maroll Battle Recruiter::BatRecruit4 728 +aldebaran,146,109,5 duplicate(BatRecruit) Maroll Battle Recruiter::BatRecruit5 728 +lighthalzen,153,86,5 duplicate(BatRecruit) Maroll Battle Recruiter::BatRecruit6 728 + +// BattleGround Warper - Exit +// ********************************************************************* + +bat_room,148,150,4 script Teleporter#bat 124,{ + mes "[Teleporter]"; + mes "Do you wish to leave the battlefield? Use my service to return to town."; + next; + if( select("Leave:Don't Leave") == 2 ) + { + mes "[Teleporter]"; + mes "I'll be here whenever you're in need of my service."; + close; + } + + set .@spoint$, getsavepoint(0); + set .@x, getsavepoint(1); + set .@y, getsavepoint(2); + mes "[Teleporter]"; + mes "You will be sent back to " + .@spoint$ + "."; + close2; + warp .@spoint$, .@x, .@y; + end; +} + +// Kafra +// ********************************************************************* +bat_room,148,147,4 script Kafra Staff::kaf_bat 861,{ + cutin "kafra_09",2; + callfunc "F_Kafra",0,2,1,150,0; +} + +// General Guillaume +// ********************************************************************* +bat_room,160,159,3 script General Guillaume 420,{ + cutin "bat_kiyom2",2; + mes "[General Guillaume]"; + mes "Hot-blooded adventurer, we need your ability to win this battle."; + next; + cutin "bat_kiyom1",2; + mes "[General Guillaume]"; + mes "Our great king, Marcel Marollo VII, is very sick lately. His Majesty has declared that he chosen either me or Prince Croix as the next king amongst his 9 sons."; + next; + mes "[General Guillaume]"; + mes "Two kings can't share a nation!"; + mes "Only the one victorious from His Majesty's appointed battle will be enthroned."; + next; + mes "[General Guillaume]"; + mes "This is however, not just a battle between us. This battle will determine the future of this country. I pledge on my honor to prove that I'm the one who can protect this Maroll from outside threats."; + next; + if( select("Yes, I want to join you.:End Conversation") == 2 ) + { + mes "[General Guillaume]"; + mes "I'll be the one who will capture the flag!"; + close2; + cutin "",255; + end; + } + cutin "bat_kiyom2",2; + mes "[General Guillaume]"; + mes "Welcome to my army, comrade."; + mes "Your eyes tell me that you're a soldier that I can trust."; + set Bat_Team,1; + next; + mes "[General Guillaume]"; + mes "Now, go upstairs and apply for battle with your comrades. I'm sure they'll welcome you whole-heartedly!"; + close2; + cutin "",255; + end; +} + +// General Croix +// ********************************************************************* +bat_room,160,140,3 script Prince Croix 416,{ + cutin "bat_crua1",2; + mes "[Prince Croix]"; + mes "Wise adventurer, why don't you lend us your power for victory?"; + next; + cutin "bat_crua2",2; + mes "[Prince Croix]"; + mes "I do not wish to shed blood, but I have no choice but to fight for the possibility of peace and for the sake of my people."; + next; + mes "[Prince Croix]"; + mes "General Guillaume may have an advantage in this battle as he is the great general of Maroll, but that doesn't automatically mean he'll win. I want to win this battle so that I can grant a better future for my people."; + next; + if( select("Yes, I want to join you!:End Conversation") == 2 ) + { + mes "[Prince Croix]"; + mes "For Maroll!"; + close2; + cutin "",255; + end; + } + mes "[Prince Croix]"; + mes "Thank you so much. I feel like I can win with the help of adventurers like you. Now, please go downstairs and join your comrades in sharpening their skills to fight the enemy!"; + set Bat_Team,2; + close2; + cutin "",255; + end; +} + +// Time calculation Function +// ********************************************************************* +function script Time2Str { + set .@Time_Left, getarg(0) - gettimetick(2); + + set .@Days, .@Time_Left / 86400; + set .@Time_Left, .@Time_Left - (.@Days * 86400); + set .@Hours, .@Time_Left / 3600; + set .@Time_Left, .@Time_Left - (.@Hours * 3600); + set .@Minutes, .@Time_Left / 60; + set .@Time_Left, .@Time_Left - (.@Minutes * 60); + + set .@Time$, ""; + if( .@Days > 1 ) + set .@Time$, .@Time$ + .@Days + " days, "; + else if( .@Days > 0 ) + set .@Time$, .@Time$ + .@Days + " day, "; + + if( .@Hours > 1 ) + set .@Time$, .@Time$ + .@Hours + " hours, "; + else if( .@Hours > 0 ) + set .@Time$, .@Time$ + .@Hours + " hour, "; + + if( .@Minutes > 1 ) + set .@Time$, .@Time$ + .@Minutes + " minutes, "; + else if( .@Minutes > 0 ) + set .@Time$, .@Time$ + .@Minutes + " minute, "; + + if( .@Time_Left > 1 || .@Time_Left == 0 ) + set .@Time$, .@Time$ + .@Time_Left + " seconds."; + else if( .@Time_Left == 1 ) + set .@Time$, .@Time$ + .@Time_Left + " second."; + + return .@Time$; +} + +// Guillaume Knight - Tierra Valley +// ********************************************************************* +bat_room,159,178,5 script Guillaume Knight#1 417,{ + mes "[Guillaume Knight]"; + mes "Tierra Gorge is a very steep canyon with two forts residing in the north and south ends of the map."; + next; + mes "[Guillaume Knight]"; + mes "There is a ration depot for the Guillaume and Croix armies at the 11 and 8 o'clock directions."; + next; + mes "[Guillaume Knight]"; + mes "The battle starts at your army's ship, and the goal is to advance and destroy your enemy's rations depot faster than they can destroy yours."; + mes ""; + mes "The army that captures the neutral flag in the center of the battlefield will be rewarded with extra regeneration points, meaning their soldiers will resurrect more than the other side, giving them an advantage."; + next; + mes "[Guillaume Knight]"; + mes "Are you ready for battle? Then apply with the recruiter next to me!"; + close; +} + +// Tierra Officerer - Guillaume +// ********************************************************************* +bat_room,156,178,5 script Tierra Valley Officer#1 418,{ + mes "[Tierra Officer]"; + if( Bat_Team == 2 ) + { + mes "Get out of here you stinky Croix!"; + close; + } + + if( Bat_Team == 0 ) + { + mes "Please sign up for an army with Prince Croix or General Guillaume!"; + close; + } + + mes "Hello " + strcharinfo(0) + ", let's show the power of the Guillaume Army to those stinky Croixs!"; + next; + if( select("I want to join your army!:End Conversation") == 2 ) + close; + + mes "[Tierra Officer]"; + if( BG_Delay_Tick >= gettimetick(2) ) + { + mes "You are a Deserter!!"; + mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround."; + close; + } + if( Tierra_BG_Tick >= gettimetick(2) ) + { + mes "Sorry, you can't join the battle right now."; + mes "You need to wait ^0000FF" + callfunc("Time2Str",Tierra_BG_Tick) + "^000000 to join again Tierra Valley."; + close; + } + if( BaseLevel < 80 ) + { + mes "I'm very please you want to join our army, but I'm sorry: I can't send a rookie like you to die on the cruel battlefield"; + close; + } + + mes "Good luck!"; + close2; + warp "bat_room",85,224; + end; +} + +// Croix Knight - Tierra Valley +// ********************************************************************* +bat_room,159,121,1 script Croix Knight#1 413,{ + mes "[Croix Knight]"; + mes "Tierra Gorge is a very steep canyon with two forts residing in the north and south ends of the map."; + next; + mes "[Croix Knight]"; + mes "There is a ration depot for the Guillaume and Croix armies at the 11 and 8 o'clock directions."; + next; + mes "[Croix Knight]"; + mes "The battle starts at your army's ship, and the goal is to advance and destroy your enemy's rations depot faster than they can destroy yours."; + mes ""; + mes "The army that captures the neutral flag in the center of the battlefield will be rewarded with extra regeneration points, meaning their soldiers will resurrect more than the other side, giving them an advantage."; + next; + mes "[Croix Knight]"; + mes "Are you ready for battle? Then apply with the recruiter next to me!"; + close; +} + +// Tierra Officer - Croix +// ********************************************************************* +bat_room,156,121,1 script Tierra Valley Officer#2 414,{ + mes "[Tierra Officer]"; + if( Bat_Team == 1 ) + { + mes "Get out of here you stupid Guillaume!"; + close; + } + + if( Bat_Team == 0 ) + { + mes "Please sign up for an army with Prince Croix or General Guillaume!"; + close; + } + + mes "Hello " + strcharinfo(0) + ", let's show the power of the Croix Army to those stinky Guillaumes!"; + next; + if( select("I want to join your army!:End Conversation") == 2 ) + close; + + mes "[Tierra Officer]"; + if( BG_Delay_Tick >= gettimetick(2) ) + { + mes "You are a Deserter!!"; + mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround."; + close; + } + if( Tierra_BG_Tick >= gettimetick(2) ) + { + mes "Sorry, you can't join the battle right now."; + mes "You need to wait ^0000FF" + callfunc("Time2Str",Tierra_BG_Tick) + "^000000 to join again Tierra Valley."; + close; + } + if( BaseLevel < 80 ) + { + mes "I'm very please you want to join our army, but I'm sorry: I can't send a rookie like you to die on the cruel battlefield"; + close; + } + + mes "Good luck!"; + close2; + warp "bat_room",85,208; + end; +} + +// Guillaume Knight - Tierra +// ********************************************************************* +bat_room,175,178,5 script Guillaume Knight#2 417,{ + mes "[Guillaume Knight]"; + mes "Tierra Gorge is a very steep canyon with two forts residing in the north and south ends of the map."; + next; + mes "[Guillaume Knight]"; + mes "There is a ration depot for the Guillaume and Croix armies at the 11 and 8 o'clock directions."; + next; + mes "[Guillaume Knight]"; + mes "The battle starts at your army's ship, and the goal is to advance and destroy your enemy's rations depot faster than they can destroy yours."; + mes ""; + mes "The army that captures the neutral flag in the center of the battlefield will be rewarded with extra regeneration points, meaning their soldiers will resurrect more than the other side, giving them an advantage."; + next; + mes "[Guillaume Knight]"; + mes "Are you ready for battle? Then apply with the recruiter next to me!"; + close; +} + +// Tierra Officer - Guillaume +// ********************************************************************* +bat_room,172,178,5 script Tierra Valley Officer#3 418,{ + mes "[Tierra Officer]"; + if( Bat_Team == 2 ) + { + mes "Get out of here you stinky Croix!"; + close; + } + + if( Bat_Team == 0 ) + { + mes "Please sign up for an army with Prince Croix or General Guillaume!"; + close; + } + + mes "Hello " + strcharinfo(0) + ", let's show the power of the Guillaume Army to those stinky Croixs!"; + next; + if( select("I want to join your army!:End Conversation") == 2 ) + close; + + mes "[Tierra Officer]"; + if( BG_Delay_Tick >= gettimetick(2) ) + { + mes "You are a Deserter!!"; + mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround."; + close; + } + if( Tierra_BG_Tick >= gettimetick(2) ) + { + mes "Sorry, you can't join the battle right now."; + mes "You need to wait ^0000FF" + callfunc("Time2Str",Tierra_BG_Tick) + "^000000 to join again Tierra Valley."; + close; + } + if( BaseLevel < 80 ) + { + mes "I'm very please you want to join our army, but I'm sorry: I can't send a rookie like you to die on the cruel battlefield"; + close; + } + + mes "Good luck!"; + close2; + warp "bat_room",85,94; + end; +} + +// Croix Knight - Tierra +// ********************************************************************* +bat_room,175,121,1 script Croix Knight#2 413,{ + mes "[Croix Knight]"; + mes "Tierra Gorge is a very steep canyon with two forts residing in the north and south ends of the map."; + next; + mes "[Croix Knight]"; + mes "There is a ration depot for the Guillaume and Croix armies at the 11 and 8 o'clock directions."; + next; + mes "[Croix Knight]"; + mes "The battle starts at your army's ship, and the goal is to advance and destroy your enemy's rations depot faster than they can destroy yours."; + mes ""; + mes "The army that captures the neutral flag in the center of the battlefield will be rewarded with extra regeneration points, meaning their soldiers will resurrect more than the other side, giving them an advantage."; + next; + mes "[Croix Knight]"; + mes "Are you ready for battle? Then apply with the recruiter next to me!"; + close; +} + +// Tierra Officer - Croix +// ********************************************************************* +bat_room,172,121,1 script Tierra Valley Officer#4 414,{ + mes "[Tierra Officer]"; + if( Bat_Team == 1 ) + { + mes "Get out of here you stupid Guillaume!"; + close; + } + + if( Bat_Team == 0 ) + { + mes "Please sign up for an army with Prince Croix or General Guillaume!"; + close; + } + + mes "Hello " + strcharinfo(0) + ", let's show the power of the Croix Army to those stinky Guillaumes!"; + next; + if( select("I want to join your army!:End Conversation") == 2 ) + close; + + mes "[Tierra Officer]"; + if( BG_Delay_Tick >= gettimetick(2) ) + { + mes "You are a Deserter!!"; + mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround."; + close; + } + if( Tierra_BG_Tick >= gettimetick(2) ) + { + mes "Sorry, you can't join the battle right now."; + mes "You need to wait ^0000FF" + callfunc("Time2Str",Tierra_BG_Tick) + "^000000 to join again Tierra Valley."; + close; + } + if( BaseLevel < 80 ) + { + mes "I'm very please you want to join our army, but I'm sorry: I can't send a rookie like you to die on the cruel battlefield"; + close; + } + + mes "Good luck!"; + close2; + warp "bat_room",85,77; + end; +} + +// Guillaune Knight - Flavius +// ********************************************************************* +bat_room,151,178,5 script Guillaume Knight#3 417,{ + mes "[Guillaume Knight]"; + mes "The objective of the Flavius Battle is to score 2 points before your enemy by destroying their crystal."; + next; + mes "[Guillaume Knight]"; + mes "The crystals for both armies are protected by special barricades that cannot be destroyed by direct attacks."; + next; + mes "[Guillaume Knight]"; + mes "But they can be removed by destroying the Guardians that protect the enemy army base."; + next; + mes "[Guillaume Knight]"; + mes "The crystals are immune to every type of skill; your physical attacks are the only choice for destroying your enemy's crystal."; + next; + mes "[Guillaume Knight]"; + mes "Are you ready for battle? Then apply with the recruiter next to me!"; + close; +} + +// Flavius Officerer - Guillaume +// ********************************************************************* +bat_room,148,178,5 script Flavius Officer#1 418,{ + mes "[Flavius Officer]"; + if( Bat_Team == 2 ) + { + mes "Get out of here you stupid Croix!"; + close; + } + + if( Bat_Team == 0 ) + { + mes "Please sign up for an army with Prince Croix or General Guillaume!"; + close; + } + + mes "Hello " + strcharinfo(0) + ", let's show the power of the Guillaume Army to those stinky Croixs!"; + next; + if( select("I want to join your army!:End Conversation") == 2 ) + close; + + mes "[Flavius Officer]"; + if( BG_Delay_Tick >= gettimetick(2) ) + { + mes "You are a Deserter!!"; + mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround."; + close; + } + if( Flavius_BG_Tick >= gettimetick(2) ) + { + mes "Sorry, you can't join the battle right now."; + mes "You need to wait ^0000FF" + callfunc("Time2Str",Flavius_BG_Tick) + "^000000 to join again Flavius."; + close; + } + if( BaseLevel < 80 ) + { + mes "I'm very please you want to join our army, but I'm sorry: I can't send a rookie like you to die on the cruel battlefield"; + close; + } + + mes "Good luck!"; + close2; + warp "bat_room",253,94; + end; +} + +// Croix Knight - Flavius +// ********************************************************************* +bat_room,151,121,1 script Croix Knight#3 413,{ + mes "[Croix Knight]"; + mes "The objective of the Flavius Battle is to score 2 points before your enemy by destroying their crystal."; + next; + mes "[Croix Knight]"; + mes "The crystals for both armies are protected by special barricades that cannot be destroyed by direct attacks."; + next; + mes "[Croix Knight]"; + mes "But they can be removed by destroying the Guardians that protect the enemy army base."; + next; + mes "[Croix Knight]"; + mes "The crystals are immune to every type of skill; your physical attacks are the only choice for destroying your enemy's crystal."; + next; + mes "[Croix Knight]"; + mes "Are you ready for battle? Then apply with the recruiter next to me!"; + close; +} + +// Flavius Officerer - Croix +// ********************************************************************* +bat_room,148,121,1 script Flavius Officer#2 414,{ + mes "[Flavius Officer]"; + if( Bat_Team == 1 ) + { + mes "Get out of here you stupid Guillaume!"; + close; + } + + if( Bat_Team == 0 ) + { + mes "Please sign up for an army with Prince Croix or General Guillaume!"; + close; + } + + mes "Hello " + strcharinfo(0) + ", let's show the power of the Croix Army to those stinky Guillaumes!"; + next; + if( select("I want to join your army!:End Conversation") == 2 ) + close; + + mes "[Flavius Officer]"; + if( BG_Delay_Tick >= gettimetick(2) ) + { + mes "You are a Deserter!!"; + mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround."; + close; + } + if( Flavius_BG_Tick >= gettimetick(2) ) + { + mes "Sorry, you can't join the battle right now."; + mes "You need to wait ^0000FF" + callfunc("Time2Str",Flavius_BG_Tick) + "^000000 to join again Flavius."; + close; + } + if( BaseLevel < 80 ) + { + mes "I'm very please you want to join our army, but I'm sorry: I can't send a rookie like you to die on the cruel battlefield"; + close; + } + + mes "Good luck!"; + close2; + warp "bat_room",253,77; + end; +} + +// Guillaune Knight - Flavius +// ********************************************************************* +bat_room,167,178,5 script Guillaume Knight#4 417,{ + mes "[Guillaume Knight]"; + mes "The objective of the Flavius Battle is to score 2 points before your enemy by destroying their crystal."; + next; + mes "[Guillaume Knight]"; + mes "The crystals for both armies are protected by special barricades that cannot be destroyed by direct attacks."; + next; + mes "[Guillaume Knight]"; + mes "But they can be removed by destroying the Guardians that protect the enemy army base."; + next; + mes "[Guillaume Knight]"; + mes "The crystals are immune to every type of skill; your physical attacks are the only choice for destroying your enemy's crystal."; + next; + mes "[Guillaume Knight]"; + mes "Are you ready for battle? Then apply with the recruiter next to me!"; + close; +} + +// Flavius Officerer - Guillaume +// ********************************************************************* +bat_room,164,178,5 script Flavius Officer#3 418,{ + mes "[Flavius Officer]"; + if( Bat_Team == 2 ) + { + mes "Get out of here you stupid Croix!"; + close; + } + + if( Bat_Team == 0 ) + { + mes "Please sign up for an army with Prince Croix or General Guillaume!"; + close; + } + + mes "Hello " + strcharinfo(0) + ", let's show the power of the Guillaume Army to those stinky Croixs!"; + next; + if( select("I want to join your army!:End Conversation") == 2 ) + close; + + mes "[Flavius Officer]"; + if( BG_Delay_Tick >= gettimetick(2) ) + { + mes "You are a Deserter!!"; + mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround."; + close; + } + if( Flavius_BG_Tick >= gettimetick(2) ) + { + mes "Sorry, you can't join the battle right now."; + mes "You need to wait ^0000FF" + callfunc("Time2Str",Flavius_BG_Tick) + "^000000 to join again Flavius."; + close; + } + if( BaseLevel < 80 ) + { + mes "I'm very please you want to join our army, but I'm sorry: I can't send a rookie like you to die on the cruel battlefield"; + close; + } + + mes "Good luck!"; + close2; + warp "bat_room",57,94; + end; +} + +// Croix Knight - Flavius +// ********************************************************************* +bat_room,167,121,1 script Croix Knight#4 413,{ + mes "[Croix Knight]"; + mes "The objective of the Flavius Battle is to score 2 points before your enemy by destroying their crystal."; + next; + mes "[Croix Knight]"; + mes "The crystals for both armies are protected by special barricades that cannot be destroyed by direct attacks."; + next; + mes "[Croix Knight]"; + mes "But they can be removed by destroying the Guardians that protect the enemy army base."; + next; + mes "[Croix Knight]"; + mes "The crystals are immune to every type of skill; your physical attacks are the only choice for destroying your enemy's crystal."; + next; + mes "[Croix Knight]"; + mes "Are you ready for battle? Then apply with the recruiter next to me!"; + close; +} + +// Flavius Officerer - Croix +// ********************************************************************* +bat_room,164,121,1 script Flavius Officer#4 414,{ + mes "[Flavius Officer]"; + if( Bat_Team == 1 ) + { + mes "Get out of here you stupid Guillaume!"; + close; + } + + if( Bat_Team == 0 ) + { + mes "Please sign up for an army with Prince Croix or General Guillaume!"; + close; + } + + mes "Hello " + strcharinfo(0) + ", let's show the power of the Croix Army to those stinky Guillaumes!"; + next; + if( select("I want to join your army!:End Conversation") == 2 ) + close; + + mes "[Flavius Officer]"; + if( BG_Delay_Tick >= gettimetick(2) ) + { + mes "You are a Deserter!!"; + mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround."; + close; + } + if( Flavius_BG_Tick >= gettimetick(2) ) + { + mes "Sorry, you can't join the battle right now."; + mes "You need to wait ^0000FF" + callfunc("Time2Str",Flavius_BG_Tick) + "^000000 to join again Flavius."; + close; + } + if( BaseLevel < 80 ) + { + mes "I'm very please you want to join our army, but I'm sorry: I can't send a rookie like you to die on the cruel battlefield"; + close; + } + + mes "Good luck!"; + close2; + warp "bat_room",57,77; + end; +} + +// Guillaume Knight - KvM +// ********************************************************************* +bat_room,143,178,5 script Guillaume Knight#5 417,{ + mes "[Guillaume Knight]"; + mes "To win the Battle of Kriger Von Midgard you and your team must kill all the other opponents before all of you die."; + next; + mes "[Guillaume Knight]"; + mes "The first team to lose all their soldiers loses."; + next; + mes "[Guillaume Knight]"; + mes "Since you cannot come back to battle after you die, taking care on the battlefield is essential."; + next; + mes "[Guillaume Knight]"; + mes "Are you ready for battle? Then apply with the recruiter next to me!"; + close; +} + +// KvM Officerer - Guillaume +// ********************************************************************* +bat_room,140,178,5 script KVM [80-99] Officer#1 418,{ + mes "[KVM Officer]"; + if( Bat_Team == 2 ) + { + mes "Get out of here you stinky Croix!"; + close; + } + + if( Bat_Team == 0 ) + { + mes "Please sign up for an army with Prince Croix or General Guillaume!"; + close; + } + + mes "Hello " + strcharinfo(0) + ", let's show the power of the Guillaume Army to those stinky Croixs!"; + next; + if( select("I want to join your army!:End Conversation") == 2 ) + close; + + mes "[KVM Officer]"; + if( BG_Delay_Tick >= gettimetick(2) ) + { + mes "You are a Deserter!!"; + mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround."; + close; + } + if( KvM_BG_Tick >= gettimetick(2) ) + { + mes "Sorry, you can't join the battle right now."; + mes "You need to wait ^0000FF" + callfunc("Time2Str",KvM_BG_Tick) + "^000000 to join KvM."; + close; + } + if( BaseLevel < 80 ) + { + mes "I'm very please you want to join our army, but I'm sorry: This arena is for players with baselevel from 80 to 99."; + close; + } + + mes "Good luck!"; + close2; + warp "bat_room",253,224; + end; +} + +// Croix Knight - KvM +// ********************************************************************* +bat_room,143,121,1 script Croix Knight#5 413,{ + mes "[Croix Knight]"; + mes "To win the Battle of Kriger Von Midgard you and your team must kill all the other opponents before all of you die."; + next; + mes "[Croix Knight]"; + mes "The first team to lose all their soldiers loses."; + next; + mes "[Croix Knight]"; + mes "Since you cannot come back to battle after you die, taking care on the battlefield is essential."; + next; + mes "[Croix Knight]"; + mes "Are you ready for battle? Then apply with the recruiter next to me!"; + close; +} + +// KvM Officer - Croix +// ********************************************************************* +bat_room,140,121,1 script KVM [80-99] Officer#2 414,{ + mes "[KVM Officer]"; + if( Bat_Team == 1 ) + { + mes "Get out of here you stupid Guillaume!"; + close; + } + + if( Bat_Team == 0 ) + { + mes "Please sign up for an army with Prince Croix or General Guillaume!"; + close; + } + + mes "Hello " + strcharinfo(0) + ", let's show the power of the Croix Army to those stinky Guillaumes!"; + next; + if( select("I want to join your army!:End Conversation") == 2 ) + close; + + mes "[KVM Officer]"; + if( BG_Delay_Tick >= gettimetick(2) ) + { + mes "You are a Deserter!!"; + mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround."; + close; + } + if( KvM_BG_Tick >= gettimetick(2) ) + { + mes "Sorry, you can't join the battle right now."; + mes "You need to wait ^0000FF" + callfunc("Time2Str",KvM_BG_Tick) + "^000000 to join KvM."; + close; + } + if( BaseLevel < 80 ) + { + mes "I'm very please you want to join our army, but I'm sorry: This arena is for players with baselevel from 80 to 99."; + close; + } + + mes "Good luck!"; + close2; + warp "bat_room",253,208; + end; +} + +// Guillaume Knight - KvM +// ********************************************************************* +bat_room,135,178,5 script Guillaume Knight#6 417,{ + mes "[Guillaume Knight]"; + mes "To win the Battle of Kriger Von Midgard you and your team must kill all the other opponents before all of you die."; + next; + mes "[Guillaume Knight]"; + mes "The first team to lose all their soldiers loses."; + next; + mes "[Guillaume Knight]"; + mes "Since you cannot come back to battle after you die, taking care on the battlefield is essential."; + next; + mes "[Guillaume Knight]"; + mes "Are you ready for battle? Then apply with the recruiter next to me!"; + close; +} + +// KvM Officerer - Guillaume +// ********************************************************************* +bat_room,132,178,5 script KVM [60-79] Officer#1 418,{ + mes "[KVM Officer]"; + if( Bat_Team == 2 ) + { + mes "Get out of here you stinky Croix!"; + close; + } + + if( Bat_Team == 0 ) + { + mes "Please sign up for an army with Prince Croix or General Guillaume!"; + close; + } + + mes "Hello " + strcharinfo(0) + ", let's show the power of the Guillaume Army to those stinky Croixs!"; + next; + if( select("I want to join your army!:End Conversation") == 2 ) + close; + + mes "[KVM Officer]"; + if( BG_Delay_Tick >= gettimetick(2) ) + { + mes "You are a Deserter!!"; + mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround."; + close; + } + if( KvM_BG_Tick >= gettimetick(2) ) + { + mes "Sorry, you can't join the battle right now."; + mes "You need to wait ^0000FF" + callfunc("Time2Str",KvM_BG_Tick) + "^000000 to join KvM."; + close; + } + if( BaseLevel < 60 || BaseLevel > 79 ) + { + mes "I'm very please you want to join our army, but I'm sorry: This arena is for players with baselevel from 60 to 79."; + close; + } + + mes "Good luck!"; + close2; + warp "bat_room",225,224; + end; +} + +// Croix Knight - KvM +// ********************************************************************* +bat_room,135,121,1 script Croix Knight#6 413,{ + mes "[Croix Knight]"; + mes "To win the Battle of Kriger Von Midgard you and your team must kill all the other opponents before all of you die."; + next; + mes "[Croix Knight]"; + mes "The first team to lose all their soldiers loses."; + next; + mes "[Croix Knight]"; + mes "Since you cannot come back to battle after you die, taking care on the battlefield is essential."; + next; + mes "[Croix Knight]"; + mes "Are you ready for battle? Then apply with the recruiter next to me!"; + close; +} + +// KvM Officer - Croix +// ********************************************************************* +bat_room,132,121,1 script KVM [60-79] Officer#2 414,{ + mes "[KVM Officer]"; + if( Bat_Team == 1 ) + { + mes "Get out of here you stupid Guillaume!"; + close; + } + + if( Bat_Team == 0 ) + { + mes "Please sign up for an army with Prince Croix or General Guillaume!"; + close; + } + + mes "Hello " + strcharinfo(0) + ", let's show the power of the Croix Army to those stinky Guillaumes!"; + next; + if( select("I want to join your army!:End Conversation") == 2 ) + close; + + mes "[KVM Officer]"; + if( BG_Delay_Tick >= gettimetick(2) ) + { + mes "You are a Deserter!!"; + mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround."; + close; + } + if( KvM_BG_Tick >= gettimetick(2) ) + { + mes "Sorry, you can't join the battle right now."; + mes "You need to wait ^0000FF" + callfunc("Time2Str",KvM_BG_Tick) + "^000000 to join KvM."; + close; + } + if( BaseLevel < 60 || BaseLevel > 79 ) + { + mes "I'm very please you want to join our army, but I'm sorry: This arena is for players with baselevel from 60 to 79."; + close; + } + + mes "Good luck!"; + close2; + warp "bat_room",225,208; + end; +} + +// Guillaume Knight - KvM +// ********************************************************************* +bat_room,127,178,5 script Guillaume Knight#7 417,{ + mes "[Guillaume Knight]"; + mes "To win the Battle of Kriger Von Midgard you and your team must kill all the other opponents before all of you die."; + next; + mes "[Guillaume Knight]"; + mes "The first team to lose all their soldiers loses."; + next; + mes "[Guillaume Knight]"; + mes "Since you cannot come back to battle after you die, taking care on the battlefield is essential."; + next; + mes "[Guillaume Knight]"; + mes "Are you ready for battle? Then apply with the recruiter next to me!"; + close; +} + +// KvM Officerer - Guillaume +// ********************************************************************* +bat_room,124,178,5 script KVM [1-59] Officer#1 418,{ + mes "[KVM Officer]"; + if( Bat_Team == 2 ) + { + mes "Get out of here you stinky Croix!"; + close; + } + + if( Bat_Team == 0 ) + { + mes "Please sign up for an army with Prince Croix or General Guillaume!"; + close; + } + + mes "Hello " + strcharinfo(0) + ", let's show the power of the Guillaume Army to those stinky Croixs!"; + next; + if( select("I want to join your army!:End Conversation") == 2 ) + close; + + mes "[KVM Officer]"; + if( BG_Delay_Tick >= gettimetick(2) ) + { + mes "You are a Deserter!!"; + mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround."; + close; + } + if( KvM_BG_Tick >= gettimetick(2) ) + { + mes "Sorry, you can't join the battle right now."; + mes "You need to wait ^0000FF" + callfunc("Time2Str",KvM_BG_Tick) + "^000000 to join KvM."; + close; + } + if( BaseLevel > 59 ) + { + mes "I'm very please you want to join our army, but I'm sorry: This arena is for players with baselevel from 1 to 59."; + close; + } + + mes "Good luck!"; + close2; + warp "bat_room",197,224; + end; +} + +// Croix Knight - KvM +// ********************************************************************* +bat_room,127,121,1 script Croix Knight#7 413,{ + mes "[Croix Knight]"; + mes "To win the Battle of Kriger Von Midgard you and your team must kill all the other opponents before all of you die."; + next; + mes "[Croix Knight]"; + mes "The first team to lose all their soldiers loses."; + next; + mes "[Croix Knight]"; + mes "Since you cannot come back to battle after you die, taking care on the battlefield is essential."; + next; + mes "[Croix Knight]"; + mes "Are you ready for battle? Then apply with the recruiter next to me!"; + close; +} + +// KvM Officer - Croix +// ********************************************************************* +bat_room,124,121,1 script KVM [1-59] Officer#2 414,{ + mes "[KVM Officer]"; + if( Bat_Team == 1 ) + { + mes "Get out of here you stupid Guillaume!"; + close; + } + + if( Bat_Team == 0 ) + { + mes "Please sign up for an army with Prince Croix or General Guillaume!"; + close; + } + + mes "Hello " + strcharinfo(0) + ", let's show the power of the Croix Army to those stinky Guillaumes!"; + next; + if( select("I want to join your army!:End Conversation") == 2 ) + close; + + mes "[KVM Officer]"; + if( BG_Delay_Tick >= gettimetick(2) ) + { + mes "You are a Deserter!!"; + mes "Because of running away, you need to wait ^0000FF" + callfunc("Time2Str",BG_Delay_Tick) + "^000000 to join again a BattleGround."; + close; + } + if( KvM_BG_Tick >= gettimetick(2) ) + { + mes "Sorry, you can't join the battle right now."; + mes "You need to wait ^0000FF" + callfunc("Time2Str",KvM_BG_Tick) + "^000000 to join KvM."; + close; + } + if( BaseLevel > 59 ) + { + mes "I'm very please you want to join our army, but I'm sorry: This arena is for players with baselevel from 1 to 59."; + close; + } + + mes "Good luck!"; + close2; + warp "bat_room",197,208; + end; +} + +// Guard Dummy +// ********************************************************************* + +bat_room,161,141,3 script Prince Croix's Aid::bat_aid 415,{ end; } +bat_room,161,139,3 duplicate(bat_aid) Prince Croix's Aid::bat_aid2 415 +bat_room,161,160,3 duplicate(bat_aid) General Guillaume's Aid::bat_aid3 419 +bat_room,161,158,3 duplicate(bat_aid) General Guillaume's Aid::bat_aid4 419 + +// Flags +// ********************************************************************* + +- script Guillaume camp#bat 973,{ end; } +- script Croix camp#bat 974,{ end; } + +// Exit from Registration +// ********************************************************************* +// Flavius bat_b02 +bat_room,57,81,0 warp bat1 2,2,bat_room,154,149 +bat_room,57,90,0 warp bat2 2,2,bat_room,154,149 +// Free BG +bat_room,57,220,0 warp bat3 2,2,bat_room,154,149 +bat_room,57,211,0 warp bat4 2,2,bat_room,154,149 +// Tierra Valley bat_a02 +bat_room,85,81,0 warp bat5 2,2,bat_room,154,149 +bat_room,85,90,0 warp bat6 2,2,bat_room,154,149 +// Tierra Valley bat_a01 +bat_room,85,220,0 warp bat7 2,2,bat_room,154,149 +bat_room,85,211,0 warp bat8 2,2,bat_room,154,149 +// Free BG +bat_room,113,81,0 warp bat9 2,2,bat_room,154,149 +bat_room,113,90,0 warp bat10 2,2,bat_room,154,149 +// Free BG +bat_room,113,220,0 warp bat11 2,2,bat_room,154,149 +bat_room,113,211,0 warp bat12 2,2,bat_room,154,149 +// Free BG +bat_room,141,81,0 warp bat13 2,2,bat_room,154,149 +bat_room,141,90,0 warp bat14 2,2,bat_room,154,149 +// Free BG +bat_room,141,220,0 warp bat15 2,2,bat_room,154,149 +bat_room,141,211,0 warp bat16 2,2,bat_room,154,149 +// Free BG +bat_room,169,81,0 warp bat17 2,2,bat_room,154,149 +bat_room,169,90,0 warp bat18 2,2,bat_room,154,149 +// Free BG +bat_room,169,220,0 warp bat19 2,2,bat_room,154,149 +bat_room,169,211,0 warp bat20 2,2,bat_room,154,149 +// Free BG +bat_room,197,81,0 warp bat21 2,2,bat_room,154,149 +bat_room,197,90,0 warp bat22 2,2,bat_room,154,149 +// KvM bat_c03 +bat_room,197,220,0 warp bat23 2,2,bat_room,154,149 +bat_room,197,211,0 warp bat24 2,2,bat_room,154,149 +// Free BG +bat_room,225,81,0 warp bat25 2,2,bat_room,154,149 +bat_room,225,90,0 warp bat26 2,2,bat_room,154,149 +// KvM bat_c02 +bat_room,225,220,0 warp bat27 2,2,bat_room,154,149 +bat_room,225,211,0 warp bat28 2,2,bat_room,154,149 +// Flavius bat_b01 +bat_room,253,81,0 warp bat29 2,2,bat_room,154,149 +bat_room,253,90,0 warp bat30 2,2,bat_room,154,149 +// KvM bat_c01 +bat_room,253,220,0 warp bat31 2,2,bat_room,154,149 +bat_room,253,211,0 warp bat32 2,2,bat_room,154,149 + +// Badges Repairman +// ********************************************************************* + +bat_room,138,144,5 script Repairman#bg 99,{ + callfunc "repairmain","Repairman"; + end; +} + +// Badges Exchange +// ********************************************************************* + +bat_room,160,150,3 script Erundek 109,{ + mes "[Erundek]"; + mes "Welcome, mighty warrior."; + mes "What can I do for you today ?"; + next; + switch( select("Check the Catalog","Exchange Bravery Badges","Exchange Valor Badges","Exchange Heroism Badges","Hmm, nothing I guess.") ) + { + case 1: + mes "[Erundek]"; + mes "We have many items, so please take a look and purchase deliberately."; + close2; + Readbook 11010,1; + end; + case 5: + mes "[Erundek]"; + mes "As you wish."; + mes "See you later."; + close; + case 2: // Bravery Badges + mes "[Erundek]"; + mes "So you want to exchange ^0000FFBravery Badges^000000 from the Battle of Tierra Valley."; + mes "What kind of item do you want to exchange?"; + next; + deletearray .@Item_DB[0],127; + set .@Badge, 7828; + + switch( select("Weapons:Garment:Footgear:Armor:Accessory") ) + { + case 1: setarray .@Item_DB[0],13036,13411,1425,1632,1634,1543,1924,1978,1574,1824,1183,1380,13305,1279,1739,13108,13172; set .@Value, 100; break; + case 2: setarray .@Item_DB[0],2538,2539,2540; set .@Value, 50; break; + case 3: setarray .@Item_DB[0],2435,2436,2437; set .@Value, 50; break; + case 4: setarray .@Item_DB[0],2376,2377,2378,2379,2380,2381,2382; set .@Value, 80; break; + case 5: setarray .@Item_DB[0],2720,2721,2722,2723,2724,2725,2733; set .@Value, 500; break; + } + + break; + case 3: // Valor Badges + mes "[Erundek]"; + mes "So you want to exchange ^FF0000Valor Badges^000000 from the Battle of Flavius."; + mes "What kind of item do you want to exchange?"; + next; + deletearray .@Item_DB[0],127; + set .@Badge, 7829; + + switch( select("Weapons:Garment:Footgear:Armor:Accessory") ) + { + case 1: setarray .@Item_DB[0],13037,13410,1633,1635,1542,1923,1977,1575,1823,1184,1482,1379,13306,1280,1738,13171,13173,13174; set .@Value, 100; break; + case 2: setarray .@Item_DB[0],2538,2539,2540; set .@Value, 50; break; + case 3: setarray .@Item_DB[0],2435,2436,2437; set .@Value, 50; break; + case 4: setarray .@Item_DB[0],2376,2377,2378,2379,2380,2381,2382; set .@Value, 80; break; + case 5: setarray .@Item_DB[0],2720,2721,2722,2723,2724,2725,2733; set .@Value, 500; break; + } + + break; + case 4: // Heroism Badge + mes "[Erundek]"; + mes "So you want to exchange ^FFA500Heroism Badges^000000 from the Battle of Kriger Von Midgard."; + mes "This shop is not available at the moment."; + close; + } + + mes "[Erundek]"; + mes "What item do you want to exchange?"; + mes "If you are not sure, check the catalog."; + next; + + set .@Menu$, ""; + set .@Count, getarraysize(.@Item_DB); + for( set .@i, 0; .@i < .@Count; set .@i, .@i + 1 ) + set .@Menu$, .@Menu$ + getitemname(.@Item_DB[.@i]) + ":"; + + set .@Item_ID, .@Item_DB[select(.@Menu$) - 1]; + + mes "[Erundek]"; + mes "Would you like to exchange ^FF0000" + .@Value + " " + getitemname(.@Badge) + "^000000 for a ^0000FF" + getitemname(.@Item_ID) + "^000000?"; + next; + mes "Remember, Battleground Reward Items are ^FF0000Character Bound^000000."; + mes "Are you sure you want this item?"; + next; + + if( select("Yes:No") == 2 ) + { + mes "[Erundek]"; + mes "Do you need more time to check the items?"; + close; + } + + if( countitem(.@Badge) < .@Value ) + { + mes "[Erundek]"; + mes "I'm sorry, but you don't have enough badges to exchange."; + close; + } + + delitem .@Badge,.@Value; + getitem .@Item_ID,1; + mes "[Erundek]"; + mes "Thank you for exchanging."; + close; +} diff --git a/npc/battleground/bg_flavius_01.txt b/npc/battleground/bg_flavius_01.txt index dbfea0873..2017fc073 100644 --- a/npc/battleground/bg_flavius_01.txt +++ b/npc/battleground/bg_flavius_01.txt @@ -1,453 +1,453 @@ -// ==============================================================================
-// BattleGround System - Flavius 1
-// ==============================================================================
-
-// Registration NPC's
-// *********************************************************************
-
-bat_room,253,97,4 script Registration::Fl1R_Guillaume 418,{
- end;
-OnInit:
- waitingroom "Battle Station 10 Players",10,"Flavius_BG1::OnGuillaumeJoin",1;
- end;
-OnEnterBG:
- set $@FlaviusBG1_id1, waitingroom2bg("bat_b01",390,10,"Flavius_BG1::OnGuillaumeQuit","");
- end;
-}
-
-bat_room,253,74,0 script Registration::Fl1R_Croix 414,{
- end;
-OnInit:
- waitingroom "Battle Station 10 Players",10,"Flavius_BG1::OnCroixJoin",1;
- end;
-OnEnterBG:
- set $@FlaviusBG1_id2, waitingroom2bg("bat_b01",10,290,"Flavius_BG1::OnCroixQuit","");
- end;
-}
-
-// Battleground Engine
-// *********************************************************************
-
-- script Flavius_BG1 -1,{
- end;
-
-OnInit:
- disablenpc "Guillaume Vintenar#fl1";
- disablenpc "Croix Vintenar#fl1";
- disablenpc "Therapist in battle#fl11";
- disablenpc "Therapist in battle#fl12";
- end;
-
-OnGuillaumeQuit:
-OnCroixQuit:
- set BG_Delay_Tick, gettimetick(2) + 1200;
- end;
-
-OnGuillaumeJoin:
-OnCroixJoin:
- if( $@FlaviusBG1 == 0 )
- donpcevent "Flavius_BG1::OnReadyCheck";
- end;
-
-OnReadyCheck:
- if( $@FlaviusBG1 )
- end;
- set .@Guillaume, getwaitingroomstate(0,"Fl1R_Guillaume");
- set .@Croix, getwaitingroomstate(0,"Fl1R_Croix");
-
- if( .@Guillaume < 10 || .@Croix < 10 )
- {
- mapannounce "bat_room","Battleground -- Flavius [80-99] G: " + .@Guillaume + "/10, C: " + .@Croix + "/10",1,0x006400;
- end;
- }
-
- // BG Variables
- set $@FlaviusBG1, 1;
- set $@FlaviusBG1_Victory, 0;
- set .Guillaume_Score, 0;
- set .Guillaume_Loss, 0;
- set .Croix_Score, 0;
- set .Croix_Loss, 0;
- set .Match, 0;
- // Prepare NPC
- donpcevent "#gfl1_respawn::OnBGStart";
- donpcevent "#cfl1_respawn::OnBGStart";
- enablenpc "Therapist in battle#fl11";
- enablenpc "Therapist in battle#fl12";
- disablenpc "Guillaume Vintenar#fl1";
- disablenpc "Croix Vintenar#fl1";
- // Build and Warp Teams
- donpcevent "Fl1R_Guillaume::OnEnterBG";
- donpcevent "Fl1R_Croix::OnEnterBG";
- announce "Battleground -- Flavius [80-99] has started!",0,0x006400;
- initnpctimer;
- // Start Match!!
-
-OnRoundStart:
- sleep 2000;
- if( $@FlaviusBG1 != 1 ) end;
-
- areapercentheal "bat_b01",382,2,397,17,100,100;
- areapercentheal "bat_b01",2,282,17,297,100,100;
- bg_warp $@FlaviusBG1_id1,"bat_b01",311,224;
- bg_warp $@FlaviusBG1_id2,"bat_b01",87,75;
-
- sleep 2000;
- if( $@FlaviusBG1 != 1 ) end;
-
- set .Match, .Match + 1;
- // Crystal Spawn
- set .Guillaume_Crystal, bg_monster($@FlaviusBG1_id1,"bat_b01",328,150,"Crystal Guillaume",1914,"Flavius_BG1::OnGuillaumeBreak");
- setwall "bat_b01",327,149,2,6,0,"gui_wall1-1";
- setwall "bat_b01",329,149,2,0,0,"gui_wall1-2";
- setwall "bat_b01",329,151,2,2,0,"gui_wall1-3";
- setwall "bat_b01",327,151,2,4,0,"gui_wall1-4";
-
- set .Croix_Crystal, bg_monster($@FlaviusBG1_id2,"bat_b01",62,150,"Crystal Croix",1915,"Flavius_BG1::OnCroixBreak");
- setwall "bat_b01",61,149,2,6,0,"cro_wall1-1";
- setwall "bat_b01",63,149,2,0,0,"cro_wall1-2";
- setwall "bat_b01",63,151,2,2,0,"cro_wall1-3";
- setwall "bat_b01",61,151,2,4,0,"cro_wall1-4";
-
- // Guardian Spawns
- bg_monster $@FlaviusBG1_id1,"bat_b01",328,160,"Guillaume Guardian",1949,"Flavius_BG1::OnGuiGuardian";
- bg_monster $@FlaviusBG1_id1,"bat_b01",328,140,"Guillaume Guardian",1950,"Flavius_BG1::OnGuiGuardian";
- set .Guillaume_Guardian, 2;
- bg_monster $@FlaviusBG1_id2,"bat_b01",62,160,"Croix Guardian",1949,"Flavius_BG1::OnCroGuardian";
- bg_monster $@FlaviusBG1_id2,"bat_b01",61,140,"Croix Guardian",1950,"Flavius_BG1::OnCroGuardian";
- set .Croix_Guardian, 2;
- // Announces
- mapannounce "bat_b01","The Battle of Flavius [ " + .Match + " ] Round has begun!!",1,0x006400;
- end;
-
-OnRoundStop:
- // Remove Monsters
- killmonster "bat_b01","Flavius_BG1::OnGuiGuardian";
- killmonster "bat_b01","Flavius_BG1::OnCroGuardian";
- delwall "gui_wall1-1";
- delwall "gui_wall1-2";
- delwall "gui_wall1-3";
- delwall "gui_wall1-4";
- killmonster "bat_b01","Flavius_BG1::OnGuillaumeBreak";
- delwall "cro_wall1-1";
- delwall "cro_wall1-2";
- delwall "cro_wall1-3";
- delwall "cro_wall1-4";
- killmonster "bat_b01","Flavius_BG1::OnCroixBreak";
- end;
-
-OnGuiGuardian:
- if( set(.Guillaume_Guardian, .Guillaume_Guardian - 1) <= 0 )
- {
- delwall "gui_wall1-1";
- delwall "gui_wall1-2";
- delwall "gui_wall1-3";
- delwall "gui_wall1-4";
- mapannounce "bat_b01","The Guillaume Crystal is vulnerable to attack!",1,0x0000FF;
- }
- end;
-
-OnCroGuardian:
- if( set(.Croix_Guardian, .Croix_Guardian - 1) <= 0 )
- {
- delwall "cro_wall1-1";
- delwall "cro_wall1-2";
- delwall "cro_wall1-3";
- delwall "cro_wall1-4";
- mapannounce "bat_b01","The Croix Crystal is vulnerable to attack!",1,0xFF0000;
- }
- end;
-
-OnGuillaumeBreak:
- donpcevent "Flavius_BG1::OnRoundStop";
- set .Guillaume_Loss, .Guillaume_Loss + 1;
- if( set(.Croix_Score, .Croix_Score + 1) < 2 )
- {
- bg_updatescore "bat_b01",.Guillaume_Score,.Croix_Score;
- mapannounce "bat_b01","The Guillaume Crystal has been destroyed!",1,0x0000FF;
- donpcevent "Flavius_BG1::OnRoundStart";
- }
- else
- {
- bg_updatescore "bat_b01",.Guillaume_Score,.Croix_Score;
- mapannounce "bat_b01","The Croix army has won the Battle of Flavius!",1,0xFF0000;
- set $@FlaviusBG1_Victory, 2;
- donpcevent "Flavius_BG1::OnMatchEnd";
- }
- end;
-
-OnCroixBreak:
- donpcevent "Flavius_BG1::OnRoundStop";
- set .Croix_Loss, .Croix_Loss + 1;
- if( set(.Guillaume_Score, .Guillaume_Score + 1) < 2 )
- {
- bg_updatescore "bat_b01",.Guillaume_Score,.Croix_Score;
- mapannounce "bat_b01","The Croix Crystal has been destroyed!",1,0xFF0000;
- donpcevent "Flavius_BG1::OnRoundStart";
- }
- else
- {
- bg_updatescore "bat_b01",.Guillaume_Score,.Croix_Score;
- mapannounce "bat_b01","The Guillaume army has won the Battle of Flavius!",1,0x0000FF;
- set $@FlaviusBG1_Victory, 1;
- donpcevent "Flavius_BG1::OnMatchEnd";
- }
- end;
-
-OnTimer2400000:
- mapannounce "bat_b01","Battle of Flavius will ends in 5 minutes",1,0x006400;
- end;
-OnTimer2640000:
- mapannounce "bat_b01","Battle of Flavius will ends in 1 minute",1,0x006400;
- end;
-
-OnTimer2700000:
- if( .Croix_Score > .Guillaume_Score )
- {
- mapannounce "bat_b01","The Croix army has won the Battle of Flavius!",1,0xFF0000;
- set $@FlaviusBG1_Victory, 2;
- }
- else if( .Croix_Score < .Guillaume_Score )
- {
- mapannounce "bat_b01","The Guillaume army has won the Battle of Flavius!",1,0x0000FF;
- set $@FlaviusBG1_Victory, 1;
- }
- else
- {
- mapannounce "bat_b01","The Battle of Flavius is over. The time is out, this is a Tie",1,0x006400;
- set $@FlaviusBG1_Victory, 3;
- }
-
-OnMatchEnd:
- set $@FlaviusBG1, 2;
- stopnpctimer;
- donpcevent "#gfl1_respawn::OnBGStop";
- donpcevent "#cfl1_respawn::OnBGStop";
- disablenpc "Therapist in battle#fl11";
- disablenpc "Therapist in battle#fl12";
- enablenpc "Guillaume Vintenar#fl1";
- enablenpc "Croix Vintenar#fl1";
- sleep 2000;
- bg_warp $@FlaviusBG1_id1,"bat_b01",390,10;
- bg_warp $@FlaviusBG1_id2,"bat_b01",10,290;
- sleep 3000;
- mapannounce "bat_b01","Battle of Flavius will close in 1 minute!",1,0x006400;
- initnpctimer;
- end;
-
-OnTimer30000:
- if( $@FlaviusBG1 == 2 )
- mapannounce "bat_b01","Battle of Flavius will close in 30 seconds!",1,0x006400;
- end;
-OnTimer50000:
- if( $@FlaviusBG1 == 2 )
- mapannounce "bat_b01","Battle of Flavius will close in 10 seconds!",1,0x006400;
- end;
-
-OnTimer60000:
- if( $@FlaviusBG1 != 2 )
- end;
-OnReset:
- stopnpctimer;
- donpcevent "Flavius_BG1::OnRoundStop";
- set .Guillaume_Score, 0;
- set .Guillaume_Crystal, 0;
- set .Guillaume_Loss, 0;
- set .Croix_Score, 0;
- set .Croix_Crystal, 0;
- set .Croix_Loss, 0;
- set .Match, 0;
- set $@FlaviusBG1_Victory, 0;
- // NPC's
- disablenpc "Guillaume Vintenar#fl1";
- disablenpc "Croix Vintenar#fl1";
- disablenpc "Therapist in battle#fl11";
- disablenpc "Therapist in battle#fl12";
-
- if( $@FlaviusBG1_id1 ) { bg_destroy $@FlaviusBG1_id1; set $@FlaviusBG1_id1, 0; }
- if( $@FlaviusBG1_id2 ) { bg_destroy $@FlaviusBG1_id2; set $@FlaviusBG1_id2, 0; }
- sleep 1000;
- mapwarp "bat_b01","bat_room",155,150;
- sleep 2000;
- maprespawnguildid "bat_b01",0,3; // Just in case someone else
- sleep 2000;
- bg_updatescore "bat_b01",0,0;
- set $@FlaviusBG1, 0;
- donpcevent "Flavius_BG1::OnReadyCheck";
- end;
-}
-
-// Battleground rewards
-// *********************************************************************
-
-bat_b01,390,13,5 script Guillaume Vintenar#fl1 419,{
- if( $@FlaviusBG1_Victory )
- {
- if( $@FlaviusBG1_Victory == Bat_Team )
- { // Victory
- mes "[Swandery]";
- mes "Blessed Guillaume!!";
- mes "Let's enjoy our glorious victory!";
- mes "" + strcharinfo(0) + ", its a sign reflecting victory";
- close2;
- set .@Reward, 9;
- }
- else
- { //
- mes "[Swandery]";
- mes "You lost, but you're dedicated to this battle.";
- mes "This is a reward for your great dedication by Guillaume Marollo!";
- mes "Just take this defeat a lesson, and later you would definitely learn.";
- close2;
- set .@Reward, 3;
- }
-
- set Flavius_BG_Tick, gettimetick(2) + 300;
- getitem 7829, .@Reward;
- bg_leave;
- warp "bat_room",155,150;
- end;
- }
- end;
-}
-
-bat_b01,10,293,5 script Croix Vintenar#fl1 415,{
- if( $@FlaviusBG1_Victory )
- {
- if( $@FlaviusBG1_Victory == Bat_Team )
- { // Victory
- mes "[Swandery]";
- mes "Blessed Croax!!";
- mes "Let's enjoy our glorious victory!";
- mes "" + strcharinfo(0) + ", its a sign reflecting victory";
- close2;
- set .@Reward, 9;
- }
- else
- { //
- mes "[Swandery]";
- mes "Oh, " + strcharinfo(0) + ". Don't be sad.";
- mes "Even though we didn't win, we did our best.";
- mes "This is a Royal gift from Croix, and please don't forget this battle. We can win the next.";
- close2;
- set .@Reward, 3;
- }
-
- set Flavius_BG_Tick, gettimetick(2) + 300;
- getitem 7829, .@Reward;
- bg_leave;
- warp "bat_room",155,150;
- end;
- }
- end;
-}
-
-// Battleground Therapist
-// *********************************************************************
-
-bat_b01,390,13,5 script Therapist in battle#fl12 95,{
- mes "[Therapist in battle]";
- mes "Just close your eyes, and take a deep breathe.";
- mes "You can be free from pain.";
- specialeffect2 312;
- close;
-}
-
-bat_b01,10,293,5 script Therapist in battle#fl11 95,{
- mes "[Therapist in battle]";
- mes "Just close your eyes, and take a deep breathe.";
- mes "You can be free from pain.";
- specialeffect2 312;
- close;
-}
-
-// Battleground Respawn
-// *********************************************************************
-
-bat_b01,390,10,0 script #gfl1_respawn 139,{
- end;
-
-OnBGStart:
- initnpctimer;
- end;
-
-OnBGStop:
- stopnpctimer;
- end;
-
-OnTimer24000:
- misceffect 83;
- end;
-
-OnTimer25000:
- areapercentheal "bat_b01",382,2,397,17,100,100;
- areawarp "bat_b01",382,2,397,17,"bat_b01",311,224;
- initnpctimer;
- end;
-}
-
-bat_b01,10,290,0 script #cfl1_respawn 139,{
- end;
-
-OnBGStart:
- initnpctimer;
- end;
-
-OnBGStop:
- stopnpctimer;
- end;
-
-OnTimer24000:
- misceffect 83;
- end;
-
-OnTimer25000:
- areapercentheal "bat_b01",2,282,17,297,100,100;
- areawarp "bat_b01",2,282,17,297,"bat_b01",87,75;
- initnpctimer;
- end;
-}
-
-// Flags
-// *********************************************************************
-
-bat_b01,304,231,1 duplicate(Guillaume camp#bat) Guillaume camp#bat1 973
-bat_b01,319,231,1 duplicate(Guillaume camp#bat) Guillaume camp#bat2 973
-bat_b01,304,218,1 duplicate(Guillaume camp#bat) Guillaume camp#bat3 973
-bat_b01,319,218,1 duplicate(Guillaume camp#bat) Guillaume camp#bat4 973
-bat_b01,304,231,1 duplicate(Guillaume camp#bat) Guillaume camp#bat5 973
-bat_b01,304,231,1 duplicate(Guillaume camp#bat) Guillaume camp#bat6 973
-bat_b01,335,142,1 duplicate(Guillaume camp#bat) Guillaume camp#bat7 973
-bat_b01,335,157,1 duplicate(Guillaume camp#bat) Guillaume camp#bat8 973
-bat_b01,390,16,1 duplicate(Guillaume camp#bat) Guillaume camp#bat9 973
-bat_b01,292,163,1 duplicate(Guillaume camp#bat) Guillaume camp#bat19 973
-bat_b01,292,136,1 duplicate(Guillaume camp#bat) Guillaume camp#bat20 973
-bat_b01,241,185,1 duplicate(Guillaume camp#bat) Guillaume camp#bat21 973
-bat_b01,247,179,1 duplicate(Guillaume camp#bat) Guillaume camp#bat22 973
-
-bat_b01,96,81,1 duplicate(Croix camp#bat) Croix camp#bat1 974
-bat_b01,96,68,1 duplicate(Croix camp#bat) Croix camp#bat2 974
-bat_b01,79,81,1 duplicate(Croix camp#bat) Croix camp#bat3 974
-bat_b01,79,68,1 duplicate(Croix camp#bat) Croix camp#bat4 974
-bat_b01,96,81,1 duplicate(Croix camp#bat) Croix camp#bat5 974
-bat_b01,96,81,1 duplicate(Croix camp#bat) Croix camp#bat6 974
-bat_b01,59,164,1 duplicate(Croix camp#bat) Croix camp#bat7 974
-bat_b01,59,137,1 duplicate(Croix camp#bat) Croix camp#bat8 974
-bat_b01,10,296,1 duplicate(Croix camp#bat) Croix camp#bat9 974
-bat_b01,110,162,1 duplicate(Croix camp#bat) Croix camp#bat18 974
-bat_b01,110,137,1 duplicate(Croix camp#bat) Croix camp#bat19 974
-bat_b01,152,120,1 duplicate(Croix camp#bat) Croix camp#bat20 974
-bat_b01,158,114,1 duplicate(Croix camp#bat) Croix camp#bat21 974
-
-// MapFlags
-// *********************************************************************
-
-bat_b01 mapflag battleground 2
-bat_b01 mapflag nomemo
-bat_b01 mapflag nosave SavePoint
-bat_b01 mapflag noteleport
-bat_b01 mapflag nowarp
-bat_b01 mapflag nowarpto
-bat_b01 mapflag noreturn
-bat_b01 mapflag nobranch
-bat_b01 mapflag nopenalty
+// ============================================================================== +// BattleGround System - Flavius 1 +// ============================================================================== + +// Registration NPC's +// ********************************************************************* + +bat_room,253,97,4 script Registration::Fl1R_Guillaume 418,{ + end; +OnInit: + waitingroom "Battle Station 10 Players",10,"Flavius_BG1::OnGuillaumeJoin",1; + end; +OnEnterBG: + set $@FlaviusBG1_id1, waitingroom2bg("bat_b01",390,10,"Flavius_BG1::OnGuillaumeQuit",""); + end; +} + +bat_room,253,74,0 script Registration::Fl1R_Croix 414,{ + end; +OnInit: + waitingroom "Battle Station 10 Players",10,"Flavius_BG1::OnCroixJoin",1; + end; +OnEnterBG: + set $@FlaviusBG1_id2, waitingroom2bg("bat_b01",10,290,"Flavius_BG1::OnCroixQuit",""); + end; +} + +// Battleground Engine +// ********************************************************************* + +- script Flavius_BG1 -1,{ + end; + +OnInit: + disablenpc "Guillaume Vintenar#fl1"; + disablenpc "Croix Vintenar#fl1"; + disablenpc "Therapist in battle#fl11"; + disablenpc "Therapist in battle#fl12"; + end; + +OnGuillaumeQuit: +OnCroixQuit: + set BG_Delay_Tick, gettimetick(2) + 1200; + end; + +OnGuillaumeJoin: +OnCroixJoin: + if( $@FlaviusBG1 == 0 ) + donpcevent "Flavius_BG1::OnReadyCheck"; + end; + +OnReadyCheck: + if( $@FlaviusBG1 ) + end; + set .@Guillaume, getwaitingroomstate(0,"Fl1R_Guillaume"); + set .@Croix, getwaitingroomstate(0,"Fl1R_Croix"); + + if( .@Guillaume < 10 || .@Croix < 10 ) + { + mapannounce "bat_room","Battleground -- Flavius [80-99] G: " + .@Guillaume + "/10, C: " + .@Croix + "/10",1,0x006400; + end; + } + + // BG Variables + set $@FlaviusBG1, 1; + set $@FlaviusBG1_Victory, 0; + set .Guillaume_Score, 0; + set .Guillaume_Loss, 0; + set .Croix_Score, 0; + set .Croix_Loss, 0; + set .Match, 0; + // Prepare NPC + donpcevent "#gfl1_respawn::OnBGStart"; + donpcevent "#cfl1_respawn::OnBGStart"; + enablenpc "Therapist in battle#fl11"; + enablenpc "Therapist in battle#fl12"; + disablenpc "Guillaume Vintenar#fl1"; + disablenpc "Croix Vintenar#fl1"; + // Build and Warp Teams + donpcevent "Fl1R_Guillaume::OnEnterBG"; + donpcevent "Fl1R_Croix::OnEnterBG"; + announce "Battleground -- Flavius [80-99] has started!",0,0x006400; + initnpctimer; + // Start Match!! + +OnRoundStart: + sleep 2000; + if( $@FlaviusBG1 != 1 ) end; + + areapercentheal "bat_b01",382,2,397,17,100,100; + areapercentheal "bat_b01",2,282,17,297,100,100; + bg_warp $@FlaviusBG1_id1,"bat_b01",311,224; + bg_warp $@FlaviusBG1_id2,"bat_b01",87,75; + + sleep 2000; + if( $@FlaviusBG1 != 1 ) end; + + set .Match, .Match + 1; + // Crystal Spawn + set .Guillaume_Crystal, bg_monster($@FlaviusBG1_id1,"bat_b01",328,150,"Crystal Guillaume",1914,"Flavius_BG1::OnGuillaumeBreak"); + setwall "bat_b01",327,149,2,6,0,"gui_wall1-1"; + setwall "bat_b01",329,149,2,0,0,"gui_wall1-2"; + setwall "bat_b01",329,151,2,2,0,"gui_wall1-3"; + setwall "bat_b01",327,151,2,4,0,"gui_wall1-4"; + + set .Croix_Crystal, bg_monster($@FlaviusBG1_id2,"bat_b01",62,150,"Crystal Croix",1915,"Flavius_BG1::OnCroixBreak"); + setwall "bat_b01",61,149,2,6,0,"cro_wall1-1"; + setwall "bat_b01",63,149,2,0,0,"cro_wall1-2"; + setwall "bat_b01",63,151,2,2,0,"cro_wall1-3"; + setwall "bat_b01",61,151,2,4,0,"cro_wall1-4"; + + // Guardian Spawns + bg_monster $@FlaviusBG1_id1,"bat_b01",328,160,"Guillaume Guardian",1949,"Flavius_BG1::OnGuiGuardian"; + bg_monster $@FlaviusBG1_id1,"bat_b01",328,140,"Guillaume Guardian",1950,"Flavius_BG1::OnGuiGuardian"; + set .Guillaume_Guardian, 2; + bg_monster $@FlaviusBG1_id2,"bat_b01",62,160,"Croix Guardian",1949,"Flavius_BG1::OnCroGuardian"; + bg_monster $@FlaviusBG1_id2,"bat_b01",61,140,"Croix Guardian",1950,"Flavius_BG1::OnCroGuardian"; + set .Croix_Guardian, 2; + // Announces + mapannounce "bat_b01","The Battle of Flavius [ " + .Match + " ] Round has begun!!",1,0x006400; + end; + +OnRoundStop: + // Remove Monsters + killmonster "bat_b01","Flavius_BG1::OnGuiGuardian"; + killmonster "bat_b01","Flavius_BG1::OnCroGuardian"; + delwall "gui_wall1-1"; + delwall "gui_wall1-2"; + delwall "gui_wall1-3"; + delwall "gui_wall1-4"; + killmonster "bat_b01","Flavius_BG1::OnGuillaumeBreak"; + delwall "cro_wall1-1"; + delwall "cro_wall1-2"; + delwall "cro_wall1-3"; + delwall "cro_wall1-4"; + killmonster "bat_b01","Flavius_BG1::OnCroixBreak"; + end; + +OnGuiGuardian: + if( set(.Guillaume_Guardian, .Guillaume_Guardian - 1) <= 0 ) + { + delwall "gui_wall1-1"; + delwall "gui_wall1-2"; + delwall "gui_wall1-3"; + delwall "gui_wall1-4"; + mapannounce "bat_b01","The Guillaume Crystal is vulnerable to attack!",1,0x0000FF; + } + end; + +OnCroGuardian: + if( set(.Croix_Guardian, .Croix_Guardian - 1) <= 0 ) + { + delwall "cro_wall1-1"; + delwall "cro_wall1-2"; + delwall "cro_wall1-3"; + delwall "cro_wall1-4"; + mapannounce "bat_b01","The Croix Crystal is vulnerable to attack!",1,0xFF0000; + } + end; + +OnGuillaumeBreak: + donpcevent "Flavius_BG1::OnRoundStop"; + set .Guillaume_Loss, .Guillaume_Loss + 1; + if( set(.Croix_Score, .Croix_Score + 1) < 2 ) + { + bg_updatescore "bat_b01",.Guillaume_Score,.Croix_Score; + mapannounce "bat_b01","The Guillaume Crystal has been destroyed!",1,0x0000FF; + donpcevent "Flavius_BG1::OnRoundStart"; + } + else + { + bg_updatescore "bat_b01",.Guillaume_Score,.Croix_Score; + mapannounce "bat_b01","The Croix army has won the Battle of Flavius!",1,0xFF0000; + set $@FlaviusBG1_Victory, 2; + donpcevent "Flavius_BG1::OnMatchEnd"; + } + end; + +OnCroixBreak: + donpcevent "Flavius_BG1::OnRoundStop"; + set .Croix_Loss, .Croix_Loss + 1; + if( set(.Guillaume_Score, .Guillaume_Score + 1) < 2 ) + { + bg_updatescore "bat_b01",.Guillaume_Score,.Croix_Score; + mapannounce "bat_b01","The Croix Crystal has been destroyed!",1,0xFF0000; + donpcevent "Flavius_BG1::OnRoundStart"; + } + else + { + bg_updatescore "bat_b01",.Guillaume_Score,.Croix_Score; + mapannounce "bat_b01","The Guillaume army has won the Battle of Flavius!",1,0x0000FF; + set $@FlaviusBG1_Victory, 1; + donpcevent "Flavius_BG1::OnMatchEnd"; + } + end; + +OnTimer2400000: + mapannounce "bat_b01","Battle of Flavius will ends in 5 minutes",1,0x006400; + end; +OnTimer2640000: + mapannounce "bat_b01","Battle of Flavius will ends in 1 minute",1,0x006400; + end; + +OnTimer2700000: + if( .Croix_Score > .Guillaume_Score ) + { + mapannounce "bat_b01","The Croix army has won the Battle of Flavius!",1,0xFF0000; + set $@FlaviusBG1_Victory, 2; + } + else if( .Croix_Score < .Guillaume_Score ) + { + mapannounce "bat_b01","The Guillaume army has won the Battle of Flavius!",1,0x0000FF; + set $@FlaviusBG1_Victory, 1; + } + else + { + mapannounce "bat_b01","The Battle of Flavius is over. The time is out, this is a Tie",1,0x006400; + set $@FlaviusBG1_Victory, 3; + } + +OnMatchEnd: + set $@FlaviusBG1, 2; + stopnpctimer; + donpcevent "#gfl1_respawn::OnBGStop"; + donpcevent "#cfl1_respawn::OnBGStop"; + disablenpc "Therapist in battle#fl11"; + disablenpc "Therapist in battle#fl12"; + enablenpc "Guillaume Vintenar#fl1"; + enablenpc "Croix Vintenar#fl1"; + sleep 2000; + bg_warp $@FlaviusBG1_id1,"bat_b01",390,10; + bg_warp $@FlaviusBG1_id2,"bat_b01",10,290; + sleep 3000; + mapannounce "bat_b01","Battle of Flavius will close in 1 minute!",1,0x006400; + initnpctimer; + end; + +OnTimer30000: + if( $@FlaviusBG1 == 2 ) + mapannounce "bat_b01","Battle of Flavius will close in 30 seconds!",1,0x006400; + end; +OnTimer50000: + if( $@FlaviusBG1 == 2 ) + mapannounce "bat_b01","Battle of Flavius will close in 10 seconds!",1,0x006400; + end; + +OnTimer60000: + if( $@FlaviusBG1 != 2 ) + end; +OnReset: + stopnpctimer; + donpcevent "Flavius_BG1::OnRoundStop"; + set .Guillaume_Score, 0; + set .Guillaume_Crystal, 0; + set .Guillaume_Loss, 0; + set .Croix_Score, 0; + set .Croix_Crystal, 0; + set .Croix_Loss, 0; + set .Match, 0; + set $@FlaviusBG1_Victory, 0; + // NPC's + disablenpc "Guillaume Vintenar#fl1"; + disablenpc "Croix Vintenar#fl1"; + disablenpc "Therapist in battle#fl11"; + disablenpc "Therapist in battle#fl12"; + + if( $@FlaviusBG1_id1 ) { bg_destroy $@FlaviusBG1_id1; set $@FlaviusBG1_id1, 0; } + if( $@FlaviusBG1_id2 ) { bg_destroy $@FlaviusBG1_id2; set $@FlaviusBG1_id2, 0; } + sleep 1000; + mapwarp "bat_b01","bat_room",155,150; + sleep 2000; + maprespawnguildid "bat_b01",0,3; // Just in case someone else + sleep 2000; + bg_updatescore "bat_b01",0,0; + set $@FlaviusBG1, 0; + donpcevent "Flavius_BG1::OnReadyCheck"; + end; +} + +// Battleground rewards +// ********************************************************************* + +bat_b01,390,13,5 script Guillaume Vintenar#fl1 419,{ + if( $@FlaviusBG1_Victory ) + { + if( $@FlaviusBG1_Victory == Bat_Team ) + { // Victory + mes "[Swandery]"; + mes "Blessed Guillaume!!"; + mes "Let's enjoy our glorious victory!"; + mes "" + strcharinfo(0) + ", its a sign reflecting victory"; + close2; + set .@Reward, 9; + } + else + { // + mes "[Swandery]"; + mes "You lost, but you're dedicated to this battle."; + mes "This is a reward for your great dedication by Guillaume Marollo!"; + mes "Just take this defeat a lesson, and later you would definitely learn."; + close2; + set .@Reward, 3; + } + + set Flavius_BG_Tick, gettimetick(2) + 300; + getitem 7829, .@Reward; + bg_leave; + warp "bat_room",155,150; + end; + } + end; +} + +bat_b01,10,293,5 script Croix Vintenar#fl1 415,{ + if( $@FlaviusBG1_Victory ) + { + if( $@FlaviusBG1_Victory == Bat_Team ) + { // Victory + mes "[Swandery]"; + mes "Blessed Croax!!"; + mes "Let's enjoy our glorious victory!"; + mes "" + strcharinfo(0) + ", its a sign reflecting victory"; + close2; + set .@Reward, 9; + } + else + { // + mes "[Swandery]"; + mes "Oh, " + strcharinfo(0) + ". Don't be sad."; + mes "Even though we didn't win, we did our best."; + mes "This is a Royal gift from Croix, and please don't forget this battle. We can win the next."; + close2; + set .@Reward, 3; + } + + set Flavius_BG_Tick, gettimetick(2) + 300; + getitem 7829, .@Reward; + bg_leave; + warp "bat_room",155,150; + end; + } + end; +} + +// Battleground Therapist +// ********************************************************************* + +bat_b01,390,13,5 script Therapist in battle#fl12 95,{ + mes "[Therapist in battle]"; + mes "Just close your eyes, and take a deep breathe."; + mes "You can be free from pain."; + specialeffect2 312; + close; +} + +bat_b01,10,293,5 script Therapist in battle#fl11 95,{ + mes "[Therapist in battle]"; + mes "Just close your eyes, and take a deep breathe."; + mes "You can be free from pain."; + specialeffect2 312; + close; +} + +// Battleground Respawn +// ********************************************************************* + +bat_b01,390,10,0 script #gfl1_respawn 139,{ + end; + +OnBGStart: + initnpctimer; + end; + +OnBGStop: + stopnpctimer; + end; + +OnTimer24000: + misceffect 83; + end; + +OnTimer25000: + areapercentheal "bat_b01",382,2,397,17,100,100; + areawarp "bat_b01",382,2,397,17,"bat_b01",311,224; + initnpctimer; + end; +} + +bat_b01,10,290,0 script #cfl1_respawn 139,{ + end; + +OnBGStart: + initnpctimer; + end; + +OnBGStop: + stopnpctimer; + end; + +OnTimer24000: + misceffect 83; + end; + +OnTimer25000: + areapercentheal "bat_b01",2,282,17,297,100,100; + areawarp "bat_b01",2,282,17,297,"bat_b01",87,75; + initnpctimer; + end; +} + +// Flags +// ********************************************************************* + +bat_b01,304,231,1 duplicate(Guillaume camp#bat) Guillaume camp#bat1 973 +bat_b01,319,231,1 duplicate(Guillaume camp#bat) Guillaume camp#bat2 973 +bat_b01,304,218,1 duplicate(Guillaume camp#bat) Guillaume camp#bat3 973 +bat_b01,319,218,1 duplicate(Guillaume camp#bat) Guillaume camp#bat4 973 +bat_b01,304,231,1 duplicate(Guillaume camp#bat) Guillaume camp#bat5 973 +bat_b01,304,231,1 duplicate(Guillaume camp#bat) Guillaume camp#bat6 973 +bat_b01,335,142,1 duplicate(Guillaume camp#bat) Guillaume camp#bat7 973 +bat_b01,335,157,1 duplicate(Guillaume camp#bat) Guillaume camp#bat8 973 +bat_b01,390,16,1 duplicate(Guillaume camp#bat) Guillaume camp#bat9 973 +bat_b01,292,163,1 duplicate(Guillaume camp#bat) Guillaume camp#bat19 973 +bat_b01,292,136,1 duplicate(Guillaume camp#bat) Guillaume camp#bat20 973 +bat_b01,241,185,1 duplicate(Guillaume camp#bat) Guillaume camp#bat21 973 +bat_b01,247,179,1 duplicate(Guillaume camp#bat) Guillaume camp#bat22 973 + +bat_b01,96,81,1 duplicate(Croix camp#bat) Croix camp#bat1 974 +bat_b01,96,68,1 duplicate(Croix camp#bat) Croix camp#bat2 974 +bat_b01,79,81,1 duplicate(Croix camp#bat) Croix camp#bat3 974 +bat_b01,79,68,1 duplicate(Croix camp#bat) Croix camp#bat4 974 +bat_b01,96,81,1 duplicate(Croix camp#bat) Croix camp#bat5 974 +bat_b01,96,81,1 duplicate(Croix camp#bat) Croix camp#bat6 974 +bat_b01,59,164,1 duplicate(Croix camp#bat) Croix camp#bat7 974 +bat_b01,59,137,1 duplicate(Croix camp#bat) Croix camp#bat8 974 +bat_b01,10,296,1 duplicate(Croix camp#bat) Croix camp#bat9 974 +bat_b01,110,162,1 duplicate(Croix camp#bat) Croix camp#bat18 974 +bat_b01,110,137,1 duplicate(Croix camp#bat) Croix camp#bat19 974 +bat_b01,152,120,1 duplicate(Croix camp#bat) Croix camp#bat20 974 +bat_b01,158,114,1 duplicate(Croix camp#bat) Croix camp#bat21 974 + +// MapFlags +// ********************************************************************* + +bat_b01 mapflag battleground 2 +bat_b01 mapflag nomemo +bat_b01 mapflag nosave SavePoint +bat_b01 mapflag noteleport +bat_b01 mapflag nowarp +bat_b01 mapflag nowarpto +bat_b01 mapflag noreturn +bat_b01 mapflag nobranch +bat_b01 mapflag nopenalty diff --git a/npc/battleground/bg_flavius_02.txt b/npc/battleground/bg_flavius_02.txt index 57cb79246..9f8b46c00 100644 --- a/npc/battleground/bg_flavius_02.txt +++ b/npc/battleground/bg_flavius_02.txt @@ -1,453 +1,453 @@ -// ==============================================================================
-// BattleGround System - Flavius 2
-// ==============================================================================
-
-// Registration NPC's
-// *********************************************************************
-
-bat_room,57,97,4 script Registration::Fl2R_Guillaume 418,{
- end;
-OnInit:
- waitingroom "Battle Station 10 Players",10,"Flavius_BG2::OnGuillaumeJoin",1;
- end;
-OnEnterBG:
- set $@FlaviusBG2_id1, waitingroom2bg("bat_b02",390,10,"Flavius_BG2::OnGuillaumeQuit","");
- end;
-}
-
-bat_room,57,74,0 script Registration::Fl2R_Croix 414,{
- end;
-OnInit:
- waitingroom "Battle Station 10 Players",10,"Flavius_BG2::OnCroixJoin",1;
- end;
-OnEnterBG:
- set $@FlaviusBG2_id2, waitingroom2bg("bat_b02",10,290,"Flavius_BG2::OnCroixQuit","");
- end;
-}
-
-// Battleground Engine
-// *********************************************************************
-
-- script Flavius_BG2 -1,{
- end;
-
-OnInit:
- disablenpc "Guillaume Vintenar#fl2";
- disablenpc "Croix Vintenar#fl2";
- disablenpc "Therapist in battle#fl21";
- disablenpc "Therapist in battle#fl22";
- end;
-
-OnGuillaumeQuit:
-OnCroixQuit:
- set BG_Delay_Tick, gettimetick(2) + 1200;
- end;
-
-OnGuillaumeJoin:
-OnCroixJoin:
- if( $@FlaviusBG2 == 0 )
- donpcevent "Flavius_BG2::OnReadyCheck";
- end;
-
-OnReadyCheck:
- if( $@FlaviusBG2 )
- end;
- set .@Guillaume, getwaitingroomstate(0,"Fl2R_Guillaume");
- set .@Croix, getwaitingroomstate(0,"Fl2R_Croix");
-
- if( .@Guillaume < 10 || .@Croix < 10 )
- {
- mapannounce "bat_room","Battleground -- Flavius [80-99] G: " + .@Guillaume + "/10, C: " + .@Croix + "/10",1,0x808000;
- end;
- }
-
- // BG Variables
- set $@FlaviusBG2, 1;
- set $@FlaviusBG2_Victory, 0;
- set .Guillaume_Score, 0;
- set .Guillaume_Loss, 0;
- set .Croix_Score, 0;
- set .Croix_Loss, 0;
- set .Match, 0;
- // Prepare NPC
- donpcevent "#gfl2_respawn::OnBGStart";
- donpcevent "#cfl2_respawn::OnBGStart";
- enablenpc "Therapist in battle#fl21";
- enablenpc "Therapist in battle#fl22";
- disablenpc "Guillaume Vintenar#fl2";
- disablenpc "Croix Vintenar#fl2";
- // Build and Warp Teams
- donpcevent "Fl2R_Guillaume::OnEnterBG";
- donpcevent "Fl2R_Croix::OnEnterBG";
- announce "Battleground -- Flavius [80-99] has started!",0,0x808000;
- initnpctimer;
- // Start Match!!
-
-OnRoundStart:
- sleep 2000;
- if( $@FlaviusBG2 != 1 ) end;
-
- areapercentheal "bat_b02",382,2,397,17,100,100;
- areapercentheal "bat_b02",2,282,17,297,100,100;
- bg_warp $@FlaviusBG2_id1,"bat_b02",311,224;
- bg_warp $@FlaviusBG2_id2,"bat_b02",87,75;
-
- sleep 2000;
- if( $@FlaviusBG2 != 1 ) end;
-
- set .Match, .Match + 1;
- // Crystal Spawn
- set .Guillaume_Crystal, bg_monster($@FlaviusBG2_id1,"bat_b02",328,150,"Crystal Guillaume",1914,"Flavius_BG2::OnGuillaumeBreak");
- setwall "bat_b02",327,149,2,6,0,"gui_wall2-1";
- setwall "bat_b02",329,149,2,0,0,"gui_wall2-2";
- setwall "bat_b02",329,151,2,2,0,"gui_wall2-3";
- setwall "bat_b02",327,151,2,4,0,"gui_wall2-4";
-
- set .Croix_Crystal, bg_monster($@FlaviusBG2_id2,"bat_b02",62,150,"Crystal Croix",1915,"Flavius_BG2::OnCroixBreak");
- setwall "bat_b02",61,149,2,6,0,"cro_wall2-1";
- setwall "bat_b02",63,149,2,0,0,"cro_wall2-2";
- setwall "bat_b02",63,151,2,2,0,"cro_wall2-3";
- setwall "bat_b02",61,151,2,4,0,"cro_wall2-4";
-
- // Guardian Spawns
- bg_monster $@FlaviusBG2_id1,"bat_b02",328,160,"Guillaume Guardian",1949,"Flavius_BG2::OnGuiGuardian";
- bg_monster $@FlaviusBG2_id1,"bat_b02",328,140,"Guillaume Guardian",1950,"Flavius_BG2::OnGuiGuardian";
- set .Guillaume_Guardian, 2;
- bg_monster $@FlaviusBG2_id2,"bat_b02",62,160,"Croix Guardian",1949,"Flavius_BG2::OnCroGuardian";
- bg_monster $@FlaviusBG2_id2,"bat_b02",61,140,"Croix Guardian",1950,"Flavius_BG2::OnCroGuardian";
- set .Croix_Guardian, 2;
- // Announces
- mapannounce "bat_b02","The Battle of Flavius [ " + .Match + " ] Round has begun!!",1,0x808000;
- end;
-
-OnRoundStop:
- // Remove Monsters
- killmonster "bat_b02","Flavius_BG2::OnGuiGuardian";
- killmonster "bat_b02","Flavius_BG2::OnCroGuardian";
- delwall "gui_wall2-1";
- delwall "gui_wall2-2";
- delwall "gui_wall2-3";
- delwall "gui_wall2-4";
- killmonster "bat_b02","Flavius_BG2::OnGuillaumeBreak";
- delwall "cro_wall2-1";
- delwall "cro_wall2-2";
- delwall "cro_wall2-3";
- delwall "cro_wall2-4";
- killmonster "bat_b02","Flavius_BG2::OnCroixBreak";
- end;
-
-OnGuiGuardian:
- if( set(.Guillaume_Guardian, .Guillaume_Guardian - 1) <= 0 )
- {
- delwall "gui_wall2-1";
- delwall "gui_wall2-2";
- delwall "gui_wall2-3";
- delwall "gui_wall2-4";
- mapannounce "bat_b02","The Guillaume Crystal is vulnerable to attack!",1,0x0000FF;
- }
- end;
-
-OnCroGuardian:
- if( set(.Croix_Guardian, .Croix_Guardian - 1) <= 0 )
- {
- delwall "cro_wall2-1";
- delwall "cro_wall2-2";
- delwall "cro_wall2-3";
- delwall "cro_wall2-4";
- mapannounce "bat_b02","The Croix Crystal is vulnerable to attack!",1,0xFF0000;
- }
- end;
-
-OnGuillaumeBreak:
- donpcevent "Flavius_BG2::OnRoundStop";
- set .Guillaume_Loss, .Guillaume_Loss + 1;
- if( set(.Croix_Score, .Croix_Score + 1) < 2 )
- {
- bg_updatescore "bat_b02",.Guillaume_Score,.Croix_Score;
- mapannounce "bat_b02","The Guillaume Crystal has been destroyed!",1,0x0000FF;
- donpcevent "Flavius_BG2::OnRoundStart";
- }
- else
- {
- bg_updatescore "bat_b02",.Guillaume_Score,.Croix_Score;
- mapannounce "bat_b02","The Croix army has won the Battle of Flavius!",1,0xFF0000;
- set $@FlaviusBG2_Victory, 2;
- donpcevent "Flavius_BG2::OnMatchEnd";
- }
- end;
-
-OnCroixBreak:
- donpcevent "Flavius_BG2::OnRoundStop";
- set .Croix_Loss, .Croix_Loss + 1;
- if( set(.Guillaume_Score, .Guillaume_Score + 1) < 2 )
- {
- bg_updatescore "bat_b02",.Guillaume_Score,.Croix_Score;
- mapannounce "bat_b02","The Croix Crystal has been destroyed!",1,0xFF0000;
- donpcevent "Flavius_BG2::OnRoundStart";
- }
- else
- {
- bg_updatescore "bat_b02",.Guillaume_Score,.Croix_Score;
- mapannounce "bat_b02","The Guillaume army has won the Battle of Flavius!",1,0x0000FF;
- set $@FlaviusBG2_Victory, 1;
- donpcevent "Flavius_BG2::OnMatchEnd";
- }
- end;
-
-OnTimer2400000:
- mapannounce "bat_b02","Battle of Flavius will ends in 5 minutes",1,0x808000;
- end;
-OnTimer2640000:
- mapannounce "bat_b02","Battle of Flavius will ends in 1 minute",1,0x808000;
- end;
-
-OnTimer2700000:
- if( .Croix_Score > .Guillaume_Score )
- {
- mapannounce "bat_b02","The Croix army has won the Battle of Flavius!",1,0xFF0000;
- set $@FlaviusBG2_Victory, 2;
- }
- else if( .Croix_Score < .Guillaume_Score )
- {
- mapannounce "bat_b02","The Guillaume army has won the Battle of Flavius!",1,0x0000FF;
- set $@FlaviusBG2_Victory, 1;
- }
- else
- {
- mapannounce "bat_b02","The Battle of Flavius is over. The time is out, this is a Tie",1,0x808000;
- set $@FlaviusBG2_Victory, 3;
- }
-
-OnMatchEnd:
- set $@FlaviusBG2, 2;
- stopnpctimer;
- donpcevent "#gfl2_respawn::OnBGStop";
- donpcevent "#cfl2_respawn::OnBGStop";
- disablenpc "Therapist in battle#fl21";
- disablenpc "Therapist in battle#fl22";
- enablenpc "Guillaume Vintenar#fl2";
- enablenpc "Croix Vintenar#fl2";
- sleep 2000;
- bg_warp $@FlaviusBG2_id1,"bat_b02",390,10;
- bg_warp $@FlaviusBG2_id2,"bat_b02",10,290;
- sleep 3000;
- mapannounce "bat_b02","Battle of Flavius will close in 1 minute!",1,0x808000;
- initnpctimer;
- end;
-
-OnTimer30000:
- if( $@FlaviusBG2 == 2 )
- mapannounce "bat_b02","Battle of Flavius will close in 30 seconds!",1,0x808000;
- end;
-OnTimer50000:
- if( $@FlaviusBG2 == 2 )
- mapannounce "bat_b02","Battle of Flavius will close in 10 seconds!",1,0x808000;
- end;
-
-OnTimer60000:
- if( $@FlaviusBG2 != 2 )
- end;
-OnReset:
- stopnpctimer;
- donpcevent "Flavius_BG2::OnRoundStop";
- set .Guillaume_Score, 0;
- set .Guillaume_Crystal, 0;
- set .Guillaume_Loss, 0;
- set .Croix_Score, 0;
- set .Croix_Crystal, 0;
- set .Croix_Loss, 0;
- set .Match, 0;
- set $@FlaviusBG2_Victory, 0;
- // NPC's
- disablenpc "Guillaume Vintenar#fl2";
- disablenpc "Croix Vintenar#fl2";
- disablenpc "Therapist in battle#fl21";
- disablenpc "Therapist in battle#fl22";
-
- if( $@FlaviusBG2_id1 ) { bg_destroy $@FlaviusBG2_id1; set $@FlaviusBG2_id1, 0; }
- if( $@FlaviusBG2_id2 ) { bg_destroy $@FlaviusBG2_id2; set $@FlaviusBG2_id2, 0; }
- sleep 1000;
- mapwarp "bat_b02","bat_room",155,150;
- sleep 2000;
- maprespawnguildid "bat_b02",0,3; // Just in case someone else
- sleep 2000;
- bg_updatescore "bat_b02",0,0;
- set $@FlaviusBG2, 0;
- donpcevent "Flavius_BG2::OnReadyCheck";
- end;
-}
-
-// Battleground rewards
-// *********************************************************************
-
-bat_b02,390,13,5 script Guillaume Vintenar#fl2 419,{
- if( $@FlaviusBG2_Victory )
- {
- if( $@FlaviusBG2_Victory == Bat_Team )
- { // Victory
- mes "[Swandery]";
- mes "Blessed Guillaume!!";
- mes "Let's enjoy our glorious victory!";
- mes "" + strcharinfo(0) + ", its a sign reflecting victory";
- close2;
- set .@Reward, 9;
- }
- else
- { //
- mes "[Swandery]";
- mes "You lost, but you're dedicated to this battle.";
- mes "This is a reward for your great dedication by Guillaume Marollo!";
- mes "Just take this defeat a lesson, and later you would definitely learn.";
- close2;
- set .@Reward, 3;
- }
-
- set Flavius_BG_Tick, gettimetick(2) + 300;
- getitem 7829, .@Reward;
- bg_leave;
- warp "bat_room",155,150;
- end;
- }
- end;
-}
-
-bat_b02,10,293,5 script Croix Vintenar#fl2 415,{
- if( $@FlaviusBG2_Victory )
- {
- if( $@FlaviusBG2_Victory == Bat_Team )
- { // Victory
- mes "[Swandery]";
- mes "Blessed Croax!!";
- mes "Let's enjoy our glorious victory!";
- mes "" + strcharinfo(0) + ", its a sign reflecting victory";
- close2;
- set .@Reward, 9;
- }
- else
- { //
- mes "[Swandery]";
- mes "Oh, " + strcharinfo(0) + ". Don't be sad.";
- mes "Even though we didn't win, we did our best.";
- mes "This is a Royal gift from Croix, and please don't forget this battle. We can win the next.";
- close2;
- set .@Reward, 3;
- }
-
- set Flavius_BG_Tick, gettimetick(2) + 300;
- getitem 7829, .@Reward;
- bg_leave;
- warp "bat_room",155,150;
- end;
- }
- end;
-}
-
-// Battleground Therapist
-// *********************************************************************
-
-bat_b02,390,13,5 script Therapist in battle#fl22 95,{
- mes "[Therapist in battle]";
- mes "Just close your eyes, and take a deep breathe.";
- mes "You can be free from pain.";
- specialeffect2 312;
- close;
-}
-
-bat_b02,10,293,5 script Therapist in battle#fl21 95,{
- mes "[Therapist in battle]";
- mes "Just close your eyes, and take a deep breathe.";
- mes "You can be free from pain.";
- specialeffect2 312;
- close;
-}
-
-// Battleground Respawn
-// *********************************************************************
-
-bat_b02,390,10,0 script #gfl2_respawn 139,{
- end;
-
-OnBGStart:
- initnpctimer;
- end;
-
-OnBGStop:
- stopnpctimer;
- end;
-
-OnTimer24000:
- misceffect 83;
- end;
-
-OnTimer25000:
- areapercentheal "bat_b02",382,2,397,17,100,100;
- areawarp "bat_b02",382,2,397,17,"bat_b02",311,224;
- initnpctimer;
- end;
-}
-
-bat_b02,10,290,0 script #cfl2_respawn 139,{
- end;
-
-OnBGStart:
- initnpctimer;
- end;
-
-OnBGStop:
- stopnpctimer;
- end;
-
-OnTimer24000:
- misceffect 83;
- end;
-
-OnTimer25000:
- areapercentheal "bat_b02",2,282,17,297,100,100;
- areawarp "bat_b02",2,282,17,297,"bat_b02",87,75;
- initnpctimer;
- end;
-}
-
-// Flags
-// *********************************************************************
-
-bat_b02,304,231,1 duplicate(Guillaume camp#bat) Guillaume camp#bat32 973
-bat_b02,319,231,1 duplicate(Guillaume camp#bat) Guillaume camp#bat33 973
-bat_b02,304,218,1 duplicate(Guillaume camp#bat) Guillaume camp#bat34 973
-bat_b02,319,218,1 duplicate(Guillaume camp#bat) Guillaume camp#bat35 973
-bat_b02,304,231,1 duplicate(Guillaume camp#bat) Guillaume camp#bat36 973
-bat_b02,304,231,1 duplicate(Guillaume camp#bat) Guillaume camp#bat37 973
-bat_b02,335,142,1 duplicate(Guillaume camp#bat) Guillaume camp#bat38 973
-bat_b02,335,157,1 duplicate(Guillaume camp#bat) Guillaume camp#bat39 973
-bat_b02,390,16,1 duplicate(Guillaume camp#bat) Guillaume camp#bat40 973
-bat_b02,292,163,1 duplicate(Guillaume camp#bat) Guillaume camp#bat41 973
-bat_b02,292,136,1 duplicate(Guillaume camp#bat) Guillaume camp#bat42 973
-bat_b02,241,185,1 duplicate(Guillaume camp#bat) Guillaume camp#bat43 973
-bat_b02,247,179,1 duplicate(Guillaume camp#bat) Guillaume camp#bat44 973
-
-bat_b02,96,81,1 duplicate(Croix camp#bat) Croix camp#bat30 974
-bat_b02,96,68,1 duplicate(Croix camp#bat) Croix camp#bat31 974
-bat_b02,79,81,1 duplicate(Croix camp#bat) Croix camp#bat32 974
-bat_b02,79,68,1 duplicate(Croix camp#bat) Croix camp#bat33 974
-bat_b02,96,81,1 duplicate(Croix camp#bat) Croix camp#bat34 974
-bat_b02,96,81,1 duplicate(Croix camp#bat) Croix camp#bat35 974
-bat_b02,59,164,1 duplicate(Croix camp#bat) Croix camp#bat36 974
-bat_b02,59,137,1 duplicate(Croix camp#bat) Croix camp#bat37 974
-bat_b02,10,296,1 duplicate(Croix camp#bat) Croix camp#bat38 974
-bat_b02,110,162,1 duplicate(Croix camp#bat) Croix camp#bat39 974
-bat_b02,110,137,1 duplicate(Croix camp#bat) Croix camp#bat40 974
-bat_b02,152,120,1 duplicate(Croix camp#bat) Croix camp#bat41 974
-bat_b02,158,114,1 duplicate(Croix camp#bat) Croix camp#bat42 974
-
-// MapFlags
-// *********************************************************************
-
-bat_b02 mapflag battleground
-bat_b02 mapflag nomemo
-bat_b02 mapflag nosave SavePoint
-bat_b02 mapflag noteleport
-bat_b02 mapflag nowarp
-bat_b02 mapflag nowarpto
-bat_b02 mapflag noreturn
-bat_b02 mapflag nobranch
-bat_b02 mapflag nopenalty
+// ============================================================================== +// BattleGround System - Flavius 2 +// ============================================================================== + +// Registration NPC's +// ********************************************************************* + +bat_room,57,97,4 script Registration::Fl2R_Guillaume 418,{ + end; +OnInit: + waitingroom "Battle Station 10 Players",10,"Flavius_BG2::OnGuillaumeJoin",1; + end; +OnEnterBG: + set $@FlaviusBG2_id1, waitingroom2bg("bat_b02",390,10,"Flavius_BG2::OnGuillaumeQuit",""); + end; +} + +bat_room,57,74,0 script Registration::Fl2R_Croix 414,{ + end; +OnInit: + waitingroom "Battle Station 10 Players",10,"Flavius_BG2::OnCroixJoin",1; + end; +OnEnterBG: + set $@FlaviusBG2_id2, waitingroom2bg("bat_b02",10,290,"Flavius_BG2::OnCroixQuit",""); + end; +} + +// Battleground Engine +// ********************************************************************* + +- script Flavius_BG2 -1,{ + end; + +OnInit: + disablenpc "Guillaume Vintenar#fl2"; + disablenpc "Croix Vintenar#fl2"; + disablenpc "Therapist in battle#fl21"; + disablenpc "Therapist in battle#fl22"; + end; + +OnGuillaumeQuit: +OnCroixQuit: + set BG_Delay_Tick, gettimetick(2) + 1200; + end; + +OnGuillaumeJoin: +OnCroixJoin: + if( $@FlaviusBG2 == 0 ) + donpcevent "Flavius_BG2::OnReadyCheck"; + end; + +OnReadyCheck: + if( $@FlaviusBG2 ) + end; + set .@Guillaume, getwaitingroomstate(0,"Fl2R_Guillaume"); + set .@Croix, getwaitingroomstate(0,"Fl2R_Croix"); + + if( .@Guillaume < 10 || .@Croix < 10 ) + { + mapannounce "bat_room","Battleground -- Flavius [80-99] G: " + .@Guillaume + "/10, C: " + .@Croix + "/10",1,0x808000; + end; + } + + // BG Variables + set $@FlaviusBG2, 1; + set $@FlaviusBG2_Victory, 0; + set .Guillaume_Score, 0; + set .Guillaume_Loss, 0; + set .Croix_Score, 0; + set .Croix_Loss, 0; + set .Match, 0; + // Prepare NPC + donpcevent "#gfl2_respawn::OnBGStart"; + donpcevent "#cfl2_respawn::OnBGStart"; + enablenpc "Therapist in battle#fl21"; + enablenpc "Therapist in battle#fl22"; + disablenpc "Guillaume Vintenar#fl2"; + disablenpc "Croix Vintenar#fl2"; + // Build and Warp Teams + donpcevent "Fl2R_Guillaume::OnEnterBG"; + donpcevent "Fl2R_Croix::OnEnterBG"; + announce "Battleground -- Flavius [80-99] has started!",0,0x808000; + initnpctimer; + // Start Match!! + +OnRoundStart: + sleep 2000; + if( $@FlaviusBG2 != 1 ) end; + + areapercentheal "bat_b02",382,2,397,17,100,100; + areapercentheal "bat_b02",2,282,17,297,100,100; + bg_warp $@FlaviusBG2_id1,"bat_b02",311,224; + bg_warp $@FlaviusBG2_id2,"bat_b02",87,75; + + sleep 2000; + if( $@FlaviusBG2 != 1 ) end; + + set .Match, .Match + 1; + // Crystal Spawn + set .Guillaume_Crystal, bg_monster($@FlaviusBG2_id1,"bat_b02",328,150,"Crystal Guillaume",1914,"Flavius_BG2::OnGuillaumeBreak"); + setwall "bat_b02",327,149,2,6,0,"gui_wall2-1"; + setwall "bat_b02",329,149,2,0,0,"gui_wall2-2"; + setwall "bat_b02",329,151,2,2,0,"gui_wall2-3"; + setwall "bat_b02",327,151,2,4,0,"gui_wall2-4"; + + set .Croix_Crystal, bg_monster($@FlaviusBG2_id2,"bat_b02",62,150,"Crystal Croix",1915,"Flavius_BG2::OnCroixBreak"); + setwall "bat_b02",61,149,2,6,0,"cro_wall2-1"; + setwall "bat_b02",63,149,2,0,0,"cro_wall2-2"; + setwall "bat_b02",63,151,2,2,0,"cro_wall2-3"; + setwall "bat_b02",61,151,2,4,0,"cro_wall2-4"; + + // Guardian Spawns + bg_monster $@FlaviusBG2_id1,"bat_b02",328,160,"Guillaume Guardian",1949,"Flavius_BG2::OnGuiGuardian"; + bg_monster $@FlaviusBG2_id1,"bat_b02",328,140,"Guillaume Guardian",1950,"Flavius_BG2::OnGuiGuardian"; + set .Guillaume_Guardian, 2; + bg_monster $@FlaviusBG2_id2,"bat_b02",62,160,"Croix Guardian",1949,"Flavius_BG2::OnCroGuardian"; + bg_monster $@FlaviusBG2_id2,"bat_b02",61,140,"Croix Guardian",1950,"Flavius_BG2::OnCroGuardian"; + set .Croix_Guardian, 2; + // Announces + mapannounce "bat_b02","The Battle of Flavius [ " + .Match + " ] Round has begun!!",1,0x808000; + end; + +OnRoundStop: + // Remove Monsters + killmonster "bat_b02","Flavius_BG2::OnGuiGuardian"; + killmonster "bat_b02","Flavius_BG2::OnCroGuardian"; + delwall "gui_wall2-1"; + delwall "gui_wall2-2"; + delwall "gui_wall2-3"; + delwall "gui_wall2-4"; + killmonster "bat_b02","Flavius_BG2::OnGuillaumeBreak"; + delwall "cro_wall2-1"; + delwall "cro_wall2-2"; + delwall "cro_wall2-3"; + delwall "cro_wall2-4"; + killmonster "bat_b02","Flavius_BG2::OnCroixBreak"; + end; + +OnGuiGuardian: + if( set(.Guillaume_Guardian, .Guillaume_Guardian - 1) <= 0 ) + { + delwall "gui_wall2-1"; + delwall "gui_wall2-2"; + delwall "gui_wall2-3"; + delwall "gui_wall2-4"; + mapannounce "bat_b02","The Guillaume Crystal is vulnerable to attack!",1,0x0000FF; + } + end; + +OnCroGuardian: + if( set(.Croix_Guardian, .Croix_Guardian - 1) <= 0 ) + { + delwall "cro_wall2-1"; + delwall "cro_wall2-2"; + delwall "cro_wall2-3"; + delwall "cro_wall2-4"; + mapannounce "bat_b02","The Croix Crystal is vulnerable to attack!",1,0xFF0000; + } + end; + +OnGuillaumeBreak: + donpcevent "Flavius_BG2::OnRoundStop"; + set .Guillaume_Loss, .Guillaume_Loss + 1; + if( set(.Croix_Score, .Croix_Score + 1) < 2 ) + { + bg_updatescore "bat_b02",.Guillaume_Score,.Croix_Score; + mapannounce "bat_b02","The Guillaume Crystal has been destroyed!",1,0x0000FF; + donpcevent "Flavius_BG2::OnRoundStart"; + } + else + { + bg_updatescore "bat_b02",.Guillaume_Score,.Croix_Score; + mapannounce "bat_b02","The Croix army has won the Battle of Flavius!",1,0xFF0000; + set $@FlaviusBG2_Victory, 2; + donpcevent "Flavius_BG2::OnMatchEnd"; + } + end; + +OnCroixBreak: + donpcevent "Flavius_BG2::OnRoundStop"; + set .Croix_Loss, .Croix_Loss + 1; + if( set(.Guillaume_Score, .Guillaume_Score + 1) < 2 ) + { + bg_updatescore "bat_b02",.Guillaume_Score,.Croix_Score; + mapannounce "bat_b02","The Croix Crystal has been destroyed!",1,0xFF0000; + donpcevent "Flavius_BG2::OnRoundStart"; + } + else + { + bg_updatescore "bat_b02",.Guillaume_Score,.Croix_Score; + mapannounce "bat_b02","The Guillaume army has won the Battle of Flavius!",1,0x0000FF; + set $@FlaviusBG2_Victory, 1; + donpcevent "Flavius_BG2::OnMatchEnd"; + } + end; + +OnTimer2400000: + mapannounce "bat_b02","Battle of Flavius will ends in 5 minutes",1,0x808000; + end; +OnTimer2640000: + mapannounce "bat_b02","Battle of Flavius will ends in 1 minute",1,0x808000; + end; + +OnTimer2700000: + if( .Croix_Score > .Guillaume_Score ) + { + mapannounce "bat_b02","The Croix army has won the Battle of Flavius!",1,0xFF0000; + set $@FlaviusBG2_Victory, 2; + } + else if( .Croix_Score < .Guillaume_Score ) + { + mapannounce "bat_b02","The Guillaume army has won the Battle of Flavius!",1,0x0000FF; + set $@FlaviusBG2_Victory, 1; + } + else + { + mapannounce "bat_b02","The Battle of Flavius is over. The time is out, this is a Tie",1,0x808000; + set $@FlaviusBG2_Victory, 3; + } + +OnMatchEnd: + set $@FlaviusBG2, 2; + stopnpctimer; + donpcevent "#gfl2_respawn::OnBGStop"; + donpcevent "#cfl2_respawn::OnBGStop"; + disablenpc "Therapist in battle#fl21"; + disablenpc "Therapist in battle#fl22"; + enablenpc "Guillaume Vintenar#fl2"; + enablenpc "Croix Vintenar#fl2"; + sleep 2000; + bg_warp $@FlaviusBG2_id1,"bat_b02",390,10; + bg_warp $@FlaviusBG2_id2,"bat_b02",10,290; + sleep 3000; + mapannounce "bat_b02","Battle of Flavius will close in 1 minute!",1,0x808000; + initnpctimer; + end; + +OnTimer30000: + if( $@FlaviusBG2 == 2 ) + mapannounce "bat_b02","Battle of Flavius will close in 30 seconds!",1,0x808000; + end; +OnTimer50000: + if( $@FlaviusBG2 == 2 ) + mapannounce "bat_b02","Battle of Flavius will close in 10 seconds!",1,0x808000; + end; + +OnTimer60000: + if( $@FlaviusBG2 != 2 ) + end; +OnReset: + stopnpctimer; + donpcevent "Flavius_BG2::OnRoundStop"; + set .Guillaume_Score, 0; + set .Guillaume_Crystal, 0; + set .Guillaume_Loss, 0; + set .Croix_Score, 0; + set .Croix_Crystal, 0; + set .Croix_Loss, 0; + set .Match, 0; + set $@FlaviusBG2_Victory, 0; + // NPC's + disablenpc "Guillaume Vintenar#fl2"; + disablenpc "Croix Vintenar#fl2"; + disablenpc "Therapist in battle#fl21"; + disablenpc "Therapist in battle#fl22"; + + if( $@FlaviusBG2_id1 ) { bg_destroy $@FlaviusBG2_id1; set $@FlaviusBG2_id1, 0; } + if( $@FlaviusBG2_id2 ) { bg_destroy $@FlaviusBG2_id2; set $@FlaviusBG2_id2, 0; } + sleep 1000; + mapwarp "bat_b02","bat_room",155,150; + sleep 2000; + maprespawnguildid "bat_b02",0,3; // Just in case someone else + sleep 2000; + bg_updatescore "bat_b02",0,0; + set $@FlaviusBG2, 0; + donpcevent "Flavius_BG2::OnReadyCheck"; + end; +} + +// Battleground rewards +// ********************************************************************* + +bat_b02,390,13,5 script Guillaume Vintenar#fl2 419,{ + if( $@FlaviusBG2_Victory ) + { + if( $@FlaviusBG2_Victory == Bat_Team ) + { // Victory + mes "[Swandery]"; + mes "Blessed Guillaume!!"; + mes "Let's enjoy our glorious victory!"; + mes "" + strcharinfo(0) + ", its a sign reflecting victory"; + close2; + set .@Reward, 9; + } + else + { // + mes "[Swandery]"; + mes "You lost, but you're dedicated to this battle."; + mes "This is a reward for your great dedication by Guillaume Marollo!"; + mes "Just take this defeat a lesson, and later you would definitely learn."; + close2; + set .@Reward, 3; + } + + set Flavius_BG_Tick, gettimetick(2) + 300; + getitem 7829, .@Reward; + bg_leave; + warp "bat_room",155,150; + end; + } + end; +} + +bat_b02,10,293,5 script Croix Vintenar#fl2 415,{ + if( $@FlaviusBG2_Victory ) + { + if( $@FlaviusBG2_Victory == Bat_Team ) + { // Victory + mes "[Swandery]"; + mes "Blessed Croax!!"; + mes "Let's enjoy our glorious victory!"; + mes "" + strcharinfo(0) + ", its a sign reflecting victory"; + close2; + set .@Reward, 9; + } + else + { // + mes "[Swandery]"; + mes "Oh, " + strcharinfo(0) + ". Don't be sad."; + mes "Even though we didn't win, we did our best."; + mes "This is a Royal gift from Croix, and please don't forget this battle. We can win the next."; + close2; + set .@Reward, 3; + } + + set Flavius_BG_Tick, gettimetick(2) + 300; + getitem 7829, .@Reward; + bg_leave; + warp "bat_room",155,150; + end; + } + end; +} + +// Battleground Therapist +// ********************************************************************* + +bat_b02,390,13,5 script Therapist in battle#fl22 95,{ + mes "[Therapist in battle]"; + mes "Just close your eyes, and take a deep breathe."; + mes "You can be free from pain."; + specialeffect2 312; + close; +} + +bat_b02,10,293,5 script Therapist in battle#fl21 95,{ + mes "[Therapist in battle]"; + mes "Just close your eyes, and take a deep breathe."; + mes "You can be free from pain."; + specialeffect2 312; + close; +} + +// Battleground Respawn +// ********************************************************************* + +bat_b02,390,10,0 script #gfl2_respawn 139,{ + end; + +OnBGStart: + initnpctimer; + end; + +OnBGStop: + stopnpctimer; + end; + +OnTimer24000: + misceffect 83; + end; + +OnTimer25000: + areapercentheal "bat_b02",382,2,397,17,100,100; + areawarp "bat_b02",382,2,397,17,"bat_b02",311,224; + initnpctimer; + end; +} + +bat_b02,10,290,0 script #cfl2_respawn 139,{ + end; + +OnBGStart: + initnpctimer; + end; + +OnBGStop: + stopnpctimer; + end; + +OnTimer24000: + misceffect 83; + end; + +OnTimer25000: + areapercentheal "bat_b02",2,282,17,297,100,100; + areawarp "bat_b02",2,282,17,297,"bat_b02",87,75; + initnpctimer; + end; +} + +// Flags +// ********************************************************************* + +bat_b02,304,231,1 duplicate(Guillaume camp#bat) Guillaume camp#bat32 973 +bat_b02,319,231,1 duplicate(Guillaume camp#bat) Guillaume camp#bat33 973 +bat_b02,304,218,1 duplicate(Guillaume camp#bat) Guillaume camp#bat34 973 +bat_b02,319,218,1 duplicate(Guillaume camp#bat) Guillaume camp#bat35 973 +bat_b02,304,231,1 duplicate(Guillaume camp#bat) Guillaume camp#bat36 973 +bat_b02,304,231,1 duplicate(Guillaume camp#bat) Guillaume camp#bat37 973 +bat_b02,335,142,1 duplicate(Guillaume camp#bat) Guillaume camp#bat38 973 +bat_b02,335,157,1 duplicate(Guillaume camp#bat) Guillaume camp#bat39 973 +bat_b02,390,16,1 duplicate(Guillaume camp#bat) Guillaume camp#bat40 973 +bat_b02,292,163,1 duplicate(Guillaume camp#bat) Guillaume camp#bat41 973 +bat_b02,292,136,1 duplicate(Guillaume camp#bat) Guillaume camp#bat42 973 +bat_b02,241,185,1 duplicate(Guillaume camp#bat) Guillaume camp#bat43 973 +bat_b02,247,179,1 duplicate(Guillaume camp#bat) Guillaume camp#bat44 973 + +bat_b02,96,81,1 duplicate(Croix camp#bat) Croix camp#bat30 974 +bat_b02,96,68,1 duplicate(Croix camp#bat) Croix camp#bat31 974 +bat_b02,79,81,1 duplicate(Croix camp#bat) Croix camp#bat32 974 +bat_b02,79,68,1 duplicate(Croix camp#bat) Croix camp#bat33 974 +bat_b02,96,81,1 duplicate(Croix camp#bat) Croix camp#bat34 974 +bat_b02,96,81,1 duplicate(Croix camp#bat) Croix camp#bat35 974 +bat_b02,59,164,1 duplicate(Croix camp#bat) Croix camp#bat36 974 +bat_b02,59,137,1 duplicate(Croix camp#bat) Croix camp#bat37 974 +bat_b02,10,296,1 duplicate(Croix camp#bat) Croix camp#bat38 974 +bat_b02,110,162,1 duplicate(Croix camp#bat) Croix camp#bat39 974 +bat_b02,110,137,1 duplicate(Croix camp#bat) Croix camp#bat40 974 +bat_b02,152,120,1 duplicate(Croix camp#bat) Croix camp#bat41 974 +bat_b02,158,114,1 duplicate(Croix camp#bat) Croix camp#bat42 974 + +// MapFlags +// ********************************************************************* + +bat_b02 mapflag battleground +bat_b02 mapflag nomemo +bat_b02 mapflag nosave SavePoint +bat_b02 mapflag noteleport +bat_b02 mapflag nowarp +bat_b02 mapflag nowarpto +bat_b02 mapflag noreturn +bat_b02 mapflag nobranch +bat_b02 mapflag nopenalty diff --git a/npc/battleground/bg_tierra_01.txt b/npc/battleground/bg_tierra_01.txt index ed1e65120..9d04512e6 100644 --- a/npc/battleground/bg_tierra_01.txt +++ b/npc/battleground/bg_tierra_01.txt @@ -1,488 +1,488 @@ -// ==============================================================================
-// BattleGround System - Tierra Valley 1
-// ==============================================================================
-
-// Registration NPC's
-// *********************************************************************
-
-bat_room,85,227,4 script Registration::TV1R_Guillaume 418,{
- end;
-OnInit:
- waitingroom "Battle Station 10 Players",10,"Tierra_BG1::OnGuillaumeJoin",1;
- end;
-OnEnterBG:
- set $@TierraBG1_id1, waitingroom2bg("bat_a01",50,374,"Tierra_BG1::OnGuillaumeQuit","");
- end;
-}
-
-bat_room,85,204,0 script Registration::TV1R_Croix 414,{
- end;
-OnInit:
- waitingroom "Battle Station 10 Players",10,"Tierra_BG1::OnCroixJoin",1;
- end;
-OnEnterBG:
- set $@TierraBG1_id2, waitingroom2bg("bat_a01",42,16,"Tierra_BG1::OnCroixQuit","");
- end;
-}
-
-// Battleground Engine
-// *********************************************************************
-
-- script Tierra_BG1 -1,{
- end;
-
-OnInit:
- disablenpc "Croix Vintenar#tv1";
- disablenpc "Guillaume Vintenar#tv1";
- disablenpc "Therapist in battle#tv11";
- disablenpc "Therapist in battle#tv12";
- end;
-
-OnGuillaumeQuit:
-OnCroixQuit:
- set BG_Delay_Tick, gettimetick(2) + 1200;
- end;
-
-OnGuillaumeJoin:
-OnCroixJoin:
- if( $@TierraBG1 == 0 )
- donpcevent "Tierra_BG1::OnReadyCheck";
- end;
-
-OnReadyCheck:
- if( $@TierraBG1 )
- end;
- set .@Guillaume, getwaitingroomstate(0,"TV1R_Guillaume");
- set .@Croix, getwaitingroomstate(0,"TV1R_Croix");
-
- if( .@Guillaume < 10 || .@Croix < 10 )
- {
- mapannounce "bat_room","Battleground -- Tierra Valley [80-99] G: " + .@Guillaume + "/10, C: " + .@Croix + "/10",1,0xFFA500;
- end;
- }
-
- set $@TierraBG1, 1;
- donpcevent "TV1R_Croix::OnEnterBG";
- donpcevent "TV1R_Guillaume::OnEnterBG";
- donpcevent "Guillaume_TV1B::OnBuild";
- donpcevent "Croix_TV1B::OnBuild";
- bg_monster $@TierraBG1_id1,"bat_a01",176,345,"Food Depot",1909,"Tierra_BG1::OnGuillaumeBreak";
- bg_monster $@TierraBG1_id2,"bat_a01",167,50,"Food Storage",1910,"Tierra_BG1::OnCroixBreak";
- bg_monster 0,"bat_a01",273,204,"Neutrality Flag",1911,"Tierra_BG1::OnNeutralBreak";
-
- set .Neutral_Base, 0;
- set $@TierraBG1_Victory, 0;
-
- set .Guardian_1, 0;
- set .Guardian_2, 0;
- set .Guardian_3, 0;
-
- enablenpc "Therapist in battle#tv11";
- enablenpc "Therapist in battle#tv12";
- disablenpc "Croix Vintenar#tv1";
- disablenpc "Guillaume Vintenar#tv1";
- // Respawner
- donpcevent "#gtv1_respawn::OnBGStart";
- donpcevent "#ctv1_respawn::OnBGStart";
- donpcevent "#ntv1_respawn::OnBGStart";
- // Warp Teams
- announce "Battleground -- Tierra Valley [80-99] has started!",0,0xFFA500;
- bg_warp $@TierraBG1_id1,"bat_a01",353,344;
- bg_warp $@TierraBG1_id2,"bat_a01",353,52;
- // Final Messages
- sleep 6000;
- mapannounce "bat_a01","Guillaume Vintenar Axl Rose : Let's attack to burn down Croix's food storage",1,0x0000FF;
- sleep 2000;
- mapannounce "bat_a01","Croix Vintenar Swandery : Master of Valhalla! Let us be gifted with unfailing faith and courage",1,0xFF0000;
-
- initnpctimer;
- end;
-
-OnNeutralBreak:
- if( getcharid(4) == $@TierraBG1_id1 )
- {
- mapannounce "bat_a01","Guillaume obtained a neurality banner, so they have an advantage.",1,0x0000FF;
- bg_team_setxy $@TierraBG1_id2,42,16;
- areawarp "bat_a01",52,208,61,217,"bat_a01",42,16;
- }
- else if( getcharid(4) == $@TierraBG1_id2 )
- {
- mapannounce "bat_a01","Croix obtained a neutrality banner, so they have an advantage.",1,0xFF0000;
- bg_team_setxy $@TierraBG1_id1,50,374;
- areawarp "bat_a01",52,208,61,217,"bat_a01",50,374;
- }
- else end;
-
- set .Neutral_Base, getcharid(4);
- bg_team_setxy .Neutral_Base,56,212;
-
- if( .Guardian_1 == 0 )
- set .Guardian_1, bg_monster(.Neutral_Base,"bat_a01",280,233,"Guardian",1949,"Tierra_BG1::OnGuardian1");
- else
- bg_monster_set_team .Guardian_1, .Neutral_Base;
-
- if( .Guardian_2 == 0 )
- set .Guardian_2, bg_monster(.Neutral_Base,"bat_a01",287,203,"Guardian",1950,"Tierra_BG1::OnGuardian2");
- else
- bg_monster_set_team .Guardian_2, .Neutral_Base;
-
- if( .Guardian_3 == 0 )
- set .Guardian_3, bg_monster(.Neutral_Base,"bat_a01",268,204,"Guardian",1949,"Tierra_BG1::OnGuardian3");
- else
- bg_monster_set_team .Guardian_3, .Neutral_Base;
-
- sleep 10000;
- if( $@TierraBG1 != 1 ) end;
-
- if( .Neutral_Base == $@TierraBG1_id1 )
- bg_monster .Neutral_Base,"bat_a01",273,204,"Guillaume Flag",1912,"Tierra_BG1::OnNeutralBreak";
- else if( .Neutral_Base == $@TierraBG1_id2 )
- bg_monster .Neutral_Base,"bat_a01",273,204,"Croix Flag",1913,"Tierra_BG1::OnNeutralBreak";
- end;
-
-OnGuardian1: set .Guardian_1, 0; end;
-OnGuardian2: set .Guardian_2, 0; end;
-OnGuardian3: set .Guardian_3, 0; end;
-
-OnGuillaumeBreak:
- set $@TierraBG1_Victory, 2;
- mapannounce "bat_a01","Croix Vintenar Swandery: We destroyed Guillaume's food storehause. We won that! Wow!",1,0xFF0000;
- donpcevent "Tierra_BG1::OnStop";
- end;
-
-OnCroixBreak:
- set $@TierraBG1_Victory, 1;
- mapannounce "bat_a01","Guillaume Vintenar Axl Rose: We destroyed Croix's food storehause. We won that! Wow!",1,0x0000FF;
- donpcevent "Tierra_BG1::OnStop";
- end;
-
-OnTimer2400000:
- mapannounce "bat_a01","Battle of Tierra Gorge will ends in 5 minutes",1,0xFFA500;
- end;
-OnTimer2640000:
- mapannounce "bat_a01","Battle of Tierra Gorge will ends in 1 minute",1,0xFFA500;
- end;
-
-OnTimer2700000:
- set $@TierraBG1_Victory, 3; // Draw Game
- mapannounce "bat_a01","Battle of Tierra Gorge is over. The time is out, this is a Tie",1,0xFFA500;
- donpcevent "Tierra_BG1::OnStop";
- end;
-
-OnStop:
- set $@TierraBG1, 2;
- disablenpc "Therapist in battle#tv11";
- disablenpc "Therapist in battle#tv12";
- donpcevent "#gtv1_respawn::OnBGStop";
- donpcevent "#ctv1_respawn::OnBGStop";
- donpcevent "#ntv1_respawn::OnBGStop";
- enablenpc "Croix Vintenar#tv1";
- enablenpc "Guillaume Vintenar#tv1";
- killmonster "bat_a01","Tierra_BG1::OnGuillaumeBreak";
- killmonster "bat_a01","Tierra_BG1::OnCroixBreak";
- killmonster "bat_a01","Tierra_BG1::OnNeutralBreak";
- killmonster "bat_a01","Tierra_BG1::OnGuardian1";
- killmonster "bat_a01","Tierra_BG1::OnGuardian2";
- killmonster "bat_a01","Tierra_BG1::OnGuardian3";
- stopnpctimer;
- sleep 3000;
- bg_warp $@TierraBG1_id1,"bat_a01",50,374;
- bg_warp $@TierraBG1_id2,"bat_a01",42,16;
- sleep 3000;
- mapannounce "bat_a01","Battle of Tierra Gorge will close in 1 minute!",1,0xFFA500;
- initnpctimer;
- end;
-
-OnTimer30000:
- if( $@TierraBG1 == 2 )
- mapannounce "bat_a01","Battle of Tierra Valley will close in 30 seconds!",1,0xFFA500;
- end;
-OnTimer50000:
- if( $@TierraBG1 == 2 )
- mapannounce "bat_a01","Battle of Tierra Valley will close in 10 seconds!",1,0xFFA500;
- end;
-
-OnTimer60000:
- if( $@TierraBG1 != 2 )
- end;
-OnReset:
- stopnpctimer;
- set .Neutral_Base, 0;
- disablenpc "Croix Vintenar#tv1";
- disablenpc "Guillaume Vintenar#tv1";
- disablenpc "Therapist in battle#tv11";
- disablenpc "Therapist in battle#tv12";
- donpcevent "#gtv1_respawn::OnBGStop";
- donpcevent "#ctv1_respawn::OnBGStop";
- donpcevent "#ntv1_respawn::OnBGStop";
-
- killmonster "bat_a01","Tierra_BG1::OnGuillaumeBreak";
- killmonster "bat_a01","Tierra_BG1::OnCroixBreak";
- killmonster "bat_a01","Tierra_BG1::OnNeutralBreak";
- killmonster "bat_a01","Tierra_BG1::OnGuardian1";
- killmonster "bat_a01","Tierra_BG1::OnGuardian2";
- killmonster "bat_a01","Tierra_BG1::OnGuardian3";
- donpcevent "Guillaume_TV1B::OnDestroy";
- donpcevent "Croix_TV1B::OnDestroy";
-
- set $@TierraBG1_Victory, 0;
- if( $@TierraBG1_id1 ) { bg_destroy $@TierraBG1_id1; set $@TierraBG1_id1, 0; }
- if( $@TierraBG1_id2 ) { bg_destroy $@TierraBG1_id2; set $@TierraBG1_id2, 0; }
- sleep 1000;
- mapwarp "bat_a01","bat_room",155,150;
- sleep 2000;
- maprespawnguildid "bat_a01",0,3; // Just in case someone else
- sleep 2000;
- set $@TierraBG1, 0;
- donpcevent "Tierra_BG1::OnReadyCheck"; // Maybe a game is ready to start
- end;
-}
-
-// MapFlags
-// *********************************************************************
-
-bat_a01 mapflag battleground
-bat_a01 mapflag nomemo
-bat_a01 mapflag nosave SavePoint
-bat_a01 mapflag noteleport
-bat_a01 mapflag nowarp
-bat_a01 mapflag nowarpto
-bat_a01 mapflag noreturn
-bat_a01 mapflag nobranch
-bat_a01 mapflag nopenalty
-
-// Other Flags
-// *********************************************************************
-
-bat_a01,148,85,1 duplicate(Croix camp#bat) Croix camp#bat10 974
-bat_a01,155,85,1 duplicate(Croix camp#bat) Croix camp#bat11 974
-bat_a01,357,75,1 duplicate(Croix camp#bat) Croix camp#bat12 974
-bat_a01,348,74,1 duplicate(Croix camp#bat) Croix camp#bat13 974
-bat_a01,199,49,1 duplicate(Croix camp#bat) Croix camp#bat14 974
-bat_a01,168,16,1 duplicate(Croix camp#bat) Croix camp#bat15 974
-bat_a01,138,12,1 duplicate(Croix camp#bat) Croix camp#bat16 974
-bat_a01,108,35,1 duplicate(Croix camp#bat) Croix camp#bat17 974
-bat_a01,164,308,1 duplicate(Guillaume camp#bat) Guillaume camp#bat10 973
-bat_a01,157,308,1 duplicate(Guillaume camp#bat) Guillaume camp#bat11 973
-bat_a01,359,327,1 duplicate(Guillaume camp#bat) Guillaume camp#bat12 973
-bat_a01,350,326,1 duplicate(Guillaume camp#bat) Guillaume camp#bat13 973
-bat_a01,209,344,1 duplicate(Guillaume camp#bat) Guillaume camp#bat14 973
-bat_a01,173,380,1 duplicate(Guillaume camp#bat) Guillaume camp#bat15 973
-bat_a01,150,380,1 duplicate(Guillaume camp#bat) Guillaume camp#bat16 973
-bat_a01,118,357,1 duplicate(Guillaume camp#bat) Guillaume camp#bat17 973
-bat_a01,119,336,1 duplicate(Guillaume camp#bat) Guillaume camp#bat18 973
-
-// Barricades
-// *********************************************************************
-
-- script Guillaume_TV1B -1,{
- end;
-
-OnBuild:
- for( set .@i, 0; .@i < 16; set .@i, .@i + 1 )
- bg_monster 0,"bat_a01",170+.@i,130,"Barricade",1906,"Guillaume_TV1B::OnWall";
-
- setwall "bat_a01",170,130,16,6,1,"bat_a01_g1";
- set .MyMobCount,16;
- end;
-
-OnDestroy:
- killmonster "bat_a01","Guillaume_TV1B::OnWall";
- delwall "bat_a01_g1";
- set .MyMobCount,0;
- end;
-
-OnWall:
- if( set(.MyMobCount,.MyMobCount - 1) < 1 )
- {
- delwall "bat_a01_g1";
- mapannounce "bat_a01","South Gate : The Gate has been Destroy!!",1,0xFFA500;
- }
- end;
-}
-
-- script Croix_TV1B -1,{
- end;
-
-OnBuild:
- for( set .@i, 0; .@i < 16; set .@i, .@i + 1 )
- bg_monster 0,"bat_a01",186+.@i,266,"Barricade",1906,"Croix_TV1B::OnWall";
-
- setwall "bat_a01",186,266,16,6,1,"bat_a01_c1";
- set .MyMobCount,16;
- end;
-
-OnDestroy:
- killmonster "bat_a01","Croix_TV1B::OnWall";
- delwall "bat_a01_c1";
- set .MyMobCount,0;
- end;
-
-OnWall:
- if( set(.MyMobCount,.MyMobCount - 1) < 1 )
- {
- delwall "bat_a01_c1";
- mapannounce "bat_a01","North Gate : A Gate has been Destroy!!",1,0xFFA500;
- }
- end;
-}
-
-// Battleground rewards
-// *********************************************************************
-
-bat_a01,45,19,3 script Croix Vintenar#tv1 415,{
- if( $@TierraBG1_Victory )
- {
- if( $@TierraBG1_Victory == Bat_Team )
- { // Victory
- set .@Reward, 3;
- mes "[Swandery]";
- mes "Blessed Croax!!";
- mes "Let's enjoy our glorious victory!";
- mes "" + strcharinfo(0) + ", its a sign reflecting victory";
- close2;
- }
- else
- { //
- set .@Reward, 1;
- mes "[Swandery]";
- mes "Oh, " + strcharinfo(0) + ". Don't be sad.";
- mes "Even though we didn't win, we did our best.";
- mes "This is a Royal gift from Croix, and please don't forget this battle. We can win the next.";
- close2;
- }
-
- set Tierra_BG_Tick, gettimetick(2) + 300;
- getitem 7828, .@Reward;
- bg_leave;
- warp "bat_room",155,150;
- end;
- }
- end;
-}
-
-bat_a01,53,377,3 script Guillaume Vintenar#tv1 419,{
- if( $@TierraBG1_Victory )
- {
- if( $@TierraBG1_Victory == Bat_Team )
- { // Victory
- set .@Reward, 3;
- mes "[Swandery]";
- mes "Blessed Guillaume!!";
- mes "Let's enjoy our glorious victory!";
- mes "" + strcharinfo(0) + ", its a sign reflecting victory";
- close2;
- }
- else
- { //
- set .@Reward, 1;
- mes "[Swandery]";
- mes "You lost, but you're dedicated to this battle.";
- mes "This is a reward for your great dedication by Guillaume Marollo!";
- mes "Just take this defeat a lesson, and later you would definitely learn.";
- close2;
- }
-
- set Tierra_BG_Tick, gettimetick(2) + 300;
- getitem 7828, .@Reward;
- bg_leave;
- warp "bat_room",155,150;
- end;
- }
- end;
-}
-
-// Battleground Therapist
-// *********************************************************************
-
-bat_a01,60,216,3 script Ghost#tv13 950,{
- mes "[Ghost in valley]";
- mes "Boo...Boo...";
- specialeffect2 312;
- close;
-}
-
-bat_a01,53,377,3 script Therapist in battle#tv12 95,{
- mes "[Therapist in battle]";
- mes "Just close your eyes, and take a deep breathe.";
- mes "You can be free from pain.";
- specialeffect2 312;
- close;
-}
-
-bat_a01,45,18,3 script Therapist in battle#tv11 95,{
- mes "[Therapist in battle]";
- mes "Just close your eyes, and take a deep breathe.";
- mes "You can be free from pain.";
- specialeffect2 312;
- close;
-}
-
-// Battleground Respawn
-// *********************************************************************
-
-bat_a01,57,213,0 script #ntv1_respawn 139,{
- end;
-
-OnBGStart:
- initnpctimer;
- end;
-
-OnBGStop:
- stopnpctimer;
- end;
-
-OnTimer19000:
- misceffect 83;
- end;
-
-OnTimer20000:
- areapercentheal "bat_a01",52,208,61,217,100,100;
- areawarp "bat_a01",52,208,61,217,"bat_a01",301,208;
- initnpctimer;
- end;
-}
-
-bat_a01,50,374,0 script #gtv1_respawn 139,{
- end;
-
-OnBGStart:
- initnpctimer;
- end;
-
-OnBGStop:
- stopnpctimer;
- end;
-
-OnTimer24000:
- misceffect 83;
- end;
-
-OnTimer25000:
- areapercentheal "bat_a01",46,370,54,378,100,100;
- areawarp "bat_a01",46,370,54,378,"bat_a01",354,340;
- initnpctimer;
- end;
-}
-
-bat_a01,42,16,0 script #ctv1_respawn 139,{
- end;
-
-OnBGStart:
- initnpctimer;
- end;
-
-OnBGStop:
- stopnpctimer;
- end;
-
-OnTimer24000:
- misceffect 83;
- end;
-
-OnTimer25000:
- areapercentheal "bat_a01",38,12,47,21,100,100;
- areawarp "bat_a01",38,12,47,21,"bat_a01",354,57;
- initnpctimer;
- end;
-}
+// ============================================================================== +// BattleGround System - Tierra Valley 1 +// ============================================================================== + +// Registration NPC's +// ********************************************************************* + +bat_room,85,227,4 script Registration::TV1R_Guillaume 418,{ + end; +OnInit: + waitingroom "Battle Station 10 Players",10,"Tierra_BG1::OnGuillaumeJoin",1; + end; +OnEnterBG: + set $@TierraBG1_id1, waitingroom2bg("bat_a01",50,374,"Tierra_BG1::OnGuillaumeQuit",""); + end; +} + +bat_room,85,204,0 script Registration::TV1R_Croix 414,{ + end; +OnInit: + waitingroom "Battle Station 10 Players",10,"Tierra_BG1::OnCroixJoin",1; + end; +OnEnterBG: + set $@TierraBG1_id2, waitingroom2bg("bat_a01",42,16,"Tierra_BG1::OnCroixQuit",""); + end; +} + +// Battleground Engine +// ********************************************************************* + +- script Tierra_BG1 -1,{ + end; + +OnInit: + disablenpc "Croix Vintenar#tv1"; + disablenpc "Guillaume Vintenar#tv1"; + disablenpc "Therapist in battle#tv11"; + disablenpc "Therapist in battle#tv12"; + end; + +OnGuillaumeQuit: +OnCroixQuit: + set BG_Delay_Tick, gettimetick(2) + 1200; + end; + +OnGuillaumeJoin: +OnCroixJoin: + if( $@TierraBG1 == 0 ) + donpcevent "Tierra_BG1::OnReadyCheck"; + end; + +OnReadyCheck: + if( $@TierraBG1 ) + end; + set .@Guillaume, getwaitingroomstate(0,"TV1R_Guillaume"); + set .@Croix, getwaitingroomstate(0,"TV1R_Croix"); + + if( .@Guillaume < 10 || .@Croix < 10 ) + { + mapannounce "bat_room","Battleground -- Tierra Valley [80-99] G: " + .@Guillaume + "/10, C: " + .@Croix + "/10",1,0xFFA500; + end; + } + + set $@TierraBG1, 1; + donpcevent "TV1R_Croix::OnEnterBG"; + donpcevent "TV1R_Guillaume::OnEnterBG"; + donpcevent "Guillaume_TV1B::OnBuild"; + donpcevent "Croix_TV1B::OnBuild"; + bg_monster $@TierraBG1_id1,"bat_a01",176,345,"Food Depot",1909,"Tierra_BG1::OnGuillaumeBreak"; + bg_monster $@TierraBG1_id2,"bat_a01",167,50,"Food Storage",1910,"Tierra_BG1::OnCroixBreak"; + bg_monster 0,"bat_a01",273,204,"Neutrality Flag",1911,"Tierra_BG1::OnNeutralBreak"; + + set .Neutral_Base, 0; + set $@TierraBG1_Victory, 0; + + set .Guardian_1, 0; + set .Guardian_2, 0; + set .Guardian_3, 0; + + enablenpc "Therapist in battle#tv11"; + enablenpc "Therapist in battle#tv12"; + disablenpc "Croix Vintenar#tv1"; + disablenpc "Guillaume Vintenar#tv1"; + // Respawner + donpcevent "#gtv1_respawn::OnBGStart"; + donpcevent "#ctv1_respawn::OnBGStart"; + donpcevent "#ntv1_respawn::OnBGStart"; + // Warp Teams + announce "Battleground -- Tierra Valley [80-99] has started!",0,0xFFA500; + bg_warp $@TierraBG1_id1,"bat_a01",353,344; + bg_warp $@TierraBG1_id2,"bat_a01",353,52; + // Final Messages + sleep 6000; + mapannounce "bat_a01","Guillaume Vintenar Axl Rose : Let's attack to burn down Croix's food storage",1,0x0000FF; + sleep 2000; + mapannounce "bat_a01","Croix Vintenar Swandery : Master of Valhalla! Let us be gifted with unfailing faith and courage",1,0xFF0000; + + initnpctimer; + end; + +OnNeutralBreak: + if( getcharid(4) == $@TierraBG1_id1 ) + { + mapannounce "bat_a01","Guillaume obtained a neurality banner, so they have an advantage.",1,0x0000FF; + bg_team_setxy $@TierraBG1_id2,42,16; + areawarp "bat_a01",52,208,61,217,"bat_a01",42,16; + } + else if( getcharid(4) == $@TierraBG1_id2 ) + { + mapannounce "bat_a01","Croix obtained a neutrality banner, so they have an advantage.",1,0xFF0000; + bg_team_setxy $@TierraBG1_id1,50,374; + areawarp "bat_a01",52,208,61,217,"bat_a01",50,374; + } + else end; + + set .Neutral_Base, getcharid(4); + bg_team_setxy .Neutral_Base,56,212; + + if( .Guardian_1 == 0 ) + set .Guardian_1, bg_monster(.Neutral_Base,"bat_a01",280,233,"Guardian",1949,"Tierra_BG1::OnGuardian1"); + else + bg_monster_set_team .Guardian_1, .Neutral_Base; + + if( .Guardian_2 == 0 ) + set .Guardian_2, bg_monster(.Neutral_Base,"bat_a01",287,203,"Guardian",1950,"Tierra_BG1::OnGuardian2"); + else + bg_monster_set_team .Guardian_2, .Neutral_Base; + + if( .Guardian_3 == 0 ) + set .Guardian_3, bg_monster(.Neutral_Base,"bat_a01",268,204,"Guardian",1949,"Tierra_BG1::OnGuardian3"); + else + bg_monster_set_team .Guardian_3, .Neutral_Base; + + sleep 10000; + if( $@TierraBG1 != 1 ) end; + + if( .Neutral_Base == $@TierraBG1_id1 ) + bg_monster .Neutral_Base,"bat_a01",273,204,"Guillaume Flag",1912,"Tierra_BG1::OnNeutralBreak"; + else if( .Neutral_Base == $@TierraBG1_id2 ) + bg_monster .Neutral_Base,"bat_a01",273,204,"Croix Flag",1913,"Tierra_BG1::OnNeutralBreak"; + end; + +OnGuardian1: set .Guardian_1, 0; end; +OnGuardian2: set .Guardian_2, 0; end; +OnGuardian3: set .Guardian_3, 0; end; + +OnGuillaumeBreak: + set $@TierraBG1_Victory, 2; + mapannounce "bat_a01","Croix Vintenar Swandery: We destroyed Guillaume's food storehause. We won that! Wow!",1,0xFF0000; + donpcevent "Tierra_BG1::OnStop"; + end; + +OnCroixBreak: + set $@TierraBG1_Victory, 1; + mapannounce "bat_a01","Guillaume Vintenar Axl Rose: We destroyed Croix's food storehause. We won that! Wow!",1,0x0000FF; + donpcevent "Tierra_BG1::OnStop"; + end; + +OnTimer2400000: + mapannounce "bat_a01","Battle of Tierra Gorge will ends in 5 minutes",1,0xFFA500; + end; +OnTimer2640000: + mapannounce "bat_a01","Battle of Tierra Gorge will ends in 1 minute",1,0xFFA500; + end; + +OnTimer2700000: + set $@TierraBG1_Victory, 3; // Draw Game + mapannounce "bat_a01","Battle of Tierra Gorge is over. The time is out, this is a Tie",1,0xFFA500; + donpcevent "Tierra_BG1::OnStop"; + end; + +OnStop: + set $@TierraBG1, 2; + disablenpc "Therapist in battle#tv11"; + disablenpc "Therapist in battle#tv12"; + donpcevent "#gtv1_respawn::OnBGStop"; + donpcevent "#ctv1_respawn::OnBGStop"; + donpcevent "#ntv1_respawn::OnBGStop"; + enablenpc "Croix Vintenar#tv1"; + enablenpc "Guillaume Vintenar#tv1"; + killmonster "bat_a01","Tierra_BG1::OnGuillaumeBreak"; + killmonster "bat_a01","Tierra_BG1::OnCroixBreak"; + killmonster "bat_a01","Tierra_BG1::OnNeutralBreak"; + killmonster "bat_a01","Tierra_BG1::OnGuardian1"; + killmonster "bat_a01","Tierra_BG1::OnGuardian2"; + killmonster "bat_a01","Tierra_BG1::OnGuardian3"; + stopnpctimer; + sleep 3000; + bg_warp $@TierraBG1_id1,"bat_a01",50,374; + bg_warp $@TierraBG1_id2,"bat_a01",42,16; + sleep 3000; + mapannounce "bat_a01","Battle of Tierra Gorge will close in 1 minute!",1,0xFFA500; + initnpctimer; + end; + +OnTimer30000: + if( $@TierraBG1 == 2 ) + mapannounce "bat_a01","Battle of Tierra Valley will close in 30 seconds!",1,0xFFA500; + end; +OnTimer50000: + if( $@TierraBG1 == 2 ) + mapannounce "bat_a01","Battle of Tierra Valley will close in 10 seconds!",1,0xFFA500; + end; + +OnTimer60000: + if( $@TierraBG1 != 2 ) + end; +OnReset: + stopnpctimer; + set .Neutral_Base, 0; + disablenpc "Croix Vintenar#tv1"; + disablenpc "Guillaume Vintenar#tv1"; + disablenpc "Therapist in battle#tv11"; + disablenpc "Therapist in battle#tv12"; + donpcevent "#gtv1_respawn::OnBGStop"; + donpcevent "#ctv1_respawn::OnBGStop"; + donpcevent "#ntv1_respawn::OnBGStop"; + + killmonster "bat_a01","Tierra_BG1::OnGuillaumeBreak"; + killmonster "bat_a01","Tierra_BG1::OnCroixBreak"; + killmonster "bat_a01","Tierra_BG1::OnNeutralBreak"; + killmonster "bat_a01","Tierra_BG1::OnGuardian1"; + killmonster "bat_a01","Tierra_BG1::OnGuardian2"; + killmonster "bat_a01","Tierra_BG1::OnGuardian3"; + donpcevent "Guillaume_TV1B::OnDestroy"; + donpcevent "Croix_TV1B::OnDestroy"; + + set $@TierraBG1_Victory, 0; + if( $@TierraBG1_id1 ) { bg_destroy $@TierraBG1_id1; set $@TierraBG1_id1, 0; } + if( $@TierraBG1_id2 ) { bg_destroy $@TierraBG1_id2; set $@TierraBG1_id2, 0; } + sleep 1000; + mapwarp "bat_a01","bat_room",155,150; + sleep 2000; + maprespawnguildid "bat_a01",0,3; // Just in case someone else + sleep 2000; + set $@TierraBG1, 0; + donpcevent "Tierra_BG1::OnReadyCheck"; // Maybe a game is ready to start + end; +} + +// MapFlags +// ********************************************************************* + +bat_a01 mapflag battleground +bat_a01 mapflag nomemo +bat_a01 mapflag nosave SavePoint +bat_a01 mapflag noteleport +bat_a01 mapflag nowarp +bat_a01 mapflag nowarpto +bat_a01 mapflag noreturn +bat_a01 mapflag nobranch +bat_a01 mapflag nopenalty + +// Other Flags +// ********************************************************************* + +bat_a01,148,85,1 duplicate(Croix camp#bat) Croix camp#bat10 974 +bat_a01,155,85,1 duplicate(Croix camp#bat) Croix camp#bat11 974 +bat_a01,357,75,1 duplicate(Croix camp#bat) Croix camp#bat12 974 +bat_a01,348,74,1 duplicate(Croix camp#bat) Croix camp#bat13 974 +bat_a01,199,49,1 duplicate(Croix camp#bat) Croix camp#bat14 974 +bat_a01,168,16,1 duplicate(Croix camp#bat) Croix camp#bat15 974 +bat_a01,138,12,1 duplicate(Croix camp#bat) Croix camp#bat16 974 +bat_a01,108,35,1 duplicate(Croix camp#bat) Croix camp#bat17 974 +bat_a01,164,308,1 duplicate(Guillaume camp#bat) Guillaume camp#bat10 973 +bat_a01,157,308,1 duplicate(Guillaume camp#bat) Guillaume camp#bat11 973 +bat_a01,359,327,1 duplicate(Guillaume camp#bat) Guillaume camp#bat12 973 +bat_a01,350,326,1 duplicate(Guillaume camp#bat) Guillaume camp#bat13 973 +bat_a01,209,344,1 duplicate(Guillaume camp#bat) Guillaume camp#bat14 973 +bat_a01,173,380,1 duplicate(Guillaume camp#bat) Guillaume camp#bat15 973 +bat_a01,150,380,1 duplicate(Guillaume camp#bat) Guillaume camp#bat16 973 +bat_a01,118,357,1 duplicate(Guillaume camp#bat) Guillaume camp#bat17 973 +bat_a01,119,336,1 duplicate(Guillaume camp#bat) Guillaume camp#bat18 973 + +// Barricades +// ********************************************************************* + +- script Guillaume_TV1B -1,{ + end; + +OnBuild: + for( set .@i, 0; .@i < 16; set .@i, .@i + 1 ) + bg_monster 0,"bat_a01",170+.@i,130,"Barricade",1906,"Guillaume_TV1B::OnWall"; + + setwall "bat_a01",170,130,16,6,1,"bat_a01_g1"; + set .MyMobCount,16; + end; + +OnDestroy: + killmonster "bat_a01","Guillaume_TV1B::OnWall"; + delwall "bat_a01_g1"; + set .MyMobCount,0; + end; + +OnWall: + if( set(.MyMobCount,.MyMobCount - 1) < 1 ) + { + delwall "bat_a01_g1"; + mapannounce "bat_a01","South Gate : The Gate has been Destroy!!",1,0xFFA500; + } + end; +} + +- script Croix_TV1B -1,{ + end; + +OnBuild: + for( set .@i, 0; .@i < 16; set .@i, .@i + 1 ) + bg_monster 0,"bat_a01",186+.@i,266,"Barricade",1906,"Croix_TV1B::OnWall"; + + setwall "bat_a01",186,266,16,6,1,"bat_a01_c1"; + set .MyMobCount,16; + end; + +OnDestroy: + killmonster "bat_a01","Croix_TV1B::OnWall"; + delwall "bat_a01_c1"; + set .MyMobCount,0; + end; + +OnWall: + if( set(.MyMobCount,.MyMobCount - 1) < 1 ) + { + delwall "bat_a01_c1"; + mapannounce "bat_a01","North Gate : A Gate has been Destroy!!",1,0xFFA500; + } + end; +} + +// Battleground rewards +// ********************************************************************* + +bat_a01,45,19,3 script Croix Vintenar#tv1 415,{ + if( $@TierraBG1_Victory ) + { + if( $@TierraBG1_Victory == Bat_Team ) + { // Victory + set .@Reward, 3; + mes "[Swandery]"; + mes "Blessed Croax!!"; + mes "Let's enjoy our glorious victory!"; + mes "" + strcharinfo(0) + ", its a sign reflecting victory"; + close2; + } + else + { // + set .@Reward, 1; + mes "[Swandery]"; + mes "Oh, " + strcharinfo(0) + ". Don't be sad."; + mes "Even though we didn't win, we did our best."; + mes "This is a Royal gift from Croix, and please don't forget this battle. We can win the next."; + close2; + } + + set Tierra_BG_Tick, gettimetick(2) + 300; + getitem 7828, .@Reward; + bg_leave; + warp "bat_room",155,150; + end; + } + end; +} + +bat_a01,53,377,3 script Guillaume Vintenar#tv1 419,{ + if( $@TierraBG1_Victory ) + { + if( $@TierraBG1_Victory == Bat_Team ) + { // Victory + set .@Reward, 3; + mes "[Swandery]"; + mes "Blessed Guillaume!!"; + mes "Let's enjoy our glorious victory!"; + mes "" + strcharinfo(0) + ", its a sign reflecting victory"; + close2; + } + else + { // + set .@Reward, 1; + mes "[Swandery]"; + mes "You lost, but you're dedicated to this battle."; + mes "This is a reward for your great dedication by Guillaume Marollo!"; + mes "Just take this defeat a lesson, and later you would definitely learn."; + close2; + } + + set Tierra_BG_Tick, gettimetick(2) + 300; + getitem 7828, .@Reward; + bg_leave; + warp "bat_room",155,150; + end; + } + end; +} + +// Battleground Therapist +// ********************************************************************* + +bat_a01,60,216,3 script Ghost#tv13 950,{ + mes "[Ghost in valley]"; + mes "Boo...Boo..."; + specialeffect2 312; + close; +} + +bat_a01,53,377,3 script Therapist in battle#tv12 95,{ + mes "[Therapist in battle]"; + mes "Just close your eyes, and take a deep breathe."; + mes "You can be free from pain."; + specialeffect2 312; + close; +} + +bat_a01,45,18,3 script Therapist in battle#tv11 95,{ + mes "[Therapist in battle]"; + mes "Just close your eyes, and take a deep breathe."; + mes "You can be free from pain."; + specialeffect2 312; + close; +} + +// Battleground Respawn +// ********************************************************************* + +bat_a01,57,213,0 script #ntv1_respawn 139,{ + end; + +OnBGStart: + initnpctimer; + end; + +OnBGStop: + stopnpctimer; + end; + +OnTimer19000: + misceffect 83; + end; + +OnTimer20000: + areapercentheal "bat_a01",52,208,61,217,100,100; + areawarp "bat_a01",52,208,61,217,"bat_a01",301,208; + initnpctimer; + end; +} + +bat_a01,50,374,0 script #gtv1_respawn 139,{ + end; + +OnBGStart: + initnpctimer; + end; + +OnBGStop: + stopnpctimer; + end; + +OnTimer24000: + misceffect 83; + end; + +OnTimer25000: + areapercentheal "bat_a01",46,370,54,378,100,100; + areawarp "bat_a01",46,370,54,378,"bat_a01",354,340; + initnpctimer; + end; +} + +bat_a01,42,16,0 script #ctv1_respawn 139,{ + end; + +OnBGStart: + initnpctimer; + end; + +OnBGStop: + stopnpctimer; + end; + +OnTimer24000: + misceffect 83; + end; + +OnTimer25000: + areapercentheal "bat_a01",38,12,47,21,100,100; + areawarp "bat_a01",38,12,47,21,"bat_a01",354,57; + initnpctimer; + end; +} diff --git a/npc/battleground/bg_tierra_02.txt b/npc/battleground/bg_tierra_02.txt index a69f65e2b..9cc78a4cc 100644 --- a/npc/battleground/bg_tierra_02.txt +++ b/npc/battleground/bg_tierra_02.txt @@ -1,488 +1,488 @@ -// ==============================================================================
-// BattleGround System - Tierra Valley 2
-// ==============================================================================
-
-// Registration NPC's
-// *********************************************************************
-
-bat_room,85,97,4 script Registration::TV2R_Guillaume 418,{
- end;
-OnInit:
- waitingroom "Battle Station 10 Players",10,"Tierra_BG2::OnGuillaumeJoin",1;
- end;
-OnEnterBG:
- set $@TierraBG2_id1, waitingroom2bg("bat_a02",50,374,"Tierra_BG2::OnGuillaumeQuit","");
- end;
-}
-
-bat_room,85,74,0 script Registration::TV2R_Croix 414,{
- end;
-OnInit:
- waitingroom "Battle Station 10 Players",10,"Tierra_BG2::OnCroixJoin",1;
- end;
-OnEnterBG:
- set $@TierraBG2_id2, waitingroom2bg("bat_a02",42,16,"Tierra_BG2::OnCroixQuit","");
- end;
-}
-
-// Battleground Engine
-// *********************************************************************
-
-- script Tierra_BG2 -1,{
- end;
-
-OnInit:
- disablenpc "Croix Vintenar#tv2";
- disablenpc "Guillaume Vintenar#tv2";
- disablenpc "Therapist in battle#tv21";
- disablenpc "Therapist in battle#tv22";
- end;
-
-OnGuillaumeQuit:
-OnCroixQuit:
- set BG_Delay_Tick, gettimetick(2) + 1200;
- end;
-
-OnGuillaumeJoin:
-OnCroixJoin:
- if( $@TierraBG2 == 0 )
- donpcevent "Tierra_BG2::OnReadyCheck";
- end;
-
-OnReadyCheck:
- if( $@TierraBG2 )
- end;
- set .@Guillaume, getwaitingroomstate(0,"TV2R_Guillaume");
- set .@Croix, getwaitingroomstate(0,"TV2R_Croix");
-
- if( .@Guillaume < 10 || .@Croix < 10 )
- {
- mapannounce "bat_room","Battleground -- Tierra Valley [80-99] G: " + .@Guillaume + "/10, C: " + .@Croix + "/10",1,0xF4A460;
- end;
- }
-
- set $@TierraBG2, 1;
- donpcevent "TV2R_Croix::OnEnterBG";
- donpcevent "TV2R_Guillaume::OnEnterBG";
- donpcevent "Guillaume_TV2B::OnBuild";
- donpcevent "Croix_TV2B::OnBuild";
- bg_monster $@TierraBG2_id1,"bat_a02",176,345,"Food Depot",1909,"Tierra_BG2::OnGuillaumeBreak";
- bg_monster $@TierraBG2_id2,"bat_a02",167,50,"Food Storage",1910,"Tierra_BG2::OnCroixBreak";
- bg_monster 0,"bat_a02",273,204,"Neutrality Flag",1911,"Tierra_BG2::OnNeutralBreak";
-
- set .Neutral_Base, 0;
- set $@TierraBG2_Victory, 0;
-
- set .Guardian_1, 0;
- set .Guardian_2, 0;
- set .Guardian_3, 0;
-
- enablenpc "Therapist in battle#tv21";
- enablenpc "Therapist in battle#tv22";
- disablenpc "Croix Vintenar#tv2";
- disablenpc "Guillaume Vintenar#tv2";
- // Respawner
- donpcevent "#gtv2_respawn::OnBGStart";
- donpcevent "#ctv2_respawn::OnBGStart";
- donpcevent "#ntv2_respawn::OnBGStart";
- // Warp Teams
- announce "Battleground -- Tierra Valley [80-99] has started!",0,0xF4A460;
- bg_warp $@TierraBG2_id1,"bat_a02",353,344;
- bg_warp $@TierraBG2_id2,"bat_a02",353,52;
- // Final Messages
- sleep 6000;
- mapannounce "bat_a02","Guillaume Vintenar Axl Rose : Let's attack to burn down Croix's food storage",1,0x0000FF;
- sleep 2000;
- mapannounce "bat_a02","Croix Vintenar Swandery : Master of Valhalla! Let us be gifted with unfailing faith and courage",1,0xFF0000;
-
- initnpctimer;
- end;
-
-OnNeutralBreak:
- if( getcharid(4) == $@TierraBG2_id1 )
- {
- mapannounce "bat_a02","Guillaume obtained a neurality banner, so they have an advantage.",1,0x0000FF;
- bg_team_setxy $@TierraBG2_id2,42,16;
- areawarp "bat_a02",52,208,61,217,"bat_a02",42,16;
- }
- else if( getcharid(4) == $@TierraBG2_id2 )
- {
- mapannounce "bat_a02","Croix obtained a neutrality banner, so they have an advantage.",1,0xFF0000;
- bg_team_setxy $@TierraBG2_id1,50,374;
- areawarp "bat_a02",52,208,61,217,"bat_a02",50,374;
- }
- else end;
-
- set .Neutral_Base, getcharid(4);
- bg_team_setxy .Neutral_Base,56,212;
-
- if( .Guardian_1 == 0 )
- set .Guardian_1, bg_monster(.Neutral_Base,"bat_a02",280,233,"Guardian",1949,"Tierra_BG2::OnGuardian1");
- else
- bg_monster_set_team .Guardian_1, .Neutral_Base;
-
- if( .Guardian_2 == 0 )
- set .Guardian_2, bg_monster(.Neutral_Base,"bat_a02",287,203,"Guardian",1950,"Tierra_BG2::OnGuardian2");
- else
- bg_monster_set_team .Guardian_2, .Neutral_Base;
-
- if( .Guardian_3 == 0 )
- set .Guardian_3, bg_monster(.Neutral_Base,"bat_a02",268,204,"Guardian",1949,"Tierra_BG2::OnGuardian3");
- else
- bg_monster_set_team .Guardian_3, .Neutral_Base;
-
- sleep 10000;
- if( $@TierraBG2 != 1 ) end;
-
- if( .Neutral_Base == $@TierraBG2_id1 )
- bg_monster .Neutral_Base,"bat_a02",273,204,"Guillaume Flag",1912,"Tierra_BG2::OnNeutralBreak";
- else if( .Neutral_Base == $@TierraBG2_id2 )
- bg_monster .Neutral_Base,"bat_a02",273,204,"Croix Flag",1913,"Tierra_BG2::OnNeutralBreak";
- end;
-
-OnGuardian1: set .Guardian_1, 0; end;
-OnGuardian2: set .Guardian_2, 0; end;
-OnGuardian3: set .Guardian_3, 0; end;
-
-OnGuillaumeBreak:
- set $@TierraBG2_Victory, 2;
- mapannounce "bat_a02","Croix Vintenar Swandery: We destroyed Guillaume's food storehause. We won that! Wow!",1,0xFF0000;
- donpcevent "Tierra_BG2::OnStop";
- end;
-
-OnCroixBreak:
- set $@TierraBG2_Victory, 1;
- mapannounce "bat_a02","Guillaume Vintenar Axl Rose: We destroyed Croix's food storehause. We won that! Wow!",1,0x0000FF;
- donpcevent "Tierra_BG2::OnStop";
- end;
-
-OnTimer2400000:
- mapannounce "bat_a02","Battle of Tierra Gorge will ends in 5 minutes",1,0xF4A460;
- end;
-OnTimer2640000:
- mapannounce "bat_a02","Battle of Tierra Gorge will ends in 1 minute",1,0xF4A460;
- end;
-
-OnTimer2700000:
- set $@TierraBG2_Victory, 3; // Draw Game
- mapannounce "bat_a02","Battle of Tierra Gorge is over. The time is out, this is a Tie",1,0xF4A460;
- donpcevent "Tierra_BG2::OnStop";
- end;
-
-OnStop:
- set $@TierraBG2, 2;
- disablenpc "Therapist in battle#tv21";
- disablenpc "Therapist in battle#tv22";
- donpcevent "#gtv2_respawn::OnBGStop";
- donpcevent "#ctv2_respawn::OnBGStop";
- donpcevent "#ntv2_respawn::OnBGStop";
- enablenpc "Croix Vintenar#tv2";
- enablenpc "Guillaume Vintenar#tv2";
- killmonster "bat_a02","Tierra_BG2::OnGuillaumeBreak";
- killmonster "bat_a02","Tierra_BG2::OnCroixBreak";
- killmonster "bat_a02","Tierra_BG2::OnNeutralBreak";
- killmonster "bat_a02","Tierra_BG2::OnGuardian1";
- killmonster "bat_a02","Tierra_BG2::OnGuardian2";
- killmonster "bat_a02","Tierra_BG2::OnGuardian3";
- stopnpctimer;
- sleep 3000;
- bg_warp $@TierraBG2_id1,"bat_a02",50,374;
- bg_warp $@TierraBG2_id2,"bat_a02",42,16;
- sleep 3000;
- mapannounce "bat_a02","Battle of Tierra Gorge will close in 1 minute!",1,0xF4A460;
- initnpctimer;
- end;
-
-OnTimer30000:
- if( $@TierraBG2 == 2 )
- mapannounce "bat_a02","Battle of Tierra Valley will close in 30 seconds!",1,0xF4A460;
- end;
-OnTimer50000:
- if( $@TierraBG2 == 2 )
- mapannounce "bat_a02","Battle of Tierra Valley will close in 10 seconds!",1,0xF4A460;
- end;
-
-OnTimer60000:
- if( $@TierraBG2 != 2 )
- end;
-OnReset:
- stopnpctimer;
- set .Neutral_Base, 0;
- disablenpc "Croix Vintenar#tv2";
- disablenpc "Guillaume Vintenar#tv2";
- disablenpc "Therapist in battle#tv21";
- disablenpc "Therapist in battle#tv22";
- donpcevent "#gtv2_respawn::OnBGStop";
- donpcevent "#gtv2_respawn::OnBGStop";
- donpcevent "#ctv2_respawn::OnBGStop";
-
- killmonster "bat_a02","Tierra_BG2::OnGuillaumeBreak";
- killmonster "bat_a02","Tierra_BG2::OnCroixBreak";
- killmonster "bat_a02","Tierra_BG2::OnNeutralBreak";
- killmonster "bat_a02","Tierra_BG2::OnGuardian1";
- killmonster "bat_a02","Tierra_BG2::OnGuardian2";
- killmonster "bat_a02","Tierra_BG2::OnGuardian3";
- donpcevent "Guillaume_TV2B::OnDestroy";
- donpcevent "Croix_TV2B::OnDestroy";
-
- set $@TierraBG2_Victory, 0;
- if( $@TierraBG2_id1 ) { bg_destroy $@TierraBG2_id1; set $@TierraBG2_id1, 0; }
- if( $@TierraBG2_id2 ) { bg_destroy $@TierraBG2_id2; set $@TierraBG2_id2, 0; }
- sleep 1000;
- mapwarp "bat_a02","bat_room",155,150;
- sleep 2000;
- maprespawnguildid "bat_a02",0,3; // Just in case someone else
- sleep 2000;
- set $@TierraBG2, 0;
- donpcevent "Tierra_BG2::OnReadyCheck"; // Maybe a game is ready to start
- end;
-}
-
-// MapFlags
-// *********************************************************************
-
-bat_a02 mapflag battleground
-bat_a02 mapflag nomemo
-bat_a02 mapflag nosave SavePoint
-bat_a02 mapflag noteleport
-bat_a02 mapflag nowarp
-bat_a02 mapflag nowarpto
-bat_a02 mapflag noreturn
-bat_a02 mapflag nobranch
-bat_a02 mapflag nopenalty
-
-// Other Flags
-// *********************************************************************
-
-bat_a02,148,85,1 duplicate(Croix camp#bat) Croix camp#bat22 974
-bat_a02,155,85,1 duplicate(Croix camp#bat) Croix camp#bat23 974
-bat_a02,357,75,1 duplicate(Croix camp#bat) Croix camp#bat24 974
-bat_a02,348,74,1 duplicate(Croix camp#bat) Croix camp#bat25 974
-bat_a02,199,49,1 duplicate(Croix camp#bat) Croix camp#bat26 974
-bat_a02,168,16,1 duplicate(Croix camp#bat) Croix camp#bat27 974
-bat_a02,138,12,1 duplicate(Croix camp#bat) Croix camp#bat28 974
-bat_a02,108,35,1 duplicate(Croix camp#bat) Croix camp#bat29 974
-bat_a02,164,308,1 duplicate(Guillaume camp#bat) Guillaume camp#bat23 973
-bat_a02,157,308,1 duplicate(Guillaume camp#bat) Guillaume camp#bat24 973
-bat_a02,359,327,1 duplicate(Guillaume camp#bat) Guillaume camp#bat25 973
-bat_a02,350,326,1 duplicate(Guillaume camp#bat) Guillaume camp#bat26 973
-bat_a02,209,344,1 duplicate(Guillaume camp#bat) Guillaume camp#bat27 973
-bat_a02,173,380,1 duplicate(Guillaume camp#bat) Guillaume camp#bat28 973
-bat_a02,150,380,1 duplicate(Guillaume camp#bat) Guillaume camp#bat29 973
-bat_a02,118,357,1 duplicate(Guillaume camp#bat) Guillaume camp#bat30 973
-bat_a02,119,336,1 duplicate(Guillaume camp#bat) Guillaume camp#bat31 973
-
-// Barricades
-// *********************************************************************
-
-- script Guillaume_TV2B -1,{
- end;
-
-OnBuild:
- for( set .@i, 0; .@i < 16; set .@i, .@i + 1 )
- bg_monster 0,"bat_a02",170+.@i,130,"Barricade",1906,"Guillaume_TV2B::OnWall";
-
- setwall "bat_a02",170,130,16,6,1,"bat_a02_g1";
- set .MyMobCount,16;
- end;
-
-OnDestroy:
- killmonster "bat_a02","Guillaume_TV2B::OnWall";
- delwall "bat_a02_g1";
- set .MyMobCount,0;
- end;
-
-OnWall:
- if( set(.MyMobCount,.MyMobCount - 1) < 1 )
- {
- delwall "bat_a02_g1";
- mapannounce "bat_a02","South Gate : The Gate has been Destroy!!",1,0xF4A460;
- }
- end;
-}
-
-- script Croix_TV2B -1,{
- end;
-
-OnBuild:
- for( set .@i, 0; .@i < 16; set .@i, .@i + 1 )
- bg_monster 0,"bat_a02",186+.@i,266,"Barricade",1906,"Croix_TV2B::OnWall";
-
- setwall "bat_a02",186,266,16,6,1,"bat_a02_c1";
- set .MyMobCount,16;
- end;
-
-OnDestroy:
- killmonster "bat_a02","Croix_TV2B::OnWall";
- delwall "bat_a02_c1";
- set .MyMobCount,0;
- end;
-
-OnWall:
- if( set(.MyMobCount,.MyMobCount - 1) < 1 )
- {
- delwall "bat_a02_c1";
- mapannounce "bat_a02","North Gate : A Gate has been Destroy!!",1,0xF4A460;
- }
- end;
-}
-
-// Battleground rewards
-// *********************************************************************
-
-bat_a02,45,19,3 script Croix Vintenar#tv2 415,{
- if( $@TierraBG2_Victory )
- {
- if( $@TierraBG2_Victory == Bat_Team )
- { // Victory
- set .@Reward, 3;
- mes "[Swandery]";
- mes "Blessed Croax!!";
- mes "Let's enjoy our glorious victory!";
- mes "" + strcharinfo(0) + ", its a sign reflecting victory";
- close2;
- }
- else
- { //
- set .@Reward, 1;
- mes "[Swandery]";
- mes "Oh, " + strcharinfo(0) + ". Don't be sad.";
- mes "Even though we didn't win, we did our best.";
- mes "This is a Royal gift from Croix, and please don't forget this battle. We can win the next.";
- close2;
- }
-
- set Tierra_BG_Tick, gettimetick(2) + 300;
- getitem 7828, .@Reward;
- bg_leave;
- warp "bat_room",155,150;
- end;
- }
- end;
-}
-
-bat_a02,53,377,3 script Guillaume Vintenar#tv2 419,{
- if( $@TierraBG2_Victory )
- {
- if( $@TierraBG2_Victory == Bat_Team )
- { // Victory
- set .@Reward, 3;
- mes "[Swandery]";
- mes "Blessed Guillaume!!";
- mes "Let's enjoy our glorious victory!";
- mes "" + strcharinfo(0) + ", its a sign reflecting victory";
- close2;
- }
- else
- { //
- set .@Reward, 1;
- mes "[Swandery]";
- mes "You lost, but you're dedicated to this battle.";
- mes "This is a reward for your great dedication by Guillaume Marollo!";
- mes "Just take this defeat a lesson, and later you would definitely learn.";
- close2;
- }
-
- set Tierra_BG_Tick, gettimetick(2) + 300;
- getitem 7828, .@Reward;
- bg_leave;
- warp "bat_room",155,150;
- end;
- }
- end;
-}
-
-// Battleground Therapist
-// *********************************************************************
-
-bat_a02,60,216,3 script Ghost#tv23 950,{
- mes "[Ghost in valley]";
- mes "Boo...Boo...";
- specialeffect2 312;
- close;
-}
-
-bat_a02,53,377,3 script Therapist in battle#tv22 95,{
- mes "[Therapist in battle]";
- mes "Just close your eyes, and take a deep breathe.";
- mes "You can be free from pain.";
- specialeffect2 312;
- close;
-}
-
-bat_a02,45,18,3 script Therapist in battle#tv21 95,{
- mes "[Therapist in battle]";
- mes "Just close your eyes, and take a deep breathe.";
- mes "You can be free from pain.";
- specialeffect2 312;
- close;
-}
-
-// Battleground Respawn
-// *********************************************************************
-
-bat_a02,57,213,0 script #ntv2_respawn 139,{
- end;
-
-OnBGStart:
- initnpctimer;
- end;
-
-OnBGStop:
- stopnpctimer;
- end;
-
-OnTimer19000:
- misceffect 83;
- end;
-
-OnTimer20000:
- areapercentheal "bat_a02",52,208,61,217,100,100;
- areawarp "bat_a02",52,208,61,217,"bat_a02",301,208;
- initnpctimer;
- end;
-}
-
-bat_a02,50,374,0 script #gtv2_respawn 139,{
- end;
-
-OnBGStart:
- initnpctimer;
- end;
-
-OnBGStop:
- stopnpctimer;
- end;
-
-OnTimer24000:
- misceffect 83;
- end;
-
-OnTimer25000:
- areapercentheal "bat_a02",46,370,54,378,100,100;
- areawarp "bat_a02",46,370,54,378,"bat_a02",354,340;
- initnpctimer;
- end;
-}
-
-bat_a02,42,16,0 script #ctv2_respawn 139,{
- end;
-
-OnBGStart:
- initnpctimer;
- end;
-
-OnBGStop:
- stopnpctimer;
- end;
-
-OnTimer24000:
- misceffect 83;
- end;
-
-OnTimer25000:
- areapercentheal "bat_a02",38,12,47,21,100,100;
- areawarp "bat_a02",38,12,47,21,"bat_a02",354,57;
- initnpctimer;
- end;
-}
+// ============================================================================== +// BattleGround System - Tierra Valley 2 +// ============================================================================== + +// Registration NPC's +// ********************************************************************* + +bat_room,85,97,4 script Registration::TV2R_Guillaume 418,{ + end; +OnInit: + waitingroom "Battle Station 10 Players",10,"Tierra_BG2::OnGuillaumeJoin",1; + end; +OnEnterBG: + set $@TierraBG2_id1, waitingroom2bg("bat_a02",50,374,"Tierra_BG2::OnGuillaumeQuit",""); + end; +} + +bat_room,85,74,0 script Registration::TV2R_Croix 414,{ + end; +OnInit: + waitingroom "Battle Station 10 Players",10,"Tierra_BG2::OnCroixJoin",1; + end; +OnEnterBG: + set $@TierraBG2_id2, waitingroom2bg("bat_a02",42,16,"Tierra_BG2::OnCroixQuit",""); + end; +} + +// Battleground Engine +// ********************************************************************* + +- script Tierra_BG2 -1,{ + end; + +OnInit: + disablenpc "Croix Vintenar#tv2"; + disablenpc "Guillaume Vintenar#tv2"; + disablenpc "Therapist in battle#tv21"; + disablenpc "Therapist in battle#tv22"; + end; + +OnGuillaumeQuit: +OnCroixQuit: + set BG_Delay_Tick, gettimetick(2) + 1200; + end; + +OnGuillaumeJoin: +OnCroixJoin: + if( $@TierraBG2 == 0 ) + donpcevent "Tierra_BG2::OnReadyCheck"; + end; + +OnReadyCheck: + if( $@TierraBG2 ) + end; + set .@Guillaume, getwaitingroomstate(0,"TV2R_Guillaume"); + set .@Croix, getwaitingroomstate(0,"TV2R_Croix"); + + if( .@Guillaume < 10 || .@Croix < 10 ) + { + mapannounce "bat_room","Battleground -- Tierra Valley [80-99] G: " + .@Guillaume + "/10, C: " + .@Croix + "/10",1,0xF4A460; + end; + } + + set $@TierraBG2, 1; + donpcevent "TV2R_Croix::OnEnterBG"; + donpcevent "TV2R_Guillaume::OnEnterBG"; + donpcevent "Guillaume_TV2B::OnBuild"; + donpcevent "Croix_TV2B::OnBuild"; + bg_monster $@TierraBG2_id1,"bat_a02",176,345,"Food Depot",1909,"Tierra_BG2::OnGuillaumeBreak"; + bg_monster $@TierraBG2_id2,"bat_a02",167,50,"Food Storage",1910,"Tierra_BG2::OnCroixBreak"; + bg_monster 0,"bat_a02",273,204,"Neutrality Flag",1911,"Tierra_BG2::OnNeutralBreak"; + + set .Neutral_Base, 0; + set $@TierraBG2_Victory, 0; + + set .Guardian_1, 0; + set .Guardian_2, 0; + set .Guardian_3, 0; + + enablenpc "Therapist in battle#tv21"; + enablenpc "Therapist in battle#tv22"; + disablenpc "Croix Vintenar#tv2"; + disablenpc "Guillaume Vintenar#tv2"; + // Respawner + donpcevent "#gtv2_respawn::OnBGStart"; + donpcevent "#ctv2_respawn::OnBGStart"; + donpcevent "#ntv2_respawn::OnBGStart"; + // Warp Teams + announce "Battleground -- Tierra Valley [80-99] has started!",0,0xF4A460; + bg_warp $@TierraBG2_id1,"bat_a02",353,344; + bg_warp $@TierraBG2_id2,"bat_a02",353,52; + // Final Messages + sleep 6000; + mapannounce "bat_a02","Guillaume Vintenar Axl Rose : Let's attack to burn down Croix's food storage",1,0x0000FF; + sleep 2000; + mapannounce "bat_a02","Croix Vintenar Swandery : Master of Valhalla! Let us be gifted with unfailing faith and courage",1,0xFF0000; + + initnpctimer; + end; + +OnNeutralBreak: + if( getcharid(4) == $@TierraBG2_id1 ) + { + mapannounce "bat_a02","Guillaume obtained a neurality banner, so they have an advantage.",1,0x0000FF; + bg_team_setxy $@TierraBG2_id2,42,16; + areawarp "bat_a02",52,208,61,217,"bat_a02",42,16; + } + else if( getcharid(4) == $@TierraBG2_id2 ) + { + mapannounce "bat_a02","Croix obtained a neutrality banner, so they have an advantage.",1,0xFF0000; + bg_team_setxy $@TierraBG2_id1,50,374; + areawarp "bat_a02",52,208,61,217,"bat_a02",50,374; + } + else end; + + set .Neutral_Base, getcharid(4); + bg_team_setxy .Neutral_Base,56,212; + + if( .Guardian_1 == 0 ) + set .Guardian_1, bg_monster(.Neutral_Base,"bat_a02",280,233,"Guardian",1949,"Tierra_BG2::OnGuardian1"); + else + bg_monster_set_team .Guardian_1, .Neutral_Base; + + if( .Guardian_2 == 0 ) + set .Guardian_2, bg_monster(.Neutral_Base,"bat_a02",287,203,"Guardian",1950,"Tierra_BG2::OnGuardian2"); + else + bg_monster_set_team .Guardian_2, .Neutral_Base; + + if( .Guardian_3 == 0 ) + set .Guardian_3, bg_monster(.Neutral_Base,"bat_a02",268,204,"Guardian",1949,"Tierra_BG2::OnGuardian3"); + else + bg_monster_set_team .Guardian_3, .Neutral_Base; + + sleep 10000; + if( $@TierraBG2 != 1 ) end; + + if( .Neutral_Base == $@TierraBG2_id1 ) + bg_monster .Neutral_Base,"bat_a02",273,204,"Guillaume Flag",1912,"Tierra_BG2::OnNeutralBreak"; + else if( .Neutral_Base == $@TierraBG2_id2 ) + bg_monster .Neutral_Base,"bat_a02",273,204,"Croix Flag",1913,"Tierra_BG2::OnNeutralBreak"; + end; + +OnGuardian1: set .Guardian_1, 0; end; +OnGuardian2: set .Guardian_2, 0; end; +OnGuardian3: set .Guardian_3, 0; end; + +OnGuillaumeBreak: + set $@TierraBG2_Victory, 2; + mapannounce "bat_a02","Croix Vintenar Swandery: We destroyed Guillaume's food storehause. We won that! Wow!",1,0xFF0000; + donpcevent "Tierra_BG2::OnStop"; + end; + +OnCroixBreak: + set $@TierraBG2_Victory, 1; + mapannounce "bat_a02","Guillaume Vintenar Axl Rose: We destroyed Croix's food storehause. We won that! Wow!",1,0x0000FF; + donpcevent "Tierra_BG2::OnStop"; + end; + +OnTimer2400000: + mapannounce "bat_a02","Battle of Tierra Gorge will ends in 5 minutes",1,0xF4A460; + end; +OnTimer2640000: + mapannounce "bat_a02","Battle of Tierra Gorge will ends in 1 minute",1,0xF4A460; + end; + +OnTimer2700000: + set $@TierraBG2_Victory, 3; // Draw Game + mapannounce "bat_a02","Battle of Tierra Gorge is over. The time is out, this is a Tie",1,0xF4A460; + donpcevent "Tierra_BG2::OnStop"; + end; + +OnStop: + set $@TierraBG2, 2; + disablenpc "Therapist in battle#tv21"; + disablenpc "Therapist in battle#tv22"; + donpcevent "#gtv2_respawn::OnBGStop"; + donpcevent "#ctv2_respawn::OnBGStop"; + donpcevent "#ntv2_respawn::OnBGStop"; + enablenpc "Croix Vintenar#tv2"; + enablenpc "Guillaume Vintenar#tv2"; + killmonster "bat_a02","Tierra_BG2::OnGuillaumeBreak"; + killmonster "bat_a02","Tierra_BG2::OnCroixBreak"; + killmonster "bat_a02","Tierra_BG2::OnNeutralBreak"; + killmonster "bat_a02","Tierra_BG2::OnGuardian1"; + killmonster "bat_a02","Tierra_BG2::OnGuardian2"; + killmonster "bat_a02","Tierra_BG2::OnGuardian3"; + stopnpctimer; + sleep 3000; + bg_warp $@TierraBG2_id1,"bat_a02",50,374; + bg_warp $@TierraBG2_id2,"bat_a02",42,16; + sleep 3000; + mapannounce "bat_a02","Battle of Tierra Gorge will close in 1 minute!",1,0xF4A460; + initnpctimer; + end; + +OnTimer30000: + if( $@TierraBG2 == 2 ) + mapannounce "bat_a02","Battle of Tierra Valley will close in 30 seconds!",1,0xF4A460; + end; +OnTimer50000: + if( $@TierraBG2 == 2 ) + mapannounce "bat_a02","Battle of Tierra Valley will close in 10 seconds!",1,0xF4A460; + end; + +OnTimer60000: + if( $@TierraBG2 != 2 ) + end; +OnReset: + stopnpctimer; + set .Neutral_Base, 0; + disablenpc "Croix Vintenar#tv2"; + disablenpc "Guillaume Vintenar#tv2"; + disablenpc "Therapist in battle#tv21"; + disablenpc "Therapist in battle#tv22"; + donpcevent "#gtv2_respawn::OnBGStop"; + donpcevent "#gtv2_respawn::OnBGStop"; + donpcevent "#ctv2_respawn::OnBGStop"; + + killmonster "bat_a02","Tierra_BG2::OnGuillaumeBreak"; + killmonster "bat_a02","Tierra_BG2::OnCroixBreak"; + killmonster "bat_a02","Tierra_BG2::OnNeutralBreak"; + killmonster "bat_a02","Tierra_BG2::OnGuardian1"; + killmonster "bat_a02","Tierra_BG2::OnGuardian2"; + killmonster "bat_a02","Tierra_BG2::OnGuardian3"; + donpcevent "Guillaume_TV2B::OnDestroy"; + donpcevent "Croix_TV2B::OnDestroy"; + + set $@TierraBG2_Victory, 0; + if( $@TierraBG2_id1 ) { bg_destroy $@TierraBG2_id1; set $@TierraBG2_id1, 0; } + if( $@TierraBG2_id2 ) { bg_destroy $@TierraBG2_id2; set $@TierraBG2_id2, 0; } + sleep 1000; + mapwarp "bat_a02","bat_room",155,150; + sleep 2000; + maprespawnguildid "bat_a02",0,3; // Just in case someone else + sleep 2000; + set $@TierraBG2, 0; + donpcevent "Tierra_BG2::OnReadyCheck"; // Maybe a game is ready to start + end; +} + +// MapFlags +// ********************************************************************* + +bat_a02 mapflag battleground +bat_a02 mapflag nomemo +bat_a02 mapflag nosave SavePoint +bat_a02 mapflag noteleport +bat_a02 mapflag nowarp +bat_a02 mapflag nowarpto +bat_a02 mapflag noreturn +bat_a02 mapflag nobranch +bat_a02 mapflag nopenalty + +// Other Flags +// ********************************************************************* + +bat_a02,148,85,1 duplicate(Croix camp#bat) Croix camp#bat22 974 +bat_a02,155,85,1 duplicate(Croix camp#bat) Croix camp#bat23 974 +bat_a02,357,75,1 duplicate(Croix camp#bat) Croix camp#bat24 974 +bat_a02,348,74,1 duplicate(Croix camp#bat) Croix camp#bat25 974 +bat_a02,199,49,1 duplicate(Croix camp#bat) Croix camp#bat26 974 +bat_a02,168,16,1 duplicate(Croix camp#bat) Croix camp#bat27 974 +bat_a02,138,12,1 duplicate(Croix camp#bat) Croix camp#bat28 974 +bat_a02,108,35,1 duplicate(Croix camp#bat) Croix camp#bat29 974 +bat_a02,164,308,1 duplicate(Guillaume camp#bat) Guillaume camp#bat23 973 +bat_a02,157,308,1 duplicate(Guillaume camp#bat) Guillaume camp#bat24 973 +bat_a02,359,327,1 duplicate(Guillaume camp#bat) Guillaume camp#bat25 973 +bat_a02,350,326,1 duplicate(Guillaume camp#bat) Guillaume camp#bat26 973 +bat_a02,209,344,1 duplicate(Guillaume camp#bat) Guillaume camp#bat27 973 +bat_a02,173,380,1 duplicate(Guillaume camp#bat) Guillaume camp#bat28 973 +bat_a02,150,380,1 duplicate(Guillaume camp#bat) Guillaume camp#bat29 973 +bat_a02,118,357,1 duplicate(Guillaume camp#bat) Guillaume camp#bat30 973 +bat_a02,119,336,1 duplicate(Guillaume camp#bat) Guillaume camp#bat31 973 + +// Barricades +// ********************************************************************* + +- script Guillaume_TV2B -1,{ + end; + +OnBuild: + for( set .@i, 0; .@i < 16; set .@i, .@i + 1 ) + bg_monster 0,"bat_a02",170+.@i,130,"Barricade",1906,"Guillaume_TV2B::OnWall"; + + setwall "bat_a02",170,130,16,6,1,"bat_a02_g1"; + set .MyMobCount,16; + end; + +OnDestroy: + killmonster "bat_a02","Guillaume_TV2B::OnWall"; + delwall "bat_a02_g1"; + set .MyMobCount,0; + end; + +OnWall: + if( set(.MyMobCount,.MyMobCount - 1) < 1 ) + { + delwall "bat_a02_g1"; + mapannounce "bat_a02","South Gate : The Gate has been Destroy!!",1,0xF4A460; + } + end; +} + +- script Croix_TV2B -1,{ + end; + +OnBuild: + for( set .@i, 0; .@i < 16; set .@i, .@i + 1 ) + bg_monster 0,"bat_a02",186+.@i,266,"Barricade",1906,"Croix_TV2B::OnWall"; + + setwall "bat_a02",186,266,16,6,1,"bat_a02_c1"; + set .MyMobCount,16; + end; + +OnDestroy: + killmonster "bat_a02","Croix_TV2B::OnWall"; + delwall "bat_a02_c1"; + set .MyMobCount,0; + end; + +OnWall: + if( set(.MyMobCount,.MyMobCount - 1) < 1 ) + { + delwall "bat_a02_c1"; + mapannounce "bat_a02","North Gate : A Gate has been Destroy!!",1,0xF4A460; + } + end; +} + +// Battleground rewards +// ********************************************************************* + +bat_a02,45,19,3 script Croix Vintenar#tv2 415,{ + if( $@TierraBG2_Victory ) + { + if( $@TierraBG2_Victory == Bat_Team ) + { // Victory + set .@Reward, 3; + mes "[Swandery]"; + mes "Blessed Croax!!"; + mes "Let's enjoy our glorious victory!"; + mes "" + strcharinfo(0) + ", its a sign reflecting victory"; + close2; + } + else + { // + set .@Reward, 1; + mes "[Swandery]"; + mes "Oh, " + strcharinfo(0) + ". Don't be sad."; + mes "Even though we didn't win, we did our best."; + mes "This is a Royal gift from Croix, and please don't forget this battle. We can win the next."; + close2; + } + + set Tierra_BG_Tick, gettimetick(2) + 300; + getitem 7828, .@Reward; + bg_leave; + warp "bat_room",155,150; + end; + } + end; +} + +bat_a02,53,377,3 script Guillaume Vintenar#tv2 419,{ + if( $@TierraBG2_Victory ) + { + if( $@TierraBG2_Victory == Bat_Team ) + { // Victory + set .@Reward, 3; + mes "[Swandery]"; + mes "Blessed Guillaume!!"; + mes "Let's enjoy our glorious victory!"; + mes "" + strcharinfo(0) + ", its a sign reflecting victory"; + close2; + } + else + { // + set .@Reward, 1; + mes "[Swandery]"; + mes "You lost, but you're dedicated to this battle."; + mes "This is a reward for your great dedication by Guillaume Marollo!"; + mes "Just take this defeat a lesson, and later you would definitely learn."; + close2; + } + + set Tierra_BG_Tick, gettimetick(2) + 300; + getitem 7828, .@Reward; + bg_leave; + warp "bat_room",155,150; + end; + } + end; +} + +// Battleground Therapist +// ********************************************************************* + +bat_a02,60,216,3 script Ghost#tv23 950,{ + mes "[Ghost in valley]"; + mes "Boo...Boo..."; + specialeffect2 312; + close; +} + +bat_a02,53,377,3 script Therapist in battle#tv22 95,{ + mes "[Therapist in battle]"; + mes "Just close your eyes, and take a deep breathe."; + mes "You can be free from pain."; + specialeffect2 312; + close; +} + +bat_a02,45,18,3 script Therapist in battle#tv21 95,{ + mes "[Therapist in battle]"; + mes "Just close your eyes, and take a deep breathe."; + mes "You can be free from pain."; + specialeffect2 312; + close; +} + +// Battleground Respawn +// ********************************************************************* + +bat_a02,57,213,0 script #ntv2_respawn 139,{ + end; + +OnBGStart: + initnpctimer; + end; + +OnBGStop: + stopnpctimer; + end; + +OnTimer19000: + misceffect 83; + end; + +OnTimer20000: + areapercentheal "bat_a02",52,208,61,217,100,100; + areawarp "bat_a02",52,208,61,217,"bat_a02",301,208; + initnpctimer; + end; +} + +bat_a02,50,374,0 script #gtv2_respawn 139,{ + end; + +OnBGStart: + initnpctimer; + end; + +OnBGStop: + stopnpctimer; + end; + +OnTimer24000: + misceffect 83; + end; + +OnTimer25000: + areapercentheal "bat_a02",46,370,54,378,100,100; + areawarp "bat_a02",46,370,54,378,"bat_a02",354,340; + initnpctimer; + end; +} + +bat_a02,42,16,0 script #ctv2_respawn 139,{ + end; + +OnBGStart: + initnpctimer; + end; + +OnBGStop: + stopnpctimer; + end; + +OnTimer24000: + misceffect 83; + end; + +OnTimer25000: + areapercentheal "bat_a02",38,12,47,21,100,100; + areawarp "bat_a02",38,12,47,21,"bat_a02",354,57; + initnpctimer; + end; +} diff --git a/npc/cities/moscovia.txt b/npc/cities/moscovia.txt index 8f23acdad..456ce2851 100644 --- a/npc/cities/moscovia.txt +++ b/npc/cities/moscovia.txt @@ -1,136 +1,136 @@ -//===== eAthena Script =======================================
-//= Moscovia Town
-//===== By: ==================================================
-//= Kisuka
-//===== Current Version: =====================================
-//= 1.1
-//===== Compatible With: =====================================
-//= eAthena SVN
-//===== Description: =========================================
-//= Moscovia Town Script
-//===== Additional Comments: =================================
-//= 1.0 First Version. [Kisuka]
-//= 1.1 Removed villagers (they are part of a quest). [Kisuka]
-//============================================================
-
-// Moscovia Transportation
-//============================================================
-alberta,245,66,4 script Moscovia P.R. Officer#1 960,{
- mes "[Moscovia P.R. Officer]";
- mes "Moscovia! Do you know Moscovia?";
- mes "the paradise spreading on the endless seas...";
- mes "Welcome to Moscovia";
- mes "It's adventurous and mystic.";
- next;
- switch(select("About Moscovia...:Go to Moscovia.:Cancel")) {
- case 1:
- mes "[Moscovia P.R. Officer]";
- mes "Moscovia is a beautiful kingdom";
- mes "on an island located north of Rune";
- mes "Midgarts.";
- next;
- mes "[Moscovia P.R. Officer]";
- mes "I'm sure that you will be";
- mes "absolutely fascinated";
- mes "by Moscovia's beautiful scenery";
- mes "and gorgeous palace.";
- next;
- mes "[Moscovia P.R. Officer]";
- mes "Now that our long winter has";
- mes "passed,";
- mes "I'm happy that I can now show you";
- mes "our gorgeous hometown.";
- next;
- mes "[Moscovia P.R. Officer]";
- mes "If you feel like visiting Moscovia";
- mes "take the chance now!";
- mes "I'll help you to have a nice trip";
- mes "to Moscovia!";
- close;
-
- case 2:
- mes "[Moscovia P.R. Officer]";
- mes "Ok then, let us start now.";
- mes "You should pay me 10,000 zeny";
- mes "to go to Moscovia.";
- mes "But when you come back,";
- mes "you don't have to pay.";
- next;
- mes "[Moscovia P.R. Officer]";
- mes "Can we leave now?";
- next;
- if (select("Let's go!:Cancel") == 2) {
- mes "[Moscovia P.R. Officer]";
- mes "If you're too busy now,";
- mes "please tell me again whenever you want.";
- mes "I'm always ready to guide anyone to Moscovia.";
- close;
- }
- if (Zeny < 10000) {
- mes "[Moscovia P.R. Officer]";
- mes "I'm sorry but you don't have";
- mes "enough zeny now";
- mes "You need 10,000 zeny";
- mes "to go to Moscovia";
- mes "Thank you.";
- close;
- }else{
- mes "[Moscovia P.R. Officer]";
- mes "Ok then, we're leaving now.";
- close2;
- set Zeny,Zeny - 10000;
- warp "moscovia",163,55;
- end;
- }
- case 3:
- mes "[Moscovia P.R. Officer]";
- mes "If you're too busy now,";
- mes "please tell me again whenever you want.";
- mes "I'm always ready to guide anyone to Moscovia.";
- close;
- }
-}
-
-moscovia,166,53,4 script Moscovia P.R. Officer#2 960,{
- mes "[Moscovia P.R. Officer]";
- mes "How was your trip?";
- mes "Do you have good memories from Moscovia?";
- mes "A ship is now leaving";
- mes "for Rune Midgarts.";
- next;
- if (select("Return to Alberta:Cancel") == 2) {
- mes "[Moscovia P.R. Officer]";
- mes "If you want to see more";
- mes "please take your time.";
- close;
- }
- mes "[Moscovia P.R. Officer]";
- mes "Please come and visit soon.";
- mes "Ok then, Let's get going.";
- close2;
- warp "alberta",243,67;
- end;
-}
-
-// Generic Moscovia NPCs
-//============================================================
-moscovia,253,166,4 script Soldier#mosk1 966,{
- mes "[Soldier]";
- mes "Our dear Csar Alexsay III is in the palace.";
- mes "He rules over Moscovia.";
- mes "Please be careful not to cause him any trouble.";
- close;
-}
-
-// Moscovia Palace
-//============================================================
-- script Soldier#mosk::MoscSoldier 966,{
- mes "[Soldier]";
- mes "Please be silent or the Csar will be angry.";
- close;
-}
-
-mosk_in,118,66,5 duplicate(MoscSoldier) Soldier#mosk02 966
-mosk_in,133,110,3 duplicate(MoscSoldier) Soldier#mosk03 966
-mosk_in,133,73,3 duplicate(MoscSoldier) Soldier#mosk04 966
+//===== eAthena Script ======================================= +//= Moscovia Town +//===== By: ================================================== +//= Kisuka +//===== Current Version: ===================================== +//= 1.1 +//===== Compatible With: ===================================== +//= eAthena SVN +//===== Description: ========================================= +//= Moscovia Town Script +//===== Additional Comments: ================================= +//= 1.0 First Version. [Kisuka] +//= 1.1 Removed villagers (they are part of a quest). [Kisuka] +//============================================================ + +// Moscovia Transportation +//============================================================ +alberta,245,66,4 script Moscovia P.R. Officer#1 960,{ + mes "[Moscovia P.R. Officer]"; + mes "Moscovia! Do you know Moscovia?"; + mes "the paradise spreading on the endless seas..."; + mes "Welcome to Moscovia"; + mes "It's adventurous and mystic."; + next; + switch(select("About Moscovia...:Go to Moscovia.:Cancel")) { + case 1: + mes "[Moscovia P.R. Officer]"; + mes "Moscovia is a beautiful kingdom"; + mes "on an island located north of Rune"; + mes "Midgarts."; + next; + mes "[Moscovia P.R. Officer]"; + mes "I'm sure that you will be"; + mes "absolutely fascinated"; + mes "by Moscovia's beautiful scenery"; + mes "and gorgeous palace."; + next; + mes "[Moscovia P.R. Officer]"; + mes "Now that our long winter has"; + mes "passed,"; + mes "I'm happy that I can now show you"; + mes "our gorgeous hometown."; + next; + mes "[Moscovia P.R. Officer]"; + mes "If you feel like visiting Moscovia"; + mes "take the chance now!"; + mes "I'll help you to have a nice trip"; + mes "to Moscovia!"; + close; + + case 2: + mes "[Moscovia P.R. Officer]"; + mes "Ok then, let us start now."; + mes "You should pay me 10,000 zeny"; + mes "to go to Moscovia."; + mes "But when you come back,"; + mes "you don't have to pay."; + next; + mes "[Moscovia P.R. Officer]"; + mes "Can we leave now?"; + next; + if (select("Let's go!:Cancel") == 2) { + mes "[Moscovia P.R. Officer]"; + mes "If you're too busy now,"; + mes "please tell me again whenever you want."; + mes "I'm always ready to guide anyone to Moscovia."; + close; + } + if (Zeny < 10000) { + mes "[Moscovia P.R. Officer]"; + mes "I'm sorry but you don't have"; + mes "enough zeny now"; + mes "You need 10,000 zeny"; + mes "to go to Moscovia"; + mes "Thank you."; + close; + }else{ + mes "[Moscovia P.R. Officer]"; + mes "Ok then, we're leaving now."; + close2; + set Zeny,Zeny - 10000; + warp "moscovia",163,55; + end; + } + case 3: + mes "[Moscovia P.R. Officer]"; + mes "If you're too busy now,"; + mes "please tell me again whenever you want."; + mes "I'm always ready to guide anyone to Moscovia."; + close; + } +} + +moscovia,166,53,4 script Moscovia P.R. Officer#2 960,{ + mes "[Moscovia P.R. Officer]"; + mes "How was your trip?"; + mes "Do you have good memories from Moscovia?"; + mes "A ship is now leaving"; + mes "for Rune Midgarts."; + next; + if (select("Return to Alberta:Cancel") == 2) { + mes "[Moscovia P.R. Officer]"; + mes "If you want to see more"; + mes "please take your time."; + close; + } + mes "[Moscovia P.R. Officer]"; + mes "Please come and visit soon."; + mes "Ok then, Let's get going."; + close2; + warp "alberta",243,67; + end; +} + +// Generic Moscovia NPCs +//============================================================ +moscovia,253,166,4 script Soldier#mosk1 966,{ + mes "[Soldier]"; + mes "Our dear Csar Alexsay III is in the palace."; + mes "He rules over Moscovia."; + mes "Please be careful not to cause him any trouble."; + close; +} + +// Moscovia Palace +//============================================================ +- script Soldier#mosk::MoscSoldier 966,{ + mes "[Soldier]"; + mes "Please be silent or the Csar will be angry."; + close; +} + +mosk_in,118,66,5 duplicate(MoscSoldier) Soldier#mosk02 966 +mosk_in,133,110,3 duplicate(MoscSoldier) Soldier#mosk03 966 +mosk_in,133,73,3 duplicate(MoscSoldier) Soldier#mosk04 966 mosk_in,113,124,5 duplicate(MoscSoldier) Soldier#mosk05 966
\ No newline at end of file diff --git a/npc/events/MemorialDay_2008.txt b/npc/events/MemorialDay_2008.txt index cf8eaa8ad..cbecbdae8 100644 --- a/npc/events/MemorialDay_2008.txt +++ b/npc/events/MemorialDay_2008.txt @@ -1,518 +1,518 @@ -//===== eAthena Script =======================================
-//= In Memory of Heroes (iRO Memorial Day 2008)
-//===== By: ==================================================
-//= Kisuka
-//===== Current Version: =====================================
-//= 1.1
-//===== Compatible With: =====================================
-//= eAthena SVN
-//===== Description: =========================================
-//
-//===== Additional Comments: =================================
-//= 1.0 First version. [Kisuka]
-//= 1.1 Many Many Fixes. [Kisuka]
-//============================================================
-
-// ================== Lauds ======================
-// ===============================================
-prontera,182,214,4 script Lauds#Memorial 58,{
- if(Memorial08 < 1) {
- mes "[Mad Sago Lauds]";
- mes "Hey, yo!";
- mes "What are you doing there!?";
- next;
- mes "[Mad Sago Lauds]";
- mes "Do you know what day it is!?";
- mes "It's a very important date!";
- mes "A very important date to remember!";
- next;
- mes "[Mad Sago Lauds]";
- mes "What is this!?";
- emotion 0;
- next;
- mes "[Mad Sago Lauds]";
- mes "Where is your towel!?";
- next;
- mes "[" + strcharinfo(0) + "]";
- mes "My what?";
- next;
- mes "[Mad Sago Lauds]";
- mes "How are you supposed to go on your trip";
- mes "without your towel!?";
- next;
- mes "[Mad Sago Lauds]";
- mes "If you think this is just another";
- mes "holiday,";
- mes "I'm not going to waste my breath.";
- mes "But if you like to pay a tribute to";
- mes "great soldiers,";
- mes "I will help you ready yourself";
- next;
- if (select("I guess so...:Are you crazy or something?") == 2) {
- mes "[Mad Sago Lauds]";
- mes "Fine, be unprepared!";
- next;
- mes "[Mad Sago Lauds]";
- mes "";
- mes "^FF0000YOU WILL RUE THE DAY!^000000";
- close;
- }
- mes "[Mad Sago Lauds]";
- mes "Great!";
- mes "Then listen to me carefully.";
- next;
- mes "[Mad Sago Lauds]";
- mes "Now before you can pay tribute to";
- mes "the fallen soldiers";
- mes "you must be properly equipped";
- mes "Without your towel you will be";
- mes "lost!";
- mes "If you bring me the materials, I can make you a towel.";
- next;
- mes "[Mad Sago Lauds]";
- mes "Listen closely.";
- mes "Bring me ^FF000030 Fabric and 20 Fluffs^000000.";
- set Memorial08,1;
- close;
- }
-
- else if(Memorial08 == 1) {
- if (countitem(1059) < 30 || countitem(914) < 20) {
- mes "[Mad Sago Lauds]";
- mes "What are these? They aren't";
- mes "enough?!";
- mes "*Sigh* Do I really have to tell you";
- mes "again?!";
- mes "Bring me ^FF000030 Fabric and 20 Fluffs^000000.";
- close;
- }else{
- mes "***Mad Sago Lauds appears to be";
- mes "muttering to himself***";
- next;
- mes "[Mad Sago Lauds]";
- mes "So, did you bring the towel";
- mes "materials?";
- next;
- mes "[Mad Sago Lauds]";
- mes "Excellent; you've brought them";
- mes "all.";
- mes "Then I shall make you a Towel of";
- mes "Memory as I promised.";
- mes "Give me a moment.";
- next;
- mes "[Mad Sago Lauds]";
- mes "There you go!";
- delitem 1059,30;
- delitem 914,20;
- getitem 6025,1;
- getnameditem 6025," + strcharinfo(0) + ";
- set Memorial08,2;
- close;
- }
- }
-
- else if(Memorial08 == 2) {
- mes "[Mad Sago Lauds]";
- mes "Ah, you have fluffy new towel now";
- mes "I even put your name on it";
- next;
- mes "[Mad Sago Lauds]";
- mes "Say, how do you like to go";
- mes "on a journey to pay a tribute to";
- mes "Memorial Day?";
- next;
- if (select("Sure.:No, I'm Busy.") == 2) {
- mes "[Mad Sago Lauds]";
- mes "Don't come crying to me";
- mes "if someone decides to";
- mes "build a highway through";
- mes "your home!";
- close;
- }
- mes "[Mad Sago Lauds]";
- mes "Good. By the way, do you even know";
- mes "what the towel is for?";
- next;
- mes "[Mad Sago Lauds]";
- mes "It seems you're just carrying it";
- mes "without understanding its meaning.";
- mes "What a shame! You should go speak";
- mes "to ^FF0000Grast in Prontera^000000.";
- set Memorial08,3;
- close;
- }
-
- else if(Memorial08 == 3) {
- mes "[Mad Sago Lauds]";
- mes "What are you still doing here? I";
- mes "told you to go speak to Grast in";
- mes "Prontera!";
- close;
- }
-
- else if(Memorial08 == 4 || Memorial08 == 5 || Memorial08 == 6) {
- mes "[Mad Sago Lauds]";
- mes "Go help Grast, and then come back.";
- close;
- }
-
- else if(Memorial08 == 7) {
- mes "[Mad Sago Lauds]";
- mes "Oh, you've brought them all.";
- mes "Hahaha!";
- mes "HAHAHAHAHAHA!!!! cough cough";
- next;
- mes "[Mad Sago Lauds]";
- mes "Please give them to me. Thank you";
- mes "for your hard work, by the way.";
- mes "Say, have you learned anything from the journey?";
- mes "Now is to go visit the plaque at 12";
- mes "o'clock direction in Prontera.";
- next;
- mes "[Mad Sago Lauds]";
- mes "What do you mean you were just";
- mes "there?";
- next;
- mes "[Mad Sago Lauds]";
- mes "What? Why are you giving me your";
- mes "garbage!";
- mes "Those items are not useful to me at all";
- mes "You should be going to the plaque!";
- set Memorial08,8;
- close;
- }
-
- else if(Memorial08 == 8) {
- mes "[Mad Sago Lauds]";
- mes "Stop trying to give me your garbage!";
- mes "Go to the plaque at 12 o'clock";
- mes "direction in Prontera for your journey!";
- close;
- }
-
- else if(Memorial08 >= 9) {
- set .@RandomMsg, rand(1,5);
- if(.@RandomMsg == 1) {
- mes "[Mad Sago Lauds]";
- mes "Don't panic!";
- emotion 0;
- close;
- }
- else if(.@RandomMsg == 2) {
- mes "[Mad Sago Lauds]";
- mes "Life... is like a grapefruit.";
- mes "It's orange and squishy, and has a";
- mes "few pips in it,";
- mes "and some folks have half a one for";
- mes "breakfast.";
- close;
- }
- else if(.@RandomMsg == 3) {
- mes "[Mad Sago Lauds]";
- mes "There was a point to this story,";
- mes "but it has temporarily escaped the";
- mes "chronicler's mind.";
- close;
- }
- else if(.@RandomMsg == 4) {
- mes "[Mad Sago Lauds]";
- mes "42!";
- close;
- }
- else if(.@RandomMsg == 5) {
- mes "[Mad Sago Lauds]";
- mes "It is a mistake to think you can";
- mes "solve any major problems just with";
- mes "potatoes.";
- close;
- }
- }
-}
-
-// ============== Memorial Plaque ================
-// ===============================================
-prontera,153,286,4 script Memorial Plaque#Memorial 857,{
- if(Memorial08 < 8) {
- mes "[" + strcharinfo(0) + "]";
- mes "- It's a dusty old plaque.-";
- close;
- }
-
- else if(Memorial08 == 8) {
- mes "[" + strcharinfo(0) + "]";
- mes "- It's a dusty old plaque.-";
- mes "'This must be what Lauds was talking about.'";
- mes "'Let's dust it off with the towel.'";
- next;
- set Memorial08,9;
- getexp 93750,43750;
- goto L_CleanPlaque;
- }
-
- else if(Memorial08 >= 9) {
- goto L_CleanPlaque;
- }
-
- L_CleanPlaque:
- mes "- You see a message from the cleaned plaque.";
- next;
- mes "-Although no sculptured marble";
- mes "should rise to their memory,-";
- mes "-nor engraved stone bear record of";
- mes "their deeds,-";
- mes "-yet will their remembrance be as";
- mes "lasting as the land they honored.-";
- mes "-Daniel Webster-";
- if(Memorial08 == 9) {
- getexp 93750,43750;
- }
- next;
- mes "-There's another message.-";
- next;
- mes "-I may not have gone where I";
- mes "intended to go,-";
- mes "-but I think I have ended up where";
- mes "I needed to be.-";
- mes "- Douglas Adams.-";
- if(Memorial08 == 9) {
- getexp 93750,43750;
- }
- next;
- mes "-This is the last message.-";
- next;
- mes "-True heroism is remarkably sober,";
- mes "very undramatic.-";
- mes "-It is not the urge to surpass all";
- mes "others at whatever cost,-";
- mes "- but the urge to serve others at";
- mes "whatever cost. -";
- mes "- Arthur Ashe -";
- if(Memorial08 == 9) {
- getexp 93750,43750;
- set Memorial08,10;
- }
- close;
-}
-
-
-// ==================== Grast ====================
-// ===============================================
-prontera,150,270,4 script Grast#Memorial 900,{
- if(Memorial08 < 3) {
- mes "[Grast]";
- mes "Memorial Day is a sad and yet";
- mes "glorious day.";
- mes "I wonder how many people remember";
- mes "them...";
- close;
- }
-
- else if(Memorial08 == 3) {
- mes "[Grast]";
- mes "Oh, isn't that a Towel of Memory?";
- mes "I'm so glad to meet someone who";
- mes "understands the meaning of Memorial Day.";
- next;
- mes "[Grast]";
- mes "It is very important to know what";
- mes "we're celebrating today, don't you think?";
- next;
- mes "[Grast]";
- mes "If you like to go on a journey to";
- mes "pay a tribute to Memorial Day,";
- mes "you should bring me some materials";
- mes "I ask.";
- next;
- mes "[Grast]";
- mes "Please bring me ^FF0000one of each Red";
- mes "Potion, Green Potion, Awakening";
- mes "Potion, and Butterfly Wing^000000.";
- mes "I'll be waiting for your return.";
- set Memorial08,4;
- close;
- }
-
- else if(Memorial08 == 4) {
- if (countitem(501) < 1 || countitem(506) < 1 || countitem(656) < 1 || countitem(602) < 1) {
- mes "[Grast]";
- mes "Oops, you haven't brought all";
- mes "materials.";
- mes "Please make sure you need to bring me";
- mes " ^FF0000one of each Red Potion, Green";
- mes "Potion, Awakening Potion, and";
- mes "Butteryfly Wing^000000.";
- next;
- mes "[Grast]";
- mes "You'll have to bring me more";
- mes "materials afterwards.";
- mes "If you feel too burdened to gather";
- mes "them all,";
- mes "I can provide you all the";
- mes "materials.";
- next;
- if (select("I'll gather the rest.:Give me the materials.") == 2) {
- goto L_GiveUp;
- }
- goto L_Continue;
- }else{
- mes "[Grast]";
- mes "Oh, you've brought the materials I asked.";
- next;
- mes "[Grast]";
- mes "Hmm, you will need some more things still...";
- next;
- mes "[Grast]";
- mes "Please bring me ^FF0000one of each Trap,";
- mes "Yggdrasil Leaf, Blue Gemstone,";
- mes "Crystal Mirror, Meat, and Carrot.^000000";
- mes "I'll be waiting for your return.";
- set Memorial08,5;
- close;
- }
- }
-
- else if(Memorial08 == 5) {
- if (countitem(1065) < 1 || countitem(610) < 1 || countitem(717) < 1 || countitem(747) < 1 || countitem(517) < 1 || countitem(515) < 1) {
- mes "[Grast]";
- mes "Oops, you haven't brought all materials.";
- mes "Please make sure you'll have to bring me";
- mes " ^FF0000one of each Trap, Yggdrasil Leaf,";
- mes "Blue Gemstone, Crystal Mirror,";
- mes "Meat, and Carrot^000000.";
- next;
- mes "[Grast]";
- mes "You'll have to bring me more";
- mes "materials afterwards.";
- mes "If you feel too burdened to gather them all,";
- mes "I can provide you all the materials.";
- next;
- if (select("I'll gather the rest.:Give me the materials.") == 2) {
- goto L_GiveUp;
- }
- goto L_Continue;
- }else{
- mes "[Grast]";
- mes "Oh, you've brought everything I asked.";
- mes "Hmm, I think you need just a little bit more.";
- next;
- mes "[Grast]";
- mes "Please bring me ^FF0000one of each Pet";
- mes "Incubator, Firecracker, Poring";
- mes "Doll, and Bouquet^000000.";
- set Memorial08,6;
- close;
- }
- }
-
- else if(Memorial08 == 6) {
- if (countitem(643) < 1 || countitem(12018) < 1 || countitem(741) < 1 || countitem(745) < 1) {
- mes "[Grast]";
- mes "Oops, you haven't brought all materials.";
- mes "Please make sure you need to bring me";
- mes " ^FF0000one of each Pet Incubator,";
- mes "Firecracker, Poring Doll and Bouquet";
- next;
- mes "[Grast]";
- mes "They are the last batch of materials.";
- mes "If you feel too burdened to gather them all,";
- mes "I can provide you all the materials.";
- next;
- mes "[Grast]";
- mes "If I provide you all materials, however,";
- mes "I won't have to thank you for your service.";
- mes "It's your call, " + strcharinfo(0) + ".";
- next;
- if (select("I'll gather the rest.:Give me the materials.") == 2) {
- goto L_GiveUp;
- }
- goto L_Continue;
- }else{
- mes "[Grast]";
- mes "Have you brought the materials I asked?";
- mes "Ah, thank you for your hard work;";
- mes "you've brought all of them.";
- next;
- mes "[Grast]";
- mes "I hope you'll learn a valuable";
- mes "lesson while gathering these materials.";
- mes "I like to give you a small gift for your service.";
- next;
- mes "[Grast]";
- mes "You see, I have two different gifts";
- mes "in my each hand.";
- mes "A best thing would be giving you";
- mes "both of them, but...";
- mes "How do you like to test your luck, " + strcharinfo(0) + "?";
- next;
- mes "[Grast]";
- mes "Okay, which hand would you like to pick?";
- next;
- if (select("Left hand.:Right hand.") == 2) {
- mes "[Grast]";
- mes "You've selected my right hand.";
- mes "Here's the gift for you.";
- mes "Now, please bring all these";
- mes "materials to Lauds.";
- set Memorial08, 7;
- getitem 617,1;
- close;
- }
- mes "[Grast]";
- mes "You've selected my left hand.";
- mes "Here's the gift for you.";
- mes "Now, please bring all these";
- mes "materials to Lauds.";
- set Memorial08, 7;
- getitem 12109,1;
- close;
- }
- }
-
- else if(Memorial08 == 7) {
- mes "[Grast]";
- mes "Have you met Lauds?";
- mes "I hope you'll remember your freedom";
- mes "and happiness";
- mes "are built on thousands of lives";
- mes "sacrificed in war.";
- close;
- }
-
- else if(Memorial08 >= 8) {
- mes "[Grast]";
- mes "A towel is about the most massively";
- mes "useful thing an adventurer can have.";
- close;
- }
-
- L_GiveUp:
- mes "[Grast]";
- mes "Oh, I see. I guess you're quite";
- mes "busy nowadays, huh?";
- mes "No problem; I'll give you all the";
- mes "supplies...";
- next;
- mes "[Grast]";
- mes "There you go.";
- mes "I crushed all the items together";
- mes "into a more compact form for you";
- mes "You can thank me later for that";
- mes "extra service.";
- mes "Please bring them to Lauds.";
- set Memorial08,7;
- getitem 7126,1;
- next;
- mes "[Grast]";
- mes "By the way, he had an unfortunate";
- mes "accident, and has kind of lost his";
- mes "mind.";
- mes "Please don't be alarmed even if he";
- mes "starts babbling.";
- close;
-
- L_Continue:
- mes "[Grast]";
- mes "That's a good idea.";
- mes "Then I'll be waiting for your return.";
- close;
+//===== eAthena Script ======================================= +//= In Memory of Heroes (iRO Memorial Day 2008) +//===== By: ================================================== +//= Kisuka +//===== Current Version: ===================================== +//= 1.1 +//===== Compatible With: ===================================== +//= eAthena SVN +//===== Description: ========================================= +// +//===== Additional Comments: ================================= +//= 1.0 First version. [Kisuka] +//= 1.1 Many Many Fixes. [Kisuka] +//============================================================ + +// ================== Lauds ====================== +// =============================================== +prontera,182,214,4 script Lauds#Memorial 58,{ + if(Memorial08 < 1) { + mes "[Mad Sago Lauds]"; + mes "Hey, yo!"; + mes "What are you doing there!?"; + next; + mes "[Mad Sago Lauds]"; + mes "Do you know what day it is!?"; + mes "It's a very important date!"; + mes "A very important date to remember!"; + next; + mes "[Mad Sago Lauds]"; + mes "What is this!?"; + emotion 0; + next; + mes "[Mad Sago Lauds]"; + mes "Where is your towel!?"; + next; + mes "[" + strcharinfo(0) + "]"; + mes "My what?"; + next; + mes "[Mad Sago Lauds]"; + mes "How are you supposed to go on your trip"; + mes "without your towel!?"; + next; + mes "[Mad Sago Lauds]"; + mes "If you think this is just another"; + mes "holiday,"; + mes "I'm not going to waste my breath."; + mes "But if you like to pay a tribute to"; + mes "great soldiers,"; + mes "I will help you ready yourself"; + next; + if (select("I guess so...:Are you crazy or something?") == 2) { + mes "[Mad Sago Lauds]"; + mes "Fine, be unprepared!"; + next; + mes "[Mad Sago Lauds]"; + mes ""; + mes "^FF0000YOU WILL RUE THE DAY!^000000"; + close; + } + mes "[Mad Sago Lauds]"; + mes "Great!"; + mes "Then listen to me carefully."; + next; + mes "[Mad Sago Lauds]"; + mes "Now before you can pay tribute to"; + mes "the fallen soldiers"; + mes "you must be properly equipped"; + mes "Without your towel you will be"; + mes "lost!"; + mes "If you bring me the materials, I can make you a towel."; + next; + mes "[Mad Sago Lauds]"; + mes "Listen closely."; + mes "Bring me ^FF000030 Fabric and 20 Fluffs^000000."; + set Memorial08,1; + close; + } + + else if(Memorial08 == 1) { + if (countitem(1059) < 30 || countitem(914) < 20) { + mes "[Mad Sago Lauds]"; + mes "What are these? They aren't"; + mes "enough?!"; + mes "*Sigh* Do I really have to tell you"; + mes "again?!"; + mes "Bring me ^FF000030 Fabric and 20 Fluffs^000000."; + close; + }else{ + mes "***Mad Sago Lauds appears to be"; + mes "muttering to himself***"; + next; + mes "[Mad Sago Lauds]"; + mes "So, did you bring the towel"; + mes "materials?"; + next; + mes "[Mad Sago Lauds]"; + mes "Excellent; you've brought them"; + mes "all."; + mes "Then I shall make you a Towel of"; + mes "Memory as I promised."; + mes "Give me a moment."; + next; + mes "[Mad Sago Lauds]"; + mes "There you go!"; + delitem 1059,30; + delitem 914,20; + getitem 6025,1; + getnameditem 6025," + strcharinfo(0) + "; + set Memorial08,2; + close; + } + } + + else if(Memorial08 == 2) { + mes "[Mad Sago Lauds]"; + mes "Ah, you have fluffy new towel now"; + mes "I even put your name on it"; + next; + mes "[Mad Sago Lauds]"; + mes "Say, how do you like to go"; + mes "on a journey to pay a tribute to"; + mes "Memorial Day?"; + next; + if (select("Sure.:No, I'm Busy.") == 2) { + mes "[Mad Sago Lauds]"; + mes "Don't come crying to me"; + mes "if someone decides to"; + mes "build a highway through"; + mes "your home!"; + close; + } + mes "[Mad Sago Lauds]"; + mes "Good. By the way, do you even know"; + mes "what the towel is for?"; + next; + mes "[Mad Sago Lauds]"; + mes "It seems you're just carrying it"; + mes "without understanding its meaning."; + mes "What a shame! You should go speak"; + mes "to ^FF0000Grast in Prontera^000000."; + set Memorial08,3; + close; + } + + else if(Memorial08 == 3) { + mes "[Mad Sago Lauds]"; + mes "What are you still doing here? I"; + mes "told you to go speak to Grast in"; + mes "Prontera!"; + close; + } + + else if(Memorial08 == 4 || Memorial08 == 5 || Memorial08 == 6) { + mes "[Mad Sago Lauds]"; + mes "Go help Grast, and then come back."; + close; + } + + else if(Memorial08 == 7) { + mes "[Mad Sago Lauds]"; + mes "Oh, you've brought them all."; + mes "Hahaha!"; + mes "HAHAHAHAHAHA!!!! cough cough"; + next; + mes "[Mad Sago Lauds]"; + mes "Please give them to me. Thank you"; + mes "for your hard work, by the way."; + mes "Say, have you learned anything from the journey?"; + mes "Now is to go visit the plaque at 12"; + mes "o'clock direction in Prontera."; + next; + mes "[Mad Sago Lauds]"; + mes "What do you mean you were just"; + mes "there?"; + next; + mes "[Mad Sago Lauds]"; + mes "What? Why are you giving me your"; + mes "garbage!"; + mes "Those items are not useful to me at all"; + mes "You should be going to the plaque!"; + set Memorial08,8; + close; + } + + else if(Memorial08 == 8) { + mes "[Mad Sago Lauds]"; + mes "Stop trying to give me your garbage!"; + mes "Go to the plaque at 12 o'clock"; + mes "direction in Prontera for your journey!"; + close; + } + + else if(Memorial08 >= 9) { + set .@RandomMsg, rand(1,5); + if(.@RandomMsg == 1) { + mes "[Mad Sago Lauds]"; + mes "Don't panic!"; + emotion 0; + close; + } + else if(.@RandomMsg == 2) { + mes "[Mad Sago Lauds]"; + mes "Life... is like a grapefruit."; + mes "It's orange and squishy, and has a"; + mes "few pips in it,"; + mes "and some folks have half a one for"; + mes "breakfast."; + close; + } + else if(.@RandomMsg == 3) { + mes "[Mad Sago Lauds]"; + mes "There was a point to this story,"; + mes "but it has temporarily escaped the"; + mes "chronicler's mind."; + close; + } + else if(.@RandomMsg == 4) { + mes "[Mad Sago Lauds]"; + mes "42!"; + close; + } + else if(.@RandomMsg == 5) { + mes "[Mad Sago Lauds]"; + mes "It is a mistake to think you can"; + mes "solve any major problems just with"; + mes "potatoes."; + close; + } + } +} + +// ============== Memorial Plaque ================ +// =============================================== +prontera,153,286,4 script Memorial Plaque#Memorial 857,{ + if(Memorial08 < 8) { + mes "[" + strcharinfo(0) + "]"; + mes "- It's a dusty old plaque.-"; + close; + } + + else if(Memorial08 == 8) { + mes "[" + strcharinfo(0) + "]"; + mes "- It's a dusty old plaque.-"; + mes "'This must be what Lauds was talking about.'"; + mes "'Let's dust it off with the towel.'"; + next; + set Memorial08,9; + getexp 93750,43750; + goto L_CleanPlaque; + } + + else if(Memorial08 >= 9) { + goto L_CleanPlaque; + } + + L_CleanPlaque: + mes "- You see a message from the cleaned plaque."; + next; + mes "-Although no sculptured marble"; + mes "should rise to their memory,-"; + mes "-nor engraved stone bear record of"; + mes "their deeds,-"; + mes "-yet will their remembrance be as"; + mes "lasting as the land they honored.-"; + mes "-Daniel Webster-"; + if(Memorial08 == 9) { + getexp 93750,43750; + } + next; + mes "-There's another message.-"; + next; + mes "-I may not have gone where I"; + mes "intended to go,-"; + mes "-but I think I have ended up where"; + mes "I needed to be.-"; + mes "- Douglas Adams.-"; + if(Memorial08 == 9) { + getexp 93750,43750; + } + next; + mes "-This is the last message.-"; + next; + mes "-True heroism is remarkably sober,"; + mes "very undramatic.-"; + mes "-It is not the urge to surpass all"; + mes "others at whatever cost,-"; + mes "- but the urge to serve others at"; + mes "whatever cost. -"; + mes "- Arthur Ashe -"; + if(Memorial08 == 9) { + getexp 93750,43750; + set Memorial08,10; + } + close; +} + + +// ==================== Grast ==================== +// =============================================== +prontera,150,270,4 script Grast#Memorial 900,{ + if(Memorial08 < 3) { + mes "[Grast]"; + mes "Memorial Day is a sad and yet"; + mes "glorious day."; + mes "I wonder how many people remember"; + mes "them..."; + close; + } + + else if(Memorial08 == 3) { + mes "[Grast]"; + mes "Oh, isn't that a Towel of Memory?"; + mes "I'm so glad to meet someone who"; + mes "understands the meaning of Memorial Day."; + next; + mes "[Grast]"; + mes "It is very important to know what"; + mes "we're celebrating today, don't you think?"; + next; + mes "[Grast]"; + mes "If you like to go on a journey to"; + mes "pay a tribute to Memorial Day,"; + mes "you should bring me some materials"; + mes "I ask."; + next; + mes "[Grast]"; + mes "Please bring me ^FF0000one of each Red"; + mes "Potion, Green Potion, Awakening"; + mes "Potion, and Butterfly Wing^000000."; + mes "I'll be waiting for your return."; + set Memorial08,4; + close; + } + + else if(Memorial08 == 4) { + if (countitem(501) < 1 || countitem(506) < 1 || countitem(656) < 1 || countitem(602) < 1) { + mes "[Grast]"; + mes "Oops, you haven't brought all"; + mes "materials."; + mes "Please make sure you need to bring me"; + mes " ^FF0000one of each Red Potion, Green"; + mes "Potion, Awakening Potion, and"; + mes "Butteryfly Wing^000000."; + next; + mes "[Grast]"; + mes "You'll have to bring me more"; + mes "materials afterwards."; + mes "If you feel too burdened to gather"; + mes "them all,"; + mes "I can provide you all the"; + mes "materials."; + next; + if (select("I'll gather the rest.:Give me the materials.") == 2) { + goto L_GiveUp; + } + goto L_Continue; + }else{ + mes "[Grast]"; + mes "Oh, you've brought the materials I asked."; + next; + mes "[Grast]"; + mes "Hmm, you will need some more things still..."; + next; + mes "[Grast]"; + mes "Please bring me ^FF0000one of each Trap,"; + mes "Yggdrasil Leaf, Blue Gemstone,"; + mes "Crystal Mirror, Meat, and Carrot.^000000"; + mes "I'll be waiting for your return."; + set Memorial08,5; + close; + } + } + + else if(Memorial08 == 5) { + if (countitem(1065) < 1 || countitem(610) < 1 || countitem(717) < 1 || countitem(747) < 1 || countitem(517) < 1 || countitem(515) < 1) { + mes "[Grast]"; + mes "Oops, you haven't brought all materials."; + mes "Please make sure you'll have to bring me"; + mes " ^FF0000one of each Trap, Yggdrasil Leaf,"; + mes "Blue Gemstone, Crystal Mirror,"; + mes "Meat, and Carrot^000000."; + next; + mes "[Grast]"; + mes "You'll have to bring me more"; + mes "materials afterwards."; + mes "If you feel too burdened to gather them all,"; + mes "I can provide you all the materials."; + next; + if (select("I'll gather the rest.:Give me the materials.") == 2) { + goto L_GiveUp; + } + goto L_Continue; + }else{ + mes "[Grast]"; + mes "Oh, you've brought everything I asked."; + mes "Hmm, I think you need just a little bit more."; + next; + mes "[Grast]"; + mes "Please bring me ^FF0000one of each Pet"; + mes "Incubator, Firecracker, Poring"; + mes "Doll, and Bouquet^000000."; + set Memorial08,6; + close; + } + } + + else if(Memorial08 == 6) { + if (countitem(643) < 1 || countitem(12018) < 1 || countitem(741) < 1 || countitem(745) < 1) { + mes "[Grast]"; + mes "Oops, you haven't brought all materials."; + mes "Please make sure you need to bring me"; + mes " ^FF0000one of each Pet Incubator,"; + mes "Firecracker, Poring Doll and Bouquet"; + next; + mes "[Grast]"; + mes "They are the last batch of materials."; + mes "If you feel too burdened to gather them all,"; + mes "I can provide you all the materials."; + next; + mes "[Grast]"; + mes "If I provide you all materials, however,"; + mes "I won't have to thank you for your service."; + mes "It's your call, " + strcharinfo(0) + "."; + next; + if (select("I'll gather the rest.:Give me the materials.") == 2) { + goto L_GiveUp; + } + goto L_Continue; + }else{ + mes "[Grast]"; + mes "Have you brought the materials I asked?"; + mes "Ah, thank you for your hard work;"; + mes "you've brought all of them."; + next; + mes "[Grast]"; + mes "I hope you'll learn a valuable"; + mes "lesson while gathering these materials."; + mes "I like to give you a small gift for your service."; + next; + mes "[Grast]"; + mes "You see, I have two different gifts"; + mes "in my each hand."; + mes "A best thing would be giving you"; + mes "both of them, but..."; + mes "How do you like to test your luck, " + strcharinfo(0) + "?"; + next; + mes "[Grast]"; + mes "Okay, which hand would you like to pick?"; + next; + if (select("Left hand.:Right hand.") == 2) { + mes "[Grast]"; + mes "You've selected my right hand."; + mes "Here's the gift for you."; + mes "Now, please bring all these"; + mes "materials to Lauds."; + set Memorial08, 7; + getitem 617,1; + close; + } + mes "[Grast]"; + mes "You've selected my left hand."; + mes "Here's the gift for you."; + mes "Now, please bring all these"; + mes "materials to Lauds."; + set Memorial08, 7; + getitem 12109,1; + close; + } + } + + else if(Memorial08 == 7) { + mes "[Grast]"; + mes "Have you met Lauds?"; + mes "I hope you'll remember your freedom"; + mes "and happiness"; + mes "are built on thousands of lives"; + mes "sacrificed in war."; + close; + } + + else if(Memorial08 >= 8) { + mes "[Grast]"; + mes "A towel is about the most massively"; + mes "useful thing an adventurer can have."; + close; + } + + L_GiveUp: + mes "[Grast]"; + mes "Oh, I see. I guess you're quite"; + mes "busy nowadays, huh?"; + mes "No problem; I'll give you all the"; + mes "supplies..."; + next; + mes "[Grast]"; + mes "There you go."; + mes "I crushed all the items together"; + mes "into a more compact form for you"; + mes "You can thank me later for that"; + mes "extra service."; + mes "Please bring them to Lauds."; + set Memorial08,7; + getitem 7126,1; + next; + mes "[Grast]"; + mes "By the way, he had an unfortunate"; + mes "accident, and has kind of lost his"; + mes "mind."; + mes "Please don't be alarmed even if he"; + mes "starts babbling."; + close; + + L_Continue: + mes "[Grast]"; + mes "That's a good idea."; + mes "Then I'll be waiting for your return."; + close; }
\ No newline at end of file diff --git a/npc/events/children_week.txt b/npc/events/children_week.txt index 9a8933be5..e8fcd770e 100644 --- a/npc/events/children_week.txt +++ b/npc/events/children_week.txt @@ -1,86 +1,86 @@ -//===== eAthena Script =======================================
-//= Children Week Event
-//===== By: ==================================================
-//= Samuray22
-//===== Current Version: =====================================
-//= 1.1
-//===== Compatible With: =====================================
-//= eAthena SVN
-//===== Description: =========================================
-//= [Aegis Conversion]
-//= Indian Ro: Children Week Event
-//===== Additional Comments: =================================
-//= 1.1 First Beta. [Samuray22]
-//============================================================
-
-prontera,146,91,5 script Pandit chacha#child07 61,{
- if(BaseLevel > 50) {
- mes "[Pandit chacha]";
- mes "Hahaha.";
- mes "It is special day, comes only one time in a year.";
- mes "If you see little adventurers around you send to me~";
- mes "I will give the special gift.";
- close;
- } else if(BaseLevel < 20) {
- mes "[Pandit chacha]";
- mes "Hahaha.";
- mes "You are a baby adventurer not little adventurer.";
- mes "When you more grow up, come back again. hahaha.";
- close;
- } else if(oversea_event9 < 1) {
- mes "[Pandit chacha]";
- mes "Hahaha.";
- mes "Welcome, little adventurers!";
- mes "Today is special day, isn't it~?";
- mes "I would like to give the small gift to little adventurer...";
- mes "What about you? Do you want to take it?";
- next;
- if(select("No. I will take it later.","Sure, i want.") == 1) {
- mes "[Pandit chacha]";
- mes "That's too bad.... hum...";
- mes "I gathered some stuffs from far a way world to make it....";
- mes "Whenever come back again if you want it...";
- close;
- }
- set oversea_event9,1;
- getitem 11705,10; //Children's Potion
- mes "[Pandit chacha]";
- mes "Look. This is a child Potion.";
- mes "The weight is just 1 but recover much HP.";
- mes "If you want to get more, bring the 1 Wedding Bouquet and 1 Witherless Rose.";
- close;
- } else if(oversea_event9 == 1) {
- if(countitem(745) > 0 && countitem(748) > 0) {
- mes "[Pandit chacha]";
- mes "Ahha!!";
- mes "You have remembered my beautiful composition.";
- mes "You did good work.";
- mes "Could you give me 1 Wedding Bouquet and 1 Witherless Rose? ";
- next;
- if(select("Not yet.","Sure, take it.") == 1) {
- mes "[Pandit chacha]";
- mes "If you are not prepared yet, call me when you ready.";
- close;
- }
- mes "[Pandit chacha]";
- mes "Hahaha.";
- mes "Oh~ you get it.";
- mes "Here, I will exchange to the 50 child potion.";
- mes "Once you get this 50 child potion, I won't give any more.";
- close2;
- delitem 745,1; //Wedding Bouquet
- delitem 748,1; //Witherless Rose
- set oversea_event9,2;
- getitem 11705,50; //Children's Potion
- end;
- }
- mes "[Pandit chacha]";
- mes "Little adventurers, you should bring the 1 Wedding Bouquet and 1 Witherless Rose.";
- mes "If you bring these stuffs I will exchange them for child Potion. ";
- close;
- }
- mes "[Pandit chacha]";
- mes "Hahaha.";
- mes "Are you enjoying children week~? ";
- close;
+//===== eAthena Script ======================================= +//= Children Week Event +//===== By: ================================================== +//= Samuray22 +//===== Current Version: ===================================== +//= 1.1 +//===== Compatible With: ===================================== +//= eAthena SVN +//===== Description: ========================================= +//= [Aegis Conversion] +//= Indian Ro: Children Week Event +//===== Additional Comments: ================================= +//= 1.1 First Beta. [Samuray22] +//============================================================ + +prontera,146,91,5 script Pandit chacha#child07 61,{ + if(BaseLevel > 50) { + mes "[Pandit chacha]"; + mes "Hahaha."; + mes "It is special day, comes only one time in a year."; + mes "If you see little adventurers around you send to me~"; + mes "I will give the special gift."; + close; + } else if(BaseLevel < 20) { + mes "[Pandit chacha]"; + mes "Hahaha."; + mes "You are a baby adventurer not little adventurer."; + mes "When you more grow up, come back again. hahaha."; + close; + } else if(oversea_event9 < 1) { + mes "[Pandit chacha]"; + mes "Hahaha."; + mes "Welcome, little adventurers!"; + mes "Today is special day, isn't it~?"; + mes "I would like to give the small gift to little adventurer..."; + mes "What about you? Do you want to take it?"; + next; + if(select("No. I will take it later.","Sure, i want.") == 1) { + mes "[Pandit chacha]"; + mes "That's too bad.... hum..."; + mes "I gathered some stuffs from far a way world to make it...."; + mes "Whenever come back again if you want it..."; + close; + } + set oversea_event9,1; + getitem 11705,10; //Children's Potion + mes "[Pandit chacha]"; + mes "Look. This is a child Potion."; + mes "The weight is just 1 but recover much HP."; + mes "If you want to get more, bring the 1 Wedding Bouquet and 1 Witherless Rose."; + close; + } else if(oversea_event9 == 1) { + if(countitem(745) > 0 && countitem(748) > 0) { + mes "[Pandit chacha]"; + mes "Ahha!!"; + mes "You have remembered my beautiful composition."; + mes "You did good work."; + mes "Could you give me 1 Wedding Bouquet and 1 Witherless Rose? "; + next; + if(select("Not yet.","Sure, take it.") == 1) { + mes "[Pandit chacha]"; + mes "If you are not prepared yet, call me when you ready."; + close; + } + mes "[Pandit chacha]"; + mes "Hahaha."; + mes "Oh~ you get it."; + mes "Here, I will exchange to the 50 child potion."; + mes "Once you get this 50 child potion, I won't give any more."; + close2; + delitem 745,1; //Wedding Bouquet + delitem 748,1; //Witherless Rose + set oversea_event9,2; + getitem 11705,50; //Children's Potion + end; + } + mes "[Pandit chacha]"; + mes "Little adventurers, you should bring the 1 Wedding Bouquet and 1 Witherless Rose."; + mes "If you bring these stuffs I will exchange them for child Potion. "; + close; + } + mes "[Pandit chacha]"; + mes "Hahaha."; + mes "Are you enjoying children week~? "; + close; }
\ No newline at end of file diff --git a/npc/events/christmas_2008.txt b/npc/events/christmas_2008.txt index 8e3e4e788..bb08b13a3 100644 --- a/npc/events/christmas_2008.txt +++ b/npc/events/christmas_2008.txt @@ -1,1217 +1,1217 @@ -//===== eAthena Script =======================================
-//= iRO 2008 Christmas Event
-//===== By: ==================================================
-//= Kisuka
-//===== Current Version: =====================================
-//= 1.0
-//===== Compatible With: =====================================
-//= eAthena SVN
-//===== Description: =========================================
-//= iRO Christmas Event. (2008)
-//= Create Music Box and Cake.
-//= Play card game with Santa.
-//= Create Santa Suits.
-//==========================================
-//= Must enable X-mas08 items in item_db2 (not in databases).
-//= Must have 'Christmas Carol' skill (not in databases).
-//= Must enable X-mas08 mobs in mob_avail (not in databases).
-//===== Additional Comments: =================================
-//= 1.0 First version. [Kisuka]
-//============================================================
-
-// ============== Carolling - Music Box ================
-// =====================================================
-prontera,226,306,4 script Carolling#iROxmas08 79,{
- if (iROxmas08carol < 1 || iROxmas08carol == 3) {
- if (iROxmas08carol == 3) {
- mes "[Carolling]";
- mes "Jingle Bells! Jingle Bells! Jingle";
- mes "all the way!";
- mes "O' what fun it is to ride in a";
- mes "one-horse open sleeeigh, Hey!";
- next;
- mes "[Carolling]";
- mes "Merry Christmas!";
- mes "Hey! You! What comes to mind when";
- mes "you think about Christmas?";
- next;
- }else{
- mes "[Carolling]";
- mes "Jingle Bells! Jingle Bells! Jingle all the way!";
- next;
- specialeffect 75;
- mes "[Carolling]";
- mes "O' what fun it is to ride in a one-horse open sleigh!";
- next;
- mes "[Carolling]";
- mes "Merry Christmas!";
- if (Sex) {
- mes "Hey, boy! What comes to mind when";
- }else{
- mes "Hey, girl! What comes to mind when";
- }
- mes "you think about Christmas?";
- next;
- }
- switch(select("Santa Claus:Gift Boxes:Carols:Santa Costumes:Fake Santa Antonio")) {
-
- case 1:
- mes "[Carolling]";
- mes "Santa Claus!";
- mes "You're so innocent!!";
- mes "Ah!";
- next;
- mes "[Carolling]";
- mes "Here's a secret!";
- mes "There's a rumor that Santa Claus";
- mes "lives in a certain village all";
- mes "throughout the year.";
- next;
- mes "[Carolling]";
- mes "But now!!!";
- mes "In this Christmas season!!";
- mes "You guys can meet Santa on either";
- mes "of the five possible villages";
- mes "throughout Rune-Midgerts!";
- next;
- mes "[Carolling]";
- mes "If you win over Santa, you can get";
- mes "a gift. Would you go for it?";
- next;
- emotion 18;
- mes "[Carolling]";
- mes "Carolling's hot news! Ha!";
- mes "Isn't that big news?";
- close;
-
- case 2:
- mes "[Carolling]";
- mes "Gift boxes?! All right!";
- mes "Isn't it thrilling to open gifts";
- mes "over your head!!";
- next;
- mes "[Carolling]";
- mes "Anyway, did you know...";
- mes "Some villain, a fake Santa robbed";
- mes "some gifts from the good Santa!";
- next;
- mes "[Carolling]";
- mes "Furthermore, he has put bad magic";
- mes "on the gifts so that they become";
- mes "monsters!";
- next;
- emotion 18;
- mes "[Carolling]";
- mes "Carolling's hot news! Ha!";
- mes "Isn't it amazing?";
- close;
-
- case 3:
- if (iROxmas08carol == 3) {
- mes "[Carolling]";
- mes "Ah, a music box is useful.";
- next;
- mes "[Carolling]";
- mes "Though we can't all play it around";
- mes "the village as we planned, it's";
- mes "cool that you carry it.";
- next;
- mes "[Carolling]";
- mes "We want to enjoy carols all";
- mes "together... I hope to get Crystal";
- mes "Pieces!";
- next;
- mes "[Carolling]";
- mes "If you can get ^0000FFSinging Crystal";
- mes "Pieces^000000, give them to me please?";
- next;
- select("Why not? Sure, I can give you some.");
- if (countitem(6092) < 6) {
- mes "[Carolling]";
- mes "Yes, please.";
- next;
- mes "[Carolling]";
- mes "If you can get ^0000FFSinging Crystal";
- mes "Pieces^000000, give them to me please?";
- close;
- }else{
- mes "[Carolling]";
- mes "Wow, you have them.";
- next;
- mes "[Carolling]";
- mes "I can bake you a cake,";
- mes "and I can carve your name on the";
- mes "cake, if you want!";
- next;
- if (select("No, thanks.:Please name it for me.") == 2) {
- mes "[Carolling]";
- mes "Thank for your help!";
- next;
- mes "[Carolling]";
- mes "Many people live in the giant";
- mes "world!";
- mes "So many people hope to hear";
- mes "carolling, yet I always lack";
- mes "Crystal pieces.";
- next;
- mes "[Carolling]";
- mes "If you can get ^0000FFSinging Crystal Pieces^000000, give them to me please?";
- next;
- emotion 18;
- delitem 6092,6;
- getnameditem 12354,"+strcharinfo(0)+";
- mes "[Carolling]";
- mes "Let's care about others around you";
- mes "on this Christmas season!";
- close;
- }else{
- mes "[Carolling]";
- mes "Oh!";
- mes "Shyness!";
- next;
- mes "[Carolling]";
- mes "Anyway, thanks a lot for your";
- mes "help.";
- next;
- mes "[Carolling]";
- mes "Many people live in the giant";
- mes "world!";
- mes "So many people hope to hear";
- mes "carolling, yet I always lack";
- mes "Crystal pieces.";
- next;
- mes "[Carolling]";
- mes "If you can get ^0000FFSinging Crystal Pieces^000000, give them to me please?";
- next;
- emotion 18;
- delitem 6092,6;
- getitem 12354,1;
- mes "[Carolling]";
- mes "Let's care about others around you";
- mes "on this Christmas season!";
- close;
- }
- }
- }
- mes "[Carolling]";
- mes "You know about Christmas!";
- mes "Talking about Christmas...";
- mes "...it's carols!!!";
- mes "I've been waiting for this for when";
- mes "Christmas comes around!";
- next;
- mes "[Carolling]";
- mes "But there's been no caroling here";
- mes "and there like before, so we can't";
- mes "feel the Christmas spirit.";
- next;
- mes "[Carolling]";
- mes "So, I installed a Singing Crystal";
- mes "in Prontera...";
- next;
- mes "[Carolling]";
- mes "but that jerk Antonio broke the";
- mes "crystal!";
- next;
- mes "[Carolling]";
- mes "The gift boxes have been changing";
- mes "into monsters since Antonio placed";
- mes "some magic on them, so the monsters";
- mes "ate up the crystal fragments!";
- next;
- mes "[Carolling]";
- mes "I am so devastated, since the";
- mes "Singing Crystal has been the hope";
- mes "of many children around the villages.";
- next;
- if (select("There's no other way to carol?:You can hear carols in Lutie.") == 2) {
- mes "[Carolling]";
- mes "And just stay there, every";
- mes "Christmas, for your whole life?";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "What? What do you mean?";
- next;
- mes "[Carolling]";
- mes "Oh, nevermind.";
- mes "Ah...";
- close;
- }
- mes "[Carolling]";
- mes "Maybe, it's quite hard to make a";
- mes "jukebox for the villages, but a";
- mes "music box might be possible.";
- next;
- mes "[Carolling]";
- mes "We need the ^0000FFSinging Crystal Pieces^000000";
- mes "that the monsters ate up.";
- next;
- mes "[Carolling]";
- mes "Please bring me ^0000FF6 Singing Crystal";
- mes "Pieces^000000, and you will be rewarded";
- mes "with presents!";
- next;
- mes "[Carolling]";
- mes "Sounds cool, huh!!";
- next;
- select("........................");
- mes "[Carolling]";
- mes "...Why are you staring at me like";
- mes "that?";
- next;
- mes "[Carolling]";
- mes "You're thinking that we are always";
- mes "getting our plans spoiled, aren't";
- mes "you?";
- next;
- mes "[Carolling]";
- mes "I know that we are not good at";
- mes "controlling stuff, but our rewards";
- mes "are good, right?";
- next;
- select("........................");
- mes "[Carolling]";
- mes "Hey, we treat you good...";
- next;
- select("........................");
- mes "[Carolling]";
- mes "You are so cruel to me!";
- mes "Bad! Bad!";
- next;
- mes "[Carolling]";
- mes "Please, for our children's";
- mes "hope!!!?";
- mes "Please bring me 6 Singing Crystal";
- mes "Pieces from ^0000FFViolent Gift Boxes^000000!";
- next;
- emotion 33;
- mes "[Carolling]";
- mes "They're definitely as";
- mes "harsh as their name.";
- mes "Go on please!";
- set iROxmas08carol,1;
- close;
-
- case 4:
- mes "[Carolling]";
- mes "Santa costumes!!";
- mes "You know, the santa costumes that";
- mes "the monsters are wearing now aren't";
- mes "genuine!";
- next;
- mes "[Carolling]";
- mes "The rumor 'round here is, Lutie's";
- mes "designer made these costumes.";
- next;
- mes "[Carolling]";
- mes "Every year, adventurers challenge";
- mes "to attack Antonio the fake Santa,";
- mes "but there's no way to catch up to";
- mes "him due to his hat and costume!";
- next;
- mes "[Carolling]";
- mes "Are there some spcial abilities";
- mes "within them?";
- mes "There's still the designer in the";
- mes "Christmas village... How about";
- mes "asking her to make that costume?";
- next;
- emotion 18;
- mes "[Carolling]";
- mes "Carolling's hot news! Ha!";
- mes "It's hot, huh?";
- close;
-
-
- case 5:
- mes "[Carolling]";
- mes "A-N-T-O-N-I-O!!!";
- mes "As I heard, this Antonio is quite";
- mes "different from before.";
- next;
- mes "[Carolling]";
- mes "He seems to be quite resolved with";
- mes "himself since he ran away from";
- mes "people before.";
- next;
- mes "[Carolling]";
- mes "And he isn't alone anymore... is";
- mes "what I heard...";
- next;
- emotion 18;
- mes "[Carolling]";
- mes "Carolling's hot news! Ha!";
- mes "Hotness, right?";
- close;
- }
- }
-
- if (iROxmas08carol == 1) {
- if (countitem(6092) < 6) {
- mes "[Carolling]";
- mes "Maybe, it's quite hard to make a";
- mes "jukebox for the villages, but a";
- mes "music box might be possible.";
- next;
- mes "[Carolling]";
- mes "We need the ^0000FFSinging Crystal Pieces^000000";
- mes "that the monsters ate up.";
- next;
- mes "[Carolling]";
- mes "Please bring me ^0000FF6 Singing Crystal Pieces^000000, and you will be rewarded with presents!";
- next;
- mes "[Carolling]";
- mes "For all of the children of this";
- mes "world!!!";
- mes "Please bring me ^0000FF6Singing Crystal";
- mes "Pieces^000000 from ^0000FFViolent Gift Boxes^000000!";
- next;
- emotion 33;
- mes "[Carolling]";
- mes "Be careful!";
- mes "They're definitely as";
- mes "harsh as their name.";
- mes "Take care!!!";
- close;
- }else{
- specialeffect 75;
- mes "[Carolling]";
- mes "Don't cry, don't cry!";
- mes "Santa won't give you a";
- mes "gift if you're crying.";
- next;
- mes "[Carolling]";
- select("I got them!");
- mes "[Carolling]";
- mes "Wow, you got them!";
- mes "They are so cruel, aren't they?";
- mes "I'm happy to see you again.";
- next;
- mes "[Carolling]";
- mes "Let's count together!";
- mes "... ...";
- mes "Six!!";
- next;
- mes "[Carolling]";
- mes "All right! We can start to make our";
- mes "music box with crystal fragments.";
- next;
- mes "[Carolling]";
- mes "We would amplify the sounds of the";
- mes "crystal fragments to sound through";
- mes "the music box.";
- next;
- mes "[Carolling]";
- mes "You know, a music box that sounds";
- mes "like a jukebox!";
- next;
- mes "[Carolling]";
- mes "It's handy. You can carry it, as";
- mes "well as listen to sweet carols";
- mes "anywhere. Doesn't that sound";
- mes "cool!?";
- next;
- mes "[Carolling]";
- mes "So, we need more of some";
- mes "materials.";
- mes "^0000FF10 Wooden Block, 1 Hammer Of";
- mes "Blacksmith, 1 Jubilee, 10 Sticky";
- mes "Mucus, 3-karat Diamond^000000!";
- next;
- delitem 6092,6;
- emotion 33;
- set iROxmas08carol,2;
- mes "[Carolling]";
- mes "Those are all needed.";
- mes "Isn't that easy?";
- close;
- }
- }
-
- if (iROxmas08carol == 2) {
- if (countitem(1019) < 10 || countitem(1005) < 1 || countitem(7312) < 1 || countitem(938) < 10 || countitem(732) < 1) {
- mes "[Carolling]";
- mes "We can make a music box";
- mes "with Singing Crystal Pieces.";
- mes "It's handy, you can hear carols";
- mes "anywhere. Sounds cool?";
- next;
- mes "[Carolling]";
- mes "So, we need more of some materials.";
- mes "^0000FF10 Wooden Block, 1 Hammer Of";
- mes "Blacksmith, 1 Jubilee, 10 Sticky";
- mes "Mucus, 3-karat Diamond^000000!";
- next;
- emotion 33;
- mes "[Carolling]";
- mes "That's all we need.";
- mes "Isn't that easy?";
- close;
- }else{
- specialeffect 75;
- mes "[Carolling]";
- mes "Jingle bells, jingle bells,";
- mes "jingle all the way!";
- mes "O what fun it is to ride, in a";
- mes "one... horse... o-pen... sleigh!!!";
- next;
- mes "[Carolling]";
- mes "Wow!";
- mes "You came back!";
- mes "Did you bring all the";
- mes "materials?";
- next;
- mes "[Carolling]";
- mes "Good!";
- mes "No need to hesitate! Let's get";
- mes "started to make our music box.";
- next;
- mes "[Carolling]";
- specialeffect 101;
- mes "Blacksmith hammers on wooden";
- mes "block... and we shape the frame.";
- next;
- mes "[Carolling]";
- //(effect - stones from ground?)
- mes "Please use the Singing Crystal";
- mes "Pieces for a column, the Diamond as";
- mes "a prop, and the Sticky Mucus as";
- mes "glue.";
- next;
- mes "[Carolling]";
- specialeffect 1;
- mes "And now...";
- mes "we decorate with a Jubilee...";
- next;
- mes "[Carolling]";
- specialeffect 88;
- mes "The last step...!";
- mes "Breating life into it!";
- next;
- mes "[Carolling]";
- mes "It's done now!!!";
- next;
- mes "[Carolling]";
- mes "It's so cool! Isn't it cute!!?!";
- next;
- mes "[Carolling]";
- mes "You did as I requested, so I will";
- mes "give you gifts, as promised.";
- next;
- mes "[Carolling]";
- mes "One, is this music box.";
- mes "Please play this music box all over";
- mes "the villages!";
- next;
- mes "[Carolling]";
- mes "Another present is a Christmas cake";
- mes "especially shaped like your name!";
- mes "I made this cake shaped like your";
- mes "name!";
- next;
- mes "[Carolling]";
- mes "Don't worry, it tastes good.";
- next;
- emotion 33;
- getitem 2784,1;
- getnameditem 12354,"+strcharinfo(0)+";
- delitem 1019,10;
- delitem 1005,1;
- delitem 7312,1;
- delitem 938,10;
- delitem 732,1;
- set iROxmas08carol,3;
- mes "[Carolling]";
- mes "Thanks a lot.";
- mes "Merry Christmas!";
- mes "Have a good holiday season!";
- close;
- }
- }
-}
-
-// ============= Santa Claus - Card Game ===============
-// =====================================================
-- script Santa Claus#iROxmas08::08santa 718,{
- mes "[Santa Claus]";
- mes "Wow! Were you naughty or nice this";
- mes "year?";
- mes "All right, what comes to your mind";
- mes "when you think about Christmas?";
- next;
- switch(select("Carolling:Santa Claus:Gift Boxes:Santa Costume:Not much really...")) {
-
- case 1:
- mes "[Santa Claus]";
- mes "Carolling! That's good!";
- mes "A sweet carol always makes";
- mes "Christmas more happy!!!";
- next;
- mes "[Santa Claus]";
- mes "Yes indeed Carolling spreads Joy";
- mes "throughout the world?";
- close;
-
- case 2:
- mes "[Santa Claus]";
- if (Sex) {
- mes "Ho ho ho! What a good boy!";
- }else{
- mes "Ho ho ho! What a good girl!";
- }
- next;
- mes "[Santa Claus]";
- mes "But you should be wary of a fake";
- mes "Santa romaing around.";
- mes "Have you heard of Antonio, who";
- mes "invades villages every Christmas?";
- next;
- mes "[Santa Claus]";
- mes "He has stolen my gifts, as well as";
- mes "attacked adventurers around Toy and";
- mes "Lutie field.";
- next;
- mes "[Santa Claus]";
- mes "A bad Santa ruins us good Santa's";
- mes "reputations!";
- mes "The World Santa Organization is";
- mes "considering this a grave";
- mes "situation.";
- close;
-
- case 3:
- mes "[Santa Claus]";
- mes "A gift box! That sounds good!";
- mes "It's so exciting to open gift boxes";
- mes "when you wake up on Christmas";
- mes "morning!!!";
- next;
- mes "[Santa Claus]";
- mes "But we have very little gifts now,";
- mes "since Santa Antonio has stolen my";
- mes "gift bag.";
- next;
- mes "[Santa Claus]";
- mes "Many adventurers try to catch up";
- mes "to him, but he is not easy to catch.";
- next;
- mes "[Santa Claus]";
- mes "Anyway let those adventurers try to";
- mes "catch him, I have a small game for";
- mes "you.";
- next;
- mes "[Santa Claus]";
- mes "I will give you a small gift if you";
- mes "beat me!";
- next;
- mes "[Santa Claus]";
- mes "Do you want to play a game with";
- mes "me?";
- next;
- if (select("No, thanks.:Yes, I would.") == 1) {
- mes "[Santa Claus]";
- mes "Aww, don't be afraid. If you've";
- mes "been a little naughty this year I";
- mes "won't stuff your stockings with";
- mes "coal.";
- next;
- mes "[Santa Claus]";
- mes "I will stay here throughout the";
- mes "Christmas season, just visit me";
- mes "when you change your mind.";
- close;
- }
- if (gettimetick(2) < SantaCardTime) {
- mes "[Santa Claus]";
- mes "Um... You've played the game";
- mes "recently haven't you?";
- next;
- mes "[Santa Claus]";
- mes "You can try the game once a hour.";
- mes "Please visit me after the one hour";
- mes "has passed.";
- close;
- }
- set .@SantaCardTurn,0;
- set .@SantaCardWins,0;
- mes "[Santa Claus]";
- mes "Wow! You're so cool!";
- next;
- mes "[Santa Claus]";
- mes "Let me explain how to play this";
- mes "game.";
- next;
- mes "[Santa Claus]";
- mes "It's quite simple. I will pick one";
- mes "of three cards: Poring Card,";
- mes "Ghostring Card, and Angeling Card.";
- mes "Guess which card I pick and";
- mes "you're a winner!";
- next;
- mes "[Santa Claus]";
- mes "If you guess right 3 times out of";
- mes "5, I will give you a gift.";
- mes "Let's get started!";
- next;
- while(.@SantaCardTurn != 5) {
- emotion 56;
- mes "[Santa Claus]";
- mes "First let me shuffle up these";
- mes "cards... Ok!!!";
- next;
- specialeffect 0;
- mes "[Santa Claus]";
- mes "One!";
- next;
- specialeffect 1;
- mes "[Santa Claus]";
- mes "Two!";
- next;
- specialeffect 2;
- mes "[Santa Claus]";
- mes "Three!";
- next;
- specialeffect 18;
- mes "[Santa Claus]";
- mes "I'm picking up only one!";
- next;
- cutin "sorry",4;
- mes "[Santa Claus]";
- mes "I'm picking up only one!";
- mes "Please guess what is is.";
- next;
- switch(select("Poring:Angeling:Ghostring")) {
- case 1:
- mes "["+strcharinfo(0)+"]";
- mes "Um...I choose Poring!";
- set .@SantaCardP,1;
- next;
- break;
-
- case 2:
- mes "["+strcharinfo(0)+"]";
- mes "Um...I choose Angeling!";
- set .@SantaCardP,2;
- next;
- break;
-
- case 3:
- mes "["+strcharinfo(0)+"]";
- mes "Um...I choose Ghostring!";
- set .@SantaCardP,3;
- next;
- }
- mes "[Santa Claus]";
- mes "Let's see!!";
- mes "One! Two! Three!";
- set .@SantaCardNpc, rand(1,3);
- next;
- mes "[Santa Claus]";
- mes "Let's see!!";
- mes "One! Two! Three!";
- if (.@SantaCardNpc == 1) {
- cutin "ニクオトォオ",4;
- }
- else if (.@SantaCardNpc == 2) {
- cutin "ソ」チゥクオトォオ",4;
- }
- else if (.@SantaCardNpc == 3) {
- cutin "ースコニョクオトォオ",4;
- }
- next;
- set .@SantaCardTurn,.@SantaCardTurn+1;
- if (.@SantaCardP == .@SantaCardNpc) {
- set .@SantaCardWins,.@SantaCardWins+1;
- emotion 0;
- emotion 5,1;
- cutin "",255;
- mes "[Santa Claus]";
- mes "You're lucky.";
- mes "Can you guess the right card the";
- mes "next time around?";
- next;
- }else{
- emotion 0;
- emotion 23,1;
- cutin "",255;
- mes "[Santa Claus]";
- mes "Aww maybe next time...";
- next;
- }
- }
- if (.@SantaCardWins < 3) {
- mes "["+strcharinfo(0)+"]";
- mes "This is just luck. Let me try";
- mes "again!!";
- next;
- mes "[Santa Claus]";
- mes "Whenever you want.";
- close;
- }else{
- mes "[Santa Claus]";
- mes "You're so good!";
- next;
- mes "[Santa Claus]";
- mes "Now this gift is for you. Put your";
- mes "hand into the bag and pick only";
- mes "one.";
- set .@SantaCardPrize, rand(1,12);
- next;
- if (.@SantaCardPrize == 1) {
- getitem 12354,2;
- }
- else if (.@SantaCardPrize == 2) {
- getitem 595,3;
- }
- else if (.@SantaCardPrize == 3) {
- getitem 593,3;
- }
- else if (.@SantaCardPrize == 4) {
- getitem 12236,3;
- }
- else if (.@SantaCardPrize == 5) {
- getitem 538,10;
- }
- else if (.@SantaCardPrize == 6) {
- getitem 14546,10;
- }
- else if (.@SantaCardPrize == 7) {
- getitem 5136,1;
- }
- else if (.@SantaCardPrize == 8) {
- getitem 603,1;
- }
- else if (.@SantaCardPrize == 9) {
- getitem 12130,1;
- }
- else if (.@SantaCardPrize == 10) {
- getitem 14550,10;
- }
- else if (.@SantaCardPrize == 11) {
- getitem 12132,3;
- }
- else if (.@SantaCardPrize == 12) {
- getitem 594,3;
- }
- set SantaCardTime,gettimetick(2)+3600;
- mes "[Santa Claus]";
- mes "Good job! Thanks for playing the";
- mes "card game with me! Merry";
- mes "Christmas!";
- close;
- }
-
- case 4:
- mes "[Santa Claus]";
- mes "Do you mean that ever so";
- mes "fashionable costume for Santa's and";
- mes "youngsters!?!";
- mes "Light-weight, fashionable, and";
- mes "keeps you warm!";
- next;
- mes "[Santa Claus]";
- mes "There used to be designer who";
- mes "visited my house to make my Santa";
- mes "costumes. Do you have any ideas?";
- close;
-
- case 5:
- mes "[Santa Claus]";
- mes "........................";
- next;
- mes "[Santa Claus]";
- mes "........................";
- if (Sex) {
- mes "Oh! Poor boy...";
- }else{
- mes "Oh! Poor girl...";
- }
- next;
- mes "[Santa Claus]";
- mes "........................";
- if (Sex) {
- mes "Oh! Poor boy...";
- }else{
- mes "Oh! Poor girl...";
- }
- mes "...";
- next;
- mes "[Santa Claus]";
- mes "You should open your heart to the";
- mes "spirit of Christmas!";
- mes "Once you do, I know you'll be able";
- mes "to think of something.";
- close;
- }
-}
-
-payon,171,109,4 duplicate(08santa) Santa Claus#0801 718
-prontera,156,285,4 duplicate(08santa) Santa Claus#0802 718
-alberta,117,66,4 duplicate(08santa) Santa Claus#0803 718
-geffen,119,70,4 duplicate(08santa) Santa Claus#0804 718
-morocc,158,104,4 duplicate(08santa) Santa Claus#0805 718
-
-
-// ============= Louise Kim - Santa Suit ===============
-// =====================================================
-xmas_in,89,92,4 script Louise Kim#iROxmas08 714,{
- mes "[Louise Kim]";
- mes "I always thought about how boring";
- mes "Santa Claus is wearing a too boring";
- mes "costume. Too boring!";
- next;
- mes "[Louise Kim]";
- mes "I could make a glamorous style for";
- mes "him!";
- next;
- mes "[Louise Kim]";
- mes "I once made a costume for";
- mes "the notorious figure Antonio!";
- mes "The reason catching up to him";
- mes "is so hard, is that his clothes";
- mes "have been given strong power!";
- mes "I blessed them with good luck!";
- next;
- emotion 3;
- mes "[Louise Kim]";
- mes "Preta Porter!!";
- mes "Which is quite luxurious";
- mes "but sold at good price ~";
- next;
- mes "[Louise Kim]";
- mes "Hey loosers! You can share my sense";
- mes "of fashion and wear my look if you";
- mes "run a light mission for me.";
- next;
- mes "[Louise Kim]";
- mes "Are you interested?";
- next;
- if (select("Nope.:Yes, please.") == 1) {
- mes "[Louise Kim]";
- mes "Ah!";
- mes "You're silly! You lost your big";
- mes "chance!";
- next;
- emotion 18;
- mes "[Louise Kim]";
- mes "Come to me later if you";
- mes "want to get the mission.";
- mes "I, Louise Kim, am generous";
- mes "enough to accept you next time.";
- close;
- }
- mes "[Louise Kim]";
- mes "You're so cool.";
- next;
- mes "[Louise Kim]";
- mes "Don't worry about this mission.";
- mes "It's not that difficult.";
- mes "I'm only in need of some";
- mes "materials. Things that are";
- mes "beyond my ability...";
- next;
- mes "[Louise Kim]";
- mes "Anyway, can you bring me some";
- mes "stuff?";
- next;
- if (select("Why not? What do you need?:Sorry, no time.") == 2) {
- emotion 18;
- mes "[Louise Kim]";
- mes "What?";
- mes "You will definitely regret it.";
- mes "No more chances later.";
- close;
- }
- mes "[Louise Kim]";
- mes "All right, you're cool!!";
- mes "You need to bring me: ^0000FFCotton Shirt,";
- mes "3 Red Potion, Holy Water, 4 Wrapping";
- mes "Paper, Wrapping Lace^000000..";
- next;
- mes "[Louise Kim]";
- mes "If you bring me all that stuff, I";
- mes "can make you a glamorous Santa";
- mes "costume.";
- next;
- if (countitem(2301) < 1 || countitem(501) < 3 || countitem(523) < 1 || countitem(7175) < 4 || countitem(7174) < 1) {
- mes "[Louise Kim]";
- mes "If you were to bring me all the";
- mes "stuff, I would make you a wonderful";
- mes "costume, for free...";
- next;
- emotion 3;
- mes "[Louise Kim]";
- mes "Please see me again if you are";
- mes "interested.";
- close;
- }else{
- select("Here you are.");
- emotion 33;
- mes "[Louise Kim]";
- mes "Oh! Good!";
- mes "Let's not delay.";
- mes "I will show you my limitless";
- mes "ability.";
- next;
- mes "-She pours everything in a pot-";
- mes "-even the shirt goes in!-";
- mes "-She takes it out with skill-";
- mes "-and many blessings she sings.-";
- next;
- specialeffect 42;
- emotion 2;
- mes "[Louise Kim]";
- mes "By artist, Louise Kim!";
- mes "All over the world will be blessed";
- mes "tonight!";
- next;
- mes "-Pour red potion in another pot-";
- mes "-then stir all of its parts.-";
- mes "-Put the cotton shirts in-";
- mes "-and dye it for grateful hearts.-";
- mes "-Thread by thread-";
- mes "-String by string-";
- mes "-Count your blessings and sing!-";
- next;
- specialeffect 75;
- emotion 2;
- mes "[Louise Kim]";
- mes "By artist, Louise Kim!";
- mes "All over the world will be blessed";
- mes "tonight!";
- next;
- mes "-She is knitting clothes-";
- mes "-with a hooked needle-";
- mes "-with her great skill.-";
- mes "Spread your blessings,-";
- mes "cheer and goodwill!-";
- next;
- specialeffect 91;
- emotion 3;
- mes "[Louise Kim]";
- mes "This is miraculous!";
- mes "I am a genius of the world.";
- mes "Artist, Louise Kim!!!";
- next;
- mes "[Louise Kim]";
- mes "All right! Isn't it wonderful?";
- mes "You can call it what you wish.";
- mes "My fashion is radiant.";
- mes "I ain't envious of Designer";
- mes "Pierre.";
- next;
- emotion 18;
- mes "[Louise Kim]";
- mes "I am supposed to get paid well,";
- mes "however I will just let it";
- mes "be free, since this is Christmas!";
- next;
- delitem 2301,1;
- delitem 501,3;
- delitem 523,1;
- delitem 7175,4;
- delitem 7174,1;
- getitem 12132,1;
- mes "[Louise Kim]";
- mes "Go brag about these wonderful";
- mes "clothes. There wouldn't be";
- mes "any without me, Louise Kim.";
- close;
- }
-}
-
-//XMAS MOBS
-prt_fild00,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-prt_fild00,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-prt_fild00,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-prt_fild00,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-prt_fild01,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-prt_fild01,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-prt_fild01,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-prt_fild01,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-prt_fild02,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-prt_fild02,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-prt_fild02,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-prt_fild02,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-prt_fild03,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-prt_fild03,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-prt_fild03,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-prt_fild03,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-prt_fild04,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-prt_fild04,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-prt_fild04,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-prt_fild04,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-prt_fild05,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-prt_fild05,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-prt_fild05,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-prt_fild05,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-prt_fild06,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-prt_fild06,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-prt_fild06,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-prt_fild06,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-prt_fild07,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-prt_fild07,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-prt_fild07,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-prt_fild07,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-prt_fild08,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-prt_fild08,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-prt_fild08,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-prt_fild08,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-prt_fild09,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-prt_fild09,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-prt_fild09,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-prt_fild09,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-prt_fild10,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-prt_fild10,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-prt_fild10,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-prt_fild10,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-prt_fild11,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-prt_fild11,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-prt_fild11,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-prt_fild11,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-pay_fild01,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-pay_fild01,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-pay_fild01,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-pay_fild01,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-pay_fild02,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-pay_fild02,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-pay_fild02,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-pay_fild02,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-pay_fild03,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-pay_fild03,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-pay_fild03,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-pay_fild03,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-pay_fild04,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-pay_fild04,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-pay_fild04,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-pay_fild04,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-pay_fild05,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-pay_fild05,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-pay_fild05,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-pay_fild05,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-pay_fild06,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-pay_fild06,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-pay_fild06,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-pay_fild06,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-pay_fild07,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-pay_fild07,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-pay_fild07,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-pay_fild07,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-pay_fild08,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-pay_fild08,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-pay_fild08,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-pay_fild08,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-pay_fild09,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-pay_fild09,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-pay_fild09,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-pay_fild09,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-pay_fild10,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-pay_fild10,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-pay_fild10,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-pay_fild10,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-pay_fild11,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-pay_fild11,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-pay_fild11,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-pay_fild11,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-gef_fild00,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-gef_fild00,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-gef_fild00,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-gef_fild00,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-gef_fild01,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-gef_fild01,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-gef_fild01,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-gef_fild01,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-gef_fild02,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-gef_fild02,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-gef_fild02,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-gef_fild02,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-gef_fild03,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-gef_fild03,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-gef_fild03,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-gef_fild03,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-gef_fild04,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-gef_fild04,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-gef_fild04,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-gef_fild04,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-gef_fild05,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-gef_fild05,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-gef_fild05,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-gef_fild05,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-gef_fild06,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-gef_fild06,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-gef_fild06,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-gef_fild06,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-gef_fild07,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-gef_fild07,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-gef_fild07,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-gef_fild07,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-gef_fild08,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-gef_fild08,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-gef_fild08,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-gef_fild08,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-gef_fild09,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-gef_fild09,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-gef_fild09,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-gef_fild09,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-gef_fild10,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-gef_fild10,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-gef_fild10,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-gef_fild10,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-gef_fild11,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-gef_fild11,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-gef_fild11,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-gef_fild11,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-gef_fild12,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-gef_fild12,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-gef_fild12,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-gef_fild12,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-gef_fild13,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-gef_fild13,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-gef_fild13,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-gef_fild13,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-gef_fild14,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-gef_fild14,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-gef_fild14,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
-gef_fild14,0,0,0,0 monster Antonio 1247,1,0,0,0
-
-xmas_fild01,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0
-xmas_fild01,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0
-xmas_fild01,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0
+//===== eAthena Script ======================================= +//= iRO 2008 Christmas Event +//===== By: ================================================== +//= Kisuka +//===== Current Version: ===================================== +//= 1.0 +//===== Compatible With: ===================================== +//= eAthena SVN +//===== Description: ========================================= +//= iRO Christmas Event. (2008) +//= Create Music Box and Cake. +//= Play card game with Santa. +//= Create Santa Suits. +//========================================== +//= Must enable X-mas08 items in item_db2 (not in databases). +//= Must have 'Christmas Carol' skill (not in databases). +//= Must enable X-mas08 mobs in mob_avail (not in databases). +//===== Additional Comments: ================================= +//= 1.0 First version. [Kisuka] +//============================================================ + +// ============== Carolling - Music Box ================ +// ===================================================== +prontera,226,306,4 script Carolling#iROxmas08 79,{ + if (iROxmas08carol < 1 || iROxmas08carol == 3) { + if (iROxmas08carol == 3) { + mes "[Carolling]"; + mes "Jingle Bells! Jingle Bells! Jingle"; + mes "all the way!"; + mes "O' what fun it is to ride in a"; + mes "one-horse open sleeeigh, Hey!"; + next; + mes "[Carolling]"; + mes "Merry Christmas!"; + mes "Hey! You! What comes to mind when"; + mes "you think about Christmas?"; + next; + }else{ + mes "[Carolling]"; + mes "Jingle Bells! Jingle Bells! Jingle all the way!"; + next; + specialeffect 75; + mes "[Carolling]"; + mes "O' what fun it is to ride in a one-horse open sleigh!"; + next; + mes "[Carolling]"; + mes "Merry Christmas!"; + if (Sex) { + mes "Hey, boy! What comes to mind when"; + }else{ + mes "Hey, girl! What comes to mind when"; + } + mes "you think about Christmas?"; + next; + } + switch(select("Santa Claus:Gift Boxes:Carols:Santa Costumes:Fake Santa Antonio")) { + + case 1: + mes "[Carolling]"; + mes "Santa Claus!"; + mes "You're so innocent!!"; + mes "Ah!"; + next; + mes "[Carolling]"; + mes "Here's a secret!"; + mes "There's a rumor that Santa Claus"; + mes "lives in a certain village all"; + mes "throughout the year."; + next; + mes "[Carolling]"; + mes "But now!!!"; + mes "In this Christmas season!!"; + mes "You guys can meet Santa on either"; + mes "of the five possible villages"; + mes "throughout Rune-Midgerts!"; + next; + mes "[Carolling]"; + mes "If you win over Santa, you can get"; + mes "a gift. Would you go for it?"; + next; + emotion 18; + mes "[Carolling]"; + mes "Carolling's hot news! Ha!"; + mes "Isn't that big news?"; + close; + + case 2: + mes "[Carolling]"; + mes "Gift boxes?! All right!"; + mes "Isn't it thrilling to open gifts"; + mes "over your head!!"; + next; + mes "[Carolling]"; + mes "Anyway, did you know..."; + mes "Some villain, a fake Santa robbed"; + mes "some gifts from the good Santa!"; + next; + mes "[Carolling]"; + mes "Furthermore, he has put bad magic"; + mes "on the gifts so that they become"; + mes "monsters!"; + next; + emotion 18; + mes "[Carolling]"; + mes "Carolling's hot news! Ha!"; + mes "Isn't it amazing?"; + close; + + case 3: + if (iROxmas08carol == 3) { + mes "[Carolling]"; + mes "Ah, a music box is useful."; + next; + mes "[Carolling]"; + mes "Though we can't all play it around"; + mes "the village as we planned, it's"; + mes "cool that you carry it."; + next; + mes "[Carolling]"; + mes "We want to enjoy carols all"; + mes "together... I hope to get Crystal"; + mes "Pieces!"; + next; + mes "[Carolling]"; + mes "If you can get ^0000FFSinging Crystal"; + mes "Pieces^000000, give them to me please?"; + next; + select("Why not? Sure, I can give you some."); + if (countitem(6092) < 6) { + mes "[Carolling]"; + mes "Yes, please."; + next; + mes "[Carolling]"; + mes "If you can get ^0000FFSinging Crystal"; + mes "Pieces^000000, give them to me please?"; + close; + }else{ + mes "[Carolling]"; + mes "Wow, you have them."; + next; + mes "[Carolling]"; + mes "I can bake you a cake,"; + mes "and I can carve your name on the"; + mes "cake, if you want!"; + next; + if (select("No, thanks.:Please name it for me.") == 2) { + mes "[Carolling]"; + mes "Thank for your help!"; + next; + mes "[Carolling]"; + mes "Many people live in the giant"; + mes "world!"; + mes "So many people hope to hear"; + mes "carolling, yet I always lack"; + mes "Crystal pieces."; + next; + mes "[Carolling]"; + mes "If you can get ^0000FFSinging Crystal Pieces^000000, give them to me please?"; + next; + emotion 18; + delitem 6092,6; + getnameditem 12354,"+strcharinfo(0)+"; + mes "[Carolling]"; + mes "Let's care about others around you"; + mes "on this Christmas season!"; + close; + }else{ + mes "[Carolling]"; + mes "Oh!"; + mes "Shyness!"; + next; + mes "[Carolling]"; + mes "Anyway, thanks a lot for your"; + mes "help."; + next; + mes "[Carolling]"; + mes "Many people live in the giant"; + mes "world!"; + mes "So many people hope to hear"; + mes "carolling, yet I always lack"; + mes "Crystal pieces."; + next; + mes "[Carolling]"; + mes "If you can get ^0000FFSinging Crystal Pieces^000000, give them to me please?"; + next; + emotion 18; + delitem 6092,6; + getitem 12354,1; + mes "[Carolling]"; + mes "Let's care about others around you"; + mes "on this Christmas season!"; + close; + } + } + } + mes "[Carolling]"; + mes "You know about Christmas!"; + mes "Talking about Christmas..."; + mes "...it's carols!!!"; + mes "I've been waiting for this for when"; + mes "Christmas comes around!"; + next; + mes "[Carolling]"; + mes "But there's been no caroling here"; + mes "and there like before, so we can't"; + mes "feel the Christmas spirit."; + next; + mes "[Carolling]"; + mes "So, I installed a Singing Crystal"; + mes "in Prontera..."; + next; + mes "[Carolling]"; + mes "but that jerk Antonio broke the"; + mes "crystal!"; + next; + mes "[Carolling]"; + mes "The gift boxes have been changing"; + mes "into monsters since Antonio placed"; + mes "some magic on them, so the monsters"; + mes "ate up the crystal fragments!"; + next; + mes "[Carolling]"; + mes "I am so devastated, since the"; + mes "Singing Crystal has been the hope"; + mes "of many children around the villages."; + next; + if (select("There's no other way to carol?:You can hear carols in Lutie.") == 2) { + mes "[Carolling]"; + mes "And just stay there, every"; + mes "Christmas, for your whole life?"; + next; + mes "["+strcharinfo(0)+"]"; + mes "What? What do you mean?"; + next; + mes "[Carolling]"; + mes "Oh, nevermind."; + mes "Ah..."; + close; + } + mes "[Carolling]"; + mes "Maybe, it's quite hard to make a"; + mes "jukebox for the villages, but a"; + mes "music box might be possible."; + next; + mes "[Carolling]"; + mes "We need the ^0000FFSinging Crystal Pieces^000000"; + mes "that the monsters ate up."; + next; + mes "[Carolling]"; + mes "Please bring me ^0000FF6 Singing Crystal"; + mes "Pieces^000000, and you will be rewarded"; + mes "with presents!"; + next; + mes "[Carolling]"; + mes "Sounds cool, huh!!"; + next; + select("........................"); + mes "[Carolling]"; + mes "...Why are you staring at me like"; + mes "that?"; + next; + mes "[Carolling]"; + mes "You're thinking that we are always"; + mes "getting our plans spoiled, aren't"; + mes "you?"; + next; + mes "[Carolling]"; + mes "I know that we are not good at"; + mes "controlling stuff, but our rewards"; + mes "are good, right?"; + next; + select("........................"); + mes "[Carolling]"; + mes "Hey, we treat you good..."; + next; + select("........................"); + mes "[Carolling]"; + mes "You are so cruel to me!"; + mes "Bad! Bad!"; + next; + mes "[Carolling]"; + mes "Please, for our children's"; + mes "hope!!!?"; + mes "Please bring me 6 Singing Crystal"; + mes "Pieces from ^0000FFViolent Gift Boxes^000000!"; + next; + emotion 33; + mes "[Carolling]"; + mes "They're definitely as"; + mes "harsh as their name."; + mes "Go on please!"; + set iROxmas08carol,1; + close; + + case 4: + mes "[Carolling]"; + mes "Santa costumes!!"; + mes "You know, the santa costumes that"; + mes "the monsters are wearing now aren't"; + mes "genuine!"; + next; + mes "[Carolling]"; + mes "The rumor 'round here is, Lutie's"; + mes "designer made these costumes."; + next; + mes "[Carolling]"; + mes "Every year, adventurers challenge"; + mes "to attack Antonio the fake Santa,"; + mes "but there's no way to catch up to"; + mes "him due to his hat and costume!"; + next; + mes "[Carolling]"; + mes "Are there some spcial abilities"; + mes "within them?"; + mes "There's still the designer in the"; + mes "Christmas village... How about"; + mes "asking her to make that costume?"; + next; + emotion 18; + mes "[Carolling]"; + mes "Carolling's hot news! Ha!"; + mes "It's hot, huh?"; + close; + + + case 5: + mes "[Carolling]"; + mes "A-N-T-O-N-I-O!!!"; + mes "As I heard, this Antonio is quite"; + mes "different from before."; + next; + mes "[Carolling]"; + mes "He seems to be quite resolved with"; + mes "himself since he ran away from"; + mes "people before."; + next; + mes "[Carolling]"; + mes "And he isn't alone anymore... is"; + mes "what I heard..."; + next; + emotion 18; + mes "[Carolling]"; + mes "Carolling's hot news! Ha!"; + mes "Hotness, right?"; + close; + } + } + + if (iROxmas08carol == 1) { + if (countitem(6092) < 6) { + mes "[Carolling]"; + mes "Maybe, it's quite hard to make a"; + mes "jukebox for the villages, but a"; + mes "music box might be possible."; + next; + mes "[Carolling]"; + mes "We need the ^0000FFSinging Crystal Pieces^000000"; + mes "that the monsters ate up."; + next; + mes "[Carolling]"; + mes "Please bring me ^0000FF6 Singing Crystal Pieces^000000, and you will be rewarded with presents!"; + next; + mes "[Carolling]"; + mes "For all of the children of this"; + mes "world!!!"; + mes "Please bring me ^0000FF6Singing Crystal"; + mes "Pieces^000000 from ^0000FFViolent Gift Boxes^000000!"; + next; + emotion 33; + mes "[Carolling]"; + mes "Be careful!"; + mes "They're definitely as"; + mes "harsh as their name."; + mes "Take care!!!"; + close; + }else{ + specialeffect 75; + mes "[Carolling]"; + mes "Don't cry, don't cry!"; + mes "Santa won't give you a"; + mes "gift if you're crying."; + next; + mes "[Carolling]"; + select("I got them!"); + mes "[Carolling]"; + mes "Wow, you got them!"; + mes "They are so cruel, aren't they?"; + mes "I'm happy to see you again."; + next; + mes "[Carolling]"; + mes "Let's count together!"; + mes "... ..."; + mes "Six!!"; + next; + mes "[Carolling]"; + mes "All right! We can start to make our"; + mes "music box with crystal fragments."; + next; + mes "[Carolling]"; + mes "We would amplify the sounds of the"; + mes "crystal fragments to sound through"; + mes "the music box."; + next; + mes "[Carolling]"; + mes "You know, a music box that sounds"; + mes "like a jukebox!"; + next; + mes "[Carolling]"; + mes "It's handy. You can carry it, as"; + mes "well as listen to sweet carols"; + mes "anywhere. Doesn't that sound"; + mes "cool!?"; + next; + mes "[Carolling]"; + mes "So, we need more of some"; + mes "materials."; + mes "^0000FF10 Wooden Block, 1 Hammer Of"; + mes "Blacksmith, 1 Jubilee, 10 Sticky"; + mes "Mucus, 3-karat Diamond^000000!"; + next; + delitem 6092,6; + emotion 33; + set iROxmas08carol,2; + mes "[Carolling]"; + mes "Those are all needed."; + mes "Isn't that easy?"; + close; + } + } + + if (iROxmas08carol == 2) { + if (countitem(1019) < 10 || countitem(1005) < 1 || countitem(7312) < 1 || countitem(938) < 10 || countitem(732) < 1) { + mes "[Carolling]"; + mes "We can make a music box"; + mes "with Singing Crystal Pieces."; + mes "It's handy, you can hear carols"; + mes "anywhere. Sounds cool?"; + next; + mes "[Carolling]"; + mes "So, we need more of some materials."; + mes "^0000FF10 Wooden Block, 1 Hammer Of"; + mes "Blacksmith, 1 Jubilee, 10 Sticky"; + mes "Mucus, 3-karat Diamond^000000!"; + next; + emotion 33; + mes "[Carolling]"; + mes "That's all we need."; + mes "Isn't that easy?"; + close; + }else{ + specialeffect 75; + mes "[Carolling]"; + mes "Jingle bells, jingle bells,"; + mes "jingle all the way!"; + mes "O what fun it is to ride, in a"; + mes "one... horse... o-pen... sleigh!!!"; + next; + mes "[Carolling]"; + mes "Wow!"; + mes "You came back!"; + mes "Did you bring all the"; + mes "materials?"; + next; + mes "[Carolling]"; + mes "Good!"; + mes "No need to hesitate! Let's get"; + mes "started to make our music box."; + next; + mes "[Carolling]"; + specialeffect 101; + mes "Blacksmith hammers on wooden"; + mes "block... and we shape the frame."; + next; + mes "[Carolling]"; + //(effect - stones from ground?) + mes "Please use the Singing Crystal"; + mes "Pieces for a column, the Diamond as"; + mes "a prop, and the Sticky Mucus as"; + mes "glue."; + next; + mes "[Carolling]"; + specialeffect 1; + mes "And now..."; + mes "we decorate with a Jubilee..."; + next; + mes "[Carolling]"; + specialeffect 88; + mes "The last step...!"; + mes "Breating life into it!"; + next; + mes "[Carolling]"; + mes "It's done now!!!"; + next; + mes "[Carolling]"; + mes "It's so cool! Isn't it cute!!?!"; + next; + mes "[Carolling]"; + mes "You did as I requested, so I will"; + mes "give you gifts, as promised."; + next; + mes "[Carolling]"; + mes "One, is this music box."; + mes "Please play this music box all over"; + mes "the villages!"; + next; + mes "[Carolling]"; + mes "Another present is a Christmas cake"; + mes "especially shaped like your name!"; + mes "I made this cake shaped like your"; + mes "name!"; + next; + mes "[Carolling]"; + mes "Don't worry, it tastes good."; + next; + emotion 33; + getitem 2784,1; + getnameditem 12354,"+strcharinfo(0)+"; + delitem 1019,10; + delitem 1005,1; + delitem 7312,1; + delitem 938,10; + delitem 732,1; + set iROxmas08carol,3; + mes "[Carolling]"; + mes "Thanks a lot."; + mes "Merry Christmas!"; + mes "Have a good holiday season!"; + close; + } + } +} + +// ============= Santa Claus - Card Game =============== +// ===================================================== +- script Santa Claus#iROxmas08::08santa 718,{ + mes "[Santa Claus]"; + mes "Wow! Were you naughty or nice this"; + mes "year?"; + mes "All right, what comes to your mind"; + mes "when you think about Christmas?"; + next; + switch(select("Carolling:Santa Claus:Gift Boxes:Santa Costume:Not much really...")) { + + case 1: + mes "[Santa Claus]"; + mes "Carolling! That's good!"; + mes "A sweet carol always makes"; + mes "Christmas more happy!!!"; + next; + mes "[Santa Claus]"; + mes "Yes indeed Carolling spreads Joy"; + mes "throughout the world?"; + close; + + case 2: + mes "[Santa Claus]"; + if (Sex) { + mes "Ho ho ho! What a good boy!"; + }else{ + mes "Ho ho ho! What a good girl!"; + } + next; + mes "[Santa Claus]"; + mes "But you should be wary of a fake"; + mes "Santa romaing around."; + mes "Have you heard of Antonio, who"; + mes "invades villages every Christmas?"; + next; + mes "[Santa Claus]"; + mes "He has stolen my gifts, as well as"; + mes "attacked adventurers around Toy and"; + mes "Lutie field."; + next; + mes "[Santa Claus]"; + mes "A bad Santa ruins us good Santa's"; + mes "reputations!"; + mes "The World Santa Organization is"; + mes "considering this a grave"; + mes "situation."; + close; + + case 3: + mes "[Santa Claus]"; + mes "A gift box! That sounds good!"; + mes "It's so exciting to open gift boxes"; + mes "when you wake up on Christmas"; + mes "morning!!!"; + next; + mes "[Santa Claus]"; + mes "But we have very little gifts now,"; + mes "since Santa Antonio has stolen my"; + mes "gift bag."; + next; + mes "[Santa Claus]"; + mes "Many adventurers try to catch up"; + mes "to him, but he is not easy to catch."; + next; + mes "[Santa Claus]"; + mes "Anyway let those adventurers try to"; + mes "catch him, I have a small game for"; + mes "you."; + next; + mes "[Santa Claus]"; + mes "I will give you a small gift if you"; + mes "beat me!"; + next; + mes "[Santa Claus]"; + mes "Do you want to play a game with"; + mes "me?"; + next; + if (select("No, thanks.:Yes, I would.") == 1) { + mes "[Santa Claus]"; + mes "Aww, don't be afraid. If you've"; + mes "been a little naughty this year I"; + mes "won't stuff your stockings with"; + mes "coal."; + next; + mes "[Santa Claus]"; + mes "I will stay here throughout the"; + mes "Christmas season, just visit me"; + mes "when you change your mind."; + close; + } + if (gettimetick(2) < SantaCardTime) { + mes "[Santa Claus]"; + mes "Um... You've played the game"; + mes "recently haven't you?"; + next; + mes "[Santa Claus]"; + mes "You can try the game once a hour."; + mes "Please visit me after the one hour"; + mes "has passed."; + close; + } + set .@SantaCardTurn,0; + set .@SantaCardWins,0; + mes "[Santa Claus]"; + mes "Wow! You're so cool!"; + next; + mes "[Santa Claus]"; + mes "Let me explain how to play this"; + mes "game."; + next; + mes "[Santa Claus]"; + mes "It's quite simple. I will pick one"; + mes "of three cards: Poring Card,"; + mes "Ghostring Card, and Angeling Card."; + mes "Guess which card I pick and"; + mes "you're a winner!"; + next; + mes "[Santa Claus]"; + mes "If you guess right 3 times out of"; + mes "5, I will give you a gift."; + mes "Let's get started!"; + next; + while(.@SantaCardTurn != 5) { + emotion 56; + mes "[Santa Claus]"; + mes "First let me shuffle up these"; + mes "cards... Ok!!!"; + next; + specialeffect 0; + mes "[Santa Claus]"; + mes "One!"; + next; + specialeffect 1; + mes "[Santa Claus]"; + mes "Two!"; + next; + specialeffect 2; + mes "[Santa Claus]"; + mes "Three!"; + next; + specialeffect 18; + mes "[Santa Claus]"; + mes "I'm picking up only one!"; + next; + cutin "sorry",4; + mes "[Santa Claus]"; + mes "I'm picking up only one!"; + mes "Please guess what is is."; + next; + switch(select("Poring:Angeling:Ghostring")) { + case 1: + mes "["+strcharinfo(0)+"]"; + mes "Um...I choose Poring!"; + set .@SantaCardP,1; + next; + break; + + case 2: + mes "["+strcharinfo(0)+"]"; + mes "Um...I choose Angeling!"; + set .@SantaCardP,2; + next; + break; + + case 3: + mes "["+strcharinfo(0)+"]"; + mes "Um...I choose Ghostring!"; + set .@SantaCardP,3; + next; + } + mes "[Santa Claus]"; + mes "Let's see!!"; + mes "One! Two! Three!"; + set .@SantaCardNpc, rand(1,3); + next; + mes "[Santa Claus]"; + mes "Let's see!!"; + mes "One! Two! Three!"; + if (.@SantaCardNpc == 1) { + cutin "ニクオトォオ",4; + } + else if (.@SantaCardNpc == 2) { + cutin "ソ」チゥクオトォオ",4; + } + else if (.@SantaCardNpc == 3) { + cutin "ースコニョクオトォオ",4; + } + next; + set .@SantaCardTurn,.@SantaCardTurn+1; + if (.@SantaCardP == .@SantaCardNpc) { + set .@SantaCardWins,.@SantaCardWins+1; + emotion 0; + emotion 5,1; + cutin "",255; + mes "[Santa Claus]"; + mes "You're lucky."; + mes "Can you guess the right card the"; + mes "next time around?"; + next; + }else{ + emotion 0; + emotion 23,1; + cutin "",255; + mes "[Santa Claus]"; + mes "Aww maybe next time..."; + next; + } + } + if (.@SantaCardWins < 3) { + mes "["+strcharinfo(0)+"]"; + mes "This is just luck. Let me try"; + mes "again!!"; + next; + mes "[Santa Claus]"; + mes "Whenever you want."; + close; + }else{ + mes "[Santa Claus]"; + mes "You're so good!"; + next; + mes "[Santa Claus]"; + mes "Now this gift is for you. Put your"; + mes "hand into the bag and pick only"; + mes "one."; + set .@SantaCardPrize, rand(1,12); + next; + if (.@SantaCardPrize == 1) { + getitem 12354,2; + } + else if (.@SantaCardPrize == 2) { + getitem 595,3; + } + else if (.@SantaCardPrize == 3) { + getitem 593,3; + } + else if (.@SantaCardPrize == 4) { + getitem 12236,3; + } + else if (.@SantaCardPrize == 5) { + getitem 538,10; + } + else if (.@SantaCardPrize == 6) { + getitem 14546,10; + } + else if (.@SantaCardPrize == 7) { + getitem 5136,1; + } + else if (.@SantaCardPrize == 8) { + getitem 603,1; + } + else if (.@SantaCardPrize == 9) { + getitem 12130,1; + } + else if (.@SantaCardPrize == 10) { + getitem 14550,10; + } + else if (.@SantaCardPrize == 11) { + getitem 12132,3; + } + else if (.@SantaCardPrize == 12) { + getitem 594,3; + } + set SantaCardTime,gettimetick(2)+3600; + mes "[Santa Claus]"; + mes "Good job! Thanks for playing the"; + mes "card game with me! Merry"; + mes "Christmas!"; + close; + } + + case 4: + mes "[Santa Claus]"; + mes "Do you mean that ever so"; + mes "fashionable costume for Santa's and"; + mes "youngsters!?!"; + mes "Light-weight, fashionable, and"; + mes "keeps you warm!"; + next; + mes "[Santa Claus]"; + mes "There used to be designer who"; + mes "visited my house to make my Santa"; + mes "costumes. Do you have any ideas?"; + close; + + case 5: + mes "[Santa Claus]"; + mes "........................"; + next; + mes "[Santa Claus]"; + mes "........................"; + if (Sex) { + mes "Oh! Poor boy..."; + }else{ + mes "Oh! Poor girl..."; + } + next; + mes "[Santa Claus]"; + mes "........................"; + if (Sex) { + mes "Oh! Poor boy..."; + }else{ + mes "Oh! Poor girl..."; + } + mes "..."; + next; + mes "[Santa Claus]"; + mes "You should open your heart to the"; + mes "spirit of Christmas!"; + mes "Once you do, I know you'll be able"; + mes "to think of something."; + close; + } +} + +payon,171,109,4 duplicate(08santa) Santa Claus#0801 718 +prontera,156,285,4 duplicate(08santa) Santa Claus#0802 718 +alberta,117,66,4 duplicate(08santa) Santa Claus#0803 718 +geffen,119,70,4 duplicate(08santa) Santa Claus#0804 718 +morocc,158,104,4 duplicate(08santa) Santa Claus#0805 718 + + +// ============= Louise Kim - Santa Suit =============== +// ===================================================== +xmas_in,89,92,4 script Louise Kim#iROxmas08 714,{ + mes "[Louise Kim]"; + mes "I always thought about how boring"; + mes "Santa Claus is wearing a too boring"; + mes "costume. Too boring!"; + next; + mes "[Louise Kim]"; + mes "I could make a glamorous style for"; + mes "him!"; + next; + mes "[Louise Kim]"; + mes "I once made a costume for"; + mes "the notorious figure Antonio!"; + mes "The reason catching up to him"; + mes "is so hard, is that his clothes"; + mes "have been given strong power!"; + mes "I blessed them with good luck!"; + next; + emotion 3; + mes "[Louise Kim]"; + mes "Preta Porter!!"; + mes "Which is quite luxurious"; + mes "but sold at good price ~"; + next; + mes "[Louise Kim]"; + mes "Hey loosers! You can share my sense"; + mes "of fashion and wear my look if you"; + mes "run a light mission for me."; + next; + mes "[Louise Kim]"; + mes "Are you interested?"; + next; + if (select("Nope.:Yes, please.") == 1) { + mes "[Louise Kim]"; + mes "Ah!"; + mes "You're silly! You lost your big"; + mes "chance!"; + next; + emotion 18; + mes "[Louise Kim]"; + mes "Come to me later if you"; + mes "want to get the mission."; + mes "I, Louise Kim, am generous"; + mes "enough to accept you next time."; + close; + } + mes "[Louise Kim]"; + mes "You're so cool."; + next; + mes "[Louise Kim]"; + mes "Don't worry about this mission."; + mes "It's not that difficult."; + mes "I'm only in need of some"; + mes "materials. Things that are"; + mes "beyond my ability..."; + next; + mes "[Louise Kim]"; + mes "Anyway, can you bring me some"; + mes "stuff?"; + next; + if (select("Why not? What do you need?:Sorry, no time.") == 2) { + emotion 18; + mes "[Louise Kim]"; + mes "What?"; + mes "You will definitely regret it."; + mes "No more chances later."; + close; + } + mes "[Louise Kim]"; + mes "All right, you're cool!!"; + mes "You need to bring me: ^0000FFCotton Shirt,"; + mes "3 Red Potion, Holy Water, 4 Wrapping"; + mes "Paper, Wrapping Lace^000000.."; + next; + mes "[Louise Kim]"; + mes "If you bring me all that stuff, I"; + mes "can make you a glamorous Santa"; + mes "costume."; + next; + if (countitem(2301) < 1 || countitem(501) < 3 || countitem(523) < 1 || countitem(7175) < 4 || countitem(7174) < 1) { + mes "[Louise Kim]"; + mes "If you were to bring me all the"; + mes "stuff, I would make you a wonderful"; + mes "costume, for free..."; + next; + emotion 3; + mes "[Louise Kim]"; + mes "Please see me again if you are"; + mes "interested."; + close; + }else{ + select("Here you are."); + emotion 33; + mes "[Louise Kim]"; + mes "Oh! Good!"; + mes "Let's not delay."; + mes "I will show you my limitless"; + mes "ability."; + next; + mes "-She pours everything in a pot-"; + mes "-even the shirt goes in!-"; + mes "-She takes it out with skill-"; + mes "-and many blessings she sings.-"; + next; + specialeffect 42; + emotion 2; + mes "[Louise Kim]"; + mes "By artist, Louise Kim!"; + mes "All over the world will be blessed"; + mes "tonight!"; + next; + mes "-Pour red potion in another pot-"; + mes "-then stir all of its parts.-"; + mes "-Put the cotton shirts in-"; + mes "-and dye it for grateful hearts.-"; + mes "-Thread by thread-"; + mes "-String by string-"; + mes "-Count your blessings and sing!-"; + next; + specialeffect 75; + emotion 2; + mes "[Louise Kim]"; + mes "By artist, Louise Kim!"; + mes "All over the world will be blessed"; + mes "tonight!"; + next; + mes "-She is knitting clothes-"; + mes "-with a hooked needle-"; + mes "-with her great skill.-"; + mes "Spread your blessings,-"; + mes "cheer and goodwill!-"; + next; + specialeffect 91; + emotion 3; + mes "[Louise Kim]"; + mes "This is miraculous!"; + mes "I am a genius of the world."; + mes "Artist, Louise Kim!!!"; + next; + mes "[Louise Kim]"; + mes "All right! Isn't it wonderful?"; + mes "You can call it what you wish."; + mes "My fashion is radiant."; + mes "I ain't envious of Designer"; + mes "Pierre."; + next; + emotion 18; + mes "[Louise Kim]"; + mes "I am supposed to get paid well,"; + mes "however I will just let it"; + mes "be free, since this is Christmas!"; + next; + delitem 2301,1; + delitem 501,3; + delitem 523,1; + delitem 7175,4; + delitem 7174,1; + getitem 12132,1; + mes "[Louise Kim]"; + mes "Go brag about these wonderful"; + mes "clothes. There wouldn't be"; + mes "any without me, Louise Kim."; + close; + } +} + +//XMAS MOBS +prt_fild00,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +prt_fild00,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +prt_fild00,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +prt_fild00,0,0,0,0 monster Antonio 1247,1,0,0,0 + +prt_fild01,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +prt_fild01,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +prt_fild01,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +prt_fild01,0,0,0,0 monster Antonio 1247,1,0,0,0 + +prt_fild02,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +prt_fild02,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +prt_fild02,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +prt_fild02,0,0,0,0 monster Antonio 1247,1,0,0,0 + +prt_fild03,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +prt_fild03,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +prt_fild03,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +prt_fild03,0,0,0,0 monster Antonio 1247,1,0,0,0 + +prt_fild04,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +prt_fild04,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +prt_fild04,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +prt_fild04,0,0,0,0 monster Antonio 1247,1,0,0,0 + +prt_fild05,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +prt_fild05,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +prt_fild05,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +prt_fild05,0,0,0,0 monster Antonio 1247,1,0,0,0 + +prt_fild06,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +prt_fild06,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +prt_fild06,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +prt_fild06,0,0,0,0 monster Antonio 1247,1,0,0,0 + +prt_fild07,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +prt_fild07,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +prt_fild07,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +prt_fild07,0,0,0,0 monster Antonio 1247,1,0,0,0 + +prt_fild08,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +prt_fild08,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +prt_fild08,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +prt_fild08,0,0,0,0 monster Antonio 1247,1,0,0,0 + +prt_fild09,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +prt_fild09,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +prt_fild09,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +prt_fild09,0,0,0,0 monster Antonio 1247,1,0,0,0 + +prt_fild10,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +prt_fild10,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +prt_fild10,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +prt_fild10,0,0,0,0 monster Antonio 1247,1,0,0,0 + +prt_fild11,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +prt_fild11,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +prt_fild11,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +prt_fild11,0,0,0,0 monster Antonio 1247,1,0,0,0 + +pay_fild01,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +pay_fild01,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +pay_fild01,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +pay_fild01,0,0,0,0 monster Antonio 1247,1,0,0,0 + +pay_fild02,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +pay_fild02,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +pay_fild02,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +pay_fild02,0,0,0,0 monster Antonio 1247,1,0,0,0 + +pay_fild03,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +pay_fild03,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +pay_fild03,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +pay_fild03,0,0,0,0 monster Antonio 1247,1,0,0,0 + +pay_fild04,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +pay_fild04,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +pay_fild04,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +pay_fild04,0,0,0,0 monster Antonio 1247,1,0,0,0 + +pay_fild05,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +pay_fild05,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +pay_fild05,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +pay_fild05,0,0,0,0 monster Antonio 1247,1,0,0,0 + +pay_fild06,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +pay_fild06,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +pay_fild06,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +pay_fild06,0,0,0,0 monster Antonio 1247,1,0,0,0 + +pay_fild07,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +pay_fild07,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +pay_fild07,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +pay_fild07,0,0,0,0 monster Antonio 1247,1,0,0,0 + +pay_fild08,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +pay_fild08,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +pay_fild08,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +pay_fild08,0,0,0,0 monster Antonio 1247,1,0,0,0 + +pay_fild09,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +pay_fild09,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +pay_fild09,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +pay_fild09,0,0,0,0 monster Antonio 1247,1,0,0,0 + +pay_fild10,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +pay_fild10,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +pay_fild10,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +pay_fild10,0,0,0,0 monster Antonio 1247,1,0,0,0 + +pay_fild11,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +pay_fild11,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +pay_fild11,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +pay_fild11,0,0,0,0 monster Antonio 1247,1,0,0,0 + +gef_fild00,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +gef_fild00,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +gef_fild00,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +gef_fild00,0,0,0,0 monster Antonio 1247,1,0,0,0 + +gef_fild01,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +gef_fild01,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +gef_fild01,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +gef_fild01,0,0,0,0 monster Antonio 1247,1,0,0,0 + +gef_fild02,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +gef_fild02,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +gef_fild02,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +gef_fild02,0,0,0,0 monster Antonio 1247,1,0,0,0 + +gef_fild03,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +gef_fild03,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +gef_fild03,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +gef_fild03,0,0,0,0 monster Antonio 1247,1,0,0,0 + +gef_fild04,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +gef_fild04,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +gef_fild04,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +gef_fild04,0,0,0,0 monster Antonio 1247,1,0,0,0 + +gef_fild05,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +gef_fild05,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +gef_fild05,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +gef_fild05,0,0,0,0 monster Antonio 1247,1,0,0,0 + +gef_fild06,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +gef_fild06,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +gef_fild06,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +gef_fild06,0,0,0,0 monster Antonio 1247,1,0,0,0 + +gef_fild07,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +gef_fild07,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +gef_fild07,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +gef_fild07,0,0,0,0 monster Antonio 1247,1,0,0,0 + +gef_fild08,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +gef_fild08,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +gef_fild08,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +gef_fild08,0,0,0,0 monster Antonio 1247,1,0,0,0 + +gef_fild09,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +gef_fild09,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +gef_fild09,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +gef_fild09,0,0,0,0 monster Antonio 1247,1,0,0,0 + +gef_fild10,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +gef_fild10,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +gef_fild10,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +gef_fild10,0,0,0,0 monster Antonio 1247,1,0,0,0 + +gef_fild11,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +gef_fild11,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +gef_fild11,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +gef_fild11,0,0,0,0 monster Antonio 1247,1,0,0,0 + +gef_fild12,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +gef_fild12,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +gef_fild12,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +gef_fild12,0,0,0,0 monster Antonio 1247,1,0,0,0 + +gef_fild13,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +gef_fild13,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +gef_fild13,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +gef_fild13,0,0,0,0 monster Antonio 1247,1,0,0,0 + +gef_fild14,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +gef_fild14,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +gef_fild14,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 +gef_fild14,0,0,0,0 monster Antonio 1247,1,0,0,0 + +xmas_fild01,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 +xmas_fild01,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 +xmas_fild01,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 xmas_fild01,0,0,0,0 monster Antonio 1247,1,0,0,0
\ No newline at end of file diff --git a/npc/events/valentinesday_2009.txt b/npc/events/valentinesday_2009.txt index 0ecb45896..02845d3e2 100644 --- a/npc/events/valentinesday_2009.txt +++ b/npc/events/valentinesday_2009.txt @@ -1,784 +1,784 @@ -//===== eAthena Script =======================================
-//= iRO Valentine's Day Event (2009)
-//===== By: ==================================================
-//= Kisuka
-//===== Current Version: =====================================
-//= 1.2
-//===== Compatible With: =====================================
-//= eAthena SVN
-//===== Description: =========================================
-//= iRO Valentine's Day Event. (2009)
-//= Make Chocolate/Chocolate Boxes/Home-Made Chocolate.
-//= Make Valentine's Rings/Boxes.
-//= Trade rings to those of opposite gender.
-//= Register rings you have gotten for votes.
-//=
-//= The male and female with the most votes at the end of
-//= the event will receive item (14466) from GM team.
-//=
-//= Must enable the event items in item_db2 and item_trade!
-//===== Additional Comments: =================================
-//= 1.0 First version. [Kisuka]
-//= 1.1-1.2 Fixed exploits with unlimited rings and non deleting choco [Lupus]
-//============================================================
-
-// Marco Bassinio (Chocolate/Chocolate Box maker)
-prontera,164,174,4 script Trader#Val09 58,{
- mes "[Marco Bassinio]";
- mes "Hey, folks! Here's something you don't see everyday!";
- mes "Something you can never find in Rune-Midgarts!";
- mes "Something that makes you happy with just one bite!";
- next;
- mes "[Marco Bassinio]";
- mes "It's the perfect dessert and the perfect gift for loved ones.";
- mes "High-quality, traditional homemade chocolate only 5000z each!";
- next;
- switch(select("I'll take it, please!:I want to wrap the chocolate!:End trading.")) {
- case 1:
- mes "[Marco Bassinio]";
- mes "Ahaha, my dear.";
- mes "This chocolate is";
- mes "nothing like others.";
- mes "Every piece bears the";
- mes "devotion of the person";
- mes "who made it!";
- next;
- mes "[Marco Bassinio]";
- mes "So, that's why I can't sell";
- mes "more than 5 of them at a time.";
- mes "If you really really want more,";
- mes "then talk to me again.";
- mes "How many do you want anyway?";
- next;
- while(.@input <= 0 || .@input > 5) {
- input .@input;
- if (.@input < 1) {
- mes "[Marco Bassinio]";
- mes "Oh, it's such a shame!";
- mes "I'm sure you'll miss";
- mes "this opportunity and";
- mes "regret you didn't buy it.";
- next;
- mes "[Marco Bassinio]";
- mes "Remember, you can never";
- mes "find this anywhere else!";
- mes "Come back anytime,";
- mes "when you change your mind.";
- close;
- }
- if (.@val09choco > 5) {
- mes "[Marco Bassinio]";
- mes "Ugh.. Didn't I tell you?";
- mes "5 is the maximum!";
- mes "I can't sell more than";
- mes "that to the same person.";
- next;
- mes "[Marco Bassinio]";
- mes "And you know it's not";
- mes "like an everyday meal.";
- mes "Eating too much is not";
- mes "really good for you.";
- next;
- }
- }
- if (!checkweight(558, .@input)) {
- mes "[Marco Bassinio]";
- mes "You're carrying too many items.";
- mes "Please use the Kafra Services.";
- close;
- }
- set .@price, .@input * 5000;
- if (Zeny < .@price) {
- mes "[Marco Bassinio]";
- mes "Looks like you don't have";
- mes "enough zeny with ya.";
- mes "Maybe you should borrow";
- mes "some zeny from a friend.";
- mes "Cuz, I'm not gonna";
- mes "be here everyday.";
- close;
- }else{
- mes "[Marco Bassinio]";
- mes "Good for you!";
- mes "It's also perfect as a gift!";
- mes "You know you can't get this";
- mes "kind of chocolate normally.";
- next;
- mes "[Marco Bassinio]";
- mes "If you want more,";
- mes "you should come back.";
- mes "Might be a good idea to";
- mes "buy some more while";
- mes "you have a chance...!";
- set Zeny,Zeny - .@price;
- getitem 558,.@input;
- close;
- }
- case 2:
- mes "[Marco Bassinio]";
- mes "If you want to gift-wrap";
- mes "the chocolate, of course,";
- mes "you need chocolate,";
- mes "plus, wrapping paper,";
- mes "wrapping strap and a box.";
- next;
- mes "[Marco Bassinio]";
- mes "You also need to pay";
- mes "500 zeny to carve your";
- mes "name on the box.";
- mes "Are you all prepared...?";
- next;
- if(countitem(7175) < 1 || countitem(7174) < 1 || countitem(7948) < 1 || Zeny < 500) {
- mes "[Marco Bassinio]";
- mes "Hmm.. Looks like you don't";
- mes "have enough materials to";
- mes "decorate the gift box..";
- mes "You can't just put your gift";
- mes "into some plain looking box..";
- mes "Don't you think?";
- next;
- mes "[Marco Bassinio]";
- mes "You need to bring some";
- mes "wrapping paper,";
- mes "wrapping strap, and a box.";
- mes "Oh, also bring 500 zeny,";
- mes "and don't forget to bring your";
- mes "true loving heart with you!!";
- close;
- }
- if(countitem(558) < 1) {
- mes "[Marco Bassinio]";
- mes "Hey, look, adventurer!";
- mes "I can't create something right away!";
- mes "You know I'm not an alchemist or anything.";
- next;
- mes "[Marco Bassinio]";
- mes "You're not saying that you";
- mes "want an empty chocolate box";
- mes "without any chocolate in it,";
- mes "am I right?";
- close;
- }
- if (!checkweight(12744,1)) {
- mes "[Marco Bassinio]";
- mes "You're carrying too many items.";
- mes "Please use the Kafra Services.";
- close;
- }
- mes "[Marco Bassinio]";
- mes "Here, look!";
- mes "It's your chocolate box";
- mes "with your name on it.";
- mes "Isn't it fabulous?";
- mes "See, your name looks";
- mes "great on the box!";
- next;
- delitem 558,1;
- delitem 7175,1;
- delitem 7174,1;
- delitem 7948,1;
- set Zeny,Zeny-500;
- getnameditem 12744,strcharinfo(0);
- mes "[Marco Bassinio]";
- mes "Happy Valentine's Day!";
- mes "Valentine's the reason I came back.";
- close;
- case 3:
- mes "[Marco Bassinio]";
- mes "Oh, it's such a shame!";
- mes "I'm sure you'll miss";
- mes "this opportunity and";
- mes "regret you didn't buy it.";
- next;
- mes "[Marco Bassinio]";
- mes "Remember, you can never";
- mes "find this anywhere else!";
- mes "Come back anytime,";
- mes "when you change your mind.";
- close;
- }
-}
-
-// Packs Trader (Sells Wrapping Paper, Lace, and Box)
-prontera,147,171,5 script Packs Trader#Val09 58,{
- mes "[Packs Trader]";
- mes "Hello.";
- mes "I am a Packs Trader,";
- mes "I sell paper boxes and";
- mes "supplies for packing presents.";
- next;
- while(1) {
- mes "[Packs Trader]";
- mes "Do you have something to buy?";
- next;
- switch(select("Packing Paper:Packing Ribbon:Box:Cancel.")) {
- case 1:
- mes "[Packs Trader]";
- mes "It's 200 zeny for";
- mes "1 Packing Paper.";
- mes "How many do you want?";
- mes "You can't buy more";
- mes "than 10 items at once.";
- next;
- input .@input;
- if (.@input <= 0) {
- mes "[Packs Trader]";
- mes "Nothing to buy.";
- mes "Come back when";
- mes "you need something.";
- close;
- }
- if (.@input > 10) {
- mes "[Packs Trader]";
- mes "I told you not to buy more than 10...";
- next;
- break;
- }
- if (!checkweight(7175,.@input)) {
- mes "[Packs Trader]";
- mes "You're carrying too many items.";
- mes "Please use the Kafra Services.";
- close;
- }
- set .@price, .@input * 200;
- if (Zeny < .@price) {
- mes "[Packs Trader]";
- mes "You don't have enough money.";
- mes "Please check your wallet.";
- next;
- break;
- }else{
- mes "[Packs Trader]";
- mes "Here they are.";
- mes "Hope it makes your";
- mes "Valentine's Day";
- mes "more pleasing!";
- set Zeny,Zeny-.@price;
- getitem 7175,.@input;
- next;
- break;
- }
- case 2:
- mes "[Packs Trader]";
- mes "It's 200 zeny for";
- mes "1 Packing Ribbon.";
- mes "How many do you want?";
- mes "You can't buy more";
- mes "than 10 items at once.";
- next;
- input .@input;
- if (.@input <= 0) {
- mes "[Packs Trader]";
- mes "Nothing to buy.";
- mes "Come back when";
- mes "you need something.";
- close;
- }
- if (.@input > 10) {
- mes "[Packs Trader]";
- mes "I told you not to buy more than 10...";
- next;
- break;
- }
- if (!checkweight(7174,.@input)) {
- mes "[Packs Trader]";
- mes "You're carrying too many items.";
- mes "Please use the Kafra Services.";
- close;
- }
- set .@price, .@input * 200;
- if (Zeny < .@price) {
- mes "[Packs Trader]";
- mes "You don't have enough money.";
- mes "Please check your wallet.";
- next;
- break;
- }else{
- mes "[Packs Trader]";
- mes "Here they are.";
- mes "Hope it makes your";
- mes "Valentine's Day";
- mes "more pleasing!";
- set Zeny,Zeny-.@price;
- getitem 7174,.@input;
- next;
- break;
- }
- case 3:
- mes "[Packs Trader]";
- mes "It's 600 zeny for";
- mes "1 Box.";
- mes "How many do you want?";
- mes "You can't buy more";
- mes "than 10 items at once.";
- next;
- input .@input;
- if (.@input <= 0) {
- mes "[Packs Trader]";
- mes "Nothing to buy.";
- mes "Come back when";
- mes "you need something.";
- close;
- }
- if (.@input > 10) {
- mes "[Packs Trader]";
- mes "I told you not to buy more than 10...";
- next;
- break;
- }
- if (!checkweight(7948,.@input)) {
- mes "[Packs Trader]";
- mes "You're carrying too many items.";
- mes "Please use the Kafra Services.";
- close;
- }
- set .@price, .@input * 600;
- if (Zeny < .@price) {
- mes "[Packs Trader]";
- mes "You don't have enough money.";
- mes "Please check your wallet.";
- next;
- break;
- }else{
- mes "[Packs Trader]";
- mes "Here they are.";
- mes "Hope it makes your";
- mes "Valentine's Day";
- mes "more pleasing!";
- set Zeny,Zeny-.@price;
- getitem 7948,.@input;
- next;
- break;
- }
- case 4:
- mes "[Packs Trader]";
- mes "Goodbye!";
- mes "And enjoy your";
- mes "Valentine's Day.";
- close;
- }
- }
-}
-
-// Event Ring Maker (Makes ring for players)
-prontera,154,185,5 script Event Ring Maker#Val09 721,{
- if (BaseLevel < 75) {
- mes "[Event Ring Maker]";
- mes "Hello, I only make the";
- mes "Valentine rings to those";
- mes "experienced adventurers";
- mes "Level 75 or above.";
- next;
- mes "[Event Ring Maker]";
- mes "You're not fully";
- mes "experienced yet.";
- mes "Come back when you're";
- mes "experienced enough to";
- mes "handle the quests.";
- close;
- }
-
- if (iROval09ring >= 1) {
- mes "[Event Ring Maker]";
- mes "The box with the ring,";
- mes "carved with your name,";
- mes "is for the one you love.";
- next;
- mes "[Event Ring Maker]";
- mes "As for the rings that you";
- mes "receive from others, they";
- mes "should all be registered";
- mes "with the Vote Manager.";
- mes "She is standing near";
- mes "the Prontera Fountain.";
- next;
- mes "[Event Ring Maker]";
- mes "Only the most popular";
- mes "male and female are";
- mes "subjected to getting rewards.";
- mes "Be aware, and always";
- mes "try to stay popular!";
- close;
- }
-
- mes "[Event Ring Maker]";
- mes "Hi, there, how are ya?";
- mes "Come to me if you're";
- mes "interested in the event,";
- mes "'Who's Valentine's Hottest?'";
- next;
- mes "[Event Ring Maker]";
- mes "I make the most precious";
- mes "rings that you can give";
- mes "to your sweethearts.";
- mes "Those rings are very special";
- mes "because I carve";
- mes "your names on them!";
- next;
- mes "[Event Ring Maker]";
- mes "Isn't it exciting?";
- mes "Isn't it such a brilliant idea?";
- mes "Give these special rings";
- mes "to your sweethearts!";
- next;
- mes "[Event Ring Maker]";
- mes "You should hurry 'cuz";
- mes "this event will only";
- mes "last for two weeks.";
- mes "Give that special someone";
- mes "a gift of a Valentine's ring.";
- next;
- mes "[Event Ring Maker]";
- mes "Remember, you can only";
- mes "generate the ring once.";
- mes "You also need Wrapping Paper,";
- mes "Wrapping Strap and a Box";
- mes "to make the ring.";
- next;
- mes "[Event Ring Maker]";
- mes "So you better be sure";
- mes "of who you give this to.";
- mes "By the way,";
- mes "It costs 1,000 zeny.";
- mes "Would you like to make one?";
- next;
- if(select("Hmm.. I gotta give it a second thought...:Sure.") == 1) {
- mes "[Event Ring Maker]";
- mes "Alrighty!";
- mes "You can't put a rush";
- mes "on such a thing like this.";
- mes "Think about what";
- mes "you truly want.";
- mes "Just follow your heart!";
- close;
- }
- if(countitem(7175) < 1 || countitem(7174) < 1 || countitem(7948) < 1 || Zeny < 1000) {
- mes "[Event Ring Maker]";
- mes "Well, you don't have";
- mes "enough materials";
- mes "to make a gift box.";
- mes "Check what you have,";
- mes "and come back later";
- mes "with all the materials.";
- close;
- }
- mes "[Event Ring Maker]";
- mes "Okie Dokie!";
- mes "I'll make it right away.";
- next;
- delitem 7175,1;
- delitem 7174,1;
- delitem 7948,1;
- set Zeny,Zeny-1000;
- set iROval09ring,1;
- if (Sex) {
- getnameditem 12742,strcharinfo(0);
- }else{
- getnameditem 12743,strcharinfo(0);
- }
- mes "[Event Ring Maker]";
- mes "Here, the most precious";
- mes "ring in the world!";
- mes "Don't forget, you can never";
- mes "make this ring again.";
- next;
- mes "[Event Ring Maker]";
- mes "You must pick out the one";
- mes "that you really really love,";
- mes "and give this ring";
- mes "to that person.";
- next;
- mes "[Event Ring Maker]";
- mes "Of course, you've got to";
- mes "get rings from others,";
- mes "that's the way you can";
- mes "participate in the voting, right?";
- mes "Challenge yourself to become";
- mes "Valentine's Hottest!";
- close;
-}
-
-// Valentine Vote Manager (Registers votes)
-prontera,157,185,4 script Valentine Vote Manager#v 113,{
- mes "[Valentine Vote Manager]";
- mes "Hello, I'm the Valentine's";
- mes "Vote Manager.";
- mes "I'm in charge of collecting";
- mes "rings for this event!";
- next;
- mes "[Valentine Vote Manager]";
- mes "I register the rings";
- mes "you get from others";
- mes "and I calculate the";
- mes "total number of rings.";
- next;
- mes "[Valentine Vote Manager]";
- mes "You know what I do besides";
- mes "just counting those rings?";
- mes "I can tell you the adventurer's";
- mes "name who's got the";
- mes "most number of votes.";
- next;
- mes "[Valentine Vote Manager]";
- mes "Plus, you can also find out how";
- mes "many votes he/she got.";
- next;
- while (1) {
- mes "[Valentine Vote Manager]";
- mes "So, what do you want?";
- next;
- switch(select("Please register my rings.:Please count my votes.:Nothing, for now.")) {
- case 1:
- mes "[Valentine Vote Manager]";
- mes "Please tell me how many";
- mes "rings you want to register.";
- next;
- mes "[Valentine Vote Manager]";
- mes "When you write the";
- mes "number of the rings,";
- mes "the number shouldn't be";
- mes "larger than the number of";
- mes "rings you actually have.";
- mes "'0', cancels everything.";
- next;
- input .@input;
-
- if (.@input <= 0) {
- mes "[Valentine Vote Manager]";
- mes "You have entered 0.";
- mes "Registration is cancelled.";
- next;
- break;
- }
-
- if (Sex) {
- if (countitem(7947) > .@input) {
- mes "[Valentine Vote Manager]";
- mes "Seems like the value you entered is too small.";
- mes "I know you've got more. Be honest, dear.";
- next;
- break;
- }
-
- if (countitem(7947) < .@input) {
- mes "[Valentine Vote Manager]";
- mes "Seems like the value you entered is too large.";
- mes "I know you've got less. Be honest, dear.";
- next;
- break;
- }
-
- mes "[Valentine Vote Manager]";
- mes "I'll take those silver rings,";
- mes "and count the votes for you.";
- mes "Thank you for participating.";
- delitem 7947,.@input;
- set Val09Rings,Val09Rings+.@input;
- if (Val09Rings > $Val09votes_M) {
- set $Val09votes_M,Val09Rings;
- set $Val09name_M$,strcharinfo(0);
- }
- next;
- break;
- }else{
- if (countitem(7946) > .@input) {
- mes "[Valentine Vote Manager]";
- mes "Seems like the value you entered is too small.";
- mes "I know you've got more. Be honest, dear.";
- next;
- break;
- }
-
- if (countitem(7946) < .@input) {
- mes "[Valentine Vote Manager]";
- mes "Seems like the value you entered is too large.";
- mes "I know you've got less. Be honest, dear.";
- next;
- break;
- }
-
- mes "[Valentine Vote Manager]";
- mes "I'll take those gold rings,";
- mes "and count the votes for you.";
- mes "Thank you for participating.";
- delitem 7946,.@input;
- set Val09Rings,Val09Rings+.@input;
- if (Val09Rings > $Val09votes_F) {
- set $Val09votes_F,Val09Rings;
- set $Val09name_F$,strcharinfo(0);
- }
- next;
- break;
- }
- case 2:
- mes "[Valentine Vote Manager]";
- mes "Let's see...";
- mes "You have registered..";
- mes ".."+Val09Rings+" rings so far.";
- mes "and...";
- next;
- mes "[Valentine Vote Manager]";
- mes "The current record shows... "+$Val09name_M$+" is the male vote leader who's registered the total of "+$Val09votes_M+" rings.";
- next;
- mes "[Valentine Vote Manager]";
- mes "The current record shows... "+$Val09name_F$+" is the female vote leader who's registered the total of "+$Val09votes_F+" rings.";
- next;
- break;
-
- case 3:
- mes "[Valentine Vote Manager]";
- mes "Hey, you can be popular too!";
- mes "Anyone can... really!";
- mes "Though you have to try a lot";
- mes "harder, but still~ Hahaha!";
- close;
- }
- }
-}
-
-// Charles Orleans (Makes Home-Made Chocolates)
-prt_castle,42,35,3 script Dessert Manager#Val09 47,{
- if (Sex) {
- mes "[Charles Orleans]";
- mes "Monsieur~! What brings";
- mes "you to my beautiful atelier?";
- mes "What is it that you want?";
- mes "Well, my sparkling eyes";
- mes "get dried and lose their shine";
- mes "if not for the pretty little lady.";
- next;
- mes "[Charles Orleans]";
- mes "Please leave me alone unless";
- mes "you have business with me.";
- mes "Haaaa~ I'm a busy person.";
- mes "Don't bother me....";
- mes "Annoying, annoying, annoying~~!";
- close;
- }
-
- mes "[Charles Orleans]";
- mes "Oh, Mademoiselle!";
- mes "This little trifling space";
- mes "felt like heaven the";
- mes "minute you walked in!";
- mes "Can I help you with";
- mes "anything, if it's alright?";
- next;
- if(select("Please, make me some chocolate.:Don't bother. I'm just passing by.") == 2) {
- mes "[Charles Orleans]";
- mes "Ahhh, this is so heartbreaking.";
- mes "How could you say that?";
- mes "You're just so mean.";
- mes "Don't bother? Just passing by?";
- next;
- mes "[Charles Orleans]";
- mes "What can I do to make you";
- mes "pay a little attention to me?";
- mes "Please.. I feel like my soul is lost..";
- close;
- }
- if(countitem(558) < 3) {
- mes "[Charles Orleans]";
- mes "Ahhh, Mademoiselle.";
- mes "I'm not an alchemist,";
- mes "or a magician.";
- mes "I don't just make chocolate";
- mes "out of anything.";
- next;
- mes "[Charles Orleans]";
- mes "I always think of making";
- mes "chocolate as artistic work.";
- mes "You see, I'm no ordinary cook...";
- mes "I make chocolate with feelings..";
- mes "messages of loving hearts..";
- next;
- mes "[Charles Orleans]";
- mes "I make masterpieces.";
- mes "No one can imitate";
- mes "the looks and the taste.";
- mes "Yes, it's nothing like";
- mes "ordinary chocolate!";
- next;
- mes "[Charles Orleans]";
- mes "I'm afraid I can't make it";
- mes "and prove it to you now.";
- mes "This is really a shame!";
- next;
- mes "[Charles Orleans]";
- mes "I really want to thank";
- mes "you for visiting me";
- mes "and if you only bring";
- mes "^3152ff3 Chocolates^000000,";
- mes "I'll make you chocolate";
- mes "like you've never seen...";
- next;
- mes "[Charles Orleans]";
- mes "never tasted before...";
- mes "Mademoiselle, with your spirit,";
- mes "I'm sure you can bring";
- mes "3 pieces of chocolate.";
- mes "I have no doubt at all.";
- next;
- mes "[Charles Orleans]";
- mes "So... what do you think?";
- mes "Can you bring ^3152ff3 Chocolates^000000?";
- mes "I could get them myself,";
- mes "but I'm tied up with so much";
- mes "work as you see right now.";
- next;
- mes "[Charles Orleans]";
- mes "Adios, Mademoiselle.....";
- mes "I'll be waiting for you.";
- close;
- }else{
- if (!checkweight(559,1)) {
- mes "[Charles Orleans]";
- mes "You're carrying too many items.";
- mes "Please use the Kafra Services.";
- close;
- }
- mes "[Charles Orleans]";
- mes "Oh, Mademoiselle!";
- mes "I'll make the best chocolate";
- mes "with the pieces you've brought.";
- mes "I'm going to put the light of";
- mes "your eyes into this chocolate";
- mes "that no one can resist.";
- next;
- mes "[Charles Orleans]";
- mes "It'll be stronger than a";
- mes "sweet sweet love potion.....";
- next;
- mes "[Charles Orleans]";
- mes "Un, Deux, Trois, Quatre.....";
- mes "Just like the ugly duckling that";
- mes "turned to a beautiful swan-";
- mes "Ordinary chocolate pieces are";
- mes "becoming a piece of art!";
- next;
- mes "[Charles Orleans]";
- mes "They're changing!";
- mes "They're getting warm,";
- mes "softly changing the shape,";
- mes "getting stronger again!";
- mes "Oh, is it a master piece or";
- mes "what...!!";
- next;
- mes "[Charles Orleans]";
- mes "Here you go, Mademoiselle!";
- mes "Ahahahaha, just look at this!";
- mes "I can't believe I made this.";
- mes "Oh, I can't take my eyes off..!!";
- delitem 558,3;
- getitem 559,1;
- next;
- mes "[Charles Orleans]";
- mes "Alright. Mademoiselle,";
- mes "I hope this is just";
- mes "what you wanted,";
- mes "for it bears your";
- mes "beautiful heart inside.";
- close;
- }
-
+//===== eAthena Script ======================================= +//= iRO Valentine's Day Event (2009) +//===== By: ================================================== +//= Kisuka +//===== Current Version: ===================================== +//= 1.2 +//===== Compatible With: ===================================== +//= eAthena SVN +//===== Description: ========================================= +//= iRO Valentine's Day Event. (2009) +//= Make Chocolate/Chocolate Boxes/Home-Made Chocolate. +//= Make Valentine's Rings/Boxes. +//= Trade rings to those of opposite gender. +//= Register rings you have gotten for votes. +//= +//= The male and female with the most votes at the end of +//= the event will receive item (14466) from GM team. +//= +//= Must enable the event items in item_db2 and item_trade! +//===== Additional Comments: ================================= +//= 1.0 First version. [Kisuka] +//= 1.1-1.2 Fixed exploits with unlimited rings and non deleting choco [Lupus] +//============================================================ + +// Marco Bassinio (Chocolate/Chocolate Box maker) +prontera,164,174,4 script Trader#Val09 58,{ + mes "[Marco Bassinio]"; + mes "Hey, folks! Here's something you don't see everyday!"; + mes "Something you can never find in Rune-Midgarts!"; + mes "Something that makes you happy with just one bite!"; + next; + mes "[Marco Bassinio]"; + mes "It's the perfect dessert and the perfect gift for loved ones."; + mes "High-quality, traditional homemade chocolate only 5000z each!"; + next; + switch(select("I'll take it, please!:I want to wrap the chocolate!:End trading.")) { + case 1: + mes "[Marco Bassinio]"; + mes "Ahaha, my dear."; + mes "This chocolate is"; + mes "nothing like others."; + mes "Every piece bears the"; + mes "devotion of the person"; + mes "who made it!"; + next; + mes "[Marco Bassinio]"; + mes "So, that's why I can't sell"; + mes "more than 5 of them at a time."; + mes "If you really really want more,"; + mes "then talk to me again."; + mes "How many do you want anyway?"; + next; + while(.@input <= 0 || .@input > 5) { + input .@input; + if (.@input < 1) { + mes "[Marco Bassinio]"; + mes "Oh, it's such a shame!"; + mes "I'm sure you'll miss"; + mes "this opportunity and"; + mes "regret you didn't buy it."; + next; + mes "[Marco Bassinio]"; + mes "Remember, you can never"; + mes "find this anywhere else!"; + mes "Come back anytime,"; + mes "when you change your mind."; + close; + } + if (.@val09choco > 5) { + mes "[Marco Bassinio]"; + mes "Ugh.. Didn't I tell you?"; + mes "5 is the maximum!"; + mes "I can't sell more than"; + mes "that to the same person."; + next; + mes "[Marco Bassinio]"; + mes "And you know it's not"; + mes "like an everyday meal."; + mes "Eating too much is not"; + mes "really good for you."; + next; + } + } + if (!checkweight(558, .@input)) { + mes "[Marco Bassinio]"; + mes "You're carrying too many items."; + mes "Please use the Kafra Services."; + close; + } + set .@price, .@input * 5000; + if (Zeny < .@price) { + mes "[Marco Bassinio]"; + mes "Looks like you don't have"; + mes "enough zeny with ya."; + mes "Maybe you should borrow"; + mes "some zeny from a friend."; + mes "Cuz, I'm not gonna"; + mes "be here everyday."; + close; + }else{ + mes "[Marco Bassinio]"; + mes "Good for you!"; + mes "It's also perfect as a gift!"; + mes "You know you can't get this"; + mes "kind of chocolate normally."; + next; + mes "[Marco Bassinio]"; + mes "If you want more,"; + mes "you should come back."; + mes "Might be a good idea to"; + mes "buy some more while"; + mes "you have a chance...!"; + set Zeny,Zeny - .@price; + getitem 558,.@input; + close; + } + case 2: + mes "[Marco Bassinio]"; + mes "If you want to gift-wrap"; + mes "the chocolate, of course,"; + mes "you need chocolate,"; + mes "plus, wrapping paper,"; + mes "wrapping strap and a box."; + next; + mes "[Marco Bassinio]"; + mes "You also need to pay"; + mes "500 zeny to carve your"; + mes "name on the box."; + mes "Are you all prepared...?"; + next; + if(countitem(7175) < 1 || countitem(7174) < 1 || countitem(7948) < 1 || Zeny < 500) { + mes "[Marco Bassinio]"; + mes "Hmm.. Looks like you don't"; + mes "have enough materials to"; + mes "decorate the gift box.."; + mes "You can't just put your gift"; + mes "into some plain looking box.."; + mes "Don't you think?"; + next; + mes "[Marco Bassinio]"; + mes "You need to bring some"; + mes "wrapping paper,"; + mes "wrapping strap, and a box."; + mes "Oh, also bring 500 zeny,"; + mes "and don't forget to bring your"; + mes "true loving heart with you!!"; + close; + } + if(countitem(558) < 1) { + mes "[Marco Bassinio]"; + mes "Hey, look, adventurer!"; + mes "I can't create something right away!"; + mes "You know I'm not an alchemist or anything."; + next; + mes "[Marco Bassinio]"; + mes "You're not saying that you"; + mes "want an empty chocolate box"; + mes "without any chocolate in it,"; + mes "am I right?"; + close; + } + if (!checkweight(12744,1)) { + mes "[Marco Bassinio]"; + mes "You're carrying too many items."; + mes "Please use the Kafra Services."; + close; + } + mes "[Marco Bassinio]"; + mes "Here, look!"; + mes "It's your chocolate box"; + mes "with your name on it."; + mes "Isn't it fabulous?"; + mes "See, your name looks"; + mes "great on the box!"; + next; + delitem 558,1; + delitem 7175,1; + delitem 7174,1; + delitem 7948,1; + set Zeny,Zeny-500; + getnameditem 12744,strcharinfo(0); + mes "[Marco Bassinio]"; + mes "Happy Valentine's Day!"; + mes "Valentine's the reason I came back."; + close; + case 3: + mes "[Marco Bassinio]"; + mes "Oh, it's such a shame!"; + mes "I'm sure you'll miss"; + mes "this opportunity and"; + mes "regret you didn't buy it."; + next; + mes "[Marco Bassinio]"; + mes "Remember, you can never"; + mes "find this anywhere else!"; + mes "Come back anytime,"; + mes "when you change your mind."; + close; + } +} + +// Packs Trader (Sells Wrapping Paper, Lace, and Box) +prontera,147,171,5 script Packs Trader#Val09 58,{ + mes "[Packs Trader]"; + mes "Hello."; + mes "I am a Packs Trader,"; + mes "I sell paper boxes and"; + mes "supplies for packing presents."; + next; + while(1) { + mes "[Packs Trader]"; + mes "Do you have something to buy?"; + next; + switch(select("Packing Paper:Packing Ribbon:Box:Cancel.")) { + case 1: + mes "[Packs Trader]"; + mes "It's 200 zeny for"; + mes "1 Packing Paper."; + mes "How many do you want?"; + mes "You can't buy more"; + mes "than 10 items at once."; + next; + input .@input; + if (.@input <= 0) { + mes "[Packs Trader]"; + mes "Nothing to buy."; + mes "Come back when"; + mes "you need something."; + close; + } + if (.@input > 10) { + mes "[Packs Trader]"; + mes "I told you not to buy more than 10..."; + next; + break; + } + if (!checkweight(7175,.@input)) { + mes "[Packs Trader]"; + mes "You're carrying too many items."; + mes "Please use the Kafra Services."; + close; + } + set .@price, .@input * 200; + if (Zeny < .@price) { + mes "[Packs Trader]"; + mes "You don't have enough money."; + mes "Please check your wallet."; + next; + break; + }else{ + mes "[Packs Trader]"; + mes "Here they are."; + mes "Hope it makes your"; + mes "Valentine's Day"; + mes "more pleasing!"; + set Zeny,Zeny-.@price; + getitem 7175,.@input; + next; + break; + } + case 2: + mes "[Packs Trader]"; + mes "It's 200 zeny for"; + mes "1 Packing Ribbon."; + mes "How many do you want?"; + mes "You can't buy more"; + mes "than 10 items at once."; + next; + input .@input; + if (.@input <= 0) { + mes "[Packs Trader]"; + mes "Nothing to buy."; + mes "Come back when"; + mes "you need something."; + close; + } + if (.@input > 10) { + mes "[Packs Trader]"; + mes "I told you not to buy more than 10..."; + next; + break; + } + if (!checkweight(7174,.@input)) { + mes "[Packs Trader]"; + mes "You're carrying too many items."; + mes "Please use the Kafra Services."; + close; + } + set .@price, .@input * 200; + if (Zeny < .@price) { + mes "[Packs Trader]"; + mes "You don't have enough money."; + mes "Please check your wallet."; + next; + break; + }else{ + mes "[Packs Trader]"; + mes "Here they are."; + mes "Hope it makes your"; + mes "Valentine's Day"; + mes "more pleasing!"; + set Zeny,Zeny-.@price; + getitem 7174,.@input; + next; + break; + } + case 3: + mes "[Packs Trader]"; + mes "It's 600 zeny for"; + mes "1 Box."; + mes "How many do you want?"; + mes "You can't buy more"; + mes "than 10 items at once."; + next; + input .@input; + if (.@input <= 0) { + mes "[Packs Trader]"; + mes "Nothing to buy."; + mes "Come back when"; + mes "you need something."; + close; + } + if (.@input > 10) { + mes "[Packs Trader]"; + mes "I told you not to buy more than 10..."; + next; + break; + } + if (!checkweight(7948,.@input)) { + mes "[Packs Trader]"; + mes "You're carrying too many items."; + mes "Please use the Kafra Services."; + close; + } + set .@price, .@input * 600; + if (Zeny < .@price) { + mes "[Packs Trader]"; + mes "You don't have enough money."; + mes "Please check your wallet."; + next; + break; + }else{ + mes "[Packs Trader]"; + mes "Here they are."; + mes "Hope it makes your"; + mes "Valentine's Day"; + mes "more pleasing!"; + set Zeny,Zeny-.@price; + getitem 7948,.@input; + next; + break; + } + case 4: + mes "[Packs Trader]"; + mes "Goodbye!"; + mes "And enjoy your"; + mes "Valentine's Day."; + close; + } + } +} + +// Event Ring Maker (Makes ring for players) +prontera,154,185,5 script Event Ring Maker#Val09 721,{ + if (BaseLevel < 75) { + mes "[Event Ring Maker]"; + mes "Hello, I only make the"; + mes "Valentine rings to those"; + mes "experienced adventurers"; + mes "Level 75 or above."; + next; + mes "[Event Ring Maker]"; + mes "You're not fully"; + mes "experienced yet."; + mes "Come back when you're"; + mes "experienced enough to"; + mes "handle the quests."; + close; + } + + if (iROval09ring >= 1) { + mes "[Event Ring Maker]"; + mes "The box with the ring,"; + mes "carved with your name,"; + mes "is for the one you love."; + next; + mes "[Event Ring Maker]"; + mes "As for the rings that you"; + mes "receive from others, they"; + mes "should all be registered"; + mes "with the Vote Manager."; + mes "She is standing near"; + mes "the Prontera Fountain."; + next; + mes "[Event Ring Maker]"; + mes "Only the most popular"; + mes "male and female are"; + mes "subjected to getting rewards."; + mes "Be aware, and always"; + mes "try to stay popular!"; + close; + } + + mes "[Event Ring Maker]"; + mes "Hi, there, how are ya?"; + mes "Come to me if you're"; + mes "interested in the event,"; + mes "'Who's Valentine's Hottest?'"; + next; + mes "[Event Ring Maker]"; + mes "I make the most precious"; + mes "rings that you can give"; + mes "to your sweethearts."; + mes "Those rings are very special"; + mes "because I carve"; + mes "your names on them!"; + next; + mes "[Event Ring Maker]"; + mes "Isn't it exciting?"; + mes "Isn't it such a brilliant idea?"; + mes "Give these special rings"; + mes "to your sweethearts!"; + next; + mes "[Event Ring Maker]"; + mes "You should hurry 'cuz"; + mes "this event will only"; + mes "last for two weeks."; + mes "Give that special someone"; + mes "a gift of a Valentine's ring."; + next; + mes "[Event Ring Maker]"; + mes "Remember, you can only"; + mes "generate the ring once."; + mes "You also need Wrapping Paper,"; + mes "Wrapping Strap and a Box"; + mes "to make the ring."; + next; + mes "[Event Ring Maker]"; + mes "So you better be sure"; + mes "of who you give this to."; + mes "By the way,"; + mes "It costs 1,000 zeny."; + mes "Would you like to make one?"; + next; + if(select("Hmm.. I gotta give it a second thought...:Sure.") == 1) { + mes "[Event Ring Maker]"; + mes "Alrighty!"; + mes "You can't put a rush"; + mes "on such a thing like this."; + mes "Think about what"; + mes "you truly want."; + mes "Just follow your heart!"; + close; + } + if(countitem(7175) < 1 || countitem(7174) < 1 || countitem(7948) < 1 || Zeny < 1000) { + mes "[Event Ring Maker]"; + mes "Well, you don't have"; + mes "enough materials"; + mes "to make a gift box."; + mes "Check what you have,"; + mes "and come back later"; + mes "with all the materials."; + close; + } + mes "[Event Ring Maker]"; + mes "Okie Dokie!"; + mes "I'll make it right away."; + next; + delitem 7175,1; + delitem 7174,1; + delitem 7948,1; + set Zeny,Zeny-1000; + set iROval09ring,1; + if (Sex) { + getnameditem 12742,strcharinfo(0); + }else{ + getnameditem 12743,strcharinfo(0); + } + mes "[Event Ring Maker]"; + mes "Here, the most precious"; + mes "ring in the world!"; + mes "Don't forget, you can never"; + mes "make this ring again."; + next; + mes "[Event Ring Maker]"; + mes "You must pick out the one"; + mes "that you really really love,"; + mes "and give this ring"; + mes "to that person."; + next; + mes "[Event Ring Maker]"; + mes "Of course, you've got to"; + mes "get rings from others,"; + mes "that's the way you can"; + mes "participate in the voting, right?"; + mes "Challenge yourself to become"; + mes "Valentine's Hottest!"; + close; +} + +// Valentine Vote Manager (Registers votes) +prontera,157,185,4 script Valentine Vote Manager#v 113,{ + mes "[Valentine Vote Manager]"; + mes "Hello, I'm the Valentine's"; + mes "Vote Manager."; + mes "I'm in charge of collecting"; + mes "rings for this event!"; + next; + mes "[Valentine Vote Manager]"; + mes "I register the rings"; + mes "you get from others"; + mes "and I calculate the"; + mes "total number of rings."; + next; + mes "[Valentine Vote Manager]"; + mes "You know what I do besides"; + mes "just counting those rings?"; + mes "I can tell you the adventurer's"; + mes "name who's got the"; + mes "most number of votes."; + next; + mes "[Valentine Vote Manager]"; + mes "Plus, you can also find out how"; + mes "many votes he/she got."; + next; + while (1) { + mes "[Valentine Vote Manager]"; + mes "So, what do you want?"; + next; + switch(select("Please register my rings.:Please count my votes.:Nothing, for now.")) { + case 1: + mes "[Valentine Vote Manager]"; + mes "Please tell me how many"; + mes "rings you want to register."; + next; + mes "[Valentine Vote Manager]"; + mes "When you write the"; + mes "number of the rings,"; + mes "the number shouldn't be"; + mes "larger than the number of"; + mes "rings you actually have."; + mes "'0', cancels everything."; + next; + input .@input; + + if (.@input <= 0) { + mes "[Valentine Vote Manager]"; + mes "You have entered 0."; + mes "Registration is cancelled."; + next; + break; + } + + if (Sex) { + if (countitem(7947) > .@input) { + mes "[Valentine Vote Manager]"; + mes "Seems like the value you entered is too small."; + mes "I know you've got more. Be honest, dear."; + next; + break; + } + + if (countitem(7947) < .@input) { + mes "[Valentine Vote Manager]"; + mes "Seems like the value you entered is too large."; + mes "I know you've got less. Be honest, dear."; + next; + break; + } + + mes "[Valentine Vote Manager]"; + mes "I'll take those silver rings,"; + mes "and count the votes for you."; + mes "Thank you for participating."; + delitem 7947,.@input; + set Val09Rings,Val09Rings+.@input; + if (Val09Rings > $Val09votes_M) { + set $Val09votes_M,Val09Rings; + set $Val09name_M$,strcharinfo(0); + } + next; + break; + }else{ + if (countitem(7946) > .@input) { + mes "[Valentine Vote Manager]"; + mes "Seems like the value you entered is too small."; + mes "I know you've got more. Be honest, dear."; + next; + break; + } + + if (countitem(7946) < .@input) { + mes "[Valentine Vote Manager]"; + mes "Seems like the value you entered is too large."; + mes "I know you've got less. Be honest, dear."; + next; + break; + } + + mes "[Valentine Vote Manager]"; + mes "I'll take those gold rings,"; + mes "and count the votes for you."; + mes "Thank you for participating."; + delitem 7946,.@input; + set Val09Rings,Val09Rings+.@input; + if (Val09Rings > $Val09votes_F) { + set $Val09votes_F,Val09Rings; + set $Val09name_F$,strcharinfo(0); + } + next; + break; + } + case 2: + mes "[Valentine Vote Manager]"; + mes "Let's see..."; + mes "You have registered.."; + mes ".."+Val09Rings+" rings so far."; + mes "and..."; + next; + mes "[Valentine Vote Manager]"; + mes "The current record shows... "+$Val09name_M$+" is the male vote leader who's registered the total of "+$Val09votes_M+" rings."; + next; + mes "[Valentine Vote Manager]"; + mes "The current record shows... "+$Val09name_F$+" is the female vote leader who's registered the total of "+$Val09votes_F+" rings."; + next; + break; + + case 3: + mes "[Valentine Vote Manager]"; + mes "Hey, you can be popular too!"; + mes "Anyone can... really!"; + mes "Though you have to try a lot"; + mes "harder, but still~ Hahaha!"; + close; + } + } +} + +// Charles Orleans (Makes Home-Made Chocolates) +prt_castle,42,35,3 script Dessert Manager#Val09 47,{ + if (Sex) { + mes "[Charles Orleans]"; + mes "Monsieur~! What brings"; + mes "you to my beautiful atelier?"; + mes "What is it that you want?"; + mes "Well, my sparkling eyes"; + mes "get dried and lose their shine"; + mes "if not for the pretty little lady."; + next; + mes "[Charles Orleans]"; + mes "Please leave me alone unless"; + mes "you have business with me."; + mes "Haaaa~ I'm a busy person."; + mes "Don't bother me...."; + mes "Annoying, annoying, annoying~~!"; + close; + } + + mes "[Charles Orleans]"; + mes "Oh, Mademoiselle!"; + mes "This little trifling space"; + mes "felt like heaven the"; + mes "minute you walked in!"; + mes "Can I help you with"; + mes "anything, if it's alright?"; + next; + if(select("Please, make me some chocolate.:Don't bother. I'm just passing by.") == 2) { + mes "[Charles Orleans]"; + mes "Ahhh, this is so heartbreaking."; + mes "How could you say that?"; + mes "You're just so mean."; + mes "Don't bother? Just passing by?"; + next; + mes "[Charles Orleans]"; + mes "What can I do to make you"; + mes "pay a little attention to me?"; + mes "Please.. I feel like my soul is lost.."; + close; + } + if(countitem(558) < 3) { + mes "[Charles Orleans]"; + mes "Ahhh, Mademoiselle."; + mes "I'm not an alchemist,"; + mes "or a magician."; + mes "I don't just make chocolate"; + mes "out of anything."; + next; + mes "[Charles Orleans]"; + mes "I always think of making"; + mes "chocolate as artistic work."; + mes "You see, I'm no ordinary cook..."; + mes "I make chocolate with feelings.."; + mes "messages of loving hearts.."; + next; + mes "[Charles Orleans]"; + mes "I make masterpieces."; + mes "No one can imitate"; + mes "the looks and the taste."; + mes "Yes, it's nothing like"; + mes "ordinary chocolate!"; + next; + mes "[Charles Orleans]"; + mes "I'm afraid I can't make it"; + mes "and prove it to you now."; + mes "This is really a shame!"; + next; + mes "[Charles Orleans]"; + mes "I really want to thank"; + mes "you for visiting me"; + mes "and if you only bring"; + mes "^3152ff3 Chocolates^000000,"; + mes "I'll make you chocolate"; + mes "like you've never seen..."; + next; + mes "[Charles Orleans]"; + mes "never tasted before..."; + mes "Mademoiselle, with your spirit,"; + mes "I'm sure you can bring"; + mes "3 pieces of chocolate."; + mes "I have no doubt at all."; + next; + mes "[Charles Orleans]"; + mes "So... what do you think?"; + mes "Can you bring ^3152ff3 Chocolates^000000?"; + mes "I could get them myself,"; + mes "but I'm tied up with so much"; + mes "work as you see right now."; + next; + mes "[Charles Orleans]"; + mes "Adios, Mademoiselle....."; + mes "I'll be waiting for you."; + close; + }else{ + if (!checkweight(559,1)) { + mes "[Charles Orleans]"; + mes "You're carrying too many items."; + mes "Please use the Kafra Services."; + close; + } + mes "[Charles Orleans]"; + mes "Oh, Mademoiselle!"; + mes "I'll make the best chocolate"; + mes "with the pieces you've brought."; + mes "I'm going to put the light of"; + mes "your eyes into this chocolate"; + mes "that no one can resist."; + next; + mes "[Charles Orleans]"; + mes "It'll be stronger than a"; + mes "sweet sweet love potion....."; + next; + mes "[Charles Orleans]"; + mes "Un, Deux, Trois, Quatre....."; + mes "Just like the ugly duckling that"; + mes "turned to a beautiful swan-"; + mes "Ordinary chocolate pieces are"; + mes "becoming a piece of art!"; + next; + mes "[Charles Orleans]"; + mes "They're changing!"; + mes "They're getting warm,"; + mes "softly changing the shape,"; + mes "getting stronger again!"; + mes "Oh, is it a master piece or"; + mes "what...!!"; + next; + mes "[Charles Orleans]"; + mes "Here you go, Mademoiselle!"; + mes "Ahahahaha, just look at this!"; + mes "I can't believe I made this."; + mes "Oh, I can't take my eyes off..!!"; + delitem 558,3; + getitem 559,1; + next; + mes "[Charles Orleans]"; + mes "Alright. Mademoiselle,"; + mes "I hope this is just"; + mes "what you wanted,"; + mes "for it bears your"; + mes "beautiful heart inside."; + close; + } + }
\ No newline at end of file diff --git a/npc/guides/guides_mosk.txt b/npc/guides/guides_mosk.txt index 92d246d09..b4b0fc655 100644 --- a/npc/guides/guides_mosk.txt +++ b/npc/guides/guides_mosk.txt @@ -1,91 +1,91 @@ -//===== eAthena Script =======================================
-//= Moscovia Guides
-//===== By: ==================================================
-//= Kisuka
-//===== Current Version: =====================================
-//= 1.0
-//===== Compatible With: =====================================
-//= eAthena SVN
-//===== Description: =========================================
-//= Guides for the town of Moscovia.
-//===== Additional Comments: =================================
-//= 1.0 First Version. [Kisuka]
-//============================================================
-
-moscovia,161,76,4 script Moscovia Guide#mosk 959,{
- mes "[Moscovia Guide]";
- mes "Welcome to Moscovia";
- mes "Here is the paradise spreading on";
- mes "the endless seas";
- mes "You'll be happy with the beautiful";
- mes "scenery and the sunlight!";
- next;
- mes "[Moscovia Guide]";
- mes "I was sent from Moscovia Palace";
- mes "to guide tourists and to give them";
- mes "information on this town.";
- mes "If you have some questions, please ask me.";
- next;
- switch(select("Ask where you can go.:Delete all the marks on the mini-map.:Cancel.")) {
- case 1:
- mes "[Moscovia Guide]";
- mes "Where would you like to go?";
- next;
- switch(select("The Palace:Armor Shop:Tool Shop:An Inn:Cancel")) {
- case 1:
- mes "[Moscovia Guide]";
- mes "The Palace can be found ^ff0000+^000000 at the";
- mes "end of the North sea from";
- mes "Rune-Midgarts.";
- mes "There resides our Lord the Czar of";
- mes "Moscovia and his retainers.";
- close2;
- viewpoint 1,257,138,1,0xFF0000;
- end;
- case 2:
- viewpoint 1,185,187,2,0x00FF00;
- mes "[Moscovia Guide]";
- mes "The Armor Shop is located at the";
- mes "southwest corner of town..";
- mes "You can buy armor made by the best";
- mes "craftsmen of Moscovia there.";
- close;
- case 3:
- mes "[Moscovia Guide]";
- mes "The Tool Shop is located just south";
- mes "from the center of town.";
- mes "You can find all sorts of things";
- mes "you need for your travels.";
- close2;
- viewpoint 1,223,174,3,0x00FF00;
- end;
- case 4:
- mes "[Moscovia Guide]";
- mes "The Inn 'Sticky Herb Tree' is just";
- mes "north from the center of town.";
- mes "If you need to rest, there is no";
- mes "better place to stay.";
- close2;
- viewpoint 1,229,208,4,0x3355FF;
- end;
- case 5:
- close;
- }
- case 2:
- mes "[Moscovia Guide]";
- mes "I've deleted all marks on the mini-map.";
- mes "Whenever you'd like to put marks";
- mes "there, you can ask me.";
- viewpoint 2,257,138,1,0xFF0000;
- viewpoint 2,185,187,2,0x00FF00;
- viewpoint 2,223,174,3,0x00FF00;
- viewpoint 2,229,208,4,0x3355FF;
- close;
-
- case 3:
- mes "[Moscovia Guide]";
- mes "It'd be great to walk about alone.";
- mes "Take care.";
- close;
- }
+//===== eAthena Script ======================================= +//= Moscovia Guides +//===== By: ================================================== +//= Kisuka +//===== Current Version: ===================================== +//= 1.0 +//===== Compatible With: ===================================== +//= eAthena SVN +//===== Description: ========================================= +//= Guides for the town of Moscovia. +//===== Additional Comments: ================================= +//= 1.0 First Version. [Kisuka] +//============================================================ + +moscovia,161,76,4 script Moscovia Guide#mosk 959,{ + mes "[Moscovia Guide]"; + mes "Welcome to Moscovia"; + mes "Here is the paradise spreading on"; + mes "the endless seas"; + mes "You'll be happy with the beautiful"; + mes "scenery and the sunlight!"; + next; + mes "[Moscovia Guide]"; + mes "I was sent from Moscovia Palace"; + mes "to guide tourists and to give them"; + mes "information on this town."; + mes "If you have some questions, please ask me."; + next; + switch(select("Ask where you can go.:Delete all the marks on the mini-map.:Cancel.")) { + case 1: + mes "[Moscovia Guide]"; + mes "Where would you like to go?"; + next; + switch(select("The Palace:Armor Shop:Tool Shop:An Inn:Cancel")) { + case 1: + mes "[Moscovia Guide]"; + mes "The Palace can be found ^ff0000+^000000 at the"; + mes "end of the North sea from"; + mes "Rune-Midgarts."; + mes "There resides our Lord the Czar of"; + mes "Moscovia and his retainers."; + close2; + viewpoint 1,257,138,1,0xFF0000; + end; + case 2: + viewpoint 1,185,187,2,0x00FF00; + mes "[Moscovia Guide]"; + mes "The Armor Shop is located at the"; + mes "southwest corner of town.."; + mes "You can buy armor made by the best"; + mes "craftsmen of Moscovia there."; + close; + case 3: + mes "[Moscovia Guide]"; + mes "The Tool Shop is located just south"; + mes "from the center of town."; + mes "You can find all sorts of things"; + mes "you need for your travels."; + close2; + viewpoint 1,223,174,3,0x00FF00; + end; + case 4: + mes "[Moscovia Guide]"; + mes "The Inn 'Sticky Herb Tree' is just"; + mes "north from the center of town."; + mes "If you need to rest, there is no"; + mes "better place to stay."; + close2; + viewpoint 1,229,208,4,0x3355FF; + end; + case 5: + close; + } + case 2: + mes "[Moscovia Guide]"; + mes "I've deleted all marks on the mini-map."; + mes "Whenever you'd like to put marks"; + mes "there, you can ask me."; + viewpoint 2,257,138,1,0xFF0000; + viewpoint 2,185,187,2,0x00FF00; + viewpoint 2,223,174,3,0x00FF00; + viewpoint 2,229,208,4,0x3355FF; + close; + + case 3: + mes "[Moscovia Guide]"; + mes "It'd be great to walk about alone."; + mes "Take care."; + close; + } }
\ No newline at end of file diff --git a/npc/kafras/kafras_mosk.txt b/npc/kafras/kafras_mosk.txt index 5d4710087..eef44d058 100644 --- a/npc/kafras/kafras_mosk.txt +++ b/npc/kafras/kafras_mosk.txt @@ -1,153 +1,153 @@ -//===== eAthena Script =======================================
-//= Moscovia Kafras
-//===== By: ==================================================
-//= Kisuka
-//===== Current Version: =====================================
-//= 1.0
-//===== Compatible With: =====================================
-//= eAthena SVN
-//===== Description: =========================================
-//= Kafras for the town of Moscovia.
-//===== Additional Comments: =================================
-//= 1.0 First Version. [Kisuka]
-//============================================================
-
-moscovia,223,191,4 script Kafra Staff#mosk 114,{
- cutin "kafra_04",2;
- mes "[Kafra Staff]";
- mes "Welcome to the";
- mes "Kafra Corporation.";
- mes "The Kafra services";
- mes "are always on your side.";
- mes "How may I assist you?";
- next;
- switch(select("Save:Use Storage:Rent a Pushcart:Check Other Information:Cancel")) {
- case 1:
- mes "[Kafra Staff]";
- mes "Your Respawn Point has";
- mes "been saved in the city of";
- mes "Moscovia. Thank you for";
- mes "using the Kafra Service.";
- savepoint "moscovia",221,194;
- close2;
- cutin "", 255;
- end;
- case 2:
- if(basicskillcheck() && getskilllv("NV_BASIC") < 6){
- mes "[Kafra Staff]";
- mes "I'm sorry, but you";
- mes "need the Novice's";
- mes "Basic Skill Level 6 to";
- mes "use the Storage Service.";
- close2;
- cutin "", 255;
- end;
- }
- if(countitem(7059)) delitem 7059,1;
- else {
- if(Zeny<80){
- mes "[Kafra Staff]";
- mes "I'm sorry, but you don't";
- mes "have enough zeny to use";
- mes "the Storage Service. Our";
- mes "Storage access fee is 80 zeny.";
- close2;
- cutin "", 255;
- end;
- }
- set Zeny, Zeny-80;
- set RESRVPTS, RESRVPTS + (80/5);
- }
- mes "[Kafra Staff]";
- mes "Here, let me open";
- mes "your Storage for you.";
- mes "Thank you for using";
- mes "the Kafra Service.";
-
- callfunc("F_CheckKafCode"); //check your storage password, if set
-
- close2;
- openstorage;
- cutin "", 255;
- end;
- case 3:
- if(baseClass != Job_Merchant){
- mes "[Kafra Staff]";
- mes "I'm sorry, but the";
- mes "Pushcart rental service";
- mes "is only available to Merchants,";
- mes "Blacksmiths, Master Smiths,";
- mes "Alchemists and Biochemists.";
- close2;
- cutin "", 255;
- end;
- }
-
- else if(checkcart() == 1){
- mes "[Kafra Staff]";
- mes "You already have";
- mes "a Pushcart equipped.";
- mes "Unfortunately, we can't";
- mes "rent more than one to";
- mes "each customer at a time.";
- close2;
- cutin "", 255;
- end;
- }
-
- if(countitem(7061) > 0) delitem 7061,1;
- else {
- mes "[Kafra Staff]";
- mes "The Pushcart rental";
- mes "fee is 700 zeny. Would";
- mes "you like to rent a Pushcart?";
- next;
- if(select("Rent a Pushcart.:Cancel.") == 1) {
- if(Zeny<700){
- mes "[Kafra Staff]";
- mes "I'm sorry, but you";
- mes "don't have enough";
- mes "zeny to pay the Pushcart";
- mes "rental fee of 700 zeny.";
- close2;
- cutin "", 255;
- end;
- }
- set Zeny,Zeny-700;
- set RESRVPTS, RESRVPTS + 48;
- }else{
- close2;
- cutin "", 255;
- end;
- }
- }
- setcart;
- close2;
- cutin "", 255;
- end;
- case 4:
- if(select("Check Special Reserve Points.:Cancel") == 2) {
- cutin "", 255;
- close;
- }
- mes "[Kafra Staff]";
- mes strcharinfo(0) + ", you have a total of";
- mes RESRVPTS+ " Special Reserve Points.";
- next;
- mes "[Kafra Staff]";
- mes "You can exchange your";
- mes "Special Reserve Points for";
- mes "rewards at the Kafra Main Office in Al De Baran. Please use our";
- mes "convenient services to see the benefits of our rewards program.";
- close2;
- cutin "", 255;
- end;
- case 5:
- mes "[Kafra Staff]";
- mes "We, here at Kafra Corporation,";
- mes "are always endeavoring to provide you with the best services. We hope that we meet your adventuring needs and standards of excellence.";
- close2;
- cutin "", 255;
- end;
- }
+//===== eAthena Script ======================================= +//= Moscovia Kafras +//===== By: ================================================== +//= Kisuka +//===== Current Version: ===================================== +//= 1.0 +//===== Compatible With: ===================================== +//= eAthena SVN +//===== Description: ========================================= +//= Kafras for the town of Moscovia. +//===== Additional Comments: ================================= +//= 1.0 First Version. [Kisuka] +//============================================================ + +moscovia,223,191,4 script Kafra Staff#mosk 114,{ + cutin "kafra_04",2; + mes "[Kafra Staff]"; + mes "Welcome to the"; + mes "Kafra Corporation."; + mes "The Kafra services"; + mes "are always on your side."; + mes "How may I assist you?"; + next; + switch(select("Save:Use Storage:Rent a Pushcart:Check Other Information:Cancel")) { + case 1: + mes "[Kafra Staff]"; + mes "Your Respawn Point has"; + mes "been saved in the city of"; + mes "Moscovia. Thank you for"; + mes "using the Kafra Service."; + savepoint "moscovia",221,194; + close2; + cutin "", 255; + end; + case 2: + if(basicskillcheck() && getskilllv("NV_BASIC") < 6){ + mes "[Kafra Staff]"; + mes "I'm sorry, but you"; + mes "need the Novice's"; + mes "Basic Skill Level 6 to"; + mes "use the Storage Service."; + close2; + cutin "", 255; + end; + } + if(countitem(7059)) delitem 7059,1; + else { + if(Zeny<80){ + mes "[Kafra Staff]"; + mes "I'm sorry, but you don't"; + mes "have enough zeny to use"; + mes "the Storage Service. Our"; + mes "Storage access fee is 80 zeny."; + close2; + cutin "", 255; + end; + } + set Zeny, Zeny-80; + set RESRVPTS, RESRVPTS + (80/5); + } + mes "[Kafra Staff]"; + mes "Here, let me open"; + mes "your Storage for you."; + mes "Thank you for using"; + mes "the Kafra Service."; + + callfunc("F_CheckKafCode"); //check your storage password, if set + + close2; + openstorage; + cutin "", 255; + end; + case 3: + if(baseClass != Job_Merchant){ + mes "[Kafra Staff]"; + mes "I'm sorry, but the"; + mes "Pushcart rental service"; + mes "is only available to Merchants,"; + mes "Blacksmiths, Master Smiths,"; + mes "Alchemists and Biochemists."; + close2; + cutin "", 255; + end; + } + + else if(checkcart() == 1){ + mes "[Kafra Staff]"; + mes "You already have"; + mes "a Pushcart equipped."; + mes "Unfortunately, we can't"; + mes "rent more than one to"; + mes "each customer at a time."; + close2; + cutin "", 255; + end; + } + + if(countitem(7061) > 0) delitem 7061,1; + else { + mes "[Kafra Staff]"; + mes "The Pushcart rental"; + mes "fee is 700 zeny. Would"; + mes "you like to rent a Pushcart?"; + next; + if(select("Rent a Pushcart.:Cancel.") == 1) { + if(Zeny<700){ + mes "[Kafra Staff]"; + mes "I'm sorry, but you"; + mes "don't have enough"; + mes "zeny to pay the Pushcart"; + mes "rental fee of 700 zeny."; + close2; + cutin "", 255; + end; + } + set Zeny,Zeny-700; + set RESRVPTS, RESRVPTS + 48; + }else{ + close2; + cutin "", 255; + end; + } + } + setcart; + close2; + cutin "", 255; + end; + case 4: + if(select("Check Special Reserve Points.:Cancel") == 2) { + cutin "", 255; + close; + } + mes "[Kafra Staff]"; + mes strcharinfo(0) + ", you have a total of"; + mes RESRVPTS+ " Special Reserve Points."; + next; + mes "[Kafra Staff]"; + mes "You can exchange your"; + mes "Special Reserve Points for"; + mes "rewards at the Kafra Main Office in Al De Baran. Please use our"; + mes "convenient services to see the benefits of our rewards program."; + close2; + cutin "", 255; + end; + case 5: + mes "[Kafra Staff]"; + mes "We, here at Kafra Corporation,"; + mes "are always endeavoring to provide you with the best services. We hope that we meet your adventuring needs and standards of excellence."; + close2; + cutin "", 255; + end; + } }
\ No newline at end of file diff --git a/readme.html b/readme.html index 8bb8bf72d..4fee74ee7 100644 --- a/readme.html +++ b/readme.html @@ -1,349 +1,349 @@ -<html><head><link rel="stylesheet" type="text/css" href="./readme/readme.css"><title>eAthena - Introduction</title></head>
-
-<body>
-<div id="dleftbg">
-</div>
-<div id="drightbg">
-</div>
-<div id="canvas" align="center">
-<table cellspacing="0" cellpadding="0" border="0" id="ea" align="center">
- <tr>
- <td id="leftborder" valign="top">
- <table cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td id="leftborderspacer">
- </td>
- </tr>
- <tr>
- <td valign="top">
- <img src="./readme/images/leftborder.gif">
- </td>
- </tr>
- </table>
- </td>
- <td id="middle" valign="top">
- <table cellspacing="0" cellpadding="0" border="0" valign="top">
- <tr>
- <td id="logo" valign="top">
- <table class="w800" cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td valign="top">
- <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%">
- <tr>
- <td rowspan="4">
- <img src="./readme/images/chara.gif" width="366" height="274">
- </td>
- <td rowspan="4" width="129">
- </td>
- <td colspan="2" width="305" height="51" align="right">
- <img src="./readme/images/banner.gif" width="305" height="51">
- </td>
- </tr>
- <tr>
- <td id="title" colspan="2" align="right">
- Introduction
- </td>
- </tr>
- <tr>
- <td height="81" colspan="2">
- </td>
- </tr>
- <tr>
- <td class="navi" align="right">
- Introduction<br>
- <a href="./readme/changelog.html">Changelog</a><br>
- <a href="./readme/features.html">Features</a><br>
- <a href="./readme/npcfeatures.html">NPC Features</a>
-
- </td>
- <td class="navi" align="right">
- <a href="./readme/setup.html">Setup</a><br>
- <a href="./readme/gmcommands.html">GM Commands</a><br>
- <a href="./readme/faq.html">FAQ</a><br>
- <a href="./readme/resources.html">Resources</a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td id="btmborder">
- <table class="w800" cellspacing="0" cellpadding="0" border="0" height="2">
- <tr>
- <td id="leftbtmborder"">
- </td>
- <td id="midbtmborder"">
- <img src="./readme/images/btmborder.gif" width="44" height="2">
- </td>
- <td id="rightbtmborder">
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td id="content">
- <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%">
- <tr>
- <td id="lefttext" valign="top">
-<h1>eAthena SVN series</h1>
-eAthena is an open-source Ragnarok Online server emulator. It's written in C, but we are working on a C++ version. Although it is cross-platform, we only officially support Win32 and Linux.
-<br>
-<br>eAthena is licensed under the GPL, so please give us credit if you use our code.
-<br>Our SVN (<a href="http://tortoisesvn.tigris.org/download.html">You may download TortoiseSVN here to access our SVN</a>) is located at <a href="http://66.118.142.23:8080/svn/ea/">http://66.118.142.23:8080/svn/ea/</a>. SVN stands for Subversion, which is similar to the commonly used CVS.
-<br>
-<br>P.S. If you had a hard time loading this readme, please use <a href="http://www.getfirefox.com">Firefox</a>.
-
- </td>
- <td id="midtext">
- </td>
- <td id="righttext" valign="top">
-<h1>The eAthena Team</h1>
-Here are our current developers. We have had many past developers, and if you come across this, please let us know ^_^.<br>
-
-<b>Developers</b>
-<table class="right">
- <tr>
- <td>
- Wallex
- </td>
- <td>
- Lupus
- </td>
- <td>
- DracoRPG
- </td>
- </tr>
- <tr>
- <td>
- MasterOfMuppets
- </td>
-
- <td>
- Fredzilla
- </td>
- <td>
- Kayla
- </td>
- </tr>
- <tr>
- <td>
- Kevin
- </td>
- <td>
- Shinomori
- </td>
- <td>
- Clownphobia(Cuteboi)
- </td>
- </tr>
- <tr>
- <td>
- LuzZza
- </td>
- <td>
- Evera
- </td>
- <td>
- Nexon
- </td>
- </tr>
- <tr>
- <td>
- Celest
- </td>
- <td>
- Wizputer
- </td>
- <td>
- Valaris
- </td>
- </tr>
- <tr>
- <td>
- Lance
- </td>
- <td>
- Komurka
- </td>
- <td>
-
- </td>
- </tr>
-</table>
-<br>
-<b>Mods/Admins</b>
-<table class="right">
- <tr>
- <td>
- Massdriller
- </td>
- <td>
- Deviant
- </td>
- <td>
- Delta
- </td>
- </tr>
- <tr>
- <td>
- Manipulator
- </td>
- <td>
- SantaPoring
- </td>
- <td>
- Davidchak
- </td>
- </tr>
- <tr>
- <td>
- Valaris
- </td><td></td><td></td>
- </tr>
- <tr>
- <td>
- </td>
- </tr>
-</table>
-<br>
-<b>Ex-Developers and Honorable Mentions</b>
-<table class="right">
- <tr>
- <td>
- RoVeRT
- </td>
- <td>
- AppleGirl
- </td>
- <td>
- Akaru/Hikaru
- </td>
- </tr>
- <tr>
- <td>
- Darkchild
- </td>
- <td>
- Kalaspuff
- </td>
- <td>
- Ajarn
- </td>
- </tr>
- <tr>
- <td>
- Fritz
- </td>
- <td>
- Aria
- </td>
- <td>
- Mass Zero
- </td>
- </tr>
- <tr>
- <td>
- Nana
- </td>
- <td>
- Shinigami
- </td>
- <td>
- Moonsoul
- </td>
- </tr>
- <tr>
- <td>
- Kobra_k88
- </td>
- <td>
- Codemaster
- </td>
- <td>
- Davidsiaw
- </td>
- </tr>
- <tr>
- <td>
- MC_Cameri
- </td>
- <td>
- Spira
- </td>
- <td>
- Lord
- </td>
- </tr>
- <tr>
- <td>
- Yor
- </td>
- <td>
- Sara-chan
- </td>
- <td>
- Mikage
- </td>
- </tr>
- <tr>
- <td>
- Ajs15822
- </td>
- <td>
- Cyberghost
- </td>
- <td>
- Azndragon
- </td>
- </tr>
- <tr>
- <td>
- Nasedo
- </td>
- <td>
- Sirius
- </td>
- </tr>
-</table>
- <br />
- <br />
- </strong>
-
- </td>
- </tr>
- <tr>
- <td colspan="3">
- © Content Copyright 2005 eAthena Development Team/Evera<br>
- © Design Copyright 2005 Evera
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
-
-</table>
- <td id="rightborder" valign="top">
- <table cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td id="rightborderspacer">
- </td>
- </tr>
- <tr>
- <td valign="top">
- <img src="./readme/images/rightborder.gif">
- </td>
- </tr>
- </table>
- </td>
-</div>
- </td>
- </tr>
- </table>
- </td>
-
- </tr>
-</body>
-</html>
-
+<html><head><link rel="stylesheet" type="text/css" href="./readme/readme.css"><title>eAthena - Introduction</title></head> + +<body> +<div id="dleftbg"> +</div> +<div id="drightbg"> +</div> +<div id="canvas" align="center"> +<table cellspacing="0" cellpadding="0" border="0" id="ea" align="center"> + <tr> + <td id="leftborder" valign="top"> + <table cellspacing="0" cellpadding="0" border="0"> + <tr> + <td id="leftborderspacer"> + </td> + </tr> + <tr> + <td valign="top"> + <img src="./readme/images/leftborder.gif"> + </td> + </tr> + </table> + </td> + <td id="middle" valign="top"> + <table cellspacing="0" cellpadding="0" border="0" valign="top"> + <tr> + <td id="logo" valign="top"> + <table class="w800" cellspacing="0" cellpadding="0" border="0"> + <tr> + <td valign="top"> + <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%"> + <tr> + <td rowspan="4"> + <img src="./readme/images/chara.gif" width="366" height="274"> + </td> + <td rowspan="4" width="129"> + </td> + <td colspan="2" width="305" height="51" align="right"> + <img src="./readme/images/banner.gif" width="305" height="51"> + </td> + </tr> + <tr> + <td id="title" colspan="2" align="right"> + Introduction + </td> + </tr> + <tr> + <td height="81" colspan="2"> + </td> + </tr> + <tr> + <td class="navi" align="right"> + Introduction<br> + <a href="./readme/changelog.html">Changelog</a><br> + <a href="./readme/features.html">Features</a><br> + <a href="./readme/npcfeatures.html">NPC Features</a> + + </td> + <td class="navi" align="right"> + <a href="./readme/setup.html">Setup</a><br> + <a href="./readme/gmcommands.html">GM Commands</a><br> + <a href="./readme/faq.html">FAQ</a><br> + <a href="./readme/resources.html">Resources</a> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td id="btmborder"> + <table class="w800" cellspacing="0" cellpadding="0" border="0" height="2"> + <tr> + <td id="leftbtmborder""> + </td> + <td id="midbtmborder""> + <img src="./readme/images/btmborder.gif" width="44" height="2"> + </td> + <td id="rightbtmborder"> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td id="content"> + <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%"> + <tr> + <td id="lefttext" valign="top"> +<h1>eAthena SVN series</h1> +eAthena is an open-source Ragnarok Online server emulator. It's written in C, but we are working on a C++ version. Although it is cross-platform, we only officially support Win32 and Linux. +<br> +<br>eAthena is licensed under the GPL, so please give us credit if you use our code. +<br>Our SVN (<a href="http://tortoisesvn.tigris.org/download.html">You may download TortoiseSVN here to access our SVN</a>) is located at <a href="http://66.118.142.23:8080/svn/ea/">http://66.118.142.23:8080/svn/ea/</a>. SVN stands for Subversion, which is similar to the commonly used CVS. +<br> +<br>P.S. If you had a hard time loading this readme, please use <a href="http://www.getfirefox.com">Firefox</a>. + + </td> + <td id="midtext"> + </td> + <td id="righttext" valign="top"> +<h1>The eAthena Team</h1> +Here are our current developers. We have had many past developers, and if you come across this, please let us know ^_^.<br> + +<b>Developers</b> +<table class="right"> + <tr> + <td> + Wallex + </td> + <td> + Lupus + </td> + <td> + DracoRPG + </td> + </tr> + <tr> + <td> + MasterOfMuppets + </td> + + <td> + Fredzilla + </td> + <td> + Kayla + </td> + </tr> + <tr> + <td> + Kevin + </td> + <td> + Shinomori + </td> + <td> + Clownphobia(Cuteboi) + </td> + </tr> + <tr> + <td> + LuzZza + </td> + <td> + Evera + </td> + <td> + Nexon + </td> + </tr> + <tr> + <td> + Celest + </td> + <td> + Wizputer + </td> + <td> + Valaris + </td> + </tr> + <tr> + <td> + Lance + </td> + <td> + Komurka + </td> + <td> + + </td> + </tr> +</table> +<br> +<b>Mods/Admins</b> +<table class="right"> + <tr> + <td> + Massdriller + </td> + <td> + Deviant + </td> + <td> + Delta + </td> + </tr> + <tr> + <td> + Manipulator + </td> + <td> + SantaPoring + </td> + <td> + Davidchak + </td> + </tr> + <tr> + <td> + Valaris + </td><td></td><td></td> + </tr> + <tr> + <td> + </td> + </tr> +</table> +<br> +<b>Ex-Developers and Honorable Mentions</b> +<table class="right"> + <tr> + <td> + RoVeRT + </td> + <td> + AppleGirl + </td> + <td> + Akaru/Hikaru + </td> + </tr> + <tr> + <td> + Darkchild + </td> + <td> + Kalaspuff + </td> + <td> + Ajarn + </td> + </tr> + <tr> + <td> + Fritz + </td> + <td> + Aria + </td> + <td> + Mass Zero + </td> + </tr> + <tr> + <td> + Nana + </td> + <td> + Shinigami + </td> + <td> + Moonsoul + </td> + </tr> + <tr> + <td> + Kobra_k88 + </td> + <td> + Codemaster + </td> + <td> + Davidsiaw + </td> + </tr> + <tr> + <td> + MC_Cameri + </td> + <td> + Spira + </td> + <td> + Lord + </td> + </tr> + <tr> + <td> + Yor + </td> + <td> + Sara-chan + </td> + <td> + Mikage + </td> + </tr> + <tr> + <td> + Ajs15822 + </td> + <td> + Cyberghost + </td> + <td> + Azndragon + </td> + </tr> + <tr> + <td> + Nasedo + </td> + <td> + Sirius + </td> + </tr> +</table> + <br /> + <br /> + </strong> + + </td> + </tr> + <tr> + <td colspan="3"> + © Content Copyright 2005 eAthena Development Team/Evera<br> + © Design Copyright 2005 Evera + </td> + </tr> + </table> + </td> + </tr> + </table> + +</table> + <td id="rightborder" valign="top"> + <table cellspacing="0" cellpadding="0" border="0"> + <tr> + <td id="rightborderspacer"> + </td> + </tr> + <tr> + <td valign="top"> + <img src="./readme/images/rightborder.gif"> + </td> + </tr> + </table> + </td> +</div> + </td> + </tr> + </table> + </td> + + </tr> +</body> +</html> + diff --git a/readme/changelog.html b/readme/changelog.html index 0969a6a9e..ced251806 100644 --- a/readme/changelog.html +++ b/readme/changelog.html @@ -1,136 +1,136 @@ -<html><head><title>eAthena - Changelog</title><head>
-
-<link rel="stylesheet" type="text/css" href="./readme.css">
-
-<body>
-<div id="dleftbg">
-</div>
-<div id="drightbg">
-</div>
-<div id="canvas" align="center">
-<table cellspacing="0" cellpadding="0" border="0" id="ea" align="center">
- <tr>
- <td id="leftborder" valign="top">
- <table cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td id="leftborderspacer">
- </td>
- </tr>
- <tr>
- <td valign="top">
- <img src="./images/leftborder.gif">
- </td>
- </tr>
- </table>
- </td>
- <td id="middle" valign="top">
- <table cellspacing="0" cellpadding="0" border="0" valign="top">
- <tr>
- <td id="logo" valign="top">
- <table class="w800" cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td valign="top">
- <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%">
- <tr>
- <td rowspan="4">
- <img src="./images/chara.gif" width="366" height="274">
- </td>
- <td rowspan="4" width="129">
- </td>
- <td colspan="2" width="305" height="51" align="right">
- <img src="./images/banner.gif" width="305" height="51">
- </td>
- </tr>
- <tr>
- <td id="title" colspan="2" align="right">
- Changelog
- </td>
- </tr>
- <tr>
- <td height="81" colspan="2">
- </td>
- </tr>
- <tr>
- <td class="navi" align="right">
- <a href="../readme.html">Introduction</a><br>
- Changelog<br>
- <a href="./features.html">Features</a><br>
- <a href="./npcfeatures.html">NPC Features</a>
-
- </td>
- <td class="navi" align="right">
- <a href="./setup.html">Setup</a><br>
- <a href="./gmcommands.html">GM Commands</a><br>
- <a href="./faq.html">FAQ</a><br>
- <a href="./resources.html">Resources</a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td id="btmborder">
- <table class="w800" cellspacing="0" cellpadding="0" border="0" height="2">
- <tr>
- <td id="leftbtmborder"">
- </td>
- <td id="midbtmborder"">
- <img src="./images/btmborder.gif" width="44" height="2">
- </td>
- <td id="rightbtmborder">
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td id="content">
- <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%">
- <tr>
- <td id="lefttext" valign="top">
-<h1>Changelog</h1>
-This is our current changelog. Please note this isn't our <i>complete</i> changelog.
-<br>
-
-
- </td>
- <td id="midtext">
- </td>
- <td id="righttext" valign="top">
- <iframe src="../Changelog-Trunk.txt" name="Changelog" title="eAthena SVN Changelog" marginwidth="10" marginheight="10" frameborder="0" height="500" width="100%"></iframe>
-
- </td>
- </tr>
- <tr>
- <td colspan="3">
- © Content Copyright 2005 eAthena Development Team/Evera<br>
- © Design Copyright 2005 Evera
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- <td id="rightborder" valign="top">
- <table cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td id="rightborderspacer">
- </td>
- </tr>
- <tr>
- <td valign="top">
- <img src="./images/rightborder.gif">
- </td>
- </tr>
- </table>
- </td>
-
- </tr>
-
-</table>
-</div>
-
+<html><head><title>eAthena - Changelog</title><head> + +<link rel="stylesheet" type="text/css" href="./readme.css"> + +<body> +<div id="dleftbg"> +</div> +<div id="drightbg"> +</div> +<div id="canvas" align="center"> +<table cellspacing="0" cellpadding="0" border="0" id="ea" align="center"> + <tr> + <td id="leftborder" valign="top"> + <table cellspacing="0" cellpadding="0" border="0"> + <tr> + <td id="leftborderspacer"> + </td> + </tr> + <tr> + <td valign="top"> + <img src="./images/leftborder.gif"> + </td> + </tr> + </table> + </td> + <td id="middle" valign="top"> + <table cellspacing="0" cellpadding="0" border="0" valign="top"> + <tr> + <td id="logo" valign="top"> + <table class="w800" cellspacing="0" cellpadding="0" border="0"> + <tr> + <td valign="top"> + <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%"> + <tr> + <td rowspan="4"> + <img src="./images/chara.gif" width="366" height="274"> + </td> + <td rowspan="4" width="129"> + </td> + <td colspan="2" width="305" height="51" align="right"> + <img src="./images/banner.gif" width="305" height="51"> + </td> + </tr> + <tr> + <td id="title" colspan="2" align="right"> + Changelog + </td> + </tr> + <tr> + <td height="81" colspan="2"> + </td> + </tr> + <tr> + <td class="navi" align="right"> + <a href="../readme.html">Introduction</a><br> + Changelog<br> + <a href="./features.html">Features</a><br> + <a href="./npcfeatures.html">NPC Features</a> + + </td> + <td class="navi" align="right"> + <a href="./setup.html">Setup</a><br> + <a href="./gmcommands.html">GM Commands</a><br> + <a href="./faq.html">FAQ</a><br> + <a href="./resources.html">Resources</a> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td id="btmborder"> + <table class="w800" cellspacing="0" cellpadding="0" border="0" height="2"> + <tr> + <td id="leftbtmborder""> + </td> + <td id="midbtmborder""> + <img src="./images/btmborder.gif" width="44" height="2"> + </td> + <td id="rightbtmborder"> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td id="content"> + <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%"> + <tr> + <td id="lefttext" valign="top"> +<h1>Changelog</h1> +This is our current changelog. Please note this isn't our <i>complete</i> changelog. +<br> + + + </td> + <td id="midtext"> + </td> + <td id="righttext" valign="top"> + <iframe src="../Changelog-Trunk.txt" name="Changelog" title="eAthena SVN Changelog" marginwidth="10" marginheight="10" frameborder="0" height="500" width="100%"></iframe> + + </td> + </tr> + <tr> + <td colspan="3"> + © Content Copyright 2005 eAthena Development Team/Evera<br> + © Design Copyright 2005 Evera + </td> + </tr> + </table> + </td> + </tr> + </table> + </td> + </tr> + </table> + </td> + <td id="rightborder" valign="top"> + <table cellspacing="0" cellpadding="0" border="0"> + <tr> + <td id="rightborderspacer"> + </td> + </tr> + <tr> + <td valign="top"> + <img src="./images/rightborder.gif"> + </td> + </tr> + </table> + </td> + + </tr> + +</table> +</div> + diff --git a/readme/faq.html b/readme/faq.html index 956b7d566..fc18e377c 100644 --- a/readme/faq.html +++ b/readme/faq.html @@ -1,151 +1,151 @@ -<html><head><title>eAthena - FAQ</title><head>
-
-<link rel="stylesheet" type="text/css" href="./readme.css">
-
-<body>
-<div id="dleftbg">
-</div>
-<div id="drightbg">
-</div>
-<div id="canvas" align="center">
-<table cellspacing="0" cellpadding="0" border="0" id="ea" align="center">
- <tr>
- <td id="leftborder" valign="top">
- <table cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td id="leftborderspacer">
- </td>
- </tr>
- <tr>
- <td valign="top">
- <img src="./images/leftborder.gif">
- </td>
- </tr>
- </table>
- </td>
- <td id="middle" valign="top">
- <table cellspacing="0" cellpadding="0" border="0" valign="top">
- <tr>
- <td id="logo" valign="top">
- <table class="w800" cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td valign="top">
- <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%">
- <tr>
- <td rowspan="4">
- <img src="./images/chara.gif" width="366" height="274">
- </td>
- <td rowspan="4" width="129">
- </td>
- <td colspan="2" width="305" height="51" align="right">
- <img src="./images/banner.gif" width="305" height="51">
- </td>
- </tr>
- <tr>
- <td id="title" colspan="2" align="right">
- FAQ
- </td>
- </tr>
- <tr>
- <td height="81" colspan="2">
- </td>
- </tr>
- <tr>
- <td class="navi" align="right">
- <a href="../readme.html">Introduction</a><br>
- <a href="./changelog.html">Changelog</a><br>
- Features<br>
- <a href="./npcfeatures.html">NPC Features</a>
-
- </td>
- <td class="navi" align="right">
- <a href="./setup.html">Setup</a><br>
- <a href="./gmcommands.html">GM Commands</a><br>
- <a href="./faq.html">FAQ</a><br>
- <a href="./resources.html">Resources</a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td id="btmborder">
- <table class="w800" cellspacing="0" cellpadding="0" border="0" height="2">
- <tr>
- <td id="leftbtmborder"">
- </td>
- <td id="midbtmborder"">
- <img src="./images/btmborder.gif" width="44" height="2">
- </td>
- <td id="rightbtmborder">
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td id="content">
- <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%">
- <tr>
- <td id="lefttext" valign="top">
-<h1>FAQ</h1>
-<b>Q: I get the error message "This application has failed to start because cygwin1.dll was not found. Re-installing the application may fix this problem."</b><br>
- A: You're missing the cygwin dlls. Please get the latest dll at: http://www.cygwin.com/snapshot. If you're unsure, asking around in our IRC chatroom will get you around too, but always remember - use common sense and search before asking.<br><br>
-<b>Q: My map-server won't load! It appears to be loading things before it dissapeared suddenly! HELP!</b><br>
- A: Use command line to load map-server. It should tell you the error. If you're missing a map, update your kRO Sakray or comment the map from map_athena.conf. If you have an errornous NPC, fix it or comment it off. Anything other than that, feel free to ask around<br><br>
-<b>Q: My map-server failed to load 'adata.grf'! Where do I find this adata.grf? My map-server won't load without it!</b><br>
- A: The error that caused the map-server to not load is not the adata.grf. adata.grf is NOT a requirement for the map-server to load. The error is probably related to something else.<br><br>
- </td>
- <td id="midtext">
- </td>
- <td id="righttext" valign="top">
-<b>Q: All 3 of the servers are loaded, but I am still having problems accessing it! What do I do?</b><br>
- A: First, check the IPs in map_athena.conf and char_athena.conf. If those are correct, check the ports to make sure they match. If that's correct too, you probably cannot handle the server load. Lower the monster spawning rate using mob_count in battle_athena.conf and it should be fine.<br><br>
-<b>Q: How do I start Guild Wars/War of Emperium??? HELP!!!</b><br>
- A: Read the GM Command page for full list of commands that GMs can use, including the command for this.<br><br>
-<b>Q: My Ragnarok Online crashed while playing with eAthena! What do I do now?</b><br>
- A: Well, if your Ragnarok crashes, it's most probably not anything to do with eAthena. Something is wrong with your Ragnarok installation. Try reinstalling or updating.<br><br>
-<b>Q: Is eAthena compatible with mySQL? Can I use mySQL as the DB instead of using text files?</b><br>
- A: Yes, eAthena is compatible with mySQL. A tutorial on how to setup this is coming soon.<br><br>
-<b>Q: Is eAthena compatible with msSQL? Can I use msSQL as the DB instead of using text files?</b><br>
- A: No, eAthena is not compatible with msSQL. You cannot use msSQL with eAthena.<br><br>
-<b>Q: I found a bug! Where do I report it?</b><br>
- A: Drop the developers a line at the IRC chatroom. Or just post it in the bug report forum. We check them out too. :)<br><br>
-<b>Q: I know alot of C and I'm able to help improve eAthena and add new features. How can I join your development team?</b><br>
- A: Try talking to one of the current developers in the eAthena channel.
-
- </td>
- </tr>
- <tr>
- <td colspan="3">
- © Content Copyright 2005 eAthena Development Team/Evera<br>
- © Design Copyright 2005 Evera
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- <td id="rightborder" valign="top">
- <table cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td id="rightborderspacer">
- </td>
- </tr>
- <tr>
- <td valign="top">
- <img src="./images/rightborder.gif">
- </td>
- </tr>
- </table>
- </td>
-
- </tr>
-
-</table>
-</div>
-
+<html><head><title>eAthena - FAQ</title><head> + +<link rel="stylesheet" type="text/css" href="./readme.css"> + +<body> +<div id="dleftbg"> +</div> +<div id="drightbg"> +</div> +<div id="canvas" align="center"> +<table cellspacing="0" cellpadding="0" border="0" id="ea" align="center"> + <tr> + <td id="leftborder" valign="top"> + <table cellspacing="0" cellpadding="0" border="0"> + <tr> + <td id="leftborderspacer"> + </td> + </tr> + <tr> + <td valign="top"> + <img src="./images/leftborder.gif"> + </td> + </tr> + </table> + </td> + <td id="middle" valign="top"> + <table cellspacing="0" cellpadding="0" border="0" valign="top"> + <tr> + <td id="logo" valign="top"> + <table class="w800" cellspacing="0" cellpadding="0" border="0"> + <tr> + <td valign="top"> + <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%"> + <tr> + <td rowspan="4"> + <img src="./images/chara.gif" width="366" height="274"> + </td> + <td rowspan="4" width="129"> + </td> + <td colspan="2" width="305" height="51" align="right"> + <img src="./images/banner.gif" width="305" height="51"> + </td> + </tr> + <tr> + <td id="title" colspan="2" align="right"> + FAQ + </td> + </tr> + <tr> + <td height="81" colspan="2"> + </td> + </tr> + <tr> + <td class="navi" align="right"> + <a href="../readme.html">Introduction</a><br> + <a href="./changelog.html">Changelog</a><br> + Features<br> + <a href="./npcfeatures.html">NPC Features</a> + + </td> + <td class="navi" align="right"> + <a href="./setup.html">Setup</a><br> + <a href="./gmcommands.html">GM Commands</a><br> + <a href="./faq.html">FAQ</a><br> + <a href="./resources.html">Resources</a> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td id="btmborder"> + <table class="w800" cellspacing="0" cellpadding="0" border="0" height="2"> + <tr> + <td id="leftbtmborder""> + </td> + <td id="midbtmborder""> + <img src="./images/btmborder.gif" width="44" height="2"> + </td> + <td id="rightbtmborder"> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td id="content"> + <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%"> + <tr> + <td id="lefttext" valign="top"> +<h1>FAQ</h1> +<b>Q: I get the error message "This application has failed to start because cygwin1.dll was not found. Re-installing the application may fix this problem."</b><br> + A: You're missing the cygwin dlls. Please get the latest dll at: http://www.cygwin.com/snapshot. If you're unsure, asking around in our IRC chatroom will get you around too, but always remember - use common sense and search before asking.<br><br> +<b>Q: My map-server won't load! It appears to be loading things before it dissapeared suddenly! HELP!</b><br> + A: Use command line to load map-server. It should tell you the error. If you're missing a map, update your kRO Sakray or comment the map from map_athena.conf. If you have an errornous NPC, fix it or comment it off. Anything other than that, feel free to ask around<br><br> +<b>Q: My map-server failed to load 'adata.grf'! Where do I find this adata.grf? My map-server won't load without it!</b><br> + A: The error that caused the map-server to not load is not the adata.grf. adata.grf is NOT a requirement for the map-server to load. The error is probably related to something else.<br><br> + </td> + <td id="midtext"> + </td> + <td id="righttext" valign="top"> +<b>Q: All 3 of the servers are loaded, but I am still having problems accessing it! What do I do?</b><br> + A: First, check the IPs in map_athena.conf and char_athena.conf. If those are correct, check the ports to make sure they match. If that's correct too, you probably cannot handle the server load. Lower the monster spawning rate using mob_count in battle_athena.conf and it should be fine.<br><br> +<b>Q: How do I start Guild Wars/War of Emperium??? HELP!!!</b><br> + A: Read the GM Command page for full list of commands that GMs can use, including the command for this.<br><br> +<b>Q: My Ragnarok Online crashed while playing with eAthena! What do I do now?</b><br> + A: Well, if your Ragnarok crashes, it's most probably not anything to do with eAthena. Something is wrong with your Ragnarok installation. Try reinstalling or updating.<br><br> +<b>Q: Is eAthena compatible with mySQL? Can I use mySQL as the DB instead of using text files?</b><br> + A: Yes, eAthena is compatible with mySQL. A tutorial on how to setup this is coming soon.<br><br> +<b>Q: Is eAthena compatible with msSQL? Can I use msSQL as the DB instead of using text files?</b><br> + A: No, eAthena is not compatible with msSQL. You cannot use msSQL with eAthena.<br><br> +<b>Q: I found a bug! Where do I report it?</b><br> + A: Drop the developers a line at the IRC chatroom. Or just post it in the bug report forum. We check them out too. :)<br><br> +<b>Q: I know alot of C and I'm able to help improve eAthena and add new features. How can I join your development team?</b><br> + A: Try talking to one of the current developers in the eAthena channel. + + </td> + </tr> + <tr> + <td colspan="3"> + © Content Copyright 2005 eAthena Development Team/Evera<br> + © Design Copyright 2005 Evera + </td> + </tr> + </table> + </td> + </tr> + </table> + </td> + </tr> + </table> + </td> + <td id="rightborder" valign="top"> + <table cellspacing="0" cellpadding="0" border="0"> + <tr> + <td id="rightborderspacer"> + </td> + </tr> + <tr> + <td valign="top"> + <img src="./images/rightborder.gif"> + </td> + </tr> + </table> + </td> + + </tr> + +</table> +</div> + diff --git a/readme/features.html b/readme/features.html index 78137d65e..aeffbab23 100644 --- a/readme/features.html +++ b/readme/features.html @@ -1,160 +1,160 @@ -<html><head><title>eAthena - Features</title><head>
-
-<link rel="stylesheet" type="text/css" href="./readme.css">
-
-<body>
-<div id="dleftbg">
-</div>
-<div id="drightbg">
-</div>
-<div id="canvas" align="center">
-<table cellspacing="0" cellpadding="0" border="0" id="ea" align="center">
- <tr>
- <td id="leftborder" valign="top">
- <table cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td id="leftborderspacer">
- </td>
- </tr>
- <tr>
- <td valign="top">
- <img src="./images/leftborder.gif">
- </td>
- </tr>
- </table>
- </td>
- <td id="middle" valign="top">
- <table cellspacing="0" cellpadding="0" border="0" valign="top">
- <tr>
- <td id="logo" valign="top">
- <table class="w800" cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td valign="top">
- <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%">
- <tr>
- <td rowspan="4">
- <img src="./images/chara.gif" width="366" height="274">
- </td>
- <td rowspan="4" width="129">
- </td>
- <td colspan="2" width="305" height="51" align="right">
- <img src="./images/banner.gif" width="305" height="51">
- </td>
- </tr>
- <tr>
- <td id="title" colspan="2" align="right">
- Features
- </td>
- </tr>
- <tr>
- <td height="81" colspan="2">
- </td>
- </tr>
- <tr>
- <td class="navi" align="right">
- <a href="../readme.html">Introduction</a><br>
- <a href="./changelog.html">Changelog</a><br>
- Features<br>
- <a href="./npcfeatures.html">NPC Features</a>
-
- </td>
- <td class="navi" align="right">
- <a href="./setup.html">Setup</a><br>
- <a href="./gmcommands.html">GM Commands</a><br>
- <a href="./faq.html">FAQ</a><br>
- <a href="./resources.html">Resources</a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td id="btmborder">
- <table class="w800" cellspacing="0" cellpadding="0" border="0" height="2">
- <tr>
- <td id="leftbtmborder"">
- </td>
- <td id="midbtmborder"">
- <img src="./images/btmborder.gif" width="44" height="2">
- </td>
- <td id="rightbtmborder">
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td id="content">
- <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%">
- <tr>
- <td id="lefttext" valign="top">
-<h1>Features</h1>
-eAthena tries to keep up with kRO (Korean Ragnarok Online, an official server) in terms of features. Many of the features we have
-are re-coded versions of official onces. We also have many eAthena exclusive features, such as various NPC commands. We also
-have all of the RO server emu goodies, like open-source modification and custom sprites/items. We are currently on <i>feature-lock</i>,
-so we will focus mainly on stability for the time being, not new features.
-
-
- </td>
- <td id="midtext">
- </td>
- <td id="righttext" valign="top">
-<ul>
- <li>PVP (Player Vs. Player)</li>
- <li>Adoption System</li>
- <li>Dynamic monster spawning system</li>
- <li>GVG (Guild Vs. Guild)</li>
- <li>qPets (Cute Pets)</li>
- <li>Monster Skills</li>
- <li>2-2 Jobs (Alternate 2nd Jobs)</li>
- <li>Super Novice (Alternate 1st Job)</li>
- <li>WoE (War of Emperium)</li>
- <li>Remote administration of accounts (ladmin)</li>
- <li>Weddings</li>
- <li>Pet equipped mobs</li>
- <li>Management of day/night</li>
- <li>Mob Disguises</li>
- <li>Weather and other special effects</li>
- <li>"Rebirth/Transcendent" Classes</li>
- <li>Room for custom sprites/items</li>
- <li>Open source, allowing for your own personal modifications</li>
- <li>Two different storage systems, TXT and SQL</li>
- <li>Stability</li>
- <li>Many other various features</li>
-</ul>
-
- </td>
- </tr>
- <tr>
- <td colspan="3">
- © Content Copyright 2005 eAthena Development Team/Evera<br>
- © Design Copyright 2005 Evera
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- <td id="rightborder" valign="top">
- <table cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td id="rightborderspacer">
- </td>
- </tr>
- <tr>
- <td valign="top">
- <img src="./images/rightborder.gif">
- </td>
- </tr>
- </table>
- </td>
-
- </tr>
-
-</table>
-</div>
-
+<html><head><title>eAthena - Features</title><head> + +<link rel="stylesheet" type="text/css" href="./readme.css"> + +<body> +<div id="dleftbg"> +</div> +<div id="drightbg"> +</div> +<div id="canvas" align="center"> +<table cellspacing="0" cellpadding="0" border="0" id="ea" align="center"> + <tr> + <td id="leftborder" valign="top"> + <table cellspacing="0" cellpadding="0" border="0"> + <tr> + <td id="leftborderspacer"> + </td> + </tr> + <tr> + <td valign="top"> + <img src="./images/leftborder.gif"> + </td> + </tr> + </table> + </td> + <td id="middle" valign="top"> + <table cellspacing="0" cellpadding="0" border="0" valign="top"> + <tr> + <td id="logo" valign="top"> + <table class="w800" cellspacing="0" cellpadding="0" border="0"> + <tr> + <td valign="top"> + <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%"> + <tr> + <td rowspan="4"> + <img src="./images/chara.gif" width="366" height="274"> + </td> + <td rowspan="4" width="129"> + </td> + <td colspan="2" width="305" height="51" align="right"> + <img src="./images/banner.gif" width="305" height="51"> + </td> + </tr> + <tr> + <td id="title" colspan="2" align="right"> + Features + </td> + </tr> + <tr> + <td height="81" colspan="2"> + </td> + </tr> + <tr> + <td class="navi" align="right"> + <a href="../readme.html">Introduction</a><br> + <a href="./changelog.html">Changelog</a><br> + Features<br> + <a href="./npcfeatures.html">NPC Features</a> + + </td> + <td class="navi" align="right"> + <a href="./setup.html">Setup</a><br> + <a href="./gmcommands.html">GM Commands</a><br> + <a href="./faq.html">FAQ</a><br> + <a href="./resources.html">Resources</a> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td id="btmborder"> + <table class="w800" cellspacing="0" cellpadding="0" border="0" height="2"> + <tr> + <td id="leftbtmborder""> + </td> + <td id="midbtmborder""> + <img src="./images/btmborder.gif" width="44" height="2"> + </td> + <td id="rightbtmborder"> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td id="content"> + <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%"> + <tr> + <td id="lefttext" valign="top"> +<h1>Features</h1> +eAthena tries to keep up with kRO (Korean Ragnarok Online, an official server) in terms of features. Many of the features we have +are re-coded versions of official onces. We also have many eAthena exclusive features, such as various NPC commands. We also +have all of the RO server emu goodies, like open-source modification and custom sprites/items. We are currently on <i>feature-lock</i>, +so we will focus mainly on stability for the time being, not new features. + + + </td> + <td id="midtext"> + </td> + <td id="righttext" valign="top"> +<ul> + <li>PVP (Player Vs. Player)</li> + <li>Adoption System</li> + <li>Dynamic monster spawning system</li> + <li>GVG (Guild Vs. Guild)</li> + <li>qPets (Cute Pets)</li> + <li>Monster Skills</li> + <li>2-2 Jobs (Alternate 2nd Jobs)</li> + <li>Super Novice (Alternate 1st Job)</li> + <li>WoE (War of Emperium)</li> + <li>Remote administration of accounts (ladmin)</li> + <li>Weddings</li> + <li>Pet equipped mobs</li> + <li>Management of day/night</li> + <li>Mob Disguises</li> + <li>Weather and other special effects</li> + <li>"Rebirth/Transcendent" Classes</li> + <li>Room for custom sprites/items</li> + <li>Open source, allowing for your own personal modifications</li> + <li>Two different storage systems, TXT and SQL</li> + <li>Stability</li> + <li>Many other various features</li> +</ul> + + </td> + </tr> + <tr> + <td colspan="3"> + © Content Copyright 2005 eAthena Development Team/Evera<br> + © Design Copyright 2005 Evera + </td> + </tr> + </table> + </td> + </tr> + </table> + </td> + </tr> + </table> + </td> + <td id="rightborder" valign="top"> + <table cellspacing="0" cellpadding="0" border="0"> + <tr> + <td id="rightborderspacer"> + </td> + </tr> + <tr> + <td valign="top"> + <img src="./images/rightborder.gif"> + </td> + </tr> + </table> + </td> + + </tr> + +</table> +</div> + diff --git a/readme/gmcommands.html b/readme/gmcommands.html index 44b9ea554..29de48135 100644 --- a/readme/gmcommands.html +++ b/readme/gmcommands.html @@ -1,139 +1,139 @@ -<html><head><title>eAthena - GM Commands</title><head>
-
-<link rel="stylesheet" type="text/css" href="./readme.css">
-
-<body>
-<div id="dleftbg">
-</div>
-<div id="drightbg">
-</div>
-<div id="canvas" align="center">
-<table cellspacing="0" cellpadding="0" border="0" id="ea" align="center">
- <tr>
- <td id="leftborder" valign="top">
- <table cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td id="leftborderspacer">
- </td>
- </tr>
- <tr>
- <td valign="top">
- <img src="./images/leftborder.gif">
- </td>
- </tr>
- </table>
- </td>
- <td id="middle" valign="top">
- <table cellspacing="0" cellpadding="0" border="0" valign="top">
- <tr>
- <td id="logo" valign="top">
- <table class="w800" cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td valign="top">
- <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%">
- <tr>
- <td rowspan="4">
- <img src="./images/chara.gif" width="366" height="274">
- </td>
- <td rowspan="4" width="129">
- </td>
- <td colspan="2" width="305" height="51" align="right">
- <img src="./images/banner.gif" width="305" height="51">
- </td>
- </tr>
- <tr>
- <td id="title" colspan="2" align="right">
- GM Commands
- </td>
- </tr>
- <tr>
- <td height="81" colspan="2">
- </td>
- </tr>
- <tr>
- <td class="navi" align="right">
- <a href="../readme.html">Introduction</a><br>
- <a href="./changelog.html">Changelog</a><br>
- <a href="./features.html">Features</a><br>
- <a href="./npcfeatures.html">NPC Features</a>
-
- </td>
- <td class="navi" align="right">
- <a href="./setup.html">Setup</a><br>
- GM Commands<br>
- <a href="./faq.html">FAQ</a><br>
- <a href="./resources.html">Resources</a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td id="btmborder">
- <table class="w800" cellspacing="0" cellpadding="0" border="0" height="2">
- <tr>
- <td id="leftbtmborder"">
- </td>
- <td id="midbtmborder"">
- <img src="./images/btmborder.gif" width="44" height="2">
- </td>
- <td id="rightbtmborder">
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td id="content">
- <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%">
- <tr>
- <td id="lefttext" valign="top">
-<h1>GM Commands</h1>
-A GM, or Game Master, on eAthena has access to certain codes to administer the server. A GM is appointed by the server owner, and can not
-be gained normally through the game. These commands start with the @ symbol, a well-recognized sign of an Athena server. Many of our current
-commands are broken and don't work properly.
- </td>
- <td id="midtext">
- </td>
- <td id="righttext" valign="top">
-<iframe src="../conf-tmpl/help.txt" name="Help" title="eAthena Gm Commands" marginwidth="10" marginheight="10" frameborder="0" height="500" width="100%"></iframe>
-
-
-
-
-
- </td>
- </tr>
- <tr>
- <td colspan="3">
- © Content Copyright 2005 eAthena Development Team/Evera<br>
- © Design Copyright 2005 Evera
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- <td id="rightborder" valign="top">
- <table cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td id="rightborderspacer">
- </td>
- </tr>
- <tr>
- <td valign="top">
- <img src="./images/rightborder.gif">
- </td>
- </tr>
- </table>
- </td>
-
- </tr>
-
-</table>
-</div>
-
+<html><head><title>eAthena - GM Commands</title><head> + +<link rel="stylesheet" type="text/css" href="./readme.css"> + +<body> +<div id="dleftbg"> +</div> +<div id="drightbg"> +</div> +<div id="canvas" align="center"> +<table cellspacing="0" cellpadding="0" border="0" id="ea" align="center"> + <tr> + <td id="leftborder" valign="top"> + <table cellspacing="0" cellpadding="0" border="0"> + <tr> + <td id="leftborderspacer"> + </td> + </tr> + <tr> + <td valign="top"> + <img src="./images/leftborder.gif"> + </td> + </tr> + </table> + </td> + <td id="middle" valign="top"> + <table cellspacing="0" cellpadding="0" border="0" valign="top"> + <tr> + <td id="logo" valign="top"> + <table class="w800" cellspacing="0" cellpadding="0" border="0"> + <tr> + <td valign="top"> + <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%"> + <tr> + <td rowspan="4"> + <img src="./images/chara.gif" width="366" height="274"> + </td> + <td rowspan="4" width="129"> + </td> + <td colspan="2" width="305" height="51" align="right"> + <img src="./images/banner.gif" width="305" height="51"> + </td> + </tr> + <tr> + <td id="title" colspan="2" align="right"> + GM Commands + </td> + </tr> + <tr> + <td height="81" colspan="2"> + </td> + </tr> + <tr> + <td class="navi" align="right"> + <a href="../readme.html">Introduction</a><br> + <a href="./changelog.html">Changelog</a><br> + <a href="./features.html">Features</a><br> + <a href="./npcfeatures.html">NPC Features</a> + + </td> + <td class="navi" align="right"> + <a href="./setup.html">Setup</a><br> + GM Commands<br> + <a href="./faq.html">FAQ</a><br> + <a href="./resources.html">Resources</a> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td id="btmborder"> + <table class="w800" cellspacing="0" cellpadding="0" border="0" height="2"> + <tr> + <td id="leftbtmborder""> + </td> + <td id="midbtmborder""> + <img src="./images/btmborder.gif" width="44" height="2"> + </td> + <td id="rightbtmborder"> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td id="content"> + <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%"> + <tr> + <td id="lefttext" valign="top"> +<h1>GM Commands</h1> +A GM, or Game Master, on eAthena has access to certain codes to administer the server. A GM is appointed by the server owner, and can not +be gained normally through the game. These commands start with the @ symbol, a well-recognized sign of an Athena server. Many of our current +commands are broken and don't work properly. + </td> + <td id="midtext"> + </td> + <td id="righttext" valign="top"> +<iframe src="../conf-tmpl/help.txt" name="Help" title="eAthena Gm Commands" marginwidth="10" marginheight="10" frameborder="0" height="500" width="100%"></iframe> + + + + + + </td> + </tr> + <tr> + <td colspan="3"> + © Content Copyright 2005 eAthena Development Team/Evera<br> + © Design Copyright 2005 Evera + </td> + </tr> + </table> + </td> + </tr> + </table> + </td> + </tr> + </table> + </td> + <td id="rightborder" valign="top"> + <table cellspacing="0" cellpadding="0" border="0"> + <tr> + <td id="rightborderspacer"> + </td> + </tr> + <tr> + <td valign="top"> + <img src="./images/rightborder.gif"> + </td> + </tr> + </table> + </td> + + </tr> + +</table> +</div> + diff --git a/readme/npcfeatures.html b/readme/npcfeatures.html index 380ce7bfd..67b816b87 100644 --- a/readme/npcfeatures.html +++ b/readme/npcfeatures.html @@ -1,262 +1,262 @@ -<html><head><title>eAthena - NPC Features</title><head>
-
-<link rel="stylesheet" type="text/css" href="./readme.css">
-
-<body>
-<div id="dleftbg">
-</div>
-<div id="drightbg">
-</div>
-<div id="canvas" align="center">
-<table cellspacing="0" cellpadding="0" border="0" id="ea" align="center">
- <tr>
- <td id="leftborder" valign="top">
- <table cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td id="leftborderspacer">
- </td>
- </tr>
- <tr>
- <td valign="top">
- <img src="./images/leftborder.gif">
- </td>
- </tr>
- </table>
- </td>
- <td id="middle" valign="top">
- <table cellspacing="0" cellpadding="0" border="0" valign="top">
- <tr>
- <td id="logo" valign="top">
- <table class="w800" cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td valign="top">
- <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%">
- <tr>
- <td rowspan="4">
- <img src="./images/chara.gif" width="366" height="274">
- </td>
- <td rowspan="4" width="129">
- </td>
- <td colspan="2" width="305" height="51" align="right">
- <img src="./images/banner.gif" width="305" height="51">
- </td>
- </tr>
- <tr>
- <td id="title" colspan="2" align="right">
- NPC Features
- </td>
- </tr>
- <tr>
- <td height="81" colspan="2">
- </td>
- </tr>
- <tr>
- <td class="navi" align="right">
- <a href="../readme.html">Introduction</a><br>
- <a href="./changelog.html">Changelog</a><br>
- <a href="./features.html">Features</a><br>
- NPC Features
-
- </td>
- <td class="navi" align="right">
- <a href="./setup.html">Setup</a><br>
- <a href="./gmcommands.html">GM Commands</a><br>
- <a href="./faq.html">FAQ</a><br>
- <a href="./resources.html">Resources</a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td id="btmborder">
- <table class="w800" cellspacing="0" cellpadding="0" border="0" height="2">
- <tr>
- <td id="leftbtmborder"">
- </td>
- <td id="midbtmborder"">
- <img src="./images/btmborder.gif" width="44" height="2">
- </td>
- <td id="rightbtmborder">
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td id="content">
- <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%">
- <tr>
- <td id="lefttext" valign="top">
-<h1>NPC Features</h1>
-One of the best aspects of eAthena is the NPC system. As a base, we have most of the official kRO NPC scripts, and if they are in
-iRO, we have their correct translations. You can put any of your custom NPCs on top of these, using our extremely easy-to-learn
-scripting language. We also have a wide variety of custom NPCs available in /npc/custom/ and for download in the forums to
-maximize your players' experiences.
-
-
- </td>
- <td id="midtext">
- </td>
- <td id="righttext" valign="top">
- <ul>
- <li><strong>Town Npcs</strong> (11/17)</li>
- <ul><li> Alberta - 100%</li></ul>
- <ul><li> Al de Baran - 100%</li></ul>
- <ul><li> Amatsu - 100%</li></ul>
- <ul><li> Ayothaya - 75%</li></ul>
- <ul><li> Comodo - 100%</li></ul>
- <ul><li> Einbech - 90%</li></ul>
- <ul><li> Einbroch - 75%</li></ul>
- <ul><li> Geffen - 100%</li></ul>
- <ul><li> Gonryun - 60%</li></ul>
- <ul><li> Izlude - 100%</li></ul>
- <ul><li> Louyang - 75%</li></ul>
- <ul><li> Lutie - 100%</li></ul>
- <ul><li> Morocc - 100%</li></ul>
- <ul><li> Niflheim - 100%</li></ul>
- <ul><li> Payon(New Maps) - 99%</li></ul>
- <ul><li> Prontera - 100%</li></ul>
- <ul><li> Umbala - 100%</li></ul>
-
- <li><strong>Job Quests</strong> (16/33)</li>
- <ul><li> Novice Class (2/2)</li></ul>
- <ul><ul><li> Novice - 100%</li></ul></ul>
- <ul><ul><li> Super Novice - 100%</li></ul></ul>
- <ul><li> 1-1 Class (6/6)</li></ul>
- <ul><ul><li> Swordman - 100%</li></ul></ul>
- <ul><ul><li> Mage - 100%</li></ul></ul>
-
-
- <ul><ul><li> Archer - 100%</li></ul></ul>
-
- <ul><ul><li> Acolyte - 100%</li></ul></ul>
- <ul><ul><li> Merchant - 100%</li></ul></ul>
- <ul><ul><li> Thief - 100%</li></ul></ul>
- <ul><li> 2-1 Class (6/6)</li></ul>
- <ul><ul><li> Knight - 100%</li></ul></ul>
-
- <ul><ul><li> Priest - 100%</li></ul></ul>
- <ul><ul><li> Wizard - 100%</li></ul></ul>
-
- <ul><ul><li> Blacksmith - 100%</li></ul></ul>
- <ul><ul><li> Hunter - 100%</li></ul></ul>
-
- <ul><ul><li> Assassin - 100%</li></ul></ul>
-
- <ul><li> 2-2 Class (2/7)</li></ul>
- <ul><ul><li> Crusader - 0%</li></ul></ul>
- <ul><ul><li> Monk - 0% (Soon)</li></ul></ul>
- <ul><ul><li> Sage - 0% (Soon)</li></ul></ul>
- <ul><ul><li> Rogue - 100%</li></ul></ul>
-
- <ul><ul><li> Alchemist - 100%</li></ul></ul>
-
- <ul><ul><li> Bard - 0%</li></ul></ul>
- <ul><ul><li> Dancer - 100%</li></ul></ul>
-
- <ul><li> 2-1-1 Class (0/6)</li></ul>
- <ul><li> 2-2-1 Class (0/6)</li></ul>
- <li><strong>Kafras</strong> - 100%</li>
-
- <li><strong>Guides</strong> - 100%</li>
-
- <li> <strong>War Of Emperium</strong> (4/5)</li>
- <ul><li> Prontera - 100%</li></ul>
- <ul><li> Geffen - 100%</li></ul>
-
- <ul><li> Payon - 100%</li></ul>
- <ul><li> Al De Baran - 100%</li></ul>
-
- <ul><li> Novice - 0%</li></ul>
- <li><strong>Quests</strong> (24/25)</li>
-
- <ul><li> Skill Quests (7/7)</li></ul>
-
- <ul><ul><li> Novice - 100%</li></ul></ul>
- <ul><ul><li> Swordman - 100%</li></ul></ul>
- <ul><ul><li> Mage - 100%</li></ul></ul>
- <ul><ul><li> Archer - 100%</li></ul></ul>
- <ul><ul><li> Acolyte - 100%</li></ul></ul>
- <ul><ul><li> Merchant - 100%</li></ul></ul>
-
- <ul><ul><li> Thief - 100%</li></ul></ul>
-
- <ul><li>Town Quests (9/10)</li></ul>
- <ul><ul><li> Prontera - 100%</li></ul></ul>
- <ul><ul><li> Morocc - 100%</li></ul></ul>
- <ul><ul><li> Geffen - 100%</li></ul></ul>
-
- <ul><ul><li> Izlude - 100%</li></ul></ul>
- <ul><ul><li> Alberta - 100%</li></ul></ul>
- <ul><ul><li> Al De Baran - 100%</li></ul></ul>
- <ul><ul><li> Yuno - 100%</li></ul></ul>
-
- <ul><ul><li> Lutie - 100%</li></ul></ul>
- <ul><ul><li> Comodo - 100%</li></ul></ul>
-
- <ul><ul><li> Payon - 20%</li></ul></ul>
- <ul><li>Other Quests (9/9)</li></ul>
- <ul><ul><li> Dye - 100%</li></ul></ul>
- <ul><ul><li> MrSmile - 100%</li></ul></ul>
- <ul><ul><li> Juice Making - 100%</li></ul></ul>
- <ul><ul><li> Doomed Swords - 100%</li></ul></ul>
-
- <ul><ul><li> Bongun Taming - 100%</li></ul></ul>
-
- <ul><ul><li> Munak Taming - 100%</li></ul></ul>
- <ul><ul><li> Tamking - 100%</li></ul></ul>
- <ul><ul><li> Bongun Sword - 100%</li></ul></ul>
- <ul><ul><li> The lvl 4 Weapon Quest - 100%</li></ul></ul>
- <ul><li>Other (7/10)</li></ul>
- <ul><ul><li> Card Remover - 100%</li></ul></ul>
-
- <ul><ul><li> PvP (old) - 100%</li></ul></ul>
- <ul><ul><li> Time Arena - 100%</li></ul></ul>
- <ul><ul><li> Bank - 100%</li></ul></ul>
-
- <ul><ul><li> Wedding - 80%</li></ul></ul>
-
- <ul><ul><li> Valkyrie - 10%</li></ul></ul>
-
- <ul><ul><li> Gefenia - 10%</li></ul></ul>
- <ul><ul><li> Heal Npc - 100%</li></ul></ul>
- <ul><ul><li> Warp Npc - 100%</li></ul></ul>
- <ul><ul><li> Jobchange - 100%</li></ul></ul>
- </ul>
-
- </td>
- </tr>
- <tr>
- <td colspan="3">
- © Content Copyright 2005 eAthena Development Team/Evera<br>
- © Design Copyright 2005 Evera
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- <td id="rightborder" valign="top">
- <table cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td id="rightborderspacer">
- </td>
- </tr>
- <tr>
- <td valign="top">
- <img src="./images/rightborder.gif">
- </td>
- </tr>
- </table>
- </td>
-
- </tr>
-
-</table>
-</div>
-
+<html><head><title>eAthena - NPC Features</title><head> + +<link rel="stylesheet" type="text/css" href="./readme.css"> + +<body> +<div id="dleftbg"> +</div> +<div id="drightbg"> +</div> +<div id="canvas" align="center"> +<table cellspacing="0" cellpadding="0" border="0" id="ea" align="center"> + <tr> + <td id="leftborder" valign="top"> + <table cellspacing="0" cellpadding="0" border="0"> + <tr> + <td id="leftborderspacer"> + </td> + </tr> + <tr> + <td valign="top"> + <img src="./images/leftborder.gif"> + </td> + </tr> + </table> + </td> + <td id="middle" valign="top"> + <table cellspacing="0" cellpadding="0" border="0" valign="top"> + <tr> + <td id="logo" valign="top"> + <table class="w800" cellspacing="0" cellpadding="0" border="0"> + <tr> + <td valign="top"> + <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%"> + <tr> + <td rowspan="4"> + <img src="./images/chara.gif" width="366" height="274"> + </td> + <td rowspan="4" width="129"> + </td> + <td colspan="2" width="305" height="51" align="right"> + <img src="./images/banner.gif" width="305" height="51"> + </td> + </tr> + <tr> + <td id="title" colspan="2" align="right"> + NPC Features + </td> + </tr> + <tr> + <td height="81" colspan="2"> + </td> + </tr> + <tr> + <td class="navi" align="right"> + <a href="../readme.html">Introduction</a><br> + <a href="./changelog.html">Changelog</a><br> + <a href="./features.html">Features</a><br> + NPC Features + + </td> + <td class="navi" align="right"> + <a href="./setup.html">Setup</a><br> + <a href="./gmcommands.html">GM Commands</a><br> + <a href="./faq.html">FAQ</a><br> + <a href="./resources.html">Resources</a> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td id="btmborder"> + <table class="w800" cellspacing="0" cellpadding="0" border="0" height="2"> + <tr> + <td id="leftbtmborder""> + </td> + <td id="midbtmborder""> + <img src="./images/btmborder.gif" width="44" height="2"> + </td> + <td id="rightbtmborder"> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td id="content"> + <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%"> + <tr> + <td id="lefttext" valign="top"> +<h1>NPC Features</h1> +One of the best aspects of eAthena is the NPC system. As a base, we have most of the official kRO NPC scripts, and if they are in +iRO, we have their correct translations. You can put any of your custom NPCs on top of these, using our extremely easy-to-learn +scripting language. We also have a wide variety of custom NPCs available in /npc/custom/ and for download in the forums to +maximize your players' experiences. + + + </td> + <td id="midtext"> + </td> + <td id="righttext" valign="top"> + <ul> + <li><strong>Town Npcs</strong> (11/17)</li> + <ul><li> Alberta - 100%</li></ul> + <ul><li> Al de Baran - 100%</li></ul> + <ul><li> Amatsu - 100%</li></ul> + <ul><li> Ayothaya - 75%</li></ul> + <ul><li> Comodo - 100%</li></ul> + <ul><li> Einbech - 90%</li></ul> + <ul><li> Einbroch - 75%</li></ul> + <ul><li> Geffen - 100%</li></ul> + <ul><li> Gonryun - 60%</li></ul> + <ul><li> Izlude - 100%</li></ul> + <ul><li> Louyang - 75%</li></ul> + <ul><li> Lutie - 100%</li></ul> + <ul><li> Morocc - 100%</li></ul> + <ul><li> Niflheim - 100%</li></ul> + <ul><li> Payon(New Maps) - 99%</li></ul> + <ul><li> Prontera - 100%</li></ul> + <ul><li> Umbala - 100%</li></ul> + + <li><strong>Job Quests</strong> (16/33)</li> + <ul><li> Novice Class (2/2)</li></ul> + <ul><ul><li> Novice - 100%</li></ul></ul> + <ul><ul><li> Super Novice - 100%</li></ul></ul> + <ul><li> 1-1 Class (6/6)</li></ul> + <ul><ul><li> Swordman - 100%</li></ul></ul> + <ul><ul><li> Mage - 100%</li></ul></ul> + + + <ul><ul><li> Archer - 100%</li></ul></ul> + + <ul><ul><li> Acolyte - 100%</li></ul></ul> + <ul><ul><li> Merchant - 100%</li></ul></ul> + <ul><ul><li> Thief - 100%</li></ul></ul> + <ul><li> 2-1 Class (6/6)</li></ul> + <ul><ul><li> Knight - 100%</li></ul></ul> + + <ul><ul><li> Priest - 100%</li></ul></ul> + <ul><ul><li> Wizard - 100%</li></ul></ul> + + <ul><ul><li> Blacksmith - 100%</li></ul></ul> + <ul><ul><li> Hunter - 100%</li></ul></ul> + + <ul><ul><li> Assassin - 100%</li></ul></ul> + + <ul><li> 2-2 Class (2/7)</li></ul> + <ul><ul><li> Crusader - 0%</li></ul></ul> + <ul><ul><li> Monk - 0% (Soon)</li></ul></ul> + <ul><ul><li> Sage - 0% (Soon)</li></ul></ul> + <ul><ul><li> Rogue - 100%</li></ul></ul> + + <ul><ul><li> Alchemist - 100%</li></ul></ul> + + <ul><ul><li> Bard - 0%</li></ul></ul> + <ul><ul><li> Dancer - 100%</li></ul></ul> + + <ul><li> 2-1-1 Class (0/6)</li></ul> + <ul><li> 2-2-1 Class (0/6)</li></ul> + <li><strong>Kafras</strong> - 100%</li> + + <li><strong>Guides</strong> - 100%</li> + + <li> <strong>War Of Emperium</strong> (4/5)</li> + <ul><li> Prontera - 100%</li></ul> + <ul><li> Geffen - 100%</li></ul> + + <ul><li> Payon - 100%</li></ul> + <ul><li> Al De Baran - 100%</li></ul> + + <ul><li> Novice - 0%</li></ul> + <li><strong>Quests</strong> (24/25)</li> + + <ul><li> Skill Quests (7/7)</li></ul> + + <ul><ul><li> Novice - 100%</li></ul></ul> + <ul><ul><li> Swordman - 100%</li></ul></ul> + <ul><ul><li> Mage - 100%</li></ul></ul> + <ul><ul><li> Archer - 100%</li></ul></ul> + <ul><ul><li> Acolyte - 100%</li></ul></ul> + <ul><ul><li> Merchant - 100%</li></ul></ul> + + <ul><ul><li> Thief - 100%</li></ul></ul> + + <ul><li>Town Quests (9/10)</li></ul> + <ul><ul><li> Prontera - 100%</li></ul></ul> + <ul><ul><li> Morocc - 100%</li></ul></ul> + <ul><ul><li> Geffen - 100%</li></ul></ul> + + <ul><ul><li> Izlude - 100%</li></ul></ul> + <ul><ul><li> Alberta - 100%</li></ul></ul> + <ul><ul><li> Al De Baran - 100%</li></ul></ul> + <ul><ul><li> Yuno - 100%</li></ul></ul> + + <ul><ul><li> Lutie - 100%</li></ul></ul> + <ul><ul><li> Comodo - 100%</li></ul></ul> + + <ul><ul><li> Payon - 20%</li></ul></ul> + <ul><li>Other Quests (9/9)</li></ul> + <ul><ul><li> Dye - 100%</li></ul></ul> + <ul><ul><li> MrSmile - 100%</li></ul></ul> + <ul><ul><li> Juice Making - 100%</li></ul></ul> + <ul><ul><li> Doomed Swords - 100%</li></ul></ul> + + <ul><ul><li> Bongun Taming - 100%</li></ul></ul> + + <ul><ul><li> Munak Taming - 100%</li></ul></ul> + <ul><ul><li> Tamking - 100%</li></ul></ul> + <ul><ul><li> Bongun Sword - 100%</li></ul></ul> + <ul><ul><li> The lvl 4 Weapon Quest - 100%</li></ul></ul> + <ul><li>Other (7/10)</li></ul> + <ul><ul><li> Card Remover - 100%</li></ul></ul> + + <ul><ul><li> PvP (old) - 100%</li></ul></ul> + <ul><ul><li> Time Arena - 100%</li></ul></ul> + <ul><ul><li> Bank - 100%</li></ul></ul> + + <ul><ul><li> Wedding - 80%</li></ul></ul> + + <ul><ul><li> Valkyrie - 10%</li></ul></ul> + + <ul><ul><li> Gefenia - 10%</li></ul></ul> + <ul><ul><li> Heal Npc - 100%</li></ul></ul> + <ul><ul><li> Warp Npc - 100%</li></ul></ul> + <ul><ul><li> Jobchange - 100%</li></ul></ul> + </ul> + + </td> + </tr> + <tr> + <td colspan="3"> + © Content Copyright 2005 eAthena Development Team/Evera<br> + © Design Copyright 2005 Evera + </td> + </tr> + </table> + </td> + </tr> + </table> + </td> + </tr> + </table> + </td> + <td id="rightborder" valign="top"> + <table cellspacing="0" cellpadding="0" border="0"> + <tr> + <td id="rightborderspacer"> + </td> + </tr> + <tr> + <td valign="top"> + <img src="./images/rightborder.gif"> + </td> + </tr> + </table> + </td> + + </tr> + +</table> +</div> + diff --git a/readme/readme.css b/readme/readme.css index eb64703a4..63742c60c 100644 --- a/readme/readme.css +++ b/readme/readme.css @@ -1,227 +1,227 @@ -/* Go away, Troll */
-
-A,
-A:link,
-A:visited,
-A:active,
-A:hover {
-
-color: #000;
-
-text-decoration: underline;
-
-background-color : inherit;
-
-}
-
-
-html {
-
- margin: 0px;
-
- padding: 0px;
-
-}
-
-body {
-
- background: url(./images/bg.gif);
-
- margin: 0px 0px 0px 0px;
-
- padding: 0px 0px 0px 0px;
-
- font: 14px Arial, arial;
-
- color: #000;
-
-}
-
-h1 {
-
- width : 100%;
-
- height : 40px;
-
- text-align : bottom;
-
- font : 30px Arial Black, arial black, helvetica, sans-serif;
-
-}
-
-.w800 {
-
- width: 800px;
-
-}
-
-#dleftbg,
-#drightbg {
-
- position: absolute;
-
- width: 50%;
-
- overflow: hidden;
-
- height: 69px;
-
- z-index: 0;
-
-}
-
-#dleftbg {
-
- top: 66px;
-
- left: 0px;
-
- background: url(./images/leftbg.gif);
-
-}
-
-#drightbg {
-
- top: 105px;
-
- right: 0px;
-
- background: url(./images/rightbg.gif);
-
-}
-
-#canvas {
-
- position: absolute;
-
- z-index: 1;
-
- width: 100%;
-
- height: 100%;
-
-}
-
-#ea {
-
- height: 100%;
-
-}
-
-
-#leftborderspacer,
-#leftbgspacer {
-
- height: 66px;
-
-}
-
-#rightborderspacer {
-
- height: 106px;
-
-}
-
-
-#leftborder,
-#rightborder {
-
- background: #000;
-
- width: 1px;
-
-}
-
-.vspacer {
-
-
-
-}
-
-#middle {
-
- background: url(./images/textbg.gif);
-
- width: 800px;
-
- height: 100%;
-
-}
-
-#logo {
-
- background: url(./images/logo.gif) no-repeat top left;
-
- height: 100%;
-
-}
-
-#title {
-
- font : 30px Arial Black, arial black, helvetica, sans-serif;
-
- height: 54px;
-
-}
-
-.navi {
-
- font : 14px Arial Black, arial black, helvetica, sans-serif;
-
- height: 88px;
-
-}
-
-#btmborder {
-
- background: url(./images/btmborderbg.gif);
-
- height: 2px;
-
-}
-
-.left,
-#lefttext,
-#leftbtmborder {
-
- width: 327px;
-
-}
-
-#midtext,
-#midbtmborder {
-
- width: 44px;
-
-}
-
-.right,
-#righttext,
-#rightbtmborder {
-
- width: 429px;
-
-}
-
-#content {
-
- height: 100px;
-
-}
-
-#lefttext,
-#righttext {
-
- background: url(./images/textbg.gif);
-
- height: 100%;
-
-}
-
-#midtext {
-
- background: url(./images/logobtm.gif);
-
- height: 100%;
-
+/* Go away, Troll */ + +A, +A:link, +A:visited, +A:active, +A:hover { + +color: #000; + +text-decoration: underline; + +background-color : inherit; + +} + + +html { + + margin: 0px; + + padding: 0px; + +} + +body { + + background: url(./images/bg.gif); + + margin: 0px 0px 0px 0px; + + padding: 0px 0px 0px 0px; + + font: 14px Arial, arial; + + color: #000; + +} + +h1 { + + width : 100%; + + height : 40px; + + text-align : bottom; + + font : 30px Arial Black, arial black, helvetica, sans-serif; + +} + +.w800 { + + width: 800px; + +} + +#dleftbg, +#drightbg { + + position: absolute; + + width: 50%; + + overflow: hidden; + + height: 69px; + + z-index: 0; + +} + +#dleftbg { + + top: 66px; + + left: 0px; + + background: url(./images/leftbg.gif); + +} + +#drightbg { + + top: 105px; + + right: 0px; + + background: url(./images/rightbg.gif); + +} + +#canvas { + + position: absolute; + + z-index: 1; + + width: 100%; + + height: 100%; + +} + +#ea { + + height: 100%; + +} + + +#leftborderspacer, +#leftbgspacer { + + height: 66px; + +} + +#rightborderspacer { + + height: 106px; + +} + + +#leftborder, +#rightborder { + + background: #000; + + width: 1px; + +} + +.vspacer { + + + +} + +#middle { + + background: url(./images/textbg.gif); + + width: 800px; + + height: 100%; + +} + +#logo { + + background: url(./images/logo.gif) no-repeat top left; + + height: 100%; + +} + +#title { + + font : 30px Arial Black, arial black, helvetica, sans-serif; + + height: 54px; + +} + +.navi { + + font : 14px Arial Black, arial black, helvetica, sans-serif; + + height: 88px; + +} + +#btmborder { + + background: url(./images/btmborderbg.gif); + + height: 2px; + +} + +.left, +#lefttext, +#leftbtmborder { + + width: 327px; + +} + +#midtext, +#midbtmborder { + + width: 44px; + +} + +.right, +#righttext, +#rightbtmborder { + + width: 429px; + +} + +#content { + + height: 100px; + +} + +#lefttext, +#righttext { + + background: url(./images/textbg.gif); + + height: 100%; + +} + +#midtext { + + background: url(./images/logobtm.gif); + + height: 100%; + }
\ No newline at end of file diff --git a/readme/resources.html b/readme/resources.html index 70d111168..83aeb22d7 100644 --- a/readme/resources.html +++ b/readme/resources.html @@ -1,150 +1,150 @@ -<html><head><title>eAthena - Resources</title><head>
-
-<link rel="stylesheet" type="text/css" href="./readme.css">
-
-<body>
-<div id="dleftbg">
-</div>
-<div id="drightbg">
-</div>
-<div id="canvas" align="center">
-<table cellspacing="0" cellpadding="0" border="0" id="ea" align="center">
- <tr>
- <td id="leftborder" valign="top">
- <table cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td id="leftborderspacer">
- </td>
- </tr>
- <tr>
- <td valign="top">
- <img src="./images/leftborder.gif">
- </td>
- </tr>
- </table>
- </td>
- <td id="middle" valign="top">
- <table cellspacing="0" cellpadding="0" border="0" valign="top">
- <tr>
- <td id="logo" valign="top">
- <table class="w800" cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td valign="top">
- <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%">
- <tr>
- <td rowspan="4">
- <img src="./images/chara.gif" width="366" height="274">
- </td>
- <td rowspan="4" width="129">
- </td>
- <td colspan="2" width="305" height="51" align="right">
- <img src="./images/banner.gif" width="305" height="51">
- </td>
- </tr>
- <tr>
- <td id="title" colspan="2" align="right">
- Resources
- </td>
- </tr>
- <tr>
- <td height="81" colspan="2">
- </td>
- </tr>
- <tr>
- <td class="navi" align="right">
- <a href="../readme.html">Introduction</a><br>
- <a href="./changelog.html">Changelog</a><br>
- <a href="./features.html">Features</a><br>
- <a href="./npcfeatures.html">NPC Features</a>
-
- </td>
- <td class="navi" align="right">
- <a href="./setup.html">Setup</a><br>
- <a href="./gmcommands.html">GM Commands</a><br>
- <a href="./faq.html">FAQ</a><br>
- Resources
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td id="btmborder">
- <table class="w800" cellspacing="0" cellpadding="0" border="0" height="2">
- <tr>
- <td id="leftbtmborder"">
- </td>
- <td id="midbtmborder"">
- <img src="./images/btmborder.gif" width="44" height="2">
- </td>
- <td id="rightbtmborder">
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td id="content">
- <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%">
- <tr>
- <td id="lefttext" valign="top">
-<h1>Official Sources</h1>
-<b><a href="http://eathena.deltaanime.net">http://eathena.deltaanime.net</a></b>
- Our Official Webpage.<br>
-<b><a href="http://forum.asb-sakray.net">http://forum.asb-sakray.net</a></b>
- Aegis Support Board.<br>
-Please take note, you are adviced to search in the forums
-first before requesting for help to be made toward you.<br>
-<br>
-<b>IRC Channel:</b><br>
-
-<b><a href="irc://irc.deltaanime.net">irc.deltaanime.net</a></b>
- #athena (Please make sure to check both forums before coming into
- the channel to ask questions, or else we will not only ignore you,
- but laugh at you too.)
- </td>
- <td id="midtext">
- </td>
- <td id="righttext" valign="top">
-<h1>Other Sources</h1>
-<b><a href="http://kalen.s79.xrea.com/npc/">http://kalen.s79.xrea.com/npc/</a></b>
- NPC Factory (Lists NPC/number)<br>
-<br>
-If you want your site to be featured here, please tell a dev ^_^.
-
-
- </td>
- </tr>
- <tr>
- <td colspan="3">
- © Content Copyright 2005 eAthena Development Team/Evera<br>
- © Design Copyright 2005 Evera
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- <td id="rightborder" valign="top">
- <table cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td id="rightborderspacer">
- </td>
- </tr>
- <tr>
- <td valign="top">
- <img src="./images/rightborder.gif">
- </td>
- </tr>
- </table>
- </td>
-
- </tr>
-
-</table>
-</div>
-
+<html><head><title>eAthena - Resources</title><head> + +<link rel="stylesheet" type="text/css" href="./readme.css"> + +<body> +<div id="dleftbg"> +</div> +<div id="drightbg"> +</div> +<div id="canvas" align="center"> +<table cellspacing="0" cellpadding="0" border="0" id="ea" align="center"> + <tr> + <td id="leftborder" valign="top"> + <table cellspacing="0" cellpadding="0" border="0"> + <tr> + <td id="leftborderspacer"> + </td> + </tr> + <tr> + <td valign="top"> + <img src="./images/leftborder.gif"> + </td> + </tr> + </table> + </td> + <td id="middle" valign="top"> + <table cellspacing="0" cellpadding="0" border="0" valign="top"> + <tr> + <td id="logo" valign="top"> + <table class="w800" cellspacing="0" cellpadding="0" border="0"> + <tr> + <td valign="top"> + <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%"> + <tr> + <td rowspan="4"> + <img src="./images/chara.gif" width="366" height="274"> + </td> + <td rowspan="4" width="129"> + </td> + <td colspan="2" width="305" height="51" align="right"> + <img src="./images/banner.gif" width="305" height="51"> + </td> + </tr> + <tr> + <td id="title" colspan="2" align="right"> + Resources + </td> + </tr> + <tr> + <td height="81" colspan="2"> + </td> + </tr> + <tr> + <td class="navi" align="right"> + <a href="../readme.html">Introduction</a><br> + <a href="./changelog.html">Changelog</a><br> + <a href="./features.html">Features</a><br> + <a href="./npcfeatures.html">NPC Features</a> + + </td> + <td class="navi" align="right"> + <a href="./setup.html">Setup</a><br> + <a href="./gmcommands.html">GM Commands</a><br> + <a href="./faq.html">FAQ</a><br> + Resources + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td id="btmborder"> + <table class="w800" cellspacing="0" cellpadding="0" border="0" height="2"> + <tr> + <td id="leftbtmborder""> + </td> + <td id="midbtmborder""> + <img src="./images/btmborder.gif" width="44" height="2"> + </td> + <td id="rightbtmborder"> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td id="content"> + <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%"> + <tr> + <td id="lefttext" valign="top"> +<h1>Official Sources</h1> +<b><a href="http://eathena.deltaanime.net">http://eathena.deltaanime.net</a></b> + Our Official Webpage.<br> +<b><a href="http://forum.asb-sakray.net">http://forum.asb-sakray.net</a></b> + Aegis Support Board.<br> +Please take note, you are adviced to search in the forums +first before requesting for help to be made toward you.<br> +<br> +<b>IRC Channel:</b><br> + +<b><a href="irc://irc.deltaanime.net">irc.deltaanime.net</a></b> + #athena (Please make sure to check both forums before coming into + the channel to ask questions, or else we will not only ignore you, + but laugh at you too.) + </td> + <td id="midtext"> + </td> + <td id="righttext" valign="top"> +<h1>Other Sources</h1> +<b><a href="http://kalen.s79.xrea.com/npc/">http://kalen.s79.xrea.com/npc/</a></b> + NPC Factory (Lists NPC/number)<br> +<br> +If you want your site to be featured here, please tell a dev ^_^. + + + </td> + </tr> + <tr> + <td colspan="3"> + © Content Copyright 2005 eAthena Development Team/Evera<br> + © Design Copyright 2005 Evera + </td> + </tr> + </table> + </td> + </tr> + </table> + </td> + </tr> + </table> + </td> + <td id="rightborder" valign="top"> + <table cellspacing="0" cellpadding="0" border="0"> + <tr> + <td id="rightborderspacer"> + </td> + </tr> + <tr> + <td valign="top"> + <img src="./images/rightborder.gif"> + </td> + </tr> + </table> + </td> + + </tr> + +</table> +</div> + diff --git a/readme/setup.html b/readme/setup.html index 321748d88..72b06c40e 100644 --- a/readme/setup.html +++ b/readme/setup.html @@ -1,144 +1,144 @@ -<html><head><title>eAthena - Setup</title><head>
-
-<link rel="stylesheet" type="text/css" href="./readme.css">
-
-<body>
-<div id="dleftbg">
-</div>
-<div id="drightbg">
-</div>
-<div id="canvas" align="center">
-<table cellspacing="0" cellpadding="0" border="0" id="ea" align="center">
- <tr>
- <td id="leftborder" valign="top">
- <table cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td id="leftborderspacer">
- </td>
- </tr>
- <tr>
- <td valign="top">
- <img src="./images/leftborder.gif">
- </td>
- </tr>
- </table>
- </td>
- <td id="middle" valign="top">
- <table cellspacing="0" cellpadding="0" border="0" valign="top">
- <tr>
- <td id="logo" valign="top">
- <table class="w800" cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td valign="top">
- <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%">
- <tr>
- <td rowspan="4">
- <img src="./images/chara.gif" width="366" height="274">
- </td>
- <td rowspan="4" width="129">
- </td>
- <td colspan="2" width="305" height="51" align="right">
- <img src="./images/banner.gif" width="305" height="51">
- </td>
- </tr>
- <tr>
- <td id="title" colspan="2" align="right">
- Setup
- </td>
- </tr>
- <tr>
- <td height="81" colspan="2">
- </td>
- </tr>
- <tr>
- <td class="navi" align="right">
- <a href="../readme.html">Introduction</a><br>
- <a href="./changelog.html">Changelog</a><br>
- <a href="./features.html">Features</a><br>
- <a href="./npcfeatures.html">NPC Features</a>
-
- </td>
- <td class="navi" align="right">
- Setup<br>
- <a href="./gmcommands.html">GM Commands</a><br>
- <a href="./faq.html">FAQ</a><br>
- <a href="./resources.html">Resources</a>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td id="btmborder">
- <table class="w800" cellspacing="0" cellpadding="0" border="0" height="2">
- <tr>
- <td id="leftbtmborder"">
- </td>
- <td id="midbtmborder"">
- <img src="./images/btmborder.gif" width="44" height="2">
- </td>
- <td id="rightbtmborder">
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td id="content">
- <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%">
- <tr>
- <td id="lefttext" valign="top">
-<h1>Fresh Install</h1>
-It's extremely easy to set up eAthena, just follow these simple steps.
-<ol>
- <li>Edit motd.txt, grf-files.txt and the .conf files in your /conf/ folder as you see fit</li>
- <li>If you want to add a user, run adduser.exe in the main eAthena directory before starting the server.</li>
- <li>Run runserver.bat or runserver-sql.bat (depending on which storage system you're using, or you could run login-server.exe, char-server.exe, and map-server.exe manually)</li>
- <li>Give people your IP address (can be found at <a href="http://www.whatismyip.com">http://www.whatismyip.com</a>) to people to add in their sclientinfo.xml</li>
- <li>You're done!</li>
- </td>
- <td id="midtext">
- </td>
- <td id="righttext" valign="top">
-<h1>Upgrading</h1>
-When you're changing versions of eAthena, it is important to keep your saved files in tact. Locate the files (/save/ in TXT, your SQL databse in SQL) and make a back up.
-You also might want to back up any changes you did to eAthena, such as custom sprites/items, open-source changes.
-After backing it up, change motd.txt, grf-files.txt, and the .conf files in the /conf/ folder to your old settings. It is
-important that you use a fresh eAthena, as it changes in structure and many files will have different formats over time.
-Put your backed up files back in, and run eAthena like you normally would.
-
- </td>
- </tr>
- <tr>
- <td colspan="3">
- © Content Copyright 2005 eAthena Development Team/Evera<br>
- © Design Copyright 2005 Evera
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- <td id="rightborder" valign="top">
- <table cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td id="rightborderspacer">
- </td>
- </tr>
- <tr>
- <td valign="top">
- <img src="./images/rightborder.gif">
- </td>
- </tr>
- </table>
- </td>
-
- </tr>
-
-</table>
-</div>
-
+<html><head><title>eAthena - Setup</title><head> + +<link rel="stylesheet" type="text/css" href="./readme.css"> + +<body> +<div id="dleftbg"> +</div> +<div id="drightbg"> +</div> +<div id="canvas" align="center"> +<table cellspacing="0" cellpadding="0" border="0" id="ea" align="center"> + <tr> + <td id="leftborder" valign="top"> + <table cellspacing="0" cellpadding="0" border="0"> + <tr> + <td id="leftborderspacer"> + </td> + </tr> + <tr> + <td valign="top"> + <img src="./images/leftborder.gif"> + </td> + </tr> + </table> + </td> + <td id="middle" valign="top"> + <table cellspacing="0" cellpadding="0" border="0" valign="top"> + <tr> + <td id="logo" valign="top"> + <table class="w800" cellspacing="0" cellpadding="0" border="0"> + <tr> + <td valign="top"> + <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%"> + <tr> + <td rowspan="4"> + <img src="./images/chara.gif" width="366" height="274"> + </td> + <td rowspan="4" width="129"> + </td> + <td colspan="2" width="305" height="51" align="right"> + <img src="./images/banner.gif" width="305" height="51"> + </td> + </tr> + <tr> + <td id="title" colspan="2" align="right"> + Setup + </td> + </tr> + <tr> + <td height="81" colspan="2"> + </td> + </tr> + <tr> + <td class="navi" align="right"> + <a href="../readme.html">Introduction</a><br> + <a href="./changelog.html">Changelog</a><br> + <a href="./features.html">Features</a><br> + <a href="./npcfeatures.html">NPC Features</a> + + </td> + <td class="navi" align="right"> + Setup<br> + <a href="./gmcommands.html">GM Commands</a><br> + <a href="./faq.html">FAQ</a><br> + <a href="./resources.html">Resources</a> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td id="btmborder"> + <table class="w800" cellspacing="0" cellpadding="0" border="0" height="2"> + <tr> + <td id="leftbtmborder""> + </td> + <td id="midbtmborder""> + <img src="./images/btmborder.gif" width="44" height="2"> + </td> + <td id="rightbtmborder"> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td id="content"> + <table class="w800" cellspacing="0" cellpadding="0" border="0" height="100%"> + <tr> + <td id="lefttext" valign="top"> +<h1>Fresh Install</h1> +It's extremely easy to set up eAthena, just follow these simple steps. +<ol> + <li>Edit motd.txt, grf-files.txt and the .conf files in your /conf/ folder as you see fit</li> + <li>If you want to add a user, run adduser.exe in the main eAthena directory before starting the server.</li> + <li>Run runserver.bat or runserver-sql.bat (depending on which storage system you're using, or you could run login-server.exe, char-server.exe, and map-server.exe manually)</li> + <li>Give people your IP address (can be found at <a href="http://www.whatismyip.com">http://www.whatismyip.com</a>) to people to add in their sclientinfo.xml</li> + <li>You're done!</li> + </td> + <td id="midtext"> + </td> + <td id="righttext" valign="top"> +<h1>Upgrading</h1> +When you're changing versions of eAthena, it is important to keep your saved files in tact. Locate the files (/save/ in TXT, your SQL databse in SQL) and make a back up. +You also might want to back up any changes you did to eAthena, such as custom sprites/items, open-source changes. +After backing it up, change motd.txt, grf-files.txt, and the .conf files in the /conf/ folder to your old settings. It is +important that you use a fresh eAthena, as it changes in structure and many files will have different formats over time. +Put your backed up files back in, and run eAthena like you normally would. + + </td> + </tr> + <tr> + <td colspan="3"> + © Content Copyright 2005 eAthena Development Team/Evera<br> + © Design Copyright 2005 Evera + </td> + </tr> + </table> + </td> + </tr> + </table> + </td> + </tr> + </table> + </td> + <td id="rightborder" valign="top"> + <table cellspacing="0" cellpadding="0" border="0"> + <tr> + <td id="rightborderspacer"> + </td> + </tr> + <tr> + <td valign="top"> + <img src="./images/rightborder.gif"> + </td> + </tr> + </table> + </td> + + </tr> + +</table> +</div> + diff --git a/sql-files/upgrade_svn12581.sql b/sql-files/upgrade_svn12581.sql index ce2ffd989..9b487d5e1 100644 --- a/sql-files/upgrade_svn12581.sql +++ b/sql-files/upgrade_svn12581.sql @@ -1,3 +1,3 @@ -ALTER TABLE `quest_objective` ADD COLUMN `char_id` INTEGER UNSIGNED NOT NULL AFTER `num`,
- DROP PRIMARY KEY,
+ALTER TABLE `quest_objective` ADD COLUMN `char_id` INTEGER UNSIGNED NOT NULL AFTER `num`, + DROP PRIMARY KEY, ADD PRIMARY KEY USING BTREE(`quest_id`, `num`, `char_id`);
\ No newline at end of file diff --git a/sql-files/upgrade_svn12975.sql b/sql-files/upgrade_svn12975.sql index a8f5e3818..26d78178e 100644 --- a/sql-files/upgrade_svn12975.sql +++ b/sql-files/upgrade_svn12975.sql @@ -1,24 +1,24 @@ -START TRANSACTION;
-
--- delete columns
-ALTER TABLE `login` DROP `error_message`;
-ALTER TABLE `login` DROP `memo`;
-
--- rename columns
-ALTER TABLE `login` CHANGE `connect_until` `expiration_time` INT( 11 ) UNSIGNED NOT NULL DEFAULT '0';
-ALTER TABLE `login` CHANGE `ban_until` `unban_time` INT( 11 ) UNSIGNED NOT NULL DEFAULT '0';
-
--- reorder columns
-ALTER TABLE `login` MODIFY `sex` enum('M','F','S') NOT NULL default 'M' AFTER `user_pass`;
-ALTER TABLE `login` MODIFY `email` varchar(39) NOT NULL default '' AFTER `sex`;
-ALTER TABLE `login` MODIFY `level` tinyint(3) NOT NULL default '0' AFTER `email`;
-ALTER TABLE `login` MODIFY `state` int(11) unsigned NOT NULL default '0' AFTER `level`;
-ALTER TABLE `login` MODIFY `unban_time` int(11) unsigned NOT NULL default '0' AFTER `state`;
-ALTER TABLE `login` MODIFY `expiration_time` int(11) unsigned NOT NULL default '0' AFTER `unban_time`;
-ALTER TABLE `login` MODIFY `logincount` mediumint(9) unsigned NOT NULL default '0' AFTER `expiration_time`;
-
--- change ip format
-ALTER TABLE `loginlog` CHANGE `ip` `ip` VARCHAR( 15 ) NOT NULL default '';
-UPDATE `loginlog` SET `ip` = inet_ntoa(`ip`);
-
-COMMIT;
+START TRANSACTION; + +-- delete columns +ALTER TABLE `login` DROP `error_message`; +ALTER TABLE `login` DROP `memo`; + +-- rename columns +ALTER TABLE `login` CHANGE `connect_until` `expiration_time` INT( 11 ) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `login` CHANGE `ban_until` `unban_time` INT( 11 ) UNSIGNED NOT NULL DEFAULT '0'; + +-- reorder columns +ALTER TABLE `login` MODIFY `sex` enum('M','F','S') NOT NULL default 'M' AFTER `user_pass`; +ALTER TABLE `login` MODIFY `email` varchar(39) NOT NULL default '' AFTER `sex`; +ALTER TABLE `login` MODIFY `level` tinyint(3) NOT NULL default '0' AFTER `email`; +ALTER TABLE `login` MODIFY `state` int(11) unsigned NOT NULL default '0' AFTER `level`; +ALTER TABLE `login` MODIFY `unban_time` int(11) unsigned NOT NULL default '0' AFTER `state`; +ALTER TABLE `login` MODIFY `expiration_time` int(11) unsigned NOT NULL default '0' AFTER `unban_time`; +ALTER TABLE `login` MODIFY `logincount` mediumint(9) unsigned NOT NULL default '0' AFTER `expiration_time`; + +-- change ip format +ALTER TABLE `loginlog` CHANGE `ip` `ip` VARCHAR( 15 ) NOT NULL default ''; +UPDATE `loginlog` SET `ip` = inet_ntoa(`ip`); + +COMMIT; diff --git a/sql-files/upgrade_svn12975_log.sql b/sql-files/upgrade_svn12975_log.sql index c6900e606..3c9aa5cff 100644 --- a/sql-files/upgrade_svn12975_log.sql +++ b/sql-files/upgrade_svn12975_log.sql @@ -1,20 +1,20 @@ --- NOTE: change `ragnarok` and `log` to whatever your database names are.
-
-START TRANSACTION;
-
-CREATE TABLE `log`.`loginlog` (
- `time` datetime NOT NULL default '0000-00-00 00:00:00',
- `ip` varchar( 15 ) NOT NULL ,
- `user` varchar( 23 ) NOT NULL default '',
- `rcode` tinyint( 4 ) NOT NULL default '0',
- `log` varchar( 255 ) NOT NULL default '',
- KEY `ip` ( `ip` )
-) ENGINE = MYISAM;
-
-INSERT INTO `log`.`loginlog`
- SELECT *
- FROM `ragnarok`.`loginlog` ;
-
-DROP TABLE `ragnarok`.`loginlog` ;
-
-COMMIT;
+-- NOTE: change `ragnarok` and `log` to whatever your database names are. + +START TRANSACTION; + +CREATE TABLE `log`.`loginlog` ( + `time` datetime NOT NULL default '0000-00-00 00:00:00', + `ip` varchar( 15 ) NOT NULL , + `user` varchar( 23 ) NOT NULL default '', + `rcode` tinyint( 4 ) NOT NULL default '0', + `log` varchar( 255 ) NOT NULL default '', + KEY `ip` ( `ip` ) +) ENGINE = MYISAM; + +INSERT INTO `log`.`loginlog` + SELECT * + FROM `ragnarok`.`loginlog` ; + +DROP TABLE `ragnarok`.`loginlog` ; + +COMMIT; diff --git a/sql-files/upgrade_svn12975_view.sql b/sql-files/upgrade_svn12975_view.sql index a3d64f97e..2d65afd18 100644 --- a/sql-files/upgrade_svn12975_view.sql +++ b/sql-files/upgrade_svn12975_view.sql @@ -1,17 +1,17 @@ --- The statements below will create a 'view' (virtual table) that mimics
--- the previous `login` table layout. You can use this hack to make your db
--- compatible with older eathena servers or control panels.
--- Note: also adjust the account.sql.account_db setting in login_athena.conf.
--- Note: if your CP does not have a config setting for the `login` table name
--- you'll have to either modify its code or do some table renaming.
-
-START TRANSACTION;
-
--- create dummy columns, needed to make the view insertable
-ALTER TABLE `login` ADD `error_message` SMALLINT UNSIGNED NOT NULL DEFAULT '0';
-ALTER TABLE `login` ADD `memo` SMALLINT UNSIGNED NOT NULL DEFAULT '0';
-
--- create the view
-CREATE VIEW `login_view` ( `account_id`, `userid`, `user_pass`, `lastlogin`, `sex`, `logincount`, `email`, `level`, `error_message`, `connect_until`, `last_ip`, `memo`, `ban_until`, `state` ) AS SELECT `account_id`, `userid`, `user_pass`, `lastlogin`, `sex`, `logincount`, `email`, `level`, `error_message`, `expiration_time`, `last_ip`, `memo`, `unban_time`, `state` FROM `login`;
-
-COMMIT;
+-- The statements below will create a 'view' (virtual table) that mimics +-- the previous `login` table layout. You can use this hack to make your db +-- compatible with older eathena servers or control panels. +-- Note: also adjust the account.sql.account_db setting in login_athena.conf. +-- Note: if your CP does not have a config setting for the `login` table name +-- you'll have to either modify its code or do some table renaming. + +START TRANSACTION; + +-- create dummy columns, needed to make the view insertable +ALTER TABLE `login` ADD `error_message` SMALLINT UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `login` ADD `memo` SMALLINT UNSIGNED NOT NULL DEFAULT '0'; + +-- create the view +CREATE VIEW `login_view` ( `account_id`, `userid`, `user_pass`, `lastlogin`, `sex`, `logincount`, `email`, `level`, `error_message`, `connect_until`, `last_ip`, `memo`, `ban_until`, `state` ) AS SELECT `account_id`, `userid`, `user_pass`, `lastlogin`, `sex`, `logincount`, `email`, `level`, `error_message`, `expiration_time`, `last_ip`, `memo`, `unban_time`, `state` FROM `login`; + +COMMIT; diff --git a/sql-files/upgrade_svn13025_log.sql b/sql-files/upgrade_svn13025_log.sql index 702b30224..7d3084dd9 100644 --- a/sql-files/upgrade_svn13025_log.sql +++ b/sql-files/upgrade_svn13025_log.sql @@ -1,5 +1,5 @@ -START TRANSACTION;
-
-ALTER TABLE `zenylog` MODIFY COLUMN `type` enum('M','T','V','S','N','A','E') NOT NULL default 'S';
-
-COMMIT;
+START TRANSACTION; + +ALTER TABLE `zenylog` MODIFY COLUMN `type` enum('M','T','V','S','N','A','E') NOT NULL default 'S'; + +COMMIT; diff --git a/sql-files/upgrade_svn13115_mercenary.sql b/sql-files/upgrade_svn13115_mercenary.sql index bcb7cff31..70356b361 100644 --- a/sql-files/upgrade_svn13115_mercenary.sql +++ b/sql-files/upgrade_svn13115_mercenary.sql @@ -1,14 +1,14 @@ ---
--- Table structure for table `mercenary`
---
-
-CREATE TABLE IF NOT EXISTS `mercenary` (
- `mer_id` int(11) unsigned NOT NULL auto_increment,
- `char_id` int(11) NOT NULL,
- `class` mediumint(9) unsigned NOT NULL default '0',
- `hp` int(12) NOT NULL default '1',
- `sp` int(12) NOT NULL default '1',
- `kill_counter` int(11) NOT NULL,
- `life_time` int(11) NOT NULL default '0',
- PRIMARY KEY (`mer_id`)
-) ENGINE=MyISAM;
+-- +-- Table structure for table `mercenary` +-- + +CREATE TABLE IF NOT EXISTS `mercenary` ( + `mer_id` int(11) unsigned NOT NULL auto_increment, + `char_id` int(11) NOT NULL, + `class` mediumint(9) unsigned NOT NULL default '0', + `hp` int(12) NOT NULL default '1', + `sp` int(12) NOT NULL default '1', + `kill_counter` int(11) NOT NULL, + `life_time` int(11) NOT NULL default '0', + PRIMARY KEY (`mer_id`) +) ENGINE=MyISAM; diff --git a/sql-files/upgrade_svn13166_mercenary_owner.sql b/sql-files/upgrade_svn13166_mercenary_owner.sql index da7728cbe..29ecf8bf2 100644 --- a/sql-files/upgrade_svn13166_mercenary_owner.sql +++ b/sql-files/upgrade_svn13166_mercenary_owner.sql @@ -1,21 +1,21 @@ --- Removes mer_id from Char DB
-
-ALTER TABLE `char` DROP COLUMN `mer_id`;
-
--- Clean mercenary DB
-
-TRUNCATE TABLE `mercenary`;
-
--- Table structure for table `mercenary_owner`
-
-CREATE TABLE IF NOT EXISTS `mercenary_owner` (
- `char_id` int(11) NOT NULL,
- `merc_id` int(11) NOT NULL default '0',
- `arch_calls` int(11) NOT NULL default '0',
- `arch_faith` int(11) NOT NULL default '0',
- `spear_calls` int(11) NOT NULL default '0',
- `spear_faith` int(11) NOT NULL default '0',
- `sword_calls` int(11) NOT NULL default '0',
- `sword_faith` int(11) NOT NULL default '0',
- PRIMARY KEY (`char_id`)
-) ENGINE=MyISAM;
+-- Removes mer_id from Char DB + +ALTER TABLE `char` DROP COLUMN `mer_id`; + +-- Clean mercenary DB + +TRUNCATE TABLE `mercenary`; + +-- Table structure for table `mercenary_owner` + +CREATE TABLE IF NOT EXISTS `mercenary_owner` ( + `char_id` int(11) NOT NULL, + `merc_id` int(11) NOT NULL default '0', + `arch_calls` int(11) NOT NULL default '0', + `arch_faith` int(11) NOT NULL default '0', + `spear_calls` int(11) NOT NULL default '0', + `spear_faith` int(11) NOT NULL default '0', + `sword_calls` int(11) NOT NULL default '0', + `sword_faith` int(11) NOT NULL default '0', + PRIMARY KEY (`char_id`) +) ENGINE=MyISAM; diff --git a/sql-files/upgrade_svn13370_inventory.sql b/sql-files/upgrade_svn13370_inventory.sql index dc4d5ff8a..6a118ca4d 100644 --- a/sql-files/upgrade_svn13370_inventory.sql +++ b/sql-files/upgrade_svn13370_inventory.sql @@ -1,6 +1,6 @@ --- Creates expire_time column on Inventory
-
-ALTER TABLE `inventory` ADD COLUMN `expire_time` INT(11) UNSIGNED NOT NULL DEFAULT '0';
-ALTER TABLE `cart_inventory` ADD COLUMN `expire_time` INT(11) UNSIGNED NOT NULL DEFAULT '0';
-ALTER TABLE `storage` ADD COLUMN `expire_time` INT(11) UNSIGNED NOT NULL DEFAULT '0';
-ALTER TABLE `guild_storage` ADD COLUMN `expire_time` INT(11) UNSIGNED NOT NULL DEFAULT '0';
+-- Creates expire_time column on Inventory + +ALTER TABLE `inventory` ADD COLUMN `expire_time` INT(11) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `cart_inventory` ADD COLUMN `expire_time` INT(11) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `storage` ADD COLUMN `expire_time` INT(11) UNSIGNED NOT NULL DEFAULT '0'; +ALTER TABLE `guild_storage` ADD COLUMN `expire_time` INT(11) UNSIGNED NOT NULL DEFAULT '0'; diff --git a/sql-files/upgrade_svn13881.sql b/sql-files/upgrade_svn13881.sql index a3ccad4b8..aae8962d2 100644 --- a/sql-files/upgrade_svn13881.sql +++ b/sql-files/upgrade_svn13881.sql @@ -1 +1 @@ -DELETE FROM `global_reg_value` WHERE `str`='COOKING_ATTEMPT';
+DELETE FROM `global_reg_value` WHERE `str`='COOKING_ATTEMPT'; diff --git a/sql-files/upgrade_svn13960_questlog.sql b/sql-files/upgrade_svn13960_questlog.sql index c7a42960f..f176c5a6e 100644 --- a/sql-files/upgrade_svn13960_questlog.sql +++ b/sql-files/upgrade_svn13960_questlog.sql @@ -1,20 +1,20 @@ ---
--- Table structure for table `questlog`
---
-
-CREATE TABLE IF NOT EXISTS `questlog` (
- `char_id` int(11) unsigned NOT NULL default '0',
- `quest_id` int(10) unsigned NOT NULL,
- `state` enum('2','1','0') NOT NULL default '0',
- `time` int(11) unsigned NOT NULL default '0',
- `mob1` mediumint(9) unsigned NOT NULL default '0',
- `count1` mediumint(8) unsigned NOT NULL default '0',
- `mob2` mediumint(9) unsigned NOT NULL default '0',
- `count2` mediumint(8) unsigned NOT NULL default '0',
- `mob3` mediumint(9) unsigned NOT NULL default '0',
- `count3` mediumint(8) unsigned NOT NULL default '0',
- PRIMARY KEY USING BTREE (`char_id`,`quest_id`)
-) ENGINE=MyISAM;
-
-DROP TABLE `quest_objective`;
+-- +-- Table structure for table `questlog` +-- + +CREATE TABLE IF NOT EXISTS `questlog` ( + `char_id` int(11) unsigned NOT NULL default '0', + `quest_id` int(10) unsigned NOT NULL, + `state` enum('2','1','0') NOT NULL default '0', + `time` int(11) unsigned NOT NULL default '0', + `mob1` mediumint(9) unsigned NOT NULL default '0', + `count1` mediumint(8) unsigned NOT NULL default '0', + `mob2` mediumint(9) unsigned NOT NULL default '0', + `count2` mediumint(8) unsigned NOT NULL default '0', + `mob3` mediumint(9) unsigned NOT NULL default '0', + `count3` mediumint(8) unsigned NOT NULL default '0', + PRIMARY KEY USING BTREE (`char_id`,`quest_id`) +) ENGINE=MyISAM; + +DROP TABLE `quest_objective`; DROP TABLE `quest`;
\ No newline at end of file diff --git a/tools/backup b/tools/backup.pl index 2b5a95814..939c7eee7 100644..100755 --- a/tools/backup +++ b/tools/backup.pl @@ -1,100 +1,100 @@ -#!/usr/bin/perl
-
-##########################################################################
-# Athena用データバックアップツール
-#
-# Athenaの各種データファイル*.txtをバックアップするツール
-#
-#-------------------------------------------------------------------------
-# 設定方法
-# 実行する時のカレントフォルダからのデータへのパス、ファイルのリストを
-# 正しく設定します。バックアップ先のフォルダは自動作成されないので、
-# 自分で作成しておく必要があります。
-# フォルダの最後の「/」は省略できません。
-#
-# フォルダは引数でも指定できます。例>./backup ../save/ ./backup_data/
-# フォルダの最後の「/」は省略できません。
-#
-# 実行するとバックアップ先のフォルダへ、ファイル名に現在の日付と時刻を
-# つけてファイルをコピーします。
-#
-# * toolフォルダ内にbackup_dataフォルダを作成し、
-# athena.shの中に「./tool/backup ./save/ ./tool/backup_data/」
-# という行を追加すると、athenaを起動するたびにバックアップが取れます
-#
-# 復元するときは引数に「-r 日付と時刻」を指定します。
-# またその後ろにフォルダを指定することも出来ます
-# 例1> ./backup -r 200309191607
-# 例2> ./backup -r 200309191607 ../save ./backup_data/
-# この例では2003/09/19の16:07分にバックアップしたデータを復元しています
-#
-# 復元するとき、Athenaディレクトリにあるデータは *.bak に名前を変更して
-# 残しているので、いらない場合は rm *.bak などで消してください。
-#
-##########################################################################
-
-$sdir="../save/"; #バックアップ元(Athenaのディレクトリ/save/)
-$tdir="./backup_data/"; #バックアップ先
-
-@files=( #ファイルのリスト
- "account","athena","storage","party","guild","castle","pet"
-);
-
-
-#-------------------------------設定ここまで-----------------------------
-
-
-
-
-
-
-
-
-
-
-
-if($ARGV[0]=~/^\-r$/i || $ARGV[0]=~/\-\-(recover|restore)/i){
- #復元処理
-
- $file=$ARGV[1];
- $sdir=$ARGV[2]||$sdir;
- $tdir=$ARGV[3]||$tdir;
- &restorecopy($_) foreach @files;
- exit(0);
-}
-
-#バックアップ処理
-$sdir=$ARGV[0]||$sdir;
-$tdir=$ARGV[1]||$tdir;
-
-unless( -d $tdir ){
- print "$0: \"$tdir\" : No such directory\n";
- exit(1);
-}
-
-(undef,$min,$hour,$day,$month,$year)=localtime;
-
-$file=sprintf("%04d%02d%02d%02d%02d",
- $year+1900, $month+1, $day, $hour, $min );
-
-&backupcopy($_) foreach @files;
-exit(0);
-
-sub backupcopy {
- my($name)= @_;
- system("cp $sdir$name.txt $tdir$name$file.txt");
-}
-
-sub restorecopy {
- my($name)= @_;
- unless( -f "$sdir$name.txt" ){
- printf("$0: \"$sdir$name.txt\" not found!\n");
- return 0;
- }
- unless( -f "$tdir$name$file.txt" ){
- printf("$0: \"$tdir$name$file.txt\" not found!\n");
- return 0;
- }
- rename "$sdir$name.txt","$sdir$name.bak";
- system("cp $tdir$name$file.txt $sdir$name.txt");
-}
+#!/usr/bin/perl + +########################################################################## +# Athena用データバックアップツール +# +# Athenaの各種データファイル*.txtをバックアップするツール +# +#------------------------------------------------------------------------- +# 設定方法 +# 実行する時のカレントフォルダからのデータへのパス、ファイルのリストを +# 正しく設定します。バックアップ先のフォルダは自動作成されないので、 +# 自分で作成しておく必要があります。 +# フォルダの最後の「/」は省略できません。 +# +# フォルダは引数でも指定できます。例>./backup ../save/ ./backup_data/ +# フォルダの最後の「/」は省略できません。 +# +# 実行するとバックアップ先のフォルダへ、ファイル名に現在の日付と時刻を +# つけてファイルをコピーします。 +# +# * toolフォルダ内にbackup_dataフォルダを作成し、 +# athena.shの中に「./tool/backup ./save/ ./tool/backup_data/」 +# という行を追加すると、athenaを起動するたびにバックアップが取れます +# +# 復元するときは引数に「-r 日付と時刻」を指定します。 +# またその後ろにフォルダを指定することも出来ます +# 例1> ./backup -r 200309191607 +# 例2> ./backup -r 200309191607 ../save ./backup_data/ +# この例では2003/09/19の16:07分にバックアップしたデータを復元しています +# +# 復元するとき、Athenaディレクトリにあるデータは *.bak に名前を変更して +# 残しているので、いらない場合は rm *.bak などで消してください。 +# +########################################################################## + +$sdir="../save/"; #バックアップ元(Athenaのディレクトリ/save/) +$tdir="./backup_data/"; #バックアップ先 + +@files=( #ファイルのリスト + "account","athena","storage","party","guild","castle","pet" +); + + +#-------------------------------設定ここまで----------------------------- + + + + + + + + + + + +if($ARGV[0]=~/^\-r$/i || $ARGV[0]=~/\-\-(recover|restore)/i){ + #復元処理 + + $file=$ARGV[1]; + $sdir=$ARGV[2]||$sdir; + $tdir=$ARGV[3]||$tdir; + &restorecopy($_) foreach @files; + exit(0); +} + +#バックアップ処理 +$sdir=$ARGV[0]||$sdir; +$tdir=$ARGV[1]||$tdir; + +unless( -d $tdir ){ + print "$0: \"$tdir\" : No such directory\n"; + exit(1); +} + +(undef,$min,$hour,$day,$month,$year)=localtime; + +$file=sprintf("%04d%02d%02d%02d%02d", + $year+1900, $month+1, $day, $hour, $min ); + +&backupcopy($_) foreach @files; +exit(0); + +sub backupcopy { + my($name)= @_; + system("cp $sdir$name.txt $tdir$name$file.txt"); +} + +sub restorecopy { + my($name)= @_; + unless( -f "$sdir$name.txt" ){ + printf("$0: \"$sdir$name.txt\" not found!\n"); + return 0; + } + unless( -f "$tdir$name$file.txt" ){ + printf("$0: \"$tdir$name$file.txt\" not found!\n"); + return 0; + } + rename "$sdir$name.txt","$sdir$name.bak"; + system("cp $tdir$name$file.txt $sdir$name.txt"); +} diff --git a/tools/checkversion b/tools/checkversion.pl index 135165236..e13b7370c 100644..100755 --- a/tools/checkversion +++ b/tools/checkversion.pl @@ -1,85 +1,85 @@ -#!/usr/bin/perl -w
-
-##########################################################################
-# INFORMATION TOOL ABOUT THE SERVERS VERSION OF ATHENA
-#
-# By connection on a server, this software display the version of the
-# designed server.
-#-------------------------------------------------------------------------
-# Usages:
-# ./checkversion IP:port
-# ./checkversion IP port
-# perl checkversion IP:port
-# perl checkversion IP port
-#
-# note: default port: 6900
-#
-# When successfull, the software return the value 0.
-#
-##########################################################################
-
-#------------------------- start of configuration ------------------------
-
-$connecttimeout = 10; # Connection Timeout (in seconds)
-
-#-------------------------- End of configuration -------------------------
-
-use IO::Socket;
-
-unless($ARGV[0]) {
- print "USAGE: $0 server_ip:port\n";
- exit(1);
-}
-
-$server = $ARGV[0];
-$port = $ARGV[1];
-$port = $1 if ($server =~ s/:(\d+)//);
-$port ||= 6900;
-
-# Connection to the server
-my($so,$er) = ();
-eval{
- $so = IO::Socket::INET->new(
- PeerAddr=> $server,
- PeerPort=> $port,
- Proto => "tcp",
- Timeout => $connecttimeout) or $er = 1;
-};
-
-if($er || $@) {
- print "Can't not connect to server [$server:$port] !\n";
- exit(2);
-}
-
-# Request for the server version
-print $so pack("v",30000); # 0x7530
-$so->flush();
-
-# Receiving of the answer of the server
-if (read($so,$buf,10) < 10) {
- print "Invalid answer. It isn't an athena server or it is a too old version.\n";
- exit(5);
-}
-
-# Sending end of connection to the server
-print $so pack("v",30002); # 0x7532
-$so->flush();
-
-# Analyse of the answer
-my($ret,$maver,$miver,$rev,$dev,$mod,$type,$mdver) = unpack("v c6 v",$buf);
-
-if ($ret != 30001) { # 0x7531
- print "Invalid answer. It isn't an athena server or it is a too old version.\n";
- exit(6);
-}
-
-my(@stype) = ();
-foreach $i(0..3) {
- push @stype,(("login","char","inter","map")[$i]) if( $type & (1<<$i) );
-}
-print " ".join("/",@stype)." server [$server:$port].\n";
-printf " Athena version %s-%d.%d", ("stable","dev")[$dev], $maver,$miver;
-printf " revision %d",$rev if $rev;
-printf "%s%d\n",("","-mod")[$mod],$mdver;
-
-exit(0);
+#!/usr/bin/perl -w + +########################################################################## +# INFORMATION TOOL ABOUT THE SERVERS VERSION OF ATHENA +# +# By connection on a server, this software display the version of the +# designed server. +#------------------------------------------------------------------------- +# Usages: +# ./checkversion.pl IP:port +# ./checkversion.pl IP port +# perl checkversion.pl IP:port +# perl checkversion.pl IP port +# +# note: default port: 6900 +# +# When successfull, the software return the value 0. +# +########################################################################## + +#------------------------- start of configuration ------------------------ + +$connecttimeout = 10; # Connection Timeout (in seconds) + +#-------------------------- End of configuration ------------------------- + +use IO::Socket; + +unless($ARGV[0]) { + print "USAGE: $0 server_ip:port\n"; + exit(1); +} + +$server = $ARGV[0]; +$port = $ARGV[1]; +$port = $1 if ($server =~ s/:(\d+)//); +$port ||= 6900; + +# Connection to the server +my($so,$er) = (); +eval{ + $so = IO::Socket::INET->new( + PeerAddr=> $server, + PeerPort=> $port, + Proto => "tcp", + Timeout => $connecttimeout) or $er = 1; +}; + +if($er || $@) { + print "Can't not connect to server [$server:$port] !\n"; + exit(2); +} + +# Request for the server version +print $so pack("v",30000); # 0x7530 +$so->flush(); + +# Receiving of the answer of the server +if (read($so,$buf,10) < 10) { + print "Invalid answer. It isn't an athena server or it is a too old version.\n"; + exit(5); +} + +# Sending end of connection to the server +print $so pack("v",30002); # 0x7532 +$so->flush(); + +# Analyse of the answer +my($ret,$maver,$miver,$rev,$dev,$mod,$type,$mdver) = unpack("v c6 v",$buf); + +if ($ret != 30001) { # 0x7531 + print "Invalid answer. It isn't an athena server or it is a too old version.\n"; + exit(6); +} + +my(@stype) = (); +foreach $i(0..3) { + push @stype,(("login","char","inter","map")[$i]) if( $type & (1<<$i) ); +} +print " ".join("/",@stype)." server [$server:$port].\n"; +printf " Athena version %s-%d.%d", ("stable","dev")[$dev], $maver,$miver; +printf " revision %d",$rev if $rev; +printf "%s%d\n",("","-mod")[$mod],$mdver; + +exit(0); diff --git a/tools/getlogincount b/tools/getlogincount.pl index 6a209924f..de075ed22 100644..100755 --- a/tools/getlogincount +++ b/tools/getlogincount.pl @@ -1,122 +1,122 @@ -#!/usr/bin/perl -w
-
-##########################################################################
-# INFORMATION TOOL ABOUT THE # OF ONLINE PLAYERS ON ATHENA SERVERS
-#
-# By connection on the athena login-server, this software displays the
-# number of online players.
-#
-#-------------------------------------------------------------------------
-# Software usage:
-# Configure the IP, the port and a valid account of the server.
-# After, use at your choice:
-# ./getlogincount - display the number of online players on all servers.
-# ./getlogincount --premier or
-# ./getlogincount --first -- display the number of online players of the
-# first server in the received list.
-# ./getlogincount [servername] -- display the number of online players
-# of the specified server.
-#
-# If successfull, the software return the value 0.
-#
-##########################################################################
-
-#------------------------------ CONFIGURATION ----------------------------
-
-$loginserverip = "127.0.0.1"; # IP of the login-server
-$loginserverport = 6900; # port of the login-server
-$loginaccount = "s1"; # a valid account name
-$loginpasswd = "p1"; # the password of the valid account name
-
-$connecttimeout = 10; # Connection timeout (in seconds)
-
-#-------------------------------------------------------------------------
-
-use IO::Socket;
-
-my($sname) = $ARGV[0];
-if (!defined($sname)) {
- $sname = "";
-}
-
-# Connection to the login-server
-my($so,$er) = ();
-eval{
- $so = IO::Socket::INET->new(
- PeerAddr=> $loginserverip,
- PeerPort=> $loginserverport,
- Proto => "tcp",
- Timeout => $connecttimeout) or $er=1;
-};
-if($er || $@){
- print "Can't not connect to the login-server [${loginserverip}:$loginserverport] !\n";
- exit(2);
-}
-
-# Request to connect on login-server
-print $so pack("v V a24 a24 C",0x0064,9,$loginaccount,$loginpasswd,3);
-$so->flush();
-
-# Fail to connect
-if(unpack("v", &soread(\$so,2)) != 0x0069) {
- print "Login error.\n";
- exit(3);
-}
-
-# Get length of the received packet
-my($plen) = unpack("v",&soread(\$so,2))-4;
-
-# Suppress information of the account (we need only information about the servers)
-&soread(\$so,43);
-$plen -= 43;
-
-# Check about the number of online servers
-if ($plen < 32) {
- printf "No server is connected to login-server.\n";
- exit(1);
-}
-
-# Read information of the servers
-my(@slist) = ();
-for(;$plen > 0;$plen -= 32) {
- my($name,$count) = unpack("x6 a20 V",&soread(\$so,32));
- $name = substr($name,0,index($name,"\0"));
- push @slist, [ $name, $count ];
-}
-
-# Display the result
-if($sname eq "--first" || $sname eq "--premier") { # If we ask only for the first server
- printf "%-20s : %5d\n",$slist[0][0],$slist[0][1];
-} elsif ($sname eq "") { # If we ask for all servers
- foreach $i(@slist) {
- printf "%-20s : %5d\n",$i->[0],$i->[1];
- }
-} else { # If we ask for a specified server (by its name)
- my($flag) = 1;
- foreach $i(@slist) {
- if($i->[0] eq $sname) {
- printf "%-20s : %5d\n",$i->[0],$i->[1];
- $flag = 0;
- }
- }
- if($flag) { # If the server doesn't exist
- printf "The server [$sname] doesn't exist.\n";
- exit(1);
- }
-}
-
-# End of the software
-$so->shutdown(2);
-$so->close();
-exit(0);
-
-# Sub-function: get data from the socket
-sub soread {
- my($so,$len) = @_;
- my($sobuf);
- if(read($$so,$sobuf,$len) < $len) {
- print "Socket read error.\n";
- exit(5);
- }
- return $sobuf;
-};
+#!/usr/bin/perl -w + +########################################################################## +# INFORMATION TOOL ABOUT THE # OF ONLINE PLAYERS ON ATHENA SERVERS +# +# By connection on the athena login-server, this software displays the +# number of online players. +# +#------------------------------------------------------------------------- +# Software usage: +# Configure the IP, the port and a valid account of the server. +# After, use at your choice: +# ./getlogincount.pl - display the number of online players on all servers. +# ./getlogincount.pl --premier or +# ./getlogincount.pl --first -- display the number of online players of the +# first server in the received list. +# ./getlogincount.pl [servername] -- display the number of online players +# of the specified server. +# +# If successfull, the software return the value 0. +# +########################################################################## + +#------------------------------ CONFIGURATION ---------------------------- + +$loginserverip = "127.0.0.1"; # IP of the login-server +$loginserverport = 6900; # port of the login-server +$loginaccount = "s1"; # a valid account name +$loginpasswd = "p1"; # the password of the valid account name + +$connecttimeout = 10; # Connection timeout (in seconds) + +#------------------------------------------------------------------------- + +use IO::Socket; + +my($sname) = $ARGV[0]; +if (!defined($sname)) { + $sname = ""; +} + +# Connection to the login-server +my($so,$er) = (); +eval{ + $so = IO::Socket::INET->new( + PeerAddr=> $loginserverip, + PeerPort=> $loginserverport, + Proto => "tcp", + Timeout => $connecttimeout) or $er=1; +}; +if($er || $@){ + print "Can't not connect to the login-server [${loginserverip}:$loginserverport] !\n"; + exit(2); +} + +# Request to connect on login-server +print $so pack("v V a24 a24 C",0x0064,9,$loginaccount,$loginpasswd,3); +$so->flush(); + +# Fail to connect +if(unpack("v", &soread(\$so,2)) != 0x0069) { + print "Login error.\n"; + exit(3); +} + +# Get length of the received packet +my($plen) = unpack("v",&soread(\$so,2))-4; + +# Suppress information of the account (we need only information about the servers) +&soread(\$so,43); +$plen -= 43; + +# Check about the number of online servers +if ($plen < 32) { + printf "No server is connected to login-server.\n"; + exit(1); +} + +# Read information of the servers +my(@slist) = (); +for(;$plen > 0;$plen -= 32) { + my($name,$count) = unpack("x6 a20 V",&soread(\$so,32)); + $name = substr($name,0,index($name,"\0")); + push @slist, [ $name, $count ]; +} + +# Display the result +if($sname eq "--first" || $sname eq "--premier") { # If we ask only for the first server + printf "%-20s : %5d\n",$slist[0][0],$slist[0][1]; +} elsif ($sname eq "") { # If we ask for all servers + foreach $i(@slist) { + printf "%-20s : %5d\n",$i->[0],$i->[1]; + } +} else { # If we ask for a specified server (by its name) + my($flag) = 1; + foreach $i(@slist) { + if($i->[0] eq $sname) { + printf "%-20s : %5d\n",$i->[0],$i->[1]; + $flag = 0; + } + } + if($flag) { # If the server doesn't exist + printf "The server [$sname] doesn't exist.\n"; + exit(1); + } +} + +# End of the software +$so->shutdown(2); +$so->close(); +exit(0); + +# Sub-function: get data from the socket +sub soread { + my($so,$len) = @_; + my($sobuf); + if(read($$so,$sobuf,$len) < $len) { + print "Socket read error.\n"; + exit(5); + } + return $sobuf; +}; diff --git a/tools/mapcheck.sh b/tools/mapcheck.sh index 54cdd0765..337884c43 100644..100755 --- a/tools/mapcheck.sh +++ b/tools/mapcheck.sh @@ -1,34 +1,34 @@ -#!/bin/sh
-echo "============================================"
-echo "= map server status checker... ="
-echo "============================================"
-./map-server.exe &
-sleep 40
-
-while [ 0 ]
-do
- pcpu=` top -n 1| grep map-server | awk '{print $9}' | awk 'BEGIN{FS="."} {print $1}' `
- if [ "$pcpu" -gt 80 ];then
- echo "============================================"
- echo "map server is more than 80% (now $pcpu%)"
- echo "============================================"
- ppid=` ps -a | grep map-server | awk '{print $1}' `
- kill $ppid
- ./map-server.exe &
- sleep 40
- else
- pmapct=` ps -a| grep map-server | wc -l `
- if [ "$pmapct" -eq 0 ];then
- echo "============================================"
- echo "map server is not running..."
- echo "restart map server..."
- echo "============================================"
- ./map-server.exe &
- sleep 40
- #echo "test"
- else
- echo "map server is ok (now $pcpu%)..."
- sleep 5
- fi
- fi
+#!/bin/sh +echo "============================================" +echo "= map server status checker... =" +echo "============================================" +./map-server.exe & +sleep 40 + +while [ 0 ] +do + pcpu=` top -n 1| grep map-server | awk '{print $9}' | awk 'BEGIN{FS="."} {print $1}' ` + if [ "$pcpu" -gt 80 ];then + echo "============================================" + echo "map server is more than 80% (now $pcpu%)" + echo "============================================" + ppid=` ps -a | grep map-server | awk '{print $1}' ` + kill $ppid + ./map-server.exe & + sleep 40 + else + pmapct=` ps -a| grep map-server | wc -l ` + if [ "$pmapct" -eq 0 ];then + echo "============================================" + echo "map server is not running..." + echo "restart map server..." + echo "============================================" + ./map-server.exe & + sleep 40 + #echo "test" + else + echo "map server is ok (now $pcpu%)..." + sleep 5 + fi + fi done
\ No newline at end of file diff --git a/tools/mapchecker.sh b/tools/mapchecker.sh index 5f26c9d4b..7250c342e 100644..100755 --- a/tools/mapchecker.sh +++ b/tools/mapchecker.sh @@ -1,56 +1,56 @@ -#!/bin/bash
-
-athena_dir="/home/athena/658/"
-
-while [ true ] ; do
-
-if [ ` ps fauxw | grep map-server | grep -v grep | wc -l ` -eq 0 ];then
- #echo `date` " -- map-server crashed - restarting"
- echo `date` " -- map-server crashed - restarting" >> /var/log/athena_status.log
- killall -9 map-server
- cd $athena_dir
- nohup ./map-server ./conf/map_athena.conf ./inter_athena.conf &
- sleep 240
- #sleep 40 #for fast pc's remove the "#" at the beginning of the line and delete the line above
-fi
-
-
-if [ ` ps fauxw | grep map-server | grep -v grep | awk '{print $3}' | awk 'BEGIN{FS="."} {print $1}' ` -gt 10 ];then
- #echo `date` " -- mapserver cpuload over 10 - restarting"
- echo `date` " -- mapserver cpuload over 10 - restarting" >> /var/log/athena_status.log
- killall -9 map-server
- cd $athena_dir
- nohup ./map-server ./conf/map_athena.conf ./inter_athena.conf &
- sleep 240
- #sleep 40 #for fast pc's remove the "#" at the beginning of the line and delete the line above
- #echo `date` " -- restarted"
- echo `date` " -- restarted" >> /var/log/athena_status.log
-fi
-
-if [ ` ps fauxw | grep char-server | grep -v grep | wc -l ` -eq 0 ];then
- #echo `date` " -- char server crashed - restarting"
- echo `date` " -- char server crashed - restarting" >> /var/log/athena_status.log
- killall -9 char-server
- cd $athena_dir
- nohup ./char-server ./conf/char_athena.conf ./conf/inter_athena.conf &
- #echo `date` " -- restarted"
- echo `date` " -- restarted" >> /var/log/athena_status.log
-
-fi
-
-if [ ` ps fauxw | grep login-server | grep -v grep | wc -l ` -eq 0 ];then
- #echo `date` " -- login server crashed - restarting"
- echo `date` " -- login server crashed - restarting" >> /var/log/athena_status.log
- killall -9 login-server
- cd $athena_dir
- nohup ./login-server ./conf/login_athena.conf &
- #echo `date` " -- restarted"
- echo `date` " -- restarted" >> /var/log/athena_status.log
-
-fi
-
-
-#echo `date` " -- everything is fine"
-echo `date` " -- everything is fine" >> /var/log/athena_status.log
-sleep 30
-done
+#!/bin/bash + +athena_dir="/home/athena/658/" + +while [ true ] ; do + +if [ ` ps fauxw | grep map-server | grep -v grep | wc -l ` -eq 0 ];then + #echo `date` " -- map-server crashed - restarting" + echo `date` " -- map-server crashed - restarting" >> /var/log/athena_status.log + killall -9 map-server + cd $athena_dir + nohup ./map-server ./conf/map_athena.conf ./inter_athena.conf & + sleep 240 + #sleep 40 #for fast pc's remove the "#" at the beginning of the line and delete the line above +fi + + +if [ ` ps fauxw | grep map-server | grep -v grep | awk '{print $3}' | awk 'BEGIN{FS="."} {print $1}' ` -gt 10 ];then + #echo `date` " -- mapserver cpuload over 10 - restarting" + echo `date` " -- mapserver cpuload over 10 - restarting" >> /var/log/athena_status.log + killall -9 map-server + cd $athena_dir + nohup ./map-server ./conf/map_athena.conf ./inter_athena.conf & + sleep 240 + #sleep 40 #for fast pc's remove the "#" at the beginning of the line and delete the line above + #echo `date` " -- restarted" + echo `date` " -- restarted" >> /var/log/athena_status.log +fi + +if [ ` ps fauxw | grep char-server | grep -v grep | wc -l ` -eq 0 ];then + #echo `date` " -- char server crashed - restarting" + echo `date` " -- char server crashed - restarting" >> /var/log/athena_status.log + killall -9 char-server + cd $athena_dir + nohup ./char-server ./conf/char_athena.conf ./conf/inter_athena.conf & + #echo `date` " -- restarted" + echo `date` " -- restarted" >> /var/log/athena_status.log + +fi + +if [ ` ps fauxw | grep login-server | grep -v grep | wc -l ` -eq 0 ];then + #echo `date` " -- login server crashed - restarting" + echo `date` " -- login server crashed - restarting" >> /var/log/athena_status.log + killall -9 login-server + cd $athena_dir + nohup ./login-server ./conf/login_athena.conf & + #echo `date` " -- restarted" + echo `date` " -- restarted" >> /var/log/athena_status.log + +fi + + +#echo `date` " -- everything is fine" +echo `date` " -- everything is fine" >> /var/log/athena_status.log +sleep 30 +done |