Compare commits

..

91 Commits

Author SHA1 Message Date
vstumpf
fd1e582156 It kinda works! 2024-07-05 09:07:17 +00:00
vstumpf
920b6a78c5 Merge branch 'refactor/cmake' into refactor/skills 2024-07-05 08:26:47 +00:00
vstumpf
34bdb49db9 Merge remote-tracking branch 'origin/refactor/cmake' into refactor/cmake 2024-07-05 01:02:10 +00:00
vstumpf
f54a204a7d Merge branch 'master' into refactor/cmake 2024-07-05 01:01:11 +00:00
Carlosgrr
529d8fea3d Reverting Magic Wand Quest to request Trunks (#8473)
Fixes #8465
2024-07-04 20:33:14 +02:00
Lemongrass3110
d2cb6c10e1 Fixed packets 0x440 and 0x8cf (#8486)
Follow up to d445497

Fixes #8478

Thanks to @gmragnarok, @LadyNanuia and @Haydrich
2024-07-04 19:29:00 +02:00
Atemo
fccf328a54 Implemented new items up to July 3, 2024 (#8488)
* Sorted the item IDs
* Added prt_mk map in mapcache
2024-07-04 15:27:17 +02:00
Lemongrass3110
25b9126644 Refactored get/set unitdata (#8483)
Fixes #8481

Thanks to @Hyroshima
2024-07-03 17:05:15 +02:00
Lemongrass3110
2206d1a960 Fixed NoNearNPC flag (#8487)
Fixes #8471

Thanks to @xVaan
2024-07-03 16:02:22 +02:00
Atemo
1d8dec4b72 Uncommented quest ID related to illusion investigation (teddy bear) (#8477) 2024-06-30 19:05:43 +02:00
Atemo
995a5d0f60 Corrected barter shop of illusion dungeon (#8472)
Follow-up 5ca7aee79b
Fancy_Flower can't be refined.
2024-06-29 17:08:08 +02:00
Pokye
5ca7aee79b Correction of illusion dungeon's barter shop (#8470) 2024-06-29 15:16:12 +02:00
Vincent Stumpf
73b878db37 Add expanded 4ths to jobmaster (#8267) 2024-06-28 21:39:00 +02:00
Atemo
14a22de993 Added missing clear cutin (#8467)
Corrected encoding of some files
2024-06-28 20:20:49 +02:00
Atemo
0057d862af Initial release of Illusion of Teddy bear (Walkthrough conversion) (#8459)
* Increased MAX_BARTER_REQUIREMENTS to 6
* Fixed #6460
2024-06-28 17:36:29 +02:00
akaineko
82d3b078c3 Fixed rand issue in KO job quest (#8463) 2024-06-28 15:01:15 +02:00
Atemo
88e3eba8cf Updated instance_check_party script command (#8457)
* The command now returns 0 if the party id does not exist
* Fixed #8426

Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
Co-authored-by: Aleos <aleos89@users.noreply.github.com>
2024-06-27 18:23:03 +02:00
Lemongrass3110
c8935ef18a Official conversion of lasagna warps (#8464) 2024-06-27 09:16:33 +02:00
Pokye
fa5e642d4d Initial implementation of Shopping Boards (#8453)
Co-authored-by: Aleos <aleos89@users.noreply.github.com>
Co-authored-by: Daegaladh <daegaladh@shadowgames.es>
2024-06-26 20:50:14 +02:00
Daegaladh
549fc3f860 Fixed searchstores and added a map parameter (#8456)
Co-authored-by: Aleos <aleos89@users.noreply.github.com>
Co-authored-by: Atemo <Atemo@users.noreply.github.com>
Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
2024-06-26 20:21:26 +02:00
Playtester
30f8cb1f6e Star Gladiator Miracle Chance (#8460)
- Reduced default chance of Miracle to occur from 0.02% to 0.005%
- Chance of Miracle to occur is now further reduced if AGI is above 46
- Fixes #8445
2024-06-26 11:38:46 +02:00
Atemo
21359386be Exported constants for setdialogalign script command (#8458)
Follow-up eb308dcad2
2024-06-25 17:27:33 +02:00
Playtester
861833bcfa Frost Joke / Scream on Party Members (#8455)
- Base chance of Frost Joke / Scream to cause status changes to party members is now one fourth of the original chance
- Variable duration of Frost Joke when applied to party members is now always 15s
- Fixes #8454
2024-06-22 22:22:44 +02:00
Daegaladh
a0bec6a404 Configs for account names, character names, and passwords minimum length (#8448) 2024-06-21 20:36:21 +02:00
Daegaladh
5123704795 Added player permission script commands (#8450) 2024-06-21 19:12:01 +02:00
Atemo
d344caa08d Implemented NPC_DEADLYCURSE2 and NPC_DEADLYCURSE (#8447)
* Implemented NPC_DEADLYCURSE2
* Splash skill inflicting no damage and activating the status "Deadly_Defeasance" on surrounding target
* Unknown if the duration scale with level. The duration at level 5 is 30s

* Implemented NPC_DEADLYCURSE
* There is not much information on this, assuming it is a single target skill
* Does not deal any damage
* No info on max level, monsters use it level 1
* Duration at level 1 is 15s

* Uncommented NPC_DEADLYCURSE2 in mob_skill_db
2024-06-21 14:48:26 +02:00
Lemongrass3110
1ca634df1d Packet cleanups - const and casts (#8422) 2024-06-20 14:33:47 +02:00
Playtester
5f16a06f2f Renewal Bowling Bash Knockback (#8449)
- Fixed Bowling Bash causing knockback effect twice in renewal (fixes #8435)
2024-06-20 07:59:21 +02:00
Playtester
566ac2078d Guillotine Fist SP Recovery Prevention Cleanup (#8443)
- Unified code for SC_EXTREMITYFIST
  * It stops natural SP recovery for 300s in pre-re
  * It stops natural SP recovery and recovery from items for 3s and shows icon in renewal
- Removed SC_EXTREMITYFIST2 as it's no longer needed
- Fixed an issue that caused a natural SP regen tick to happen right after using Guillotine Fist
- Fixes #8377
2024-06-19 07:53:30 +02:00
eppc0330
d191c2cf2a Item DB corrections / implemented ALL_RAY_OF_PROTECTION (#8394) 2024-06-18 15:08:54 +02:00
Atemo
4555e7c14c Updated max RES/MRES and max RES/MRES ignored (#8442)
* Removed the limit of RES/MRES and remove max_res_mres_reduction battle config
* Added a limit of RES/MRES ignored by items and skills in max_res_mres_ignored battle config
2024-06-18 15:04:37 +02:00
Lemongrass3110
ba5221ef97 Added 4th jobs to ea_job_system.txt (#8440)
Fixes #8431

Thanks to @Pokye
2024-06-17 20:15:54 +02:00
Atemo
ce5de23874 Updated get_bosstype and UMOB_MODE (#8439)
* Updated mob_data::get_bosstype() to use current mob data instead of db data to fix issue when the mode is changed via the setunitdata script command.
* Added unit_refresh in UMOB_MODE to refresh the mini icon near the monster indicating the monster type.
2024-06-17 19:38:00 +02:00
Lemongrass3110
44fbe3940d Fixed pin code changing (#8438)
Fixes #8430

Thanks to @gmragnarok
2024-06-17 19:04:21 +02:00
Lemongrass3110
68f8a4bc7f Fixed a crash with unknown packets (#8437)
Fixes #8432

Thanks to @gmragnarok
2024-06-17 18:30:43 +02:00
Atemo
6451925430 Updated npcspeed, npcwalkto and npcstop script commands (#8354)
* Added the optional parameter <npc name> to npcspeed to change the walking speed of the npc with the said name.
  Usage : npcspeed( <speed value> {,"<npc name>"} );

* Added the optional parameter <npc name> to npcwalkto to move the npc with the said name at the given coordinates.
  Usage : npcwalkto( <x>,<y> {,"<npc name>"} } );

* Added the optional parameters `<npc name>` and `<flag>` to `npcstop` to stop the movement of the npc with the said name with options.
  Usage : `npcstop( {"<npc name>", {"<flag>"}});`

Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
Co-authored-by: Aleos <aleos89@users.noreply.github.com>
2024-06-16 14:57:59 +02:00
Playtester
fcf74b0dfc Renewal Simple Defense Formula Flag (#8429)
- Added a flag "SimpleDefense" to mark skills that use the simple defense formula
  * Simple defense: Damage is flat reduced by DEF+DEF2. Res is ignored.
- Dragon Breath / Water now also ignore Res
- Fixes #8419

Special thanks to everyone who helped testing all these skills to confirm this common rule.
2024-06-15 20:28:26 +02:00
Lemongrass3110
8c4d1bb0c6 Fixed returning to char-select
Fixes #8420

Thanks to @gmragnarok and @Beginerxx
2024-06-13 15:24:53 +02:00
Jittapan Pluemsumran
503f9e09f6 Always set all item data in npc_sellist_sub (#6429)
Fixes #6422

Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
2024-06-13 00:47:04 +02:00
Lemongrass3110
8f9b0b8354 Added configs for instance limitations (#3753)
Fixes #1661

Thanks to @admkakaroto
2024-06-12 23:36:33 +02:00
Playtester
84cdc9cae0 Cannon Ball Skills (P.ATK and Res) (#8415)
- When using Cart Cannon or Arm Cannon, the arrow attack you get from cannon balls is no longer affected by P.ATK
- Cart Cannon and Arm Cannon are no longer reduced by Res
- More consistent naming (PATK -> P.ATK, SMATK -> S.MATK)
- Added a general rule that cannon ball attack is not added to equip attack
- Fixes #8380
2024-06-12 18:59:05 +02:00
Lemongrass3110
34eb4be25b Preparatory cleanup of parties (#8418) 2024-06-12 15:39:24 +02:00
Lemongrass3110
9c9dcc8cab Preparatory cleanup of guilds (#8417) 2024-06-12 14:47:52 +02:00
Lemongrass3110
aaa9890470 Preparatory cleanup of clans (#8416) 2024-06-12 10:03:44 +02:00
Lemongrass3110
6fdaac4a75 Added pincode state tracking (#8412)
Fixes #6595

Thanks to @Danil0v3s
2024-06-11 21:50:16 +02:00
Daegaladh
0d3550e7ea Fixed clif_move to use the correct movement packets (#8405)
* Removed unused ZC_NOTIFY_MOVE (0x86) packet
---------

Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
2024-06-11 00:03:43 +02:00
Daegaladh
6ca99e7852 Fixed potentially dangerous map_addflooritem calls and related behaviors (#8360)
*Removed potentially dangerous map_additemfloor calls
*Added weight/inventory checks for marry atcommand
*Fixed overweight message for box items
*Fixed inventory space check for box items to match official requirement (the total number of the items the box will give you *r min 10, plus 1)
*Fixed inventory space message for box items
*Fixed pet egg creation not deleting the pet data when failed to add it to the inventory
*Fixed pet egg creation dropping the egg on the floor when failed to add it to the inventory
*Fixed pet equipment dropping on the floor when failed to retrieve the item
*Added a battle configuration to prevent removing the pet equipment (and disappear into nothingness) when failed to retrieve the item
*Added missing skill_drop_items_full checks on several skills (official behavior makes the items disappear)
---------

Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
2024-06-10 22:44:19 +02:00
Jittapan Pluemsumran
9267c2bf8a Added sanity checks to pincode decryption (#8404) 2024-06-10 22:03:49 +02:00
Vincent Stumpf
92722db3ab Fix dynamic npc timer mismatch (#8265)
* Fix dynamic npc timer mismatch

Fixes #8241
This adds some missing placement news that I'm surprised hasn't blown up yet.
2024-06-10 21:11:19 +02:00
Playtester
6daa032144 Renewal Spiral Pierce, Element vs. Status Attack (#8411)
- When using Spiral Pierce the base damage will now be multiplied with 0.7
- Weight bonus of Spiral Pierce is no longer affected by elemental adjustments
- Size modifiers updated: Small 130%, Medium 115%, Large 100%
- Spiral Pierce will now store its base damage in equipAtk to prevent rounding errors (temporary solution)
- Status Attack will now first apply the elemental table before doubling the right-hand damage
- Fixes #8410
2024-06-10 16:56:59 +02:00
Vincent Stumpf
b1a2d74b54 Merge pull request #4 from secretdataz/refactor/cmake
Added some Windows fixes, Added MAXXCON option to CMake
2024-05-09 00:10:14 -07:00
Jittapan Pluemsumran
d16dccf994 Added some Windows fixes, Added MAXXCON option to CMake 2024-05-04 19:47:01 +07:00
vstumpf
2e69ccedea Merge branch 'master' into refactor/cmake 2024-04-21 05:23:58 +00:00
Vincent Stumpf
b01e7da68d Merge branch 'master' into refactor/cmake 2024-02-17 01:50:56 +00:00
Vincent Stumpf
008d25cfb2 Merge remote-tracking branch 'upstream/master' into refactor/cmake 2023-12-24 00:26:14 +00:00
Vincent Stumpf
f4c9ed691c Merge remote-tracking branch 'upstream/master' into refactor/cmake 2023-12-12 07:43:50 +00:00
Vincent Stumpf
cc397167ab Enable configurable multi-threaded compilation 2023-12-12 07:43:19 +00:00
Vincent Stumpf
8f15bc2117 Merge remote-tracking branch 'upstream/master' into refactor/cmake 2023-11-26 05:45:27 +00:00
Vincent Stumpf
bf36dd4b1f Merge remote-tracking branch 'upstream/master' into refactor/cmake 2023-11-05 01:13:39 +00:00
Vincent Stumpf
fc242d0472 remove commented code 2023-08-06 06:24:33 +00:00
Vincent Stumpf
f41a80ca59 Remove redundant ubuntu-latest build 2023-07-20 03:34:32 +00:00
Vincent Stumpf
eadff3366d Fix cmake arg order 2023-07-12 03:27:56 +00:00
Vincent Stumpf
9636aa020d Remove deprecated builds 2023-07-12 03:23:48 +00:00
Vincent Stumpf
5c2718de03 Add concurrency and dependency on CMakeLists.txt 2023-07-12 03:22:52 +00:00
Vincent Stumpf
1b3357611b Merge remote-tracking branch 'upstream/master' into refactor/cmake 2023-07-03 07:44:30 +00:00
Vincent Stumpf
b3f6ad41ba Merge branch 'master' of github.com:rathena/rathena into refactor/cmake 2023-06-19 05:44:33 +00:00
Vincent Stumpf
c789cdbadd Merge remote-tracking branch 'upstream/master' into refactor/cmake 2023-06-18 22:28:19 +00:00
Vincent Stumpf
98ac59a940 change to oop 2023-06-17 02:00:01 +00:00
Vincent Stumpf
f73e6658ca Add deprecation notice in rAthena.sln 2023-06-15 03:01:39 +00:00
Vincent Stumpf
d98166383c Add .sh filetype to athena-start 2023-06-14 07:19:05 +00:00
Vincent Stumpf
b1520ea969 Add new line after tools 2023-06-14 07:10:48 +00:00
Vincent Stumpf
ee456d8af6 Add HAVE_STRNLEN and HAVE_SETRLIMIT 2023-06-14 07:08:14 +00:00
Vincent Stumpf
1545d483c0 Build tools in cmake workflow 2023-06-14 04:57:28 +00:00
Vincent Stumpf
b6ce15af00 Don't need to copy the configure files, they're being replaced by cmake 2023-06-13 07:34:08 +00:00
Vincent Stumpf
1f474a62cf enable PCRE for mapserver 2023-06-11 07:22:21 +00:00
Vincent Stumpf
9024cc7ef8 Change most github workflows to cmake 2023-06-11 06:41:37 +00:00
Vincent Stumpf
026c014eb2 Add ENABLE_VIP option to cmake 2023-06-11 06:39:36 +00:00
Vincent Stumpf
26dee6891b Fix windows cmake 2023-06-11 05:03:44 +00:00
Vincent Stumpf
258a8e6be0 Let's add windows to the cmake ci 2023-06-11 03:07:36 +00:00
Vincent Stumpf
48b0b082b6 Whoops, let's leave the configure script in, and the linux scripts too for now 2023-06-11 02:33:46 +00:00
Vincent Stumpf
6ae46a7bf8 Add custom 'server' target 2023-06-11 02:29:17 +00:00
Vincent Stumpf
855cf12007 Move scripts to tools 2023-06-11 02:29:17 +00:00
Vincent Stumpf
ae862453bd Move extra cmake files to tools/cmake 2023-06-11 02:29:17 +00:00
Vincent Stumpf
c11d73d6a8 Add epoll support 2023-06-11 02:29:17 +00:00
Vincent Stumpf
ff86c7b9d1 Maybe make scripts work? 2023-06-11 02:29:17 +00:00
Vincent Stumpf
e1b9b0d9b3 Add support for import files
This will check and copy import files whenever we regenerate the build system
2023-06-11 02:29:17 +00:00
Vincent Stumpf
b3c47f043e Remove cmakelistsold (oops) and clean up httplib 2023-06-11 02:29:17 +00:00
Vincent Stumpf
c69587c2e7 Refactor CMake to be nicer, more modern, easier to understand 2023-06-11 02:29:15 +00:00
Vincent Stumpf
95ee5d04e6 Double visitor? 2023-06-10 06:41:25 +00:00
Vincent Stumpf
28383ee332 Initial commit of skills 2023-06-04 05:45:11 +00:00
Vincent Stumpf
857f335729 Fix cmake stuff 2023-05-26 01:58:55 +00:00
156 changed files with 17528 additions and 11458 deletions

View File

@@ -18,6 +18,8 @@ on:
# This workflow should run when a file in a source directory has been modified.
- 'src/**'
- '3rdparty/**'
# This workflow should run whenever a CMake related file has been modified
- '**/CMakeLists.txt'
jobs:
analyze:
@@ -31,8 +33,6 @@ jobs:
# The ubuntu-latest label currently points to ubuntu-20.04.
# Available: ubuntu-22.04, ubuntu-20.04
os: [ubuntu-latest]
# Older versions of GCC are not available via unaltered aptitude repo lists.
gcc: ['10']
# We run build checks for both Renewal and PRE-Renewal
mode: ['PRE','RE']
@@ -64,10 +64,10 @@ jobs:
- name: Update & Install packages
# Ubuntu runners already have most of the packages rAthena requires to build.
# https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-Readme.md
# https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2204-Readme.md
run: |
sudo apt update
sudo apt install zlib1g-dev libpcre3-dev gcc-${{ matrix.gcc }} g++-${{ matrix.gcc }}
sudo apt install zlib1g-dev libpcre3-dev
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
@@ -77,16 +77,16 @@ jobs:
# ?? If the Autobuild fails above, remove it and uncomment the following
# three lines and modify them (or add more) to build your code if your
# project uses a compiled language
- name: Command - configure
env:
CONFIGURE_FLAGS: 'CC=gcc-${{ matrix.gcc }} CXX=g++-${{ matrix.gcc }} --enable-prere=${{ env.PRERE }} --enable-buildbot=yes'
run: ./configure $CONFIGURE_FLAGS
- name: Create build directory
run: cmake -E make_directory ${{github.workspace}}/build
- name: Command - make clean
run: make clean
- name: Configure CMake
working-directory: ${{github.workspace}}/build
run: cmake .. -DENABLE_PRERENEWAL=${{env.PRERE}} -DENABLE_EXTRA_BUILDBOT_CODE=ON
- name: Command - make server
run: make server
- name: Build
working-directory: ${{github.workspace}}/build
run: cmake --build . -j2 --target server
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3

View File

@@ -1,54 +0,0 @@
name: Build servers with Clang
# build_servers_clang.yml
concurrency:
group: ${{ github.repository }}-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/master' }}
on:
workflow_dispatch:
push:
branches:
- master
pull_request:
paths:
# Always trigger all Github Actions if an action or something CI related was changed
- '.github/workflows/**'
- 'tools/ci/**'
# This workflow should run when a file in a source directory has been modified.
- 'src/**'
- '3rdparty/**'
jobs:
build:
# Github Actions checks for '[ci skip]', '[skip ci]', '[no ci]', '[skip actions]', or '[actions skip]' but not a hyphenated version.
# It's a catch-all incase a Pull Request has been opened and someone is on auto-pilot.
if: "!contains(github.event.head_commit.message, 'ci-skip')"
runs-on: ${{ matrix.os }}
strategy:
matrix:
# The ubuntu-latest label currently points to ubuntu-22.04.
# Available: ubuntu-22.04, ubuntu-20.04
os: [ubuntu-20.04]
# Version list can be found on https://github.com/marketplace/actions/install-clang
clang: ['6.0', '7', '8', '9', '10', '11'] #, '12', '13']
steps:
- uses: actions/checkout@v4
- name: Set up Clang
uses: egor-tensin/setup-clang@v1
with:
version: ${{ matrix.clang }}
platform: x64
- name: Command - configure
env:
CONFIGURE_FLAGS: 'CC=clang-${{ matrix.clang }} CXX=clang++-${{ matrix.clang }} --enable-buildbot=yes'
run: ./configure $CONFIGURE_FLAGS
- name: Command - make clean
run: make clean
- name: Command - make all
run: make all

View File

@@ -1,61 +0,0 @@
name: Build servers with GCC
# build_servers_gcc.yml
concurrency:
group: ${{ github.repository }}-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/master' }}
on:
workflow_dispatch:
push:
branches:
- master
pull_request:
paths:
# Always trigger all Github Actions if an action or something CI related was changed
- '.github/workflows/**'
- 'tools/ci/**'
# This workflow should run when a file in a source directory has been modified.
- 'src/**'
- '3rdparty/**'
jobs:
build:
# Github Actions checks for '[ci skip]', '[skip ci]', '[no ci]', '[skip actions]', or '[actions skip]' but not a hyphenated version.
# It's a catch-all incase a Pull Request has been opened and someone is on auto-pilot.
if: "!contains(github.event.head_commit.message, 'ci-skip')"
runs-on: ${{ matrix.os }}
strategy:
matrix:
# The ubuntu-latest label currently points to ubuntu-22.04.
# Available: ubuntu-22.04, ubuntu-20.04
os: [ubuntu-latest]
# Older versions of GCC are not available via unaltered aptitude repo lists.
gcc: ['9', '10', '11', '12']
# GCC 13 was removed from 22.04, include it as a separate job
include:
- os: ubuntu-24.04
gcc: 13
steps:
- uses: actions/checkout@v4
- name: Update & Install packages
# Ubuntu runners already have most of the packages rAthena requires to build.
# https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-Readme.md
run: |
sudo apt update
sudo apt install zlib1g-dev libpcre3-dev gcc-${{ matrix.gcc }} g++-${{ matrix.gcc }}
- name: Command - configure
env:
CONFIGURE_FLAGS: 'CC=gcc-${{ matrix.gcc }} CXX=g++-${{ matrix.gcc }}'
# -Werror: to treat all warnings as errors
# -Wno-error=builtin-declaration-mismatch: otherwise ./configure checks fail
run: ./configure $CONFIGURE_FLAGS --enable-buildbot=yes CXXFLAGS='-Werror -Wno-error=builtin-declaration-mismatch'
- name: Command - make clean
run: make clean
- name: Command - make all
run: make all

View File

@@ -18,6 +18,8 @@ on:
# This workflow should run when a file in a source directory has been modified.
- 'src/**'
- '3rdparty/**'
# This workflow should run whenever a CMake related file has been modified
- '**/CMakeLists.txt'
jobs:
build:
@@ -30,8 +32,6 @@ jobs:
# The ubuntu-latest label currently points to ubuntu-22.04.
# Available: ubuntu-22.04, ubuntu-20.04
os: [ubuntu-latest]
# Older versions of GCC are not available via unaltered aptitude repo lists.
gcc: ['11']
# We run build checks for both Renewal and PRE-Renewal
mode: ['PRE','RE']
@@ -42,18 +42,18 @@ jobs:
- name: Variable Parsing - PRE
if: ${{ matrix.mode == 'PRE' }}
run: |
echo "PRERE=yes" >> $GITHUB_ENV
echo "PRERE=ON" >> $GITHUB_ENV
- name: Variable Parsing - RE
if: ${{ matrix.mode == 'RE' }}
run: |
echo "PRERE=no" >> $GITHUB_ENV
echo "PRERE=OFF" >> $GITHUB_ENV
- name: Update & Install packages
# Ubuntu runners already have most of the packages rAthena requires to build.
# https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-Readme.md
# https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2204-Readme.md
run: |
sudo apt update
sudo apt install zlib1g-dev libpcre3-dev gcc-${{ matrix.gcc }} g++-${{ matrix.gcc }}
sudo apt install zlib1g-dev libpcre3-dev
- name: Start MySQL
run: sudo systemctl start mysql.service
@@ -61,16 +61,16 @@ jobs:
- name: Setup Database and import table data
run: ./tools/ci/sql.sh
- name: Command - configure
env:
CONFIGURE_FLAGS: 'CC=gcc-${{ matrix.gcc }} CXX=g++-${{ matrix.gcc }} --enable-prere=${{ env.PRERE }} --enable-buildbot=yes'
run: ./configure $CONFIGURE_FLAGS
- name: Create build directory
run: cmake -E make_directory ${{github.workspace}}/build
- name: Command - make clean
run: make clean
- name: Configure CMake
working-directory: ${{github.workspace}}/build
run: cmake .. -DENABLE_PRERENEWAL=${{env.PRERE}} -DENABLE_EXTRA_BUILDBOT_CODE=ON
- name: Command - make server
run: make server
- name: Build
working-directory: ${{github.workspace}}/build
run: cmake --build . -j2 --target server
- name: Run Once - login-server
run: ./login-server --run-once

View File

@@ -1,48 +0,0 @@
name: Build servers with MSVS
# build_servers_msbuild.yml
concurrency:
group: ${{ github.repository }}-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/master' }}
on:
workflow_dispatch:
push:
branches:
- master
pull_request:
paths:
# Always trigger all Github Actions if an action or something CI related was changed
- '.github/workflows/**'
- 'tools/ci/**'
# This workflow should run when a file in a source directory has been modified.
- 'src/**'
- '3rdparty/**'
jobs:
build:
# Github Actions checks for '[ci skip]', '[skip ci]', '[no ci]', '[skip actions]', or '[actions skip]' but not a hyphenated version.
# It's a catch-all incase a Pull Request has been opened and someone is on auto-pilot.
if: "!contains(github.event.head_commit.message, 'ci-skip')"
runs-on: ${{ matrix.os }}
strategy:
matrix:
# The windows-latest label currently points to windows-2019.
# Available: windows-2016, windows-2019 and windows-2022
os: [windows-latest]
# We run build checks for both Renewal and PRE-Renewal
mode: ['PRE', 'RE']
steps:
- uses: actions/checkout@v4
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v2
- name: Build solution in Debug
if: ${{ matrix.mode == 'PRE' }}
run: msbuild rAthena.sln -t:rebuild -property:Configuration=Debug /p:DefineConstants="BUILDBOT%3BPRERE" /warnaserror
- name: Build solution in Debug
if: ${{ matrix.mode == 'RE' }}
run: msbuild rAthena.sln -t:rebuild -property:Configuration=Debug /p:DefineConstants="BUILDBOT" /warnaserror

View File

@@ -18,6 +18,8 @@ on:
# This workflow should run when a file in a source directory has been modified.
- 'src/**'
- '3rdparty/**'
# This workflow should run whenever a CMake related file has been modified
- '**/CMakeLists.txt'
jobs:
build:
@@ -30,8 +32,6 @@ jobs:
# The ubuntu-latest label currently points to ubuntu-22.04.
# Available: ubuntu-22.04, ubuntu-20.04
os: [ubuntu-latest]
# Older versions of GCC are not available via unaltered aptitude repo lists.
gcc: ['11']
# We run build checks for both Renewal and PRE-Renewal
mode: ['PRE','RE']
# Check build success for different packet-versions
@@ -44,18 +44,18 @@ jobs:
- name: Variable Parsing - PRE
if: ${{ matrix.mode == 'PRE' }}
run: |
echo "PRERE=yes" >> $GITHUB_ENV
echo "PRERE=ON" >> $GITHUB_ENV
- name: Variable Parsing - RE
if: ${{ matrix.mode == 'RE' }}
run: |
echo "PRERE=no" >> $GITHUB_ENV
echo "PRERE=OFF" >> $GITHUB_ENV
- name: Update & Install packages
# Ubuntu runners already have most of the packages rAthena requires to build.
# https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-Readme.md
run: |
sudo apt update
sudo apt install zlib1g-dev libpcre3-dev gcc-${{ matrix.gcc }} g++-${{ matrix.gcc }}
sudo apt install zlib1g-dev libpcre3-dev
- name: Start MySQL
run: sudo systemctl start mysql.service
@@ -63,13 +63,13 @@ jobs:
- name: Setup Database and import table data
run: ./tools/ci/sql.sh
- name: Command - configure
env:
CONFIGURE_FLAGS: 'CC=gcc-${{ matrix.gcc }} CXX=g++-${{ matrix.gcc }} --enable-prere=${{ env.PRERE }} --enable-packetver=${{ matrix.packetver }} --enable-buildbot=yes'
run: ./configure $CONFIGURE_FLAGS
- name: Create build directory
run: cmake -E make_directory ${{github.workspace}}/build
- name: Command - make clean
run: make clean
- name: Configure CMake
working-directory: ${{github.workspace}}/build
run: cmake .. -DENABLE_PRERENEWAL=${{env.PRERE}} -DPACKETVER=${{matrix.packetver}} -DENABLE_EXTRA_BUILDBOT_CODE=ON
- name: Command - make all
run: make all
- name: Build
working-directory: ${{github.workspace}}/build
run: cmake --build . -j2

View File

@@ -18,6 +18,8 @@ on:
# This workflow should run when a file in a source directory has been modified.
- 'src/**'
- '3rdparty/**'
# This workflow should run whenever a CMake related file has been modified
- '**/CMakeLists.txt'
jobs:
build:
@@ -30,8 +32,6 @@ jobs:
# The ubuntu-latest label currently points to ubuntu-22.04.
# Available: ubuntu-22.04, ubuntu-20.04
os: [ubuntu-latest]
# Older versions of GCC are not available via unaltered aptitude repo lists.
gcc: ['11']
# We run build checks for both Renewal and PRE-Renewal
mode: ['PRE', 'RE']
@@ -42,18 +42,18 @@ jobs:
- name: Variable Parsing - PRE
if: ${{ matrix.mode == 'PRE' }}
run: |
echo "PRERE=yes" >> $GITHUB_ENV
echo "PRERE=ON" >> $GITHUB_ENV
- name: Variable Parsing - RE
if: ${{ matrix.mode == 'RE' }}
run: |
echo "PRERE=no" >> $GITHUB_ENV
echo "PRERE=OFF" >> $GITHUB_ENV
- name: Update & Install packages
# Ubuntu runners already have most of the packages rAthena requires to build.
# https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-Readme.md
run: |
sudo apt update
sudo apt install zlib1g-dev libpcre3-dev gcc-${{ matrix.gcc }} g++-${{ matrix.gcc }}
sudo apt install zlib1g-dev libpcre3-dev
- name: Start MySQL
run: sudo systemctl start mysql.service
@@ -61,16 +61,16 @@ jobs:
- name: Setup Database and import table data
run: ./tools/ci/sql.sh
- name: Command - configure
env:
CONFIGURE_FLAGS: 'CC=gcc-${{ matrix.gcc }} CXX=g++-${{ matrix.gcc }} --enable-prere=${{ env.PRERE }} --enable-buildbot=yes --enable-vip=yes'
run: ./configure $CONFIGURE_FLAGS
- name: Command - make clean
run: make clean
- name: Create build directory
run: cmake -E make_directory ${{github.workspace}}/build
- name: Command - make server
run: make server
- name: Configure CMake
working-directory: ${{github.workspace}}/build
run: cmake .. -DENABLE_PRERENEWAL=${{env.PRERE}} -DENABLE_EXTRA_BUILDBOT_CODE=ON -DENABLE_VIP=ON
- name: Build
working-directory: ${{github.workspace}}/build
run: cmake --build . -j2 --target server
- name: Run Once - login-server
run: ./login-server --run-once

View File

@@ -1,5 +1,5 @@
name: Build servers with CMake
# build_servers_cmake.yml
name: Build servers on Windows
# build_servers_windows.yml
concurrency:
group: ${{ github.repository }}-${{ github.workflow }}-${{ github.ref }}
@@ -29,25 +29,19 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
# The ubuntu-latest label currently points to ubuntu-22.04.
# Available: ubuntu-22.04, ubuntu-20.04
os: [ubuntu-latest]
os: [windows-latest]
steps:
- uses: actions/checkout@v4
# Install latest CMake.
- uses: lukka/get-cmake@latest
- name: Create build directory
run: mkdir cbuild
run: cmake -E make_directory ${{github.workspace}}/build
- name: Create Unix Makefiles
run: |
cd cbuild
cmake -G "Unix Makefiles" ..
- name: Configure CMake
working-directory: ${{github.workspace}}/build
run: cmake ..
- name: Command - make
run: |
cd cbuild
make
- name: Build
working-directory: ${{github.workspace}}/build
# Execute the build. You can specify a specific target with "--target <NAME>"
run: cmake --build . -j2 --target server tools

View File

@@ -21,6 +21,8 @@ on:
# This workflow should run when a file in either the db/ or npc/ directory has been modified.
- 'db/**'
- 'npc/**'
# This workflow should run whenever a CMake related file has been modified
- '**/CMakeLists.txt'
jobs:
build:
@@ -33,8 +35,6 @@ jobs:
# The ubuntu-latest label currently points to ubuntu-22.04.
# Available: ubuntu-22.04, ubuntu-20.04
os: [ubuntu-latest]
# Only a single version of GCC is required for validating NPC scripts and database changes.
gcc: ['11']
# We run build checks for both Renewal and PRE-Renewal
mode: ['PRE', 'RE']
@@ -43,45 +43,41 @@ jobs:
# A simple 'yes' and 'no' can be confusing, so we use names to display in the current job then convert them for use in the compiler.
- name: Variable Parsing - PRE
if: ${{ matrix.mode == 'PRE' }}
if: ${{ matrix.mode == 'PRE' }}
run: |
echo "PRERE=yes" >> $GITHUB_ENV
echo "PRERE=ON" >> $GITHUB_ENV
- name: Variable Parsing - RE
if: ${{ matrix.mode == 'RE' }}
if: ${{ matrix.mode == 'RE' }}
run: |
echo "PRERE=no" >> $GITHUB_ENV
echo "PRERE=OFF" >> $GITHUB_ENV
- name: Update & Install packages
# Ubuntu runners already have most of the packages rAthena requires to build.
# https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-Readme.md
# https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2204-Readme.md
run: |
sudo apt update
sudo apt install zlib1g-dev libpcre3-dev gcc-${{ matrix.gcc }} g++-${{ matrix.gcc }}
sudo apt install zlib1g-dev libpcre3-dev
- name: Start MySQL
run: sudo systemctl start mysql.service
- name: Setup Database and import table data
run: ./tools/ci/sql.sh
- name: Command - configure
env:
CONFIGURE_FLAGS: 'CC=gcc-${{ matrix.gcc }} CXX=g++-${{ matrix.gcc }} --enable-prere=${{ env.PRERE }} --enable-buildbot=yes'
run: ./configure $CONFIGURE_FLAGS
- name: Create build directory
run: cmake -E make_directory ${{github.workspace}}/build
- name: Configure CMake
working-directory: ${{github.workspace}}/build
run: cmake .. -DENABLE_PRERENEWAL=${{env.PRERE}} -DENABLE_EXTRA_BUILDBOT_CODE=ON
- name: Build
working-directory: ${{github.workspace}}/build
run: cmake --build . -j2 --target map-server
# npc.sh enables all NPC scripts in the custom and test folders.
- name: Enable All NPCs for Testing
run: ./tools/ci/npc.sh
- name: Command - make clean
run: make clean
# Create import directories
- name: Command - make import
run: make import
- name: Command - make map
run: make map
- name: Run Once - map-server
run: ./map-server --run-once

6
.gitignore vendored
View File

@@ -139,6 +139,12 @@ Thumbs.db
/yamlupgrade.bat
/navigenerator.bat
# Linux script tools
/athena-start.sh
# /function.sh
# /install.sh
# /uninstall.sh
# dlls
/libmysql.dll
/pcre8.dll

View File

@@ -1,38 +1,18 @@
cmake_minimum_required(VERSION 2.8)
add_library(httplib STATIC)
if ( NOT ENABLE_WEB_SERVER )
return()
endif( NOT ENABLE_WEB_SERVER )
target_sources(httplib PRIVATE "httplib.cc")
SET (this_target httplib)
PROJECT(${this_target})
target_include_directories(httplib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
find_path ( HTTPLIB_INCLUDE_DIRS "httplib.h"
PATHS "${CMAKE_CURRENT_SOURCE_DIR}"
NO_DEFAULT_PATH )
find_path ( HTTPLIB_SOURCE_DIR "httplib.cc"
PATHS "${CMAKE_CURRENT_SOURCE_DIR}"
NO_DEFAULT_PATH )
mark_as_advanced( HTTPLIB_INCLUDE_DIRS )
mark_as_advanced( HTTPLIB_SOURCE_DIR )
set ( HTTPLIB_HEADERS
"${HTTPLIB_INCLUDE_DIRS}/httplib.h"
CACHE INTERNAL "httplib headers" )
set ( HTTPLIB_SOURCES
"${HTTPLIB_SOURCE_DIR}/httplib.cc"
CACHE INTERNAL "httplib sources" )
set ( HTTPLIB_DEFINITIONS
"-std=c++11"
CACHE INTERNAL "http definitions" )
include_directories( ${HTTPLIB_INCLUDE_DIRS} ${HTTPLIB_SOURCE_DIR} )
ADD_LIBRARY( ${this_target} STATIC ${HTTPLIB_SOURCES} )
if (NOT WIN32)
target_compile_definitions(${this_target} PUBLIC "CPPHTTPLIB_SEND_FLAGS=MSG_NOSIGNAL")
if(NOT WIN32)
target_compile_definitions(httplib PUBLIC "CPPHTTPLIB_SEND_FLAGS=MSG_NOSIGNAL")
endif()
if(WIN32)
target_sources(httplib PRIVATE "httplib.h")
set_target_properties(httplib PROPERTIES FOLDER "3rdparty")
endif()
if(NOT ENABLE_WEB_SERVER)
set_target_properties(httplib PROPERTIES EXCLUDE_FROM_ALL TRUE)
endif()

View File

@@ -1,7 +1,3 @@
cmake_minimum_required(VERSION 2.8)
add_library(json INTERFACE)
set (JSON_INCLUDE_DIRS
"${CMAKE_CURRENT_SOURCE_DIR}/include"
CACHE INTERNAL "json include dir" )
mark_as_advanced( JSON_INCLUDE_DIRS )
target_include_directories(json INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/include")

View File

@@ -1,29 +1,27 @@
find_path( LIBCONFIG_INCLUDE_DIRS "libconfig.h"
PATHS "${CMAKE_CURRENT_SOURCE_DIR}"
NO_DEFAULT_PATH )
find_path( LIBCONFIG_SOURCE_DIR "libconfig.c"
PATHS "${CMAKE_CURRENT_SOURCE_DIR}"
NO_DEFAULT_PATH )
mark_as_advanced( LIBCONFIG_INCLUDE_DIRS )
mark_as_advanced( LIBCONFIG_SOURCE_DIR )
add_library(libconfig STATIC)
set( LIBCONFIG_HEADERS
"${CMAKE_CURRENT_SOURCE_DIR}/grammar.h"
"${CMAKE_CURRENT_SOURCE_DIR}/libconfig.h"
"${CMAKE_CURRENT_SOURCE_DIR}/parsectx.h"
"${CMAKE_CURRENT_SOURCE_DIR}/scanctx.h"
"${CMAKE_CURRENT_SOURCE_DIR}/scanner.h"
"${CMAKE_CURRENT_SOURCE_DIR}/strbuf.h"
"${CMAKE_CURRENT_SOURCE_DIR}/wincompat.h"
CACHE INTERNAL "libconfig headers" )
set( LIBCONFIG_SOURCES
"${CMAKE_CURRENT_SOURCE_DIR}/grammar.c"
"${CMAKE_CURRENT_SOURCE_DIR}/libconfig.c"
"${CMAKE_CURRENT_SOURCE_DIR}/scanctx.c"
"${CMAKE_CURRENT_SOURCE_DIR}/scanner.c"
"${CMAKE_CURRENT_SOURCE_DIR}/strbuf.c"
CACHE INTERNAL "libconfig sources" )
set( LIBCONFIG_DEFINITIONS
"-DLIBCONFIG_STATIC"
CACHE INTERNAL "libconfig definitions" )
target_sources(libconfig PRIVATE
"grammar.c"
"libconfig.c"
"scanctx.c"
"scanner.c"
"strbuf.c"
)
target_include_directories(libconfig PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
target_compile_definitions(libconfig PUBLIC "-DLIBCONFIG_STATIC")
if(WIN32)
target_sources(libconfig PRIVATE
"grammar.h"
"libconfig.h"
"parsectx.h"
"scanctx.h"
"scanner.h"
"strbuf.h"
"wincompat.h"
)
set_target_properties(libconfig PROPERTIES FOLDER "3rdparty")
endif()

View File

@@ -95,6 +95,7 @@ endif()
c4_add_dev_targets()
add_custom_target(ryml-uninstall
"${CMAKE_COMMAND}" -P "${PROJECT_SOURCE_DIR}/cmake/uninstall.cmake"
)
# rathena
if(WIN32)
set_target_properties(ryml PROPERTIES FOLDER "3rdparty")
endif()

View File

@@ -78,13 +78,6 @@ endif()
set(C4CORE_AMALGAMATED ${C4CORE_SRC_DIR}/../src_singleheader/c4/c4core_all.hpp)
list(TRANSFORM C4CORE_SRC_FILES PREPEND "${C4CORE_SRC_DIR}/" OUTPUT_VARIABLE C4CORE_SRC_FILES_FULL)
add_custom_target(c4core-amalgamate
python ${CMAKE_CURRENT_LIST_DIR}/tools/amalgamate.py ${C4CORE_AMALGAMATED}
COMMENT "${CMAKE_CURRENT_LIST_DIR}/tools/amalgamate.py ${C4CORE_AMALGAMATED}"
BYPRODUCTS ${C4CORE_AMALGAMATED}
DEPENDS ${C4CORE_SRC_FILES_FULL}
)
c4_add_library(c4core
INC_DIRS
$<BUILD_INTERFACE:${C4CORE_SRC_DIR}> $<INSTALL_INTERFACE:include>
@@ -105,3 +98,8 @@ c4_install_exports()
c4_add_dev_targets()
c4_pack_project(TYPE LIBRARY)
# rathena
if(WIN32)
set_target_properties(c4core PROPERTIES FOLDER "3rdparty")
endif()

View File

@@ -1,87 +1,78 @@
cmake_minimum_required(VERSION 2.8)
set(YAML_HEADERS
"yaml.h"
"traits.h"
"stlemitter.h"
"parser.h"
"ostream_wrapper.h"
"null.h"
"noncopyable.h"
"noexcept.h"
"mark.h"
"exceptions.h"
"eventhandler.h"
"emitterstyle.h"
"emittermanip.h"
"emitter.h"
"emitterdef.h"
"emitfromevents.h"
"dll.h"
"depthguard.h"
"binary.h"
"anchor.h"
"node/type.h"
"node/ptr.h"
"node/parse.h"
"node/node.h"
"node/iterator.h"
"node/impl.h"
"node/emit.h"
"node/convert.h"
"contrib/graphbuilder.h"
"contrib/anchordict.h"
)
list(TRANSFORM YAML_HEADERS PREPEND "include/yaml-cpp/")
## start setting
SET (this_target yaml-cpp)
PROJECT(${this_target})
set(YAML_SOURCES
"binary.cpp"
"convert.cpp"
"depthguard.cpp"
"directives.cpp"
"emit.cpp"
"emitfromevents.cpp"
"emitter.cpp"
"emitterstate.cpp"
"emitterutils.cpp"
"exceptions.cpp"
"exp.cpp"
"memory.cpp"
"nodebuilder.cpp"
"node.cpp"
"node_data.cpp"
"nodeevents.cpp"
"null.cpp"
"ostream_wrapper.cpp"
"parse.cpp"
"parser.cpp"
"regex_yaml.cpp"
"scanner.cpp"
"scanscalar.cpp"
"scantag.cpp"
"scantoken.cpp"
"simplekey.cpp"
"singledocparser.cpp"
"stream.cpp"
"tag.cpp"
"contrib/graphbuilderadapter.cpp"
"contrib/graphbuilder.cpp"
)
list(TRANSFORM YAML_SOURCES PREPEND "src/")
find_path( YAML_INCLUDE_DIRS "yaml-cpp/yaml.h"
PATHS "${CMAKE_CURRENT_SOURCE_DIR}/include"
NO_DEFAULT_PATH )
find_path( YAML_SOURCE_DIR "regex_yaml.cpp"
PATHS "${CMAKE_CURRENT_SOURCE_DIR}/src"
NO_DEFAULT_PATH )
mark_as_advanced( YAML_INCLUDE_DIRS )
mark_as_advanced( YAML_SOURCE_DIR )
add_library(yaml-cpp STATIC EXCLUDE_FROM_ALL ${YAML_SOURCES})
set( YAML_HEADERS
"${YAML_INCLUDE_DIRS}/yaml-cpp/yaml.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/traits.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/stlemitter.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/parser.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/ostream_wrapper.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/null.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/noncopyable.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/noexcept.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/mark.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/exceptions.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/eventhandler.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/emitterstyle.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/emittermanip.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/emitter.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/emitterdef.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/emitfromevents.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/dll.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/depthguard.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/binary.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/anchor.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/node/type.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/node/ptr.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/node/parse.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/node/node.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/node/iterator.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/node/impl.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/node/emit.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/node/convert.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/contrib/graphbuilder.h"
"${YAML_INCLUDE_DIRS}/yaml-cpp/contrib/anchordict.h"
CACHE INTERNAL "yaml headers" )
set( YAML_SOURCES
"${YAML_SOURCE_DIR}/binary.cpp"
"${YAML_SOURCE_DIR}/convert.cpp"
"${YAML_SOURCE_DIR}/depthguard.cpp"
"${YAML_SOURCE_DIR}/directives.cpp"
"${YAML_SOURCE_DIR}/emit.cpp"
"${YAML_SOURCE_DIR}/emitfromevents.cpp"
"${YAML_SOURCE_DIR}/emitter.cpp"
"${YAML_SOURCE_DIR}/emitterstate.cpp"
"${YAML_SOURCE_DIR}/emitterutils.cpp"
"${YAML_SOURCE_DIR}/exceptions.cpp"
"${YAML_SOURCE_DIR}/exp.cpp"
"${YAML_SOURCE_DIR}/memory.cpp"
"${YAML_SOURCE_DIR}/nodebuilder.cpp"
"${YAML_SOURCE_DIR}/node.cpp"
"${YAML_SOURCE_DIR}/node_data.cpp"
"${YAML_SOURCE_DIR}/nodeevents.cpp"
"${YAML_SOURCE_DIR}/null.cpp"
"${YAML_SOURCE_DIR}/ostream_wrapper.cpp"
"${YAML_SOURCE_DIR}/parse.cpp"
"${YAML_SOURCE_DIR}/parser.cpp"
"${YAML_SOURCE_DIR}/regex_yaml.cpp"
"${YAML_SOURCE_DIR}/scanner.cpp"
"${YAML_SOURCE_DIR}/scanscalar.cpp"
"${YAML_SOURCE_DIR}/scantag.cpp"
"${YAML_SOURCE_DIR}/scantoken.cpp"
"${YAML_SOURCE_DIR}/simplekey.cpp"
"${YAML_SOURCE_DIR}/singledocparser.cpp"
"${YAML_SOURCE_DIR}/stream.cpp"
"${YAML_SOURCE_DIR}/tag.cpp"
"${YAML_SOURCE_DIR}/contrib/graphbuilderadapter.cpp"
"${YAML_SOURCE_DIR}/contrib/graphbuilder.cpp"
CACHE INTERNAL "yaml sources" )
set( YAML_DEFINITIONS
"-std=c++11"
CACHE INTERNAL "yaml definitions" )
include_directories(${YAML_INCLUDE_DIRS} ${YAML_SOURCE_DIR})
#message(STATUS "YAML_INCLUDE_DIRS : ${YAML_INCLUDE_DIRS}, YAML_SOURCE_DIR=${YAML_SOURCE_DIR}")
ADD_LIBRARY(${this_target} STATIC ${YAML_SOURCES} )
target_compile_definitions(${this_target} PUBLIC "-DYAML_CPP_STATIC_DEFINE")
target_include_directories(yaml-cpp PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
target_compile_definitions(yaml-cpp PUBLIC "-DYAML_CPP_STATIC_DEFINE")
if(WIN32)
set_target_properties(yaml-cpp PROPERTIES FOLDER "3rdparty")
endif()

View File

@@ -1,630 +1,105 @@
#####################################################################
#
# "Getting Started with CMake", a tutorial video by Eric Wing.
# Part 1 of 6: http://www.youtube.com/watch?v=CLvZTyji_Uw
# Part 2 of 6: http://www.youtube.com/watch?v=gUW-RrRQjEg
# Part 3 of 6: http://www.youtube.com/watch?v=sz6cPhbuTk4
# Part 4 of 6: http://www.youtube.com/watch?v=JICZOkyNXbg
# Part 5 of 6: http://www.youtube.com/watch?v=lAiuLHy4dCk
# Part 6 of 6: http://www.youtube.com/watch?v=fAtJNzDZdH8
#
# You can use notepad++ for syntax highlighting.
# Naming conventions:
# WITH_* : option to use an external package or not
# ENABLE_* : option to use an internal feature/code or not
# HAVE_* : internal variable indicating if we have and are using something
#
# Maintainers: Flavio J. Saraiva (feel free to send complaints or suggestions)
# flaviojs @ rAthena forum/irc
# flaviojs2005 \A-T/ gmail <D.o,T> com
# lightaisme \A-T/ gmail <D.o,T> com
#
#####################################################################
cmake_minimum_required(VERSION 3.11)
project(rAthena)
# Configure CMake Modules
list(APPEND CMAKE_MODULE_PATH
"${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/tools/cmake")
#cmake_minimum_required( VERSION 2.8.4 )
# Functional changes from 2.8.3 to 2.8.4:
# string(SUBSTRING) works with length -1 as "rest of string"
# changes to some CPack generators
# CYGWIN no longer defines WIN32
# CMP0017: Prefer files from the CMake module directory when including from there.
# Update to 3.1 for CMAKE_CXX_STANDARD cross support definition
set( CMAKE_LEGACY_CYGWIN_WIN32 0 )
cmake_minimum_required( VERSION 3.1 )
project( rAthena )
if( CYGWIN )
unset( WIN32 )
endif()
set(CMAKE_CXX_STANDARD 17) # C++17...
set(CMAKE_CXX_STANDARD_REQUIRED ON) #...is required...
#set(CMAKE_CXX_EXTENSIONS OFF) #...without compiler extensions like gnu++11
# options
set(PACKETVER 20211103 CACHE STRING "Sets the PACKETVER define of the servers (see src/common/mmo.hpp)")
set(MAXCONN CACHE STRING "Sets the MAXCONN define of the servers. (see src/common/socket.hpp)")
option(ENABLE_PRERENEWAL "Whether or not to enable Pre-renewal (default=OFF)" OFF)
option(ENABLE_WEB_SERVER "Build web-server (default=ON)" ON)
option(ENABLE_RDTSC "Enable RDTSC instruction as a timing source (default=OFF)" OFF)
option(ENABLE_EXTRA_DEBUG_CODE "Enable extra debug code (default=OFF)" OFF)
option(ENABLE_MEMMGR "Enable memory manager (default=ON)" ON)
# TODO(vstumpf): If no one uses this, we can just remove it
# set(ENABLE_MEMORY "system" CACHE STRING "Enable memory library (default=system)")
option(ENABLE_PROFILER "Enable profiler (default=OFF)" OFF)
option(ENABLE_EXTRA_BUILDBOT_CODE "Enable extra buildbot code (default=OFF)" OFF)
option(ENABLE_EPOLL "Use epoll instead of select (default=OFF)" OFF)
option(ENABLE_VIP "Enable VIP system (default=OFF)" OFF)
#actually this might be misleading for arm...
if( CMAKE_SIZEOF_VOID_P EQUAL 4 )
set(architecture x86)
elseif( CMAKE_SIZEOF_VOID_P EQUAL 8 )
set(architecture x64)
else()
message( FATAL_ERROR "unexpected architecture (CMAKE_SIZEOF_VOID_P is ${CMAKE_SIZEOF_VOID_P})" )
endif()
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib/${suffixInstallStr})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib/${suffixInstallStr})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
set(CMAKE_C_CREATE_SHARED_LIBRARY)
set(CMAKE_CXX_CREATE_SHARED_LIBRARY)
set(CMAKE_DEBUG_POSTFIX "d")
set(CMAKE_RELEASE_POSTFIX "r")
# Set a default build type if none was specified
set(default_build_type "Release")
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE
STRING "Choose the type of build." FORCE)
# Set the possible values of build type for cmake-gui
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
"Debug" "Release" "MinSizeRel" "RelWithDebInfo")
set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE
STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel" FORCE)
message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
endif()
if(CMAKE_GENERATOR MATCHES "Visual Studio")
set(ENABLE_MSVC_PARALLEL ON CACHE STRING "\
Enables /MP flag for parallel builds using MSVC. Specify an integer value to control \
the number of threads used (Only works on versions of Visual Studio). Setting to ON \
lets the toolchain decide how many threads to use. Set to OFF to disable /MP completely." )
if(ENABLE_MSVC_PARALLEL)
if(ENABLE_MSVC_PARALLEL GREATER 0)
string(APPEND CMAKE_C_FLAGS " /MP${ENABLE_MSVC_PARALLEL}")
string(APPEND CMAKE_CXX_FLAGS " /MP${ENABLE_MSVC_PARALLEL}")
else()
string(APPEND CMAKE_C_FLAGS " /MP")
string(APPEND CMAKE_CXX_FLAGS " /MP")
endif()
endif()
endif()
#
# Prevent building in the source directory by default
#
option( ALLOW_SAME_DIRECTORY "Allow CMake to build in the source directory." OFF )
if( ALLOW_SAME_DIRECTORY )
elseif( "${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}" )
message( FATAL_ERROR
"Do not use the source directory to build your files, instead delete CMakeCache.txt, create a separate folder and build there.\n"
"Example: (build in subdir 'build' and install to source dir)\n"
" rm -f CMakeCache.txt\n"
" mkdir build\n"
" cd build\n"
" cmake -G\"Unix Makefiles\" -DINSTALL_TO_SOURCE=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo ..\n"
" make install\n"
" cd ..\n"
" rm -rf build\n"
"To skip this check, set ALLOW_SAME_DIRECTORY to ON (-DALLOW_SAME_DIRECTORY=ON)" )
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
message( FATAL_ERROR
"Do not use the source directory to build your files, instead delete CMakeCache.txt, create a separate folder and build there.\n"
"Example: (build in subdir 'build' and install to source dir)\n"
" rm -f CMakeCache.txt\n"
" mkdir build\n"
" cd build\n"
" cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..\n"
" make install\n"
" cd ..\n"
" rm -rf build\n")
endif()
#
# Global stuff
#
set( GLOBAL_LIBRARIES ${LINK_LIBRARIES} CACHE INTERNAL "" )# list (comma separated values)
set( GLOBAL_INCLUDE_DIRS ${INCLUDE_DIRECTORIES} CACHE INTERNAL "" )# list (comma separated values)
set( GLOBAL_DEFINITIONS ${COMPILE_DEFINITIONS} CACHE INTERNAL "" )# string (space separated values -DFOO=bar)
mark_as_advanced( GLOBAL_LIBRARIES GLOBAL_INCLUDE_DIRS GLOBAL_DEFINITIONS )
if( WIN32 )
set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -DFD_SETSIZE=4096" )
endif()
if( MSVC )
set_property( CACHE GLOBAL_LIBRARIES PROPERTY VALUE ${GLOBAL_LIBRARIES} "oldnames.lib" "ws2_32.lib" )
set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE" )
endif()
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUCC)
set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -fno-strict-aliasing" )
#set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -O2" ); #need more test to enable this
if(WIN32)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
endif()
#
# 3rd party
#
set( CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/cmake CACHE INTERNAL "" )
include( CheckCSourceCompiles )
include( CheckCSourceRuns )
include( CheckIncludeFile )
include( CheckFunctionExists )
include( FindFunctionLibrary )
include( TestBigEndian )
# Configure C++ Standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#
# PACKETVER
#
set( PACKETVER CACHE STRING "Sets the PACKETVER define of the servers. (see src/common/mmo.h)" )
if( PACKETVER )
list( APPEND GLOBAL_DEFINITIONS PACKETVER=${PACKETVER} )
# Set build directories
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib/${suffixInstallStr})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib/${suffixInstallStr})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
if(WIN32)
set(RuntimeOutputDir "${CMAKE_BINARY_DIR}/..")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${RuntimeOutputDir})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${RuntimeOutputDir})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${RuntimeOutputDir})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${RuntimeOutputDir})
if (MSVC AND NOT MSVC_VERSION VERSION_LESS 142)
add_link_options($<$<CONFIG:Debug>:/INCREMENTAL>)
add_compile_options($<$<CONFIG:Debug>:/ZI>)
endif()
add_compile_definitions($<$<CONFIG:DEBUG>:_ITERATOR_DEBUG_LEVEL=0>)
endif()
add_subdirectory(db)
add_subdirectory(conf)
add_subdirectory(3rdparty)
add_subdirectory(src)
add_subdirectory(tools)
#
# Find git
#
message( STATUS "Detecting git" )
find_package(Git)
if(GIT_FOUND)
if(GIT_VERSION_STRING)
message(STATUS "Found git : ${GIT_EXECUTABLE} version (${GIT_VERSION_STRING})")
else()
message(STATUS "Found git : ${GIT_EXECUTABLE}")
endif()
endif()
include(GetGitVersion)
get_git_version()
#include(GetSvnVersion)
#get_svn_version(SVN_VERSION)
#message( STATUS "SVN_VERSION: ${SVN_VERSION}" )
#
# threads
#
message( STATUS "Detecting threads library" )
set( CMAKE_THREAD_PREFER_PTHREAD 1 )
find_package(Threads REQUIRED)
if( CMAKE_THREAD_LIBS_INIT )
message( STATUS "Adding global library: ${CMAKE_THREAD_LIBS_INIT}" )
set_property( CACHE GLOBAL_LIBRARIES PROPERTY VALUE ${GLOBAL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} )
endif()
message( STATUS "Detecting threads library - done" )
message( STATUS "Check if supporting Thread local storage (TLS)" )
file( READ "${CMAKE_SOURCE_DIR}/3rdparty/cmake/tests/HAVE_TLS.c" _SOURCE )
CHECK_C_SOURCE_RUNS( "${_SOURCE}" HAVE_TLS )
if( HAVE_TLS )
message( STATUS "Check for TLS- yes" )
set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -DHAVE_TLS" )
else()
message( STATUS "Check for TLS - no" )
endif()
#
# math library (FreeBSD/Linux/Solaris)
#
if( NOT WIN32 )
message( STATUS "Detecting math library (m)" )
CHECK_INCLUDE_FILE( math.h HAVE_MATH_H )
if( NOT HAVE_MATH_H )
message( FATAL_ERROR "math.h not found" )
endif()
set( CMAKE_REQUIRED_LIBRARIES ${GLOBAL_LIBRARIES} )
find_function_library( floor FUNCTION_FLOOR_LIBRARIES m )
if( FUNCTION_FLOOR_LIBRARIES )
message( STATUS "Adding global library: ${FUNCTION_FLOOR_LIBRARIES}" )
set_property( CACHE GLOBAL_LIBRARIES PROPERTY VALUE ${GLOBAL_LIBRARIES} ${FUNCTION_FLOOR_LIBRARIES} )
endif()
message( STATUS "Detecting math library (m) - done" )
endif()
#
# dynamic loading library (Linux)
#
if( NOT WIN32 )
message( STATUS "Detecting dynamic loading library (dl)" )
set( CMAKE_REQUIRED_LIBRARIES ${GLOBAL_LIBRARIES} )
find_function_library( dlopen FUNCTION_DLOPEN_LIBRARIES dl )
if( FUNCTION_DLOPEN_LIBRARIES )
message( STATUS "Adding global library: ${FUNCTION_DLOPEN_LIBRARIES}" )
set_property( CACHE GLOBAL_LIBRARIES PROPERTY VALUE ${GLOBAL_LIBRARIES} ${FUNCTION_DLOPEN_LIBRARIES} )
endif()
message( STATUS "Detecting dynamic loading library (dl) - done" )
endif()
#
# networking library (Solaris/MinGW)
#
if( NOT MSVC )
message( STATUS "Detecting networking library (socket/nsl/ws2_32)" )
#set( CMAKE_REQUIRED_LIBRARIES ${GLOBAL_LIBRARIES} )
#find_function_library( bind FUNCTION_BIND_LIBRARIES socket ws2_32 )
#if( FUNCTION_BIND_LIBRARIES )
# message( STATUS "Adding global library: ${FUNCTION_BIND_LIBRARIES}" )
# set_property( CACHE GLOBAL_LIBRARIES PROPERTY VALUE ${GLOBAL_LIBRARIES} ${FUNCTION_BIND_LIBRARIES} )
#endif()
set( CMAKE_REQUIRED_LIBRARIES ${GLOBAL_LIBRARIES} )
find_function_library( gethostbyname FUNCTION_GETHOSTBYNAME_LIBRARIES nsl )
if( FUNCTION_GETHOSTBYNAME_LIBRARIES )
message( STATUS "Adding global library: ${FUNCTION_GETHOSTBYNAME_LIBRARIES}" )
set_property( CACHE GLOBAL_LIBRARIES PROPERTY VALUE ${GLOBAL_LIBRARIES} ${FUNCTION_GETHOSTBYNAME_LIBRARIES} )
endif()
message( STATUS "Detecting networking library (socket/nsl/ws2_32) - done" )
endif()
#
# enable web server?
#
option( ENABLE_WEB_SERVER "Build web-server (default=ON)" ON )
#
# Test for big endian
#
TEST_BIG_ENDIAN( BIG_ENDIAN )
if( NOT DEFINED BIG_ENDIAN )
message( WARNING "unable to determine endianness, only LITTLE ENDIAN is supported" )
elseif( BIG_ENDIAN )
message( FATAL_ERROR "bigendian is not supported" )
endif()
#
# Test monotonic clock
#
# CLOCK_MONOTONIC clock for clock_gettime
# Normally defines _POSIX_TIMERS > 0 and _POSIX_MONOTONIC_CLOCK (for posix
# compliant systems) and __FreeBSD_cc_version >= 500005 (for FreeBSD
# >= 5.1.0, which does not have the posix defines (ref. r11983)) would be
# checked but some systems define them even when they do not support it
# (ref. bugreport:1003).
#
message( STATUS "Check for monotonic clock" )
find_library( RT_LIBRARY rt )# (optional, rt on Debian)
mark_as_advanced( RT_LIBRARY )
set( CMAKE_REQUIRED_LIBRARIES ${GLOBAL_LIBRARIES} ${RT_LIBRARY} )
file( READ "${CMAKE_SOURCE_DIR}/3rdparty/cmake/tests/HAVE_MONOTONIC_CLOCK.c" _SOURCE )
CHECK_C_SOURCE_RUNS( "${_SOURCE}" HAVE_MONOTONIC_CLOCK )
if( HAVE_MONOTONIC_CLOCK )
message( STATUS "Check for monotonic clock - yes" )
set_property( CACHE GLOBAL_LIBRARIES PROPERTY VALUE ${GLOBAL_LIBRARIES} ${RT_LIBRARY} )
set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -DHAVE_MONOTONIC_CLOCK" )
else()
message( STATUS "Check for monotonic clock - no" )
endif()
#
# Test if function exists:
# setrlimit - used to set the socket limit
# strnlen - string length with upper scan bound
# getpid - process id
# gettid - thread id
#
CHECK_FUNCTION_EXISTS( setrlimit HAVE_SETRLIMIT )
CHECK_FUNCTION_EXISTS( strnlen HAVE_STRNLEN )
CHECK_FUNCTION_EXISTS( getpid HAVE_GETPID )
CHECK_FUNCTION_EXISTS( gettid HAVE_GETTID )
foreach( define HAVE_SETRLIMIT HAVE_STRNLEN HAVE_GETPID HAVE_GETTID )
if( ${define} )
set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -D${define}" )
endif()
endforeach()
#
# Use RDTSC instruction as a timing source (time stamp counter on x86 since Pentium) (default=OFF)
#
# Enable it when you've timing issues. (ex: in conjunction with XEN or Other Virtualization mechanisms)
# Please ensure that you've disabled dynamic CPU-Frequencys, such as power saving options.
# (On the most modern Dedicated Servers cpufreq is preconfigured, see your distribution's manual how to disable it)
#
option( ENABLE_RDTSC "use RDTSC instruction as a timing source (default=OFF)" OFF )
if( ENABLE_RDTSC )
set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -DENABLE_RDTSC" )
message( STATUS "Enabled RDTSC as a timing source" )
endif()
#
# Enable extra debug code (default=OFF)
#
option( ENABLE_EXTRA_DEBUG_CODE "enable extra debug code (default=OFF)" OFF )
if( ENABLE_EXTRA_DEBUG_CODE )
set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -DDEBUG" )
message( STATUS "Enabled extra DEBUG code" )
endif()
#
# Enable EPOLL (default=OFF)
# Only for Linux
#
option( ENABLE_EXTRA_SOCKET_POLL "enable SOCKET_EPOLL (default=OFF)" OFF )
if( ENABLE_EXTRA_SOCKET_POLL )
set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -DSOCKET_EPOLL" )
message( STATUS "Enabled SOCKET_EPOLL" )
endif()
#
# Enable builtin memory manager (default=default)
#
set( MEMMGR_OPTIONS "default;yes;no" )
set( ENABLE_MEMMGR "default" CACHE STRING "enable builtin memory manager: ${MEMMGR_OPTIONS} (default=default)" )
set_property( CACHE ENABLE_MEMMGR PROPERTY STRINGS ${MEMMGR_OPTIONS} )
if( ENABLE_MEMMGR STREQUAL "default" )
# use source code default
elseif( ENABLE_MEMMGR STREQUAL "yes" )
set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -DUSE_MEMMGR" )
message( STATUS "Enabled the builtin memory manager" )
elseif( ENABLE_MEMMGR STREQUAL "no" )
set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -DNO_MEMMGR" )
message( STATUS "Disabled the builtin memory manager" )
else()
message( FATAL_ERROR "invalid option ENABLE_MEMMGR=${ENABLE_MEMMGR} (valid options: ${MEMMGR_OPTIONS})" )
endif()
#
# Enable memory library (default=system)
#
set( MEMORY_OPTIONS "system;memwatch;dmalloc;gcollect" )
set( ENABLE_MEMORY "system" CACHE STRING "enable memory library: ${MEMORY_OPTIONS} (default=system)" )
set_property( CACHE ENABLE_MEMORY PROPERTY STRINGS ${MEMORY_OPTIONS} )
if( ENABLE_MEMORY STREQUAL "system" )
# use system functions
elseif( ENABLE_MEMORY STREQUAL "memwatch" )
CHECK_INCLUDE_FILE( memwatch.h HAVE_MEMWATCH_H )
find_library( MEMWATCH_LIBRARY memwatch )
mark_as_advanced( MEMWATCH_LIBRARY )
if( HAVE_MEMWATCH_H AND MEMWATCH_LIBRARY )
message( STATUS "Adding global library: ${MEMWATCH_LIBRARY}" )
set_property( CACHE GLOBAL_LIBRARIES PROPERTY VALUE ${GLOBAL_LIBRARIES} ${MEMWATCH_LIBRARY} )
set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -DMEMWATCH" )
message( STATUS "Enabled the memory library memwatch" )
else()
message( FATAL_ERROR "Failed to enable the memory library memwatch" )
endif()
elseif( ENABLE_MEMORY STREQUAL "dmalloc" )
CHECK_INCLUDE_FILE( dmalloc.h HAVE_DMALLOC_H )
find_library( DMALLOC_LIBRARY dmalloc )
mark_as_advanced( DMALLOC_LIBRARY )
if( HAVE_DMALLOC_H AND DMALLOC_LIBRARY )
message( STATUS "Adding global library: ${DMALLOC_LIBRARY}" )
set_property( CACHE GLOBAL_LIBRARIES PROPERTY VALUE ${GLOBAL_LIBRARIES} ${DMALLOC_LIBRARY} )
set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -DDMALLOC -DDMALLOC_FUNC_CHECK" )
message( STATUS "Enabled the memory library dmalloc" )
else()
message( FATAL_ERROR "Failed to enable the memory library dmalloc" )
endif()
elseif( ENABLE_MEMORY STREQUAL "gcollect" )
CHECK_INCLUDE_FILE( gc.h HAVE_GC_H )
find_library( GC_LIBRARY gc )
mark_as_advanced( GC_LIBRARY )
if( HAVE_GC_H AND GC_LIBRARY )
message( STATUS "Adding global library: ${GC_LIBRARY}" )
set_property( CACHE GLOBAL_LIBRARIES PROPERTY VALUE ${GLOBAL_LIBRARIES} ${GC_LIBRARY} )
set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -DGCOLLECT" )
message( STATUS "Enabled the memory library gcollect" )
else()
message( FATAL_ERROR "Failed to enable the memory library gcollect" )
endif()
else()
message( FATAL_ERROR "invalid option ENABLE_MEMORY=${ENABLE_MEMORY} (valid options: ${MEMORY_OPTIONS})" )
endif()
#
# Enable profiler (default=none)
#
set( PROFILER_OPTIONS "none;gprof" )
set( ENABLE_PROFILER "none" CACHE STRING "enable profiler: ${PROFILER_OPTIONS} (default=none)" )
set_property( CACHE ENABLE_PROFILER PROPERTY STRINGS ${PROFILER_OPTIONS} )
if( ENABLE_PROFILER STREQUAL "none" )
# no profiler
elseif( ENABLE_PROFILER STREQUAL "gprof" )
if( CMAKE_C_COMPILER_ID STREQUAL "GNU" )
if( NOT HAVE_GPROF_FLAGS )
set_property( CACHE CMAKE_C_FLAGS PROPERTY VALUE "${CMAKE_C_FLAGS} -pg" )
set_property( CACHE CMAKE_EXE_LINKER_FLAGS PROPERTY VALUE "${CMAKE_EXE_LINKER_FLAGS} -pg" )
set( HAVE_GPROF_FLAGS ON CACHE INTERNAL "" )
endif()
message( STATUS "Enabled the profiler gprof" )
else()
message( FATAL_ERROR "Failed to enable the profiler gprof - not GNU" )
endif()
else()
message( FATAL_ERROR "invalid option ENABLE_PROFILER=${ENABLE_PROFILER} (valid options: ${PROFILER_OPTIONS})" )
endif()
#
# Enable extra buildbot code (default=OFF)
#
option( ENABLE_EXTRA_BUILDBOT_CODE "enable extra buildbot code (default=OFF)" OFF )
if( ENABLE_EXTRA_BUILDBOT_CODE )
set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -DBUILDBOT" )
message( STATUS "Enabled extra BUILDBOT code" )
endif()
#####################################################################
# package stuff
#
set( CPACK_PACKAGE_NAME "rAthena" )
set( CPACK_PACKAGE_DESCRIPTION_SUMMARY "MMORPG server package" )
set( CPACK_PACKAGE_VERSION ${SVNVERSION} )
set( CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE )
#set( CPACK_MONOLITHIC_INSTALL ON )
include( CPACK OPTIONAL RESULT_VARIABLE HAVE_CPACK )
if( HAVE_CPACK )
option( WITH_CPACK "enable building packages with CPack ('package' target)" ON )
endif()
if( NOT WITH_CPACK )
# empty replacements
macro( cpack_add_component_group )
endmacro()
macro( cpack_add_component )
endmacro()
message( STATUS "Disabled package creation" )
endif()
set( Runtime "Runtime files" CACHE INTERNAL "" )
set( Runtime_base "configurations, dbs, npcs, docs, ..." CACHE INTERNAL "" )
set( Runtime_templates "conf/import and save (generated from conf/import-tmpl and save-tmpl)" CACHE INTERNAL "" )
cpack_add_component_group( Runtime DESCRIPTION ${Runtime} DISPLAY_NAME "Runtime" )
cpack_add_component( Runtime_base DESCRIPTION ${Runtime_base} DISPLAY_NAME "Base files" GROUP Runtime )
cpack_add_component( Runtime_templates DESCRIPTION ${Runtime_templates} DISPLAY_NAME "Base templates" GROUP Runtime )
set( Development "Development files" CACHE INTERNAL "" )
set( Development_base "projects, 3rdparty, sources, templates" CACHE INTERNAL "" )
cpack_add_component_group( Development DESCRIPTION ${Development} DISPLAY_NAME "Development" )
cpack_add_component( Development_base DESCRIPTION ${Development_base} DISPLAY_NAME "Base files" GROUP Development )
#
# install stuff
#
option( INSTALL_COMPONENT_RUNTIME "install/package files needed to run the project" ON )
option( INSTALL_COMPONENT_DEVELOPMENT "install/package files needed to build the project" OFF )
option( INSTALL_TO_PATH "copy files to INSTALL_PATH" OFF )
option( INSTALL_TO_SOURCE "copy files to source directory, skips what is already there (${CMAKE_CURRENT_SOURCE_DIR})" OFF )
option( INSTALL_TO_SUBDIR "copy files to subdirectory (${CMAKE_CURRENT_BINARY_DIR}/install)" OFF )
set( INSTALL_PATH "${CMAKE_INSTALL_PREFIX}" CACHE STRING "install path (only used when INSTALL_TO_PATH is set)" )
mark_as_advanced( CMAKE_INSTALL_PREFIX )
if( INSTALL_TO_PATH AND NOT ("${INSTALL_TO}" STREQUAL "path") )# changed to path
set_property( CACHE INSTALL_TO_SOURCE INSTALL_TO_SUBDIR PROPERTY VALUE OFF )
elseif( INSTALL_TO_SOURCE AND NOT ("${INSTALL_TO}" STREQUAL "source") )# changed to source
set_property( CACHE INSTALL_TO_PATH INSTALL_TO_SUBDIR PROPERTY VALUE OFF )
elseif( INSTALL_TO_SUBDIR AND NOT ("${INSTALL_TO}" STREQUAL "subdir") )# changed to subdir
set_property( CACHE INSTALL_TO_PATH INSTALL_TO_SOURCE PROPERTY VALUE OFF )
elseif( NOT INSTALL_TO_PATH AND NOT INSTALL_TO_SOURCE AND NOT INSTALL_TO_SUBDIR )# default
set_property( CACHE INSTALL_TO_SUBDIR PROPERTY VALUE ON )
endif()
if( INSTALL_TO_PATH )
set( INSTALL_TO "path" CACHE INTERNAL "" )
set_property( CACHE CMAKE_INSTALL_PREFIX PROPERTY VALUE "${INSTALL_PATH}" )
elseif( INSTALL_TO_SOURCE )
set( INSTALL_TO "source" CACHE INTERNAL "" )
set_property( CACHE CMAKE_INSTALL_PREFIX PROPERTY VALUE "${CMAKE_CURRENT_SOURCE_DIR}" )
elseif( INSTALL_TO_SUBDIR )
set( INSTALL_TO "subdir" CACHE INTERNAL "" )
set_property( CACHE CMAKE_INSTALL_PREFIX PROPERTY VALUE "${CMAKE_CURRENT_BINARY_DIR}/install" )
endif()
set( SVN_FOLDER_PATTERN "[\\.]svn" CACHE STRING "pattern of svn folder that we exclude from instalations" )
mark_as_advanced( SVN_FOLDER_PATTERN )
set( DEVELOPMENT_FILES
"${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt"
"${CMAKE_CURRENT_SOURCE_DIR}/configure"
"${CMAKE_CURRENT_SOURCE_DIR}/configure.in"
"${CMAKE_CURRENT_SOURCE_DIR}/rAthena.sln"
)
set( DEVELOPMENT_DIRECTORIES
"3rdparty"
"conf/import-tmpl"
"conf/msg_conf/import-tmpl"
"db/import-tmpl"
"src"
)
set( RUNTIME_FILES
"${CMAKE_CURRENT_SOURCE_DIR}/athena-start"
"${CMAKE_CURRENT_SOURCE_DIR}/LICENSE"
"${CMAKE_CURRENT_SOURCE_DIR}/README.md"
)
if (WIN32)
set (RUNTIME_FILES
${RUNTIME_FILES}
"${CMAKE_CURRENT_SOURCE_DIR}/dbghelp.dll"
"${CMAKE_CURRENT_SOURCE_DIR}/libmysql.dll"
"${CMAKE_CURRENT_SOURCE_DIR}/pcre3.dll"
"${CMAKE_CURRENT_SOURCE_DIR}/zlib1.dll"
"${CMAKE_CURRENT_SOURCE_DIR}/tools/charserv.bat"
"${CMAKE_CURRENT_SOURCE_DIR}/tools/logserv.bat"
"${CMAKE_CURRENT_SOURCE_DIR}/tools/mapserv.bat"
"${CMAKE_CURRENT_SOURCE_DIR}/tools/runserver.bat"
"${CMAKE_CURRENT_SOURCE_DIR}/tools/serv.bat"
)
endif(WIN32)
set( RUNTIME_DIRECTORIES
"conf"
"db"
"doc"
"log"
"npc"
"sql-files"
"tools"
)
if( INSTALL_TO_SOURCE )# skip, already in the source dir
else()
if( INSTALL_COMPONENT_RUNTIME )
install( FILES ${RUNTIME_FILES}
DESTINATION "."
COMPONENT Runtime_base )
foreach( DIR IN ITEMS ${RUNTIME_DIRECTORIES} )
if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${DIR}/" )
install( DIRECTORY "${DIR}/"
DESTINATION "${DIR}"
COMPONENT Runtime_base
PATTERN ${SVN_FOLDER_PATTERN} EXCLUDE
PATTERN "conf/import-tmpl" EXCLUDE )
else()
# create empty directory
install( CODE "file(MAKE_DIRECTORY \"\${ENV}\${CMAKE_INSTALL_PREFIX}/${DIR}\")"
COMPONENT Runtime_base )
endif()
endforeach()
endif( INSTALL_COMPONENT_RUNTIME )
if( INSTALL_COMPONENT_DEVELOPMENT )
install( FILES ${DEVELOPMENT_FILES}
DESTINATION "."
COMPONENT Development_base )
foreach( DIR IN ITEMS ${DEVELOPMENT_DIRECTORIES} )
install( DIRECTORY "${DIR}/"
DESTINATION "${DIR}"
COMPONENT Development_base
PATTERN ${SVN_FOLDER_PATTERN} EXCLUDE )
endforeach()
endif( INSTALL_COMPONENT_DEVELOPMENT )
endif()
if( INSTALL_COMPONENT_RUNTIME )
# templates
set( _TEMPLATES
"conf/import-tmpl" "conf/import"
"conf/msg_conf/import-tmpl" "conf/msg_conf/import"
"db/import-tmpl" "db/import"
)
set( INSTALL_TEMPLATES_FILE "${CMAKE_CURRENT_BINARY_DIR}/InstallTemplates.cmake" )
file( WRITE "${INSTALL_TEMPLATES_FILE}"
"macro( INSTALL_TEMPLATE _SRC _DST )\n"
" set( SRC \"${CMAKE_CURRENT_SOURCE_DIR}/\${_SRC}\" )\n"
" set( DST \"\${CMAKE_INSTALL_PREFIX}/\${_DST}\" )\n"
" if( EXISTS \"\${DST}\" )\n"
" message( \"-- Already exists: \${DST}\" )\n"
" else()\n"
" message( \"-- Installing template: \${DST}\" )\n"
" execute_process( COMMAND \"${CMAKE_COMMAND}\" -E copy \"\${SRC}\" \"\${DST}\" )\n"
" endif()\n"
"endmacro()\n"
)
while( _TEMPLATES )
list( GET _TEMPLATES 0 _SRC )
list( GET _TEMPLATES 1 _DST )
list( REMOVE_AT _TEMPLATES 0 1 )
if( IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${_SRC}" )
file( GLOB _PATHS "${CMAKE_CURRENT_SOURCE_DIR}/${_SRC}/*" )
foreach( _PATH IN ITEMS ${_PATHS} )
string( REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/${_SRC}/" "" _PATH "${_PATH}" )
if( NOT "${_PATH}" MATCHES "${SVN_FOLDER_PATTERN}" )
list( APPEND _TEMPLATES "${_SRC}/${_PATH}" "${_DST}/${_PATH}" )
endif()
endforeach()
else()
file( APPEND "${INSTALL_TEMPLATES_FILE}" "INSTALL_TEMPLATE( \"${_SRC}\" \"${_DST}\" )\n" )
endif()
endwhile()
install( SCRIPT "${INSTALL_TEMPLATES_FILE}"
COMPONENT Runtime_templates )
endif( INSTALL_COMPONENT_RUNTIME )
#
# sources
#
set( TARGET_LIST CACHE INTERNAL "" )
add_subdirectory( 3rdparty )
add_subdirectory( src )
#####################################################################
# final checks and warnings
#
list( LENGTH TARGET_LIST _LEN )
if( _LEN EQUAL 0 )
message( FATAL_ERROR "no targets available" )
endif()
message( STATUS "Available targets:" )
foreach( _TARGET IN ITEMS ${TARGET_LIST} )
message( STATUS "\t${_TARGET}" )
endforeach()
add_custom_target(server
DEPENDS login-server char-server map-server web-server scripts
)

View File

@@ -224,4 +224,5 @@ case $1 in
;;
esac
echo "Using the configure scripts and ./athena-start is deprecated. Use CMake and ./athena-start.sh" 1>&2
exit 1

35
conf/CMakeLists.txt Normal file
View File

@@ -0,0 +1,35 @@
include(CopyImportFiles)
set(CONF_FILES_TO_IMPORT
"atcommands.yml"
"battle_conf.txt"
"char_conf.txt"
"groups.yml"
"inter_conf.txt"
"inter_server.yml"
"log_conf.txt"
"login_conf.txt"
"map_conf.txt"
"packet_conf.txt"
"script_conf.txt"
"web_conf.txt")
copy_import_files(${CMAKE_CURRENT_SOURCE_DIR}/import-tmpl/
${CMAKE_CURRENT_SOURCE_DIR}/import
"${CONF_FILES_TO_IMPORT}")
set(MSG_FILES_TO_IMPORT
"map_msg_chn_conf.txt"
"map_msg_eng_conf.txt"
"map_msg_frn_conf.txt"
"map_msg_grm_conf.txt"
"map_msg_idn_conf.txt"
"map_msg_mal_conf.txt"
"map_msg_por_conf.txt"
"map_msg_rus_conf.txt"
"map_msg_spn_conf.txt"
"map_msg_tha_conf.txt")
copy_import_files(${CMAKE_CURRENT_SOURCE_DIR}/msg_conf/import-tmpl/
${CMAKE_CURRENT_SOURCE_DIR}/msg_conf/import
"${MSG_FILES_TO_IMPORT}")

27
conf/battle/instance.conf Normal file
View File

@@ -0,0 +1,27 @@
//--------------------------------------------------------------
// rAthena 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)
//--------------------------------------------------------------
// Block leaving for parties, guilds or clans if they have an active instance?
// Default: yes (Official)
instance_block_leave: yes
// Block leader changes for parties or guilds if they have an active instance?
// Default: yes (Official)
instance_block_leaderchange: yes
// Block inviting for parties or guilds if they have an active instance?
// This also blocks joining parties, guilds or clans that have a running instance.
// Default: yes (Official)
instance_block_invite: yes
// Block expulsion for parties or guilds if they have an active instance?
// Default: yes (Official)
instance_block_expulsion: yes

View File

@@ -93,7 +93,7 @@ allow_equip_restricted_item: yes
// Default on official servers: yes for Pre-renewal, no for Renewal
//item_enabled_npc: yes
// Allow map_flooritem to check if item is droppable? (Note 1)
// Allow map_addflooritem to check if item is droppable? (Note 1)
// If yes, undroppable items will be destroyed instead of appearing on the map when a player's inventory is full.
// Default: yes
item_flooritem_check: yes

View File

@@ -41,6 +41,10 @@ pet_hungry_delay_rate: 100
// These bonuses are unofficial and found in the import/pet_db.yml
pet_equip_required: yes
// Should the pet equipment be destroyed if the owner doesn't have enough space in their inventory? (Note 1)
// Official behavior is "yes", setting this to "no" will leave the item equipped.
pet_unequip_destroy: yes
// When the master attacks a monster, whether or not the pet will also attack. (Note 1)
pet_attack_support: no

View File

@@ -298,12 +298,9 @@ trait_points_job_change: 7
// Official is 100.
max_trait_parameter: 100
// Max amount of RES/MRES to take into the resistance damage reduction formula.
// A setting of 625 means the max reduction of damage allowed is 50.0%.
// Formula is 100 - 100 * (5000 + RES) / (5000 + 10 * RES)
// Note: Best to leave this setting alone unless you know what your doing.
// Default: 625
max_res_mres_reduction: 625
// Max percent of RES/MRES that can be ignored by item bonus/skill.
// Default: 50
max_res_mres_ignored: 50
// Maximum AP
// Default: 1000

View File

@@ -270,8 +270,10 @@ allow_skill_without_day: no
// Allow use of ES-type magic on players?
allow_es_magic_player: no
// Miracle of the Sun, Moon and Stars skill ratio (100% = 10000)
sg_miracle_skill_ratio: 2
// Miracle of the Sun, Moon and Stars skill ratio
// Valid values range from 1 (0.005% per hit) to 20000 (100% per hit)
// This chance is further reduced if AGI is above 46 (92 = halved chance)
sg_miracle_skill_ratio: 1
// Miracle of the Sun, Moon and Stars skill duration in milliseconds
sg_miracle_skill_duration: 3600000

View File

@@ -8,6 +8,9 @@
//General battle-related settings.
import: conf/battle/battle.conf
//Battleground settings
import: conf/battle/battleground.conf
//Settings specific to the client.
import: conf/battle/client.conf
@@ -17,14 +20,20 @@ import: conf/battle/drops.conf
//Experience rates, exp penalties, stats and max level settings.
import: conf/battle/exp.conf
//Feature control (on/off) settings
import: conf/battle/feature.conf
//GM levels, atcommands and hack-related configs.
import: conf/battle/gm.conf
//Guild and WoE settings
import: conf/battle/guild.conf
//Battleground settings
import: conf/battle/battleground.conf
//Homunc related configuration
import: conf/battle/homunc.conf
//Instance settings
import: conf/battle/instance.conf
//Item/card-specific and crafting related options.
import: conf/battle/items.conf
@@ -32,15 +41,16 @@ import: conf/battle/items.conf
//Mob related configuration
import: conf/battle/monster.conf
// Anything else that didn't fit anywhere else.
// Includes duel, day/night, mute/manner, log settings.
import: conf/battle/misc.conf
//Party related configuration
import: conf/battle/party.conf
//Pet related configuration
import: conf/battle/pet.conf
//Homunc related configuration
import: conf/battle/homunc.conf
//Player specific settings
import: conf/battle/player.conf
@@ -50,12 +60,5 @@ import: conf/battle/skill.conf
//Status change related settings
import: conf/battle/status.conf
//Feature control (on/off) settings
import: conf/battle/feature.conf
// Anything else that didn't fit anywhere else.
// Includes duel, day/night, mute/manner, log settings.
import: conf/battle/misc.conf
//Your custom config goes here.
import: conf/import/battle_conf.txt

View File

@@ -144,6 +144,10 @@ unknown_char_name: Unknown
// To log the character server?
log_char: yes
// Minimum length for a character name.
// Must be set to '4' unless your client uses the 'Remove 4/6 letter Character Name limit' diff patch.
char_name_min_length: 4
// Allow or not identical name for characters but with a different case (upper/lower):
// example: Test-test-TEST-TesT; Value: 0 not allowed (default), 1 allowed
name_ignoring_case: no

View File

@@ -55,9 +55,15 @@ console: off
// Note: This only works if client side password encryption is not enabled.
new_account: no
//If new_account is enabled, minimum length to userid and passwords should be 4?
//Must be 'Yes' unless your client uses both 'Disable 4 LetterUserID/Password' Diffs
new_acc_length_limit: yes
// If new_account is enabled, changes the minimum length for the account name.
// By default is set to '4' or '6' (depending on the new login UI).
// Don't change it unless your client uses the 'Remove 4/6 letter User Name limit' diff patch.
//acc_name_min_length: 6
// If new_account is enabled, changes the minimum length for the password.
// By default is set to '4' or '6' (depending on the new login UI).
// Don't change it unless your client uses the 'Remove 4/6 letter Password limit' diff patch.
//password_min_length: 6
// Account registration flood protection system
// allowed_regs is the number of registrations allowed in time_allowed (in seconds)

View File

@@ -1634,5 +1634,8 @@ map: luna_sf1
map: luna_sf2
map: mbase_in
// Market place
map: prt_mk
//------------------------- Clone Maps ---------------------------
//------------------------- Extra Maps ---------------------------

View File

@@ -775,7 +775,7 @@
730: Character cannot be disguised while in monster form.
731: Transforming into monster is not allowed in Guild Wars.
732: Item cannot be opened when your inventory is full.
//732: Free
733: Please enter a NPC file name (usage: @reloadnpcfile <file name>).

View File

@@ -765,7 +765,7 @@
730: Karakter tidak dapat disguise ketika sedang berwujud monster.
731: Perubahan menjadi monster tidak diizinkan dalam Guild Wars.
732: Item tidak dapat dibuka ketika inventory penuh.
//732: Free
//733 free

View File

@@ -779,7 +779,7 @@
730: O personagem não pode ser disfarçado enquanto estiver em forma de monstro.
731: Transformar em monstro não é permitido em GvG.
732: O item não pode ser aberto quando o seu inventário está cheio.
//732: Free
733: Por favor insira um nome de arquivo NPC (uso: @reloadnpcfile <nome do arquivo>).

View File

@@ -775,7 +775,7 @@
730: El personaje no puede disfrazarse si está transformado en un monstruo.
731: No puedes transformarte en monstruo durante la guerra de clanes.
732: No puedes abrir el objeto porque tu inventario está lleno.
//732: libre
733: Introduce la ruta de archivo de un NPC (instrucciones: @reloadnpcfile <ruta>).

72
db/CMakeLists.txt Normal file
View File

@@ -0,0 +1,72 @@
include(CopyImportFiles)
# Why do we list all the files instead of using glob?
# This way, if we add a new file, the build system will know to regenerate
# and the new file will be copied over.
set(DB_FILES_TO_IMPORT
"abra_db.yml"
"achievement_db.yml"
"achievement_level_db.yml"
"attendance.yml"
"attr_fix.yml"
"battleground_db.yml"
"captcha_db.yml"
"castle_db.yml"
"const.yml"
"create_arrow_db.yml"
"elemental_db.yml"
"enchantgrade.yml"
"exp_guild.yml"
"exp_homun.yml"
"guild_skill_tree.yml"
"homunculus_db.yml"
"instance_db.yml"
"item_cash.yml"
"item_combos.yml"
"item_db.yml"
"item_enchant.yml"
"item_group_db.yml"
"item_noequip.txt"
"item_packages.yml"
"item_randomopt_db.yml"
"item_randomopt_group.yml"
"item_reform.yml"
"job_noenter_map.txt"
"job_stats.yml"
"laphine_synthesis.yml"
"laphine_upgrade.yml"
"level_penalty.yml"
"magicmushroom_db.yml"
"map_cache.dat"
"map_drops.yml"
"map_index.txt"
"mercenary_db.yml"
"mob_avail.yml"
"mob_chat_db.yml"
"mob_db.yml"
"mob_item_ratio.yml"
"mob_skill_db.txt"
"mob_summon.yml"
"pet_db.yml"
"produce_db.txt"
"quest_db.yml"
"refine.yml"
"reputation_group.yml"
"reputation.yml"
"size_fix.yml"
"skill_changematerial_db.txt"
"skill_damage_db.txt"
"skill_db.yml"
"skill_nocast_db.txt"
"skill_tree.yml"
"spellbook_db.yml"
"statpoint.yml"
"status_disabled.txt"
"status.yml"
"stylist.yml"
)
copy_import_files(${CMAKE_CURRENT_SOURCE_DIR}/import-tmpl/
${CMAKE_CURRENT_SOURCE_DIR}/import
"${DB_FILES_TO_IMPORT}")

Binary file not shown.

View File

@@ -1260,6 +1260,7 @@ jor_tmple2
luna_sf1
luna_sf2
mbase_in
prt_mk
//======================================================================================
// - Other/Extra maps -

View File

@@ -8637,21 +8637,21 @@ Body:
Type: Usable
Weight: 10
Script: |
searchstores 10,0;
searchstores 10, SEARCHSTORE_EFFECT_NORMAL;
- Id: 12581
AegisName: Vending_Search_Scroll2
Name: Universal Catalog Gold
Type: Usable
Weight: 10
Script: |
searchstores 10,1;
searchstores 10, SEARCHSTORE_EFFECT_REMOTE;
- Id: 12591
AegisName: Uni_Catalog_Bz
Name: Universal Catalog Bronze
Type: Usable
Weight: 10
Script: |
searchstores 10,1;
searchstores 10, SEARCHSTORE_EFFECT_REMOTE;
- Id: 12609
AegisName: Old_Ore_Box
Name: Old Ore Box

View File

@@ -7359,7 +7359,7 @@ Body:
Time: 1500
- Level: 5
Time: 1000
Duration2: 300000
Duration1: 300000
Requires:
SpCost: 1
Weapon:
@@ -8538,6 +8538,7 @@ Body:
HitCount: 1
SplashArea: -1
AfterCastActDelay: 4000
Duration1: 15000
Duration2: 12000
Requires:
SpCost:
@@ -8829,6 +8830,7 @@ Body:
HitCount: 1
SplashArea: -1
AfterCastActDelay: 4000
Duration1: 5000
Duration2: 5000
Requires:
SpCost:

View File

@@ -20852,25 +20852,6 @@ Body:
bonus bMdef,3*.@r_shoes;
bonus bMatk,5*.@r;
}
- Combos:
- Combo:
- Hollow_Shoes
- Berzebub_Card
Script: |
.@r = getrefine();
skill "PR_MAGNUS",10;
bonus2 bMagicAddRace,RC_Undead,30;
bonus2 bMagicAddRace,RC_Demon,30;
bonus2 bMagicAddEle,Ele_Dark,30;
bonus2 bMagicAddEle,Ele_Undead,30;
if (BaseLevel >= 100) {
bonus bMatk,15*.@r;
bonus bVariableCastrate,-7*.@r;
}
else {
bonus bMatk,5*.@r;
bonus bVariableCastrate,-2*.@r;
}
- Combos:
- Combo:
- Astraea_Ring
@@ -21746,7 +21727,7 @@ Body:
if (.@sum >= 27) {
bonus3 bAutoSpell,"HW_NAPALMVULCAN",5,80;
}
else if (.@sum >= 27) {
else if (.@sum >= 21) {
bonus3 bAutoSpell,"HW_NAPALMVULCAN",3,40;
}
- Combos:
@@ -21760,7 +21741,7 @@ Body:
if (.@sum >= 27) {
bonus3 bAutoSpell,"AS_SONICBLOW",10,80;
}
else if (.@sum >= 27) {
else if (.@sum >= 21) {
bonus3 bAutoSpell,"AS_SONICBLOW",7,40;
}
- Combos:
@@ -21770,10 +21751,10 @@ Body:
Script: |
.@sum = getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_SHOES);
bonus bMatkRate,2;
if (.@sum >= 27) {
if (.@sum >= 20) {
bonus3 bAutoSpell,"WL_JACKFROST",max(getskilllv("WL_JACKFROST"),4),80;
}
else if (.@sum >= 27) {
else if (.@sum >= 18) {
bonus3 bAutoSpell,"WL_JACKFROST",max(getskilllv("WL_JACKFROST"),2),40;
}
- Combos:
@@ -28403,7 +28384,7 @@ Body:
bonus bVariableCastrate,-10;
- Combos:
- Combo:
- aegis_490220 # 490220
- Hero_Token_HN # 490220
- Blessed_Knife_LT # 510072
Script: |
bonus2 bAddSize,Size_All,15;
@@ -28418,7 +28399,7 @@ Body:
}
- Combos:
- Combo:
- aegis_490220 # 490220
- Hero_Token_HN # 490220
- Freedom_Stick_LT # 550082
Script: |
bonus2 bMagicAddSize,Size_All,15;
@@ -46539,6 +46520,7 @@ Body:
Script: |
bonus2 bAddEle,Ele_All,20;
bonus bAspdRate,5;
bonus2 bSkillAtk,"TR_ROSEBLOSSOM",40;
bonus2 bSkillAtk,"TR_ROSEBLOSSOM_ATK",40;
bonus2 bSkillAtk,"TR_RHYTHMSHOOTING",20;
- Combos:
@@ -47407,6 +47389,7 @@ Body:
Script: |
bonus2 bSkillAtk,"TR_RHYTHMSHOOTING",25;
bonus2 bSkillAtk,"TR_ROSEBLOSSOM",25;
bonus2 bSkillAtk,"TR_ROSEBLOSSOM_ATK",25;
bonus2 bSubRace,RC_Player_Human,10;
bonus2 bSubRace,RC_Player_Doram,10;
- Combos:
@@ -50872,14 +50855,6 @@ Body:
bonus bMaxHP,2000;
bonus bMaxSP,200;
bonus bHealPower,15;
- Combos:
- Combo:
- aegis_311883 # 311883
- aegis_410302 # 410302
Script: |
bonus bSpeedRate,25;
bonus2 bSubRace,RC_Player_Human,5;
bonus2 bSubRace,RC_Player_Doram,5;
- Combos:
- Combo:
- R001_Bestia_Card # 300281
@@ -51483,12 +51458,6 @@ Body:
bonus bMatk,15*.@eq;
bonus bVariableCastrate,-7*.@eq;
}
- Combos:
- Combo:
- Berzebub_Card # 4145
- VesperHeadGear # 19436
Script: |
bonus bVariableCastrate,30;
- Combos:
- Combo:
- Preschool_Hat # 18860
@@ -52035,3 +52004,206 @@ Body:
- Ignis_Cap # 18651
Script: |
bonus bAspdRate,getequiprefinerycnt(EQI_HEAD_TOP)/2;
- Combos:
- Combo:
- FuriousCirclet_TR # 400673
- MetalVilolin_Furious # 570072
- Combo:
- FuriousCirclet_TR # 400673
- MetalWhip_Furious # 580072
Script: |
bonus2 bMagicAddRace,RC_All,10;
bonus2 bMagicAddRace,RC_Player_Human,-10;
bonus2 bMagicAddRace,RC_Player_Doram,-10;
bonus2 bSkillAtk,"WM_REVERBERATION",35;
- Combos:
- Combo:
- FuriousCirclet_TR # 400673
- Harp_Furious # 570073
- Combo:
- FuriousCirclet_TR # 400673
- Whip_Furious # 580073
Script: |
bonus2 bAddRace,RC_All,10;
bonus2 bAddRace,RC_Player_Human,-10;
bonus2 bAddRace,RC_Player_Doram,-10;
- Combos:
- Combo:
- FuriousCirclet_BO # 400674
- Lapier_Furious # 500101
Script: |
bonus2 bSkillCooldown,"BO_EXPLOSIVE_POWDER",-120;
- Combos:
- Combo:
- FuriousCirclet_BO # 400674
- SharpSword_Furious # 500102
Script: |
bonus2 bSkillCooldown,"BO_MAYHEMIC_THORNS",-120;
- Combos:
- Combo:
- FuriousCirclet_HN # 400675
- WhiteSword_Furious # 500103
Script: |
bonus2 bSkillCooldown,"HN_DOUBLEBOWLINGBASH",-150;
- Combos:
- Combo:
- FuriousCirclet_HN # 400675
- Stick_Furious # 550148
Script: |
bonus2 bSkillCooldown,"HN_JUPITEL_THUNDER_STORM",-250;
- Combos:
- Combo:
- FuriousCirclet_AG # 400694
- Specter_Furious # 550150
Script: |
bonus2 bMagicAddRace,RC_All,10;
bonus2 bMagicAddRace,RC_Player_Human,-10;
bonus2 bMagicAddRace,RC_Player_Doram,-10;
- Combos:
- Combo:
- FuriousCirclet_AG # 400694
- Flame_Staff_Furious # 640053
Script: |
bonus2 bSkillAtk,"AG_ALL_BLOOM",25;
bonus2 bSkillAtk,"AG_ALL_BLOOM_ATK",25;
bonus2 bSkillAtk,"AG_ALL_BLOOM_ATK2",25;
- Combos:
- Combo:
- FuriousCirclet_IQ # 400695
- GaleClaw_Furious # 560067
Script: |
bonus2 bSkillCooldown,"IQ_MASSIVE_F_BLASTER",-1200;
bonus2 bSkillAtk,"IQ_MASSIVE_F_BLASTER",20;
- Combos:
- Combo:
- FuriousCirclet_IQ # 400695
- Exterminate_Furious # 560068
Script: |
bonus2 bSkillAtk,"IQ_THIRD_FLAME_BOMB",25;
- Combos:
- Combo:
- FuriousCirclet_NW # 400696
- Rifle_Furious # 810042
Script: |
bonus2 bSkillAtk,"NW_ONLY_ONE_BULLET",25;
- Combos:
- Combo:
- FuriousCirclet_NW # 400696
- Gatling_Furious # 830038
Script: |
bonus2 bAddRace,RC_All,10;
bonus2 bAddRace,RC_Player_Human,-10;
bonus2 bAddRace,RC_Player_Doram,-10;
bonus2 bSkillAtk,"NW_MAGAZINE_FOR_ONE",15;
- Combos:
- Combo:
- Lapier_Furious # 500101
- FuriousBoots # 470265
Script: |
.@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_HEAD_TOP);
bonus2 bSkillAtk,"BO_EXPLOSIVE_POWDER",.@sum;
- Combos:
- Combo:
- SharpSword_Furious # 500102
- FuriousBoots # 470265
Script: |
bonus bCritAtkRate,15;
bonus bCritical,5;
if (getenchantgrade()>=ENCHANTGRADE_B) {
bonus2 bSkillAtk,"BO_MAYHEMIC_THORNS",15;
}
- Combos:
- Combo:
- WhiteSword_Furious # 500103
- FuriousBoots # 470265
Script: |
.@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_SHOES);
bonus2 bSkillAtk,"HN_DOUBLEBOWLINGBASH",.@sum;
- Combos:
- Combo:
- Stick_Furious # 550148
- FuriousBoots # 470265
Script: |
bonus2 bSkillAtk,"HN_HELLS_DRIVE",20;
if (getenchantgrade()>=ENCHANTGRADE_B) {
bonus4 bAutoSpellOnSkill,"HN_HELLS_DRIVE","EM_TERRA_DRIVE",4,1000;
}
- Combos:
- Combo:
- Specter_Furious # 550150
- FuriousBoots # 470265
Script: |
bonus2 bSkillAtk,"AG_SOUL_VC_STRIKE",20;
- Combos:
- Combo:
- GaleClaw_Furious # 560067
- FuriousBoots # 470265
Script: |
bonus2 bSkillAtk,"IQ_MASSIVE_F_BLASTER",20;
- Combos:
- Combo:
- Exterminate_Furious # 560068
- FuriousBoots # 470265
Script: |
.@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_SHOES);
bonus2 bSkillAtk,"IQ_THIRD_FLAME_BOMB",.@sum;
- Combos:
- Combo:
- MetalVilolin_Furious # 570072
- FuriousBoots # 470265
Script: |
bonus2 bSkillAtk,"WM_REVERBERATION",70;
bonus2 bSkillAtk,"TR_METALIC_FURY",20;
- Combos:
- Combo:
- Harp_Furious # 570073
- FuriousBoots # 470265
Script: |
.@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_SHOES);
bonus2 bSkillAtk,"TR_ROSEBLOSSOM",.@sum;
bonus2 bSkillAtk,"TR_ROSEBLOSSOM_ATK",.@sum;
- Combos:
- Combo:
- MetalWhip_Furious # 580072
- FuriousBoots # 470265
Script: |
bonus2 bSkillAtk,"WM_REVERBERATION",70;
bonus2 bSkillAtk,"TR_METALIC_FURY",20;
- Combos:
- Combo:
- Whip_Furious # 580073
- FuriousBoots # 470265
Script: |
.@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_SHOES);
bonus2 bSkillAtk,"TR_ROSEBLOSSOM",.@sum;
bonus2 bSkillAtk,"TR_ROSEBLOSSOM_ATK",.@sum;
- Combos:
- Combo:
- Flame_Staff_Furious # 640053
- FuriousBoots # 470265
Script: |
.@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_HEAD_TOP);
bonus2 bSkillAtk,"AG_ALL_BLOOM",.@sum;
bonus2 bSkillAtk,"AG_ALL_BLOOM_ATK",.@sum;
bonus2 bSkillAtk,"AG_ALL_BLOOM_ATK2",.@sum;
- Combos:
- Combo:
- Rifle_Furious # 810042
- FuriousBoots # 470265
Script: |
bonus2 bSkillAtk,"NW_ONLY_ONE_BULLET",25;
- Combos:
- Combo:
- Gatling_Furious # 830038
- FuriousBoots # 470265
Script: |
bonus2 bSkillAtk,"NW_MAGAZINE_FOR_ONE",25;
bonus2 bSkillAtk,"NW_THE_VIGILANTE_AT_NIGHT",15;
- Combos:
- Combo:
- aegis_300549 # 300549
- Sesrumnir_Evt_Ring # 490557
Script: |
bonus bShortAtkRate,7;
bonus bLongAtkRate,7;
bonus2 bMagicAtkEle,Ele_All,7;

File diff suppressed because it is too large Load Diff

View File

@@ -14232,7 +14232,7 @@ Body:
Type: Card
SubType: Enchant
Script: |
autobonus2 "{ bonus bStr,200; bonus2 bHPLossRate,500,1000; }",20,5000,BF_WEAPON,"{ active_transform 1060,5000; specialeffect2 EF_POTION_BERSERK; showscript \"Bigfoot Power !\"; }";
autobonus2 "{ bonus bStr,200; bonus2 bHPLossRate,500,1000; }",20,5000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }";
UnEquipScript: |
heal 0,-300;
- Id: 4876
@@ -50596,8 +50596,8 @@ Body:
Script: |
bonus2 bAddRace,RC_Demon,40;
bonus2 bAddRace,RC_DemiHuman,40;
bonus3 bSubRace,RC_Demon,-30,BF_NORMAL;
bonus3 bSubRace,RC_DemiHuman,-30,BF_NORMAL;
bonus3 bSubRace,RC_Demon,-30,BF_WEAPON;
bonus3 bSubRace,RC_DemiHuman,-30,BF_WEAPON;
- Id: 300281
AegisName: R001_Bestia_Card
Name: R001-Bestia Card
@@ -53760,6 +53760,20 @@ Body:
bonus bMaxHPrate,-15;
bonus bPAtk,.@r;
bonus bAtkRate,.@r;
- Id: 300549
AegisName: aegis_300549
Name: Summer Vacation Pope Card
Type: Card
Weight: 10
Locations:
Left_Accessory: true
Flags:
BuyingStore: true
DropEffect: CLIENT
Script: |
bonus bShortAtkRate,3;
bonus bLongAtkRate,3;
bonus2 bMagicAtkEle,Ele_All,3;
- Id: 310000
AegisName: Ranger_Top2
Name: Sniper Stone II (Top)
@@ -83045,6 +83059,42 @@ Body:
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1000284
AegisName: EpisodClear13
Name: Eps 13 Clear Ticket
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoSell: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1000285
AegisName: EpisodClear14
Name: Eps 14 Clear Ticket
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoSell: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1000286
AegisName: EpisodClear15
Name: Eps 15 Clear Ticket
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoSell: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1000287
AegisName: EpisodClear17
Name: Episode 17 Clear Ticket
@@ -89781,6 +89831,402 @@ Body:
Weight: 1
Flags:
BuyingStore: true
- Id: 1001689
AegisName: R_Snowflower_Armor
Name: Printed Snow Flower Armor
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001690
AegisName: R_Snowflower_Manteau
Name: Printed Snow Flower Manteau
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001691
AegisName: R_Snowflower_Boots
Name: Printed Snow Flower Boots
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001692
AegisName: R_Snowflower_Pendant
Name: Printed Snow Flower Pendant
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001693
AegisName: R_Snowflower_Necklace
Name: Printed Snow Flower Necklace
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001694
AegisName: R_Snowflower_Robe
Name: Printed Snow Flower Robe
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001695
AegisName: R_Snowflower_Muffler
Name: Printed Snow Flower Muffler
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001696
AegisName: R_Snowflower_Shoes
Name: Printed Snow Flower Shoes
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001697
AegisName: R_Snowflower_Ring
Name: Printed Snow Flower Ring
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001698
AegisName: R_Snowflower_Earring
Name: Printed Snow Flower Earring
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001699
AegisName: R_Glacier_T_Sword
Name: Printed Glacier Two-handed Sword
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001700
AegisName: R_Glacier_Lance
Name: Printed Glacier Lance
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001701
AegisName: R_Glacier_Sword
Name: Printed Glacier Sword
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001702
AegisName: R_Glacier_B_Sword
Name: Printed Glacier Basic Sword
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001703
AegisName: R_Glacier_Spear
Name: Printed Glacier Spear
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001704
AegisName: R_Glacier_T_Axe
Name: Printed Glacier Mechanic Axe
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001705
AegisName: R_Glacier_Axe
Name: Printed Glacier Axe
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001706
AegisName: R_Glacier_Mace
Name: Printed Glacier Mace
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001707
AegisName: R_Glacier_M_Mace
Name: Printed Glacier Mechanic Mace
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001708
AegisName: R_Glacier_R_Knife
Name: Printed Glacier Rogue Knife
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001709
AegisName: R_Glacier_B_Knife
Name: Printed Glacier Basic Knife
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001710
AegisName: R_Glacier_Knuckle
Name: Printed Glacier Knuckle
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001711
AegisName: R_Glacier_Katar
Name: Printed Glacier Katar
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001712
AegisName: R_Glacier_Bow
Name: Printed Glacier Bow
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001713
AegisName: R_Glacier_Violin
Name: Printed Glacier Violin
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001714
AegisName: R_Glacier_Whip
Name: Printed Glacier Whip
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001715
AegisName: R_Glacier_Humma
Name: Printed Glacier Huuma Shuriken
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001716
AegisName: R_Glacier_Book
Name: Printed Glacier Book
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001717
AegisName: R_Glacier_Wand
Name: Printed Glacier Wand
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001718
AegisName: R_Glacier_Staff
Name: Printed Glacier Staff
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001719
AegisName: R_Glacier_Foxtail
Name: Printed Glacier Foxtail
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001720
AegisName: R_Glacier_Revolver
Name: Printed Glacier Revolver
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001721
AegisName: R_Glacier_Rifle
Name: Printed Glacier Rifle
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001722
AegisName: R_Glacier_Shotgun
Name: Printed Glacier Shotgun
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001723
AegisName: R_Glacier_Gatling
Name: Printed Glacier Gatling
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001724
AegisName: R_Glacier_Launcher
Name: Printed Glacier Launcher
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001737
AegisName: BioloStone_Robe
Name: Biolo Stone (Garment)
@@ -89796,6 +90242,38 @@ Body:
Name: Spirit Handler Stone (Garment)
Type: Etc
Weight: 100
- Id: 1001740
AegisName: Summer_Ticket
Name: Ocean Week Commemoration Ticket
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoStorage: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001741
AegisName: Summer_W_Melon
Name: Summer Watermelon
Type: Etc
Weight: 10
Trade:
NoDrop: true
NoTrade: true
NoCart: true
NoStorage: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001742
AegisName: aegis_1001742
Name: Festival Food Bag
Type: Etc
Weight: 10
Flags:
BuyingStore: true
- Id: 1001744
AegisName: Kr_B_Event04
Name: Sweet Strawberry Fresh Cream
@@ -89808,6 +90286,42 @@ Body:
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001753
AegisName: D_EpisodClear13
Name: Episode 13 Pass Ticket # !todo check english name
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoSell: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001755
AegisName: D_EpisodClear14
Name: Episode 14 Pass Ticket # !todo check english name
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoSell: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1001756
AegisName: D_EpisodClear15
Name: Episode 15 Pass Ticket # !todo check english name
Type: Etc
Trade:
NoDrop: true
NoTrade: true
NoSell: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 1200000
AegisName: IDTest_arrow
Name: IDTest arrow

View File

@@ -4371,6 +4371,38 @@ Body:
BuyingStore: true
# Script: |
# /* TODO */
- Id: 11636
AegisName: 24_S_Ev_Lime_Soda
Name: Lime Soda
Type: Healing
Weight: 1
EquipLevelMin: 90
Trade:
NoDrop: true
NoTrade: true
NoSell: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
Script: |
itemheal 1800,0; /* average value */
- Id: 11637
AegisName: 24_S_Ev_Berry_Soda
Name: Berry Soda
Type: Healing
Weight: 1
EquipLevelMin: 90
Trade:
NoDrop: true
NoTrade: true
NoSell: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
Script: |
itemheal 0,180; /* average value */
- Id: 11701
AegisName: Girl_Bunch_Of_Flower
Name: Girl's Bouquet
@@ -5700,7 +5732,6 @@ Body:
AegisName: Tropical_Sograt
Name: Tropical Sograt
Type: Usable
Buy: 1000
Weight: 100
Flags:
BuyingStore: true
@@ -5710,7 +5741,6 @@ Body:
AegisName: Vermilion_The_Beach
Name: Vermilion on the Beach
Type: Usable
Buy: 1000
Weight: 100
Flags:
BuyingStore: true
@@ -11335,7 +11365,7 @@ Body:
Type: Usable
Weight: 10
Script: |
searchstores 10,0;
searchstores 10, SEARCHSTORE_EFFECT_NORMAL;
- Id: 12581
AegisName: Vending_Search_Scroll2
Name: Universal Catalog Gold
@@ -11350,7 +11380,7 @@ Body:
NoMail: true
NoAuction: true
Script: |
searchstores 10,1;
searchstores 10, SEARCHSTORE_EFFECT_REMOTE;
- Id: 12582
AegisName: Siege_Supply_Box
Name: WoE Supply Box
@@ -11494,7 +11524,7 @@ Body:
NoMail: true
NoAuction: true
Script: |
searchstores 10,1;
searchstores 10, SEARCHSTORE_EFFECT_REMOTE;
- Id: 12592
AegisName: Cyclops_Box1
Name: Cyclops Box1
@@ -51130,8 +51160,8 @@ Body:
NoGuildStorage: true
NoMail: true
NoAuction: true
# Script: |
# /* TODO */
Script: |
getitem 5464,1;
- Id: 17203
AegisName: Free_Pass_Box
Name: Free Pass Box
@@ -63090,7 +63120,6 @@ Body:
AegisName: Vend_Arbeit1_1Lv
Name: "[1 Day] Consignment Merchant Envelope Lv1"
Type: Usable
Weight: 10
Flags:
Container: true
Script: |
@@ -63099,7 +63128,6 @@ Body:
AegisName: Vend_Arbeit1_2Lv
Name: "[1 Day] Consignment Merchant Envelope Lv2"
Type: Usable
Weight: 10
Flags:
Container: true
Script: |
@@ -63108,7 +63136,6 @@ Body:
AegisName: Vend_Arbeit1_3Lv
Name: "[1 Day] Consignment Merchant Envelope Lv3"
Type: Usable
Weight: 10
Flags:
Container: true
Script: |
@@ -63117,7 +63144,6 @@ Body:
AegisName: Buy_Arbeit1_1Lv
Name: "[1 Day] Personal Shopper Envelope Lv1"
Type: Usable
Weight: 10
Flags:
Container: true
Script: |
@@ -63126,7 +63152,6 @@ Body:
AegisName: Buy_Arbeit1_2Lv
Name: "[1 Day] Personal Shopper Envelope Lv2"
Type: Usable
Weight: 10
Flags:
Container: true
Script: |
@@ -63135,7 +63160,6 @@ Body:
AegisName: Buy_Arbeit1_3Lv
Name: "[1 Day] Personal Shopper Envelope Lv3"
Type: Usable
Weight: 10
Flags:
Container: true
Script: |
@@ -63234,7 +63258,6 @@ Body:
AegisName: Vend_Arbeit3_1Lv
Name: "[3 Day] Consignment Merchant Envelope Lv1"
Type: Usable
Weight: 10
Flags:
Container: true
Script: |
@@ -63243,7 +63266,6 @@ Body:
AegisName: Vend_Arbeit3_2Lv
Name: Consignment Merchant Envelope
Type: Usable
Weight: 10
Flags:
Container: true
Script: |
@@ -63252,7 +63274,6 @@ Body:
AegisName: Vend_Arbeit3_3Lv
Name: "[3 Day] Consignment Merchant Envelope Lv3"
Type: Usable
Weight: 10
Flags:
Container: true
Script: |
@@ -63261,7 +63282,6 @@ Body:
AegisName: Buy_Arbeit3_1Lv
Name: "[3 Day] Personal Shopper Envelope Lv1"
Type: Usable
Weight: 10
Flags:
Container: true
Script: |
@@ -63270,7 +63290,6 @@ Body:
AegisName: Buy_Arbeit3_2Lv
Name: Personal Shopper Envelope
Type: Usable
Weight: 10
Flags:
Container: true
Script: |
@@ -63279,7 +63298,6 @@ Body:
AegisName: Buy_Arbeit3_3Lv
Name: "[3 Day] Personal Shopper Envelope Lv3"
Type: Usable
Weight: 10
Flags:
Container: true
Script: |
@@ -63385,8 +63403,8 @@ Body:
Name: Special Shopper Catalog
Type: Usable
Weight: 10
# Script: |
# /* TODO */
Script: |
searchstores 3, SEARCHSTORE_EFFECT_NORMAL;
- Id: 23374
AegisName: Fire_Armor_S
Name: Fire Armor Scroll
@@ -68476,8 +68494,8 @@ Body:
Weight: 10
Flags:
BuyingStore: true
# Script: |
# /* TODO */
Script: |
sc_start SC_EXPBOOST,900000,100;
- Id: 100352
AegisName: Real_Battle_Manual
Name: Real Combat Manual
@@ -68485,8 +68503,9 @@ Body:
Weight: 10
Flags:
BuyingStore: true
# Script: |
# /* TODO */
Script: |
sc_start SC_EXPBOOST,3600000,100;
sc_start SC_SPEEDUP0,600000,25;
- Id: 100354
AegisName: Auto_Armor_Refine_Cube
Name: Automatic Armor +11 Refinement Cube
@@ -70339,8 +70358,8 @@ Body:
Weight: 50
Flags:
BuyingStore: true
# Script: |
# /* TODO */
Script: |
pet 1198;
- Id: 100810
AegisName: BroadcastBox_
Name: Broadcast Box
@@ -72635,8 +72654,8 @@ Body:
Name: Spring Regulator
Type: Usable
Weight: 10
# Script: |
# /* TODO */
Script: |
item_enchant(24);
- Id: 101100
AegisName: Poenetentia_Box3
Name: Poenitentia Two Swords Set Box
@@ -73601,6 +73620,7 @@ Body:
Flags:
BuyingStore: true
Script: |
/* TODO : pet 21632; */
pet 1005;
- Id: 101336
AegisName: aegis_101336
@@ -76680,23 +76700,31 @@ Body:
Script: |
item_reform();
- Id: 102128
AegisName: aegis_102128
AegisName: All_In_One_buff
Name: All-in-One Buff Potion # !todo check english name
Type: Usable
Weight: 10
Flags:
BuyingStore: true
# Script: |
# /* TODO */
Script: |
specialeffect2 EF_POTION_BERSERK;
sc_start SC_M_DEFSCROLL,3600000,0;
sc_start SC_LIMIT_POWER_BOOSTER,3600000,30;
sc_start SC_INFINITY_DRINK,3600000,0;
sc_start SC_SPEEDUP0,600000,25;
- Id: 102129
AegisName: aegis_102129
AegisName: All_In_One_Healing
Name: All-in-one Healing Potion # !todo check english name
Type: Usable
Weight: 10
Flags:
BuyingStore: true
# Script: |
# /* TODO */
Script: |
specialeffect2 EF_HEAL3;
sc_start2 SC_S_LIFEPOTION,3600000,-5,5;
sc_start2 SC_L_LIFEPOTION,3600000,-7,4;
sc_start2 SC_M_LIFEPOTION,3600000,-4,3;
sc_start SC_SPEEDUP0,600000,25;
- Id: 102193
AegisName: aegis_102193
Name: Costume Enchant Stone Box 30
@@ -78650,6 +78678,99 @@ Body:
Container: true
Script: |
getgroupitem(IG_ENCHANT_STONE_BOX35);
- Id: 103065
AegisName: 24_S_Ev_Noodle
Name: Summer Festival Noodle
Type: Usable
Weight: 10
Trade:
NoDrop: true
NoTrade: true
NoSell: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 103066
AegisName: 24_S_Ev_Grilled
Name: Herb Calamari Barbecue
Type: Usable
Weight: 10
Trade:
NoDrop: true
NoTrade: true
NoSell: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 103067
AegisName: 24_S_Ev_Podding
Name: Sweet Watermelon Pudding
Type: Usable
Weight: 10
Trade:
NoDrop: true
NoTrade: true
NoSell: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 103068
AegisName: 24_S_Ev_Juice
Name: Cool Watermelon Juice
Type: Usable
Weight: 10
Trade:
NoDrop: true
NoTrade: true
NoSell: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 103069
AegisName: 24_S_Ev_IceFlake
Name: Cool Red Beans Bingsu
Type: Usable
Weight: 10
Trade:
NoDrop: true
NoTrade: true
NoSell: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 103070
AegisName: 24_S_Ev_Pop_Corn
Name: Gourmet Butter Popcorn
Type: Usable
Weight: 10
Trade:
NoDrop: true
NoTrade: true
NoSell: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 103071
AegisName: 24_S_Ev_Ripe_Melon
Name: Ripe Golden Melon
Type: Usable
Weight: 50
Trade:
NoDrop: true
NoTrade: true
NoSell: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
Script: |
percentheal 100,100;
- Id: 103095
AegisName: Kr_B_Special10
Name: Love Cake
@@ -78662,6 +78783,78 @@ Body:
NoGuildStorage: true
NoMail: true
NoAuction: true
- Id: 103106
AegisName: Stove_Channeling_Box_1
Name: Channeling Commemoration Box I
Type: Usable
Weight: 400
Flags:
Container: true
Trade:
NoDrop: true
NoTrade: true
NoSell: true
NoCart: true
NoStorage: true
NoGuildStorage: true
NoMail: true
NoAuction: true
Script: |
getgroupitem(IG_STOVE_CHANNELING_BOX_1);
- Id: 103107
AegisName: Stove_Channeling_Box_2
Name: Channeling Commemoration Box II
Type: Usable
Weight: 400
Flags:
Container: true
Trade:
NoDrop: true
NoTrade: true
NoSell: true
NoCart: true
NoStorage: true
NoGuildStorage: true
NoMail: true
NoAuction: true
Script: |
getgroupitem(IG_STOVE_CHANNELING_BOX_2);
- Id: 103108
AegisName: Stove_Channeling_Box_3
Name: Channeling Commemoration Box III
Type: Usable
Weight: 400
Flags:
Container: true
Trade:
NoDrop: true
NoTrade: true
NoSell: true
NoCart: true
NoStorage: true
NoGuildStorage: true
NoMail: true
NoAuction: true
Script: |
getgroupitem(IG_STOVE_CHANNELING_BOX_3);
- Id: 103109
AegisName: Stove_Channeling_Box_4
Name: Channeling Commemoration Box IV
Type: Usable
Weight: 400
Flags:
Container: true
Trade:
NoDrop: true
NoTrade: true
NoSell: true
NoCart: true
NoStorage: true
NoGuildStorage: true
NoMail: true
NoAuction: true
Script: |
getgroupitem(IG_STOVE_CHANNELING_BOX_4);
- Id: 200000
AegisName: IDTest_Cash
Name: IDTest Cash
@@ -80789,6 +80982,8 @@ Body:
# Name: (Limited) Nyangvine Fruit Package I (Stone Box 35)
Name: (Limited) Nyangvine Fruit Package I (Stone Box 35
Type: Cash
Flags:
Container: true
Trade:
NoDrop: true
NoTrade: true
@@ -80798,12 +80993,14 @@ Body:
NoMail: true
NoAuction: true
Script: |
/* TODO */
getgroupitem(IG_LI_NYANGVINE_BOX1_35);
- Id: 200406
AegisName: LI_Nyangvine_Box2_35
# Name: (Limited) Nyangvine Fruit Package II (Stone Box 35)
Name: (Limited) Nyangvine Fruit Package II (Stone Box 3
Type: Cash
Flags:
Container: true
Trade:
NoDrop: true
NoTrade: true
@@ -80813,12 +81010,14 @@ Body:
NoMail: true
NoAuction: true
Script: |
/* TODO */
getgroupitem(IG_LI_NYANGVINE_BOX2_35);
- Id: 200407
AegisName: LI_Nyangvine_Box3_35
# Name: (Limited) Nyangvine Fruit Package III (Stone Box 35)
Name: (Limited) Nyangvine Fruit Package III (Stone Box
Type: Cash
Flags:
Container: true
Trade:
NoDrop: true
NoTrade: true
@@ -80828,12 +81027,14 @@ Body:
NoMail: true
NoAuction: true
Script: |
/* TODO */
getgroupitem(IG_LI_NYANGVINE_BOX3_35);
- Id: 200411
AegisName: A_Speed_Booster_Box
Name: Speed Booster Package
Type: Cash
Weight: 10
Flags:
Container: true
Trade:
NoDrop: true
NoTrade: true
@@ -80843,12 +81044,14 @@ Body:
NoMail: true
NoAuction: true
Script: |
/* TODO */
getgroupitem(IG_A_SPEED_BOOSTER_BOX);
- Id: 200412
AegisName: A_Speed_Booster_10_Box
Name: Speed Booster Package 10 Sets
Type: Cash
Weight: 10
Flags:
Container: true
Trade:
NoDrop: true
NoTrade: true
@@ -80858,11 +81061,13 @@ Body:
NoMail: true
NoAuction: true
Script: |
/* TODO */
getgroupitem(IG_A_SPEED_BOOSTER_10_BOX);
- Id: 200415
AegisName: L_Infinity_Power_Pack
Name: (Limited) Infinity Power Package
Type: Cash
Flags:
Container: true
Trade:
NoDrop: true
NoTrade: true
@@ -80872,11 +81077,13 @@ Body:
NoMail: true
NoAuction: true
Script: |
/* TODO */
getgroupitem(IG_L_INFINITY_POWER_PACK);
- Id: 200416
AegisName: L_All_Red_Pack
Name: (Limited) All Red Package
Type: Cash
Flags:
Container: true
Trade:
NoDrop: true
NoTrade: true
@@ -80886,11 +81093,13 @@ Body:
NoMail: true
NoAuction: true
Script: |
/* TODO */
getgroupitem(IG_L_ALL_RED_PACK);
- Id: 200417
AegisName: L_Defense_Potion_Pack
Name: (Limited) Defender Package
Type: Cash
Flags:
Container: true
Trade:
NoDrop: true
NoTrade: true
@@ -80900,11 +81109,13 @@ Body:
NoMail: true
NoAuction: true
Script: |
/* TODO */
getgroupitem(IG_L_DEFENSE_POTION_PACK);
- Id: 200418
AegisName: L_Speed_Force_Pack
Name: (Limited) Speed Force Package
Type: Cash
Flags:
Container: true
Trade:
NoDrop: true
NoTrade: true
@@ -80914,11 +81125,13 @@ Body:
NoMail: true
NoAuction: true
Script: |
/* TODO */
getgroupitem(IG_L_SPEED_FORCE_PACK);
- Id: 200419
AegisName: L_Special_Speed_Pack
Name: (Limited) Speed Booster Special Package
Type: Cash
Flags:
Container: true
Trade:
NoDrop: true
NoTrade: true
@@ -80928,11 +81141,13 @@ Body:
NoMail: true
NoAuction: true
Script: |
/* TODO */
getgroupitem(IG_L_SPECIAL_SPEED_PACK);
- Id: 200420
AegisName: L_Special_Force_Pack
Name: (Limited) Force Booster Special Package
Type: Cash
Flags:
Container: true
Trade:
NoDrop: true
NoTrade: true
@@ -80942,7 +81157,58 @@ Body:
NoMail: true
NoAuction: true
Script: |
/* TODO */
getgroupitem(IG_L_SPECIAL_FORCE_PACK);
- Id: 200425
AegisName: CostumeMilePack_35_1
# Name: Nyangvine Costume Mileage Package I (Stone Box 35)
Name: Nyangvine Costume Mileage Package I (Stone Box 35
Type: Cash
Flags:
Container: true
Trade:
NoDrop: true
NoTrade: true
NoSell: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
Script: |
getgroupitem(IG_COSTUMEMILEPACK_35_1);
- Id: 200426
AegisName: CostumeMilePack_35_2
# Name: Nyangvine Costume Mileage Package II (Stone Box 35)
Name: Nyangvine Costume Mileage Package II (Stone Box 3
Type: Cash
Flags:
Container: true
Trade:
NoDrop: true
NoTrade: true
NoSell: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
Script: |
getgroupitem(IG_COSTUMEMILEPACK_35_2);
- Id: 200427
AegisName: CostumeMilePack_35_3
# Name: Nyangvine Costume Mileage Package III (Stone Box 35)
Name: Nyangvine Costume Mileage Package III (Stone Box
Type: Cash
Flags:
Container: true
Trade:
NoDrop: true
NoTrade: true
NoSell: true
NoCart: true
NoGuildStorage: true
NoMail: true
NoAuction: true
Script: |
getgroupitem(IG_COSTUMEMILEPACK_35_3);
- Id: 1100000
AegisName: IDTest_heal
Name: IDTest heal

View File

@@ -32187,6 +32187,20 @@ Body:
Grimoire_Furious: true
Soul_Furious: true
SpiritStick_Furious: true
Lapier_Furious: true
SharpSword_Furious: true
WhiteSword_Furious: true
Stick_Furious: true
MetalVilolin_Furious: true
Harp_Furious: true
MetalWhip_Furious: true
Whip_Furious: true
Flame_Staff_Furious: true
Rifle_Furious: true
Gatling_Furious: true
Specter_Furious: true
GaleClaw_Furious: true
Exterminate_Furious: true
Reset:
Chance: 80000
Price: 500000
@@ -32357,6 +32371,12 @@ Body:
FuriousCirclet_MT: true
FuriousCirclet_EM: true
FuriousCirclet_SOA: true
FuriousCirclet_TR: true
FuriousCirclet_BO: true
FuriousCirclet_HN: true
FuriousCirclet_AG: true
FuriousCirclet_IQ: true
FuriousCirclet_NW: true
Reset:
Chance: 80000
Price: 500000

View File

@@ -92258,7 +92258,7 @@ Body:
Item: Hero_Token_SH
Rate: 10
- Index: 17
Item: aegis_490220
Item: Hero_Token_HN
Rate: 10
- Group: JANUARYGIFTBOX_
SubGroups:
@@ -113177,3 +113177,265 @@ Body:
- Index: 65
Item: Critical_Stone_Bottom
Rate: 400
- Group: STOVE_CHANNELING_BOX_1
SubGroups:
- SubGroup: 0
List:
- Index: 0
Item: Battle_Manual100
Amount: 5
- Index: 1
Item: E_Token_Of_Siegfried
Amount: 5
- Index: 2
Item: Comp_Kafra_Card
Amount: 10
- Index: 3
Item: World_Tour_Ticket
Amount: 10
- Group: STOVE_CHANNELING_BOX_2
SubGroups:
- SubGroup: 0
List:
- Index: 0
Item: Boarding_Halter_Box30_Z
- Index: 1
Item: Comp_Almighty
Amount: 10
- Index: 2
Item: E_Wing_Of_Fly_3Day_Box
Amount: 3
- Index: 3
Item: Buff_Scroll_Box
Amount: 3
- Group: STOVE_CHANNELING_BOX_3
SubGroups:
- SubGroup: 0
List:
- Index: 0
Item: E_Life_Potion_Pack
Amount: 2
- Index: 1
Item: Comp_Small_Mana_Potion
Amount: 20
- Index: 2
Item: E_Infinity_Drink
Amount: 10
- Index: 3
Item: Comp_Power_Booster
Amount: 10
- Group: STOVE_CHANNELING_BOX_4
SubGroups:
- SubGroup: 0
List:
- Index: 0
Item: All_In_One_buff_B
Amount: 10
- Index: 1
Item: All_In_One_Healing_B
Amount: 10
- Index: 2
Item: Cachua_Coupon
Amount: 10
- Index: 3
Item: Evt_Cos_Coin
Amount: 10
- Group: LI_NYANGVINE_BOX1_35
SubGroups:
- SubGroup: 0
List:
- Index: 0
Item: Nyangvine_Fruit
Amount: 100
- Index: 1
Item: Enchant_Stone_Box35
Amount: 2
- Index: 2
Item: Comp_Bubble_Gum
Amount: 3
- Group: LI_NYANGVINE_BOX2_35
SubGroups:
- SubGroup: 0
List:
- Index: 0
Item: Nyangvine_Fruit
Amount: 200
- Index: 1
Item: Battle_Manual100
Amount: 5
- Index: 2
Item: Enchant_Stone_Box35
Amount: 2
- Group: LI_NYANGVINE_BOX3_35
SubGroups:
- SubGroup: 0
List:
- Index: 0
Item: Nyangvine_Fruit
Amount: 400
- Index: 1
Item: Comp_Bubble_Gum
Amount: 10
- Index: 2
Item: Battle_Manual100
Amount: 5
- Index: 3
Item: Enchant_Stone_Box35
Amount: 5
- Group: A_SPEED_BOOSTER_BOX
SubGroups:
- SubGroup: 0
List:
- Index: 0
Item: Speed_Booster
Amount: 10
- Index: 1
Item: K_Secret_Key
- Group: A_SPEED_BOOSTER_10_BOX
SubGroups:
- SubGroup: 0
List:
- Index: 0
Item: Speed_Booster
Amount: 100
- Index: 1
Item: K_Secret_Key
Amount: 11
- Group: L_INFINITY_POWER_PACK
SubGroups:
- SubGroup: 0
List:
- Index: 0
Item: Limit_Power_Booster
Amount: 100
- Index: 1
Item: Infinity_Drink
Amount: 100
- Index: 2
Item: K_Secret_Key
Amount: 25
- Index: 3
Item: Cachua_Coupon
Amount: 5
- Group: L_ALL_RED_PACK
SubGroups:
- SubGroup: 0
List:
- Index: 0
Item: Almighty
Amount: 100
- Index: 1
Item: Red_Booster
Amount: 125
- Index: 2
Item: K_Secret_Key
Amount: 25
- Index: 3
Item: Cachua_Coupon
Amount: 5
- Group: L_DEFENSE_POTION_PACK
SubGroups:
- SubGroup: 0
List:
- Index: 0
Item: Small_Life_Potion
Amount: 200
- Index: 1
Item: Med_Life_Potion
Amount: 200
- Index: 2
Item: Mysterious_Water
Amount: 200
- Index: 3
Item: Small_Mana_Potion
Amount: 50
- Index: 4
Item: M_DEFScroll
Amount: 300
- Index: 5
Item: K_Secret_Key
Amount: 25
- Index: 6
Item: Cachua_Coupon
Amount: 5
- Group: L_SPEED_FORCE_PACK
SubGroups:
- SubGroup: 0
List:
- Index: 0
Item: Force_Booster
Amount: 100
- Index: 1
Item: Speed_Booster
Amount: 100
- Index: 2
Item: K_Secret_Key
Amount: 25
- Index: 3
Item: Cachua_Coupon
Amount: 5
- Group: L_SPECIAL_SPEED_PACK
SubGroups:
- SubGroup: 0
List:
- Index: 0
Item: Speed_Booster
Amount: 200
- Index: 1
Item: K_Secret_Key
Amount: 30
- Index: 2
Item: Cachua_Coupon
Amount: 10
- Group: L_SPECIAL_FORCE_PACK
SubGroups:
- SubGroup: 0
List:
- Index: 0
Item: Force_Booster
Amount: 200
- Index: 1
Item: K_Secret_Key
Amount: 30
- Index: 2
Item: Cachua_Coupon
Amount: 10
- Group: COSTUMEMILEPACK_35_1
SubGroups:
- SubGroup: 0
List:
- Index: 0
Item: Nyangvine_Fruit
Amount: 100
- Index: 1
Item: Evt_Cos_Coin
Amount: 12
- Index: 2
Item: Enchant_Stone_Box35
Amount: 3
- Group: COSTUMEMILEPACK_35_2
SubGroups:
- SubGroup: 0
List:
- Index: 0
Item: Nyangvine_Fruit
Amount: 200
- Index: 1
Item: Evt_Cos_Coin
Amount: 25
- Index: 2
Item: Enchant_Stone_Box35
Amount: 5
- Group: COSTUMEMILEPACK_35_3
SubGroups:
- SubGroup: 0
List:
- Index: 0
Item: Nyangvine_Fruit
Amount: 400
- Index: 1
Item: Evt_Cos_Coin
Amount: 50
- Index: 2
Item: Enchant_Stone_Box35
Amount: 10

View File

@@ -9837,6 +9837,330 @@ Body:
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Snowflower_Armor
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Snowflower_Armor
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Snowflower_Manteau
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Snowflower_Manteau
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Snowflower_Boots
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Snowflower_Boots
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Snowflower_Pendant
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Snowflower_Pendant
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Snowflower_Necklace
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Snowflower_Necklace
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Snowflower_Robe
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Snowflower_Robe
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Snowflower_Muffler
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Snowflower_Muffler
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Snowflower_Shoes
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Snowflower_Shoes
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Snowflower_Ring
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Snowflower_Ring
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Snowflower_Earring
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Snowflower_Earring
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_T_Sword
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_T_Sword
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_Lance
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_Lance
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_Sword
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_Sword
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_B_Sword
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_B_Sword
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_Spear
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_Spear
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_T_Axe
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_T_Axe
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_Axe
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_Axe
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_Mace
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_Mace
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_M_Mace
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_M_Mace
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_R_Knife
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_R_Knife
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_B_Knife
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_B_Knife
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_Knuckle
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_Knuckle
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_Katar
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_Katar
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_Bow
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_Bow
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_Violin
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_Violin
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_Whip
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_Whip
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_Humma
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_Humma
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_Book
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_Book
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_Wand
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_Wand
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_Staff
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_Staff
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_Foxtail
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_Foxtail
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_Revolver
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_Revolver
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_Rifle
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_Rifle
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_Shotgun
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_Shotgun
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_Gatling
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_Gatling
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- BaseItem: Glacier_Launcher
Materials:
- Material: Imperfect_Rune
Amount: 10
ResultItem: R_Glacier_Launcher
ChangeRefine: -20
RandomOptionGroup: Group_0
ClearSlots: true
RemoveEnchantgrade: true
- Item: Season_H_Upgrade
BaseItems:
- BaseItem: Season_Hood_Spring
@@ -10901,6 +11225,206 @@ Body:
Amount: 20
ResultItem: FuriousCirclet_SOA
ChangeRefine: 1
- BaseItem: FuriousCirclet_TR
MinimumRefine: 9
MaximumRefine: 11
Materials:
- Material: HD_Ethernium
Amount: 10
- Material: Enriched_Ethernium
Amount: 20
ResultItem: FuriousCirclet_TR
ChangeRefine: 1
- BaseItem: FuriousCirclet_BO
MinimumRefine: 9
MaximumRefine: 11
Materials:
- Material: HD_Ethernium
Amount: 10
- Material: Enriched_Ethernium
Amount: 20
ResultItem: FuriousCirclet_BO
ChangeRefine: 1
- BaseItem: FuriousCirclet_HN
MinimumRefine: 9
MaximumRefine: 11
Materials:
- Material: HD_Ethernium
Amount: 10
- Material: Enriched_Ethernium
Amount: 20
ResultItem: FuriousCirclet_HN
ChangeRefine: 1
- BaseItem: Lapier_Furious
MinimumRefine: 9
MaximumRefine: 11
Materials:
- Material: HD_Etherdeocon
Amount: 10
- Material: Enriched_Etherdeocon
Amount: 20
ResultItem: Lapier_Furious
ChangeRefine: 1
- BaseItem: SharpSword_Furious
MinimumRefine: 9
MaximumRefine: 11
Materials:
- Material: HD_Etherdeocon
Amount: 10
- Material: Enriched_Etherdeocon
Amount: 20
ResultItem: SharpSword_Furious
ChangeRefine: 1
- BaseItem: WhiteSword_Furious
MinimumRefine: 9
MaximumRefine: 11
Materials:
- Material: HD_Etherdeocon
Amount: 10
- Material: Enriched_Etherdeocon
Amount: 20
ResultItem: WhiteSword_Furious
ChangeRefine: 1
- BaseItem: Stick_Furious
MinimumRefine: 9
MaximumRefine: 11
Materials:
- Material: HD_Etherdeocon
Amount: 10
- Material: Enriched_Etherdeocon
Amount: 20
ResultItem: Stick_Furious
ChangeRefine: 1
- BaseItem: MetalVilolin_Furious
MinimumRefine: 9
MaximumRefine: 11
Materials:
- Material: HD_Etherdeocon
Amount: 10
- Material: Enriched_Etherdeocon
Amount: 20
ResultItem: MetalVilolin_Furious
ChangeRefine: 1
- BaseItem: Harp_Furious
MinimumRefine: 9
MaximumRefine: 11
Materials:
- Material: HD_Etherdeocon
Amount: 10
- Material: Enriched_Etherdeocon
Amount: 20
ResultItem: Harp_Furious
ChangeRefine: 1
- BaseItem: MetalWhip_Furious
MinimumRefine: 9
MaximumRefine: 11
Materials:
- Material: HD_Etherdeocon
Amount: 10
- Material: Enriched_Etherdeocon
Amount: 20
ResultItem: MetalWhip_Furious
ChangeRefine: 1
- BaseItem: Whip_Furious
MinimumRefine: 9
MaximumRefine: 11
Materials:
- Material: HD_Etherdeocon
Amount: 10
- Material: Enriched_Etherdeocon
Amount: 20
ResultItem: Whip_Furious
ChangeRefine: 1
- BaseItem: Flame_Staff_Furious
MinimumRefine: 9
MaximumRefine: 11
Materials:
- Material: HD_Etherdeocon
Amount: 10
- Material: Enriched_Etherdeocon
Amount: 20
ResultItem: Flame_Staff_Furious
ChangeRefine: 1
- BaseItem: Rifle_Furious
MinimumRefine: 9
MaximumRefine: 11
Materials:
- Material: HD_Etherdeocon
Amount: 10
- Material: Enriched_Etherdeocon
Amount: 20
ResultItem: Rifle_Furious
ChangeRefine: 1
- BaseItem: Gatling_Furious
MinimumRefine: 9
MaximumRefine: 11
Materials:
- Material: HD_Etherdeocon
Amount: 10
- Material: Enriched_Etherdeocon
Amount: 20
ResultItem: Gatling_Furious
ChangeRefine: 1
- BaseItem: Specter_Furious
MinimumRefine: 9
MaximumRefine: 11
Materials:
- Material: HD_Etherdeocon
Amount: 10
- Material: Enriched_Etherdeocon
Amount: 20
ResultItem: Specter_Furious
ChangeRefine: 1
- BaseItem: GaleClaw_Furious
MinimumRefine: 9
MaximumRefine: 11
Materials:
- Material: HD_Etherdeocon
Amount: 10
- Material: Enriched_Etherdeocon
Amount: 20
ResultItem: GaleClaw_Furious
ChangeRefine: 1
- BaseItem: Exterminate_Furious
MinimumRefine: 9
MaximumRefine: 11
Materials:
- Material: HD_Etherdeocon
Amount: 10
- Material: Enriched_Etherdeocon
Amount: 20
ResultItem: Exterminate_Furious
ChangeRefine: 1
- BaseItem: FuriousCirclet_AG
MinimumRefine: 9
MaximumRefine: 11
Materials:
- Material: HD_Ethernium
Amount: 10
- Material: Enriched_Ethernium
Amount: 20
ResultItem: FuriousCirclet_AG
ChangeRefine: 1
- BaseItem: FuriousCirclet_IQ
MinimumRefine: 9
MaximumRefine: 11
Materials:
- Material: HD_Ethernium
Amount: 10
- Material: Enriched_Ethernium
Amount: 20
ResultItem: FuriousCirclet_IQ
ChangeRefine: 1
- BaseItem: FuriousCirclet_NW
MinimumRefine: 9
MaximumRefine: 11
Materials:
- Material: HD_Ethernium
Amount: 10
- Material: Enriched_Ethernium
Amount: 20
ResultItem: FuriousCirclet_NW
ChangeRefine: 1
- Item: Gaebolg_A_Hammer_1
BaseItems:
- BaseItem: Gaebolg_Armor

View File

@@ -96171,34 +96171,519 @@ Body:
# AegisName: VH_ENTWEIHEN_S
# - Id: 20254
# AegisName: VH_MIMIC
# - Id: 20255
# AegisName: ILL_TEDDY_BEAR_R
# - Id: 20256
# AegisName: ILL_TEDDY_BEAR_Y
# - Id: 20257
# AegisName: ILL_TEDDY_BEAR_G
# - Id: 20258
# AegisName: ILL_TEDDY_BEAR_W
# - Id: 20259
# AegisName: ILL_TEDDY_BEAR_B
# - Id: 20260
# AegisName: ILL_TEDDY_BEAR_S
# - Id: 20261
# AegisName: ILL_PITMAN
# - Id: 20262
# AegisName: ILL_MINERAL
# - Id: 20263
# AegisName: ILL_OBSIDIAN
# - Id: 20264
# AegisName: G_ILL_TEDDY_BEAR_R
# - Id: 20265
# AegisName: G_ILL_TEDDY_BEAR_Y
# - Id: 20266
# AegisName: G_ILL_TEDDY_BEAR_G
# - Id: 20267
# AegisName: G_ILL_TEDDY_BEAR_W
# - Id: 20268
# AegisName: G_ILL_TEDDY_BEAR_B
- Id: 20255
AegisName: ILL_TEDDY_BEAR_R
Name: Red Teddy Bear
Level: 155
Hp: 328072
BaseExp: 19972
JobExp: 22503
Attack: 2022
Attack2: 225
Defense: 212
MagicDefense: 88
Str: 132
Agi: 100
Vit: 155
Int: 132
Dex: 133
Luk: 132
AttackRange: 2
SkillRange: 10
ChaseRange: 12
Size: Small
Race: Formless
Element: Fire
ElementLevel: 1
WalkSpeed: 150
AttackDelay: 512
AttackMotion: 780
DamageMotion: 504
Ai: 04
Drops:
- Item: NasariansSoulstone
Rate: 1000
- Item: Iron_Ore
Rate: 2000
- Item: Oridecon
Rate: 500
- Item: Bearopy
Rate: 1500
- Item: Boots_
Rate: 50
- Item: Colorful_T_Bear_Card
Rate: 1
StealProtected: true
- Id: 20256
AegisName: ILL_TEDDY_BEAR_Y
Name: Yellow Teddy Bear
Level: 155
Hp: 294044
BaseExp: 19384
JobExp: 23165
Attack: 1819
Attack2: 202
Defense: 200
MagicDefense: 112
Str: 102
Agi: 132
Vit: 102
Int: 182
Dex: 155
Luk: 102
AttackRange: 2
SkillRange: 10
ChaseRange: 12
Size: Small
Race: Formless
Element: Wind
ElementLevel: 1
WalkSpeed: 150
AttackDelay: 512
AttackMotion: 780
DamageMotion: 504
Ai: 04
Drops:
- Item: Bearopy
Rate: 1500
- Item: NasariansSoulstone
Rate: 1000
- Item: Elunium
Rate: 500
- Item: Screw
Rate: 2500
- Item: Survival_Rod_
Rate: 50
- Item: Colorful_T_Bear_Card
Rate: 1
StealProtected: true
- Id: 20257
AegisName: ILL_TEDDY_BEAR_G
Name: Green Teddy Bear
Level: 157
Hp: 331960
BaseExp: 21646
JobExp: 25117
Attack: 2113
Attack2: 235
Defense: 227
MagicDefense: 110
Str: 129
Agi: 128
Vit: 141
Int: 173
Dex: 158
Luk: 129
AttackRange: 2
SkillRange: 10
ChaseRange: 12
Size: Small
Race: Formless
Element: Poison
ElementLevel: 1
WalkSpeed: 150
AttackDelay: 512
AttackMotion: 708
DamageMotion: 504
Ai: 04
Drops:
- Item: Bearopy
Rate: 1500
- Item: NasariansSoulstone
Rate: 1000
- Item: Green_Bearopy
Rate: 500
- Item: Green_Herb
Rate: 2500
- Item: Colorful_T_Bear_Card
Rate: 1
StealProtected: true
- Id: 20258
AegisName: ILL_TEDDY_BEAR_W
Name: White Teddy Bear
Level: 155
Hp: 311841
BaseExp: 20334
JobExp: 23595
Attack: 1985
Attack2: 221
Defense: 213
MagicDefense: 103
Str: 121
Agi: 120
Vit: 133
Int: 162
Dex: 149
Luk: 121
AttackRange: 2
SkillRange: 10
ChaseRange: 12
Size: Small
Race: Formless
Element: Neutral
ElementLevel: 1
WalkSpeed: 150
AttackDelay: 512
AttackMotion: 780
DamageMotion: 504
Ai: 04
Drops:
- Item: Bearopy
Rate: 2500
- Item: NasariansSoulstone
Rate: 1500
- Item: Oridecon_Hammer
Rate: 500
- Item: Steel
Rate: 250
- Item: Survival_Rod2_
Rate: 50
- Item: Colorful_T_Bear_Card
Rate: 1
StealProtected: true
- Id: 20259
AegisName: ILL_TEDDY_BEAR_B
Name: Blue Teddy Bear
Level: 152
Hp: 280657
BaseExp: 18300
JobExp: 21235
Attack: 1786
Attack2: 198
Defense: 192
MagicDefense: 93
Str: 109
Agi: 108
Vit: 120
Int: 146
Dex: 134
Luk: 109
AttackRange: 2
SkillRange: 10
ChaseRange: 12
Size: Small
Race: Formless
Element: Water
ElementLevel: 1
WalkSpeed: 300
AttackDelay: 512
AttackMotion: 780
DamageMotion: 504
Ai: 04
Drops:
- Item: Bearopy
Rate: 1500
- Item: Screw
Rate: 2500
- Item: Iron
Rate: 1000
- Item: Blue_Herb
Rate: 500
- Item: Chonchon_Doll_HQ
Rate: 1000
- Item: Colorful_T_Bear_Card
Rate: 1
StealProtected: true
- Id: 20260
AegisName: ILL_TEDDY_BEAR_S
Name: Shining Teddy Bear
Level: 160
Hp: 10724874
BaseExp: 1793444
JobExp: 1618614
Attack: 4168
Attack2: 2895
Defense: 313
MagicDefense: 152
Str: 178
Agi: 176
Vit: 195
Int: 238
Dex: 219
Luk: 178
AttackRange: 2
SkillRange: 10
ChaseRange: 12
Size: Large
Race: Formless
Element: Holy
ElementLevel: 4
WalkSpeed: 150
AttackDelay: 512
AttackMotion: 780
DamageMotion: 504
Ai: 21
Drops:
- Item: Elunium
Rate: 2000
- Item: Oridecon
Rate: 2000
- Item: Clay_Doll
Rate: 1500
- Item: Counter_Dagger
Rate: 300
- Item: Screw
Rate: 4000
- Item: Shining_T_Bear_Card
Rate: 1
StealProtected: true
- Id: 20261
AegisName: ILL_PITMAN
Name: Hardworking Pitman
Level: 154
Hp: 305605
Attack: 1945
Attack2: 216
Defense: 209
MagicDefense: 101
Str: 118
Agi: 117
Vit: 130
Int: 159
Dex: 146
Luk: 118
AttackRange: 1
SkillRange: 10
ChaseRange: 12
Size: Large
Race: Demon
Element: Earth
ElementLevel: 2
WalkSpeed: 180
AttackDelay: 960
AttackMotion: 336
DamageMotion: 300
Ai: 04
Drops:
- Item: Old_Pick
Rate: 1500
- Item: Old_Steel_Plate
Rate: 250
- Item: Lantern
Rate: 2500
- Item: Gun_Powder
Rate: 1000
- Item: Gate_KeeperDD
Rate: 50
- Item: Pitman_Worker_Card
Rate: 1
StealProtected: true
- Id: 20262
AegisName: ILL_MINERAL
Name: Soul Fragment
Level: 153
Hp: 290324
BaseExp: 18931
JobExp: 21967
Attack: 1847
Attack2: 205
Defense: 198
MagicDefense: 96
Str: 113
Agi: 112
Vit: 124
Int: 151
Dex: 139
Luk: 113
AttackRange: 1
SkillRange: 10
ChaseRange: 12
Size: Small
Race: Formless
Element: Neutral
ElementLevel: 2
WalkSpeed: 250
AttackDelay: 648
AttackMotion: 480
DamageMotion: 360
Ai: 04
Drops:
- Item: Fragment_Of_Crystal
Rate: 2500
- Item: Golden_Jewel
Rate: 250
- Item: Gothic_China_Doll
Rate: 1000
- Item: Yellow_Gemstone
Rate: 300
- Item: Fragment_Of_Soul_Card
Rate: 1
StealProtected: true
- Id: 20263
AegisName: ILL_OBSIDIAN
# Name: Sinister Dwelling Obsidian
Name: Sinister Obsidian
Level: 156
Hp: 318593
Attack: 2027
Attack2: 225
Defense: 217
MagicDefense: 106
Str: 124
Agi: 122
Vit: 136
Int: 166
Dex: 152
Luk: 124
AttackRange: 1
SkillRange: 10
ChaseRange: 12
Size: Small
Race: Formless
Element: Earth
ElementLevel: 2
WalkSpeed: 350
AttackDelay: 720
AttackMotion: 864
DamageMotion: 504
Ai: 04
Drops:
- Item: Dark_Crystal_Fragment
Rate: 1500
- Item: Crystal_Jewel
Rate: 250
- Item: Coal
Rate: 250
- Item: Elunium
Rate: 40
- Item: Sinister_Obsidian_Card
Rate: 1
StealProtected: true
- Id: 20264
AegisName: G_ILL_TEDDY_BEAR_R
Name: Red Teddy Bear
Level: 155
Hp: 309520
Attack: 2022
Attack2: 225
Defense: 212
MagicDefense: 88
Str: 132
Agi: 100
Vit: 155
Int: 132
Dex: 133
Luk: 132
AttackRange: 2
SkillRange: 10
ChaseRange: 12
Size: Small
Race: Formless
Element: Fire
ElementLevel: 1
WalkSpeed: 150
AttackDelay: 512
AttackMotion: 780
DamageMotion: 504
Ai: 24
- Id: 20265
AegisName: G_ILL_TEDDY_BEAR_Y
Name: Yellow Teddy Bear
Level: 155
Hp: 294044
Attack: 1819
Attack2: 202
Defense: 200
MagicDefense: 112
Str: 102
Agi: 132
Vit: 102
Int: 182
Dex: 155
Luk: 102
AttackRange: 2
SkillRange: 10
ChaseRange: 12
Size: Small
Race: Formless
Element: Wind
ElementLevel: 1
WalkSpeed: 150
AttackDelay: 512
AttackMotion: 780
DamageMotion: 504
Ai: 24
- Id: 20266
AegisName: G_ILL_TEDDY_BEAR_G
Name: Green Teddy Bear
Level: 157
Hp: 331960
Attack: 2113
Attack2: 235
Defense: 227
MagicDefense: 110
Str: 129
Agi: 128
Vit: 141
Int: 173
Dex: 158
Luk: 129
AttackRange: 2
SkillRange: 10
ChaseRange: 12
Size: Small
Race: Formless
Element: Poison
ElementLevel: 1
WalkSpeed: 150
AttackDelay: 512
AttackMotion: 780
DamageMotion: 504
Ai: 24
- Id: 20267
AegisName: G_ILL_TEDDY_BEAR_W
Name: White Teddy Bear
Level: 155
Hp: 311841
Attack: 1985
Attack2: 221
Defense: 213
MagicDefense: 103
Str: 121
Agi: 120
Vit: 133
Int: 162
Dex: 149
Luk: 121
AttackRange: 2
SkillRange: 10
ChaseRange: 12
Size: Small
Race: Formless
Element: Neutral
ElementLevel: 1
WalkSpeed: 150
AttackDelay: 512
AttackMotion: 780
DamageMotion: 504
Ai: 24
- Id: 20268
AegisName: G_ILL_TEDDY_BEAR_B
Name: Blue Teddy Bear
Level: 152
Hp: 280657
Attack: 1786
Attack2: 198
Defense: 192
MagicDefense: 93
Str: 109
Agi: 108
Vit: 120
Int: 146
Dex: 134
Luk: 109
AttackRange: 2
SkillRange: 10
ChaseRange: 12
Size: Small
Race: Formless
Element: Water
ElementLevel: 1
WalkSpeed: 300
AttackDelay: 512
AttackMotion: 780
DamageMotion: 504
Ai: 24
- Id: 20269
AegisName: GUILD_SKILL_FLAG
Name: Guild Skill Flag
@@ -110625,6 +111110,10 @@ Body:
# AegisName: EP21_MD_BOX1
# - Id: 22378
# AegisName: MD_Airboat_Boss5
# - Id: 22379
# AegisName: EV_NPC_VACATION_POPE
# - Id: 22380
# AegisName: E_WATER_M_RING
# - Id: 23000
# AegisName: DARK_ILLUSION2
# - Id: 23001

View File

@@ -13105,6 +13105,108 @@
20280,G_ILL_WOOTAN_FIGHTER@KN_BRANDISHSPEAR,attack,57,5,2000,0,10000,yes,target,always,0,,,,,,6,
20280,G_ILL_WOOTAN_FIGHTER@NPC_FIREATTACK,attack,186,4,1000,0,5000,yes,target,always,0,,,,,,,
// Illusion of Teddy Bear
20255,ILL_TEDDY_BEAR_R@AL_TELEPORT,idle,26,1,5000,0,5000,yes,self,rudeattacked,0,,,,,,,
20255,ILL_TEDDY_BEAR_R@NPC_CURSEATTACK,chase,181,3,1000,500,5000,no,target,always,0,,,,,,2,
20255,ILL_TEDDY_BEAR_R@NPC_CRITICALSLASH,attack,170,1,1500,500,5000,no,target,always,0,,,,,,6,
20255,ILL_TEDDY_BEAR_R@NPC_FIREATTACK,attack,186,2,1000,0,5000,yes,target,always,0,,,,,,37,
20255,ILL_TEDDY_BEAR_R@BS_HAMMERFALL,attack,110,5,500,1500,5000,no,target,always,0,,,,,,8,
20256,ILL_TEDDY_BEAR_Y@AL_TELEPORT,idle,26,1,5000,0,5000,yes,self,rudeattacked,0,,,,,,,
20256,ILL_TEDDY_BEAR_Y@MG_LIGHTNINGBOLT,chase,20,2,1500,1000,5000,no,target,always,0,,,,,,,
20256,ILL_TEDDY_BEAR_Y@NPC_CURSEATTACK,chase,181,5,1000,500,5000,no,target,always,0,,,,,,2,
20256,ILL_TEDDY_BEAR_Y@WZ_VERMILION,attack,85,3,500,1500,10000,no,target,always,0,,,,,,6,
20256,ILL_TEDDY_BEAR_Y@WZ_STORMGUST,attack,89,3,1000,1500,10000,no,target,always,0,,,,,,37,
20256,ILL_TEDDY_BEAR_Y@HW_GANBANTEIN,attack,483,1,1000,0,5000,no,target,skillused,18,,,,,,8,
20256,ILL_TEDDY_BEAR_Y@MG_LIGHTNINGBOLT,attack,20,3,500,1500,10000,no,target,always,0,,,,,,,
20257,ILL_TEDDY_BEAR_G@AL_TELEPORT,idle,26,1,5000,0,5000,yes,self,rudeattacked,0,,,,,,,
20257,ILL_TEDDY_BEAR_G@NPC_BLOODDRAIN,chase,199,1,1500,0,5000,yes,target,always,0,,,,,,,
20257,ILL_TEDDY_BEAR_G@NPC_CLOUD_KILL,attack,739,3,500,1500,20000,no,target,always,0,,,,,,6,
20258,ILL_TEDDY_BEAR_W@AL_TELEPORT,idle,26,1,5000,0,5000,yes,self,rudeattacked,0,,,,,,,
20258,ILL_TEDDY_BEAR_W@NPC_CHEAL,chase,729,5,3000,500,3000,no,self,friendhpltmaxrate,99,,,,,,,
20258,ILL_TEDDY_BEAR_W@NPC_CHEAL,chase,729,5,3000,500,3000,no,self,myhpltmaxrate,99,,,,,,,
20258,ILL_TEDDY_BEAR_W@NPC_CHEAL,attack,729,5,1500,500,5000,no,self,always,0,,,,,,2,
20258,ILL_TEDDY_BEAR_W@AL_HEAL,attack,28,9,2000,0,2000,yes,friend,friendhpltmaxrate,99,,,,,,,
20258,ILL_TEDDY_BEAR_W@AL_HEAL,attack,28,9,2000,0,2000,yes,friend,myhpltmaxrate,99,,,,,,3,
20258,ILL_TEDDY_BEAR_W@AM_POTIONPITCHER,attack,231,4,5000,500,5000,no,friend,friendhpltmaxrate,60,,,,,,,
20258,ILL_TEDDY_BEAR_W@AM_POTIONPITCHER,attack,231,4,5000,500,5000,no,friend,myhpltmaxrate,30,,,,,,5,
20258,ILL_TEDDY_BEAR_W@NPC_ALLHEAL,attack,687,1,10000,5000,30000,no,self,myhpltmaxrate,10,,,,,,6,
20258,ILL_TEDDY_BEAR_W@CR_HOLYCROSS,attack,253,5,500,0,5000,yes,target,always,0,,,,,,32,
20259,ILL_TEDDY_BEAR_B@AL_TELEPORT,idle,26,1,5000,0,5000,yes,self,rudeattacked,0,,,,,,,
20259,ILL_TEDDY_BEAR_B@MG_COLDBOLT,chase,14,2,1500,1000,5000,no,target,always,0,,,,,,23,
20259,ILL_TEDDY_BEAR_B@NPC_STORMGUST2,attack,723,1,500,1500,10000,no,target,always,0,,,,,,20,
20259,ILL_TEDDY_BEAR_B@NPC_WATERATTACK,attack,184,2,1500,0,5000,yes,target,always,0,,,,,,6,
20259,ILL_TEDDY_BEAR_B@MG_COLDBOLT,attack,14,3,500,1500,10000,no,target,always,0,,,,,,,
20260,ILL_TEDDY_BEAR_S@NPC_AGIUP,attack,350,1,5000,0,20000,yes,self,always,0,,,,,,,
20260,ILL_TEDDY_BEAR_S@NPC_BLEEDING2,attack,764,5,2000,500,10000,no,target,always,0,,,,,,,
20260,ILL_TEDDY_BEAR_S@NPC_CRITICALWOUND,attack,673,3,1000,500,20000,no,target,always,0,,,,,,,
20260,ILL_TEDDY_BEAR_S@NPC_WIDESIGHT,attack,669,1,10000,0,30000,yes,self,always,0,,,,,,,
20260,ILL_TEDDY_BEAR_S@NPC_WEAPONBRAKER,attack,343,1,10000,0,40000,yes,target,always,0,,,,,,,
20260,ILL_TEDDY_BEAR_S@NPC_DARKBREATH,attack,202,5,2000,3000,10000,no,target,myhpltmaxrate,60,,,,,,0,
20260,ILL_TEDDY_BEAR_S@CR_HOLYCROSS,attack,253,10,500,0,5000,yes,target,always,0,,,,,,32,
20260,ILL_TEDDY_BEAR_S@NPC_CALLSLAVE,attack,352,1,10000,0,30000,yes,self,always,0,,,,,,,
20260,ILL_TEDDY_BEAR_S@NPC_CALLSLAVE,idle,352,1,10000,0,10000,yes,self,always,0,,,,,,,
20260,ILL_TEDDY_BEAR_S@NPC_CALLSLAVE,chase,352,1,10000,0,5000,yes,self,always,0,,,,,,,
// 20260,ILL_TEDDY_BEAR_S@NPC_EARTHQUAKE_K,attack,750,5,1500,2000,20000,no,target,myhpltmaxrate,30,,,,,,,
20260,ILL_TEDDY_BEAR_S@NPC_EARTHQUAKE,attack,653,5,1500,2000,20000,no,target,myhpltmaxrate,30,,,,,,,
20260,ILL_TEDDY_BEAR_S@NPC_PULSESTRIKE,attack,661,5,3000,3000,20000,no,self,always,0,,,,,,,
20260,ILL_TEDDY_BEAR_S@NPC_SUMMONSLAVE,idle,196,1,10000,1000,30000,no,self,slavele,1,20255,20256,20257,20259,,,
20260,ILL_TEDDY_BEAR_S@NPC_SUMMONSLAVE,attack,196,1,5000,1000,30000,no,self,slavele,1,20255,20256,20257,20259,,,
20260,ILL_TEDDY_BEAR_S@NPC_POWERUP,attack,349,5,10000,0,60000,yes,self,myhpltmaxrate,20,,,,,,6,
20260,ILL_TEDDY_BEAR_S@NPC_GRANDDARKNESS,attack,339,10,3000,1000,5000,no,self,always,0,,,,,,,
20260,ILL_TEDDY_BEAR_S@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,0,,,,,,,
20260,ILL_TEDDY_BEAR_S@AL_TELEPORT,walk,26,1,5000,0,10000,yes,self,rudeattacked,0,,,,,,,
20260,ILL_TEDDY_BEAR_S@AL_TELEPORT,chase,26,1,5000,0,5000,yes,self,rudeattacked,0,,,,,,,
20260,ILL_TEDDY_BEAR_S@SA_LANDPROTECTOR,attack,288,2,3000,1000,10000,no,target,groundattacked,0,,,,,,6,
20260,ILL_TEDDY_BEAR_S@AL_PNEUMA,attack,25,1,3000,0,5000,yes,target,longrangeattacked,0,,,,,,18,
20261,ILL_PITMAN@AL_TELEPORT,idle,26,1,5000,0,5000,yes,self,rudeattacked,0,,,,,,,
20261,ILL_PITMAN@AL_TELEPORT,chase,26,1,5000,0,5000,yes,self,mobnearbygt,4,,,,,,,
20261,ILL_PITMAN@NPC_SILENCEATTACK,chase,178,3,500,0,5000,no,target,always,0,,,,,,6,
20261,ILL_PITMAN@NPC_COMBOATTACK,attack,171,3,500,700,5000,no,target,always,0,,,,,,,
20261,ILL_PITMAN@TF_SPRINKLESAND,attack,149,1,500,0,5000,no,target,always,0,,,,,,6,
20261,ILL_PITMAN@SM_MAGNUM,attack,7,3,1000,0,20000,yes,self,always,0,,,,,,32,
20261,ILL_PITMAN@NPC_GUIDEDATTACK,attack,172,3,2000,0,15000,yes,target,always,0,,,,,,37,
20262,ILL_MINERAL@AL_TELEPORT,idle,26,1,5000,0,5000,yes,self,rudeattacked,0,,,,,,,
20262,ILL_MINERAL@AS_GRIMTOOTH,idle,137,3,5000,0,500,yes,target,mystatuson,0,,,,,,,
20262,ILL_MINERAL@AL_HEAL,idle,28,9,5000,0,1500,yes,friend,mystatuson,0,,,,,,18,
20262,ILL_MINERAL@TF_HIDING,chase,51,1,2000,0,10000,yes,self,always,0,,,,,,19,
20262,ILL_MINERAL@TF_HIDING,chase,51,1,10000,0,10000,yes,self,myhpltmaxrate,30,,,,,,19,
20262,ILL_MINERAL@AL_TELEPORT,chase,26,1,5000,0,5000,yes,self,mobnearbygt,4,,,,,,,
20262,ILL_MINERAL@NPC_COMBOATTACK,attack,171,3,500,700,5000,no,target,always,0,,,,,,,
20262,ILL_MINERAL@TF_SPRINKLESAND,attack,149,1,500,0,5000,no,target,always,0,,,,,,6,
20262,ILL_MINERAL@NPC_GUIDEDATTACK,attack,172,3,2000,0,15000,yes,target,always,0,,,,,,37,
20262,ILL_MINERAL@NPC_RANDOMATTACK,attack,183,2,1500,500,5000,yes,target,always,0,,,,,,,
20263,ILL_OBSIDIAN@TF_HIDING,idle,51,1,500,500,5000,yes,self,always,0,,,,,,19,
20263,ILL_OBSIDIAN@AS_GRIMTOOTH,idle,137,3,5000,0,500,yes,target,mystatuson,0,,,,,,,
20263,ILL_OBSIDIAN@WZ_EARTHSPIKE,chase,90,3,1500,500,5000,no,target,always,0,,,,,,,
20263,ILL_OBSIDIAN@CR_SHIELDCHARGE,attack,250,3,1000,1000,5000,no,target,always,0,,,,,,,
20263,ILL_OBSIDIAN@NPC_GROUNDATTACK,attack,185,2,500,500,5000,yes,target,always,0,,,,,,,
20263,ILL_OBSIDIAN@TF_HIDING,attack,51,1,500,500,50000,yes,self,always,0,,,,,,19,
20264,G_ILL_TEDDY_BEAR_R@NPC_CURSEATTACK,chase,181,3,1000,500,5000,no,target,always,0,,,,,,2,
20264,G_ILL_TEDDY_BEAR_R@NPC_CRITICALSLASH,attack,170,1,1500,500,5000,no,target,always,0,,,,,,6,
20264,G_ILL_TEDDY_BEAR_R@NPC_FIREATTACK,attack,186,5,1000,0,5000,yes,target,always,0,,,,,,37,
20264,G_ILL_TEDDY_BEAR_R@BS_HAMMERFALL,attack,110,5,500,1500,5000,no,target,always,0,,,,,,8,
20265,G_ILL_TEDDY_BEAR_Y@MG_LIGHTNINGBOLT,chase,20,2,1500,1000,5000,no,target,always,0,,,,,,,
20265,G_ILL_TEDDY_BEAR_Y@NPC_CURSEATTACK,chase,181,5,1000,500,5000,no,target,always,0,,,,,,2,
20265,G_ILL_TEDDY_BEAR_Y@WZ_VERMILION,attack,85,3,500,1500,10000,no,target,always,0,,,,,,6,
20265,G_ILL_TEDDY_BEAR_Y@WZ_STORMGUST,attack,89,3,1000,1500,10000,no,target,always,0,,,,,,37,
20265,G_ILL_TEDDY_BEAR_Y@HW_GANBANTEIN,attack,483,1,1000,0,5000,no,target,skillused,18,,,,,,8,
20265,G_ILL_TEDDY_BEAR_Y@MG_LIGHTNINGBOLT,attack,20,3,500,1500,10000,no,target,always,0,,,,,,,
20266,G_ILL_TEDDY_BEAR_G@NPC_BLOODDRAIN,chase,199,1,1500,0,5000,yes,target,always,0,,,,,,,
20266,G_ILL_TEDDY_BEAR_G@NPC_CLOUD_KILL,attack,739,3,500,1500,20000,no,target,always,0,,,,,,6,
20267,G_ILL_TEDDY_BEAR_W@NPC_CHEAL,chase,729,5,3000,500,3000,no,self,friendhpltmaxrate,99,,,,,,,
20267,G_ILL_TEDDY_BEAR_W@NPC_CHEAL,chase,729,5,3000,500,3000,no,self,myhpltmaxrate,99,,,,,,,
20267,G_ILL_TEDDY_BEAR_W@NPC_CHEAL,attack,729,5,1500,500,5000,no,self,always,0,,,,,,2,
20267,G_ILL_TEDDY_BEAR_W@AL_HEAL,attack,28,9,2000,0,2000,yes,friend,friendhpltmaxrate,99,,,,,,,
20267,G_ILL_TEDDY_BEAR_W@AL_HEAL,attack,28,9,2000,0,2000,yes,friend,myhpltmaxrate,99,,,,,,3,
20267,G_ILL_TEDDY_BEAR_W@AM_POTIONPITCHER,attack,231,4,5000,500,5000,no,friend,friendhpltmaxrate,60,,,,,,,
20267,G_ILL_TEDDY_BEAR_W@AM_POTIONPITCHER,attack,231,4,5000,500,5000,no,friend,myhpltmaxrate,30,,,,,,5,
20267,G_ILL_TEDDY_BEAR_W@NPC_ALLHEAL,attack,687,1,10000,5000,30000,no,self,myhpltmaxrate,10,,,,,,6,
20267,G_ILL_TEDDY_BEAR_W@CR_HOLYCROSS,attack,253,5,500,0,5000,yes,target,always,0,,,,,,32,
20268,G_ILL_TEDDY_BEAR_B@MG_COLDBOLT,chase,14,2,1500,1000,5000,no,target,always,0,,,,,,23,
20268,G_ILL_TEDDY_BEAR_B@NPC_STORMGUST2,attack,723,1,500,1500,10000,no,target,always,0,,,,,,20,
20268,G_ILL_TEDDY_BEAR_B@NPC_WATERATTACK,attack,184,2,1500,0,5000,yes,target,always,0,,,,,,6,
20268,G_ILL_TEDDY_BEAR_B@MG_COLDBOLT,attack,14,3,500,1500,10000,no,target,always,0,,,,,,,
// Episode 17.1 - Illusion (custom) #!todo
20340,EL-A17T@NPC_AGIUP,chase,350,5,2000,0,60000,no,self,always,0,,,,,,6,
20340,EL-A17T@NPC_POWERUP,attack,349,5,2000,0,60000,no,self,always,0,,,,,,6,
@@ -14673,7 +14775,7 @@
21360,EP18_MD_SCHULANG_L@NPC_TELEKINESISATTACK,attack,191,2,3000,0,5000,yes,target,always,0,,,,,,,
21360,EP18_MD_SCHULANG_L@NPC_POWERUP,attack,349,3,5000,0,30000,yes,self,always,0,,,,,,,
21360,EP18_MD_SCHULANG_L@NPC_DARKSTRIKE,chase,340,3,3000,200,15000,yes,target,always,0,,,,,,,
// 21360,EP18_MD_SCHULANG_L@NPC_DEADLYCURSE2,attack,779,5,5000,1000,30000,no,self,always,0,,,,,,55,
21360,EP18_MD_SCHULANG_L@NPC_DEADLYCURSE2,attack,779,5,5000,1000,30000,no,self,always,0,,,,,,55,
21360,EP18_MD_SCHULANG_L@NPC_BLOODDRAIN,attack,199,1,2000,0,10000,yes,target,always,0,,,,,,,
21360,EP18_MD_SCHULANG_L@NPC_DARKSTRIKE,attack,340,3,3000,200,15000,yes,target,always,0,,,,,,,
21360,EP18_MD_SCHULANG_L@NPC_WIDESTONE2,attack,759,3,3000,500,30000,no,target,always,0,,,,,,,
@@ -14698,6 +14800,6 @@
21361,EP18_MD_DEMI_FREYJA_L@NPC_HELLJUDGEMENT2,attack,768,5,1000,500,120000,yes,target,always,0,,,,,,,
21361,EP18_MD_DEMI_FREYJA_L@NPC_CHANGEDARKNESS,attack,168,1,1000,0,120000,yes,self,always,0,,,,,,,
21361,EP18_MD_DEMI_FREYJA_L@NPC_CHANGEHOLY,attack,167,1,3000,0,120000,yes,self,always,0,,,,,,,
// 21361,EP18_MD_DEMI_FREYJA_L@NPC_DEADLYCURSE2,attack,779,5,5000,1000,30000,no,self,always,0,,,,,,55,
21361,EP18_MD_DEMI_FREYJA_L@NPC_DEADLYCURSE2,attack,779,5,5000,1000,30000,no,self,always,0,,,,,,55,
21361,EP18_MD_DEMI_FREYJA_L@NPC_CANE_OF_EVIL_EYE,chase,780,3,8000,300,30000,no,target,always,0,,,,,,,
21361,EP18_MD_DEMI_FREYJA_L@NPC_CANE_OF_EVIL_EYE,attack,780,5,7000,300,30000,yes,target,always,0,,,,,,,

View File

@@ -2788,6 +2788,7 @@ Body:
# bonus bFlee,20;
# }
#
# - Mob: FARMILIAR2 #TODO : Implement mob FARMILIAR2
- Mob: FARMILIAR
TameItem: Fruits_Set_Trap
EggItem: Farmiliar_Egg

View File

@@ -1404,21 +1404,21 @@ Body:
TimeLimit: 4h
- Id: 3455
Title: Illusion Investigation Team - Machoko
# - Id: 3456
# Title: Illusion of Teddy Bear 100 Kills
# Targets:
# - Id: 1
# Count: 100
# Location: ein_d02_i
# MapMobTargets:
# ILL_TEDDY_BEAR_B: true
# ILL_MINERAL: true
# ILL_PITMAN: true
# ILL_TEDDY_BEAR_R: true
# ILL_TEDDY_BEAR_Y: true
# ILL_TEDDY_BEAR_W: true
# ILL_OBSIDIAN: true
# ILL_TEDDY_BEAR_G: true
- Id: 3456
Title: Illusion of Teddy Bear 100 Kills
Targets:
- Id: 1
Count: 100
Location: ein_d02_i
MapMobTargets:
ILL_TEDDY_BEAR_B: true
ILL_MINERAL: true
ILL_PITMAN: true
ILL_TEDDY_BEAR_R: true
ILL_TEDDY_BEAR_Y: true
ILL_TEDDY_BEAR_W: true
ILL_OBSIDIAN: true
ILL_TEDDY_BEAR_G: true
- Id: 3457
Title: Illusion of Teddy Bear 100 Kills - Standby
TimeLimit: 4h
@@ -8038,14 +8038,74 @@ Body:
- Id: 11555
Title: In search of the taste of hometown - Waiting
TimeLimit: 4h
- Id: 11556
Title: Missing Steven
- Id: 11557
Title: Missing Steven
- Id: 11558
Title: Missing Steven
- Id: 11559
Title: Missing Steven
- Id: 11560
Title: Missing Steven
- Id: 11561
Title: Missing Steven
- Id: 11562
Title: Missing Steven
- Id: 11563
Title: Nasarian Conspiracy
Targets:
- Mob: ILL_TEDDY_BEAR_R
Count: 10
- Mob: ILL_TEDDY_BEAR_Y
Count: 10
- Mob: ILL_TEDDY_BEAR_G
Count: 10
- Id: 11564
Title: Nasarian Conspiracy
Targets:
- Mob: ILL_TEDDY_BEAR_B
Count: 10
- Mob: ILL_TEDDY_BEAR_W
Count: 10
- Id: 11565
Title: RUN!
Targets:
- Mob: ILL_PITMAN
Count: 10
- Mob: ILL_MINERAL
Count: 10
- Mob: ILL_OBSIDIAN
Count: 10
- Id: 11566
Title: Escape!!!! - Wait
Title: RUN! - Pending
TimeLimit: 4h
- Id: 11567
Title: Things That Shouldn't Exist
Targets:
- Mob: ILL_TEDDY_BEAR_R
Count: 10
- Mob: ILL_TEDDY_BEAR_Y
Count: 10
- Mob: ILL_TEDDY_BEAR_G
Count: 10
- Id: 11568
Title: Things That Shouldn't Exist
Targets:
- Mob: ILL_TEDDY_BEAR_B
Count: 10
- Mob: ILL_TEDDY_BEAR_W
Count: 10
- Id: 11569
Title: Present not to exist-wait
Title: Things That Shouldn't Exist - Pending
TimeLimit: 4h
- Id: 11570
Title: Let the Light Devour the Darkness
Targets:
- Mob: ILL_TEDDY_BEAR_S
Count: 1
- Id: 11571
Title: Let the light consume the darkness - Wait
Title: Let the Light Devour the Darkness - Pending
TimeLimit: 4h
- Id: 11596
Title: Old Memories

View File

@@ -7235,6 +7235,7 @@ Body:
TargetType: Self
DamageFlags:
IgnoreDefense: true
SimpleDefense: true
Range: 9
Hit: Single
HitCount: 1
@@ -7664,6 +7665,7 @@ Body:
TargetType: Attack
DamageFlags:
IgnoreFlee: true
SimpleDefense: true
Flags:
TargetTrap: true
Range: -2
@@ -7697,7 +7699,6 @@ Body:
- Level: 5
Time: 1000
Duration1: 3000
Duration2: 300000
FixedCastTime:
- Level: 1
Time: 2000
@@ -8877,6 +8878,7 @@ Body:
HitCount: 1
SplashArea: -1
AfterCastActDelay: 300
Duration1: 15000
Duration2: 27000
Cooldown: 4000
Requires:
@@ -9134,6 +9136,7 @@ Body:
HitCount: 1
SplashArea: -1
AfterCastActDelay: 300
Duration1: 4500
Duration2: 4500
Cooldown: 4000
Requires:
@@ -9452,6 +9455,7 @@ Body:
DamageFlags:
IgnoreAtkCard: true
IgnoreFlee: true
SimpleDefense: true
Flags:
IsNpc: true
TargetSelf: true
@@ -18360,6 +18364,43 @@ Body:
HitCount: 1
Duration1: 60000
Status: Relieve_off
- Id: 776
Name: NPC_DEADLYCURSE
Description: Deadly Curse
MaxLevel: 1
TargetType: Attack
DamageFlags:
NoDamage: true
Flags:
IgnoreGtb: true
IsNpc: true
Range: 1
Duration1: 15000
Status: Deadly_Defeasance
- Id: 779
Name: NPC_DEADLYCURSE2
Description: Deadly Curse 2
MaxLevel: 5
TargetType: Self
DamageFlags:
NoDamage: true
Splash: true
Flags:
IgnoreGtb: true
IsNpc: true
SplashArea:
- Level: 1
Area: 2
- Level: 2
Area: 3
- Level: 3
Area: 4
- Level: 4
Area: 5
- Level: 5
Area: 6
Duration2: 30000
Status: Deadly_Defeasance
- Id: 780
Name: NPC_CANE_OF_EVIL_EYE
Description: Cane of evil eye
@@ -19110,6 +19151,7 @@ Body:
DamageFlags:
Splash: true
IgnoreFlee: true
SimpleDefense: true
Flags:
TargetTrap: true
Range: 9
@@ -22655,6 +22697,7 @@ Body:
DamageFlags:
Splash: true
IgnoreFlee: true
SimpleDefense: true
Flags:
AllowOnMado: true
Range: 9
@@ -28789,6 +28832,7 @@ Body:
DamageFlags:
Splash: true
IgnoreFlee: true
SimpleDefense: true
Range:
- Level: 1
Size: 7
@@ -29687,6 +29731,19 @@ Body:
- Level: 2
Amount: 100
Status: Odins_Power
- Id: 2543
Name: ALL_RAY_OF_PROTECTION
Description: Ray of Protection
MaxLevel: 1
Type: Magic
TargetType: Support
DamageFlags:
NoDamage: true
Range: 1
Hit: Single
HitCount: 1
Duration1: 60000
Status: Protection
- Id: 2544
Name: MC_CARTDECORATE
Description: Decorate Cart
@@ -33145,6 +33202,7 @@ Body:
DamageFlags:
Splash: true
IgnoreFlee: true
SimpleDefense: true
Flags:
TargetTrap: true
Range: 9

View File

@@ -72,6 +72,7 @@ Body:
Stun: true
Sleep: true
Burning: true
Protection: true
EndOnStart:
Aeterna: true
EndReturn:
@@ -125,6 +126,7 @@ Body:
Stun: true
Sleep: true
Burning: true
Protection: true
EndOnStart:
Aeterna: true
- Status: Stun
@@ -144,6 +146,7 @@ Body:
Inspiration: true
Gvg_Stun: true
Stun: true
Protection: true
- Status: Sleep
DurationLookup: NPC_SLEEPATTACK
States:
@@ -162,6 +165,7 @@ Body:
Inspiration: true
Gvg_Sleep: true
Sleep: true
Protection: true
- Status: Poison
DurationLookup: NPC_POISON
CalcFlags:
@@ -180,6 +184,7 @@ Body:
Inspiration: true
Poison: true
Dpoison: true
Protection: true
- Status: Curse
DurationLookup: NPC_WIDECURSE
CalcFlags:
@@ -198,6 +203,7 @@ Body:
Inspiration: true
Gvg_Curse: true
Curse: true
Protection: true
- Status: Silence
DurationLookup: NPC_SILENCEATTACK
States:
@@ -214,6 +220,7 @@ Body:
Inspiration: true
Gvg_Silence: true
Silence: true
Protection: true
- Status: Confusion
DurationLookup: NPC_WIDECONFUSE
Flags:
@@ -223,6 +230,7 @@ Body:
Fail:
Refresh: true
Inspiration: true
Protection: true
EndReturn:
Confusion: true
- Status: Blind
@@ -242,6 +250,7 @@ Body:
Fear: true
Gvg_Blind: true
Blind: true
Protection: true
- Status: Bleeding
Icon: EFST_BLOODING
DurationLookup: NPC_BLEEDING
@@ -259,6 +268,7 @@ Body:
Fail:
Refresh: true
Inspiration: true
Protection: true
- Status: Dpoison
DurationLookup: NPC_POISON
CalcFlags:
@@ -999,6 +1009,7 @@ Body:
Flags:
SendOption: true
- Status: Extremityfist
Icon: EFST_EXTREMITYFIST
DurationLookup: MO_EXTREMITYFIST
CalcFlags:
Regen: true
@@ -6076,7 +6087,6 @@ Body:
NoBanishingBuster: true
NoClearance: true
NoForcedEnd: true
SendVal1: true
EndReturn:
All_Riding: true
- Status: Teargas_Sob
@@ -6108,14 +6118,6 @@ Body:
NoBanishingBuster: true
NoDispell: true
RemoveOnHermode: true
- Status: Extremityfist2
Icon: EFST_EXTREMITYFIST
DurationLookup: MO_EXTREMITYFIST
Flags:
NoRemoveOnDead: true
NoDispell: true
NoBanishingBuster: true
NoClearance: true
- Status: Mtf_Aspd2
Icon: EFST_MTF_ASPD2
CalcFlags:
@@ -8924,3 +8926,21 @@ Body:
NoClearance: true
EndOnStart:
Decreaseagi: true
- Status: Protection
Icon: EFST_RAY_OF_PROTECTION
Flags:
NoClearbuff: true
NoDispell: true
NoBanishingBuster: true
NoClearance: true
EndOnStart:
Stun: true
Sleep: true
Curse: true
Stone: true
Poison: true
Blind: true
Silence: true
Bleeding: true
Confusion: true
Freeze: true

View File

@@ -63,11 +63,12 @@ The eA Job System:
EAJL_2 0x300
- The third category is type. Classes can either be normal, rebirth/advanced,
adopted, or third class.
adopted, third class or fourth class.
EAJL_UPPER 0x1000
EAJL_BABY 0x2000
EAJL_THIRD 0x4000
EAJL_FOURTH 0x8000
So using these three categories, any job class can be constructed from the
others. Let's take a swordman, for example.
@@ -143,6 +144,11 @@ EAJL_THIRD:
if(@eac&EAJL_THIRD)
mes "Wow, you've really grown!";
EAJL_FOURTH:
Checks if a class is a fourth job.
if(@eac&EAJL_FOURTH)
mes "Wow, you've really grown!";
EAJ_UPPERMASK:
The upper mask can be used to "strip" the upper/baby characteristics of a
class, used when you want to know if someone is a certain class regardless
@@ -169,13 +175,19 @@ EAJ_BASEMASK:
check will always fail for the same reasons previously explained.
EAJ_THIRDMASK:
This mask strips 3rd class attributes. It will give the "normal" class of
This mask strips 3rd class attributes. It will give the "normal" class of
a third job, regardless of rebirth/adopted status. When used on non-third
class characters, it will return the second job, or, if that also doesn't
exist, the first.
if ((@eac&EAJ_THIRDMASK) == EAJ_WARLOCK_T)
mes "You've gone through rebirth, I see.";
EAJ_FOURTHMASK:
This mask strips 4th class attributes. Although currently there are none,
it is suggested to use this for checking.
if ((@eac&EAJ_FOURTHMASK) == EAJ_DRAGON_KNIGHT)
mes "Oh you are a Dragon Knight, I see.";
The script commands eaclass, roclass:
-------------------------------------------------------------------------------

View File

@@ -11,6 +11,12 @@
This file describes the functions of player group permissions,
configured in '/conf/groups.conf' under the "permissions" bracket.
The permission name used in '/conf/groups.conf' goes after the asterisk "*",
while the constant name used in scripts and src goes between the parentheses "()"
in the following format:
*permission_name (PC_PERM_CONSTANT_NAME)
To search for a permission, write "*" before its name.
The format of this file is as follows:
1. Basic Permissions
@@ -22,20 +28,20 @@ The format of this file is as follows:
========================
---------------------------------------
*can_trade
*can_trade (PC_PERM_TRADE)
Allows player to distribute items, such as through trades, dropping,
vending, storage, mail, etc.
---------------------------------------
*can_party
*can_party (PC_PERM_PARTY)
Allows player to create and join parties.
---------------------------------------
*attendance
*attendance (PC_PERM_ATTENDANCE)
Allows player to use the daily attendance system.
@@ -46,78 +52,78 @@ Allows player to use the daily attendance system.
===========================
---------------------------------------
*all_skill
*all_skill (PC_PERM_ALL_SKILL)
Grants player all available skills in the player's skill tree.
---------------------------------------
*all_equipment
*all_equipment (PC_PERM_USE_ALL_EQUIPMENT)
Allows player to equip any item, regardless of requirements (class, level,
etc.). Note that this can cause client errors if a sprite does not exist.
---------------------------------------
*skill_unconditional
*skill_unconditional (PC_PERM_SKILL_UNCONDITIONAL)
Allows player to use any skill, regardless of required conditions (SP,
items, etc.).
---------------------------------------
*join_chat
*join_chat (PC_PERM_JOIN_ALL_CHAT)
Allows player to join password-protected chatrooms.
---------------------------------------
*kick_chat
*kick_chat (PC_PERM_NO_CHAT_KICK)
Prevents player from being kicked from a chatroom.
---------------------------------------
*view_hpmeter
*view_hpmeter (PC_PERM_VIEW_HPMETER)
Allows player to see the HP bar of every player.
---------------------------------------
*view_equipment
*view_equipment (PC_PERM_VIEW_EQUIPMENT)
Allows player to view the equipment of every player, regardless of that
player's setting.
---------------------------------------
*hack_info
*hack_info (PC_PERM_RECEIVE_HACK_INFO)
Allows player to receive all information about players who try to hack,
spoof a name, etc.
---------------------------------------
*disable_pvm
*disable_pvm (PC_PERM_DISABLE_PVM)
Prevents player from attacking monsters.
---------------------------------------
*disable_pvp
*disable_pvp (PC_PERM_DISABLE_PVP)
Prevents player from attacking other players.
---------------------------------------
*can_trade_bounded
*can_trade_bounded (PC_PERM_TRADE_BOUNDED)
Allows player to do normal item actions with bounded items (drop, sell,
trade, etc.).
---------------------------------------
*item_unconditional
*item_unconditional (PC_PERM_ITEM_UNCONDITIONAL)
Allows player to consume any consumable item regardless the requirements
(bypass noitemconsumption mapflag, item's class, gender, status changes,
@@ -125,7 +131,7 @@ item delay, etc).
---------------------------------------
*trade_unconditional
*trade_unconditional (PC_PERM_TRADE_UNCONDITIONAL)
Allows player to ignore the trade conditions of items (drop, trade, sell, cart, storage/gstorage, mail and auction).
@@ -136,32 +142,32 @@ Allows player to ignore the trade conditions of items (drop, trade, sell, cart,
======================
---------------------------------------
*all_commands
*all_commands (PC_PERM_USE_ALL_COMMANDS)
Allows usage of all atcommands and charcommands.
---------------------------------------
*disable_commands_when_dead
*disable_commands_when_dead (PC_PERM_DISABLE_CMD_DEAD)
Disables usage of atcommands when player is dead.
---------------------------------------
*hide_session
*hide_session (PC_PERM_HIDE_SESSION)
Hides player session from being displayed by atcommands (@who, @whomap,
etc.).
---------------------------------------
*who_display_aid
*who_display_aid (PC_PERM_WHO_DISPLAY_AID)
Displays all GMs and character/account IDs in the @who command.
---------------------------------------
*any_warp
*any_warp (PC_PERM_WARP_ANYWHERE)
Allows player to bypass 'nowarp', 'nowarpto', 'noteleport', and 'nomemo'
mapflags in commands which modify a character's map or coordinates (@memo,
@@ -169,63 +175,63 @@ mapflags in commands which modify a character's map or coordinates (@memo,
---------------------------------------
*receive_requests
*receive_requests (PC_PERM_RECEIVE_REQUESTS)
Allows player to receive requests through the @requests command.
---------------------------------------
*show_bossmobs
*show_bossmobs (PC_PERM_SHOW_BOSS)
Displays boss mobs in the @showmobs command.
---------------------------------------
*channel_admin
*channel_admin (PC_PERM_CHANNEL_ADMIN)
Allows player to modify #channel settings regardless of ownership and to
join password-protected channels without a password.
---------------------------------------
*use_check
*use_check (PC_PERM_USE_CHECK)
Allows player to use the client command /check (displays character status).
---------------------------------------
*use_changemaptype
*use_changemaptype (PC_PERM_USE_CHANGEMAPTYPE)
Allows player to use the client command /changemaptype.
---------------------------------------
*command_enable
*command_enable (PC_PERM_ENABLE_COMMAND)
Enable to use atcommand while talking with NPC.
---------------------------------------
*bypass_stat_onclone
*bypass_stat_onclone (PC_PERM_BYPASS_STAT_ONCLONE)
Bypass max parameter limit while using @clonestat
---------------------------------------
*bypass_max_stat
*bypass_max_stat (PC_PERM_BYPASS_MAX_STAT)
Allow to bypass the maximum stat parameter (at conf/player.conf) to
maximum value 32,767.
---------------------------------------
*macro_detect
*macro_detect (PC_PERM_MACRO_DETECT)
Allows player to use the client command /macro_detector.
---------------------------------------
*macro_register
*macro_register (PC_PERM_MACRO_REGISTER)
Allows player to use the client commands /macro_register (used to add new captcha) and /macro_preview (used to preview captcha by ID).

View File

@@ -5694,22 +5694,35 @@ Example:
---------------------------------------
*searchstores <uses>,<effect>;
*searchstores <uses>,<effect>{,"<map name>"};
Invokes the store search window, which allows to search for both vending
and buying stores. Parameter uses indicates, how many searches can be
started, before the window has to be reopened. Effect value affects,
what happens, when a result item is double-clicked and can be one of the
following:
and buying stores.
0 = Shows the store's position on the mini-map and highlights the
shop sign with yellow color, when the store is on same map
as the invoking player.
1 = Directly opens the shop, regardless of distance.
Parameter <uses> indicates how many searches can be started
before the window has to be reopened.
Example:
// Item Universal_Catalog_Gold (10 uses, effect: open shop)
searchstores 10,1;
Parameter <effect> affects what happens when a result item is double-clicked
and can be one of the following:
SEARCHSTORE_EFFECT_NORMAL : Shows the store's position on the mini-map and highlights the
shop sign with yellow color, when the store is on same map
as the invoking player.
SEARCHSTORE_EFFECT_REMOTE : Directly opens the shop, regardless of distance.
Optional parameter <map name> indicates the name of map where the stores will be searched.
If not set, the search will be on the map the invoking character is currently on.
Special values for <map name> are:
"this" : Will search for stores on the map where the invoking character is currently on. (default)
"all" : Will search for stores on all maps.
Examples:
// Item Vending_Search_Scroll (10 uses, effect: show mark on minimap, current map)
searchstores 10, SEARCHSTORE_EFFECT_NORMAL;
// Search stores (1 use, effect: open shop, all maps on the server)
searchstores 1, SEARCHSTORE_EFFECT_REMOTE, "all";
---------------------------------------
@@ -6638,8 +6651,8 @@ Examples:
---------------------------------------
macro_detector({<account ID>});
macro_detector({"<character name>"});
*macro_detector({<account ID>});
*macro_detector({"<character name>"});
This command will display the captcha UI challenge onto the invoking character or the given <account ID>/<character name>.
@@ -6660,6 +6673,46 @@ Example:
---------------------------------------
*permission_check(<permission>{,<char_id>});
This command will return true if the attached character has the specified permission, false otherwise.
If <char_id> is given, it will check the permission for that character instead.
A full list of the player permission constants (with the 'PC_PERM' prefix) along with the
full permissions documentation can be found in 'doc/permissions.txt'.
Example:
if (permission_check(PC_PERM_TRADE)) {
mes "You have permission to trade!";
}
else {
mes "You do not have permission to trade!";
}
end;
---------------------------------------
*permission_add(<permission>{,<char_id>});
*permission_remove(<permission>{,<char_id>});
These commands will temporarily add or remove the specified permission to the attached character,
or the given <char_id> until the player logs out.
A full list of the player permission constants (with the 'PC_PERM' prefix) along with the
full permissions documentation can be found in 'doc/permissions.txt'.
Examples:
// Adds the 'can_trade' permission to the attached character,
// allowing them to trade, drop, sell, store and mail items.
permission_add(PC_PERM_TRADE);
// Removes the 'can_party' permission from the attached character,
// preventing them from joining or creating parties.
permission_remove(PC_PERM_PARTY);
---------------------------------------
==================================
|5.- Mob / NPC -related commands.|
==================================
@@ -7962,17 +8015,15 @@ Return values:
//
---------------------------------------
*npcspeed <speed value>;
*npcwalkto <x>,<y>;
*npcstop;
*npcspeed( <speed value> {,"<npc name>"} );
*npcwalkto( <x>,<y> {,"<npc name>"} } );
*npcstop( {"<npc name>", {"<flag>"}});
These commands will make the NPC object in question move around the map. As they
currently are, they are a bit buggy and are not useful for much more than making
an NPC move randomly around the map.
These commands will make the NPC object in question move around the map.
'npcspeed' will set the NPCs walking speed to a specified value. As in the
@speed GM command, 200 is the slowest possible speed while 0 is the fastest
possible (instant motion). 100 is the default character walking speed.
'npcspeed' will permanently set the NPCs walking speed to a specified value. As in the
@speed GM command, MAX_WALK_SPEED (1000) is the slowest possible speed while MIN_WALK_SPEED (20) is the fastest
possible (instant motion). DEFAULT_NPC_WALK_SPEED (200) is the default NPC walking speed.
'npcwalkto' will start the NPC sprite moving towards the specified coordinates
on the same map it is currently on. The script proceeds immediately after the
@@ -7980,10 +8031,17 @@ NPC begins moving.
'npcstop' will stop the motion.
The <flag> value in npcstop affects how the unit is stopped. The following flags are bitwise values (can be combined using the pipe operator):
USW_NONE = Unit will keep walking to their original destination.
USW_FIXPOS = Issue a fixpos packet afterwards.
USW_MOVE_ONCE = Force the unit to move one cell if it hasn't yet.
USW_MOVE_FULL_CELL = Enable moving to the next cell when unit was already half-way there (may cause on-touch/place side-effects, such as a scripted map change).
USW_FORCE_STOP = Force stop moving.
Default: USW_FIXPOS | USW_MOVE_FULL_CELL | USW_FORCE_STOP
While in transit, the NPC will be clickable, but invoking it will cause it to
stop moving, which will make its coordinates different from what the client
computed based on the speed and motion coordinates. The effect is rather
unnerving.
computed based on the speed and motion coordinates.
Only a few NPC sprites have walking animations, and those that do, do not get
the animation invoked when moving the NPC, due to the problem in the NPC walking
@@ -9798,6 +9856,7 @@ For details on the other parameters, see 'announce'.
This function checks if a party meets certain requirements, returning 1 if all
conditions are met and 0 otherwise. It will only check online characters.
The command returns 0 is the party ID does not exist.
amount - number of online party members (default is 1).
min - minimum level of all characters in the party (default is 1).

View File

@@ -58,6 +58,7 @@ IgnoreFlee - Skill ignores target's flee (Magic type always ignores)
IgnoreDefCard - Skill ignores target's defense cards.
IgnoreLongCard - Skill ignores caster's long range damage cards.
Critical - Skill can critical.
SimpleDefense - (Renewal-only) Physical damage is flatly reduced by DEF+DEF2. RES is ignored.
---------------------------------------

View File

@@ -196,14 +196,9 @@ Options: Special option/client effect state when status is active.
Flags: Various status flags for specific status change events.
None - No special flag. (Default)
BlEffect - Flag to send a visual effect to clients around if the affected unit is BL_PC, BL_HOM, BL_MER, BL_MOB, BL_ELEM or BL_NPC when the status is given.
The status must have an EFST defined in Icon - other than EFST_BLANK.
When not defined (default) the status is displayed to clients around when the affected unit is BL_PC (player) only.
DisplayPc - Whether the status is displayed (again) to client around when the affected unit (BL_PC) appears in the client's range.
DisplayNpc - Whether the status is displayed (again) to client around when the affected unit (BL_NPC) appears in the client's range.
DisplayMob - Whether the status is displayed (again) to client around when the affected unit (BL_MOB) appears in the client's range.
DisplayAll - Whether the status is displayed (again) to client around when the affected unit (BL_PC, BL_HOM, BL_MER, BL_MOB, BL_ELEM, BL_NPC or BL_PET) appears in the client's range.
When defined, other display flags are ignored.
BlEffect - Status should have BL_SCEFFECT as relevant effect, must have an EFST (displays on BL_PC, BL_HOM, BL_MER, BL_MOB, BL_ELEM). BL_PC is the default value.
DisplayPc - Displays status effect when player logs in.
DislpayNpc - Displays status effect on a NPC.
Debuff - Status is considered a debuff. Used in combination with 'battle_config.debuff_on_logout'.
SetStand - Sets player to standing state.
OverlapIgnoreLevel - The status will successfully activate for any level if the status is already active.
@@ -213,9 +208,9 @@ Flags: Various status flags for specific status change events.
MobLoseTarget - When active on a monster it will lose the target.
RestartOnMapWarp - Restarts the timer of a status when warping to another map.
SpreadEffect - Passes the status onto a target when SC_DEADLYINFECT is active.
SendVal1 - Whether val1 shouldn't be ignored.
SendVal2 - Whether val2 shouldn't be ignored.
SendVal3 - Whether val3 shouldn't be ignored.
SendVal1 - Notifies the client of a status change (val1).
SendVal2 - Notifies the client of a status change (val2).
SendVal3 - Notifies the client of a status change (val3).
NoClearbuff - Cannot be removed by 'status_change_clear_buffs()', 'sc_end SC_ALL', 'status_change_clear(3)', etc.
NoForcedEnd - Cannot be removed by sc_end.

View File

@@ -184,7 +184,28 @@ function Job_Options {
Job_Options(.@job_opt,roclass(.@eac|EAJL_THIRD)); // Expanded SN is "third" cls
}
}
// babies don't get to become 4th jobs
if (.FourthExpanded && .@eac == EAJ_REBELLION) {
Require_Level(.Req_Fourth[0], .Req_Fourth[1]);
Job_Options(.@job_opt, roclass(EAJ_NIGHT_WATCH));
}
if (.FourthExpanded && .@eac == EAJ_KAGEROUOBORO) {
Require_Level(.Req_Fourth[0], .Req_Fourth[1]);
Job_Options(.@job_opt, roclass(EAJ_SHINKIRO_SHIRANUI));
}
if (.FourthExpanded && .@eac == EAJ_SUPER_NOVICE_E) {
Require_Level(.Req_Fourth[0], .Req_Fourth[1]);
Job_Options(.@job_opt, roclass(EAJ_HYPER_NOVICE));
}
if (.FourthExpanded && .@eac == EAJ_SUMMONER) {
Require_Level(.Req_SHandler[0], .Req_SHandler[1]);
Job_Options(.@job_opt, roclass(EAJ_SPIRIT_HANDLER));
}
if (.SecondExpanded &&
((.@eac&(~EAJL_BABY)) == EAJ_NINJA || // is (Baby) Ninja
(.@eac&(~EAJL_BABY)) == EAJ_GUNSLINGER)) { // is (Baby) Gunslinger
@@ -483,6 +504,7 @@ OnInit:
// Settings
.FourthClass = true; // Enable fourth classes?
.FourthExpanded = true; // Enable new expanded fourth classes: Ex. Hyper Novice, Rebellion, Shinkiro/Shiranui?
.ThirdClass = true; // Enable third classes?
.RebirthClass = true; // Enable rebirth classes?
.SecondExpanded = true; // Enable new expanded second classes: Ex. Super Novice, Kagerou/Oboro, Rebellion?
@@ -504,6 +526,7 @@ OnInit:
setarray .Req_Fourth[0],200,70; // Minimum base level, job level to change to fourth class
setarray .Req_Exp_NJ_GS[0],99,70; // Minimum base level, job level to turn into Expanded Ninja and Gunslinger
setarray .Req_Exp_SNOVI[0],99,99; // Minimum base level, job level to turn into Expanded Super Novice
setarray .Req_SHandler[0],200,60; // Minimum base level, job level to turn into Spirit Handler
.SNovice = 45; // Minimum base level to turn into Super Novice
// Setting adjustments by PACKETVER

View File

@@ -59,7 +59,7 @@ aldeba_in,96,181,4 script Kafra Service 113,{
mes "seems that you don't";
mes "have the 20 zeny to pay";
mes "the Storage access fee...";
close;
close3;
}
mes "[Kafra Leilah]";
mes "Although this facility is";

View File

@@ -302,7 +302,7 @@ lhz_in02,91,155,5 script Assistant Beautician#li 862,{
mes "Oooh, there must";
mes "be some style that";
mes "you like, right? Hmmm...";
close;
close3;
}
}
mes "[Assistant Beautician]";
@@ -353,7 +353,7 @@ lhz_in02,91,155,5 script Assistant Beautician#li 862,{
mes "me! Thank you for using";
mes "my service and come again~";
emotion ET_CHUP;
close;
close3;
case 2:
mes "[Assistant Beautician]";
mes "Huh? Oh no, you're";

View File

@@ -594,7 +594,7 @@ lhz_in02,100,143,3 script Hair Dresser#li 122,{
mes "you can be more daring than";
mes "that! Be fashionably adventurous, you fashionable adventurer~";
emotion ET_THROB;
close;
close3;
}
}
else {
@@ -917,7 +917,7 @@ lhz_in02,100,143,3 script Hair Dresser#li 122,{
mes "I'll make you the best looking";
mes "person in the entire world!";
emotion ET_BEST;
close;
close3;
case 2:
mes "[Prince Shammi]";
mes "Oh, did you forget which";
@@ -925,7 +925,7 @@ lhz_in02,100,143,3 script Hair Dresser#li 122,{
mes "number? By all means, please";
mes "check again! Find the one that";
mes "is perfect just for you, okay?";
close;
close3;
}
}
break;

View File

@@ -157,19 +157,19 @@ geffen,132,38,3 script Bard#2 51,{
next;
mes "[Errende]";
mes "I hope that you'll always remain honest and respectful towards other people, and that you continue to ignore greed for fortune or power.";
goto L_End;
close3;
} else if (gef_bard_q > 11 && gef_bard_q < 14) {
cutin "bard_eland02",2;
mes "[Errende]";
mes "It seems you haven't found it yet. Well, take your time, I can wait as long as you want. It doesn't really bore me, since waiting seems to be a part of my profession.";
goto L_End;
close3;
} else if (gef_bard_q == 11) {
cutin "bard_eland01",2;
mes "[Errende]";
mes "Mr. Skezti has a small book store on the book street at the right side of Mineta in Juno. If you show him the seal, he'll help you out.";
goto L_End;
close3;
} else if (gef_bard_q == 10) {
cutin "bard_eland01",2;
@@ -199,7 +199,7 @@ geffen,132,38,3 script Bard#2 51,{
mes "show him the Seal of Friendship.";
mes "Good luck, now~";
set gef_bard_q,11;
goto L_End;
close3;
} else if (gef_bard_q == 20) {
cutin "bard_eland03",2;
@@ -249,7 +249,7 @@ geffen,132,38,3 script Bard#2 51,{
mes "[Errende]";
mes "Waaah, wah~";
mes "You can't just ignore me like that! Where's your sense of merriment, your sense of romance?";
goto L_End;
close3;
}
} else if (gef_bard_q == 27) {
@@ -295,7 +295,7 @@ geffen,132,38,3 script Bard#2 51,{
mes "I beseech you, if you meet him, please ask him of the 8th love and inform me of that lyric immediately~";
set gef_bard_q,22;
}
goto L_End;
close3;
} else if (gef_bard_q == 26) {
cutin "bard_eland01",2;
@@ -349,17 +349,17 @@ geffen,132,38,3 script Bard#2 51,{
mes "in advance~";
set gef_bard_q,24;
}
goto L_End;
close3;
} else if (.@inputstr$ == "Gunther") {
mes "[Errende]";
mes "Gunther? I don't think he would do this. He always puts lines in his songs like 'doubleharmony for you.' Plus, he's too silly for that.";
goto L_End;
close3;
} else if (.@inputstr$ == "Gunther Doubleharmony") {
mes "[Errende]";
mes "Gunther? I don't think he would do this. He always puts lines in his songs like 'doubleharmony for you.' Plus, he's too silly for that.";
goto L_End;
close3;
} else if (.@inputstr$ == "Errende") {
cutin "bard_eland04",2;
@@ -368,7 +368,7 @@ geffen,132,38,3 script Bard#2 51,{
mes "If I did, why would";
mes "I not know what";
mes "this song is about?";
goto L_End;
close3;
} else {
mes "[Errende]";
@@ -381,7 +381,7 @@ geffen,132,38,3 script Bard#2 51,{
mes "How could I forget";
mes "the 8th love?";
set gef_bard_q,26;
goto L_End;
close3;
}
} else if (gef_bard_q == 25) {
@@ -427,7 +427,7 @@ geffen,132,38,3 script Bard#2 51,{
mes "heart wrenching song.";
mes "But at what cost to your soul?^000000";
}
goto L_End;
close3;
} else {
cutin "bard_eland01",2;
@@ -438,7 +438,7 @@ geffen,132,38,3 script Bard#2 51,{
mes "Noboooody looooves meee";
mes "Friends foooooor never...";
mes "Ooooooooh wah!^000000";
goto L_End;
close3;
}
} else if (gef_bard_q == 24) {
@@ -464,7 +464,7 @@ geffen,132,38,3 script Bard#2 51,{
mes "Once again,";
mes "thank you so much";
mes "for your help.";
goto L_End;
close3;
} else if (gef_bard_q == 22) {
mes "[Errende]";
@@ -480,7 +480,7 @@ geffen,132,38,3 script Bard#2 51,{
next;
mes "[Errende]";
mes "Please ask ^483D8BGunther^000000 about the ^483D8B8th love^000000 in ^483D8BAt One, I Fall in Love^000000. Thank you in advance.";
goto L_End;
close3;
} else if (gef_bard_q == 23) {
cutin "bard_eland02",2;
@@ -570,19 +570,19 @@ geffen,132,38,3 script Bard#2 51,{
mes "in advance~";
set gef_bard_q,24;
}
goto L_End;
close3;
} else if (.@inputstr$ == "Gunther") {
mes "[Errende]";
mes "Gunther? I don't think he would do this. He always puts lines in his songs like 'doubleharmony for you.' Plus, he's too silly for that.";
set gef_bard_q,26;
goto L_End;
close3;
} else if (.@inputstr$ == "Gunther Doubleharmony") {
mes "[Errende]";
mes "Gunther? I don't think he would do this. He always puts lines in his songs like 'doubleharmony for you.' Plus, he's too silly for that.";
set gef_bard_q,26;
goto L_End;
close3;
} else if (.@inputstr$ == "Errende") {
cutin "bard_eland04",2;
@@ -592,7 +592,7 @@ geffen,132,38,3 script Bard#2 51,{
mes "I not know what this";
mes "song is about?";
set gef_bard_q,26;
goto L_End;
close3;
} else {
mes "[Errende]";
@@ -605,7 +605,7 @@ geffen,132,38,3 script Bard#2 51,{
mes "How could I forget";
mes "the 8th love?";
set gef_bard_q,26;
goto L_End;
close3;
}
} else if (gef_bard_q == 21) {
@@ -655,7 +655,7 @@ geffen,132,38,3 script Bard#2 51,{
mes "I beseech you, if you meet him, please ask him of the 8th love and inform me of that lyric immediately~";
set gef_bard_q,2;
}
goto L_End;
close3;
} else if (gef_bard_q == 6) {
cutin "bard_eland04",2;
@@ -699,23 +699,23 @@ geffen,132,38,3 script Bard#2 51,{
mes "I'll pay you back somehow! Thank you for your trouble in advance~";
set gef_bard_q,4;
}
goto L_End;
close3;
} else if (.@inputstr$ == "Gunther") {
mes "[Errende]";
mes "Gunther? I don't think he would do this. He always puts lines in his songs like 'doubleharmony for you.' Plus, he's too silly for that.";
goto L_End;
close3;
} else if (.@inputstr$ == "Gunther Doubleharmony") {
mes "[Errende]";
mes "Gunther? I don't think he would do this. He always puts lines in his songs like 'doubleharmony for you.' Plus, he's too silly for that.";
goto L_End;
close3;
} else if (.@inputstr$ == "Errende") {
cutin "bard_eland04",2;
mes "[Errende]";
mes "Surely you jest! If I did, why would I not know what this song is about?";
goto L_End;
close3;
} else {
mes "[Errende]";
@@ -727,7 +727,7 @@ geffen,132,38,3 script Bard#2 51,{
mes "How could I forget";
mes "the 8th love?";
set gef_bard_q,6;
goto L_End;
close3;
}
} else if (gef_bard_q == 5) {
@@ -764,7 +764,7 @@ geffen,132,38,3 script Bard#2 51,{
mes "heart wrenching song.";
mes "But at what cost to your soul?^000000";
}
goto L_End;
close3;
} else {
cutin "bard_eland01",2;
@@ -775,7 +775,7 @@ geffen,132,38,3 script Bard#2 51,{
mes "Noboooody looooves meee";
mes "Friends foooooor never...";
mes "Ooooooooooh wah!^000000";
goto L_End;
close3;
}
} else if (gef_bard_q == 4) {
@@ -800,7 +800,7 @@ geffen,132,38,3 script Bard#2 51,{
mes "Once again,";
mes "thank you so much";
mes "for your help.";
goto L_End;
close3;
} else if (gef_bard_q == 2) {
cutin "bard_eland04",2;
@@ -813,7 +813,7 @@ geffen,132,38,3 script Bard#2 51,{
next;
mes "[Errende]";
mes "Please ask ^483D8BGunther^000000 about the ^483D8B8th love^000000 in ^483D8BAt One, I Fall in Love^000000. Thank you in advance.";
goto L_End;
close3;
} else if (gef_bard_q == 3) {
cutin "bard_eland02",2;
@@ -898,27 +898,27 @@ geffen,132,38,3 script Bard#2 51,{
mes "I'll pay you back somehow! Thank you for your trouble in advance~";
set gef_bard_q,4;
}
goto L_End;
close3;
} else if (.@inputstr$ == "Gunther") {
mes "[Errende]";
mes "Gunther? I don't think he would do this. He always puts lines in his songs like 'doubleharmony for you.' Plus, he's too silly for that.";
set gef_bard_q,6;
goto L_End;
close3;
}
else if (.@inputstr$ == "Gunther Doubleharmony") {
mes "[Errende]";
mes "Gunther? I don't think he would do this. He always puts lines in his songs like 'doubleharmony for you.' Plus, he's too silly for that.";
set gef_bard_q,6;
goto L_End;
close3;
} else if (.@inputstr$ == "Errende") {
cutin "bard_eland04",2;
mes "[Errende]";
mes "Surely you jest! If I did, why would I not know what this song is about?";
set gef_bard_q,6;
goto L_End;
close3;
} else {
mes "[Errende]";
@@ -930,7 +930,7 @@ geffen,132,38,3 script Bard#2 51,{
mes "How could I forget";
mes "the 8th love?";
set gef_bard_q,6;
goto L_End;
close3;
}
} else if (gef_bard_q == 1) {
@@ -993,11 +993,7 @@ geffen,132,38,3 script Bard#2 51,{
}
}
L_End:
close2;
cutin "",255;
end;
close3;
// SubRoutine for 5 similiar dialogues of the quest
@@ -1114,7 +1110,7 @@ S_StorySong:
mes "[Errende]";
mes "Oh, how disappointing. But promise me that you will drop by later, so that we can share stories and merriment.";
}
goto L_End;
close3;
case 2:
.@num = getarg(0);
@@ -1149,7 +1145,7 @@ S_StorySong:
mes "My apologies,";
mes "But I cannot offer my services for free. Even a Bard needs zeny to live, wouldn't you agree?";
}
goto L_End;
close3;
case 2:
cutin "bard_eland03",2;
@@ -1218,7 +1214,7 @@ S_StorySong:
mes "may never know";
mes "with certainty.";
}
goto L_End;
close3;
} else if (.@random == 2) {
@@ -1321,7 +1317,7 @@ S_StorySong:
if(gef_bard_q==1) set gef_bard_q,7;
if(gef_bard_q==21) set gef_bard_q,27;
}
goto L_End;
close3;
}
mes "^483D8BA good Bard sings";
@@ -1345,7 +1341,7 @@ S_StorySong:
mes "[Errende]";
mes "H-how can you say such a thing, "+ @name$ +"? Have you ever been a Bard before? It's difficult to come up with fresh, original melodies!";
}
goto L_End;
close3;
case 3:
cutin "bard_eland01",2;
@@ -1355,7 +1351,7 @@ S_StorySong:
mes "enjoyed when you";
mes "are in the mood for it.";
mes "Please come again.";
goto L_End;
close3;
}
@@ -1364,7 +1360,7 @@ S_StorySong:
mes "[Errende]";
mes "Hmm~?";
mes "Well, alright. Though, listening to a good story or cheerful song can really do you some good. Alright then, see you later.";
goto L_End;
close3;
}
}

View File

@@ -61,7 +61,7 @@
mes "cooking when Novices";
mes "like yourself are running";
mes "around here like children.";
close;
close3;
}
cutin "orleans_1",0;
mes "[Charles Orleans]";

View File

@@ -3816,7 +3816,7 @@ ra_temple,116,174,3 script Nemma#ra_temple 920,{
mes "wouldn't come here to pray...";
mes "Well, I hope you enjoy your";
mes "time here, adventurer.";
goto L_End;
close3;
}
mes "[Priestess Nemma]";
mes "Oh! I'm glad to see that";
@@ -3869,7 +3869,7 @@ ra_temple,116,174,3 script Nemma#ra_temple 920,{
mes "all your journeys. May the";
mes "grace of the goddess always";
mes "support us in all that we do~";
goto L_End;
close3;
}
mes "[Priestess Nemma]";
mes "Great! How much would you";
@@ -3898,7 +3898,7 @@ ra_temple,116,174,3 script Nemma#ra_temple 920,{
mes "protecting you, wherever you go~";
break;
}
goto L_End;
close3;
}
else {
cutin "ra_nemma03",2;
@@ -3939,7 +3939,7 @@ ra_temple,116,174,3 script Nemma#ra_temple 920,{
mes "protecting you, wherever you go~";
break;
}
goto L_End;
close3;
case 2:
mes "[Priestess Nemma]";
mes "Oh! If you'd like some";
@@ -3968,7 +3968,7 @@ ra_temple,116,174,3 script Nemma#ra_temple 920,{
mes "Oh, how sweet of you~";
break;
}
goto L_End;
close3;
}
}
else {
@@ -3976,7 +3976,7 @@ ra_temple,116,174,3 script Nemma#ra_temple 920,{
cutin "ra_nemma01",2;
mes "[Priestess Nemma]";
mes "Welcome to our temple!";
goto L_End;
close3;
}
if (ra_tem_q < 1) {
mes "[Priestess Nemma]";
@@ -4009,7 +4009,7 @@ ra_temple,116,174,3 script Nemma#ra_temple 920,{
mes "to go inside. ^333333*Sob*^000000 P-Panno!";
mes "Panno, I neeeed heeeeelp~!";
set ra_tem_q,1;
goto L_End;
close3;
}
else if ((ra_tem_q >= 1) && (ra_tem_q < 10)) {
mes "[Priestess Nemma]";
@@ -4024,7 +4024,7 @@ ra_temple,116,174,3 script Nemma#ra_temple 920,{
mes "Panno would know";
mes "what to do... I think.";
mes "Ooh, Panno, help me!";
goto L_End;
close3;
}
else if (ra_tem_q == 10) {
cutin "ra_nemma04",2;
@@ -4050,7 +4050,7 @@ ra_temple,116,174,3 script Nemma#ra_temple 920,{
mes "I'm outside. What if";
mes "the gate locks up again?";
mes "Oooh, what should I do?!";
goto L_End;
close3;
}
else if (ra_tem_q == 11) {
emotion ET_DELIGHT;
@@ -4062,7 +4062,7 @@ ra_temple,116,174,3 script Nemma#ra_temple 920,{
mes "longer asking for donations,";
mes "but you can still redeem your";
mes "Lottery Tickets inside, okay?";
goto L_End;
close3;
}
else if (ra_tem_q == 12) {
mes "[Priestess Nemma]";
@@ -4089,7 +4089,7 @@ ra_temple,116,174,3 script Nemma#ra_temple 920,{
mes "like, ^FF000020 of them^000000! Thank";
mes "you thank you thank you!";
set ra_tem_q,13;
goto L_End;
close3;
}
else if (ra_tem_q == 13) {
mes "[Priestess Nemma]";
@@ -4124,7 +4124,7 @@ ra_temple,116,174,3 script Nemma#ra_temple 920,{
mes "to play! Hm, maybe";
mes "our pope would like";
mes "to see these too?";
goto L_End;
close3;
}
cutin "ra_nemma02",2;
mes "[Priestess Nemma]";
@@ -4143,20 +4143,16 @@ ra_temple,116,174,3 script Nemma#ra_temple 920,{
mes "have much to pay you";
mes "back with, anyway~";
}
goto L_End;
close3;
}
else {
cutin "ra_nemma01",2;
mes "[Priestess Nemma]";
mes "Welcome to our temple!";
}
goto L_End;
close3;
}
L_End:
close2;
cutin "",255;
end;
close3;
S_Donate:
.@num = getarg(0);
@@ -6329,7 +6325,7 @@ ra_temin,170,46,3 script Panno#rachel 920,{
mes "everything I know.";
mes "Remember to keep";
mes "quiet about what I said.";
goto L_End;
close3;
}
}
else if (ra_tem_q < 2) {
@@ -6358,7 +6354,7 @@ ra_temin,170,46,3 script Panno#rachel 920,{
mes "time, so please visit";
mes "me at your leisure.";
mes "Go with Freya.";
goto L_End;
close3;
case 2:
cutin "ra_fano01",2;
@@ -6397,14 +6393,14 @@ ra_temin,170,46,3 script Panno#rachel 920,{
mes "side of the hallway. However,";
mes "you can only enter if you've";
mes "been permitted beforehand.";
goto L_End;
close3;
case 3:
mes "[Priestess Panno]";
mes "......................";
mes "No chit-chat";
mes "inside the temple.";
goto L_End;
close3;
}
}
else if (ra_tem_q == 10) {
@@ -6439,7 +6435,7 @@ ra_temin,170,46,3 script Panno#rachel 920,{
mes "time, so please visit";
mes "me at your leisure.";
mes "Go with Freya.";
goto L_End;
close3;
case 2:
cutin "ra_fano01",2;
@@ -6478,7 +6474,7 @@ ra_temin,170,46,3 script Panno#rachel 920,{
mes "side of the hallway. However,";
mes "you can only enter if you've";
mes "been permitted beforehand.";
goto L_End;
close3;
case 3:
cutin "ra_fano02",2;
@@ -6525,7 +6521,7 @@ ra_temin,170,46,3 script Panno#rachel 920,{
mes "[Priestess Panno]";
mes ".........";
set ra_tem_q,11;
goto L_End;
close3;
}
}
else if (ra_tem_q == 11) {
@@ -6660,7 +6656,7 @@ ra_temin,170,46,3 script Panno#rachel 920,{
mes "Excuse me now, I need";
mes "to get back to work.";
set ra_tem_q,12;
goto L_End;
close3;
}
cutin "ra_fano02",2;
mes "[Priestess Panno]";
@@ -6668,7 +6664,7 @@ ra_temin,170,46,3 script Panno#rachel 920,{
mes "Behave yourself, and";
mes "respect those who have";
mes "come here just to worship.";
goto L_End;
close3;
L_Lottery:
if(checkweight(607,1) == 0){
@@ -6680,7 +6676,7 @@ L_Lottery:
mes "something large, unwieldy";
mes "and heavy? Put your junk";
mes "away in Storage first.";
goto L_End;
close3;
}
mes "[Priestess Panno]";
mes "Here we go";
@@ -6716,7 +6712,7 @@ L_Lottery:
else if (.@bonus_donate > 5 && .@bonus_donate < 11) getitem 518,1; //Honey 5%
else if (.@bonus_donate > 0 && .@bonus_donate < 6) getitem 526,1; //Royal Jelly 5%
else getitem 547,1; //Condensed White Potion 39%
goto L_End;
close3;
}
mes "[Priestess Panno]";
mes "You...";
@@ -6736,7 +6732,7 @@ L_Lottery:
cutin "ra_fano03",2;
mes "[Priestess Panno]";
mes "May Freya be with you.";
goto L_End;
close3;
L_End:
close2;

