Compare commits
91 Commits
cleanup/sc
...
refactor/s
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fd1e582156 | ||
|
|
920b6a78c5 | ||
|
|
34bdb49db9 | ||
|
|
f54a204a7d | ||
|
|
529d8fea3d | ||
|
|
d2cb6c10e1 | ||
|
|
fccf328a54 | ||
|
|
25b9126644 | ||
|
|
2206d1a960 | ||
|
|
1d8dec4b72 | ||
|
|
995a5d0f60 | ||
|
|
5ca7aee79b | ||
|
|
73b878db37 | ||
|
|
14a22de993 | ||
|
|
0057d862af | ||
|
|
82d3b078c3 | ||
|
|
88e3eba8cf | ||
|
|
c8935ef18a | ||
|
|
fa5e642d4d | ||
|
|
549fc3f860 | ||
|
|
30f8cb1f6e | ||
|
|
21359386be | ||
|
|
861833bcfa | ||
|
|
a0bec6a404 | ||
|
|
5123704795 | ||
|
|
d344caa08d | ||
|
|
1ca634df1d | ||
|
|
5f16a06f2f | ||
|
|
566ac2078d | ||
|
|
d191c2cf2a | ||
|
|
4555e7c14c | ||
|
|
ba5221ef97 | ||
|
|
ce5de23874 | ||
|
|
44fbe3940d | ||
|
|
68f8a4bc7f | ||
|
|
6451925430 | ||
|
|
fcf74b0dfc | ||
|
|
8c4d1bb0c6 | ||
|
|
503f9e09f6 | ||
|
|
8f9b0b8354 | ||
|
|
84cdc9cae0 | ||
|
|
34eb4be25b | ||
|
|
9c9dcc8cab | ||
|
|
aaa9890470 | ||
|
|
6fdaac4a75 | ||
|
|
0d3550e7ea | ||
|
|
6ca99e7852 | ||
|
|
9267c2bf8a | ||
|
|
92722db3ab | ||
|
|
6daa032144 | ||
|
|
b1a2d74b54 | ||
|
|
d16dccf994 | ||
|
|
2e69ccedea | ||
|
|
b01e7da68d | ||
|
|
008d25cfb2 | ||
|
|
f4c9ed691c | ||
|
|
cc397167ab | ||
|
|
8f15bc2117 | ||
|
|
bf36dd4b1f | ||
|
|
fc242d0472 | ||
|
|
f41a80ca59 | ||
|
|
eadff3366d | ||
|
|
9636aa020d | ||
|
|
5c2718de03 | ||
|
|
1b3357611b | ||
|
|
b3f6ad41ba | ||
|
|
c789cdbadd | ||
|
|
98ac59a940 | ||
|
|
f73e6658ca | ||
|
|
d98166383c | ||
|
|
b1520ea969 | ||
|
|
ee456d8af6 | ||
|
|
1545d483c0 | ||
|
|
b6ce15af00 | ||
|
|
1f474a62cf | ||
|
|
9024cc7ef8 | ||
|
|
026c014eb2 | ||
|
|
26dee6891b | ||
|
|
258a8e6be0 | ||
|
|
48b0b082b6 | ||
|
|
6ae46a7bf8 | ||
|
|
855cf12007 | ||
|
|
ae862453bd | ||
|
|
c11d73d6a8 | ||
|
|
ff86c7b9d1 | ||
|
|
e1b9b0d9b3 | ||
|
|
b3c47f043e | ||
|
|
c69587c2e7 | ||
|
|
95ee5d04e6 | ||
|
|
28383ee332 | ||
|
|
857f335729 |
24
.github/workflows/analysis_codeql.yml
vendored
24
.github/workflows/analysis_codeql.yml
vendored
@@ -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
|
||||
|
||||
54
.github/workflows/build_servers_clang.yml
vendored
54
.github/workflows/build_servers_clang.yml
vendored
@@ -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
|
||||
61
.github/workflows/build_servers_gcc.yml
vendored
61
.github/workflows/build_servers_gcc.yml
vendored
@@ -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
|
||||
28
.github/workflows/build_servers_modes.yml
vendored
28
.github/workflows/build_servers_modes.yml
vendored
@@ -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
|
||||
|
||||
48
.github/workflows/build_servers_msbuild.yml
vendored
48
.github/workflows/build_servers_msbuild.yml
vendored
@@ -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
|
||||
@@ -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
|
||||
|
||||
28
.github/workflows/build_servers_vip.yml
vendored
28
.github/workflows/build_servers_vip.yml
vendored
@@ -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
|
||||
|
||||
@@ -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
|
||||
44
.github/workflows/npc_db_validation.yml
vendored
44
.github/workflows/npc_db_validation.yml
vendored
@@ -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
6
.gitignore
vendored
@@ -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
|
||||
|
||||
48
3rdparty/httplib/CMakeLists.txt
vendored
48
3rdparty/httplib/CMakeLists.txt
vendored
@@ -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()
|
||||
|
||||
8
3rdparty/json/CMakeLists.txt
vendored
8
3rdparty/json/CMakeLists.txt
vendored
@@ -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")
|
||||
|
||||
52
3rdparty/libconfig/CMakeLists.txt
vendored
52
3rdparty/libconfig/CMakeLists.txt
vendored
@@ -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()
|
||||
|
||||
7
3rdparty/rapidyaml/CMakeLists.txt
vendored
7
3rdparty/rapidyaml/CMakeLists.txt
vendored
@@ -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()
|
||||
|
||||
12
3rdparty/rapidyaml/ext/c4core/CMakeLists.txt
vendored
12
3rdparty/rapidyaml/ext/c4core/CMakeLists.txt
vendored
@@ -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()
|
||||
|
||||
159
3rdparty/yaml-cpp/CMakeLists.txt
vendored
159
3rdparty/yaml-cpp/CMakeLists.txt
vendored
@@ -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()
|
||||
|
||||
693
CMakeLists.txt
693
CMakeLists.txt
@@ -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
|
||||
)
|
||||
|
||||
@@ -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
35
conf/CMakeLists.txt
Normal 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
27
conf/battle/instance.conf
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -1634,5 +1634,8 @@ map: luna_sf1
|
||||
map: luna_sf2
|
||||
map: mbase_in
|
||||
|
||||
// Market place
|
||||
map: prt_mk
|
||||
|
||||
//------------------------- Clone Maps ---------------------------
|
||||
//------------------------- Extra Maps ---------------------------
|
||||
|
||||
@@ -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>).
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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>).
|
||||
|
||||
|
||||
@@ -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
72
db/CMakeLists.txt
Normal 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}")
|
||||
BIN
db/map_cache.dat
BIN
db/map_cache.dat
Binary file not shown.
@@ -1260,6 +1260,7 @@ jor_tmple2
|
||||
luna_sf1
|
||||
luna_sf2
|
||||
mbase_in
|
||||
prt_mk
|
||||
|
||||
//======================================================================================
|
||||
// - Other/Extra maps -
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
545
db/re/mob_db.yml
545
db/re/mob_db.yml
@@ -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
|
||||
|
||||
@@ -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,,,,,,,
|
||||
|
||||
@@ -2788,6 +2788,7 @@ Body:
|
||||
# bonus bFlee,20;
|
||||
# }
|
||||
#
|
||||
# - Mob: FARMILIAR2 #TODO : Implement mob FARMILIAR2
|
||||
- Mob: FARMILIAR
|
||||
TameItem: Fruits_Set_Trap
|
||||
EggItem: Farmiliar_Egg
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
|
||||
@@ -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).
|
||||
|
||||
|
||||
@@ -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).
|
||||
|
||||
@@ -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.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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]";
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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!";
|
||||
|
||||
@@ -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
|
||||
@@ -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!";
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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]";
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
29
npc/re/merchants/shopping_boards.txt
Normal file
29
npc/re/merchants/shopping_boards.txt
Normal 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
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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.";
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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]";
|
||||
|
||||
@@ -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]";
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
47
npc/re/warps/cities/lasagna.txt
Normal file
47
npc/re/warps/cities/lasagna.txt
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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 )
|
||||
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user