View File

@@ -284,7 +284,7 @@ prontera,124,297,3 script Tialfi 706,{
next;
mes "[Tialfi]";
mes "I think we'd better wait and see what's happening. Someone will deliver the news to us. Though, I am unsure of whether or not it will be good news or bad...";
close;
close3;
}
else if (BaseLevel < 70) {
cutin "god_tialpi02",2;

View File

@@ -3093,13 +3093,11 @@ OnTouch_:
end;
}
/* Currently broken.
prt_maze02,25,161,0 script #music -1,7,7,{
OnTouch_:
soundeffect "effect\\¼®¾çÀÇ ¾î½Ø½Å.wav",1;
soundeffect "effect\\¼®¾çÀÇ ¾î½Ø½Å.wav",1;
end;
}
*/
prt_maze02,132,132,0 script #skill -1,{
OnEnable:

View File

@@ -84,8 +84,8 @@ dicastes01,234,158,0 script Training Galten#a 450,{
mes "if I keep up with my training every day.";
close;
}
mes "<EFBFBD><EFBFBD>  <><EFBFBD> ▲";
mes "<EFBFBD> ▲";
mes "▲◆↑ ▲ ▲◆↑ ▲";
mes " ▲";
next;
mes "Don't know what it means.";
close;
@@ -130,7 +130,7 @@ dicastes01,248,129,0 script Training Galten#d 450,{
close;
}
mes "▲◆↑ ▲ ▲◆↑";
mes "▲◆↑ ▲<EFBFBD> <20><EFBFBD> ▲";
mes "▲◆↑ ▲ ▲◆↑ ▲";
next;
mes "Don't know what it means.";
close;

View File

@@ -323,7 +323,7 @@ lasa_fild01,60,322,3 script Vigilante Aglio#doram02 4_DR_AGLIO,{
cutin "tutorial02.BMP",4;
mes "^4d4dff!- Notice -!^000000";
mes "^4d4dffCheck out the quest details by pressing the shortcut key [Alt+U],^000000 or through the Quest icon found in the menu tray.^000000";
close;
close3;
}
mes "[Vigilante Aglio]";
mes "Whoa, you're good!";

View File

@@ -1,45 +0,0 @@
//===== rAthena Script =======================================
//= Lasagna Warps
//===== Changelogs: ==========================================
//= 1.0 First Version. [Capuche]
//============================================================
lasa_fild02,348,244,0 warp lasa_fild02#lasa_dun01 1,1,lasa_dun01,24,143
lasa_dun01,18,143,0 warp lasa_dun01#lasa_fild02 1,1,lasa_fild02,344,243
lasa_dun_q,190,14,0 warp lasa_dun_q#lasa_dun01 1,1,lasa_dun01,152,98
lasa_dun01,157,98,0 warp lasa_dun01#lasa_dun02 1,1,lasa_dun02,22,171
lasa_dun02,18,171,0 warp lasa_dun02#lasa_dun01 1,1,lasa_dun01,153,98
lasa_dun02,146,58,0 warp lasa_dun02#lasa_dun03 1,1,lasa_dun03,190,18
lasa_dun03,190,15,0 warp lasa_dun03#lasa_dun02 1,1,lasa_dun02,146,54
lasa_fild01,134,381,0 warp lasa_fild01#lasagna_1 2,2,lasagna,153,58
lasagna,150,54,0 warp lasagna#lasa_fild01_1 2,2,lasa_fild01,131,378
lasa_fild01,341,375,0 warp lasa_fild01#lasagna_2 2,2,lasagna,327,56
lasagna,327,51,0 warp lasagna#lasa_fild01_2 2,2,lasa_fild01,344,371
lasagna,358,91,0 warp lasagna#lasa_fild02 2,2,lasa_fild02,20,98
lasa_fild02,16,98,0 warp lasa_fild02#lasagna 2,2,lasagna,355,92
lasa_in01,159,61,0 warp lasa_in01#lasagna 1,1,lasagna,68,202
// Boat
conch_in,60,61,0 warp2 warp_conch_in#out 1,1,lasagna,206,323
conch_in,51,60,0 warp2 warp_conch_in#A_B 1,1,conch_in,31,60
conch_in,34,60,0 warp2 warp_conch_in#B_A 1,1,conch_in,53,59
conch_in,63,53,0 warp2 warp_conch_in#C_D 1,1,conch_in,63,33
conch_in,63,35,0 warp2 warp_conch_in#D_C 1,1,conch_in,64,55
conch_in,64,66,0 warp2 warp_conch_in#E_F 1,1,conch_in,63,89
conch_in,63,87,0 warp2 warp_conch_in#F_E 1,1,conch_in,63,64
conch_in,101,53,0 warp2 warp_conch_in#G_H 1,1,conch_in,101,33
conch_in,101,35,0 warp2 warp_conch_in#H_G 1,1,conch_in,102,55
conch_in,101,66,0 warp2 warp_conch_in#I_J 1,1,conch_in,101,89
conch_in,102,87,0 warp2 warp_conch_in#J_I 1,1,conch_in,101,64
conch_in,137,53,0 warp2 warp_conch_in#K_L 1,1,conch_in,139,33
conch_in,139,35,0 warp2 warp_conch_in#L_K 1,1,conch_in,138,55
conch_in,137,66,0 warp2 warp_conch_in#M_N 1,1,conch_in,139,89
conch_in,140,87,0 warp2 warp_conch_in#N_M 1,1,conch_in,137,64
conch_in,142,60,0 warp2 warp_conch_in#O_P 1,1,conch_in,162,61
conch_in,159,61,0 warp2 warp_conch_in#P_O 1,1,conch_in,140,59

View File

@@ -438,7 +438,7 @@ function GuardianData;
if (select( "Fire","Cancel" ) == 2) {
mes "[ Hired Kafra Employee ]";
mes "I'll work hard for you... Thank you!";
close;
close3;
}
mes "[ Hired Kafra Employee ]";
mes "Oh, my goodness! This is nonsense!";

View File

@@ -727,11 +727,11 @@ OnTimer300:
}
1@mcd,141,214,5 script Charleston 2#1 4_F_CHARLESTON02,{
cutin "dalle01.bmp",2;
if (is_party_leader() == false) {
cutin "dalle01.bmp",2;
mes "[Charleston 1]";
mes "Please let me talk to your leader about the supplementation of the factory.";
close;
close3;
}
if ('ep15_1_mcd01 > 11)
end;

View File

@@ -263,7 +263,6 @@ OnTouch:
1@os_b,137,139,0 duplicate(Thick Wire#171_os_0) Thick Wire#171_os_2 4_ENERGY_BLUE
1@os_b,122,212,5 script Dien#171_os_3 4_F_DIENE,{
OnTalk:
cutin "ep162_dn01",2;
mes "[Dien]";
mes "Oh!";
@@ -281,8 +280,14 @@ OnTalk:
mes "It will take some time to break it~";
npctalk "Cotnes : Oh, is this gate too hard? It will take some time to break it.";
next;
doevent instance_npcname("Dien#171_os_3") + "::OnTalk";
close;
cutin "ep162_dn01",2;
mes "[Dien]";
mes "Oh!";
mes "If you go to the right, I think you can go back on the railroad without having to break the door.";
npctalk "Dien : Oh! If you go to the right, I think you can go back on the railroad without having to break the door";
if (!'unlocked)
donpcevent instance_npcname("#171_sealedos_control") + "::OnEvent04";
close3;
}
1@os_b,146,221,7 script Ridsh#171_os_2 4_F_LEEDSH,{

View File

@@ -836,7 +836,7 @@ job_ko,81,124,4 script Kuuga Gai#ko 730,{
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,
26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50;
for (set .@i,getarraysize(.@n)-1; .@i>0; set .@i,.@i-1) {
set .@rand, rand(.@i);
set .@rand, rand(0,.@i);
set .@tmp, .@n[.@i];
set .@n[.@i], .@n[.@rand];
set .@n[.@rand], .@tmp;

View File

@@ -5218,7 +5218,7 @@ new_1-3,99,169,3 script Friendly Poring#ac 4_PORING,{
next;
mes "[Poring]";
mes "It may fail, but keep trying to lure way those Little Porings!";
close;
close3;
}
} else if (isbegin_quest(2297) == 1) {
mes "[Poring]";

View File

@@ -433,6 +433,7 @@ Body:
RequiredItems:
- Index: 0
Item: Staff_Of_Bordeaux
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 30
@@ -444,6 +445,7 @@ Body:
RequiredItems:
- Index: 0
Item: Moonlight_Sword
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 60
@@ -455,6 +457,7 @@ Body:
RequiredItems:
- Index: 0
Item: Long_Mace
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 10
@@ -466,6 +469,7 @@ Body:
RequiredItems:
- Index: 0
Item: Spectral_Spear
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 20
@@ -477,6 +481,7 @@ Body:
RequiredItems:
- Index: 0
Item: Nurse_Cap
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 10
@@ -488,6 +493,7 @@ Body:
RequiredItems:
- Index: 0
Item: Apple_Of_Archer
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 10
@@ -499,6 +505,7 @@ Body:
RequiredItems:
- Index: 0
Item: Puente_Robe
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 10
@@ -510,6 +517,7 @@ Body:
RequiredItems:
- Index: 0
Item: Muffler_
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 10
@@ -521,6 +529,7 @@ Body:
RequiredItems:
- Index: 0
Item: Shoes_
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 10
@@ -534,6 +543,7 @@ Body:
RequiredItems:
- Index: 0
Item: Huuma_Fluttering_Snow
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 100
@@ -545,6 +555,7 @@ Body:
RequiredItems:
- Index: 0
Item: Combo_Battle_Glove
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 100
@@ -556,6 +567,7 @@ Body:
RequiredItems:
- Index: 0
Item: Herald_Of_GOD_
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 100
@@ -567,6 +579,7 @@ Body:
RequiredItems:
- Index: 0
Item: Clack_Of_Servival
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 100
@@ -578,6 +591,7 @@ Body:
RequiredItems:
- Index: 0
Item: Cap_
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 50
@@ -591,6 +605,7 @@ Body:
RequiredItems:
- Index: 0
Item: Infiltrator_
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 80
@@ -602,6 +617,7 @@ Body:
RequiredItems:
- Index: 0
Item: Ghoul_Leg
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 10
@@ -613,6 +629,7 @@ Body:
RequiredItems:
- Index: 0
Item: Wizardy_Staff
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 40
@@ -624,6 +641,7 @@ Body:
RequiredItems:
- Index: 0
Item: Balistar_
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 50
@@ -635,6 +653,7 @@ Body:
RequiredItems:
- Index: 0
Item: Book_Of_The_Apocalypse
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 50
@@ -646,6 +665,7 @@ Body:
RequiredItems:
- Index: 0
Item: Cape_Of_Ancient_Lord_
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 30
@@ -681,6 +701,7 @@ Body:
RequiredItems:
- Index: 0
Item: Immaterial_Sword
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 100
@@ -692,6 +713,7 @@ Body:
RequiredItems:
- Index: 0
Item: War_Axe
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 100
@@ -703,6 +725,7 @@ Body:
RequiredItems:
- Index: 0
Item: Pole_Axe
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 100
@@ -714,6 +737,7 @@ Body:
RequiredItems:
- Index: 0
Item: Huuma_Bird_Wing
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 100
@@ -725,6 +749,7 @@ Body:
RequiredItems:
- Index: 0
Item: Iron_Driver
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 100
@@ -749,6 +774,7 @@ Body:
RequiredItems:
- Index: 0
Item: Tablet
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 50
@@ -760,6 +786,7 @@ Body:
RequiredItems:
- Index: 0
Item: Hunter_Bow_
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 80
@@ -777,6 +804,7 @@ Body:
RequiredItems:
- Index: 0
Item: Goibne's_Helmet
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 120
@@ -791,6 +819,7 @@ Body:
RequiredItems:
- Index: 0
Item: Goibne's_Armor
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 80
@@ -805,6 +834,7 @@ Body:
RequiredItems:
- Index: 0
Item: Goibne's_Combat_Boots
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 80
@@ -819,6 +849,7 @@ Body:
RequiredItems:
- Index: 0
Item: Goibne's_Shoulder_Arms
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 120
@@ -828,3 +859,89 @@ Body:
- Index: 3
Item: Token_Of_Bigstone
Amount: 150
- Name: barter_ill_teddy
Items:
- Index: 0
Item: Counter_Dagger_IL
RequiredItems:
- Index: 0
Item: Counter_Dagger
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 95
- Index: 2
Item: Green_Bearopy
Amount: 75
- Index: 3
Item: Chonchon_Doll_HQ
Amount: 50
- Index: 1
Item: Gate_KeeperDD_IL
RequiredItems:
- Index: 0
Item: Gate_KeeperDD
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 95
- Index: 2
Item: Gothic_China_Doll
Amount: 75
- Index: 3
Item: NasariansSoulstone
Amount: 150
- Index: 2
Item: Survival_Staff_IL
RequiredItems:
- Index: 0
Item: Survival_Rod_
Refine: 9
- Index: 1
Item: Survival_Rod2_
Refine: 9
- Index: 2
Item: IllusionStone
Amount: 125
- Index: 3
Item: Gothic_China_Doll
Amount: 100
- Index: 4
Item: Chonchon_Doll_HQ
Amount: 100
- Index: 5
Item: Clay_Doll
Amount: 15
- Index: 3
Item: Boots_IL
RequiredItems:
- Index: 0
Item: Boots_
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 85
- Index: 2
Item: Green_Bearopy
Amount: 50
- Index: 3
Item: Gothic_China_Doll
Amount: 50
- Index: 4
Item: Headband_Of_Power_IL
RequiredItems:
- Index: 0
Item: Headband_Of_Power
Refine: 9
- Index: 1
Item: IllusionStone
Amount: 115
- Index: 2
Item: NasariansSoulstone
Amount: 100
- Index: 3
Item: Chonchon_Doll_HQ
Amount: 50
- Index: 4
Item: Clay_Doll
Amount: 5

View File

@@ -15,6 +15,7 @@
//= 1.6 Added Illusion of Underwater exchange [Capuche]
//= 1.7 Added Illusion of Twins enchanter [Capuche]
//= 1.8 Added Illusion Merchant [Haydrich]
//= 1.9 Added Illusion of Teddy Bear exchange [Atemo]
//============================================================
//============================================================
@@ -884,3 +885,53 @@ OnInit:
npcshopupdate "market_resonance_stone",100004,2000000,99999;
end;
}
//============================================================
//= Illusion of Teddy Bear
//============================================================
ein_d02_i,177,158,3 script Bear Wanting Illusion Stone#ITB 4_NASARIAN,{
.@item_name$ = getitemname(25271); // IllusionStone
mes "[Bear Wanting " + .@item_name$ + "]";
mes "If you give me an " + .@item_name$ + ", I'll do something nice for you!";
next;
switch( select( "Reason for being here", "Good thing [Illusion equipment]", "Quit" ) ) {
case 1:
mes "[Bear Wanting " + .@item_name$ + "]";
mes "I don't know why...!";
mes "The other teddy bears were in line, so I was in line too!";
mes "Whoaaaaaa!!!!";
mes "I didn't know it was here!";
next;
mes "[Bear Wanting " + .@item_name$ + "]";
mes "A teddy bear with an " + .@item_name$ + "!";
mes "Strong!";
mes "I don't have any " + .@item_name$ + "s!";
mes "Less... stronger...";
next;
mes "[Bear Wanting " + .@item_name$ + "]";
mes "What are " + .@item_name$ + "s?";
mes "I don't know but I want some!";
close;
case 2:
mes "[Bear Wanting " + .@item_name$ + "]";
mes "Makes you good with what you have!";
next;
mes "[Bear Wanting " + .@item_name$ + "]";
mes "If you want to do well, bring equipment refined to ^ff0000+9 or higher. It'll all disappear... haha?^000000";
next;
mes "[Bear Wanting " + .@item_name$ + "]";
mes "^ff0000" + .@item_name$ + "^000000!!! " + .@item_name$ + " is the most important thing, but... other materials are also needed.";
mes "For every good thing you need another good thing.";
next;
close2;
callshop( "barter_ill_teddy" );
end;
case 3:
mes "[Bear Wanting " + .@item_name$ + "]";
mes "Okay...";
close;
}
end;
}

View File

@@ -0,0 +1,29 @@
//===== rAthena Script =======================================
//= Shopping Boards
//===== Description: =========================================
//= Shopping Boards work like Bargain Hunter's Catalogues.
//= They are found in towns and search exclusively in their respective maps.
//= Searches are limited to 1 use per board click (you can re-use the board without closing it to get another search).
//= https://irowiki.org/wiki/Commerce#Shopping_Boards
//===== Changelog: ===========================================
//= 1.0 Initial version. [Pokye]
//============================================================
- script Shopping Board -1,{
searchstores 1, SEARCHSTORE_EFFECT_REMOTE;
end;
}
alberta,119,65,3 duplicate(Shopping Board) Shopping Board#alb 4_BOARD3
aldebaran,146,120,3 duplicate(Shopping Board) Shopping Board#alde 4_BOARD3
comodo,206,153,3 duplicate(Shopping Board) Shopping Board#cmd 4_BOARD3
geffen,130,68,3 duplicate(Shopping Board) Shopping Board#gef 4_BOARD3
izlude,127,116,3 duplicate(Shopping Board) Shopping Board#izl 4_BOARD3
morocc,166,109,3 duplicate(Shopping Board) Shopping Board#moc 4_BOARD3
payon,183,103,3 duplicate(Shopping Board) Shopping Board#pay 4_BOARD3
prontera,159,193,3 duplicate(Shopping Board) Shopping Board#prt1 4_BOARD3
prontera,182,214,3 duplicate(Shopping Board) Shopping Board#prt2 4_BOARD3
prontera,130,215,3 duplicate(Shopping Board) Shopping Board#prt3 4_BOARD3
prontera,146,85,3 duplicate(Shopping Board) Shopping Board#prt4 4_BOARD3
xmas,155,144,3 duplicate(Shopping Board) Shopping Board#xmas 4_BOARD3
yuno,146,187,3 duplicate(Shopping Board) Shopping Board#yuno 4_BOARD3

View File

@@ -14,6 +14,7 @@
//= 1.3 Official kRO 10.1 spawns [Playtester]
//= 1.4 More accurate spawns [Playtester]
//= 1.5 Corrected MVP spawn variance. [L0ne_W0lf]
//= 1.6 Added Illusion of Teddy Bear. [Atemo]
//============================================================
//==================================================
@@ -49,3 +50,46 @@ ein_dun03 monster White Porcellio 20602,22
ein_dun03 monster Jeweliant 20598,20
ein_dun03 monster Jewel 20600,3
ein_dun03 boss_monster Jungoliant 20601,1,7200000,600000,0
//==================================================
// Illusion of Teddy Bear
//==================================================
ein_d02_i monster Red Teddybear 20255,25,5000,0,"ein_d02_i_boss::OnMobDead"
ein_d02_i monster Yellow Teddybear 20256,25,5000,0,"ein_d02_i_boss::OnMobDead"
ein_d02_i monster Green Teddybear 20257,25,5000,0,"ein_d02_i_boss::OnMobDead"
ein_d02_i monster White Teddybear 20258,20,5000,0,"ein_d02_i_boss::OnMobDead"
ein_d02_i monster Blue Teddybear 20259,20,5000,0,"ein_d02_i_boss::OnMobDead"
ein_d02_i monster Pitman Labor Type 20261,20
ein_d02_i monster Piece of Spirit 20262,15
ein_d02_i monster Spirit Dwelling Obsidian 20263,15
- script ein_d02_i_boss -1,{
end;
OnMobDead:
if (playerattached()) {
if (.count < 2500)
.count++;
if (!.boss_spawn && !.cooldown && .count == 2500) {
.boss_spawn = true;
.count = 0;
killmonster "ein_d02_i", "ein_d02_i_boss::OnBossDeath";
// mapannounce "ein_d02_i", "", bc_map; // Unknown text
getunitdata( killedgid, .@data );
monster "ein_d02_i", .@data[UMOB_X], .@data[UMOB_Y], "--ja--", 20260,1, "ein_d02_i_boss::OnBossDeath"; // ILL_TEDDY_BEAR_S
end;
}
}
end;
OnBossDeath:
// (no announce)
killmonster "ein_d02_i", "ein_d02_i_boss::OnBossDeath";
.boss_spawn = false;
.cooldown = true;
initnpctimer;
end;
OnTimer7200000:
.cooldown = false;
stopnpctimer;
end;
}

View File

@@ -103,7 +103,7 @@ prt_in,33,114,5 script Raffam Oranpere 10058,{
if( getcharid( 2 ) ){
mes "[Raffam Oranpere]";
mes "Come back to join after you leave your current guild.";
close;
close3;
}else if( getcharid( 5 ) != 0 ){
cutin "laperm04.bmp", 2;
mes "[Raffam Oranpere]";
@@ -268,7 +268,7 @@ prt_in,35,114,5 script Devon Aire 10059,{
if( getcharid( 2 ) ){
mes "[Devon Aire]";
mes "Leave your guild first to join my Clan, duh.";
close;
close3;
}else if( getcharid( 5 ) != 0 ){
cutin "debon03.bmp", 2;
mes "[Devon Aire]";
@@ -421,7 +421,7 @@ prt_in,37,114,5 script Berman Aire 10060,{
mes "[Berman Aire]";
mes "Oh, no.";
mes "In order to join, you first have to leave your current guild.";
close;
close3;
}else if( getcharid( 5 ) != 0 ){
mes "[Berman Aire]";
mes "You're already in a Clan.";
@@ -567,7 +567,7 @@ prt_in,39,114,5 script Shaam Rumi 10027,{
if( getcharid( 2 ) ){
mes "[Shaam Rumi]";
mes "Did you finish things up with your guild?";
close;
close3;
}else if( getcharid( 5 ) != 0 ){
mes "[Shaam Rumi]";
mes "Eh, you're already in a Clan. Hey, this isn't funny.";

View File

@@ -17,6 +17,7 @@
//= 1.5 Optimized, based on code by Zopokx. [Euphy]
//= 1.6 Added support to Para_Team_Mark_ in Eden Group. [Ragno]
//= 1.7 Added use of F_HasEdenGroupMark function. [Ragno]
//= 1.8 Reverting Magic Wand Quest to request Trunks. [Carlosgrr]
//============================================================
moc_para01,42,38,3 script Mission [56 - 70] 857,{
@@ -49,7 +50,7 @@ moc_para01,42,38,3 script Mission [56 - 70] 857,{
case 1: callsub L_HuntingQuest,3260,16000,6000;
case 2: callsub L_HuntingQuest,3261,16000,7000;
case 3: callsub L_Quest,3262,17000,7000,1032,40;
case 4: callsub L_Quest,3263,18000,8000,1021,30,7150,30;
case 4: callsub L_Quest,3263,18000,8000,1021,30,1019,30;
}
}
end;
@@ -354,7 +355,7 @@ L_Details:
next;
mes "To make the wand, I need some special materials.";
next;
mes "Please bring me 30 Dokebi Horns and 30 Bamboo Cut. If you do so, I will lend you my magic wand once. Haha, good deal?";
mes "Please bring me 30 Dokebi Horns and 30 Trunks. If you do so, I will lend you my magic wand once. Haha, good deal?";
next;
mes "Please confirm it to us after you complete the mission, then we will give you proper rewards.";
next;

View File

@@ -618,7 +618,6 @@ OnInit:
end;
}
/*
ein_d02_i,161,180,5 script Machoko#machoco 8_F_GIRL,{
if (BaseLevel < 150)
end;
@@ -767,7 +766,6 @@ OnInit:
questinfo( QTYPE_DAILYQUEST, QMARK_YELLOW, "checkquest(3457,PLAYTIME) == 2" );
end;
}
*/
tur_d03_i,125,186,5 script Orian#orian 4_M_LGTPOOR,{
if (BaseLevel < 150)

View File

@@ -4057,7 +4057,7 @@ prt_cas_q,20,139,3 script Spica Nerius#ep16_room01 4_EP16_SPICA,{
next;
mes "[Spica]";
mes "" + strcharinfo(0) + ", why don't you go back to your room and wait for the message?";
close;
close3;
}
mes "[Spica]";
mes "Why don't you go visit other families if you have not visited them all?";
@@ -4105,7 +4105,7 @@ prt_cas_q,20,139,3 script Spica Nerius#ep16_room01 4_EP16_SPICA,{
next;
mes "[Spica]";
mes "I wonder if the old folks would hear me out though.";
close;
close3;
}
mes "[Spica]";
mes "Skia told me something similar to that.";
@@ -8968,7 +8968,7 @@ prt_cas_q,93,74,4 script Po Richard#EP161GAM 4_M_6THPRIN1,{
emotion ET_OTL;
mes "[Po Richard]";
mes "I guess the offer hasn't been attractive to you. I am sorry, but come back later when you change your mind.";
close;
close3;
}
emotion ET_OK;
mes "[Po Richard]";

View File

@@ -3650,6 +3650,7 @@ que_swat,145,57,3 script Philopontess#ep162_04 4_M_PHILOFONTES,{
terra_gloria_main = 25;
questinfo_refresh();
close2;
cutin "",255;
npctalk "Oh, please come here for a moment.", "Rookie#ep162_03", bc_self;
end;
}
@@ -3669,7 +3670,7 @@ que_swat,145,57,3 script Philopontess#ep162_04 4_M_PHILOFONTES,{
mes "[Tess]";
mes "Not now?";
mes "Then get some rest and come back please.";
close;
close3;
}
mes "[Tess]";
mes "Since we don't know where they are hiding, start looking in corners such as cabinets and boxes.";
@@ -3876,7 +3877,7 @@ rebel_in,70,78,3 script Elena Volkova#16.2rm 4_F_ELENA,{
if (countitem(25161) < 1) {
mes "[USU commander Elena]";
mes "...Why are you empty-handed? Where is the cookie?";
close;
close3;
}
emotion ET_DELIGHT;
mes "[USU commander Elena]";

View File

@@ -3955,7 +3955,7 @@ sp_rudus,184,360,5 script Elena Volkova#171_rudus 4_F_ELENA,{
setquest 7859;
getitem 25723,15;
getexp 800000,800000;
close;
close3;
}
if (isbegin_quest(7859) == 1) {
cutin "162elena_01",2;
@@ -4359,6 +4359,7 @@ sp_rudus,130,200,4 script Morning#171_rudus 4_EP17_MORNING,{
unittalk getcharid(3),strcharinfo(0) + " : This kid seems to be Morning.",bc_self;
switch (prompt("Find a meal for Morning.:Chat with Morning.")) {
case 255:
cutin "",255;
setpcblock PCBLOCK_ALL,false;
end;
case 1:
@@ -4382,6 +4383,7 @@ sp_rudus,130,200,4 script Morning#171_rudus 4_EP17_MORNING,{
sleep2 2000;
switch (prompt("I'll bring it.:Something urgent happened.")) {
case 255:
cutin "",255;
setpcblock PCBLOCK_ALL,false;
end;
case 1:

View File

@@ -3944,7 +3944,7 @@ ba_in01,51,157,3 script Est#ep172_est01 4_F_ESTLOVELOY,{
if (!is_party_leader()) {
mes "^4D4DFFThis place is a memorial dungeon.";
mes "You have to be a party leader to create a memorial dungeon.^000000";
close;
close3;
}
if (instance_create(.@md_name$) == -3)
dispbottom "The reservation of the instance '" + .@md_name$ + "' has failed due to an active instance.";

File diff suppressed because it is too large Load Diff

View File

@@ -2625,13 +2625,13 @@ OnTouch:
delitem 6506, 1; // Memorial_Boquet
erasequest 7398;
setquest 7399;
close;
close3;
} else if (malaya_diwata == 5) {
cutin "malaya_diwata02", 2;
mes "[Diwata]";
mes "I promise I'll be a good little girl if those hillbillies leave me alone.";
mes "If they bother me again, however, I won't be.";
close;
close3;
} else {
if (checkquest(7402) == -1) {
if (checkquest(7403) == -1) {
@@ -2650,7 +2650,7 @@ OnTouch:
mes "The flowers you bring makes me calm down.";
mes "....";
mes ".. It's not because I miss people or I like the flowers. Don't take it the wrong way.";
close;
close3;
}
cutin "malaya_diwata01", 2;
mes "[Diwata]";
@@ -2658,7 +2658,7 @@ OnTouch:
mes "What? Oh, it's you.";
mes "Those hillbillies came back again!";
mes "I'm going to kill them!";
close;
close3;
}
cutin "malaya_diwata02", 2;
mes "[Diwata]";
@@ -2669,7 +2669,7 @@ OnTouch:
mes "The flowers you bring makes me calm down.";
mes "....";
mes ".. It's not because I miss people or I like the flowers. Don't take it the wrong way.";
close;
close3;
}
cutin "malaya_diwata01", 2;
mes "[Diwata]";
@@ -2718,7 +2718,7 @@ OnTouch:
delitem 6506, 1; // Memorial_Boquet
setquest 7403;
erasequest 7402;
close;
close3;
}
cutin "", 255;
end;

View File

@@ -3389,26 +3389,26 @@ L_ShowReport:
mes "[Experimental Results]";
mes "*** Researcher - Inffle";
mes "*** Research Assistant - "+strcharinfo(0);
mes "¡¡";
mes " ";
mes "<Research topic>";
mes "*** Bath of Mora Village";
mes "¡¡";
mes " ";
mes "<Aim>";
mes "To investigate the mysterious power of the bath water";
mes "and to find out ways to better utilize";
mes "the water.";
mes "¡¡";
mes " ";
mes "<Methods>";
mes "1. Obtained an unidentified DNA sample.";
mes "Obtained a sample of an unidentified DNA,";
mes "and collected more samples to look further into it.";
mes "¡¡";
mes " ";
mes "2. A comparison analysis on the unidentified DNA";
mes "Concluded that the DNA belongs to";
mes "an unidentified creature living in the bath water.";
mes "combine and result in";
mes "from the swordfish DNA.";
mes "¡¡";
mes " ";
mes "3. Research on the puddles around the village";
mes "From the four puddles around the village,";
mes "confirmed that the testing substances were";
@@ -3416,9 +3416,9 @@ L_ShowReport:
mes "It is thought that the four puddles";
mes "combine and result in";
mes "the mysterious power.";
mes "¡¡";
mes " ";
mes "<Material analysis>";
mes "*** Temperature ***** 33.5° ";
mes "*** Temperature ***** 33.5¡Æ";
mes "*** PH ************ 9.8";
mes "*** Solid residues *** 176";
mes "*** K+ ************ 0,23";

View File

@@ -177,6 +177,7 @@ npc: npc/re/merchants/enchan_upg.txt
npc: npc/re/merchants/te_merchant.txt
npc: npc/re/merchants/shadow_refiner.txt
npc: npc/re/merchants/eden_market.txt
//npc: npc/re/merchants/shopping_boards.txt
// --------------------------- Others ---------------------------
npc: npc/re/other/achievements.txt
@@ -273,4 +274,3 @@ npc: npc/re/quests/woe_te/te_goditem_alde1.txt
npc: npc/re/custom/lasagna/lasa_dun.txt
npc: npc/re/custom/lasagna/lasa_fild.txt
npc: npc/re/custom/lasagna/lasagna_npcs.txt
npc: npc/re/custom/lasagna/warps.txt

View File

@@ -10,6 +10,7 @@ npc: npc/re/warps/cities/dicastes.txt
npc: npc/re/warps/cities/eclage.txt
npc: npc/re/warps/cities/einbech.txt
npc: npc/re/warps/cities/einbroch.txt
npc: npc/re/warps/cities/lasagna.txt
npc: npc/re/warps/cities/lighthalzen.txt
npc: npc/re/warps/cities/izlude.txt
npc: npc/re/warps/cities/malangdo.txt

View File

@@ -0,0 +1,47 @@
//===== rAthena Script =======================================
//= Lasagna Warps
//===== Changelogs: ==========================================
//= 1.0 First Version. [Capuche]
//= 1.1 Official conversion. [Lemongrass]
//============================================================
lasa_fild02,348,244,0 warp lasadun01_in 1,1,lasa_dun01,24,143
lasa_dun01,18,143,0 warp lasadun_out 1,1,lasa_fild02,344,243
lasa_dun_q,190,14,0 warp dun_q_dun01 1,1,lasa_dun01,152,98
lasa_dun01,157,98,0 warp lasadun01_to2f 1,1,lasa_dun02,22,171
lasa_dun02,18,171,0 warp lasadun02_to1f 1,1,lasa_dun01,153,98
lasa_dun02,146,58,0 warp lasadun02_to3f 1,1,lasa_dun03,190,18
lasa_dun03,190,15,0 warp lasadun03_to2f 1,1,lasa_dun02,146,54
lasa_fild01,134,381,0 warp lasagna_in01 2,2,lasagna,153,58
lasagna,150,54,0 warp lasagna_out01 2,2,lasa_fild01,131,378
lasa_fild01,341,375,0 warp lasagna_in02 1,1,lasagna,327,56
lasagna,327,51,0 warp lasagna_out02 1,1,lasa_fild01,344,371
lasagna,358,91,0 warp lasagna_in03 1,1,lasa_fild02,20,98
// lasa_fild02,16,98,0 warp lasagna_in03 1,1,lasagna,355,92 // (NPC name is not unique)
lasa_fild02,16,98,0 warp lasagna_in03#01 1,1,lasagna,355,92
lasa_in01,159,61,0 warp dining_lasa 1,1,lasagna,68,202
// Boat
conch_in,60,61,0 warp2 conch_lasagna 1,1,lasagna,206,323
conch_in,51,60,0 warp2 hall_cap 1,1,conch_in,31,60
conch_in,34,60,0 warp2 cap_hall 1,1,conch_in,53,59
conch_in,63,53,0 warp2 hall_in04 1,1,conch_in,63,33
conch_in,63,35,0 warp2 in04_hall 1,1,conch_in,64,55
conch_in,64,66,0 warp2 hall_in01 1,1,conch_in,63,89
conch_in,63,87,0 warp2 in01_hall 1,1,conch_in,63,64
conch_in,101,53,0 warp2 hall_in05 1,1,conch_in,101,33
conch_in,101,35,0 warp2 in05_hall 1,1,conch_in,102,55
conch_in,101,66,0 warp2 hall_in02 1,1,conch_in,101,89
conch_in,102,87,0 warp2 in02_hall 1,1,conch_in,101,64
conch_in,137,53,0 warp2 hall_in06 1,1,conch_in,139,33
conch_in,139,35,0 warp2 in06_hall 1,1,conch_in,138,55
conch_in,137,66,0 warp2 hall_in03 1,1,conch_in,139,89
conch_in,140,87,0 warp2 in03_hall 1,1,conch_in,137,64
conch_in,142,60,0 warp2 hall_dining 1,1,conch_in,162,61
conch_in,159,61,0 warp2 dining_hall 1,1,conch_in,140,59

View File

@@ -106,6 +106,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "yamlupgrade", "src\tool\yam
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ryml", "3rdparty\rapidyaml\ryml.vcxproj", "{492E2981-34F4-3A6A-BFD9-46096C641203}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_DEPRECATED_USE_CMAKE_INSTEAD_", "_DEPRECATED_USE_CMAKE_INSTEAD_", "{7BDFFA26-6F88-4F5B-8B7E-3B51C9FD9BA3}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32

View File

@@ -1,29 +1,16 @@
#
# setup and static libraries
#
set(RA_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} CACHE PATH
"rathena include directory"
)
mark_as_advanced( RA_INCLUDE_DIRS )
mark_as_advanced(RA_INCLUDE_DIRS)
add_subdirectory(common)
add_subdirectory(login)
add_subdirectory(char)
add_subdirectory(map)
add_subdirectory(web)
add_subdirectory( common )
if( HAVE_common )
option( BUILD_SERVERS "build server executables" ON )
else()
message( STATUS "Disabled server targets (requires common)" )
endif()
add_subdirectory(tool)
#
# targets
#
add_subdirectory( login )
add_subdirectory( char )
add_subdirectory( map )
add_subdirectory( web )
add_subdirectory( tool )
# add_subdirectory( tool )

View File

@@ -1,40 +1,52 @@
#
# setup
#
set( CHAR_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE INTERNAL "" )
add_executable(char-server)
target_sources(char-server PRIVATE
"char.cpp"
"char_clif.cpp"
"char_cnslif.cpp"
"char_logif.cpp"
"char_mapif.cpp"
"int_achievement.cpp"
"int_auction.cpp"
"int_clan.cpp"
"int_elemental.cpp"
"int_guild.cpp"
"int_homun.cpp"
"int_mail.cpp"
"int_mercenary.cpp"
"int_party.cpp"
"int_pet.cpp"
"int_quest.cpp"
"int_storage.cpp"
"inter.cpp"
)
#
# char server
#
if( BUILD_SERVERS )
message( STATUS "Creating target char-server" )
file(GLOB CHAR_HEADERS ${CHAR_SOURCE_DIR}/*.hpp)
file(GLOB CHAR_SOURCES_CXX ${CHAR_SOURCE_DIR}/*.cpp)
set(CHAR_SOURCES ${CHAR_SOURCES_C} ${CHAR_SOURCES_CXX})
#message( STATUS "CHAR_SOURCES="${CHAR_SOURCES})
set( DEPENDENCIES common )
set( LIBRARIES ${GLOBAL_LIBRARIES} )
set( INCLUDE_DIRS ${GLOBAL_INCLUDE_DIRS} ${COMMON_BASE_INCLUDE_DIRS} ${RA_INCLUDE_DIRS} )
set( DEFINITIONS "${GLOBAL_DEFINITIONS} ${COMMON_BASE_DEFINITIONS}" )
set( SOURCE_FILES ${COMMON_BASE_HEADERS} ${COMMON_HEADERS} ${CHAR_HEADERS} ${CHAR_SOURCES} )
source_group( common FILES ${COMMON_BASE_HEADERS} ${COMMON_HEADERS} )
source_group( char FILES ${CHAR_HEADERS} ${CHAR_SOURCES} )
include_directories( ${INCLUDE_DIRS} )
if(WIN32)
target_sources(char-server PRIVATE
"char_clif.hpp"
"char_cnslif.hpp"
"char.hpp"
"char_logif.hpp"
"char_mapif.hpp"
"int_achievement.hpp"
"int_auction.hpp"
"int_clan.hpp"
"int_elemental.hpp"
"inter.hpp"
"int_guild.hpp"
"int_homun.hpp"
"int_mail.hpp"
"int_mercenary.hpp"
"int_party.hpp"
"int_pet.hpp"
"int_quest.hpp"
"int_storage.hpp"
"packets.hpp"
)
#message( STATUS "char-server SOURCE_FILES=${SOURCE_FILES}")
add_executable( char-server ${SOURCE_FILES} )
#message( STATUS "char-server LIBRARIES=${LIBRARIES}, DEPENDENCIES=${DEPENDENCIES} DEFINITIONS=${DEFINITIONS}")
add_dependencies( char-server ${DEPENDENCIES} )
target_link_libraries( char-server ${LIBRARIES} ${DEPENDENCIES} )
set_target_properties( char-server PROPERTIES COMPILE_FLAGS "${DEFINITIONS}" )
set_target_properties(char-server PROPERTIES FOLDER "Servers")
endif()
if( INSTALL_COMPONENT_RUNTIME )
cpack_add_component( Runtime_charserver DESCRIPTION "char-server" DISPLAY_NAME "char-server" GROUP Runtime )
install( TARGETS char-server
DESTINATION "."
COMPONENT Runtime_charserver )
endif( INSTALL_COMPONENT_RUNTIME )
set( TARGET_LIST ${TARGET_LIST} char-server CACHE INTERNAL "" )
message( STATUS "Creating target char-server - done" )
endif( BUILD_SERVERS )
target_link_libraries(char-server PUBLIC
common
)

View File

@@ -25,6 +25,7 @@
#include <common/strlib.hpp>
#include <common/timer.hpp>
#include <common/utilities.hpp>
#include <common/utils.hpp>
#include "char_clif.hpp"
#include "char_cnslif.hpp"
@@ -1357,10 +1358,12 @@ int char_check_char_name(char * name, char * esc_name)
if( name[0] == '\0' )
return -2; // empty character name
/**
* The client does not allow you to create names with less than 4 characters, however,
* the use of WPE can bypass this, and this fixes the exploit.
* By default the client does not allow you to create names with less than 4 characters,
* however the use of WPE can bypass this, and this fixes the exploit.
* It can also be changed in the configuration file in conjunction with the
* 'Remove 4/6 letter Character Name Limit' client diff patch.
**/
if( strlen( name ) < 4 )
if( strlen( name ) < charserv_config.char_config.char_name_min_length )
return -2;
// check content of character name
if( remove_control_chars(name) )
@@ -2158,16 +2161,23 @@ int char_pincode_compare( int fd, struct char_session_data* sd, char* pin ){
}
}
void char_pincode_decrypt( uint32 userSeed, char* pin ){
bool char_pincode_decrypt( uint32 userSeed, char* pin ){
int i;
char tab[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
char *buf;
if (safestrnlen(pin, 4) != PINCODE_LENGTH)
return false;
for (i = 0; i < PINCODE_LENGTH; ++i) {
if (!ISDIGIT(pin[i]))
return false;
}
for( i = 1; i < 10; i++ ){
int pos;
uint32 multiplier = 0x3498, baseSeed = 0x881234;
userSeed = baseSeed + userSeed * multiplier;
pos = userSeed % ( i + 1 );
if( i != pos ){
@@ -2184,6 +2194,8 @@ void char_pincode_decrypt( uint32 userSeed, char* pin ){
}
strcpy( pin, buf );
aFree( buf );
return true;
}
#endif
@@ -2753,6 +2765,7 @@ void char_set_defaults(){
charserv_config.char_config.char_name_option = 0; // Option to know which letters/symbols are authorised in the name of a character (0: all, 1: only those in char_name_letters, 2: all EXCEPT those in char_name_letters) by [Yor]
safestrncpy(charserv_config.char_config.unknown_char_name,"Unknown",sizeof(charserv_config.char_config.unknown_char_name)); // Name to use when the requested name cannot be determined
safestrncpy(charserv_config.char_config.char_name_letters,"",sizeof(charserv_config.char_config.char_name_letters)); // list of letters/symbols allowed (or not) in a character name. by [Yor]
charserv_config.char_config.char_name_min_length = 4; // Minimum character name length
charserv_config.save_log = 1; // show loading/saving messages
charserv_config.log_char = 1; // loggin char or not [devil]
@@ -3016,6 +3029,8 @@ bool char_config_read(const char* cfgName, bool normal){
charserv_config.char_config.char_name_option = atoi(w2);
} else if (strcmpi(w1, "char_name_letters") == 0) {
safestrncpy(charserv_config.char_config.char_name_letters, w2, sizeof(charserv_config.char_config.char_name_letters));
} else if (strcmpi(w1, "char_name_min_length") == 0) {
charserv_config.char_config.char_name_min_length = cap_value(atoi(w2), 0, NAME_LENGTH - 1);
} else if (strcmpi(w1, "char_del_level") == 0) { //disable/enable char deletion by its level condition [Lupus]
charserv_config.char_config.char_del_level = atoi(w2);
} else if (strcmpi(w1, "char_del_delay") == 0) {

View File

@@ -151,6 +151,7 @@ struct Char_Config {
char unknown_char_name[NAME_LENGTH]; // Name to use when the requested name cannot be determined
char char_name_letters[1024]; // list of letters/symbols allowed (or not) in a character name. by [Yor]
int char_name_option; // Option to know which letters/symbols are authorised in the name of a character (0: all, 1: only those in char_name_letters, 2: all EXCEPT those in char_name_letters) by [Yor]
uint8 char_name_min_length; // Minimum character name length (default: 4)
int char_del_option; // Character deletion type, email = 1, birthdate = 2 (default)
int char_del_restriction; // Character deletion restriction (0: none, 1: if the character is in a party, 2: if the character is in a guild, 3: if the character is in a party or a guild)
bool char_rename_party; // Character renaming in a party
@@ -266,6 +267,7 @@ struct char_session_data {
uint32 pincode_seed;
time_t pincode_change;
uint16 pincode_try;
bool pincode_correct;
// Addon system
unsigned int char_moves[MAX_CHARS]; // character moves left
uint8 isvip;
@@ -318,7 +320,7 @@ int char_family(int pl1,int pl2,int pl3);
int char_loadName(uint32 char_id, char* name);
int char_check_char_name(char * name, char * esc_name);
void char_pincode_decrypt( uint32 userSeed, char* pin );
bool char_pincode_decrypt( uint32 userSeed, char* pin );
int char_pincode_compare( int fd, struct char_session_data* sd, char* pin );
void char_auth_ok(int fd, struct char_session_data *sd);
void char_set_charselect(uint32 account_id);

View File

@@ -167,15 +167,22 @@ int chclif_parse_pincode_check( int fd, struct char_session_data* sd ){
char pin[PINCODE_LENGTH+1];
if( charserv_config.pincode_config.pincode_enabled==0 || RFIFOL(fd,2) != sd->account_id )
if( charserv_config.pincode_config.pincode_enabled==0 || RFIFOL(fd,2) != sd->account_id ) {
set_eof(fd);
return 1;
}
memset(pin,0,PINCODE_LENGTH+1);
strncpy((char*)pin, RFIFOCP(fd, 6), PINCODE_LENGTH);
RFIFOSKIP(fd,10);
char_pincode_decrypt(sd->pincode_seed, pin );
if (!char_pincode_decrypt(sd->pincode_seed, pin )) {
set_eof(fd);
return 1;
}
if( char_pincode_compare( fd, sd, pin ) ){
sd->pincode_correct = true;
chclif_pincode_sendstate( fd, sd, PINCODE_PASSED );
}
return 1;
@@ -257,28 +264,34 @@ bool pincode_allowed( char* pincode ){
int chclif_parse_pincode_change( int fd, struct char_session_data* sd ){
FIFOSD_CHECK(14);
if( charserv_config.pincode_config.pincode_enabled==0 || RFIFOL(fd,2) != sd->account_id )
if( charserv_config.pincode_config.pincode_enabled==0 || RFIFOL(fd,2) != sd->account_id ) {
set_eof(fd);
return 1;
}
else {
char oldpin[PINCODE_LENGTH+1];
char newpin[PINCODE_LENGTH+1];
memset(oldpin,0,PINCODE_LENGTH+1);
memset(newpin,0,PINCODE_LENGTH+1);
strncpy(oldpin, RFIFOCP(fd,6), PINCODE_LENGTH);
strncpy(newpin, RFIFOCP(fd,10), PINCODE_LENGTH);
RFIFOSKIP(fd,14);
char_pincode_decrypt(sd->pincode_seed,oldpin);
if (!char_pincode_decrypt(sd->pincode_seed,oldpin) || !char_pincode_decrypt(sd->pincode_seed,newpin)) {
set_eof(fd);
return 1;
}
if( !char_pincode_compare( fd, sd, oldpin ) )
return 1;
char_pincode_decrypt(sd->pincode_seed,newpin);
if( pincode_allowed(newpin) ){
chlogif_pincode_notifyLoginPinUpdate( sd->account_id, newpin );
strncpy(sd->pincode, newpin, sizeof(newpin));
ShowInfo("Pincode changed for AID: %d\n", sd->account_id);
sd->pincode_correct = true;
chclif_pincode_sendstate( fd, sd, PINCODE_PASSED );
}else{
chclif_pincode_sendstate( fd, sd, PINCODE_ILLEGAL );
@@ -293,21 +306,27 @@ int chclif_parse_pincode_change( int fd, struct char_session_data* sd ){
int chclif_parse_pincode_setnew( int fd, struct char_session_data* sd ){
FIFOSD_CHECK(10);
if( charserv_config.pincode_config.pincode_enabled==0 || RFIFOL(fd,2) != sd->account_id )
if( charserv_config.pincode_config.pincode_enabled==0 || RFIFOL(fd,2) != sd->account_id ) {
set_eof(fd);
return 1;
}
else {
char newpin[PINCODE_LENGTH+1];
memset(newpin,0,PINCODE_LENGTH+1);
strncpy( newpin, RFIFOCP(fd,6), PINCODE_LENGTH );
RFIFOSKIP(fd,10);
char_pincode_decrypt( sd->pincode_seed, newpin );
if (!char_pincode_decrypt( sd->pincode_seed, newpin )) {
set_eof(fd);
return 1;
}
if( pincode_allowed(newpin) ){
chlogif_pincode_notifyLoginPinUpdate( sd->account_id, newpin );
strncpy( sd->pincode, newpin, sizeof( newpin ) );
sd->pincode_correct = true;
chclif_pincode_sendstate( fd, sd, PINCODE_PASSED );
chclif_pincode_sendstate( fd, sd, PINCODE_PASSED );
}else{
chclif_pincode_sendstate( fd, sd, PINCODE_ILLEGAL );
}
@@ -741,6 +760,7 @@ int chclif_parse_reqtoconnect(int fd, struct char_session_data* sd,uint32 ipl){
sd->login_id2 = login_id2;
sd->sex = sex;
sd->auth = false; // not authed yet
sd->pincode_correct = false; // not entered pincode correctly yet
// send back account_id
WFIFOHEAD(fd,4);
@@ -763,6 +783,7 @@ int chclif_parse_reqtoconnect(int fd, struct char_session_data* sd,uint32 ipl){
{// authentication found (coming from map server)
char_get_authdb().erase(account_id);
char_auth_ok(fd, sd);
sd->pincode_correct = true; // already entered pincode correctly yet
}
else
{// authentication not found (coming from login server)
@@ -1553,6 +1574,54 @@ int chclif_parse(int fd) {
unsigned short cmd;
cmd = RFIFOW(fd,0);
#if PACKETVER_SUPPORTS_PINCODE
// If the pincode system is enabled
if( charserv_config.pincode_config.pincode_enabled ){
switch( cmd ){
// Connect of player
case 0x65:
// Client keep-alive packet (every 12 seconds)
case 0x187:
// Checks the entered pin
case 0x8b8:
// Request PIN change
case 0x8be:
// Request for PIN window
case 0x8c5:
// Request character list
case 0x9a1:
// Connect of map-server
case 0x2af8:
break;
// Before processing any other packets, do a few checks
default:
// To reach this block the client should have attained a session already
if( sd != nullptr ){
// If the pincode was entered correctly
if( sd->pincode_correct ){
break;
}
// If no pincode is set (yet)
if( strlen( sd->pincode ) <= 0 ){
break;
}
// The pincode was not entered correctly, yet the player (=bot) tried to send a different packet => Goodbye!
set_eof( fd );
return 0;
}else{
// Unknown packet received
ShowError( "chclif_parse: Received unknown packet " CL_WHITE "0x%x" CL_RESET " from ip '" CL_WHITE "%s" CL_RESET "'! Disconnecting!\n", cmd, ip2str( ipl, nullptr ) );
set_eof( fd );
return 0;
}
}
}
#endif
switch( cmd ) {
case 0x65: next=chclif_parse_reqtoconnect(fd,sd,ipl); break;
// char select
@@ -1596,7 +1665,7 @@ int chclif_parse(int fd) {
break;
// unknown packet received
default:
ShowError("parse_char: Received unknown packet " CL_WHITE "0x%x" CL_RESET " from ip '" CL_WHITE "%s" CL_RESET "'! Disconnecting!\n", RFIFOW(fd,0), ip2str(ipl, nullptr));
ShowError( "chclif_parse: Received unknown packet " CL_WHITE "0x%x" CL_RESET " from ip '" CL_WHITE "%s" CL_RESET "'! Disconnecting!\n", cmd, ip2str( ipl, nullptr ) );
set_eof(fd);
return 0;
}

View File

@@ -1,191 +1,226 @@
include(CheckCSourceRuns)
include(CheckFunctionExists)
#
# Create version.hpp
# Test monotonic clock
#
message( STATUS "Creating version.hpp" )
if(GIT_VERSION)
# those 2 was done in parent to produce this
#include(GetGitVersion)
#get_git_version()
string(SUBSTRING ${GIT_VERSION} 0 10 SHORT_GIT_VERSION)
string(SUBSTRING ${GIT_HEAD_VERSION} 0 10 SHORT_GIT_HEAD_VERSION)
string(CONCAT GIT_STR_VERSIONS ${SHORT_GIT_VERSION} "_" ${SHORT_GIT_HEAD_VERSION})
#message( STATUS "git version=${GIT_STR_VERSIONS}" )
file( WRITE ${CMAKE_CURRENT_BINARY_DIR}/version.hpp
"#ifndef SVNVERSION\n#define SVNVERSION ${GIT_STR_VERSIONS}\n#endif\n" )
elseif( SVNVERSION )
file( WRITE ${CMAKE_CURRENT_BINARY_DIR}/version.hpp
"#ifndef SVNVERSION\n#define SVNVERSION ${SVNVERSION}\n#endif\n" )
# CLOCK_MONOTONIC clock for clock_gettime
# Normally defines _POSIX_TIMERS > 0 and _POSIX_MONOTONIC_CLOCK (for posix
# compliant systems) and __FreeBSD_cc_version >= 500005 (for FreeBSD
# >= 5.1.0, which does not have the posix defines (ref. r11983)) would be
# checked but some systems define them even when they do not support it
# (ref. bugreport:1003).
#
message(STATUS "Check for monotonic clock")
find_library(RT_LIBRARY rt)# (optional, rt on Debian)
mark_as_advanced(RT_LIBRARY)
set(CMAKE_REQUIRED_LIBRARIES ${GLOBAL_LIBRARIES} ${RT_LIBRARY})
file(READ "${CMAKE_SOURCE_DIR}/3rdparty/cmake/tests/HAVE_MONOTONIC_CLOCK.c" _SOURCE)
CHECK_C_SOURCE_RUNS("${_SOURCE}" HAVE_MONOTONIC_CLOCK)
if(HAVE_MONOTONIC_CLOCK)
message(STATUS "Check for monotonic clock - yes")
set(MONOTONIC_CLOCK_LIBRARIES ${RT_LIBRARY})
set(MONOTONIC_CLOCK_DEFINITIONS "-DHAVE_MONOTONIC_CLOCK")
else()
file( WRITE ${CMAKE_CURRENT_BINARY_DIR}/version.hpp "" )
message(STATUS "Check for monotonic clock - no")
endif()
set( GLOBAL_INCLUDE_DIRS ${GLOBAL_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR} CACHE INTERNAL "" )
set( SVNVERSION ${SVNVERSION}
CACHE STRING "SVN version of the source code" )
if( INSTALL_COMPONENT_DEVELOPMENT )
install( FILES ${CMAKE_CURRENT_BINARY_DIR}/version.hpp
DESTINATION "src/common"
COMPONENT Development_base )
endif( INSTALL_COMPONENT_DEVELOPMENT )
message( STATUS "Creating version.hpp - done" )
set( COMMON_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}"
CACHE PATH "common source directory" )
#message( STATUS "DEBUG COMMON_SOURCE_DIR=${COMMON_SOURCE_DIR}" )
mark_as_advanced( COMMON_SOURCE_DIR )
# Check ENABLE_MEMORY option
if(ENABLE_MEMORY STREQUAL "system")
# use the normal system functions
else()
message(STATUS "Feature not implemented, defaulting to system")
endif()
#####################################################################
# setup
#
if( WIN32 )
set( PROJECT_LIBS Ws2_32.lib )
if( MSVC )
add_definitions(-D_WINSOCK_DEPRECATED_NO_WARNINGS)
add_library(minicore EXCLUDE_FROM_ALL)
add_library(common)
# add_library(core-tools)
add_library(common-win INTERFACE)
if(WIN32)
target_link_libraries(common-win INTERFACE "ws2_32.lib")
if(MSVC)
target_compile_definitions(common-win INTERFACE
_WINSOCK_DEPRECATED_NO_WARNINGS _CRT_SECURE_NO_DEPRECATE _CRT_NONSTDC_NO_DEPRECATE)
endif()
set( COMMON_ADDITIONALL_CPP "${COMMON_SOURCE_DIR}/winapi.cpp" )
set( COMMON_ADDITIONALL_HPP "${COMMON_SOURCE_DIR}/winapi.hpp" )
endif()
set( COMMON_ALL_HEADERS
"${CMAKE_CURRENT_BINARY_DIR}/version.hpp"
"${COMMON_SOURCE_DIR}/cbasetypes.hpp"
"${COMMON_SOURCE_DIR}/mmo.hpp"
target_sources(common-win INTERFACE
"${CMAKE_CURRENT_SOURCE_DIR}/winapi.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/winapi.hpp"
)
add_library(minicore)
target_link_libraries(minicore PUBLIC common-win)
target_link_libraries(common PUBLIC common-win)
endif()
target_sources(minicore PRIVATE
"${COMMON_SOURCE_DIR}/core.cpp"
"${COMMON_SOURCE_DIR}/malloc.cpp"
"${COMMON_SOURCE_DIR}/showmsg.cpp"
"${COMMON_SOURCE_DIR}/strlib.cpp"
${LIBCONFIG_SOURCES} # needed by showmsg.cpp
${COMMON_ADDITIONALL_CPP} # needed by Windows
"core.cpp"
"database.cpp"
"des.cpp"
"grfio.cpp"
"malloc.cpp"
"nullpo.cpp"
"showmsg.cpp"
"strlib.cpp"
"utils.cpp"
)
if(WIN32)
target_sources(minicore PRIVATE
"cbasetypes.hpp"
"core.hpp"
"database.hpp"
"des.hpp"
"grfio.hpp"
"malloc.hpp"
"nullpo.hpp"
"showmsg.hpp"
"strlib.hpp"
"utils.hpp"
)
set_target_properties(minicore PROPERTIES FOLDER "Core")
endif()
target_compile_definitions(minicore PRIVATE
"-DMINICORE"
${MONOTONIC_CLOCK_DEFINITIONS}
)
target_include_directories(minicore PUBLIC
${COMMON_SOURCE_DIR}
${LIBCONFIG_INCLUDE_DIRS}
${COMMON_ADDITIONALL_HPP} # needed by Windows
"${RA_INCLUDE_DIRS}"
"${ZLIB_INCLUDE_DIRS}"
)
target_link_libraries(minicore PUBLIC
${MONOTONIC_CLOCK_LIBRARIES}
libconfig
ryml
${ZLIB_LIBRARIES}
yaml-cpp
)
target_sources(common PRIVATE
"cli.cpp"
"conf.cpp"
"core.cpp"
"database.cpp"
"db.cpp"
"des.cpp"
"ers.cpp"
"grfio.cpp"
"malloc.cpp"
"mapindex.cpp"
"md5calc.cpp"
"msg_conf.cpp"
"nullpo.cpp"
"random.cpp"
"showmsg.cpp"
"socket.cpp"
"sql.cpp"
"strlib.cpp"
"timer.cpp"
"utils.cpp"
"utilities.cpp"
)
if(WIN32)
target_sources(common PRIVATE
"cbasetypes.hpp"
"cli.hpp"
"conf.hpp"
"core.hpp"
"database.hpp"
"db.hpp"
"des.hpp"
"ers.hpp"
"grfio.hpp"
"malloc.hpp"
"mapindex.hpp"
"md5calc.hpp"
"mmo.hpp"
"msg_conf.hpp"
"nullpo.hpp"
"random.hpp"
"showmsg.hpp"
"socket.hpp"
"sql.hpp"
"strlib.hpp"
"timer.hpp"
"utilities.hpp"
"utils.hpp"
)
set_target_properties(common PROPERTIES FOLDER "Core")
endif()
# defines just for common
target_compile_definitions(common PRIVATE ${MONOTONIC_CLOCK_DEFINITIONS})
if(ENABLE_RDTSC)
target_compile_definitions(common PRIVATE "-DENABLE_RDTSC")
endif()
if(ENABLE_MEMMGR)
target_compile_definitions(common PRIVATE "-DUSE_MEMMGR")
else()
target_compile_definitions(common PRIVATE "-DNO_MEMMGR")
endif()
# Propagated defines
target_compile_definitions(common PUBLIC "-DPACKETVER=${PACKETVER}")
if(ENABLE_PRERENEWAL)
target_compile_definitions(common PUBLIC "-DPRERE")
endif()
if(ENABLE_EXTRA_DEBUG_CODE)
target_compile_definitions(common PUBLIC "-DDEBUG")
endif()
if(ENABLE_EXTRA_BUILDBOT_CODE)
target_compile_definitions(common PUBLIC "-DBUILDBOT")
endif()
if(ENABLE_EPOLL)
target_compile_definitions(common PRIVATE "-DSOCKET_EPOLL")
endif()
if(ENABLE_VIP)
target_compile_definitions(common INTERFACE "-DVIP_ENABLE")
endif()
if(MAXCONN)
target_compile_definitions(common PUBLIC "-DMAXCONN=${MAXCONN}")
endif()
CHECK_FUNCTION_EXISTS(setrlimit HAVE_SETRLIMIT)
if (HAVE_SETRLIMIT)
target_compile_definitions(common PUBLIC "-DHAVE_SETRLIMIT")
endif()
CHECK_FUNCTION_EXISTS(strnlen HAVE_STRNLEN)
if (HAVE_STRNLEN)
target_compile_definitions(common PUBLIC "-DHAVE_STRNLEN")
endif()
target_include_directories(common PUBLIC
"${MYSQL_INCLUDE_DIRS}"
"${ZLIB_INCLUDE_DIRS}"
"${RA_INCLUDE_DIRS}"
)
target_link_libraries(common PUBLIC
${MONOTONIC_CLOCK_LIBRARIES}
libconfig
ryml
${MYSQL_LIBRARIES}
${ZLIB_LIBRARIES}
)
target_compile_definitions(minicore PRIVATE "-DMINICORE" ${LIBCONFIG_DEFINITIONS})
#
# common_base
#
if( WITH_ZLIB )
message( STATUS "Creating target common_base" )
set( COMMON_BASE_HEADERS
${COMMON_ALL_HEADERS}
"${COMMON_SOURCE_DIR}/conf.hpp"
"${COMMON_SOURCE_DIR}/core.hpp"
"${COMMON_SOURCE_DIR}/database.hpp"
"${COMMON_SOURCE_DIR}/db.hpp"
"${COMMON_SOURCE_DIR}/des.hpp"
"${COMMON_SOURCE_DIR}/ers.hpp"
"${COMMON_SOURCE_DIR}/grfio.hpp"
"${COMMON_SOURCE_DIR}/malloc.hpp"
"${COMMON_SOURCE_DIR}/mapindex.hpp"
"${COMMON_SOURCE_DIR}/md5calc.hpp"
"${COMMON_SOURCE_DIR}/nullpo.hpp"
"${COMMON_SOURCE_DIR}/random.hpp"
"${COMMON_SOURCE_DIR}/showmsg.hpp"
"${COMMON_SOURCE_DIR}/socket.hpp"
"${COMMON_SOURCE_DIR}/strlib.hpp"
"${COMMON_SOURCE_DIR}/timer.hpp"
"${COMMON_SOURCE_DIR}/utils.hpp"
"${COMMON_SOURCE_DIR}/msg_conf.hpp"
"${COMMON_SOURCE_DIR}/cli.hpp"
"${COMMON_SOURCE_DIR}/utilities.hpp"
${LIBCONFIG_HEADERS} # needed by conf.hpp/showmsg.hpp
${COMMON_ADDITIONALL_HPP} # needed by Windows
CACHE INTERNAL "common_base headers" )
set( COMMON_BASE_SOURCES
"${COMMON_SOURCE_DIR}/conf.cpp"
"${COMMON_SOURCE_DIR}/core.cpp"
"${COMMON_SOURCE_DIR}/database.cpp"
"${COMMON_SOURCE_DIR}/db.cpp"
"${COMMON_SOURCE_DIR}/des.cpp"
"${COMMON_SOURCE_DIR}/ers.cpp"
"${COMMON_SOURCE_DIR}/grfio.cpp"
"${COMMON_SOURCE_DIR}/malloc.cpp"
"${COMMON_SOURCE_DIR}/mapindex.cpp"
"${COMMON_SOURCE_DIR}/md5calc.cpp"
"${COMMON_SOURCE_DIR}/nullpo.cpp"
"${COMMON_SOURCE_DIR}/random.cpp"
"${COMMON_SOURCE_DIR}/showmsg.cpp"
"${COMMON_SOURCE_DIR}/socket.cpp"
"${COMMON_SOURCE_DIR}/strlib.cpp"
"${COMMON_SOURCE_DIR}/timer.cpp"
"${COMMON_SOURCE_DIR}/utils.cpp"
"${COMMON_SOURCE_DIR}/msg_conf.cpp"
"${COMMON_SOURCE_DIR}/cli.cpp"
"${COMMON_SOURCE_DIR}/utilities.cpp"
${LIBCONFIG_SOURCES} # needed by conf.cpp/showmsg.cpp
${COMMON_ADDITIONALL_CPP} # needed by Windows
CACHE INTERNAL "common_base sources" )
set( COMMON_BASE_INCLUDE_DIRS
${LIBCONFIG_INCLUDE_DIRS}
${YAML_INCLUDE_DIRS}
CACHE INTERNAL "common_base include dirs" )
set( COMMON_BASE_DEFINITIONS
${LIBCONFIG_DEFINITIONS}
CACHE INTERNAL "common_base definitions" )
set( LIBRARIES ${GLOBAL_LIBRARIES} ${ZLIB_LIBRARIES} yaml-cpp ryml )
set( INCLUDE_DIRS ${GLOBAL_INCLUDE_DIRS} ${RA_INCLUDE_DIRS} ${YAML_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIRS} ${COMMON_BASE_INCLUDE_DIRS} )
set( DEFINITIONS "${GLOBAL_DEFINITIONS} ${COMMON_BASE_DEFINITIONS}" )
set( SOURCE_FILES ${COMMON_BASE_HEADERS} ${COMMON_BASE_SOURCES} )
source_group( common FILES ${COMMON_BASE_HEADERS} ${COMMON_BASE_SOURCES} )
add_library( common_base ${SOURCE_FILES} )
#message( STATUS "common_base LIBRARIES=${LIBRARIES}, DEFINITIONS=${DEFINITIONS}")
target_link_libraries( common_base ${LIBRARIES} )
set_target_properties( common_base PROPERTIES COMPILE_FLAGS "${DEFINITIONS}" )
include_directories( ${INCLUDE_DIRS} )
set( HAVE_common_base ON CACHE INTERNAL "" )
set( TARGET_LIST ${TARGET_LIST} common_base CACHE INTERNAL "" )
message( STATUS "Creating target common_base - done" )
else()
message( STATUS "Skipping target common_base (requires ZLIB)" )
unset( HAVE_common_base CACHE )
endif()
#
# common
#
if( HAVE_common_base AND WITH_MYSQL )
message( STATUS "Creating target common" )
set( COMMON_HEADERS
${COMMON_ALL_HEADERS}
"${CMAKE_CURRENT_SOURCE_DIR}/sql.hpp"
CACHE INTERNAL "common headers" )
set( COMMON_SOURCES
"${CMAKE_CURRENT_SOURCE_DIR}/sql.cpp"
CACHE INTERNAL "common sources" )
set( DEPENDENCIES common_base yaml-cpp ryml )
set( LIBRARIES ${GLOBAL_LIBRARIES} ${MYSQL_LIBRARIES} )
set( INCLUDE_DIRS ${GLOBAL_INCLUDE_DIRS} ${MYSQL_INCLUDE_DIRS} )
set( DEFINITIONS "${GLOBAL_DEFINITIONS}" )
set( SOURCE_FILES ${COMMON_HEADERS} ${COMMON_SOURCES} )
source_group( common FILES ${COMMON_HEADERS} ${COMMON_SOURCES} )
add_library( common ${SOURCE_FILES} )
#message( STATUS "common LIBRARIES=${LIBRARIES}, DEPENDENCIES=${DEPENDENCIES} DEFINITIONS=${DEFINITIONS}")
add_dependencies( common ${DEPENDENCIES} )
target_link_libraries( common ${LIBRARIES} ${DEPENDENCIES} )
set_target_properties( common PROPERTIES COMPILE_FLAGS "${DEFINITIONS}" )
include_directories( ${INCLUDE_DIRS} ${YAML_INCLUDE_DIRS} )
set( HAVE_common ON CACHE INTERNAL "" )
set( TARGET_LIST ${TARGET_LIST} common CACHE INTERNAL "" )
message( STATUS "Creating target common - done" )
else()
message( FATAL_ERROR "Stopping target common (requires common_base and MYSQL)" )
if(ENABLE_PROFILER STREQUAL "gprof")
target_compile_options(common PUBLIC "-pg")
target_link_libraries(common PUBLIC "-pg")
endif()

View File

@@ -90,7 +90,8 @@ typedef uint32 t_itemid;
#define MAX_FAME 1000000000 ///Max fame points
#define MAX_CART 100 ///Maximum item in cart
#define MAX_SKILL 1623 ///Maximum skill can be hold by Player, Homunculus, & Mercenary (skill list) AND skill_db limit
#define DEFAULT_WALK_SPEED 150 ///Default walk speed
#define DEFAULT_WALK_SPEED 150 ///Default walk speed (other than NPC)
#define DEFAULT_NPC_WALK_SPEED 200 ///Default NPC walk speed
#define MIN_WALK_SPEED 20 ///Min walk speed
#define MAX_WALK_SPEED 1000 ///Max walk speed
#define MAX_STORAGE 600 ///Max number of storage slots a player can have
@@ -114,7 +115,7 @@ typedef uint32 t_itemid;
#define MAX_CLAN 500
#define MAX_CLANALLIANCE 6
#ifndef MAX_BARTER_REQUIREMENTS
#define MAX_BARTER_REQUIREMENTS 5
#define MAX_BARTER_REQUIREMENTS 6
#endif
#ifndef WEB_AUTH_TOKEN_LENGTH
#define WEB_AUTH_TOKEN_LENGTH 16+1
@@ -151,7 +152,7 @@ const t_itemid WEDDING_RING_F = 2635;
//For character names, title names, guilds, maps, etc.
//Includes null-terminator as it is the length of the array.
#define NAME_LENGTH (23 + 1)
#define PASSWD_LENGTH (32+1)
#define PASSWD_LENGTH (32 + 1)
//NPC names can be longer than it's displayed on client (NAME_LENGTH).
#define NPC_NAME_LENGTH 50
// <NPC_NAME_LENGTH> for npc name + 2 for a "::" + <NAME_LENGTH> for label + 1 for EOS
@@ -1123,8 +1124,8 @@ enum e_pc_reg_loading {
enum e_party_member_withdraw {
PARTY_MEMBER_WITHDRAW_LEAVE, ///< /leave
PARTY_MEMBER_WITHDRAW_EXPEL, ///< Kicked
PARTY_MEMBER_WITHDRAW_CANT_LEAVE, ///< TODO: Cannot /leave
PARTY_MEMBER_WITHDRAW_CANT_EXPEL, ///< TODO: Cannot be kicked
PARTY_MEMBER_WITHDRAW_CANT_LEAVE, ///< Cannot /leave
PARTY_MEMBER_WITHDRAW_CANT_EXPEL, ///< Cannot be kicked
};
enum e_rank {

View File

@@ -1,35 +1,29 @@
#
# setup
#
set( LOGIN_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE INTERNAL "" )
add_executable(login-server)
# login server
#
if( BUILD_SERVERS )
message( STATUS "Creating target login-server" )
file(GLOB LOGIN_HEADERS ${LOGIN_SOURCE_DIR}/*.hpp)
file(GLOB LOGIN_SOURCES_CXX ${LOGIN_SOURCE_DIR}/*.cpp)
set(LOGIN_SOURCES ${LOGIN_SOURCES_C} ${LOGIN_SOURCES_CXX})
#message( STATUS "LOGIN_SOURCES="${LOGIN_SOURCES})
set( DEPENDENCIES common )
set( LIBRARIES ${GLOBAL_LIBRARIES} )
set( INCLUDE_DIRS ${GLOBAL_INCLUDE_DIRS} ${COMMON_BASE_INCLUDE_DIRS} ${RA_INCLUDE_DIRS} )
set( DEFINITIONS "${GLOBAL_DEFINITIONS} ${COMMON_BASE_DEFINITIONS} -DWITH_SQL" )
set( SOURCE_FILES ${COMMON_BASE_HEADERS} ${COMMON_HEADERS} ${LOGIN_HEADERS} ${LOGIN_SOURCES} )
source_group( common FILES ${COMMON_BASE_HEADERS} ${COMMON_HEADERS} )
source_group( login FILES ${LOGIN_HEADERS} ${LOGIN_SOURCES} )
include_directories( ${INCLUDE_DIRS} )
target_sources(login-server PRIVATE
"account.cpp"
"ipban.cpp"
"login.cpp"
"loginchrif.cpp"
"loginclif.cpp"
"logincnslif.cpp"
"loginlog.cpp"
)
add_executable( login-server ${SOURCE_FILES} )
add_dependencies( login-server ${DEPENDENCIES} )
target_link_libraries( login-server ${LIBRARIES} ${DEPENDENCIES} )
set_target_properties( login-server PROPERTIES COMPILE_FLAGS "${DEFINITIONS}" )
if( INSTALL_COMPONENT_RUNTIME )
cpack_add_component( Runtime_loginserver DESCRIPTION "login-server" DISPLAY_NAME "login-server" GROUP Runtime )
install( TARGETS login-server
DESTINATION "."
COMPONENT Runtime_loginserver )
endif( INSTALL_COMPONENT_RUNTIME )
set( TARGET_LIST ${TARGET_LIST} login-server CACHE INTERNAL "" )
message( STATUS "Creating target login-server - done" )
endif( BUILD_SERVERS )
if(WIN32)
target_sources(login-server PRIVATE
"account.hpp"
"ipban.hpp"
"loginchrif.hpp"
"loginclif.hpp"
"logincnslif.hpp"
"login.hpp"
"loginlog.hpp"
)
set_target_properties(login-server PROPERTIES FOLDER "Servers")
endif()
target_link_libraries(login-server PUBLIC
common
)

View File

@@ -232,7 +232,7 @@ int login_mmo_auth_new(const char* userid, const char* pass, const char sex, con
return 3;
}
if( login_config.new_acc_length_limit && ( strlen(userid) < 4 || strlen(pass) < 4 ) )
if( strlen(userid) < login_config.acc_name_min_length || strlen(pass) < login_config.password_min_length)
return 1;
// check for invalid inputs
@@ -633,8 +633,10 @@ bool login_config_read(const char* cfgName, bool normal) {
login_config.log_login = (bool)config_switch(w2);
else if(!strcmpi(w1, "new_account"))
login_config.new_account_flag = (bool)config_switch(w2);
else if(!strcmpi(w1, "new_acc_length_limit"))
login_config.new_acc_length_limit = (bool)config_switch(w2);
else if(!strcmpi(w1, "acc_name_min_length"))
login_config.acc_name_min_length = cap_value(atoi(w2), 0, NAME_LENGTH - 1);
else if(!strcmpi(w1, "password_min_length"))
login_config.password_min_length = cap_value(atoi(w2), 0, PASSWD_LENGTH - 1);
else if(!strcmpi(w1, "start_limited_time"))
login_config.start_limited_time = atoi(w2);
else if(!strcmpi(w1, "use_MD5_passwords"))
@@ -751,7 +753,13 @@ void login_set_defaults() {
safestrncpy(login_config.date_format, "%Y-%m-%d %H:%M:%S", sizeof(login_config.date_format));
login_config.console = false;
login_config.new_account_flag = true;
login_config.new_acc_length_limit = true;
#if PACKETVER >= 20181114
login_config.acc_name_min_length = 6;
login_config.password_min_length = 6;
#else
login_config.acc_name_min_length = 4;
login_config.password_min_length = 4;
#endif
login_config.use_md5_passwds = false;
login_config.group_id_to_connect = -1;
login_config.min_group_id_to_connect = -1;

View File

@@ -88,7 +88,9 @@ struct Login_Config {
bool log_login; /// whether to log login server actions or not
char date_format[32]; /// date format used in messages
bool console; /// console input system enabled?
bool new_account_flag,new_acc_length_limit; /// autoregistration via _M/_F ? / if yes minimum length is 4?
bool new_account_flag; /// autoregistration via _M/_F ?
uint8 acc_name_min_length; /// minimum account name length
uint8 password_min_length; /// minimum password length
int start_limited_time; /// new account expiration time (-1: unlimited)
bool use_md5_passwds; /// work with password hashes instead of plaintext passwords?
int group_id_to_connect; /// required group id to connect

Some files were not shown because too many files have changed in this diff Show More