Compare commits
31 Commits
refactor/s
...
script/epi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f73a858d6c | ||
|
|
150fc78866 | ||
|
|
a5c939bec9 | ||
|
|
88ce3fe5d3 | ||
|
|
59c716ce23 | ||
|
|
5928ad75c6 | ||
|
|
203b9d740d | ||
|
|
75c3fd1fc3 | ||
|
|
e803ba5f8a | ||
|
|
c3ff38865e | ||
|
|
94a731aad0 | ||
|
|
effd55d1ce | ||
|
|
aacca52eec | ||
|
|
4cab85cb19 | ||
|
|
54dc915661 | ||
|
|
612bf702ba | ||
|
|
6f6c74b723 | ||
|
|
7b816e18fb | ||
|
|
48b105405a | ||
|
|
3908b0e9ee | ||
|
|
3cc32b6727 | ||
|
|
e39fa4b66a | ||
|
|
c5eaa1544f | ||
|
|
1d9cfdb17d | ||
|
|
4b32621c61 | ||
|
|
3b1c33c5d9 | ||
|
|
f8c9481673 | ||
|
|
78a2babe4d | ||
|
|
0a977c1fd7 | ||
|
|
29a63820fd | ||
|
|
4f2beac029 |
24
.github/workflows/analysis_codeql.yml
vendored
24
.github/workflows/analysis_codeql.yml
vendored
@@ -18,8 +18,6 @@ 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:
|
||||
@@ -33,6 +31,8 @@ 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/Ubuntu2204-Readme.md
|
||||
# https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-Readme.md
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install zlib1g-dev libpcre3-dev
|
||||
sudo apt install zlib1g-dev libpcre3-dev gcc-${{ matrix.gcc }} g++-${{ matrix.gcc }}
|
||||
|
||||
# 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: Create build directory
|
||||
run: cmake -E make_directory ${{github.workspace}}/build
|
||||
- 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: Configure CMake
|
||||
working-directory: ${{github.workspace}}/build
|
||||
run: cmake .. -DENABLE_PRERENEWAL=${{env.PRERE}} -DENABLE_EXTRA_BUILDBOT_CODE=ON
|
||||
- name: Command - make clean
|
||||
run: make clean
|
||||
|
||||
- name: Build
|
||||
working-directory: ${{github.workspace}}/build
|
||||
run: cmake --build . -j2 --target server
|
||||
- name: Command - make server
|
||||
run: make server
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v3
|
||||
|
||||
54
.github/workflows/build_servers_clang.yml
vendored
Normal file
54
.github/workflows/build_servers_clang.yml
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
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
|
||||
@@ -1,5 +1,5 @@
|
||||
name: Build servers on Windows
|
||||
# build_servers_windows.yml
|
||||
name: Build servers with CMake
|
||||
# build_servers_cmake.yml
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.repository }}-${{ github.workflow }}-${{ github.ref }}
|
||||
@@ -29,19 +29,25 @@ jobs:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [windows-latest]
|
||||
# The ubuntu-latest label currently points to ubuntu-22.04.
|
||||
# Available: ubuntu-22.04, ubuntu-20.04
|
||||
os: [ubuntu-latest]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
# Install latest CMake.
|
||||
- uses: lukka/get-cmake@latest
|
||||
|
||||
- name: Create build directory
|
||||
run: cmake -E make_directory ${{github.workspace}}/build
|
||||
run: mkdir cbuild
|
||||
|
||||
- name: Configure CMake
|
||||
working-directory: ${{github.workspace}}/build
|
||||
run: cmake ..
|
||||
- name: Create Unix Makefiles
|
||||
run: |
|
||||
cd cbuild
|
||||
cmake -G "Unix Makefiles" ..
|
||||
|
||||
- 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
|
||||
- name: Command - make
|
||||
run: |
|
||||
cd cbuild
|
||||
make
|
||||
61
.github/workflows/build_servers_gcc.yml
vendored
Normal file
61
.github/workflows/build_servers_gcc.yml
vendored
Normal file
@@ -0,0 +1,61 @@
|
||||
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,8 +18,6 @@ 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:
|
||||
@@ -32,6 +30,8 @@ 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=ON" >> $GITHUB_ENV
|
||||
echo "PRERE=yes" >> $GITHUB_ENV
|
||||
- name: Variable Parsing - RE
|
||||
if: ${{ matrix.mode == 'RE' }}
|
||||
run: |
|
||||
echo "PRERE=OFF" >> $GITHUB_ENV
|
||||
echo "PRERE=no" >> $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/Ubuntu2204-Readme.md
|
||||
# https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-Readme.md
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install zlib1g-dev libpcre3-dev
|
||||
sudo apt install zlib1g-dev libpcre3-dev gcc-${{ matrix.gcc }} g++-${{ matrix.gcc }}
|
||||
|
||||
- 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: Create build directory
|
||||
run: cmake -E make_directory ${{github.workspace}}/build
|
||||
- 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: Configure CMake
|
||||
working-directory: ${{github.workspace}}/build
|
||||
run: cmake .. -DENABLE_PRERENEWAL=${{env.PRERE}} -DENABLE_EXTRA_BUILDBOT_CODE=ON
|
||||
- name: Command - make clean
|
||||
run: make clean
|
||||
|
||||
- name: Build
|
||||
working-directory: ${{github.workspace}}/build
|
||||
run: cmake --build . -j2 --target server
|
||||
- name: Command - make server
|
||||
run: make server
|
||||
|
||||
- name: Run Once - login-server
|
||||
run: ./login-server --run-once
|
||||
|
||||
48
.github/workflows/build_servers_msbuild.yml
vendored
Normal file
48
.github/workflows/build_servers_msbuild.yml
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
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,8 +18,6 @@ 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:
|
||||
@@ -32,6 +30,8 @@ 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=ON" >> $GITHUB_ENV
|
||||
echo "PRERE=yes" >> $GITHUB_ENV
|
||||
- name: Variable Parsing - RE
|
||||
if: ${{ matrix.mode == 'RE' }}
|
||||
run: |
|
||||
echo "PRERE=OFF" >> $GITHUB_ENV
|
||||
echo "PRERE=no" >> $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
|
||||
sudo apt install zlib1g-dev libpcre3-dev gcc-${{ matrix.gcc }} g++-${{ matrix.gcc }}
|
||||
|
||||
- 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: Create build directory
|
||||
run: cmake -E make_directory ${{github.workspace}}/build
|
||||
- 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: Configure CMake
|
||||
working-directory: ${{github.workspace}}/build
|
||||
run: cmake .. -DENABLE_PRERENEWAL=${{env.PRERE}} -DPACKETVER=${{matrix.packetver}} -DENABLE_EXTRA_BUILDBOT_CODE=ON
|
||||
- name: Command - make clean
|
||||
run: make clean
|
||||
|
||||
- name: Build
|
||||
working-directory: ${{github.workspace}}/build
|
||||
run: cmake --build . -j2
|
||||
- name: Command - make all
|
||||
run: make all
|
||||
|
||||
28
.github/workflows/build_servers_vip.yml
vendored
28
.github/workflows/build_servers_vip.yml
vendored
@@ -18,8 +18,6 @@ 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:
|
||||
@@ -32,6 +30,8 @@ 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=ON" >> $GITHUB_ENV
|
||||
echo "PRERE=yes" >> $GITHUB_ENV
|
||||
- name: Variable Parsing - RE
|
||||
if: ${{ matrix.mode == 'RE' }}
|
||||
run: |
|
||||
echo "PRERE=OFF" >> $GITHUB_ENV
|
||||
echo "PRERE=no" >> $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
|
||||
sudo apt install zlib1g-dev libpcre3-dev gcc-${{ matrix.gcc }} g++-${{ matrix.gcc }}
|
||||
|
||||
- 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: Create build directory
|
||||
run: cmake -E make_directory ${{github.workspace}}/build
|
||||
- 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: 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: Command - make server
|
||||
run: make server
|
||||
|
||||
- name: Run Once - login-server
|
||||
run: ./login-server --run-once
|
||||
|
||||
44
.github/workflows/npc_db_validation.yml
vendored
44
.github/workflows/npc_db_validation.yml
vendored
@@ -21,8 +21,6 @@ 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:
|
||||
@@ -35,6 +33,8 @@ 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,41 +43,45 @@ 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=ON" >> $GITHUB_ENV
|
||||
echo "PRERE=yes" >> $GITHUB_ENV
|
||||
- name: Variable Parsing - RE
|
||||
if: ${{ matrix.mode == 'RE' }}
|
||||
if: ${{ matrix.mode == 'RE' }}
|
||||
run: |
|
||||
echo "PRERE=OFF" >> $GITHUB_ENV
|
||||
echo "PRERE=no" >> $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/Ubuntu2204-Readme.md
|
||||
# https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-Readme.md
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install zlib1g-dev libpcre3-dev
|
||||
sudo apt install zlib1g-dev libpcre3-dev gcc-${{ matrix.gcc }} g++-${{ matrix.gcc }}
|
||||
|
||||
- name: Start MySQL
|
||||
run: sudo systemctl start mysql.service
|
||||
|
||||
- name: Setup Database and import table data
|
||||
run: ./tools/ci/sql.sh
|
||||
|
||||
- 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
|
||||
|
||||
|
||||
- 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
|
||||
|
||||
# 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,12 +139,6 @@ 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,18 +1,38 @@
|
||||
add_library(httplib STATIC)
|
||||
cmake_minimum_required(VERSION 2.8)
|
||||
|
||||
target_sources(httplib PRIVATE "httplib.cc")
|
||||
if ( NOT ENABLE_WEB_SERVER )
|
||||
return()
|
||||
endif( NOT ENABLE_WEB_SERVER )
|
||||
|
||||
target_include_directories(httplib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
SET (this_target httplib)
|
||||
PROJECT(${this_target})
|
||||
|
||||
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)
|
||||
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")
|
||||
endif()
|
||||
|
||||
8
3rdparty/json/CMakeLists.txt
vendored
8
3rdparty/json/CMakeLists.txt
vendored
@@ -1,3 +1,7 @@
|
||||
add_library(json INTERFACE)
|
||||
cmake_minimum_required(VERSION 2.8)
|
||||
|
||||
target_include_directories(json INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/include")
|
||||
set (JSON_INCLUDE_DIRS
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include"
|
||||
CACHE INTERNAL "json include dir" )
|
||||
|
||||
mark_as_advanced( JSON_INCLUDE_DIRS )
|
||||
|
||||
52
3rdparty/libconfig/CMakeLists.txt
vendored
52
3rdparty/libconfig/CMakeLists.txt
vendored
@@ -1,27 +1,29 @@
|
||||
|
||||
add_library(libconfig STATIC)
|
||||
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 )
|
||||
|
||||
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()
|
||||
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" )
|
||||
7
3rdparty/rapidyaml/CMakeLists.txt
vendored
7
3rdparty/rapidyaml/CMakeLists.txt
vendored
@@ -95,7 +95,6 @@ endif()
|
||||
|
||||
c4_add_dev_targets()
|
||||
|
||||
# rathena
|
||||
if(WIN32)
|
||||
set_target_properties(ryml PROPERTIES FOLDER "3rdparty")
|
||||
endif()
|
||||
add_custom_target(ryml-uninstall
|
||||
"${CMAKE_COMMAND}" -P "${PROJECT_SOURCE_DIR}/cmake/uninstall.cmake"
|
||||
)
|
||||
|
||||
12
3rdparty/rapidyaml/ext/c4core/CMakeLists.txt
vendored
12
3rdparty/rapidyaml/ext/c4core/CMakeLists.txt
vendored
@@ -78,6 +78,13 @@ 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>
|
||||
@@ -98,8 +105,3 @@ 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,78 +1,87 @@
|
||||
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/")
|
||||
cmake_minimum_required(VERSION 2.8)
|
||||
|
||||
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/")
|
||||
## start setting
|
||||
SET (this_target yaml-cpp)
|
||||
PROJECT(${this_target})
|
||||
|
||||
add_library(yaml-cpp STATIC EXCLUDE_FROM_ALL ${YAML_SOURCES})
|
||||
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 )
|
||||
|
||||
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()
|
||||
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")
|
||||
|
||||
693
CMakeLists.txt
693
CMakeLists.txt
@@ -1,105 +1,630 @@
|
||||
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")
|
||||
#####################################################################
|
||||
#
|
||||
# "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
|
||||
#
|
||||
#####################################################################
|
||||
|
||||
|
||||
# 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)
|
||||
#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
|
||||
|
||||
#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)
|
||||
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.")
|
||||
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")
|
||||
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
|
||||
#
|
||||
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")
|
||||
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)" )
|
||||
endif()
|
||||
|
||||
if(WIN32)
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
|
||||
#
|
||||
# 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
|
||||
endif()
|
||||
|
||||
# Configure C++ Standard
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
#
|
||||
# 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 )
|
||||
|
||||
|
||||
# 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>)
|
||||
#
|
||||
# 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} )
|
||||
endif()
|
||||
|
||||
add_subdirectory(db)
|
||||
add_subdirectory(conf)
|
||||
add_subdirectory(3rdparty)
|
||||
add_subdirectory(src)
|
||||
add_subdirectory(tools)
|
||||
|
||||
add_custom_target(server
|
||||
DEPENDS login-server char-server map-server web-server scripts
|
||||
)
|
||||
#
|
||||
# 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()
|
||||
|
||||
@@ -224,5 +224,4 @@ case $1 in
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "Using the configure scripts and ./athena-start is deprecated. Use CMake and ./athena-start.sh" 1>&2
|
||||
exit 1
|
||||
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
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}")
|
||||
@@ -17,10 +17,18 @@
|
||||
// 0x10: They display luk/3+1 instead of their actual critical in the
|
||||
// stat window (by default they don't crit)
|
||||
// 0x20: Their Min-Matk is always the same as their max
|
||||
// 0x40: Skill re-use delay is reset when they are vaporized.
|
||||
// 0x80: Skill re-use delay is reset when they are warped (by skill or item) with player.
|
||||
hom_setting: 0x3D
|
||||
|
||||
// Should the cooldown or aftercast delay of homunculi skills be reset when
|
||||
// the homunculus is vaporized?
|
||||
// Default on official servers: yes for Pre-renewal, no for Renewal
|
||||
//hom_delay_reset_vaporize: no
|
||||
|
||||
// Should the cooldown or aftercast delay of homunculi skills be reset when
|
||||
// warping or changing maps?
|
||||
// Default on official servers: yes for Pre-renewal, no for Renewal
|
||||
//hom_delay_reset_warp: no
|
||||
|
||||
// The rate a homunculus will get friendly by feeding it. (Note 2)
|
||||
homunculus_friendly_rate: 100
|
||||
|
||||
|
||||
@@ -12,8 +12,10 @@
|
||||
// The highest value at which an item can be sold via the merchant vend skill. (in zeny)
|
||||
vending_max_value: 1000000000
|
||||
|
||||
// Whether to allow buying from vending chars that are at their max. zeny limit.
|
||||
// If set to yes, the rest of the zeny above the char's capacity will disappear.
|
||||
// Whether to allow placing items on a vending store when the player's zeny plus the total price
|
||||
// of the items exceeds the maximum zeny allowed. (Note 1)
|
||||
// If set to "yes", the items will be placed in the store but other players will not be able to buy them.
|
||||
// Official behavior is "yes", but on some official servers the client doesn't allow this.
|
||||
vending_over_max: yes
|
||||
|
||||
// Tax to apply to all vending transactions (eg: 10000 = 100%, 50 = 0.50%)
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
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}")
|
||||
@@ -47,6 +47,8 @@ Body:
|
||||
Value: 5
|
||||
- Name: REPUTATION_EP18
|
||||
Value: 3
|
||||
- Name: REPUTATION_EP19
|
||||
Value: 4
|
||||
|
||||
Footer:
|
||||
Imports:
|
||||
|
||||
@@ -33,3 +33,24 @@ Header:
|
||||
Type: MOB_SUMMONABLE_DB
|
||||
Version: 1
|
||||
|
||||
#Body:
|
||||
# Pre-re Brasilis
|
||||
#=============================================================
|
||||
# - Group: BLOODY_DEAD_BRANCH
|
||||
# Summon:
|
||||
# - Mob: BOITATA
|
||||
# Rate: 1000000
|
||||
# - Group: Branch_Of_Dead_Tree
|
||||
# Summon:
|
||||
# - Mob: IARA
|
||||
# Rate: 71428
|
||||
# - Mob: PIRANHA
|
||||
# Rate: 71428
|
||||
# - Mob: HEADLESS_MULE
|
||||
# Rate: 71428
|
||||
# - Mob: JAGUAR
|
||||
# Rate: 71428
|
||||
# - Mob: TOUCAN
|
||||
# Rate: 71428
|
||||
# - Mob: CURUPIRA
|
||||
# Rate: 71428
|
||||
|
||||
@@ -2613,7 +2613,7 @@ Body:
|
||||
Flags:
|
||||
BuyingStore: true
|
||||
Script: |
|
||||
sc_start SC_SlowDown,5000,0;
|
||||
sc_start SC_SLOWDOWN,5000,100;
|
||||
- Id: 12018
|
||||
AegisName: Fire_Cracker
|
||||
Name: Firecracker
|
||||
|
||||
@@ -866,3 +866,14 @@ Body:
|
||||
bonus2 bSubEle,Ele_Fire,2;
|
||||
bonus2 bAddEle,Ele_Fire,2;
|
||||
}
|
||||
- Mob: E_HYDRA
|
||||
TameItem: Leaf_Cat_Ball
|
||||
EggItem: Mystic_Leaf_Cat_Ball
|
||||
Fullness: 0
|
||||
HungryDelay: 0
|
||||
IntimacyStart: 0
|
||||
IntimacyFed: 0
|
||||
IntimacyOverfed: 0
|
||||
IntimacyOwnerDie: 0
|
||||
CaptureRate: 50
|
||||
SpecialPerformance: false
|
||||
|
||||
@@ -3660,17 +3660,27 @@ Body:
|
||||
Reproduce: true
|
||||
CastCancel: true
|
||||
CastTime:
|
||||
- Level: 1
|
||||
Time: 700
|
||||
- Level: 2
|
||||
Time: 1400
|
||||
- Level: 3
|
||||
Time: 2100
|
||||
- Level: 4
|
||||
Time: 2800
|
||||
- Level: 5
|
||||
Time: 3500
|
||||
AfterCastActDelay:
|
||||
- Level: 1
|
||||
Time: 1000
|
||||
- Level: 2
|
||||
Time: 2000
|
||||
Time: 1200
|
||||
- Level: 3
|
||||
Time: 3000
|
||||
Time: 1400
|
||||
- Level: 4
|
||||
Time: 4000
|
||||
Time: 1600
|
||||
- Level: 5
|
||||
Time: 5000
|
||||
AfterCastActDelay: 700
|
||||
Time: 1800
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
@@ -3722,7 +3732,7 @@ Body:
|
||||
Time: 4000
|
||||
- Level: 5
|
||||
Time: 5000
|
||||
AfterCastActDelay: 700
|
||||
AfterCastActDelay: 1000
|
||||
Duration1: 100
|
||||
Requires:
|
||||
SpCost:
|
||||
@@ -30726,10 +30736,8 @@ Body:
|
||||
TargetType: Self
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
Range: 9
|
||||
Hit: Single
|
||||
HitCount: 1
|
||||
AfterCastActDelay: 2000
|
||||
AfterCastWalkDelay: 1000
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
@@ -30752,11 +30760,8 @@ Body:
|
||||
TargetType: Self
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
Splash: true
|
||||
Hit: Single
|
||||
HitCount: 1
|
||||
SplashArea: -1
|
||||
AfterCastActDelay: 35000
|
||||
AfterCastWalkDelay: 1000
|
||||
Duration1:
|
||||
- Level: 1
|
||||
Time: 40000
|
||||
@@ -30785,7 +30790,6 @@ Body:
|
||||
Name: HLIF_BRAIN
|
||||
Description: Brain Surgery
|
||||
MaxLevel: 5
|
||||
SplashArea: 1
|
||||
- Id: 8004
|
||||
Name: HLIF_CHANGE
|
||||
Description: Change
|
||||
@@ -30793,7 +30797,14 @@ Body:
|
||||
TargetType: Self
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
Hit: Single
|
||||
AfterCastActDelay:
|
||||
- Level: 1
|
||||
Time: 600000
|
||||
- Level: 2
|
||||
Time: 900000
|
||||
- Level: 3
|
||||
Time: 1200000
|
||||
AfterCastWalkDelay: 1000
|
||||
Duration1:
|
||||
- Level: 1
|
||||
Time: 60000
|
||||
@@ -30801,13 +30812,6 @@ Body:
|
||||
Time: 180000
|
||||
- Level: 3
|
||||
Time: 300000
|
||||
Duration2:
|
||||
- Level: 1
|
||||
Time: 600000
|
||||
- Level: 2
|
||||
Time: 900000
|
||||
- Level: 3
|
||||
Time: 1200000
|
||||
Requires:
|
||||
SpCost: 100
|
||||
Status: Change
|
||||
@@ -30819,7 +30823,8 @@ Body:
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
Hit: Single
|
||||
Duration2: 1000
|
||||
AfterCastActDelay: 1000
|
||||
AfterCastWalkDelay: 1000
|
||||
Requires:
|
||||
SpCost: 10
|
||||
- Id: 8006
|
||||
@@ -30831,6 +30836,7 @@ Body:
|
||||
NoDamage: true
|
||||
Hit: Single
|
||||
AfterCastActDelay: 30000
|
||||
AfterCastWalkDelay: 1000
|
||||
Duration1:
|
||||
- Level: 1
|
||||
Time: 40000
|
||||
@@ -30869,6 +30875,14 @@ Body:
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
Hit: Single
|
||||
AfterCastActDelay:
|
||||
- Level: 1
|
||||
Time: 300000
|
||||
- Level: 2
|
||||
Time: 600000
|
||||
- Level: 3
|
||||
Time: 900000
|
||||
AfterCastWalkDelay: 1000
|
||||
Duration1:
|
||||
- Level: 1
|
||||
Time: 60000
|
||||
@@ -30876,13 +30890,6 @@ Body:
|
||||
Time: 180000
|
||||
- Level: 3
|
||||
Time: 300000
|
||||
Duration2:
|
||||
- Level: 1
|
||||
Time: 300000
|
||||
- Level: 2
|
||||
Time: 600000
|
||||
- Level: 3
|
||||
Time: 900000
|
||||
Requires:
|
||||
SpCost: 120
|
||||
Status: Bloodlust
|
||||
@@ -30905,7 +30912,6 @@ Body:
|
||||
Count: -2
|
||||
- Level: 5
|
||||
Count: -3
|
||||
AfterCastWalkDelay: 2000
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
@@ -30926,6 +30932,18 @@ Body:
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
Hit: Single
|
||||
AfterCastActDelay:
|
||||
- Level: 1
|
||||
Time: 60000
|
||||
- Level: 2
|
||||
Time: 70000
|
||||
- Level: 3
|
||||
Time: 80000
|
||||
- Level: 4
|
||||
Time: 90000
|
||||
- Level: 5
|
||||
Time: 120000
|
||||
AfterCastWalkDelay: 1000
|
||||
Duration1:
|
||||
- Level: 1
|
||||
Time: 60000
|
||||
@@ -30937,17 +30955,6 @@ Body:
|
||||
Time: 45000
|
||||
- Level: 5
|
||||
Time: 40000
|
||||
Duration2:
|
||||
- Level: 1
|
||||
Time: 60000
|
||||
- Level: 2
|
||||
Time: 70000
|
||||
- Level: 3
|
||||
Time: 80000
|
||||
- Level: 4
|
||||
Time: 90000
|
||||
- Level: 5
|
||||
Time: 120000
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
@@ -30971,6 +30978,18 @@ Body:
|
||||
NoDamage: true
|
||||
Hit: Single
|
||||
CastCancel: true
|
||||
AfterCastActDelay:
|
||||
- Level: 1
|
||||
Time: 60000
|
||||
- Level: 2
|
||||
Time: 70000
|
||||
- Level: 3
|
||||
Time: 80000
|
||||
- Level: 4
|
||||
Time: 90000
|
||||
- Level: 5
|
||||
Time: 120000
|
||||
AfterCastWalkDelay: 1000
|
||||
Duration1:
|
||||
- Level: 1
|
||||
Time: 60000
|
||||
@@ -30982,17 +31001,6 @@ Body:
|
||||
Time: 45000
|
||||
- Level: 5
|
||||
Time: 40000
|
||||
Duration2:
|
||||
- Level: 1
|
||||
Time: 60000
|
||||
- Level: 2
|
||||
Time: 70000
|
||||
- Level: 3
|
||||
Time: 80000
|
||||
- Level: 4
|
||||
Time: 90000
|
||||
- Level: 5
|
||||
Time: 120000
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
@@ -31015,7 +31023,6 @@ Body:
|
||||
Range: 15
|
||||
Hit: Single
|
||||
HitCount: 1
|
||||
AfterCastActDelay: 1000
|
||||
Requires:
|
||||
SpCost: 1
|
||||
- Id: 8013
|
||||
@@ -31037,17 +31044,6 @@ Body:
|
||||
Count: 4
|
||||
- Level: 5
|
||||
Count: 5
|
||||
AfterCastActDelay:
|
||||
- Level: 1
|
||||
Time: 2000
|
||||
- Level: 2
|
||||
Time: 2200
|
||||
- Level: 3
|
||||
Time: 2400
|
||||
- Level: 4
|
||||
Time: 2600
|
||||
- Level: 5
|
||||
Time: 2800
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
@@ -31068,8 +31064,7 @@ Body:
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
Hit: Single
|
||||
AfterCastActDelay: 3000
|
||||
AfterCastWalkDelay: 3000
|
||||
AfterCastWalkDelay: 1500
|
||||
Requires:
|
||||
SpCost: 40
|
||||
- Id: 8015
|
||||
@@ -31093,7 +31088,6 @@ Body:
|
||||
HitCount: 1
|
||||
Element: Weapon
|
||||
SplashArea: 4
|
||||
AfterCastWalkDelay: 1000
|
||||
Requires:
|
||||
SpCost: 1
|
||||
- Id: 8018
|
||||
|
||||
@@ -2478,13 +2478,17 @@ Body:
|
||||
DurationLookup: HLIF_AVOID
|
||||
CalcFlags:
|
||||
Speed: true
|
||||
Flags:
|
||||
NoSave: true
|
||||
RemoveFromHomOnWarp: true
|
||||
- Status: Change
|
||||
DurationLookup: HLIF_CHANGE
|
||||
CalcFlags:
|
||||
Vit: true
|
||||
Int: true
|
||||
Flags:
|
||||
RemoveOnChangeMap: true
|
||||
NoSave: true
|
||||
RemoveFromHomOnWarp: true
|
||||
Fail:
|
||||
Change: true
|
||||
- Status: Bloodlust
|
||||
|
||||
@@ -501,19 +501,19 @@ Body:
|
||||
7@thts: true
|
||||
8@thts: true
|
||||
- Id: 67
|
||||
Name: The Maze of Oz
|
||||
Name: Oz Labyrinth
|
||||
Enter:
|
||||
Map: 1@oz
|
||||
X: 284
|
||||
Y: 167
|
||||
- Id: 68
|
||||
Name: Thor Gunsu Base
|
||||
Name: Thor Military Base
|
||||
Enter:
|
||||
Map: 1@tcamp
|
||||
X: 103
|
||||
Y: 237
|
||||
- Id: 69
|
||||
Name: A Gathering Place of Wolves
|
||||
Name: Wolves Gathering Place
|
||||
Enter:
|
||||
Map: 1@nyr
|
||||
X: 194
|
||||
@@ -529,7 +529,7 @@ Body:
|
||||
AdditionalMaps:
|
||||
2@nyr: true
|
||||
- Id: 71
|
||||
Name: Villa of High Priest
|
||||
Name: High Priest's Villa
|
||||
Enter:
|
||||
Map: 1@adv
|
||||
X: 123
|
||||
|
||||
@@ -187652,7 +187652,7 @@ Body:
|
||||
bonus2 bSkillAtk,"GC_CROSSIMPACT",20*(.@r/3);
|
||||
bonus2 bSkillAtk,"GC_ROLLINGCUTTER",20*(.@r/3);
|
||||
bonus2 bSkillAtk,"SC_TRIANGLESHOT",20*(.@r/3);
|
||||
bonus2 bSkillAtk,"SC_STARTMARK",20*(.@r/3);
|
||||
bonus2 bSkillAtk,"SC_FATALMENACE",20*(.@r/3);
|
||||
if (.@r>=9) {
|
||||
bonus bLongAtkRate,10;
|
||||
bonus bShortAtkRate,10;
|
||||
|
||||
@@ -86200,31 +86200,31 @@ Body:
|
||||
Flags:
|
||||
BuyingStore: true
|
||||
- Id: 1001072
|
||||
AegisName: aegis_1001072
|
||||
AegisName: Evil_Black_Bid
|
||||
Name: Evil Orb
|
||||
Type: Etc
|
||||
Buy: 1480
|
||||
Weight: 10
|
||||
- Id: 1001073
|
||||
AegisName: aegis_1001073
|
||||
AegisName: Ectoplasmic_Stone
|
||||
Name: Ectoplasmic Stone
|
||||
Type: Etc
|
||||
Buy: 1460
|
||||
Weight: 10
|
||||
- Id: 1001074
|
||||
AegisName: aegis_1001074
|
||||
AegisName: Heavy_Chain
|
||||
Name: Heavy Chain
|
||||
Type: Etc
|
||||
Buy: 1480
|
||||
Weight: 10
|
||||
- Id: 1001075
|
||||
AegisName: aegis_1001075
|
||||
AegisName: Evil_Minded_Ruby
|
||||
Name: Evil Minded Ruby
|
||||
Type: Etc
|
||||
Buy: 1500
|
||||
Weight: 10
|
||||
- Id: 1001076
|
||||
AegisName: aegis_1001076
|
||||
AegisName: Small_Sewing_Box
|
||||
Name: Small Sewing Kit
|
||||
Type: Etc
|
||||
Buy: 1640
|
||||
@@ -86236,37 +86236,37 @@ Body:
|
||||
Buy: 1600
|
||||
Weight: 10
|
||||
- Id: 1001078
|
||||
AegisName: aegis_1001078
|
||||
AegisName: Blue_Moon_Stone
|
||||
Name: Fragments of the Blue Moon
|
||||
Type: Etc
|
||||
Buy: 1720
|
||||
Weight: 10
|
||||
- Id: 1001079
|
||||
AegisName: aegis_1001079
|
||||
AegisName: Weird_Tentacle
|
||||
Name: Monstrous Tentacles
|
||||
Type: Etc
|
||||
Buy: 1520
|
||||
Weight: 10
|
||||
- Id: 1001080
|
||||
AegisName: aegis_1001080
|
||||
AegisName: Congealed_Poison
|
||||
Name: Congealed Poison
|
||||
Type: Etc
|
||||
Buy: 1600
|
||||
Weight: 10
|
||||
- Id: 1001081
|
||||
AegisName: aegis_1001081
|
||||
AegisName: Slicky_Fluid
|
||||
Name: Slimy Fluid
|
||||
Type: Etc
|
||||
Buy: 1560
|
||||
Weight: 10
|
||||
- Id: 1001082
|
||||
AegisName: aegis_1001082
|
||||
AegisName: Reptile_Stone
|
||||
Name: Monster's Stone
|
||||
Type: Etc
|
||||
Buy: 1720
|
||||
Weight: 10
|
||||
- Id: 1001083
|
||||
AegisName: aegis_1001083
|
||||
AegisName: Turn_Yellow_Leaf
|
||||
Name: Maple Leaves
|
||||
Type: Etc
|
||||
Buy: 1640
|
||||
@@ -86278,13 +86278,13 @@ Body:
|
||||
Buy: 1480
|
||||
Weight: 10
|
||||
- Id: 1001085
|
||||
AegisName: aegis_1001085
|
||||
AegisName: Cool_Liquid
|
||||
Name: Cool Liquid
|
||||
Type: Etc
|
||||
Buy: 1460
|
||||
Weight: 10
|
||||
- Id: 1001086
|
||||
AegisName: aegis_1001086
|
||||
AegisName: Green_Crystal_Fragment
|
||||
Name: Blue Crystal Shard
|
||||
Type: Etc
|
||||
Buy: 1480
|
||||
@@ -86296,7 +86296,7 @@ Body:
|
||||
Buy: 1600
|
||||
Weight: 10
|
||||
- Id: 1001088
|
||||
AegisName: aegis_1001088
|
||||
AegisName: Fresh_Pear
|
||||
Name: Fresh Pear
|
||||
Type: Etc
|
||||
Buy: 1640
|
||||
|
||||
@@ -113439,3 +113439,216 @@ Body:
|
||||
- Index: 2
|
||||
Item: Enchant_Stone_Box35
|
||||
Amount: 10
|
||||
# custom rates
|
||||
- Group: D_GW_EXTRACTOR
|
||||
SubGroups:
|
||||
- SubGroup: 1
|
||||
List:
|
||||
- Index: 0
|
||||
Item: EP19_D_P_Ore
|
||||
Amount: 1
|
||||
Rate: 5
|
||||
- Index: 1
|
||||
Item: EP19_N_P_Ore
|
||||
Amount: 1
|
||||
Rate: 3
|
||||
- Index: 2
|
||||
Item: EP19_D_P_Crystal
|
||||
Amount: 1
|
||||
Rate: 2
|
||||
- Index: 3
|
||||
Item: EP19_N_P_Crystal
|
||||
Amount: 1
|
||||
Rate: 1
|
||||
- Index: 4
|
||||
Item: EP19_D_P_Stone
|
||||
Amount: 1
|
||||
Rate: 1
|
||||
- Index: 5
|
||||
Item: EP19_S_F_1_Extract
|
||||
Amount: 1
|
||||
Rate: 1
|
||||
- Index: 6
|
||||
Item: EP19_S_F_2_Extract
|
||||
Amount: 1
|
||||
Rate: 1
|
||||
- Index: 7
|
||||
Item: EP19_S_F_3_Extract
|
||||
Amount: 1
|
||||
Rate: 1
|
||||
- Index: 8
|
||||
Item: EP19_Gla_Extract
|
||||
Amount: 1
|
||||
Rate: 1
|
||||
- Index: 9
|
||||
Item: Snow_F_Ore
|
||||
Amount: 1
|
||||
Rate: 12
|
||||
- Index: 10
|
||||
Item: Snow_F_Stone1
|
||||
Amount: 1
|
||||
Rate: 5
|
||||
- Index: 11
|
||||
Item: Snow_F_Stone2
|
||||
Amount: 1
|
||||
Rate: 3
|
||||
- Index: 12
|
||||
Item: Snow_F_Stone3
|
||||
Amount: 1
|
||||
Rate: 1
|
||||
- Index: 13
|
||||
Item: EP19_D_P_Ore
|
||||
Amount: 2
|
||||
Rate: 5
|
||||
- Index: 14
|
||||
Item: EP19_N_P_Ore
|
||||
Amount: 2
|
||||
Rate: 3
|
||||
- Index: 15
|
||||
Item: EP19_D_P_Crystal
|
||||
Amount: 2
|
||||
Rate: 2
|
||||
- Index: 16
|
||||
Item: EP19_N_P_Crystal
|
||||
Amount: 2
|
||||
Rate: 1
|
||||
- Index: 17
|
||||
Item: EP19_D_P_Stone
|
||||
Amount: 2
|
||||
Rate: 1
|
||||
- Index: 18
|
||||
Item: EP19_S_F_1_Extract
|
||||
Amount: 2
|
||||
Rate: 1
|
||||
- Index: 19
|
||||
Item: EP19_S_F_2_Extract
|
||||
Amount: 2
|
||||
Rate: 1
|
||||
- Index: 20
|
||||
Item: EP19_S_F_3_Extract
|
||||
Amount: 2
|
||||
Rate: 1
|
||||
- Index: 21
|
||||
Item: EP19_Gla_Extract
|
||||
Amount: 2
|
||||
Rate: 1
|
||||
- Index: 22
|
||||
Item: Snow_F_Ore
|
||||
Amount: 2
|
||||
Rate: 12
|
||||
- Index: 23
|
||||
Item: Snow_F_Stone1
|
||||
Amount: 2
|
||||
Rate: 5
|
||||
- Index: 24
|
||||
Item: Snow_F_Stone2
|
||||
Amount: 2
|
||||
Rate: 3
|
||||
- Index: 25
|
||||
Item: Snow_F_Stone3
|
||||
Amount: 2
|
||||
Rate: 1
|
||||
- Index: 26
|
||||
Item: EP19_D_P_Ore
|
||||
Amount: 3
|
||||
Rate: 5
|
||||
- Index: 27
|
||||
Item: EP19_N_P_Ore
|
||||
Amount: 3
|
||||
Rate: 3
|
||||
- Index: 28
|
||||
Item: EP19_D_P_Crystal
|
||||
Amount: 3
|
||||
Rate: 2
|
||||
- Index: 29
|
||||
Item: EP19_N_P_Crystal
|
||||
Amount: 3
|
||||
Rate: 1
|
||||
- Index: 30
|
||||
Item: EP19_D_P_Stone
|
||||
Amount: 3
|
||||
Rate: 1
|
||||
- Index: 31
|
||||
Item: EP19_S_F_1_Extract
|
||||
Amount: 3
|
||||
Rate: 1
|
||||
- Index: 32
|
||||
Item: EP19_S_F_2_Extract
|
||||
Amount: 3
|
||||
Rate: 1
|
||||
- Index: 33
|
||||
Item: EP19_S_F_3_Extract
|
||||
Amount: 3
|
||||
Rate: 1
|
||||
- Index: 34
|
||||
Item: EP19_Gla_Extract
|
||||
Amount: 3
|
||||
Rate: 1
|
||||
- Index: 35
|
||||
Item: Snow_F_Ore
|
||||
Amount: 3
|
||||
Rate: 12
|
||||
- Index: 36
|
||||
Item: Snow_F_Stone1
|
||||
Amount: 3
|
||||
Rate: 5
|
||||
- Index: 37
|
||||
Item: Snow_F_Stone2
|
||||
Amount: 3
|
||||
Rate: 3
|
||||
- Index: 38
|
||||
Item: Snow_F_Stone3
|
||||
Amount: 3
|
||||
Rate: 1
|
||||
- Index: 39
|
||||
Item: EP19_D_P_Ore
|
||||
Amount: 4
|
||||
Rate: 5
|
||||
- Index: 40
|
||||
Item: EP19_N_P_Ore
|
||||
Amount: 4
|
||||
Rate: 3
|
||||
- Index: 41
|
||||
Item: EP19_D_P_Crystal
|
||||
Amount: 4
|
||||
Rate: 2
|
||||
- Index: 42
|
||||
Item: EP19_N_P_Crystal
|
||||
Amount: 4
|
||||
Rate: 1
|
||||
- Index: 43
|
||||
Item: EP19_D_P_Stone
|
||||
Amount: 4
|
||||
Rate: 1
|
||||
- Index: 44
|
||||
Item: EP19_S_F_1_Extract
|
||||
Amount: 4
|
||||
Rate: 1
|
||||
- Index: 45
|
||||
Item: EP19_S_F_2_Extract
|
||||
Amount: 4
|
||||
Rate: 1
|
||||
- Index: 46
|
||||
Item: EP19_S_F_3_Extract
|
||||
Amount: 4
|
||||
Rate: 1
|
||||
- Index: 47
|
||||
Item: EP19_Gla_Extract
|
||||
Amount: 4
|
||||
Rate: 1
|
||||
- Index: 48
|
||||
Item: Snow_F_Ore
|
||||
Amount: 4
|
||||
Rate: 12
|
||||
- Index: 49
|
||||
Item: Snow_F_Stone1
|
||||
Amount: 4
|
||||
Rate: 5
|
||||
- Index: 50
|
||||
Item: Snow_F_Stone2
|
||||
Amount: 4
|
||||
Rate: 3
|
||||
- Index: 51
|
||||
Item: Snow_F_Stone3
|
||||
Amount: 4
|
||||
Rate: 1
|
||||
|
||||
@@ -4359,110 +4359,110 @@ Body:
|
||||
- Item: S_Caster_Weapon
|
||||
- Item: S_Caster_earring
|
||||
- Item: S_Caster_Pendant
|
||||
# - Item: Ice_F_Stone_Box2
|
||||
# RewardGroup: ICE_F_STONE_BOX2
|
||||
# RequiredRequirementsCount: 3
|
||||
# Requirements:
|
||||
# - Item: Ice_F_Stone_Str
|
||||
# - Item: Ice_F_Stone_Dex
|
||||
# - Item: Ice_F_Stone_Agi
|
||||
# - Item: Ice_F_Stone_Int
|
||||
# - Item: Ice_F_Stone_Vit
|
||||
# - Item: Ice_F_Stone_luk
|
||||
# - Item: Ice_F_Stone_Def
|
||||
# - Item: Ice_F_Stone_Mdef
|
||||
# - Item: Ice_F_Stone_Ran
|
||||
# - Item: Ice_F_Stone_War
|
||||
# - Item: Ice_F_Stone_Mag
|
||||
# - Item: Ice_F_Stone_R_Reject
|
||||
# - Item: Ice_F_Stone_Force
|
||||
# - Item: Ice_F_Stone_S_Delay
|
||||
# - Item: Ice_F_Stone_Skill_1
|
||||
# - Item: Ice_F_Stone_Skill_2
|
||||
# - Item: Ice_F_Stone_Skill_3
|
||||
# - Item: Ice_F_Stone_Skill_4
|
||||
# - Item: Ice_F_Stone_Skill_5
|
||||
# - Item: Ice_F_Stone_Skill_6
|
||||
# - Item: Ice_F_Stone_Skill_7
|
||||
# - Item: Ice_F_Stone_Skill_8
|
||||
# - Item: Ice_F_Stone_Skill_9
|
||||
# - Item: Ice_F_Stone_Skill_10
|
||||
# - Item: Ice_F_Stone_Skill_11
|
||||
# - Item: Ice_F_Stone_Skill_12
|
||||
# - Item: Ice_F_Stone_Skill_13
|
||||
# - Item: Ice_F_Stone_Skill_14
|
||||
# - Item: Ice_F_Stone_Skill_15
|
||||
# - Item: Ice_F_Stone_Skill_16
|
||||
# - Item: Ice_F_Stone_Skill_17
|
||||
# - Item: Ice_F_Stone_Skill_18
|
||||
# - Item: Ice_F_Stone_Skill_19
|
||||
# - Item: Ice_F_Stone_Skill_20
|
||||
# - Item: Ice_F_Stone_Skill_21
|
||||
# - Item: Ice_F_Stone_Skill_22
|
||||
# - Item: Ice_F_Stone_Skill_23
|
||||
# - Item: Ice_F_Stone_Skill_24
|
||||
# - Item: Ice_F_Stone_Skill_25
|
||||
# - Item: Ice_F_Stone_Skill_26
|
||||
# - Item: Ice_F_Stone_Skill_27
|
||||
# - Item: Ice_F_Stone_Skill_28
|
||||
# - Item: Ice_F_Stone_Skill_29
|
||||
# - Item: Ice_F_Stone_Skill_30
|
||||
# - Item: Ice_F_Stone_Skill_31
|
||||
# - Item: Ice_F_Stone_Skill_32
|
||||
# - Item: Ice_F_Stone_Skill_33
|
||||
# - Item: Ice_F_Stone_Skill_34
|
||||
# - Item: Ice_F_Stone_Skill_35
|
||||
# - Item: Ice_F_Stone_Skill_36
|
||||
# - Item: Ice_F_Stone_Skill_37
|
||||
# - Item: Ice_F_Stone_Skill_38
|
||||
# - Item: Ice_F_Stone_Skill_39
|
||||
# - Item: Ice_F_Stone_Skill_40
|
||||
# - Item: Ice_F_Stone_Skill_41
|
||||
# - Item: Ice_F_Stone_Skill_42
|
||||
# - Item: Ice_F_Stone_Skill_43
|
||||
# - Item: Ice_F_Stone_Skill_44
|
||||
# - Item: Ice_F_Stone_Skill_45
|
||||
# - Item: Ice_F_Stone_Skill_46
|
||||
# - Item: Ice_F_Stone_Skill_47
|
||||
# - Item: Ice_F_Stone_Skill_48
|
||||
# - Item: Ice_F_Stone_Skill_49
|
||||
# - Item: Ice_F_Stone_Skill_50
|
||||
# - Item: Ice_F_Stone_Skill_51
|
||||
# - Item: Ice_F_Stone_Skill_52
|
||||
# - Item: Ice_F_Stone_Skill_53
|
||||
# - Item: Ice_F_Stone_Skill_54
|
||||
# - Item: Ice_F_Stone_Speed
|
||||
# - Item: Ice_F_Stone_Caster
|
||||
# - Item: Ice_F_Stone_Critical
|
||||
# - Item: Ice_F_Stone_Guide
|
||||
# - Item: Ice_F_Stone_Above
|
||||
# - Item: Ice_F_Stone_P_Full
|
||||
# - Item: Ice_F_Stone_M_Counter
|
||||
# - Item: Ice_F_Stone_Hp
|
||||
# - Item: Ice_F_Stone_Sp
|
||||
# - Item: Ice_F_Stone_Heal
|
||||
# - Item: Ice_F_Stone_Robust
|
||||
# - Item: Ice_F_Stone_F_Cast
|
||||
# - Item: Ice_F_Stone_M_F
|
||||
# - Item: Ice_F_Stone_P_F
|
||||
# - Item: Ice_F_Stone_Un_Vit
|
||||
# - Item: Ice_F_Stone_Sp_Int
|
||||
# - Item: Ice_F_Stone_Fi_Dex
|
||||
# - Item: Ice_F_Stone_Ov_Str
|
||||
# - Item: Ice_F_Stone_Fa_Agi
|
||||
# - Item: Ice_F_Stone_Lu_Luk
|
||||
# - Item: Ice_F_Stone_A_Delay
|
||||
# - Item: Ice_F_Stone_E_Archer
|
||||
# - Item: Ice_F_Stone_Fatal
|
||||
# - Item: Ice_F_Stone_F_Spirit
|
||||
# - Item: Ice_F_Stone_Spell
|
||||
# - Item: Ice_F_Stone_HealHP
|
||||
# - Item: Ice_F_Stone_HealSP
|
||||
# - Item: Ice_F_Stone_Life
|
||||
# - Item: Ice_F_Stone_Soul
|
||||
# - Item: Ice_F_Stone_M_Heal
|
||||
# - Item: Ice_F_Stone_M_Soul
|
||||
# - Item: Ice_F_Stone_A_Force
|
||||
- Item: Ice_F_Stone_Box2
|
||||
RewardGroup: ICE_F_STONE_BOX
|
||||
RequiredRequirementsCount: 3
|
||||
Requirements:
|
||||
- Item: Ice_F_Stone_Str
|
||||
- Item: Ice_F_Stone_Dex
|
||||
- Item: Ice_F_Stone_Agi
|
||||
- Item: Ice_F_Stone_Int
|
||||
- Item: Ice_F_Stone_Vit
|
||||
- Item: Ice_F_Stone_luk
|
||||
- Item: Ice_F_Stone_Def
|
||||
- Item: Ice_F_Stone_Mdef
|
||||
- Item: Ice_F_Stone_Ran
|
||||
- Item: Ice_F_Stone_War
|
||||
- Item: Ice_F_Stone_Mag
|
||||
- Item: Ice_F_Stone_R_Reject
|
||||
- Item: Ice_F_Stone_Force
|
||||
- Item: Ice_F_Stone_S_Delay
|
||||
- Item: Ice_F_Stone_Skill_1
|
||||
- Item: Ice_F_Stone_Skill_2
|
||||
- Item: Ice_F_Stone_Skill_3
|
||||
- Item: Ice_F_Stone_Skill_4
|
||||
- Item: Ice_F_Stone_Skill_5
|
||||
- Item: Ice_F_Stone_Skill_6
|
||||
- Item: Ice_F_Stone_Skill_7
|
||||
- Item: Ice_F_Stone_Skill_8
|
||||
- Item: Ice_F_Stone_Skill_9
|
||||
- Item: Ice_F_Stone_Skill_10
|
||||
- Item: Ice_F_Stone_Skill_11
|
||||
- Item: Ice_F_Stone_Skill_12
|
||||
- Item: Ice_F_Stone_Skill_13
|
||||
- Item: Ice_F_Stone_Skill_14
|
||||
- Item: Ice_F_Stone_Skill_15
|
||||
- Item: Ice_F_Stone_Skill_16
|
||||
- Item: Ice_F_Stone_Skill_17
|
||||
- Item: Ice_F_Stone_Skill_18
|
||||
- Item: Ice_F_Stone_Skill_19
|
||||
- Item: Ice_F_Stone_Skill_20
|
||||
- Item: Ice_F_Stone_Skill_21
|
||||
- Item: Ice_F_Stone_Skill_22
|
||||
- Item: Ice_F_Stone_Skill_23
|
||||
- Item: Ice_F_Stone_Skill_24
|
||||
- Item: Ice_F_Stone_Skill_25
|
||||
- Item: Ice_F_Stone_Skill_26
|
||||
- Item: Ice_F_Stone_Skill_27
|
||||
- Item: Ice_F_Stone_Skill_28
|
||||
- Item: Ice_F_Stone_Skill_29
|
||||
- Item: Ice_F_Stone_Skill_30
|
||||
- Item: Ice_F_Stone_Skill_31
|
||||
- Item: Ice_F_Stone_Skill_32
|
||||
- Item: Ice_F_Stone_Skill_33
|
||||
- Item: Ice_F_Stone_Skill_34
|
||||
- Item: Ice_F_Stone_Skill_35
|
||||
- Item: Ice_F_Stone_Skill_36
|
||||
- Item: Ice_F_Stone_Skill_37
|
||||
- Item: Ice_F_Stone_Skill_38
|
||||
- Item: Ice_F_Stone_Skill_39
|
||||
- Item: Ice_F_Stone_Skill_40
|
||||
- Item: Ice_F_Stone_Skill_41
|
||||
- Item: Ice_F_Stone_Skill_42
|
||||
- Item: Ice_F_Stone_Skill_43
|
||||
- Item: Ice_F_Stone_Skill_44
|
||||
- Item: Ice_F_Stone_Skill_45
|
||||
- Item: Ice_F_Stone_Skill_46
|
||||
- Item: Ice_F_Stone_Skill_47
|
||||
- Item: Ice_F_Stone_Skill_48
|
||||
- Item: Ice_F_Stone_Skill_49
|
||||
- Item: Ice_F_Stone_Skill_50
|
||||
- Item: Ice_F_Stone_Skill_51
|
||||
- Item: Ice_F_Stone_Skill_52
|
||||
- Item: Ice_F_Stone_Skill_53
|
||||
- Item: Ice_F_Stone_Skill_54
|
||||
- Item: Ice_F_Stone_Speed
|
||||
- Item: Ice_F_Stone_Caster
|
||||
- Item: Ice_F_Stone_Critical
|
||||
- Item: Ice_F_Stone_Guide
|
||||
- Item: Ice_F_Stone_Above
|
||||
- Item: Ice_F_Stone_P_Full
|
||||
- Item: Ice_F_Stone_M_Counter
|
||||
- Item: Ice_F_Stone_Hp
|
||||
- Item: Ice_F_Stone_Sp
|
||||
- Item: Ice_F_Stone_Heal
|
||||
- Item: Ice_F_Stone_Robust
|
||||
- Item: Ice_F_Stone_F_Cast
|
||||
- Item: Ice_F_Stone_M_F
|
||||
- Item: Ice_F_Stone_P_F
|
||||
- Item: Ice_F_Stone_Un_Vit
|
||||
- Item: Ice_F_Stone_Sp_Int
|
||||
- Item: Ice_F_Stone_Fi_Dex
|
||||
- Item: Ice_F_Stone_Ov_Str
|
||||
- Item: Ice_F_Stone_Fa_Agi
|
||||
- Item: Ice_F_Stone_Lu_Luk
|
||||
- Item: Ice_F_Stone_A_Delay
|
||||
- Item: Ice_F_Stone_E_Archer
|
||||
- Item: Ice_F_Stone_Fatal
|
||||
- Item: Ice_F_Stone_F_Spirit
|
||||
- Item: Ice_F_Stone_Spell
|
||||
- Item: Ice_F_Stone_HealHP
|
||||
- Item: Ice_F_Stone_HealSP
|
||||
- Item: Ice_F_Stone_Life
|
||||
- Item: Ice_F_Stone_Soul
|
||||
- Item: Ice_F_Stone_M_Heal
|
||||
- Item: Ice_F_Stone_M_Soul
|
||||
- Item: Ice_F_Stone_A_Force
|
||||
- Item: R_BearersShadow_Mix
|
||||
RewardGroup: R_BEARERSSHADOW_MIX
|
||||
RequiredRequirementsCount: 6
|
||||
@@ -4812,3 +4812,33 @@ Body:
|
||||
# Amount: 100
|
||||
# - Item: Crystal_Of_Pollution
|
||||
# Amount: 100
|
||||
- Item: D_Gw_Extractor
|
||||
RewardGroup: D_GW_EXTRACTOR
|
||||
RequiredRequirementsCount: 3
|
||||
Requirements:
|
||||
- Item: D_Glacier_T_Sword
|
||||
- Item: D_Glacier_Lance
|
||||
- Item: D_Glacier_Sword
|
||||
- Item: D_Glacier_B_Sword
|
||||
- Item: D_Glacier_Spear
|
||||
- Item: D_Glacier_T_Axe
|
||||
- Item: D_Glacier_Axe
|
||||
- Item: D_Glacier_Mace
|
||||
- Item: D_Glacier_M_Mace
|
||||
- Item: D_Glacier_R_Knife
|
||||
- Item: D_Glacier_B_Knife
|
||||
- Item: D_Glacier_Bow
|
||||
- Item: D_Glacier_Knuckle
|
||||
- Item: D_Glacier_Book
|
||||
- Item: D_Glacier_Katar
|
||||
- Item: D_Glacier_Wand
|
||||
- Item: D_Glacier_Staff
|
||||
- Item: D_Glacier_Foxtail
|
||||
- Item: D_Glacier_Violin
|
||||
- Item: D_Glacier_Whip
|
||||
- Item: D_Glacier_Humma
|
||||
- Item: D_Glacier_Revolver
|
||||
- Item: D_Glacier_Rifle
|
||||
- Item: D_Glacier_Shotgun
|
||||
- Item: D_Glacier_Gatling
|
||||
- Item: D_Glacier_Launcher
|
||||
|
||||
1858
db/re/map_drops.yml
1858
db/re/map_drops.yml
File diff suppressed because it is too large
Load Diff
17361
db/re/mob_db.yml
17361
db/re/mob_db.yml
File diff suppressed because it is too large
Load Diff
@@ -13606,7 +13606,7 @@
|
||||
20811,ILL_KRAKEN@NPC_HELLJUDGEMENT2,chase,768,2,3000,500,5000,no,target,always,0,,,,,,,
|
||||
20811,ILL_KRAKEN@NPC_HELLJUDGEMENT2,attack,768,2,3000,500,5000,no,target,always,0,,,,,,,
|
||||
20811,ILL_KRAKEN@NPC_CLOUD_KILL,attack,739,5,2000,500,16000,no,target,always,0,,,,,,,
|
||||
20811,ILL_KRAKEN@NPC_DAMAGE_HEAL,attack,753,1,10000,1000,60000,no,target,myhpltmaxrate,10,,,,,,,
|
||||
20811,ILL_KRAKEN@NPC_DAMAGE_HEAL,attack,753,1,10000,1000,60000,no,self,myhpltmaxrate,10,,,,,,,
|
||||
20811,ILL_KRAKEN@NPC_PHANTOMTHRUST,chase,741,5,1000,0,5000,no,self,always,0,,,,,,,
|
||||
20811,ILL_KRAKEN@NPC_CALLSLAVE,idle,352,1,5000,0,30000,yes,self,always,0,,,,,,,
|
||||
20843,ILL_ABYSMAL_WITCH@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,0,,,,,,,
|
||||
@@ -13638,7 +13638,7 @@
|
||||
20843,ILL_ABYSMAL_WITCH@NPC_HELLJUDGEMENT2,chase,768,2,2000,500,5000,no,target,always,0,,,,,,,
|
||||
20843,ILL_ABYSMAL_WITCH@NPC_HELLJUDGEMENT2,attack,768,2,2000,500,5000,no,target,always,0,,,,,,,
|
||||
20843,ILL_ABYSMAL_WITCH@NPC_CLOUD_KILL,attack,739,5,2000,500,16000,no,target,always,0,,,,,,,
|
||||
20843,ILL_ABYSMAL_WITCH@NPC_DAMAGE_HEAL,attack,753,1,10000,1000,60000,no,target,myhpltmaxrate,10,,,,,,,
|
||||
20843,ILL_ABYSMAL_WITCH@NPC_DAMAGE_HEAL,attack,753,1,10000,1000,60000,no,self,myhpltmaxrate,10,,,,,,,
|
||||
20843,ILL_ABYSMAL_WITCH@NPC_CALLSLAVE,idle,352,1,5000,0,30000,yes,self,always,0,,,,,,,
|
||||
|
||||
// Episode 17.2 - Sage's Legacy
|
||||
@@ -14239,7 +14239,7 @@
|
||||
20934,R001_BESTIA@NPC_EARTHQUAKE,attack,653,5,10000,500,20000,no,self,myhpltmaxrate,40,,,,,,,
|
||||
20934,R001_BESTIA@NPC_PULSESTRIKE,attack,661,5,10000,0,15000,no,self,myhpltmaxrate,60,,,,,,,
|
||||
20934,R001_BESTIA@NPC_DRAGONFEAR,attack,659,5,10000,0,10000,no,self,always,0,,,,,,,
|
||||
// 20934,R001_BESTIA@NPC_DAMAGE_HEAL,attack,753,1,3000,1500,40000,no,target,myhpltmaxrate,20,,,,,,,
|
||||
// 20934,R001_BESTIA@NPC_DAMAGE_HEAL,attack,753,1,3000,1500,40000,no,self,myhpltmaxrate,20,,,,,,,
|
||||
|
||||
// nif_dun
|
||||
20935,GAN_CEANN@NPC_CRITICALSLASH,attack,170,1,1000,500,5000,no,target,always,0,,,,,,,
|
||||
@@ -14339,7 +14339,7 @@
|
||||
20943,DEATH_WITCH@NPC_HELLJUDGEMENT,chase,662,2,2000,500,5000,no,self,always,0,,,,,,,
|
||||
20943,DEATH_WITCH@NPC_HELLJUDGEMENT,attack,662,2,2000,500,5000,no,self,always,0,,,,,,,
|
||||
20943,DEATH_WITCH@NPC_CLOUD_KILL,attack,739,5,2000,500,16000,no,target,always,0,,,,,,,
|
||||
// 20943,DEATH_WITCH@NPC_DAMAGE_HEAL,attack,753,1,10000,1000,60000,no,target,myhpltmaxrate,10,,,,,,,
|
||||
// 20943,DEATH_WITCH@NPC_DAMAGE_HEAL,attack,753,1,10000,1000,60000,no,self,myhpltmaxrate,10,,,,,,,
|
||||
20943,DEATH_WITCH@NPC_CALLSLAVE,idle,352,1,5000,0,30000,yes,self,always,0,,,,,,,
|
||||
20943,DEATH_WITCH@NPC_CALLSLAVE,attack,352,1,5000,0,30000,yes,self,always,0,,,,,,,
|
||||
|
||||
@@ -14570,7 +14570,7 @@
|
||||
21395,ILL_MAYA@NPC_CRITICALWOUND,attack,673,1,500,0,5000,yes,target,always,0,,,,,,,
|
||||
21395,ILL_MAYA@NPC_IMMUNE_PROPERTY,chase,754,4,1500,1500,60000,no,self,casttargeted,0,,,,,,,
|
||||
21395,ILL_MAYA@NPC_IMMUNE_PROPERTY,attack,754,1,1500,1500,60000,no,self,longrangeattacked,0,,,,,,,
|
||||
21395,ILL_MAYA@NPC_DAMAGE_HEAL,attack,753,1,500,1500,120000,no,target,myhpltmaxrate,50,,,,,,32,
|
||||
21395,ILL_MAYA@NPC_DAMAGE_HEAL,attack,753,1,500,1500,120000,no,self,myhpltmaxrate,50,,,,,,32,
|
||||
21395,ILL_MAYA@NPC_ALL_STAT_DOWN,attack,751,5,5000,1500,45000,no,target,always,0,,,,,,18,
|
||||
|
||||
// Episode 18
|
||||
|
||||
1309
db/re/pet_db.yml
1309
db/re/pet_db.yml
File diff suppressed because it is too large
Load Diff
1020
db/re/quest_db.yml
1020
db/re/quest_db.yml
File diff suppressed because it is too large
Load Diff
@@ -15918,6 +15918,15 @@ Body:
|
||||
- Level: 5
|
||||
Time: 350000
|
||||
FixedCastTime: 1000
|
||||
- Id: 578
|
||||
Name: DE_BERSERKAIZER # TODO: effect? The skill is only used to display a visual effect for now
|
||||
Description: Berserkaizer
|
||||
MaxLevel: 1
|
||||
TargetType: Self
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
HitCount: 1
|
||||
Duration1: -1
|
||||
- Id: 653
|
||||
Name: NPC_EARTHQUAKE
|
||||
Description: Earthquake
|
||||
@@ -43018,10 +43027,10 @@ Body:
|
||||
TargetType: Self
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
Range: 9
|
||||
Hit: Single
|
||||
HitCount: 1
|
||||
AfterCastActDelay: 2000
|
||||
Flags:
|
||||
IgnoreGtb: true
|
||||
AfterCastWalkDelay: 1000
|
||||
Cooldown: 20000
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
@@ -43044,11 +43053,7 @@ Body:
|
||||
TargetType: Self
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
Splash: true
|
||||
Hit: Single
|
||||
HitCount: 1
|
||||
SplashArea: -1
|
||||
AfterCastActDelay: 35000
|
||||
AfterCastWalkDelay: 1000
|
||||
Duration1:
|
||||
- Level: 1
|
||||
Time: 40000
|
||||
@@ -43060,6 +43065,7 @@ Body:
|
||||
Time: 25000
|
||||
- Level: 5
|
||||
Time: 20000
|
||||
Cooldown: 35000
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
@@ -43077,7 +43083,6 @@ Body:
|
||||
Name: HLIF_BRAIN
|
||||
Description: Brain Surgery
|
||||
MaxLevel: 5
|
||||
SplashArea: 1
|
||||
- Id: 8004
|
||||
Name: HLIF_CHANGE
|
||||
Description: Change
|
||||
@@ -43085,7 +43090,7 @@ Body:
|
||||
TargetType: Self
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
Hit: Single
|
||||
AfterCastWalkDelay: 1000
|
||||
Duration1:
|
||||
- Level: 1
|
||||
Time: 60000
|
||||
@@ -43093,7 +43098,7 @@ Body:
|
||||
Time: 180000
|
||||
- Level: 3
|
||||
Time: 300000
|
||||
Duration2:
|
||||
Cooldown:
|
||||
- Level: 1
|
||||
Time: 600000
|
||||
- Level: 2
|
||||
@@ -43111,7 +43116,8 @@ Body:
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
Hit: Single
|
||||
Duration2: 1000
|
||||
AfterCastWalkDelay: 1000
|
||||
Cooldown: 1000
|
||||
Requires:
|
||||
SpCost: 10
|
||||
- Id: 8006
|
||||
@@ -43122,7 +43128,7 @@ Body:
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
Hit: Single
|
||||
AfterCastActDelay: 30000
|
||||
AfterCastWalkDelay: 1000
|
||||
Duration1:
|
||||
- Level: 1
|
||||
Time: 40000
|
||||
@@ -43134,6 +43140,7 @@ Body:
|
||||
Time: 25000
|
||||
- Level: 5
|
||||
Time: 20000
|
||||
Cooldown: 30000
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
@@ -43161,6 +43168,7 @@ Body:
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
Hit: Single
|
||||
AfterCastWalkDelay: 1000
|
||||
Duration1:
|
||||
- Level: 1
|
||||
Time: 60000
|
||||
@@ -43168,7 +43176,7 @@ Body:
|
||||
Time: 180000
|
||||
- Level: 3
|
||||
Time: 300000
|
||||
Duration2:
|
||||
Cooldown:
|
||||
- Level: 1
|
||||
Time: 300000
|
||||
- Level: 2
|
||||
@@ -43197,7 +43205,7 @@ Body:
|
||||
Count: -2
|
||||
- Level: 5
|
||||
Count: -3
|
||||
AfterCastWalkDelay: 2000
|
||||
Cooldown: 2000
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
@@ -43218,6 +43226,7 @@ Body:
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
Hit: Single
|
||||
AfterCastWalkDelay: 1000
|
||||
Duration1:
|
||||
- Level: 1
|
||||
Time: 60000
|
||||
@@ -43229,7 +43238,7 @@ Body:
|
||||
Time: 45000
|
||||
- Level: 5
|
||||
Time: 40000
|
||||
Duration2:
|
||||
Cooldown:
|
||||
- Level: 1
|
||||
Time: 60000
|
||||
- Level: 2
|
||||
@@ -43263,6 +43272,7 @@ Body:
|
||||
NoDamage: true
|
||||
Hit: Single
|
||||
CastCancel: true
|
||||
AfterCastWalkDelay: 1000
|
||||
Duration1:
|
||||
- Level: 1
|
||||
Time: 60000
|
||||
@@ -43274,7 +43284,7 @@ Body:
|
||||
Time: 45000
|
||||
- Level: 5
|
||||
Time: 40000
|
||||
Duration2:
|
||||
Cooldown:
|
||||
- Level: 1
|
||||
Time: 60000
|
||||
- Level: 2
|
||||
@@ -43307,7 +43317,7 @@ Body:
|
||||
Range: 15
|
||||
Hit: Single
|
||||
HitCount: 1
|
||||
AfterCastActDelay: 1000
|
||||
Cooldown: 1000
|
||||
Requires:
|
||||
SpCost: 1
|
||||
- Id: 8013
|
||||
@@ -43329,7 +43339,7 @@ Body:
|
||||
Count: 4
|
||||
- Level: 5
|
||||
Count: 5
|
||||
AfterCastActDelay:
|
||||
Cooldown:
|
||||
- Level: 1
|
||||
Time: 2000
|
||||
- Level: 2
|
||||
@@ -43360,8 +43370,8 @@ Body:
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
Hit: Single
|
||||
AfterCastActDelay: 3000
|
||||
AfterCastWalkDelay: 3000
|
||||
AfterCastWalkDelay: 1500
|
||||
Cooldown: 3000
|
||||
Requires:
|
||||
SpCost: 40
|
||||
- Id: 8015
|
||||
@@ -43385,7 +43395,8 @@ Body:
|
||||
HitCount: 1
|
||||
Element: Weapon
|
||||
SplashArea: 4
|
||||
AfterCastWalkDelay: 1000
|
||||
AfterCastActDelay: 5000
|
||||
CoolDown: 1000
|
||||
Requires:
|
||||
SpCost: 1
|
||||
- Id: 8018
|
||||
|
||||
@@ -2600,13 +2600,17 @@ Body:
|
||||
DurationLookup: HLIF_AVOID
|
||||
CalcFlags:
|
||||
Speed: true
|
||||
Flags:
|
||||
NoSave: true
|
||||
RemoveFromHomOnMapWarp: true
|
||||
- Status: Change
|
||||
DurationLookup: HLIF_CHANGE
|
||||
CalcFlags:
|
||||
Vit: true
|
||||
Int: true
|
||||
Flags:
|
||||
RemoveOnChangeMap: true
|
||||
NoSave: true
|
||||
RemoveFromHomOnMapWarp: true
|
||||
Fail:
|
||||
Change: true
|
||||
- Status: Bloodlust
|
||||
|
||||
@@ -118,7 +118,23 @@ is disabled in '/conf/battle/items.conf'.
|
||||
*nomvploot
|
||||
|
||||
Disables normal monsters and MVPs from dropping items on a map. Looted items will always drop.
|
||||
'noloot' is the same as 'nomobloot' and 'nomvploot' combined.
|
||||
'nomobloot' prevents monsters and MVPs from dropping items from the 'Drops' table.
|
||||
'nomvploot' prevents MVPs from giving MVP prize items from the 'MvpDrops' table.
|
||||
'noloot' is the same as 'nomobloot' and 'nomvploot' combined.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
*nolootnormalmob
|
||||
|
||||
Disables normal monsters type (only) from dropping items on a map. Looted items will always drop.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
*no_npc_selfdestruction_on_all
|
||||
|
||||
A quick mapflag to change the behaviour of the NPC_SELFDESTRUCTION skill.
|
||||
When defined, the skill always and only hits enemy type instead of all units.
|
||||
|
||||
|
||||
---------------------------------------
|
||||
|
||||
@@ -474,3 +490,9 @@ Hides monster's HP bar on a map.
|
||||
Ignores config value of 'monster_hp_bars_info'.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
*specialpopup <popup ID>
|
||||
|
||||
Displays a special popup when a player enters the map. See script command "specialpopup" for details on different popup types.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
@@ -6124,11 +6124,12 @@ will always return 0.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
*skilleffect <skill id>,<number>;
|
||||
*skilleffect "<skill name>",<number>;
|
||||
*skilleffect <skill id>,<number>{,<game ID>};
|
||||
*skilleffect "<skill name>",<number>{,<game ID>};
|
||||
|
||||
This command displays visual and aural effects of given skill on currently
|
||||
attached character. The number parameter is for skill whose visual effect
|
||||
attached character or, when defined, on any unit with the given ID.
|
||||
The number parameter is for skill whose visual effect
|
||||
involves displaying of a number (healing or damaging). Note, that this command
|
||||
will not actually use the skill, it is intended for scripts, which simulate
|
||||
skill usage by the NPC, such as buffs, by setting appropriate status and
|
||||
@@ -8508,6 +8509,15 @@ Opens the tip box UI for the attached player or the given character ID.
|
||||
|
||||
This command requires packet version 2017-11-22 or newer.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
*specialpopup(<popup ID>);
|
||||
|
||||
Open popup and/or show text by ID from list defined in the client spopup.lub file.
|
||||
Popup and text is only visible if the player warped from one map to another map.
|
||||
|
||||
This command requires packet version 2022-10-05 or newer.
|
||||
|
||||
---------------------------------------
|
||||
\\
|
||||
6,1.- Unit-related commands
|
||||
@@ -10681,6 +10691,7 @@ current invoking character.
|
||||
*addhomintimacy <amount>{,<char_id>};
|
||||
|
||||
Increase or decrease a homunculus' intimacy value by the given <amount>. 100000 is full loyalty.
|
||||
Fails silently when no players are attached or if the player has no homunculus.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
|
||||
@@ -254,6 +254,9 @@ Flags: Various status flags for specific status change events.
|
||||
SuperNoviceAngel - Status that is given from Super Novice Angel.
|
||||
TaekwonAngel - Status that is given from Taekwon Angel.
|
||||
|
||||
RemoveFromHomOnWarp - Removes the status from the Homunculus when teleporting or warping to another map.
|
||||
RemoveFromHomOnMapWarp - Removes the status from the Homunculus when warping to another map.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
MinDuration: Minimum duration, in milliseconds, after reduction calculation for status resistance.
|
||||
|
||||
@@ -1001,13 +1001,16 @@ SC_FLING ()
|
||||
desc:
|
||||
val1:
|
||||
|
||||
SC_AVOID ()
|
||||
desc:
|
||||
val1:
|
||||
SC_AVOID (EFST_HLIF_AVOID)
|
||||
desc: Increase walkspeed for Players and Homunculus
|
||||
val1: Skill Level
|
||||
val2: Walkspeed increase (10 * val1 for Players, 40 * val1 for Homunculus)
|
||||
|
||||
SC_CHANGE ()
|
||||
desc:
|
||||
val1:
|
||||
SC_CHANGE (EFST_HLIF_CHANGE)
|
||||
desc: Increase some Homunculus' statuses (VIT, INT); Uses MATK for damage calculation; Sets Homunculus' HP and SP to 10 on expiration; On Pre-Renewal, sets Homunculus' HP and SP to 100% on cast
|
||||
val1: Skill Level
|
||||
val2: VIT increase (20 * val1)
|
||||
val3: INT increase (30 * val1)
|
||||
|
||||
SC_BLOODLUST ()
|
||||
desc:
|
||||
|
||||
@@ -1,26 +1,19 @@
|
||||
//===== rAthena Script =======================================
|
||||
//===== rAthena Script =======================================
|
||||
//= Brasilis Town
|
||||
//===== By: ==================================================
|
||||
//= L0ne_W0lf
|
||||
//===== Current Version: =====================================
|
||||
//= 1.4
|
||||
//===== Compatible With: =====================================
|
||||
//= rAthena Project
|
||||
//===== Description: =========================================
|
||||
//===== Description: =========================================
|
||||
//= [Official Conversion]
|
||||
//= Brasilis Town Script
|
||||
//===== Additional Comments: =================================
|
||||
//= 1.0 First version. Transportation and Basic NPCs.
|
||||
//===== Changelog: ===========================================
|
||||
//= 1.0 First version. Transportation and Basic NPCs. [L0ne_W0lf]
|
||||
//= 1.1 Fixed Zeny not being removed for payment. [Kisuka]
|
||||
//= 1.2 Updated dialog, added Ice Cream Maker. [L0ne_W0lf]
|
||||
//= 1.3 Moved Alberta NPC to pre-re/re paths. [Euphy]
|
||||
//= 1.4 Added VIP features. [Euphy]
|
||||
//============================================================
|
||||
//============================================================
|
||||
|
||||
// Brasilis Transportation :: brasilis_trans
|
||||
//============================================================
|
||||
/* Pre-Renewal coordinates: alberta,247,115,3 */
|
||||
alberta,246,82,3 script Crewman#bra2 100,{
|
||||
- script ::Crewman_bra2 -1,{
|
||||
mes "[Crewman]";
|
||||
mes "Hey, have you heard of a place called Brasilis?";
|
||||
mes "It's a tropical city that's hot like the desert but also rainy. It is a very mysterious place.";
|
||||
@@ -110,7 +110,18 @@ function Pick {
|
||||
Go(.@map$,.@x,.@y);
|
||||
}
|
||||
function Restrict {
|
||||
if ((getarg(0) == "RE" && !checkre(0)) || (getarg(0) == "Pre-RE" && checkre(0))) {
|
||||
.@type$ = getarg(0);
|
||||
|
||||
if (.@type$ == "Brasilis") {
|
||||
// If the official warper to Brasilis is enabled, meaning is either
|
||||
// Renewal mode or Pre-renewal Brasilis is enabled, we lift the restriction
|
||||
if (getnpcid(0, "Crewman_bra2"))
|
||||
return;
|
||||
// Otherwise we apply the renewal restriction
|
||||
.@type$ = "RE";
|
||||
}
|
||||
|
||||
if ((.@type$ == "RE" && !checkre(0)) || (.@type$ == "Pre-RE" && checkre(0))) {
|
||||
if (getarg(1,0)) {
|
||||
set @warp_block,0;
|
||||
for (set .@i,1; .@i<getargcount(); set .@i,.@i+1)
|
||||
@@ -141,7 +152,7 @@ T2: Go("alberta",28,234);
|
||||
T3: Go("aldebaran",140,131);
|
||||
T4: Go("amatsu",198,84);
|
||||
T5: Go("ayothaya",208,166);
|
||||
T6: Restrict("RE");
|
||||
T6: Restrict("Brasilis");
|
||||
Go("brasilis",196,217);
|
||||
T7: Go("comodo",209,143);
|
||||
T8: Restrict("RE");
|
||||
@@ -218,7 +229,7 @@ F2: setarray @c[2],173,134,212,150;
|
||||
F3: Restrict("RE");
|
||||
setarray @c[2],193,220,220,187;
|
||||
Disp("Bifrost Field",1,2); Pick("bif_fild");
|
||||
F4: Restrict("RE");
|
||||
F4: Restrict("Brasilis");
|
||||
setarray @c[2],74,32;
|
||||
Disp("Brasilis Field",1,1); Pick("bra_fild");
|
||||
F5: Restrict("Pre-RE",5);
|
||||
@@ -343,7 +354,7 @@ D7: Restrict("RE");
|
||||
D8: Restrict("RE",4,5);
|
||||
setarray @c[2],150,288,150,18,140,134,244,52,100,202;
|
||||
Disp("Bio Lab 1:Bio Lab 2:Bio Lab 3:Bio Lab 4:Tomb of the Fallen"); Pick("","lhz_dun01","lhz_dun02","lhz_dun03","lhz_dun04","lhz_dun_n");
|
||||
D9: Restrict("RE");
|
||||
D9: Restrict("Brasilis");
|
||||
setarray @c[2],87,47,262,262;
|
||||
Disp("Brasilis Dungeon",1,2); Pick("bra_dun");
|
||||
D10: Restrict("RE",6);
|
||||
|
||||
@@ -687,3 +687,12 @@ alb2trea,59,69,5 script Kafra Employee::kaf_alb2trea 117,{
|
||||
savepoint "alb2trea",92,64,1,1;
|
||||
callfunc "F_KafEnd",0,1,"at Sunken Ship";
|
||||
}
|
||||
|
||||
// Brasilis
|
||||
//============================================================
|
||||
brasilis,197,221,4 script Kafra Employee::kaf_bra 4_F_KAFRA1,{
|
||||
cutin "kafra_01",2;
|
||||
callfunc "F_Kafra",0,3,0,80,700;
|
||||
savepoint "brasilis",195,259,1,1;
|
||||
callfunc "F_KafEnd",0,1,"in the city of Brasilis";
|
||||
}
|
||||
|
||||
@@ -298,6 +298,12 @@ man_fild02 mapflag nightenabled
|
||||
splendide mapflag nightenabled
|
||||
spl_fild01 mapflag nightenabled
|
||||
|
||||
//============================================================
|
||||
// Brasilis
|
||||
//============================================================
|
||||
brasilis mapflag nightenabled
|
||||
bra_fild01 mapflag nightenabled
|
||||
|
||||
//============================================================
|
||||
// Events
|
||||
//============================================================
|
||||
|
||||
@@ -371,6 +371,12 @@ splendide mapflag nobranch
|
||||
spl_in01 mapflag nobranch
|
||||
spl_in02 mapflag nobranch
|
||||
|
||||
//============================================================
|
||||
// Brasilis
|
||||
//============================================================
|
||||
brasilis mapflag nobranch
|
||||
bra_in01 mapflag nobranch
|
||||
|
||||
//============================================================
|
||||
// RWC
|
||||
//============================================================
|
||||
|
||||
@@ -731,6 +731,13 @@ spl_fild01 mapflag nomemo
|
||||
spl_in01 mapflag nomemo
|
||||
spl_in02 mapflag nomemo
|
||||
|
||||
//============================================================
|
||||
// Brasilis
|
||||
//============================================================
|
||||
bra_in01 mapflag nomemo
|
||||
bra_dun01 mapflag nomemo
|
||||
bra_dun02 mapflag nomemo
|
||||
|
||||
//evt_zombie mapflag nomemo
|
||||
|
||||
//============================================================
|
||||
|
||||
@@ -25,6 +25,8 @@ ama_in01 mapflag nopenalty
|
||||
ama_in02 mapflag nopenalty
|
||||
ama_test mapflag nopenalty
|
||||
arena_room mapflag nopenalty
|
||||
brasilis mapflag nopenalty
|
||||
bra_in01 mapflag nopenalty
|
||||
comodo mapflag nopenalty
|
||||
cmd_in01 mapflag nopenalty
|
||||
cmd_in02 mapflag nopenalty
|
||||
|
||||
@@ -58,6 +58,8 @@ aldebaran mapflag pvp off
|
||||
ama_in01 mapflag pvp off
|
||||
ama_in02 mapflag pvp off
|
||||
amatsu mapflag pvp off
|
||||
brasilis mapflag pvp off
|
||||
bra_in01 mapflag pvp off
|
||||
cmd_in01 mapflag pvp off
|
||||
cmd_in02 mapflag pvp off
|
||||
comodo mapflag pvp off
|
||||
|
||||
@@ -426,7 +426,7 @@ bat_a01 mapflag noteleport
|
||||
bat_a02 mapflag noteleport
|
||||
|
||||
//============================================================
|
||||
// Episode 13
|
||||
// Episode 13.2
|
||||
//============================================================
|
||||
mid_campin mapflag noteleport
|
||||
moc_fild22b mapflag noteleport
|
||||
@@ -438,6 +438,11 @@ man_in01 mapflag noteleport
|
||||
spl_in01 mapflag noteleport
|
||||
spl_in02 mapflag noteleport
|
||||
|
||||
//============================================================
|
||||
// Brasilis
|
||||
//============================================================
|
||||
bra_in01 mapflag noteleport
|
||||
|
||||
//============================================================
|
||||
// Orc's Memory
|
||||
//============================================================
|
||||
|
||||
@@ -14,6 +14,7 @@ alberta mapflag reset
|
||||
aldebaran mapflag reset
|
||||
amatsu mapflag reset
|
||||
ayothaya mapflag reset
|
||||
brasilis mapflag reset
|
||||
comodo mapflag reset
|
||||
einbroch mapflag reset
|
||||
einbech mapflag reset
|
||||
|
||||
@@ -28,3 +28,4 @@ louyang mapflag town
|
||||
hugel mapflag town
|
||||
rachel mapflag town
|
||||
veins mapflag town
|
||||
brasilis mapflag town
|
||||
|
||||
@@ -203,6 +203,47 @@ ve_in,157,219,5 script Inn Master#Receptionist 709,{
|
||||
}
|
||||
}
|
||||
|
||||
//======================== Brasilis =================================
|
||||
bra_in01,27,24,3 script Hotel Keeper#bra1 478,{
|
||||
mes "[Hotel Keeper]";
|
||||
mes "Welcome to the beautiful Brasilis Hotel.";
|
||||
next;
|
||||
switch(select("Save:Rest -5000 zeny:Cancel")) {
|
||||
case 1:
|
||||
mes "[Hotel Keeper]";
|
||||
mes "Do you want to save here at the Brasilis Hotel?";
|
||||
next;
|
||||
switch(select("No thank you.:Absolutely.")) {
|
||||
case 1:
|
||||
mes "[Hotel Keeper]";
|
||||
mes "Ok then, enjoy your stay.";
|
||||
close;
|
||||
case 2:
|
||||
mes "[Hotel Keeper]";
|
||||
mes "Your respawn has been saved here at the hotel. I hope that you enjoy your stay here in Brasilis.";
|
||||
savepoint "bra_in01",144,69,1,1;
|
||||
close;
|
||||
}
|
||||
end;
|
||||
case 2:
|
||||
if (Zeny > 4999) {
|
||||
mes "[Hotel Keeper]";
|
||||
mes "I will show you a great room.";
|
||||
close2;
|
||||
if (Zeny < 5000)
|
||||
end;
|
||||
Zeny -= 5000;
|
||||
percentheal 100,100;
|
||||
warp "bra_in01",144,69;
|
||||
end;
|
||||
}
|
||||
mes "[Hotel Keeper]";
|
||||
mes "I'm sorry, but the service charge is 5,000 zeny per night.";
|
||||
case 3:
|
||||
close;
|
||||
}
|
||||
}
|
||||
|
||||
//======================= Inn Function ==============================
|
||||
function script F_InnMaid {
|
||||
.@npc_name$ = getarg(0);
|
||||
|
||||
20
npc/pre-re/cities/brasilis.txt
Normal file
20
npc/pre-re/cities/brasilis.txt
Normal file
@@ -0,0 +1,20 @@
|
||||
//===== rAthena Script =======================================
|
||||
//= Brasilis Town Pre-Renewal
|
||||
//===== Description: =========================================
|
||||
//= [Official Conversion based on bRO & jRO servers]
|
||||
//= Brasilis town NPCs.
|
||||
//
|
||||
// Note:
|
||||
// - Brasilis was introduced in Pre-Renewal only for bRO and
|
||||
// jRO official servers with differences in monster stats,
|
||||
// spawns and quests.
|
||||
// It was added in Renewal for every other official server.
|
||||
// Since we follow kRO this is disabled by default.
|
||||
// You can enable it on npc/pre-re/scripts_athena.conf
|
||||
//===== Changelog: ===========================================
|
||||
//= 1.0 First Version [Daegaladh]
|
||||
//============================================================
|
||||
|
||||
// Brasilis Transportation :: brasilis_trans
|
||||
//============================================================
|
||||
alberta,247,115,3 duplicate(Crewman_bra2) Crewman#bra2 100
|
||||
77
npc/pre-re/guides/guides_brasilis.txt
Normal file
77
npc/pre-re/guides/guides_brasilis.txt
Normal file
@@ -0,0 +1,77 @@
|
||||
//===== rAthena Script =======================================
|
||||
//= Brasilis Guide
|
||||
//===== Description: =========================================
|
||||
//= [Official Conversion based on bRO & jRO servers]
|
||||
//= Guide for the city of Brasilis.
|
||||
//
|
||||
// Note:
|
||||
// - Brasilis was introduced in Pre-Renewal only for bRO and
|
||||
// jRO official servers with differences in monster stats,
|
||||
// spawns and quests.
|
||||
// It was added in Renewal for every other official server.
|
||||
// Since we follow kRO this is disabled by default.
|
||||
// You can enable it on npc/pre-re/scripts_athena.conf
|
||||
//===== Changelog: ===========================================
|
||||
//= 1.0 First Version [Daegaladh]
|
||||
//============================================================
|
||||
|
||||
brasilis,219,97,3 script Brasilis Guide 478,{
|
||||
mes "[Brasilis Guide]";
|
||||
mes "Welcome to ^8B4513Brasilis^000000, a country as passionate as the sun.";
|
||||
mes "If you have any questions, please ask me.";
|
||||
next;
|
||||
switch(select("Ask about locations:Remove Marks from Mini-Map:Cancel")) {
|
||||
case 1:
|
||||
mes "[Brasilis Guide]";
|
||||
mes "Where can I guide you?";
|
||||
next;
|
||||
switch(select("[ Hotel ]:[ Jungle Cable ]:[ Art Museum ]:[ Market ]:[ Verass Monument ]")) {
|
||||
case 1:
|
||||
mes "[Brasilis Guide]";
|
||||
mes "The Brasilis Hotel is located just above, ^FF3355+^000000.";
|
||||
mes "Is there anything else I can do for you?";
|
||||
viewpoint 1,274,151,2,0xFF3355;
|
||||
close;
|
||||
case 2:
|
||||
mes "[Brasilis Guide]";
|
||||
mes "Do you want to go through the rough jungle? You can take a ";
|
||||
mes "Jungle Cable here ^CE6300+^000000.";
|
||||
mes "Is there anything else I can do for you?";
|
||||
viewpoint 1,308,335,3,0xCE6300;
|
||||
close;
|
||||
case 3:
|
||||
mes "[Brasilis Guide]";
|
||||
mes "The pride of Brasilis, the world scale Art Museum is at ^A5BAAD+^000000.";
|
||||
mes "Is there anything else I can do for you?";
|
||||
viewpoint 1,137,167,4,0x00FF00;
|
||||
close;
|
||||
case 4:
|
||||
mes "[Brasilis Guide]";
|
||||
mes "You can buy items for hunting at the Market here ^55FF33+^000000.";
|
||||
mes "Is there anything else I can do for you?";
|
||||
viewpoint 1,254,248,5,0x55FF33;
|
||||
close;
|
||||
case 5:
|
||||
mes "[Brasilis Guide]";
|
||||
mes "The iconic monument of Brasilis, the Verass Monument stands at ^3355FF+^000000.";
|
||||
mes "Is there anything else I can do for you?";
|
||||
viewpoint 1,195,235,6,0x3355FF;
|
||||
close;
|
||||
}
|
||||
end;
|
||||
case 2:
|
||||
mes "[Brasilis Guide]";
|
||||
mes "I'll remove all marks from your mini-map.";
|
||||
mes "Is there anything else I can do for you?";
|
||||
viewpoint 0,274,151,2,0x00FF00;
|
||||
viewpoint 0,308,335,3,0x00FF00;
|
||||
viewpoint 0,137,167,4,0x00FF00;
|
||||
viewpoint 0,254,248,5,0x00FF00;
|
||||
viewpoint 0,195,235,6,0x00FF00;
|
||||
close;
|
||||
case 3:
|
||||
mes "[Brasilis Guide]";
|
||||
mes "Wandering on your own is always the best way to explore. Anyway, take care.";
|
||||
close;
|
||||
}
|
||||
}
|
||||
@@ -136,7 +136,7 @@ prt_in,243,168,4 script Jovovich 91,{
|
||||
mes "* Fees and Information *";
|
||||
mes "- 1 Dyestuffs item of the color of hair you want.";
|
||||
mes "- 1000 zeny fee.";
|
||||
break;
|
||||
close;
|
||||
|
||||
case 3:
|
||||
mes "[Hairdresser Jovovich]";
|
||||
|
||||
64
npc/pre-re/mobs/dungeons/bra_dun.txt
Normal file
64
npc/pre-re/mobs/dungeons/bra_dun.txt
Normal file
@@ -0,0 +1,64 @@
|
||||
//===== rAthena Script =======================================
|
||||
//= Brasilis Dungeon Monster Spawn Script
|
||||
//===== Description: =========================================
|
||||
//= [Official Conversion based on bRO & jRO servers]
|
||||
//
|
||||
// Note:
|
||||
// - Brasilis was introduced in Pre-Renewal only for bRO and
|
||||
// jRO official servers with differences in monster stats,
|
||||
// spawns and quests.
|
||||
// It was added in Renewal for every other official server.
|
||||
// Since we follow kRO this is disabled by default.
|
||||
// You can enable it on npc/pre-re/scripts_athena.conf
|
||||
//===== Changelog: ===========================================
|
||||
//= 1.0 First Version [Playtester]
|
||||
//============================================================
|
||||
|
||||
//bRO Pre-Renewal spawns
|
||||
|
||||
//==================================================
|
||||
// bra_dun01 - Behind the Waterfall
|
||||
//==================================================
|
||||
bra_dun01 monster Iara 2069,60,5000
|
||||
bra_dun01 monster Piranha 2070,100,5000
|
||||
bra_dun01 monster Hydra 1068,10,5000
|
||||
bra_dun01 monster Plankton 1161,10,5000
|
||||
bra_dun01 monster Marina 1141,10,5000
|
||||
bra_dun01 monster Black Mushroom 1084,10,180000,90000
|
||||
|
||||
//==================================================
|
||||
// bra_dun02 - Behind the Waterfall
|
||||
//==================================================
|
||||
bra_dun02 monster Iara 2069,120,5000
|
||||
bra_dun02 monster Piranha 2070,80,5000
|
||||
bra_dun02 monster Hydra 1068,20,5000
|
||||
bra_dun02 monster Plankton 1161,20,5000
|
||||
bra_dun02 monster Marina 1141,10,5000
|
||||
bra_dun02 monster Black Mushroom 1084,10,180000,90000
|
||||
bra_dun02 boss_monster Boitata 2068,1,7200000,600000,1
|
||||
|
||||
|
||||
//jRO Pre-Renewal spawns
|
||||
|
||||
//==================================================
|
||||
// bra_dun01 - Behind the Waterfall
|
||||
//==================================================
|
||||
//bra_dun01 monster Kukre 1070,40,5000
|
||||
//bra_dun01 monster Hydra 1068,60,5000
|
||||
//bra_dun01 monster Marina 1141,5,5000
|
||||
//bra_dun01 monster Thara Frog 1034,40,5000
|
||||
//bra_dun01 monster Piranha 2070,50,5000
|
||||
//bra_dun01 monster Iara 2069,30,5000
|
||||
//bra_dun01 monster Headless Mule 2071,10,5000
|
||||
//bra_dun01 monster Black Mushroom 1084,5,120000,60000
|
||||
|
||||
//==================================================
|
||||
// bra_dun02 - Behind the Waterfall
|
||||
//==================================================
|
||||
//bra_dun02 monster Hydra 1068,20,5000
|
||||
//bra_dun02 monster Piranha 2070,60,5000
|
||||
//bra_dun02 monster Iara 2069,40,5000
|
||||
//bra_dun02 monster Headless Mule 2071,40,5000
|
||||
//bra_dun02 monster Shining Plant 1083,1,1800000,900000
|
||||
//bra_dun02 monster Red Mushroom 1084,5,120000,60000
|
||||
//bra_dun02 boss_monster Boitata 2068,1,7200000,600000,1
|
||||
48
npc/pre-re/mobs/fields/brasilis.txt
Normal file
48
npc/pre-re/mobs/fields/brasilis.txt
Normal file
@@ -0,0 +1,48 @@
|
||||
//===== rAthena Script =======================================
|
||||
//= Brasilis Fields Monster Spawn Script
|
||||
//===== Description: =========================================
|
||||
//= [Official Conversion based on bRO & jRO servers]
|
||||
//
|
||||
// Note:
|
||||
// - Brasilis was introduced in Pre-Renewal only for bRO and
|
||||
// jRO official servers with differences in monster stats,
|
||||
// spawns and quests.
|
||||
// It was added in Renewal for every other official server.
|
||||
// Since we follow kRO this is disabled by default.
|
||||
// You can enable it on npc/pre-re/scripts_athena.conf
|
||||
//===== Changelog: ===========================================
|
||||
//= 1.0 First Version [Playtester]
|
||||
//============================================================
|
||||
|
||||
//==================================================
|
||||
// Brasilis, Strange Hydras
|
||||
//==================================================
|
||||
brasilis,283,88,6,6 monster Strange Hydra 2081,5,30000
|
||||
brasilis,284,104,6,6 monster Strange Hydra 2081,4,30000
|
||||
brasilis,215,80,6,6 monster Strange Hydra 2081,4,30000
|
||||
brasilis,96,50,8,8 monster Strange Hydra 2081,5,30000
|
||||
|
||||
//bRO Pre-Renewal spawns
|
||||
|
||||
//==================================================
|
||||
// bra_fild01 - Brasilis Field
|
||||
//==================================================
|
||||
bra_fild01 monster Headless Mule 2071,40,5000
|
||||
bra_fild01 monster Curupira 2074,80,5000
|
||||
bra_fild01 monster Dokebi 1110,20,5000
|
||||
bra_fild01 monster Jaguar 2072,10,5000
|
||||
bra_fild01 monster Savage 1166,20,5000
|
||||
bra_fild01 monster Toucan 2073,10,5000
|
||||
bra_fild01 monster Red Mushroom 1085,3,360000,180000
|
||||
|
||||
//jRO Pre-Renewal spawns
|
||||
|
||||
//==================================================
|
||||
// bra_fild01
|
||||
//==================================================
|
||||
//bra_fild01 monster Savage 1166,10,5000
|
||||
//bra_fild01 monster Dokebi 1110,20,5000
|
||||
//bra_fild01 monster Curupira 2074,50,5000
|
||||
//bra_fild01 monster Jaguar 2072,35,5000
|
||||
//bra_fild01 monster Toucan 2073,40,5000
|
||||
//bra_fild01 monster Red Mushroom 1085,5,120000,60000
|
||||
@@ -98,3 +98,34 @@ npc: npc/pre-re/quests/quests_nameless.txt
|
||||
npc: npc/pre-re/quests/quests_niflheim.txt
|
||||
npc: npc/pre-re/quests/the_sign_quest.txt
|
||||
npc: npc/pre-re/quests/quests_veins.txt
|
||||
|
||||
// - Disable Brasilis by default --------------------------------
|
||||
// DO NOT COMMENT!!!
|
||||
// Instead, follow the instructions below.
|
||||
// --------------------------------------------------------------
|
||||
delnpc: npc/cities/brasilis.txt
|
||||
delnpc: npc/quests/quests_brasilis.txt
|
||||
delnpc: npc/warps/cities/brasilis.txt
|
||||
delnpc: npc/warps/dungeons/bra_dun.txt
|
||||
delnpc: npc/warps/fields/bra_fild.txt
|
||||
|
||||
// -------------------- Pre-Renewal Brasilis --------------------
|
||||
// Brasilis was introduced in Pre-Renewal only for bRO and
|
||||
// jRO official servers with differences in monster stats,
|
||||
// spawns and quests.
|
||||
// It was added in Renewal for every other official server.
|
||||
// Since we follow kRO this is disabled by default.
|
||||
//
|
||||
// Uncomment the following NPC scripts to enable bRO/jRO's
|
||||
// Pre-Renewal version of Brasilis.
|
||||
// You also need to uncomment the data from file
|
||||
// mob_summon.yml in /db/import/ folder
|
||||
//npc: npc/cities/brasilis.txt
|
||||
//npc: npc/quests/quests_brasilis.txt
|
||||
//npc: npc/warps/cities/brasilis.txt
|
||||
//npc: npc/warps/dungeons/bra_dun.txt
|
||||
//npc: npc/warps/fields/bra_fild.txt
|
||||
//npc: npc/pre-re/cities/brasilis.txt
|
||||
//npc: npc/pre-re/guides/guides_brasilis.txt
|
||||
//npc: npc/pre-re/mobs/dungeons/bra_dun.txt
|
||||
//npc: npc/pre-re/mobs/fields/brasilis.txt
|
||||
|
||||
@@ -1,12 +1,6 @@
|
||||
//===== rAthena Script =======================================
|
||||
//= Brasilis Quests
|
||||
//===== By ===================================================
|
||||
//= L0ne_W0lf
|
||||
//===== Version ==============================================
|
||||
//= 1.3
|
||||
//===== Compatible With ======================================
|
||||
//= rAthena Project
|
||||
//===== Description ==========================================
|
||||
//===== Description: =========================================
|
||||
//= [Official Conversion]
|
||||
//= Lost Puppies (Repeatable, 24 hours.)
|
||||
//= Suspicious Beach (Repeatable, 24 hours. iRO/cRO version.)
|
||||
@@ -14,13 +8,14 @@
|
||||
//= Brasilis Water Lily Quest
|
||||
//= Brasilis Dungeon Access Quest
|
||||
//= Iara (Buff reward. Repeatable, 24 hours.)
|
||||
//===== Comments =============================================
|
||||
//= 1.0 First version.
|
||||
//= 1.1 Hydra Ball (12408)
|
||||
//===== Changelog: ===========================================
|
||||
//= 1.0 First version. [L0ne_W0lf]
|
||||
//= 1.1 Hydra Ball (12408). [og2]
|
||||
//= 1.2 Optimization. [Euphy]
|
||||
//= 1.2a Added 'consumeitem' command. [Euphy]
|
||||
//= 1.3 Added VIP features and fixed some EXP values. [Euphy]
|
||||
//= 1.3a Clean-up. [Capuche]
|
||||
//= 1.4 Added pre-renewal differences [Daegaladh]
|
||||
//============================================================
|
||||
|
||||
// Lost Puppies :: dogdog.sc
|
||||
@@ -59,10 +54,12 @@ brasilis,297,307,5 script Angelo#br 1_M_04,{
|
||||
erasequest 9031;
|
||||
setquest 9032;
|
||||
specialeffect2 EF_ASSUMPTIO;
|
||||
consumeitem 607; //Yggdrasilberry
|
||||
.@rand = rand(1,10);
|
||||
if (.@rand > 4 && .@rand < 9) getitem 504,2; //White_Potion
|
||||
else if (.@rand > 8) getitem 608,1; //Seed_Of_Yggdrasil
|
||||
if (checkre(0)) {
|
||||
consumeitem 607; //Yggdrasilberry
|
||||
.@rand = rand(1,10);
|
||||
if (.@rand > 4 && .@rand < 9) getitem 504,2; //White_Potion
|
||||
else if (.@rand > 8) getitem 608,1; //Seed_Of_Yggdrasil
|
||||
}
|
||||
close;
|
||||
}
|
||||
mes "[Angelo]";
|
||||
@@ -229,11 +226,15 @@ brasilis,192,133,6 script Lucia#brasilis 4_F_BRZ_WOMAN,{
|
||||
//recall_completequest 9029;
|
||||
if (.@nQState2 > -1) erasequest 9029;
|
||||
setquest 9029;
|
||||
consumeitem 607; //Yggdrasilberry
|
||||
if (checkre(0))
|
||||
consumeitem 607; //Yggdrasilberry
|
||||
consumeitem 12070; //Luk_Dish05
|
||||
consumeitem 12055; //Vit_Dish05
|
||||
consumeitem 12065; //Dex_Dish05
|
||||
getitem 11502,3; //Light_Blue_Pot
|
||||
if (checkre(0))
|
||||
getitem 11502,3; //Light_Blue_Pot
|
||||
else
|
||||
getitem 505,5; //Blue_Potion
|
||||
close;
|
||||
}
|
||||
else {
|
||||
@@ -410,10 +411,12 @@ brasilis,187,162,5 script Candy Maker 4_M_BRZ_MAN1,{
|
||||
brazil_gua = 11;
|
||||
completequest 2200;
|
||||
getitem 12414,1; //Guarana_Candy
|
||||
if (VIP_SCRIPT && vip_status(VIP_STATUS_ACTIVE))
|
||||
getexp 105000,15000;
|
||||
else
|
||||
getexp 70000,10000;
|
||||
if (checkre(0)) {
|
||||
if (VIP_SCRIPT && vip_status(VIP_STATUS_ACTIVE))
|
||||
getexp 105000,15000;
|
||||
else
|
||||
getexp 70000,10000;
|
||||
}
|
||||
close;
|
||||
}
|
||||
else if (brazil_gua == 11) {
|
||||
@@ -1030,9 +1033,9 @@ brasilis,203,286,3 script Botanist Karmen#bra 4_F_HUWOMAN,{
|
||||
brazil_regia = 10;
|
||||
completequest 2207;
|
||||
if (VIP_SCRIPT && vip_status(VIP_STATUS_ACTIVE))
|
||||
getexp 75000,15000;
|
||||
getexp 75000, checkre(0)?15000:0;
|
||||
else
|
||||
getexp 50000,10000;
|
||||
getexp 50000, checkre(0)?10000:0;
|
||||
close;
|
||||
}
|
||||
else {
|
||||
@@ -2855,9 +2858,13 @@ bra_dun02,157,74,5 script Iara#nk 4_F_BRZ_WOMAN,2,2,{
|
||||
mes "But... I think that the curse has been with me too long.";
|
||||
mes "Get away from me quickly.";
|
||||
delitem 11517,1; //Puri_Potion
|
||||
percentheal 100,100;
|
||||
sc_start SC_INCFLEE,3600000,20;
|
||||
sc_start SC_INCCRI,3600000,10;
|
||||
if (checkre(0)) {
|
||||
percentheal 100,100;
|
||||
sc_start SC_INCFLEE,3600000,20;
|
||||
sc_start SC_INCCRI,3600000,10;
|
||||
}
|
||||
else
|
||||
sc_start SC_INCCRI,3600000,7;
|
||||
consumeitem 12043; //Str_Dish03
|
||||
consumeitem 12063; //Dex_Dish03
|
||||
consumeitem 12058; //Agi_Dish03
|
||||
@@ -21,6 +21,10 @@ alberta,246,74,3 duplicate(Sea_Captain_amatsu) Sea Captain#ama1 709
|
||||
//============================================================
|
||||
alberta,246,29,3 duplicate(Aibakthing_ayothaya) Aibakthing#ayo 843
|
||||
|
||||
// cities/brasilis.txt
|
||||
//============================================================
|
||||
alberta,246,82,3 duplicate(Crewman_bra2) Crewman#bra2 100
|
||||
|
||||
// cities/gonryun.txt
|
||||
//============================================================
|
||||
alberta,246,62,3 duplicate(Kunlun_Envoy_gonryun) Kunlun Envoy#gon 776
|
||||
|
||||
@@ -1,19 +1,13 @@
|
||||
//===== rAthena Script =======================================
|
||||
//===== rAthena Script =======================================
|
||||
//= Brasilis Guide
|
||||
//===== By: ==================================================
|
||||
//= L0ne_W0lf
|
||||
//===== Current Version: =====================================
|
||||
//= 1.2
|
||||
//===== Compatible With: =====================================
|
||||
//= rAthena Project
|
||||
//===== Description: =========================================
|
||||
//= [Official Conversion]
|
||||
//===== Description: =========================================
|
||||
//= [Official Conversion based on bRO & jRO servers]
|
||||
//= Guide for the city of Brasilis.
|
||||
//===== Additional Comments: =================================
|
||||
//= 1.0 First Version, Renewal guide.
|
||||
//= 1.1 Added a missing close.
|
||||
//===== Changelog: ===========================================
|
||||
//= 1.0 First Version, Renewal guide. [L0ne_W0lf]
|
||||
//= 1.1 Added a missing close. [L0ne_W0lf]
|
||||
//= 1.2 Navigation system update. [Euphy]
|
||||
//============================================================
|
||||
//============================================================
|
||||
|
||||
brasilis,219,97,3 script Brasilis Guide 478,{
|
||||
mes "[Brasilis Guide]";
|
||||
@@ -59,6 +53,7 @@ brasilis,219,97,3 script Brasilis Guide 478,{
|
||||
viewpoint 1,195,235,6,0x3355FF;
|
||||
close;
|
||||
}
|
||||
end;
|
||||
case 2:
|
||||
mes "[Brasilis Guide]";
|
||||
mes "I'll remove all marks from your mini-map.";
|
||||
|
||||
1538
npc/re/instances/AirshipDestruction.txt
Normal file
1538
npc/re/instances/AirshipDestruction.txt
Normal file
File diff suppressed because it is too large
Load Diff
489
npc/re/instances/BaggotLaboratory.txt
Normal file
489
npc/re/instances/BaggotLaboratory.txt
Normal file
@@ -0,0 +1,489 @@
|
||||
//===== rAthena Script =======================================
|
||||
//= 2 Instances:
|
||||
// - Bagot Laboratory
|
||||
// - Simulation Battle
|
||||
//===== Description: =========================================
|
||||
//- [Walkthrough conversion]
|
||||
//- Instance of episode 19 (same map).
|
||||
//===== Changelogs: ==========================================
|
||||
//= 1.0 First version. [Atemo]
|
||||
//============================================================
|
||||
|
||||
// Bagot Laboratory
|
||||
// ------------------------------
|
||||
|
||||
// Main Quest: Step 58
|
||||
jor_dun03,57,63,3 script(CLOAKED) Juncea#ep19re2 4_EP19_JUNCEA,{
|
||||
if (ep19_main == 49) { // Step 58
|
||||
cutin "ep19_juncea04.png",2;
|
||||
mes "[Juncea]";
|
||||
mes "Oh, I want to talk to you alone. Are you okay?";
|
||||
next;
|
||||
cutin "",255;
|
||||
mes "- ^0000ffLet's have a party of 1 and listen to Juncea's story.^000000 -";
|
||||
erasequest 16659;
|
||||
setquest 16660;
|
||||
ep19_main = 50;
|
||||
close;
|
||||
}
|
||||
if (ep19_main == 50) {
|
||||
if (is_party_leader() == false) {
|
||||
mes "[Juncea]";
|
||||
mes "I can only open the secret passage for party leaders. Please have your party leader talk to me.";
|
||||
close;
|
||||
}
|
||||
.@md_name$ = "Bagot Laboratory";
|
||||
switch( select( "Prepare to enter " + .@md_name$, "Enter " + .@md_name$ ) ) {
|
||||
case 1:
|
||||
if (is_party_leader() == false) {
|
||||
mes "[Juncea]";
|
||||
mes "I can only open the secret passage for party leaders. Please have your party leader talk to me.";
|
||||
close;
|
||||
}
|
||||
mes "- ^0000ffPreparation for entry has started. After you are ready, press the button to enter " + .@md_name$ + ".^000000 -";
|
||||
instance_create(.@md_name$);
|
||||
close;
|
||||
case 2:
|
||||
if (is_party_leader() == false) {
|
||||
mes "[Juncea]";
|
||||
mes "I can only open the secret passage for party leaders. Please have your party leader talk to me.";
|
||||
close;
|
||||
}
|
||||
switch( instance_enter(.@md_name$) ) {
|
||||
case IE_OTHER:
|
||||
mes "An unknown error occurred.";
|
||||
close;
|
||||
case IE_NOINSTANCE:
|
||||
mes "- ^0000ffMemorial dungeon not created. Please check again.^000000 -";
|
||||
close;
|
||||
case IE_NOMEMBER:
|
||||
mes "[Juncea]";
|
||||
mes "^ff0000Only a member of the party can enter the Memorial Dungeon.^000000";
|
||||
close;
|
||||
case IE_OK:
|
||||
// warp "1@jorlab",57,45;
|
||||
end;
|
||||
}
|
||||
end;
|
||||
}
|
||||
end;
|
||||
}
|
||||
end;
|
||||
|
||||
OnInit:
|
||||
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(16659) == 1" );
|
||||
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(16660) == 1" );
|
||||
end;
|
||||
}
|
||||
|
||||
|
||||
1@jorlab,1,1,0 script #jorlab_main -1,{
|
||||
end;
|
||||
OnInstanceInit:
|
||||
'map_jorlab$ = instance_mapname("1@jorlab");
|
||||
'event = 0;
|
||||
.@md_name$ = "Bagot Laboratory";
|
||||
|
||||
disablenpc instance_npcname("Juncea#ep19re4");
|
||||
|
||||
if (instance_live_info(ILI_NAME) == .@md_name$) // MD "Bagot Laboratory"
|
||||
disablenpc instance_npcname("Summon Device#ep19re1");
|
||||
else { // MD "Simulation"
|
||||
disablenpc instance_npcname("#jorlab_hw1");
|
||||
disablenpc instance_npcname("Juncea#ep19re3");
|
||||
}
|
||||
end;
|
||||
}
|
||||
|
||||
1@jorlab,58,45,0 script #jorlab_hw1 HIDDEN_WARP_NPC,4,4,{
|
||||
end;
|
||||
OnTouch:
|
||||
disablenpc();
|
||||
if (ep19_main == 50) {
|
||||
if ('event != 0)
|
||||
end;
|
||||
if (is_party_leader() == false)
|
||||
end;
|
||||
enablenpc instance_npcname("Juncea#ep19re3");
|
||||
end;
|
||||
}
|
||||
end;
|
||||
}
|
||||
|
||||
// Main Quest: Step 59
|
||||
1@jorlab,58,67,3 script Juncea#ep19re3 4_EP19_JUNCEA,{
|
||||
if (ep19_main != 50)
|
||||
end;
|
||||
if (is_party_leader() == false)
|
||||
end;
|
||||
.@npc_name$ = instance_npcname("Juncea#ep19re3");
|
||||
if ('event == 0) {
|
||||
cutin "ep19_juncea04.png",2;
|
||||
mes "[Juncea]";
|
||||
mes "Oh, I'm here. Welcome.";
|
||||
next;
|
||||
cutin "",255;
|
||||
mes "[" + strcharinfo(0) + "]";
|
||||
mes "Why do you want it to be just the two of us?";
|
||||
mes "Although, I had some questions for you too.";
|
||||
next;
|
||||
cutin "ep19_juncea04.png",2;
|
||||
mes "[Juncea]";
|
||||
mes "Oh, I thought so.";
|
||||
mes "But listen to me first.";
|
||||
next;
|
||||
mes "[Juncea]";
|
||||
mes "You are in a lot of trouble.";
|
||||
mes "It must be hard to be someone you're not.";
|
||||
next;
|
||||
cutin "",255;
|
||||
mes "[" + strcharinfo(0) + "]";
|
||||
mes "What do you mean? What's wrong? You're a bit strange. You scare me.";
|
||||
next;
|
||||
cutin "ep19_juncea04.png",2;
|
||||
mes "[Juncea]";
|
||||
mes "What are you afraid of? You've done a good job of pretending to be friendly so far. Why are you suddenly acting scared again?";
|
||||
next;
|
||||
cutin "",255;
|
||||
mes "[" + strcharinfo(0) + "]";
|
||||
mes "I didn't pretend to be friendly. I really want to become friends with you.";
|
||||
next;
|
||||
cutin "ep19_juncea04.png",2;
|
||||
mes "[Juncea]";
|
||||
mes "Whoa, that's why you were so hard on me to gossip about Bagot? It's a good way, it's a good way.";
|
||||
mes "There is no faster way to make friends than to curse the same person.";
|
||||
next;
|
||||
mes "[Juncea]";
|
||||
mes "However, you chose the wrong opponent. Idiot.";
|
||||
next;
|
||||
mes "[Juncea]";
|
||||
mes "The great... Bagot, do you think you will... fall for such a shallow... masterpiece?";
|
||||
next;
|
||||
cutin "",255;
|
||||
mes "[" + strcharinfo(0) + "]";
|
||||
mes "Are you the great Bagot?";
|
||||
next;
|
||||
cutin "ep19_juncea04.png",2;
|
||||
mes "[Juncea]";
|
||||
mes "Yeah... It's already reading your thoughts...";
|
||||
next;
|
||||
mes "[Juncea]";
|
||||
mes "You know... you're trying to... use me.";
|
||||
next;
|
||||
mes "[Juncea]";
|
||||
mes "So I...";
|
||||
next;
|
||||
mes "[Juncea]";
|
||||
mes "I am... Who am I? This is...";
|
||||
next;
|
||||
cutin "",255;
|
||||
mes "[" + strcharinfo(0) + "]";
|
||||
mes "(Juncea is weird..., did Bagot do something?)";
|
||||
next;
|
||||
cutin "ep19_juncea04.png",2;
|
||||
mes "[Juncea]";
|
||||
mes "Even if I jumped... you're already in Bagot's palm.";
|
||||
next;
|
||||
cutin "ep19_juncea00.png",1;
|
||||
setnpcdisplay( .@npc_name$, 4_EP19_JUNCEA_M );
|
||||
mes "[Juncea]";
|
||||
mes "Here... I'll take care of it...!";
|
||||
next;
|
||||
cutin "",255;
|
||||
mes "[" + strcharinfo(0) + "]";
|
||||
mes "(...I don't have time to ask anyone for help! I have to do that myself!)";
|
||||
if ('event == 0)
|
||||
'event = 1;
|
||||
close;
|
||||
}
|
||||
if ('event == 1) {
|
||||
cutin "ep19_juncea04.png",2;
|
||||
setnpcdisplay( .@npc_name$, 4_EP19_JUNCEA );
|
||||
mes "[Juncea]";
|
||||
mes "Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah!";
|
||||
next;
|
||||
cutin "ep19_juncea00.png",1;
|
||||
sleep2 500;
|
||||
setnpcdisplay( .@npc_name$, 4_EP19_JUNCEA_M );
|
||||
mes "[Juncea]";
|
||||
mes "Everything is... Bagot's... Meaning...!";
|
||||
next;
|
||||
cutin "ep19_juncea04.png",2;
|
||||
sleep2 500;
|
||||
setnpcdisplay( .@npc_name$, 4_EP19_JUNCEA );
|
||||
mes "[Juncea]";
|
||||
mes "Aaaaaaah!";
|
||||
setnpcdisplay( .@npc_name$, 4_EP19_JUNCEA_M );
|
||||
setnpcdisplay( .@npc_name$, 4_EP19_JUNCEA );
|
||||
setnpcdisplay( .@npc_name$, 4_EP19_JUNCEA_M );
|
||||
sleep2 500;
|
||||
setnpcdisplay( .@npc_name$, 4_EP19_JUNCEA );
|
||||
next;
|
||||
cutin "ep19_juncea00.png",1;
|
||||
sleep2 500;
|
||||
setnpcdisplay( .@npc_name$, 4_EP19_JUNCEA_M );
|
||||
mes "[Juncea]";
|
||||
mes "As intended... I will punish you!";
|
||||
close2;
|
||||
cutin "",255;
|
||||
if ('event != 1)
|
||||
end;
|
||||
'event = 2;
|
||||
disablenpc();
|
||||
donpcevent instance_npcname("jorlab_boss") + "::OnStart";
|
||||
end;
|
||||
}
|
||||
end;
|
||||
}
|
||||
|
||||
1@jorlab,1,1,0 script jorlab_boss -1,{
|
||||
end;
|
||||
OnStart:
|
||||
sleep 500;
|
||||
monster 'map_jorlab$,58,67,"--ja--",21532,1, instance_npcname("jorlab_boss") + "::OnMobDead"; // EP19_MD_JUNCEA
|
||||
end;
|
||||
OnMobDead:
|
||||
if ('event != 2)
|
||||
end;
|
||||
'event = 3;
|
||||
enablenpc instance_npcname("Juncea#ep19re4");
|
||||
end;
|
||||
}
|
||||
|
||||
|
||||
// Main Quest: Step 60
|
||||
1@jorlab,58,67,3 script Juncea#ep19re4 4_EP19_JUNCEA_D,{
|
||||
if (ep19_main != 50) {
|
||||
warp "icecastle",27,123;
|
||||
end;
|
||||
}
|
||||
if ('event != 3)
|
||||
end;
|
||||
if (is_party_leader() == false)
|
||||
end;
|
||||
mes "[" + strcharinfo(0) + "]";
|
||||
mes "(Barely subdued. Juncea lost her mind...)";
|
||||
next;
|
||||
mes "[" + strcharinfo(0) + "]";
|
||||
mes "(Bagot... What did you do to Juncea? You've turned her into a monster right?)";
|
||||
next;
|
||||
mes "[" + strcharinfo(0) + "]";
|
||||
mes "(If everything went according to plan, we should have persuaded her and taken her out, but we should have taken her out even in this condition.)";
|
||||
mapannounce 'map_jorlab$, "Bagot: Oh, it was not enough to use Juncea as a vessel.", bc_map, 0xFFFF;
|
||||
next;
|
||||
mes "[" + strcharinfo(0) + "]";
|
||||
mes "(I used the Ragan Transformation Scroll on Juncea as I had planned...)";
|
||||
mapannounce 'map_jorlab$, "Bagot: This time, my prediction was wrong.", bc_map, 0xFFFF;
|
||||
next;
|
||||
setnpcdisplay( instance_npcname("Juncea#ep19re4"), 4_EP19_RGAN_R1 );
|
||||
mes "[" + strcharinfo(0) + "]";
|
||||
mes "(For now, let's take her back to the village.)";
|
||||
mapannounce 'map_jorlab$, "Bagot: By the way, there were scrolls like that... I knew they were cheating, but the existence of such a thing is interesting.", bc_map, 0xFFFF;
|
||||
next;
|
||||
mes "[" + strcharinfo(0) + "]";
|
||||
mes "(I think I heard something... I must have heard it wrong?)";
|
||||
mapannounce 'map_jorlab$, "Bagot: Whoops.", bc_map, 0xFFFF;
|
||||
erasequest 16660;
|
||||
setquest 16661;
|
||||
ep19_main = 51;
|
||||
close2;
|
||||
warp "icecastle",27,123;
|
||||
end;
|
||||
|
||||
OnInstanceInit:
|
||||
questinfo( QTYPE_QUEST, QMARK_NONE, "checkquest(16660,HUNTING) == 2" );
|
||||
end;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Simulation Battle
|
||||
// ------------------------------
|
||||
|
||||
jor_nest,66,260,3 script Arolong#ep19re2 4_EP19_IWIN,{
|
||||
if (ep19_main < 100)
|
||||
end;
|
||||
if (checkweight(1000811,1) == 0) {
|
||||
mes "[Arolong]";
|
||||
mes "- Your bag is full. Please check the weight and quantity of items you have and then talk to us again. -";
|
||||
close;
|
||||
}
|
||||
switch( checkquest(16663,PLAYTIME) ) {
|
||||
case -1:
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
mes "[Arolong]";
|
||||
mes "Today's challenge is over.";
|
||||
mes "If you come back tomorrow, please let me in.";
|
||||
next;
|
||||
mes "[Arolong]";
|
||||
mes "Okay?";
|
||||
mes "Have a good rest, see you again tomorrow.";
|
||||
close;
|
||||
case 2:
|
||||
erasequest 16663;
|
||||
break;
|
||||
}
|
||||
if (checkquest(16662,HUNTING) == 2) {
|
||||
mes "[Arolong]";
|
||||
mes "Societyless Simulation with Juncea";
|
||||
mes "Did you win a fight and come back?";
|
||||
next;
|
||||
mes "[Arolong]";
|
||||
mes "Child, it's okay if you don't answer.";
|
||||
mes "I've seen it all here.";
|
||||
next;
|
||||
mes "[Arolong]";
|
||||
mes "Well done.";
|
||||
mes "It's a great win and come back.";
|
||||
next;
|
||||
mes "[Arolong]";
|
||||
mes "The data are paired, so our researchers also";
|
||||
mes "Your calf.";
|
||||
mes "Then, please accept the promised reward.";
|
||||
next;
|
||||
mes "[Arolong]";
|
||||
mes "Have a good rest, see you again tomorrow.";
|
||||
mes "I'll try again tomorrow.";
|
||||
close2;
|
||||
erasequest 16662;
|
||||
setquest 16663;
|
||||
getitem 1000811,1; // Snow_F_Ore
|
||||
// todo
|
||||
end;
|
||||
}
|
||||
// Note: Player can re-enter / re-create an instance until the boss is defeated
|
||||
cutin "ep19_iwin01.png",2;
|
||||
mes "[Arolong]";
|
||||
mes "The battle with Juncea wasn't thrilling, wasn't it?";
|
||||
mes "You want to fight again, don't you think?";
|
||||
next;
|
||||
cutin "",255;
|
||||
if (select( "Lift", "Don't lift" ) == 2) {
|
||||
cutin "ep19_iwin01.png",2;
|
||||
mes "[Arolong]";
|
||||
mes "Is that so?";
|
||||
mes "I'm sorry.";
|
||||
close3;
|
||||
}
|
||||
cutin "ep19_iwin01.png",2;
|
||||
mes "[Arolong]";
|
||||
mes "It was prepared for such an adventurer.";
|
||||
mes "Exciting simulation battles with simulation data Juncea.";
|
||||
next;
|
||||
mes "[Arolong]";
|
||||
mes "I prepared it at the Ice Castle, so it's safe.";
|
||||
mes "Defeat " + getmonsterinfo("EP19_MD_JUNCEA_S", MOB_NAME) + " once a day.";
|
||||
next;
|
||||
mes "[Arolong]";
|
||||
mes "But you can try again and again until you defeat it.";
|
||||
mes "Would you like to try it?";
|
||||
next;
|
||||
.@md_name$ = "Simulation Battle";
|
||||
if (is_party_leader() == true)
|
||||
.@menu$ = "Prepare to enter Bagot's lab";
|
||||
|
||||
cutin "",255;
|
||||
switch( select( .@menu$, "Enter Bagot's Lab", "Do not challenge" ) ) {
|
||||
case 1:
|
||||
mes "- ^0000ff Preparation for entry has started. After you are ready, press the button to enter the lab in Bagot.^000000 -";
|
||||
instance_create(.@md_name$);
|
||||
close;
|
||||
case 2:
|
||||
switch( instance_enter(.@md_name$) ) {
|
||||
case IE_OTHER:
|
||||
mes "An unknown error occurred.";
|
||||
close;
|
||||
case IE_NOINSTANCE:
|
||||
mes "- ^0000ff Memorial dungeon not created. Please check again.^000000 -";
|
||||
close;
|
||||
case IE_NOMEMBER:
|
||||
mes "[Juncea]";
|
||||
mes "^ff0000Only a member of the party can enter the Memorial Dungeon.^000000";
|
||||
close;
|
||||
case IE_OK:
|
||||
if (isbegin_quest(16662) == 0)
|
||||
setquest 16662;
|
||||
// warp "1@jorlab",57,45;
|
||||
end;
|
||||
}
|
||||
end;
|
||||
case 3:
|
||||
cutin "ep19_iwin01.png",2;
|
||||
mes "[Arolong]";
|
||||
mes "Heh, what a boring adventure.";
|
||||
close3;
|
||||
}
|
||||
end;
|
||||
|
||||
OnInit:
|
||||
cloakonnpc();
|
||||
questinfo( QTYPE_DAILYQUEST, QMARK_YELLOW, "ep19_main >= 100 && checkquest(16662,HUNTING) != 2 && checkquest(16663,PLAYTIME) == -1" );
|
||||
questinfo( QTYPE_DAILYQUEST, QMARK_YELLOW, "checkquest(16663,PLAYTIME) == 2" );
|
||||
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "checkquest(16662,HUNTING) == 2" );
|
||||
end;
|
||||
}
|
||||
|
||||
1@jorlab,58,67,3 script Summon Device#ep19re1 PORTAL,{
|
||||
if ('event == 2) {
|
||||
mes "[Summon Device]";
|
||||
mes "Battle complete, save data.";
|
||||
mes "Press the Yes button to exit the lab";
|
||||
mes "Please press";
|
||||
next;
|
||||
if (select( "Yes", "No" ) == 2) {
|
||||
mes "[Summon Device]";
|
||||
mes "Exit.";
|
||||
close;
|
||||
}
|
||||
mes "[Summon Device]";
|
||||
mes "3, 2, 1. Ready to move.";
|
||||
close2;
|
||||
warp "jor_nest",63,257;
|
||||
end;
|
||||
}
|
||||
if (is_party_leader() == false || 'event != 0) {
|
||||
mes "[Summon Device]";
|
||||
mes "- I am talking with another party member. Please listen together for a moment. -";
|
||||
mes "- If the conversation ended due to an error, you will be able to talk 5 minutes after the conversation starts. -";
|
||||
close;
|
||||
}
|
||||
mes "[Summon Device]";
|
||||
mes "Start a simulation battle.";
|
||||
mes "When you are ready, click the Yes button.";
|
||||
next;
|
||||
mes "[Summon Device]";
|
||||
mes "Are you ready?";
|
||||
next;
|
||||
if (select( "Yes", "No" ) == 2) {
|
||||
mes "[Summon Device]";
|
||||
mes "Exit.";
|
||||
close;
|
||||
}
|
||||
mes "[Summon Device]";
|
||||
mes "Summon " + getmonsterinfo("EP19_MD_JUNCEA_S", MOB_NAME) + ".";
|
||||
mes "3, 2, 1. Ready to summon.";
|
||||
close2;
|
||||
if ('event == 0) {
|
||||
'event = 1;
|
||||
disablenpc();
|
||||
donpcevent instance_npcname("ep19_simulation_battle") + "::OnStart";
|
||||
}
|
||||
end;
|
||||
}
|
||||
|
||||
1@jorlab,1,1,0 script ep19_simulation_battle -1,{
|
||||
end;
|
||||
OnStart:
|
||||
monster 'map_jorlab$,58,67,"--ja--","EP19_MD_JUNCEA_S",1, instance_npcname("ep19_simulation_battle") + "::OnBossDead";
|
||||
end;
|
||||
OnBossDead:
|
||||
if ('event != 1)
|
||||
end;
|
||||
'event = 2;
|
||||
enablenpc instance_npcname("Summon Device#ep19re1");
|
||||
end;
|
||||
}
|
||||
1865
npc/re/instances/ConfusedSnakesNest.txt
Normal file
1865
npc/re/instances/ConfusedSnakesNest.txt
Normal file
File diff suppressed because it is too large
Load Diff
1180
npc/re/instances/IwinPatrol.txt
Normal file
1180
npc/re/instances/IwinPatrol.txt
Normal file
File diff suppressed because it is too large
Load Diff
@@ -2,34 +2,35 @@
|
||||
//= Instance: The Maze of Oz.
|
||||
//===== Description: =========================================
|
||||
//- [Walkthrough conversion]
|
||||
//- Part of the episode 18.1 main quest.
|
||||
//- Part of the Episode 18 main quest.
|
||||
//===== Changelogs: ==========================================
|
||||
//= 1.0 First version. [Capuche]
|
||||
//============================================================
|
||||
|
||||
// Main Quest: Step 28.
|
||||
ra_fild10,179,176,5 script Merchant#ep18_gorge 4_EP18_MERCHANT,{
|
||||
.@md_name$ = "The Maze of Oz";
|
||||
ra_fild10,179,176,5 script Merchant#ep18_gorge 4_EP18_MERCHANT,{
|
||||
.@md_name$ = "Oz Labyrinth";
|
||||
|
||||
if (ep18_1_main == 29) {
|
||||
mes "[Miriam in disguise]";
|
||||
mes "From now on <FONT SIZE = 14><B>^e5555e" + .@md_name$ + "^000000</FONT></B>";
|
||||
mes "^e5555ePrepare yourself and talk to me again^000000";
|
||||
if (ep18_main == 29) {
|
||||
mes "[Disguised Miriam]";
|
||||
mes "We are now entering the <FONT SIZE = 14><B>^e5555eMaze of Oz^000000</FONT></B>.";
|
||||
mes "^e5555ePlease finish your preparations^000000 and come back to me.";
|
||||
cutin "ep18_merchant.png",2;
|
||||
changequest 11717,11719;
|
||||
ep18_1_main = 30;
|
||||
erasequest 11717;
|
||||
setquest 11719;
|
||||
ep18_main = 30;
|
||||
close3;
|
||||
}
|
||||
if (ep18_1_main == 30) {
|
||||
mes "[Miriam in disguise]";
|
||||
mes "Then I'll start the ^e5555e" + .@md_name$ + "^000000";
|
||||
if (ep18_main == 30) {
|
||||
mes "[Disguised Miriam]";
|
||||
mes "Then let's head to ^e5555e" + .@md_name$ + "^000000";
|
||||
next;
|
||||
if (getcharid(1) == 0 || is_party_leader() == false) {
|
||||
mes "[Miriam in disguise]";
|
||||
mes "I think it would be a good idea to form a ^ff0000party before enter ^000000..";
|
||||
mes "[Disguised Miriam]";
|
||||
mes "I think it would be a good idea to form a ^ff0000party before enter^000000..";
|
||||
close;
|
||||
}
|
||||
switch( select( "Open the door", "Enter", "Stop" ) ) {
|
||||
switch( select( "Open the door.", "Enter.", "Quit." ) ) {
|
||||
case 1:
|
||||
if (instance_create(.@md_name$) < 0) {
|
||||
mes "Party: " + getpartyname(getcharid(1)) + "";
|
||||
@@ -37,21 +38,21 @@ ra_fild10,179,176,5 script Merchant#ep18_gorge 4_EP18_MERCHANT,{
|
||||
mes "^0000ff" + .@md_name$ + " ^000000- Unknown error";
|
||||
close;
|
||||
}
|
||||
mes "[Miriam in disguise]";
|
||||
mes "You'd better wait a little before you go in.";
|
||||
mes "[Disguised Miriam]";
|
||||
mes "It's better to wait a bit before entering.";
|
||||
close;
|
||||
case 2:
|
||||
switch( instance_enter(.@md_name$) ) {
|
||||
case IE_OTHER:
|
||||
mes "[Miriam in disguise]";
|
||||
mes "[Disguised Miriam]";
|
||||
mes "^ff0000An unknown error occurred.^000000";
|
||||
close;
|
||||
case IE_NOINSTANCE:
|
||||
mes "[Miriam in disguise]";
|
||||
mes "^ff0000Your party leader has not yet created the dungeon.^000000";
|
||||
mes "[Disguised Miriam]";
|
||||
mes "Let's wait a bit and try again.";
|
||||
close;
|
||||
case IE_NOMEMBER:
|
||||
mes "[Miriam in disguise]";
|
||||
mes "[Disguised Miriam]";
|
||||
mes "^ff0000Only a member of the party can enter the Memorial Dungeon.^000000";
|
||||
close;
|
||||
case IE_OK:
|
||||
@@ -62,24 +63,25 @@ ra_fild10,179,176,5 script Merchant#ep18_gorge 4_EP18_MERCHANT,{
|
||||
end;
|
||||
}
|
||||
}
|
||||
mes "[Merchant]";
|
||||
mes "It seems like someone was nearby but disappeared quickly.";
|
||||
mes "Where did they go?";
|
||||
cutin "ep18_merchant.png",2;
|
||||
mes "[Vendor]";
|
||||
mes "Someone must have been around here, but they just disappeared. Where did they go?";
|
||||
close3;
|
||||
close3;
|
||||
|
||||
OnInit:
|
||||
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(11717) == 1" );
|
||||
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(11719) == 1" );
|
||||
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(11717) == 1" );
|
||||
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(11719) == 1" );
|
||||
end;
|
||||
}
|
||||
|
||||
// Step 1
|
||||
1@oz,284,164,3 script Rope#outoz 4_ROPEPILE,{
|
||||
mes "I think I can climb up with a rope.";
|
||||
mes "I think we can use the rope to climb up.";
|
||||
next;
|
||||
if (select( "Use a rope to climb", "Do not use" ) == 2)
|
||||
if (select( "Use the rope to climb up.", "Do not use." ) == 2)
|
||||
end;
|
||||
warp "ra_fild10",180,174;
|
||||
warp "ra_fild10",173,176;
|
||||
end;
|
||||
}
|
||||
|
||||
@@ -88,64 +90,64 @@ OnInit:
|
||||
end;
|
||||
'event_oz = 1;
|
||||
.@miriam1$ = instance_npcname("Miriam#ozmd1");
|
||||
.@maggi1$ = instance_npcname("Magi#ozmd1");
|
||||
.@maggi1$ = instance_npcname("Maggi#ozmd1");
|
||||
.@mark1$ = instance_npcname("Mark#ozmd1");
|
||||
.@tamarin1$ = instance_npcname("Tamarin#ozmd1");
|
||||
.@miriam2$ = instance_npcname("Miriam#ozmd2");
|
||||
|
||||
setpcblock PCBLOCK_NPC, true;
|
||||
npctalk "Miriam: This is the entrance to the labyrinth of Oz.", .@miriam1$;
|
||||
npctalk "Miriam: This is the entrance to the Labyrinth of Oz.", .@miriam1$;
|
||||
cutin "ep18_miriam_03.png",2;
|
||||
sleep2 2000;
|
||||
npctalk "Miriam: Everyone, please move carefully.", .@miriam1$;
|
||||
sleep2 2000;
|
||||
npctalk "Magi: Something hot and dusty...", .@maggi1$;
|
||||
cutin "4job_maggi_02.PNG",2;
|
||||
enablenpc .@maggi1$;
|
||||
enablenpc .@mark1$;
|
||||
enablenpc .@tamarin1$;
|
||||
cloakoffnpcself( .@maggi1$ );
|
||||
cloakoffnpcself( .@mark1$ );
|
||||
cloakoffnpcself( .@tamarin1$ );
|
||||
sleep2 2000;
|
||||
npctalk "Mark: Are you okay?", .@mark1$;
|
||||
cutin "ep18_mark_01.png",2;
|
||||
sleep2 2000;
|
||||
npctalk "Miriam: There is lava flowing right below it, always scattering ashes.", .@miriam1$;
|
||||
npctalk "Miriam: Lava is flowing right below, so ash is always flying.", .@miriam1$;
|
||||
cutin "ep18_miriam_03.png",2;
|
||||
sleep2 2000;
|
||||
npctalk "Miriam: Beware there may be embers in the lava ash.", .@miriam1$;
|
||||
npctalk "Miriam: There may be embers left in the lava ash, so please be careful.", .@miriam1$;
|
||||
sleep2 2000;
|
||||
npctalk "Miriam: If you inhale incorrectly, you will burn your lungs.", .@miriam1$;
|
||||
npctalk "Miriam: If you inhale it incorrectly, it will burn your lungs.", .@miriam1$;
|
||||
sleep2 2000;
|
||||
npctalk "Miriam: There don't seem to be any monsters around here, so it's better to move slowly and check the situation again.", .@miriam1$;
|
||||
npctalk "Miriam: There don't seem to be any monsters around here, so it would be better to move slowly and check the situation again.", .@miriam1$;
|
||||
sleep2 2000;
|
||||
npctalk "Miriam: Please follow the road to the north first.", .@miriam1$;
|
||||
npctalk "Miriam: First, please follow the road to the north.", .@miriam1$;
|
||||
sleep2 2000;
|
||||
cutin "",255;
|
||||
setpcblock PCBLOCK_NPC, false;
|
||||
|
||||
disablenpc .@maggi1$;
|
||||
disablenpc .@mark1$;
|
||||
disablenpc .@tamarin1$;
|
||||
cloakonnpcself( .@maggi1$ );
|
||||
cloakonnpcself( .@mark1$ );
|
||||
cloakonnpcself( .@tamarin1$ );
|
||||
disablenpc .@miriam1$;
|
||||
enablenpc .@miriam2$;
|
||||
end;
|
||||
}
|
||||
|
||||
1@oz,279,175,5 duplicate(dummy_npc) Magi#ozmd1 4_4JOB_MAGGI
|
||||
1@oz,280,175,3 duplicate(dummy_npc) Mark#ozmd1 4_EP18_MARK
|
||||
1@oz,279,177,3 duplicate(dummy_npc) Tamarin#ozmd1 4_EP18_TAMARIN
|
||||
1@oz,279,175,5 duplicate(dummy_cloaked_npc) Maggi#ozmd1 4_4JOB_MAGGI
|
||||
1@oz,280,175,3 duplicate(dummy_cloaked_npc) Mark#ozmd1 4_EP18_MARK
|
||||
1@oz,279,177,3 duplicate(dummy_cloaked_npc) Tamarin#ozmd1 4_EP18_TAMARIN
|
||||
|
||||
|
||||
// Step 2
|
||||
1@oz,271,272,3 script Miriam#ozmd2 4_EP18_MIRIAM,{
|
||||
1@oz,271,272,3 script(DISABLED) Miriam#ozmd2 4_EP18_MIRIAM,{
|
||||
if ('event_oz != 1)
|
||||
end;
|
||||
'event_oz = 2;
|
||||
.@miriam2$ = instance_npcname("Miriam#ozmd2");
|
||||
'miriam3$ = instance_npcname("Miriam#ozmd3");
|
||||
setpcblock PCBLOCK_NPC, true;
|
||||
npctalk "Miriam: If you cross the bridge in front of you, it's a real maze.", .@miriam2$;
|
||||
npctalk "Miriam: If you cross the bridge in front of you, it's the real Maze of Oz.", .@miriam2$;
|
||||
sleep2 2000;
|
||||
npctalk "Miriam: We must be very careful crossing the bridge, let's talk again after.", .@miriam2$;
|
||||
npctalk "Miriam: You have to be very careful when crossing the bridge, so let's talk again at the bridge.", .@miriam2$;
|
||||
sleep2 2000;
|
||||
setpcblock PCBLOCK_NPC, false;
|
||||
disablenpc .@miriam2$;
|
||||
@@ -153,69 +155,43 @@ OnInit:
|
||||
end;
|
||||
|
||||
OnInstanceInit:
|
||||
'miriam3_id = 0;
|
||||
'event_oz = 0;
|
||||
|
||||
'map_name$ = instance_mapname("1@oz");
|
||||
disablenpc instance_npcname("Miriam#ozmd2");
|
||||
disablenpc instance_npcname("Miriam#ozmd3");
|
||||
disablenpc instance_npcname("Miriam#ozmd4");
|
||||
disablenpc instance_npcname("Maram#ozmd5");
|
||||
disablenpc instance_npcname("Miriam#ozmd5");
|
||||
disablenpc instance_npcname("Maram#ozmd7");
|
||||
disablenpc instance_npcname("#oz_way");
|
||||
disablenpc instance_npcname("Maram#ozmd6");
|
||||
disablenpc instance_npcname("Magi#ozmd1");
|
||||
disablenpc instance_npcname("Mark#ozmd1");
|
||||
disablenpc instance_npcname("Tamarin#ozmd1");
|
||||
disablenpc instance_npcname("Magi#ozmd3");
|
||||
disablenpc instance_npcname("Mark#ozmd3");
|
||||
disablenpc instance_npcname("Tamarin#ozmd3");
|
||||
disablenpc instance_npcname("Maram#ozmd4");
|
||||
disablenpc instance_npcname("Magi#ozmd5");
|
||||
disablenpc instance_npcname("Mark#ozmd5");
|
||||
disablenpc instance_npcname("Tamarin#ozmd5");
|
||||
disablenpc instance_npcname("Maram#ozmd8");
|
||||
disablenpc instance_npcname("Magi#ozmd6");
|
||||
disablenpc instance_npcname("Mark#ozmd6");
|
||||
disablenpc instance_npcname("Tamarin#ozmd6");
|
||||
disablenpc instance_npcname("Miriam#ozmd7");
|
||||
disablenpc instance_npcname("Imril#ozmd7");
|
||||
end;
|
||||
}
|
||||
|
||||
|
||||
// Step 3
|
||||
1@oz,241,272,3 script Miriam#ozmd3 EP18_NPC_MIRIAM,{
|
||||
1@oz,241,272,3 script(DISABLED) Miriam#ozmd3 EP18_NPC_MIRIAM,{
|
||||
if ('event_oz != 2)
|
||||
end;
|
||||
'event_oz = 3;
|
||||
'miriam3$ = instance_npcname("Miriam#ozmd3");
|
||||
.@maggi3$ = instance_npcname("Magi#ozmd3");
|
||||
.@maggi3$ = instance_npcname("Maggi#ozmd3");
|
||||
.@mark3$ = instance_npcname("Mark#ozmd3");
|
||||
.@tamarin3$ = instance_npcname("Tamarin#ozmd3");
|
||||
|
||||
setpcblock PCBLOCK_NPC, true;
|
||||
npctalk "Miriam: This bridge is dangerous, so it's best to split your luggage and cross in turn.", 'miriam3$;
|
||||
npctalk "Miriam: This bridge is dangerous, so it would be better to share the luggage and cross it one at a time.", 'miriam3$;
|
||||
sleep2 2000;
|
||||
npctalk "Miriam: Then I will cross first, so please follow slowly. It will help not to look under your feet.", 'miriam3$;
|
||||
npctalk "Miriam: Then, I will cross first, so please follow me slowly. It will be helpful not to look under your feet.", 'miriam3$;
|
||||
sleep2 2000;
|
||||
npctalk "Tamarin: Wow I can't see the bottom.", .@tamarin3$;
|
||||
enablenpc .@maggi3$;
|
||||
enablenpc .@mark3$;
|
||||
enablenpc .@tamarin3$;
|
||||
npctalk "Tamarin: Wow... I can't see the bottom.", .@tamarin3$;
|
||||
cloakoffnpcself( .@maggi3$ );
|
||||
cloakoffnpcself( .@mark3$ );
|
||||
cloakoffnpcself( .@tamarin3$ );
|
||||
sleep2 2000;
|
||||
npctalk "Magi: Your legs look very old...", .@maggi3$;
|
||||
npctalk "Magi: My legs look really worn out...", .@maggi3$;
|
||||
sleep2 2000;
|
||||
npctalk "Mark: Everyone be careful", .@mark3$;
|
||||
npctalk "Mark: Everyone be careful.", .@mark3$;
|
||||
sleep2 2000;
|
||||
setpcblock PCBLOCK_NPC, false;
|
||||
disablenpc .@maggi3$;
|
||||
disablenpc .@mark3$;
|
||||
disablenpc .@tamarin3$;
|
||||
cloakonnpcself( .@maggi3$ );
|
||||
cloakonnpcself( .@mark3$ );
|
||||
cloakonnpcself( .@tamarin3$ );
|
||||
'miriam3_id = getnpcid(0);
|
||||
|
||||
unitwalk 'miriam3_id,231,272, 'miriam3$ + "::OnEvent1"; // several events are required to palliate to our too short value of MAX_WALKPATH (32) used to calculate the pathing
|
||||
unitwalk 'miriam3_id,231,272, 'miriam3$ + "::OnEvent1";
|
||||
end;
|
||||
OnEvent1:
|
||||
unitwalk 'miriam3_id,211,272, 'miriam3$ + "::OnEvent2";
|
||||
@@ -236,13 +212,13 @@ OnEvent5:
|
||||
end;
|
||||
}
|
||||
|
||||
1@oz,245,272,3 duplicate(dummy_npc) Magi#ozmd3 4_4JOB_MAGGI
|
||||
1@oz,244,273,3 duplicate(dummy_npc) Mark#ozmd3 4_EP18_MARK
|
||||
1@oz,244,270,3 duplicate(dummy_npc) Tamarin#ozmd3 4_EP18_TAMARIN
|
||||
1@oz,245,272,3 duplicate(dummy_cloaked_npc) Maggi#ozmd3 4_4JOB_MAGGI
|
||||
1@oz,244,273,3 duplicate(dummy_cloaked_npc) Mark#ozmd3 4_EP18_MARK
|
||||
1@oz,244,270,3 duplicate(dummy_cloaked_npc) Tamarin#ozmd3 4_EP18_TAMARIN
|
||||
|
||||
|
||||
// Step 4 + 5
|
||||
1@oz,157,272,3 script Miriam#ozmd4 4_EP18_MIRIAM,{
|
||||
1@oz,157,272,3 script(DISABLED) Miriam#ozmd4 4_EP18_MIRIAM,{
|
||||
if ('event_oz != 3)
|
||||
end;
|
||||
'event_oz = 4;
|
||||
@@ -250,25 +226,25 @@ OnEvent5:
|
||||
.@miriam4$ = instance_npcname("Miriam#ozmd4");
|
||||
.@tamarin4$ = instance_npcname("Tamarin#ozmd4");
|
||||
.@ashtoad2$ = instance_npcname("Ash Toad#ozmd2");
|
||||
.@maggi4$ = instance_npcname("Magi#ozmd4");
|
||||
.@maggi4$ = instance_npcname("Maggi#ozmd4");
|
||||
.@mark4$ = instance_npcname("Mark#ozmd4");
|
||||
.@ashtoad3$ = instance_npcname("Ash Toad#ozmd3");
|
||||
|
||||
setpcblock PCBLOCK_NPC, true;
|
||||
mapannounce 'map_name$, "Miriam: Ah!! A monster!!!", bc_map, 0x00B7EE,FW_NORMAL,16;
|
||||
mapannounce 'map_name$, "Miriam: Ah!! A monster!!!", bc_map, 0xB7EE,FW_NORMAL,16;
|
||||
sleep2 1500;
|
||||
mapannounce 'map_name$, "Miriam: I'll take this rude bastard.", bc_map, 0x00B7EE,FW_NORMAL,16;
|
||||
mapannounce 'map_name$, "Miriam: I will take care of this rude guy.", bc_map, 0xB7EE,FW_NORMAL,16;
|
||||
sleep2 1500;
|
||||
mapannounce 'map_name$, "Tamarin: Appeared in the back!!!", bc_map, 0x00B7EE,FW_NORMAL,16;
|
||||
mapannounce 'map_name$, "Tamarin: It also appeared in the back!!!", bc_map, 0xB7EE,FW_NORMAL,16;
|
||||
sleep2 2000;
|
||||
enablenpc .@tamarin4$;
|
||||
sleep2 500;
|
||||
enablenpc .@ashtoad2$;
|
||||
mapannounce 'map_name$, "Magi: Crazy!!!", bc_map, 0x00B7EE,FW_NORMAL,16;
|
||||
mapannounce 'map_name$, "Magi: Aaaah!!!", bc_map, 0xB7EE,FW_NORMAL,16;
|
||||
sleep2 500;
|
||||
enablenpc .@maggi4$;
|
||||
enablenpc .@mark4$;
|
||||
mapannounce 'map_name$, "Mark: Please support me in the front!!!", bc_map, 0x00B7EE,FW_NORMAL,16;
|
||||
mapannounce 'map_name$, "Mark: Please support the front!!!", bc_map, 0xB7EE,FW_NORMAL,16;
|
||||
sleep2 1000;
|
||||
'mob_count_oz = 0;
|
||||
monster 'map_name$,145,274,"Ash Toad",21295,1, .@miriam4$ + "::OnMobDead"; // EP18_ASH_TOAD
|
||||
@@ -289,7 +265,7 @@ OnMobDead:
|
||||
|
||||
.@tamarin4$ = instance_npcname("Tamarin#ozmd4");
|
||||
.@ashtoad2$ = instance_npcname("Ash Toad#ozmd2");
|
||||
.@maggi4$ = instance_npcname("Magi#ozmd4");
|
||||
.@maggi4$ = instance_npcname("Maggi#ozmd4");
|
||||
.@mark4$ = instance_npcname("Mark#ozmd4");
|
||||
.@ashtoad3$ = instance_npcname("Ash Toad#ozmd3");
|
||||
.@maram4$ = instance_npcname("Maram#ozmd4");
|
||||
@@ -301,60 +277,59 @@ OnMobDead:
|
||||
npctalk "Tamarin: I did it!!!", .@tamarin4$;
|
||||
disablenpc .@ashtoad2$;
|
||||
sleep2 2000;
|
||||
npctalk "Magi: Me too!!", .@maggi4$;
|
||||
npctalk "Magi: This way too!!", .@maggi4$;
|
||||
disablenpc .@ashtoad3$;
|
||||
sleep2 2000;
|
||||
npctalk "Miriam: Huh It wasn't a great monster, but it would have been dangerous if they were ordinary merchants.", .@miriam4$;
|
||||
npctalk "Miriam: Huh... It wasn't a great monster, but it would have been dangerous for ordinary merchants.", .@miriam4$;
|
||||
disablenpc .@ashtoad1$;
|
||||
sleep2 2000;
|
||||
npctalk "Maram : " + strcharinfo(0) + " Are you okay?", .@maram4$;
|
||||
enablenpc .@maram4$;
|
||||
cloakoffnpcself( .@maram4$ );
|
||||
npctalk "Maram : " + strcharinfo(0) + ", are you okay?", .@maram4$;
|
||||
sleep2 2000;
|
||||
npctalk "Miriam: You're late! Maram!!!", .@miriam4$;
|
||||
sleep2 2000;
|
||||
npctalk "Maram: I met a monster on the way, so I'm a little late.", .@maram4$;
|
||||
npctalk "Maram: I was a little late because I met a monster on the way.", .@maram4$;
|
||||
sleep2 2000;
|
||||
npctalk "Miriam: There were no monsters on the road we passed earlier.", .@miriam4$;
|
||||
sleep2 2000;
|
||||
npctalk "Maram: Yeah? Where the hell do monsters spring up like this...", .@maram4$;
|
||||
npctalk "Maram: Really? Where on earth do monsters like this come from?", .@maram4$;
|
||||
sleep2 2000;
|
||||
npctalk "Maram: It's a big deal because it's getting harder and harder to move goods because of these monsters.", .@maram4$;
|
||||
npctalk "Maram: It's a big problem because it's getting harder to move supplies because of these monsters.", .@maram4$;
|
||||
sleep2 2000;
|
||||
npctalk "Tamarin: If you go to the ground?", .@tamarin4$;
|
||||
npctalk "Tamarin: What if you travel by land?", .@tamarin4$;
|
||||
sleep2 2000;
|
||||
npctalk "Tamarin: I heard there used to be a bridge to cross a canyon?", .@tamarin4$;
|
||||
npctalk "Tamarin: I heard there used to be a bridge across the canyon?", .@tamarin4$;
|
||||
sleep2 2000;
|
||||
npctalk "Tamarin: Because there are still remains...", .@tamarin4$;
|
||||
npctalk "Tamarin: There are still remains left...", .@tamarin4$;
|
||||
sleep2 2000;
|
||||
npctalk "Maram: It is said that the bridge above was destroyed when they saw the natives crossing to escape the hardliners' attacks.", .@maram4$;
|
||||
npctalk "Maram: It is said that the bridge above was destroyed after seeing natives crossing it while fleeing an attack by hardliners.", .@maram4$;
|
||||
sleep2 2000;
|
||||
npctalk "Maram: The land across the bridge has become uninhabitable due to volcanic ash, so it must have been the intention to dry it to death.", .@maram4$;
|
||||
npctalk "Maram: The area across the bridge has become uninhabitable due to volcanic ash, so they must have been trying to kill him.", .@maram4$;
|
||||
sleep2 2000;
|
||||
npctalk "Maram: It's not difficult to make a bridge again...", .@maram4$;
|
||||
npctalk "Maram: It's not difficult to build a bridge again...", .@maram4$;
|
||||
sleep2 2000;
|
||||
npctalk "Maram: You can't advertise that you're hiding here by making a bridge because you're in hiding.", .@maram4$;
|
||||
npctalk "Maram: Since we are in a hiding position, we can't build a bridge or something and advertise that we are hiding here.", .@maram4$;
|
||||
sleep2 2000;
|
||||
npctalk "Maram: It's dangerous and inconvenient right now, but I have no choice but to use the maze of Oz.", .@maram4$;
|
||||
npctalk "Maram: Although it is dangerous and inconvenient now, we have no choice but to use the Maze of Oz.", .@maram4$;
|
||||
sleep2 2000;
|
||||
npctalk "Maram: In this state, it may not have been noticed until now.", .@maram4$;
|
||||
npctalk "Maram: Because it's in this condition, it may be that it hasn't been discovered until now.", .@maram4$;
|
||||
sleep2 2000;
|
||||
npctalk "Miriam: Without the Maze of Oz...", .@miriam4$;
|
||||
npctalk "Miriam: If the Maze of Oz didn't exist...", .@miriam4$;
|
||||
sleep2 2000;
|
||||
npctalk "Miriam: It must have been a lot harder than it is now.", .@miriam4$;
|
||||
npctalk "Miriam: It must have been much harder than it is now.", .@miriam4$;
|
||||
sleep2 2000;
|
||||
npctalk "Maram: That's right", .@maram4$;
|
||||
npctalk "Maram: That's right.", .@maram4$;
|
||||
sleep2 2000;
|
||||
npctalk "Maram: Now, shall we walk the lovely maze of Oz again?", .@maram4$;
|
||||
npctalk "Maram: Now then, shall we walk down the lovely maze of Oz again?", .@maram4$;
|
||||
sleep2 2000;
|
||||
npctalk "Miriam: What do you mean", .@miriam4$;
|
||||
npctalk "Miriam: What do you mean...", .@miriam4$;
|
||||
sleep2 2000;
|
||||
npctalk "Miriam : " + strcharinfo(0) + " From now on, go all the way down until you come to a fork.", .@miriam4$;
|
||||
npctalk "Miriam : " + strcharinfo(0) + " , from now on, just keep going down until you reach a fork in the road.", .@miriam4$;
|
||||
sleep2 2000;
|
||||
npctalk "Miriam: It would be nice if the monsters didn't appear...", .@miriam4$;
|
||||
npctalk "Miriam: It would be nice if monsters didn't appear, but...", .@miriam4$;
|
||||
sleep2 1000;
|
||||
disablenpc .@maram4$;
|
||||
cloakonnpcself( .@maram4$ );
|
||||
setpcblock PCBLOCK_NPC, false;
|
||||
|
||||
disablenpc .@maggi4$;
|
||||
disablenpc .@mark4$;
|
||||
disablenpc .@tamarin4$;
|
||||
@@ -366,43 +341,43 @@ OnMobDead:
|
||||
1@oz,156,272,5 duplicate(dummy_disabled_npc) Ash Toad#ozmd1 EP18_ASH_TOAD
|
||||
1@oz,164,272,3 duplicate(dummy_disabled_npc) Ash Toad#ozmd2 EP18_ASH_TOAD
|
||||
1@oz,153,275,5 duplicate(dummy_disabled_npc) Ash Toad#ozmd3 EP18_ASH_TOAD
|
||||
1@oz,155,275,3 duplicate(dummy_disabled_npc) Magi#ozmd4 4_4JOB_MAGGI
|
||||
1@oz,155,275,3 duplicate(dummy_disabled_npc) Maggi#ozmd4 4_4JOB_MAGGI
|
||||
1@oz,156,274,3 duplicate(dummy_disabled_npc) Mark#ozmd4 4_EP18_MARK
|
||||
1@oz,161,272,5 duplicate(dummy_disabled_npc) Tamarin#ozmd4 4_EP18_TAMARIN
|
||||
|
||||
1@oz,162,275,3 duplicate(dummy_npc) Maram#ozmd4 4_EP18_MARAM
|
||||
1@oz,162,275,3 duplicate(dummy_cloaked_npc) Maram#ozmd4 4_EP18_MARAM
|
||||
|
||||
|
||||
// Step 6
|
||||
1@oz,98,172,3 script Maram#ozmd5 EP18_NPC_MARAM,{
|
||||
1@oz,98,172,3 script(DISABLED) Maram#ozmd5 EP18_NPC_MARAM,{
|
||||
if ('event_oz != 5)
|
||||
end;
|
||||
'event_oz = 6;
|
||||
.@miriam$ = instance_npcname("Miriam#ozmd5");
|
||||
.@maram$ = instance_npcname("Maram#ozmd5");
|
||||
|
||||
npctalk "Maram: It wasn't like this before, but as the ground below begins to melt, perhaps due to the effects of Mount Tor, more monsters are appearing.", .@maram$;
|
||||
cloakoffnpcself( "Maggi#ozmd5" );
|
||||
cloakoffnpcself( "Mark#ozmd5" );
|
||||
cloakoffnpcself( "Tamarin#ozmd5" );
|
||||
enablenpc .@miriam$;
|
||||
enablenpc instance_npcname("Magi#ozmd5");
|
||||
enablenpc instance_npcname("Mark#ozmd5");
|
||||
enablenpc instance_npcname("Tamarin#ozmd5");
|
||||
npctalk "Maram: It wasn't like this before, but maybe it's the effect of Tor Volcano, as the ground below starts to melt, so more monsters are appearing.";
|
||||
setpcblock PCBLOCK_NPC, true;
|
||||
sleep2 2000;
|
||||
npctalk "Maram: Especially in areas with a lot of molten ground, when trying to avoid monsters, the lava Because there are many people who are seriously injured or never come back... ";
|
||||
npctalk "Maram: Especially in areas where the ground has melted a lot, there are many people who try to avoid monsters and end up seriously injured or unable to return due to the lava...", .@maram$;
|
||||
sleep2 2000;
|
||||
npctalk "Maram: How long will the maze of Oz last...";
|
||||
npctalk "Maram: How long will the maze of Oz endure...", .@maram$;
|
||||
sleep2 3000;
|
||||
mapannounce 'map_name$, "??? : ugh!!!!!!!!!!!!!!!!!!!", bc_map, 0x00B7EE,FW_NORMAL,16;
|
||||
mapannounce 'map_name$, "??? : Ugh!!!!!", bc_map, 0x00B7EE,FW_NORMAL,16;
|
||||
sleep2 2000;
|
||||
npctalk "Maram: This voice?!?!?!?!?";
|
||||
npctalk "Maram: What is this voice?!?!?!?!?", .@maram$;
|
||||
sleep2 2000;
|
||||
npctalk "Miriam: Imril!!!!", .@miriam$;
|
||||
sleep2 2000;
|
||||
setpcblock PCBLOCK_NPC, false;
|
||||
npctalk "Maram: I think your friend is in trouble! I'll go first, so please follow me carefully!";
|
||||
disablenpc instance_npcname("Magi#ozmd5");
|
||||
disablenpc instance_npcname("Mark#ozmd5");
|
||||
disablenpc instance_npcname("Tamarin#ozmd5");
|
||||
npctalk "Maram: I think my friend is in trouble! I'll go first, so be careful and follow me!", .@maram$;
|
||||
cloakonnpcself( "Maggi#ozmd5" );
|
||||
cloakonnpcself( "Mark#ozmd5" );
|
||||
cloakonnpcself( "Tamarin#ozmd5" );
|
||||
unitwalk getnpcid(0),68,165, .@maram$ + "::OnMove";
|
||||
donpcevent .@miriam$ + "::OnMove";
|
||||
end;
|
||||
@@ -413,33 +388,33 @@ OnMove:
|
||||
end;
|
||||
}
|
||||
|
||||
1@oz,97,167,3 script Miriam#ozmd5 EP18_NPC_MIRIAM,{
|
||||
1@oz,97,167,3 script(DISABLED) Miriam#ozmd5 EP18_NPC_MIRIAM,{
|
||||
end;
|
||||
OnMove:
|
||||
npcwalkto 67,164;
|
||||
end;
|
||||
}
|
||||
|
||||
1@oz,92,170,3 duplicate(dummy_npc) Magi#ozmd5 4_4JOB_MAGGI
|
||||
1@oz,91,169,3 duplicate(dummy_npc) Mark#ozmd5 4_EP18_MARK
|
||||
1@oz,89,170,5 duplicate(dummy_npc) Tamarin#ozmd5 4_EP18_TAMARIN
|
||||
1@oz,92,170,3 duplicate(dummy_cloaked_npc) Maggi#ozmd5 4_4JOB_MAGGI
|
||||
1@oz,91,169,3 duplicate(dummy_cloaked_npc) Mark#ozmd5 4_EP18_MARK
|
||||
1@oz,89,170,5 duplicate(dummy_cloaked_npc) Tamarin#ozmd5 4_EP18_TAMARIN
|
||||
|
||||
|
||||
|
||||
// Step 7
|
||||
1@oz,68,165,3 script Maram#ozmd7 4_EP18_MARAM,{
|
||||
1@oz,68,165,3 script(DISABLED) Maram#ozmd7 4_EP18_MARAM,{
|
||||
if ('event_oz != 6)
|
||||
end;
|
||||
'event_oz = 7;
|
||||
npctalk "Maram: Are you okay, Imril?";
|
||||
npctalk "Maram: Imril are you okay?";
|
||||
donpcevent instance_npcname("Imril#ozmd6") + "::OnStart";
|
||||
disablenpc instance_npcname("Maram#ozmd7");
|
||||
disablenpc();
|
||||
end;
|
||||
}
|
||||
|
||||
|
||||
// Step 8
|
||||
1@oz,61,163,5 script Imril#ozmd6 4_EP18_IMRIL,{
|
||||
1@oz,61,163,5 script(DISABLED) Imril#ozmd6 4_EP18_IMRIL,{
|
||||
end;
|
||||
|
||||
OnStart:
|
||||
@@ -460,56 +435,57 @@ OnMobDead:
|
||||
.@maram8$ = instance_npcname("Maram#ozmd8");
|
||||
.@imril6$ = instance_npcname("Imril#ozmd6");
|
||||
.@miriam5$ = instance_npcname("Miriam#ozmd5");
|
||||
.@maggi6$ = instance_npcname("Magi#ozmd6");
|
||||
.@maggi6$ = instance_npcname("Maggi#ozmd6");
|
||||
.@mark6$ = instance_npcname("Mark#ozmd6");
|
||||
.@tamarin6$ = instance_npcname("Tamarin#ozmd6");
|
||||
|
||||
setpcblock PCBLOCK_NPC, true;
|
||||
enablenpc .@maram8$;
|
||||
npctalk "Imril: Thanks! We almost died!", .@imril6$;
|
||||
|
||||
cloakoffnpcself( .@maram8$ );
|
||||
npctalk "Imril: Thank you! I almost died!", .@imril6$;
|
||||
sleep2 2000;
|
||||
npctalk "Imril: Don't go downstairs because the atmosphere isn't too bad.", .@imril6$;
|
||||
npctalk "Imril: The atmosphere is unusual, so don't go downstairs.", .@imril6$;
|
||||
sleep2 2000;
|
||||
npctalk "Miriam: You seem to see monsters more often than last time.", .@miriam5$;
|
||||
npctalk "Miriam: It seems like I see monsters more often than last time.", .@miriam5$;
|
||||
sleep2 2000;
|
||||
npctalk "Imril: But what about those people?", .@imril6$;
|
||||
enablenpc .@maggi6$;
|
||||
enablenpc .@mark6$;
|
||||
enablenpc .@tamarin6$;
|
||||
npctalk "Imril: And what about those people?", .@imril6$;
|
||||
cloakoffnpcself( .@maggi6$ );
|
||||
cloakoffnpcself( .@mark6$ );
|
||||
cloakoffnpcself( .@tamarin6$ );
|
||||
sleep2 2000;
|
||||
npctalk "Maram: They are adventurers who sometimes help with mother's work.", .@maram8$;
|
||||
npctalk "Maram: They are adventurers who sometimes help my mother with her work.", .@maram8$;
|
||||
sleep2 2000;
|
||||
npctalk "Maram: Trustworthy people, don't be so wary.", .@maram8$;
|
||||
npctalk "Maram: These are trustworthy people, so don't be so wary.", .@maram8$;
|
||||
sleep2 2000;
|
||||
npctalk "Imril: Because you trust people too easily.", .@imril6$;
|
||||
npctalk "Imril: I heard you trust people too easily.", .@imril6$;
|
||||
sleep2 2000;
|
||||
npctalk "Miriam: Yes.", .@miriam5$;
|
||||
sleep2 2000;
|
||||
npctalk "Maram: Anyway, let's escape before more monsters come out.", .@maram8$;
|
||||
npctalk "Maram: Anyway, let's escape quickly before more monsters appear.", .@maram8$;
|
||||
sleep2 2000;
|
||||
npctalk "Maram: Not long left.", .@maram8$;
|
||||
npctalk "Maram: Not much left.", .@maram8$;
|
||||
sleep2 2000;
|
||||
npctalk "Maram: It's hard to see, but just follow the road up here!", .@maram8$;
|
||||
npctalk "Maram: It's hard to see, but you can follow the road up here and keep moving!", .@maram8$;
|
||||
sleep2 2000;
|
||||
npctalk "Tamarin: I think this is the way!", .@tamarin6$;
|
||||
disablenpc .@maggi6$;
|
||||
disablenpc .@mark6$;
|
||||
disablenpc .@tamarin6$;
|
||||
disablenpc .@maram8$;
|
||||
cloakonnpcself( .@maggi6$ );
|
||||
cloakonnpcself( .@mark6$ );
|
||||
cloakonnpcself( .@tamarin6$ );
|
||||
cloakonnpcself( .@maram8$ );
|
||||
enablenpc instance_npcname("#oz_way");
|
||||
setpcblock PCBLOCK_NPC, false;
|
||||
end;
|
||||
}
|
||||
|
||||
1@oz,68,165,3 duplicate(dummy_npc) Maram#ozmd8 4_EP18_MARAM
|
||||
1@oz,61,168,3 duplicate(dummy_npc) Magi#ozmd6 4_4JOB_MAGGI
|
||||
1@oz,65,167,3 duplicate(dummy_npc) Mark#ozmd6 4_EP18_MARK
|
||||
1@oz,59,171,3 duplicate(dummy_npc) Tamarin#ozmd6 4_EP18_TAMARIN
|
||||
1@oz,68,165,3 duplicate(dummy_cloaked_npc) Maram#ozmd8 4_EP18_MARAM
|
||||
1@oz,61,168,3 duplicate(dummy_cloaked_npc) Maggi#ozmd6 4_4JOB_MAGGI
|
||||
1@oz,65,167,3 duplicate(dummy_cloaked_npc) Mark#ozmd6 4_EP18_MARK
|
||||
1@oz,59,171,3 duplicate(dummy_cloaked_npc) Tamarin#ozmd6 4_EP18_TAMARIN
|
||||
|
||||
|
||||
|
||||
// Step 9
|
||||
1@oz,58,256,5 script #oz_way 1_SHADOW_NPC,3,3,{
|
||||
1@oz,58,256,5 script(DISABLED) #oz_way 1_SHADOW_NPC,3,3,{
|
||||
end;
|
||||
OnTouch:
|
||||
if ('event_oz != 8)
|
||||
@@ -520,11 +496,11 @@ OnTouch:
|
||||
}
|
||||
|
||||
// Step 10 (maybe not required ?)
|
||||
1@oz,44,255,5 script Maram#ozmd6 4_EP18_MARAM,{
|
||||
1@oz,44,255,5 script(DISABLED) Maram#ozmd6 4_EP18_MARAM,{
|
||||
if ('event_oz != 9)
|
||||
end;
|
||||
'event_oz = 10;
|
||||
npctalk "Maram: This way!!!";
|
||||
npctalk "Maram: Go down this road.";
|
||||
initnpctimer;
|
||||
end;
|
||||
OnTimer2000:
|
||||
@@ -536,7 +512,7 @@ OnTimer2000:
|
||||
|
||||
// Step 11
|
||||
// (Step 29 on the main quest).
|
||||
1@oz,21,189,5 script Maram#ozmd9 4_EP18_MARAM,{
|
||||
1@oz,21,189,5 script(DISABLED) Maram#ozmd9 4_EP18_MARAM,{
|
||||
if ('event_oz != 10)
|
||||
end;
|
||||
'event_oz = 11;
|
||||
@@ -546,50 +522,47 @@ OnTimer2000:
|
||||
.@imril7$ = instance_npcname("Imril#ozmd7");
|
||||
|
||||
setpcblock PCBLOCK_NPC, true;
|
||||
npctalk "Maram: Climb up the rope in front of this to get out.", .@maram9$;
|
||||
enablenpc .@miriam7$;
|
||||
enablenpc .@imril7$;
|
||||
npctalk "Maram: If you climb up the rope in front of here, you can go outside.", .@maram9$;
|
||||
cloakoffnpcself( .@miriam7$ );
|
||||
cloakoffnpcself( .@imril7$ );
|
||||
sleep2 2000;
|
||||
npctalk "Imril: I'll go get some hidden stuff here, so go up first.", .@imril7$;
|
||||
npctalk "Imril: I'll take some hidden items here, so go up first.", .@imril7$;
|
||||
sleep2 2000;
|
||||
npctalk "Miriam: Everyone is very tired. Let's go upstairs.", .@miriam7$;
|
||||
if (ep18_1_main == 30) {
|
||||
changequest 11719,11720;
|
||||
ep18_1_main = 31;
|
||||
npctalk "Miriam: Everyone is very tired. Let's go up quickly.", .@miriam7$;
|
||||
if (ep18_main == 30) {
|
||||
erasequest 11719;
|
||||
setquest 11720;
|
||||
ep18_main = 31;
|
||||
}
|
||||
disablenpc .@miriam7$;
|
||||
disablenpc .@imril7$;
|
||||
cloakonnpcself( .@miriam7$ );
|
||||
cloakonnpcself( .@imril7$ );
|
||||
setpcblock PCBLOCK_NPC, false;
|
||||
end;
|
||||
|
||||
OnInstanceInit:
|
||||
disablenpc instance_npcname("Maram#ozmd9");
|
||||
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(11719) == 1" );
|
||||
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(11719) == 1" );
|
||||
end;
|
||||
}
|
||||
|
||||
1@oz,22,187,5 duplicate(dummy_npc) Miriam#ozmd7 4_EP18_MIRIAM
|
||||
1@oz,16,185,3 duplicate(dummy_npc) Imril#ozmd7 4_EP18_IMRIL
|
||||
1@oz,22,187,5 duplicate(dummy_cloaked_npc) Miriam#ozmd7 4_EP18_MIRIAM
|
||||
1@oz,16,185,3 duplicate(dummy_cloaked_npc) Imril#ozmd7 4_EP18_IMRIL
|
||||
|
||||
|
||||
// Step 12
|
||||
1@oz,28,190,3 script(DISABLED) Rope#outoz2 4_ROPEPILE,{
|
||||
if ('event_oz < 11)
|
||||
end;
|
||||
mes "I think I can climb up with a rope.";
|
||||
next;
|
||||
switch( select( "Use a rope to climb", "Do not use" ) ) {
|
||||
case 1:
|
||||
close2;
|
||||
warp "gw_fild01",275,337;
|
||||
end;
|
||||
case 2:
|
||||
end;
|
||||
if ('event_oz != 11) {
|
||||
mes "It can't be used yet. Let's talk to Maram first.";
|
||||
close;
|
||||
}
|
||||
mes "I think I can climb up using the rope.";
|
||||
next;
|
||||
if (select( "Use the rope to climb up.", "Do not use." ) == 2)
|
||||
end;
|
||||
warp "gw_fild01",275,337;
|
||||
end;
|
||||
|
||||
OnInstanceInit:
|
||||
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(11720) == 1" );
|
||||
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(11720) == 1" );
|
||||
end;
|
||||
}
|
||||
|
||||
@@ -601,7 +574,7 @@ OnTouch_:
|
||||
getmapxy .@map$,.@x,.@y, BL_NPC;
|
||||
monster 'map_name$,.@x-1,.@y,"Ash Toad",21295,1; // EP18_ASH_TOAD
|
||||
monster 'map_name$,.@x+1,.@y,"Rake Hand",21296,1; // EP18_RAKEHAND
|
||||
disablenpc instance_npcname( strnpcinfo(0) );
|
||||
cloakonnpcself();
|
||||
end;
|
||||
}
|
||||
|
||||
@@ -612,4 +585,3 @@ OnTouch_:
|
||||
1@oz,79,203,5 duplicate(#oz01) #oz06 1_SHADOW_NPC,4,4
|
||||
1@oz,124,261,5 duplicate(#oz01) #oz07 1_SHADOW_NPC,4,4
|
||||
1@oz,139,279,5 duplicate(#oz01) #oz08 1_SHADOW_NPC,4,4
|
||||
|
||||
|
||||
@@ -163,7 +163,7 @@ glast_01,204,273,5 script Hugin 4_M_SAGE_C,{
|
||||
1@gl_k,206,79,0 warp #3Control2 2,2,1@gl_k,195,79
|
||||
1@gl_k,227,216,0 warp #4Control 2,2,1@gl_k,215,216
|
||||
1@gl_k,222,216,0 warp #4Control2 2,2,1@gl_k,233,216
|
||||
1@gl_k,150,284,0 warp #2F Entrance 2,2,2@gl_k,150,46
|
||||
// 1@gl_k,150,284,0 warp #2F Entrance 2,2,2@gl_k,150,46
|
||||
2@gl_k,149,32,0 warp #1 Control 2,2,1@gl_k,150,270
|
||||
2@gl_k,145,123,0 warp #22 Control 2,2,2@gl_k,126,123
|
||||
2@gl_k,136,122,0 warp #22 Control2 2,2,2@gl_k,150,116
|
||||
@@ -188,8 +188,8 @@ glast_01,204,273,5 script Hugin 4_M_SAGE_C,{
|
||||
next;
|
||||
if (select( "Omit moderately.", "Appreciate everything." ) == 1) {
|
||||
cutin "GL_BARMUND1.bmp",2;
|
||||
mes "[Barmund]";
|
||||
mes "Have I seen you " + strcharinfo(0) + "";
|
||||
mes "[Varmundt]";
|
||||
mes "I've seen you, " + strcharinfo(0) + ".";
|
||||
mes "I'm sure I can trust you. Let's leave right away.";
|
||||
close2;
|
||||
cutin "",255;
|
||||
@@ -1073,8 +1073,13 @@ OnTimer5000:
|
||||
close3;
|
||||
}
|
||||
|
||||
// note: never hidden
|
||||
1@gl_k,156,258,3 script Varmundt#2 4_M_BARMUND,{
|
||||
if ('step < 6)
|
||||
end;
|
||||
if (checkweight(6607,1, 6608,1) == 0) {
|
||||
mes "^ff0000It seems like you have too many types or weights of items. Please organize your inventory.^000000";
|
||||
close;
|
||||
}
|
||||
cutin "gl_barmund1",2;
|
||||
mes "[Varmundt]";
|
||||
if (checkquest(12318,HUNTING) != 2) {
|
||||
@@ -1216,10 +1221,24 @@ OnMyMobDead:
|
||||
enablenpc instance_npcname("Varmundt#21");
|
||||
donpcevent instance_npcname("#ghmemorialmob05") + "::OnStart";
|
||||
disablenpc instance_npcname("#ghmemorialmob04");
|
||||
'step = 6;
|
||||
}
|
||||
end;
|
||||
}
|
||||
|
||||
1@gl_k,150,284,0 script #2F Entrance WARPNPC,2,2,{
|
||||
end;
|
||||
OnTouch:
|
||||
if (checkquest(12318,HUNTING) == 2) {
|
||||
mes "^0000ffIt seems that you did not receive a reward for clearing the first floor. Talk to Varmundt and receive your reward.^000000";
|
||||
close2;
|
||||
warp 'map_name$[0],156,256;
|
||||
end;
|
||||
}
|
||||
warp 'map_name$[1],150,46;
|
||||
end;
|
||||
}
|
||||
|
||||
// Floor 2
|
||||
//============================================================
|
||||
2@gl_k,148,67,1 script Heinrich#21 4_M_HEINRICH,{
|
||||
@@ -1246,9 +1265,9 @@ OnEffect:
|
||||
2@gl_k,150,66,0 script #Servanton HIDDEN_WARP_NPC,7,7,{
|
||||
end;
|
||||
OnTouch_:
|
||||
if ('step != 5)
|
||||
if ('step != 6)
|
||||
end;
|
||||
'step = 6;
|
||||
'step = 7;
|
||||
disablenpc();
|
||||
if ('mode == 1)
|
||||
donpcevent instance_npcname("#talkinstance5") + "::OnStart";
|
||||
@@ -1372,16 +1391,18 @@ OnTouch_:
|
||||
disablenpc();
|
||||
.@hidden_name$ = strnpcinfo(2);
|
||||
.@event_type = atoi( charat(.@hidden_name$,4) );
|
||||
.@event_number = atoi( charat(.@hidden_name$,6) );
|
||||
if (.@event_type == 2)
|
||||
.@label$ = instance_npcname("#ghmemorialmob05") + "::OnMyMobDead";
|
||||
.@event$ = instance_npcname("#ghmemorialmob05") + "::OnMyMobDead" + .@event_number; // left side
|
||||
else
|
||||
.@label$ = instance_npcname("#ghmemorialmob06") + "::OnMyMobDead";
|
||||
.@event$ = instance_npcname("#ghmemorialmob06") + "::OnMyMobDead" + .@event_number; // right side
|
||||
killmonster 'map_name$[1], .@event$;
|
||||
getmapxy .@map$,.@x,.@y, BL_NPC;
|
||||
monster .@map$,.@x,.@y, "Corrupted Palace Guard", 2468,1, .@label$;
|
||||
monster .@map$,.@x,.@y, "Archer of Death", 2469,1, .@label$;
|
||||
monster .@map$,.@x,.@y, "Corrupted Abysmal Knight", 2470,1, .@label$;
|
||||
monster .@map$,.@x,.@y, "Suffered Khalitzburg", 2471,1, .@label$;
|
||||
monster .@map$,.@x,.@y, "Bloody Knight", 2472,1, .@label$;
|
||||
monster .@map$,.@x,.@y, "Corrupted Palace Guard", 2468,1, .@event$;
|
||||
monster .@map$,.@x,.@y, "Archer of Death", 2469,1, .@event$;
|
||||
monster .@map$,.@x,.@y, "Corrupted Abysmal Knight", 2470,1, .@event$;
|
||||
monster .@map$,.@x,.@y, "Suffered Khalitzburg", 2471,1, .@event$;
|
||||
monster .@map$,.@x,.@y, "Bloody Knight", 2472,1, .@event$;
|
||||
initnpctimer;
|
||||
end;
|
||||
OnTimer30000:
|
||||
@@ -1417,7 +1438,13 @@ OnStart:
|
||||
enablenpc instance_npcname("#ogh_2-" + .@i);
|
||||
end;
|
||||
|
||||
OnMyMobDead:
|
||||
OnMyMobDead1:
|
||||
OnMyMobDead2:
|
||||
OnMyMobDead3:
|
||||
OnMyMobDead4:
|
||||
OnMyMobDead5:
|
||||
OnMyMobDead6:
|
||||
OnMyMobDead7:
|
||||
if (mobcount('map_name$[1], instance_npcname("#ghmemorialmob05") + "::OnBossDead") > 0) // Prevent boss re-spawn
|
||||
end;
|
||||
if ('mode == 2) // Higher (but unknown) spawn rate in fast mode
|
||||
@@ -1445,7 +1472,9 @@ OnBossDead:
|
||||
for ( .@i = 1; .@i <= 7; .@i++ )
|
||||
donpcevent instance_npcname("#ogh_2-" + .@i) + "::OnStop";
|
||||
|
||||
killmonster 'map_name$[1], instance_npcname("#ghmemorialmob05") + "::OnMyMobDead";
|
||||
.@npc_name$ = instance_npcname("#ghmemorialmob05");
|
||||
for ( .@i = 1; .@i <= 7; .@i++ )
|
||||
killmonster 'map_name$[1], .@npc_name$ + "::OnMyMobDead" + .@i;
|
||||
end;
|
||||
}
|
||||
|
||||
@@ -1506,6 +1535,13 @@ OnStart:
|
||||
end;
|
||||
|
||||
OnMyMobDead:
|
||||
OnMyMobDead1:
|
||||
OnMyMobDead2:
|
||||
OnMyMobDead3:
|
||||
OnMyMobDead4:
|
||||
OnMyMobDead5:
|
||||
OnMyMobDead6:
|
||||
OnMyMobDead7:
|
||||
if (mobcount('map_name$[1], instance_npcname("#ghmemorialmob06") + "::OnBossDead") > 0) // Prevent boss re-spawn
|
||||
end;
|
||||
if ('mode == 2) // Higher (but unknown) spawn rate in fast mode
|
||||
@@ -1535,7 +1571,10 @@ OnBossDead:
|
||||
for ( .@i = 1; .@i <= 7; .@i++ )
|
||||
donpcevent instance_npcname("#ogh_3-" + .@i) + "::OnStop";
|
||||
|
||||
killmonster 'map_name$[1], instance_npcname("#ghmemorialmob06") + "::OnMyMobDead";
|
||||
.@npc_name$ = instance_npcname("#ghmemorialmob06");
|
||||
killmonster 'map_name$[1], .@npc_name$ + "::OnMyMobDead";
|
||||
for ( .@i = 1; .@i <= 7; .@i++ )
|
||||
killmonster 'map_name$[1], .@npc_name$ + "::OnMyMobDead" + .@i;
|
||||
|
||||
// Hidden mobs
|
||||
setarray .@coord[0],
|
||||
@@ -1552,9 +1591,9 @@ OnBossDead:
|
||||
2@gl_k,150,180,0 script #Geron HIDDEN_WARP_NPC,7,7,{
|
||||
end;
|
||||
OnTouch_:
|
||||
if ('step != 6)
|
||||
if ('step != 7)
|
||||
end;
|
||||
'step = 7;
|
||||
'step = 8;
|
||||
disablenpc instance_npcname("#Geron");
|
||||
mapannounce 'map_name$[1], "???: Do not come here! It's a trap... Kkkkah!!!", bc_map,0xFF7777,FW_NORMAL,15;
|
||||
enablenpc instance_npcname("Himelmez#22");
|
||||
@@ -1574,15 +1613,19 @@ OnTouch_:
|
||||
else if (.@i == 3) .@mobs = 5;
|
||||
else if (.@i < 7) .@mobs = 6;
|
||||
else .@mobs = 7;
|
||||
.@event$ = instance_npcname( strnpcinfo(0) ) + "::OnMobDead";
|
||||
killmonster 'map_name$[1], .@event$;
|
||||
getmapxy .@map$,.@x,.@y, BL_NPC;
|
||||
specialeffect EF_VENOMDUST;
|
||||
monster .@map$,.@x,.@y,"Maggot",2467,.@mobs;
|
||||
monster .@map$,.@x,.@y,"Maggot",2467,.@mobs, .@event$;
|
||||
initnpctimer;
|
||||
end;
|
||||
OnTimer45000:
|
||||
enablenpc();
|
||||
stopnpctimer;
|
||||
end;
|
||||
OnMobDead:
|
||||
end;
|
||||
}
|
||||
2@gl_k,145,236,4 duplicate(Decomposed body#1) Decomposed body#2 4_M_DIEMAN,5,5
|
||||
2@gl_k,141,222,2 duplicate(Decomposed body#1) Decomposed body#3 4_M_DIEMAN,5,5
|
||||
@@ -1646,9 +1689,9 @@ OnTimer45000:
|
||||
mes "That is amazing ~ you made it all the way here. May I say thank you?";
|
||||
close3;
|
||||
OnTouch_:
|
||||
if ('step != 7)
|
||||
if ('step != 8)
|
||||
end;
|
||||
'step = 8;
|
||||
'step = 9;
|
||||
disablenpc();
|
||||
if ('mode == 1)
|
||||
donpcevent instance_npcname("#talkinstance7") + "::OnStart";
|
||||
@@ -1972,9 +2015,13 @@ OnTimer10000:
|
||||
|
||||
|
||||
2@gl_k,158,241,1 script Hugin#21 4_M_SAGE_C,{
|
||||
if ('step != 8)
|
||||
if ('step != 9)
|
||||
end;
|
||||
if (checkquest(12319,HUNTING) == 2) {// note: complete hunting 'Corrupted Soul Hunt' prerequis
|
||||
if (checkweight(6607,5, 6608,5) == 0) {
|
||||
mes "^ff0000It seems like you have too many types or weights of items. Please organize your inventory.^000000";
|
||||
close;
|
||||
}
|
||||
mes "[Hugin]";
|
||||
mes "Hm, you are very well. First of all, let me give you some loot from Amdarais.";
|
||||
erasequest 12319;
|
||||
@@ -2031,7 +2078,7 @@ OnTimer10000:
|
||||
// Treasure Room
|
||||
//============================================================
|
||||
1@gl_k,165,136,3 script Strange crack#2 CLEAR_NPC,{
|
||||
if ('step != 8)
|
||||
if ('step != 9)
|
||||
end;
|
||||
if (isbegin_quest(12322) == 0) {// Space Distortion
|
||||
mes "The crack looks suspicious but nothing more to check.";
|
||||
|
||||
@@ -2,54 +2,56 @@
|
||||
//= Instance: Thor Gunsu Base.
|
||||
//===== Description: =========================================
|
||||
//- [Walkthrough conversion]
|
||||
//- Part of the episode 18.1 main quest.
|
||||
//- Part of the Episode 18 main quest.
|
||||
//===== Changelogs: ==========================================
|
||||
//= 1.0 First version. [Capuche]
|
||||
//============================================================
|
||||
|
||||
// Main Quest: Step 47.
|
||||
que_thr,133,53,5 script Maram#Armybase1 4_EP18_MARAM,{
|
||||
if (ep18_1_main != 45 && ep18_1_main != 46)
|
||||
if (ep18_main < 45 || ep18_main > 46)
|
||||
end;
|
||||
if (ep18_1_main == 45) {
|
||||
if (ep18_main == 45) {
|
||||
cutin "ep18_maram_01.png",2;
|
||||
mes "[Maram]";
|
||||
mes "You have arrived, adventurer!";
|
||||
mes "You did a great job getting here.";
|
||||
mes "You've arrived, adventurer!";
|
||||
mes "Thank you for coming all the way here.";
|
||||
next;
|
||||
cutin "ep18_maram_03.png",2;
|
||||
mes "[Maram]";
|
||||
mes "After all, it looks like this next one is real. The guards are different from before...";
|
||||
mes "Let's look inside, being careful not to be caught by the guards.";
|
||||
mes "It seems like this is the real deal after all. The security here is different from what it has been so far....";
|
||||
mes "Let's be careful not to be caught by the guards and explore the inside.";
|
||||
next;
|
||||
cutin "ep18_maram_01.png",2;
|
||||
mes "[Maram]";
|
||||
mes "Make sure to move out of sight of the guards as much as possible.";
|
||||
mes "If you make a mistake, you will be attacked, so if you don't break through, we'll meet again here.";
|
||||
changequest 16577,16578;
|
||||
ep18_1_main = 46;
|
||||
mes "Try to move away from the security guard's line of sight as much as possible.";
|
||||
mes "If you get caught, you might be attacked, so if you can't break through, we'll meet again here.";
|
||||
erasequest 16577;
|
||||
setquest 16578;
|
||||
ep18_main = 46;
|
||||
next;
|
||||
}
|
||||
else if (ep18_1_main == 46) {
|
||||
else if (ep18_main == 46) {
|
||||
cutin "ep18_maram_01.png",2;
|
||||
mes "[Maram]";
|
||||
mes "Let's try to get in as far as possible from the guard tower.";
|
||||
mes "Let's try to go in while avoiding the guard tower as much as possible.";
|
||||
next;
|
||||
}
|
||||
|
||||
.@md_name$ = "Thor Gunsu Base";
|
||||
.@md_name$ = "Thor Military Base";
|
||||
cutin "",255;
|
||||
mes "^FF0000 Any arbitrary processing such as taming monsters in the dungeon is not considered normal. Please note.^000000";
|
||||
mes "^FF0000Caution : If you perform arbitrary processing within the dungeon, such as monster taming, it will not be considered normal progress.^000000";
|
||||
next;
|
||||
// player has party
|
||||
if (is_party_leader()) {
|
||||
if (is_party_leader())
|
||||
// player is leader of the party
|
||||
.@create$ = "Open " + .@md_name$;
|
||||
}
|
||||
switch( select( .@create$, .@md_name$ + " entry" ) ) {
|
||||
.@create$ = "Apply for entry to " + .@md_name$ + "";
|
||||
|
||||
switch( select( .@create$, "Enter " + .@md_name$ + "" ) ) {
|
||||
case 1:
|
||||
cutin "ep18_maram_01.png",2;
|
||||
mes "[Maram]";
|
||||
mes "When the application is complete, talk to me again and select ^0000CD Thor military base entry^000000";
|
||||
mes "When the application is complete, talk to me again and select ^0000CD" + .@md_name$ + " entry^000000";
|
||||
if (instance_create(.@md_name$) < 0) {
|
||||
mes "Party: " + getpartyname(getcharid(1)) + "";
|
||||
mes "Leader: " + strcharinfo(0) + "";
|
||||
@@ -67,14 +69,14 @@ que_thr,133,53,5 script Maram#Armybase1 4_EP18_MARAM,{
|
||||
case IE_NOINSTANCE:
|
||||
cutin "ep18_maram_01.png",2;
|
||||
mes "[Maram]";
|
||||
mes "I don't think the dungeon has been created yet? Please check later.";
|
||||
mes "It seems like you haven't created the dungeon yet. Please check again in a moment.";
|
||||
close3;
|
||||
case IE_NOMEMBER:
|
||||
mes "[Maram]";
|
||||
mes "^ff0000Only a member of the party can enter the Memorial Dungeon.^000000";
|
||||
close;
|
||||
case IE_OK:
|
||||
mapannounce "que_thr", "" + strcharinfo(0) + " of the party, " + getpartyname( getcharid(1) ) + ", is entering " + .@md_name$ + ".",bc_map,"0x00ff99",FW_NORMAL,12;
|
||||
mapannounce "que_thr", "" + strcharinfo(0) + " of the party, " + getpartyname( getcharid(1) ) + ", is entering " + .@md_name$ + ".", bc_map, 0xFF99;
|
||||
// warp 1@tcamp,103,237;
|
||||
end;
|
||||
}
|
||||
@@ -82,34 +84,24 @@ que_thr,133,53,5 script Maram#Armybase1 4_EP18_MARAM,{
|
||||
end;
|
||||
|
||||
OnInit:
|
||||
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(16577) == 1" );
|
||||
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(16577) == 1" );
|
||||
end;
|
||||
}
|
||||
|
||||
1@tcamp,106,237,3 script Maram#base1 4_EP18_MARAM,{
|
||||
cutin "ep18_maram_01.png",2;
|
||||
1@tcamp,106,237,3 script Maram#Base1 4_EP18_MARAM,{
|
||||
mes "[Maram]";
|
||||
mes "Be careful and explore the inside.";
|
||||
mes "I heard from Mr. Dandelion earlier, there aren't many people, but there are Watch Towers here and there that monitor a fairly wide area.";
|
||||
mes "Be careful and explore inside.";
|
||||
mes "From what I heard from Dandelion earlier, there aren't many people, but there are watchtowers here and there that monitor a fairly wide area.";
|
||||
next;
|
||||
mes "[Maram]";
|
||||
mes "If you get caught by the Watch Tower, soldiers will appear, so be careful not to get caught.";
|
||||
mes "Well, if you find something, please contact me!";
|
||||
close3;
|
||||
mes "If you get caught by the watchtower, soldiers will appear, so be careful not to get caught.";
|
||||
mes "Well, if you find anything, please contact me!";
|
||||
close;
|
||||
|
||||
OnInstanceInit:
|
||||
'step = 0;
|
||||
'map_tcamp$ = instance_mapname("1@tcamp");
|
||||
|
||||
disablenpc instance_npcname("Document Pile#Site1");
|
||||
disablenpc instance_npcname("Document Pile#Site2");
|
||||
disablenpc instance_npcname("Document Pile#Site3");
|
||||
disablenpc instance_npcname("Document Pile#Site4");
|
||||
disablenpc instance_npcname("Document Pile#Site5");
|
||||
disablenpc instance_npcname("Maram#Lock1");
|
||||
disablenpc instance_npcname("Maram#Lock2");
|
||||
disablenpc instance_npcname("Maram#Lock3");
|
||||
disablenpc instance_npcname("Maram#Lock4");
|
||||
|
||||
setcell 'map_tcamp$,137,216,142,216,cell_walkable,0;
|
||||
setcell 'map_tcamp$,135,145,144,145,cell_walkable,0;
|
||||
setcell 'map_tcamp$,223,105,223,110,cell_walkable,0;
|
||||
@@ -128,11 +120,11 @@ OnInstanceInit:
|
||||
//-------------------------------------------------------------------
|
||||
// Traps
|
||||
//-------------------------------------------------------------------
|
||||
1@tcamp,120,228,3 script Watch Tower#Watch1 4_SYSTEM_BOX,7,7,{
|
||||
1@tcamp,120,228,3 script Watchtower#Watch1 4_SYSTEM_BOX,7,7,{
|
||||
end;
|
||||
OnTouch: // note: hidden player trigger the event
|
||||
npctalk "Detect intruders. Exclude them.";
|
||||
mapannounce 'map_tcamp$, "Intruder detected, intruder detected. We rule out immediately.", bc_map, 0xFF0000;
|
||||
npctalk "Intruder detected !!";
|
||||
mapannounce 'map_tcamp$, "Intruder found, intruder found. Ruled out immediately.", bc_map, 0xFF0000;
|
||||
getmapxy .@map$,.@x,.@y, BL_NPC;
|
||||
|
||||
areamonster 'map_tcamp$,.@x-2,.@y-2,.@x+2,.@y+2,"Base Soldier",21309,3; // EP18_MD_THOR_GUARD
|
||||
@@ -147,316 +139,338 @@ OnInstanceInit:
|
||||
end;
|
||||
}
|
||||
|
||||
1@tcamp,135,228,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch2 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,152,133,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch3 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,167,133,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch4 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,182,133,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch5 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,161,96,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch6 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,146,96,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch7 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,116,102,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch8 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,88,92,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch9 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,240,148,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch10 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,156,71,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch11 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,176,194,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch12 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,192,194,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch13 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,142,153,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch14 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,142,168,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch15 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,192,179,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch16 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,237,90,3 duplicate(Watch Tower#Watch1) Watch Tower#Watch17 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,135,228,3 duplicate(Watchtower#Watch1) Watchtower#Watch2 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,152,133,3 duplicate(Watchtower#Watch1) Watchtower#Watch3 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,167,133,3 duplicate(Watchtower#Watch1) Watchtower#Watch4 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,182,133,3 duplicate(Watchtower#Watch1) Watchtower#Watch5 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,161,96,3 duplicate(Watchtower#Watch1) Watchtower#Watch6 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,146,96,3 duplicate(Watchtower#Watch1) Watchtower#Watch7 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,116,102,3 duplicate(Watchtower#Watch1) Watchtower#Watch8 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,88,92,3 duplicate(Watchtower#Watch1) Watchtower#Watch9 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,240,148,3 duplicate(Watchtower#Watch1) Watchtower#Watch10 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,156,71,3 duplicate(Watchtower#Watch1) Watchtower#Watch11 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,176,194,3 duplicate(Watchtower#Watch1) Watchtower#Watch12 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,192,194,3 duplicate(Watchtower#Watch1) Watchtower#Watch13 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,142,153,3 duplicate(Watchtower#Watch1) Watchtower#Watch14 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,142,168,3 duplicate(Watchtower#Watch1) Watchtower#Watch15 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,192,179,3 duplicate(Watchtower#Watch1) Watchtower#Watch16 4_SYSTEM_BOX,7,7
|
||||
1@tcamp,237,90,3 duplicate(Watchtower#Watch1) Watchtower#Watch17 4_SYSTEM_BOX,7,7
|
||||
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Walls
|
||||
//-------------------------------------------------------------------
|
||||
1@tcamp,138,216,3 script Lock#1-1 4_ROPEPILE,{
|
||||
.@maram$ = instance_npcname("Maram#Lock1");
|
||||
1@tcamp,138,216,3 script Lock Device#1-1 4_ROPEPILE,{
|
||||
.@maram$ = instance_npcname("Maram#Lock Device1");
|
||||
enablenpc .@maram$;
|
||||
npctalk "Maram: Wait a minute. I know how to open it.", .@maram$;
|
||||
npctalk "Maram: Please wait a moment. I know how to open it.", .@maram$;
|
||||
progressbar_npc "3131FF",10;
|
||||
npctalk "Maram: Now we can pass!", .@maram$;
|
||||
disablenpc instance_npcname("Lock#1-1");
|
||||
disablenpc instance_npcname("Lock#1-2");
|
||||
npctalk "Maram: Well, we can pass now!", .@maram$;
|
||||
disablenpc instance_npcname("Lock Device#1-1");
|
||||
disablenpc instance_npcname("Lock Device#1-2");
|
||||
disablenpc .@maram$;
|
||||
setcell 'map_tcamp$,137,216,142,216,cell_walkable,1;
|
||||
end;
|
||||
}
|
||||
1@tcamp,141,216,3 duplicate(Lock#1-1) Lock#1-2 4_ROPEPILE
|
||||
1@tcamp,140,218,3 duplicate(dummy_npc) Maram#Lock1 4_EP18_MARAM
|
||||
1@tcamp,141,216,3 duplicate(Lock Device#1-1) Lock Device#1-2 4_ROPEPILE
|
||||
1@tcamp,140,218,3 duplicate(dummy_disabled_npc) Maram#Lock Device1 4_EP18_MARAM
|
||||
|
||||
1@tcamp,136,145,3 script Lock#2-1 4_ROPEPILE,{
|
||||
.@maram$ = instance_npcname("Maram#Lock2");
|
||||
1@tcamp,136,145,3 script Lock Device#2-1 4_ROPEPILE,{
|
||||
.@maram$ = instance_npcname("Maram#Lock Device2");
|
||||
enablenpc .@maram$;
|
||||
progressbar_npc "3131FF",10;
|
||||
npctalk "It would be better to proceed with caution.", .@maram$;
|
||||
disablenpc instance_npcname("Lock#2-1");
|
||||
disablenpc instance_npcname("Lock#2-2");
|
||||
disablenpc instance_npcname("Lock#2-3");
|
||||
disablenpc instance_npcname("Lock#2-4");
|
||||
disablenpc instance_npcname("Lock Device#2-1");
|
||||
disablenpc instance_npcname("Lock Device#2-2");
|
||||
disablenpc instance_npcname("Lock Device#2-3");
|
||||
disablenpc instance_npcname("Lock Device#2-4");
|
||||
disablenpc .@maram$;
|
||||
setcell 'map_tcamp$,135,145,144,145,cell_walkable,1;
|
||||
end;
|
||||
}
|
||||
1@tcamp,138,145,3 duplicate(Lock#2-1) Lock#2-2 4_ROPEPILE
|
||||
1@tcamp,141,145,3 duplicate(Lock#2-1) Lock#2-3 4_ROPEPILE
|
||||
1@tcamp,143,145,3 duplicate(Lock#2-1) Lock#2-4 4_ROPEPILE
|
||||
1@tcamp,142,147,3 duplicate(dummy_npc) Maram#Lock2 4_EP18_MARAM
|
||||
1@tcamp,138,145,3 duplicate(Lock Device#2-1) Lock Device#2-2 4_ROPEPILE
|
||||
1@tcamp,141,145,3 duplicate(Lock Device#2-1) Lock Device#2-3 4_ROPEPILE
|
||||
1@tcamp,143,145,3 duplicate(Lock Device#2-1) Lock Device#2-4 4_ROPEPILE
|
||||
1@tcamp,142,147,3 duplicate(dummy_disabled_npc) Maram#Lock Device2 4_EP18_MARAM
|
||||
|
||||
1@tcamp,223,109,3 script Lock#3-1 4_ROPEPILE,{
|
||||
.@maram$ = instance_npcname("Maram#Lock3");
|
||||
1@tcamp,223,109,3 script Lock Device#3-1 4_ROPEPILE,{
|
||||
.@maram$ = instance_npcname("Maram#Lock Device3");
|
||||
enablenpc .@maram$;
|
||||
npctalk "Maram: This building looks pretty suspicious, right? There must be a surveillance system in it as well.", .@maram$;
|
||||
npctalk "Maram: This building looks quite suspicious, right? There must be a surveillance system in here too.", .@maram$;
|
||||
progressbar_npc "3131FF",10;
|
||||
npctalk "Maram: Let's explore carefully, being careful not to get caught this time.", .@maram$;
|
||||
disablenpc instance_npcname("Lock#3-1");
|
||||
disablenpc instance_npcname("Lock#3-2");
|
||||
npctalk "Maram: Let's explore carefully this time, being careful not to get caught.", .@maram$;
|
||||
disablenpc instance_npcname("Lock Device#3-1");
|
||||
disablenpc instance_npcname("Lock Device#3-2");
|
||||
disablenpc .@maram$;
|
||||
setcell 'map_tcamp$,223,105,223,110,cell_walkable,1;
|
||||
end;
|
||||
}
|
||||
1@tcamp,223,106,3 duplicate(Lock#3-1) Lock#3-2 4_ROPEPILE
|
||||
1@tcamp,226,114,3 duplicate(dummy_npc) Maram#Lock3 4_EP18_MARAM
|
||||
1@tcamp,223,106,3 duplicate(Lock Device#3-1) Lock Device#3-2 4_ROPEPILE
|
||||
1@tcamp,226,114,3 duplicate(dummy_disabled_npc) Maram#Lock Device3 4_EP18_MARAM
|
||||
|
||||
1@tcamp,80,99,3 script Lock#4-1 4_ROPEPILE,{
|
||||
.@maram$ = instance_npcname("Maram#Lock4");
|
||||
1@tcamp,80,99,3 script Lock Device#4-1 4_ROPEPILE,{
|
||||
.@maram$ = instance_npcname("Maram#Lock Device4");
|
||||
enablenpc .@maram$;
|
||||
npctalk "Maram: I think you've gotten pretty deep. You should be able to find what you need safely.", .@maram$;
|
||||
npctalk "Maram: Looks like we're in pretty deep. We should be able to safely find what we need.", .@maram$;
|
||||
progressbar_npc "3131FF",10;
|
||||
npctalk "Maram: Shall we wish you luck?", .@maram$;
|
||||
disablenpc instance_npcname("Lock#4-1");
|
||||
disablenpc instance_npcname("Lock#4-2");
|
||||
disablenpc instance_npcname("Lock#4-3");
|
||||
npctalk "Maram: Shall we wish you good luck?", .@maram$;
|
||||
disablenpc instance_npcname("Lock Device#4-1");
|
||||
disablenpc instance_npcname("Lock Device#4-2");
|
||||
disablenpc instance_npcname("Lock Device#4-3");
|
||||
disablenpc .@maram$;
|
||||
setcell 'map_tcamp$,80,94,80,100,cell_walkable,1;
|
||||
|
||||
enablenpc instance_npcname("Document Pile#Site1");
|
||||
enablenpc instance_npcname("Document Pile#Site2");
|
||||
enablenpc instance_npcname("Document Pile#Site3");
|
||||
enablenpc instance_npcname("Document Pile#Site4");
|
||||
enablenpc instance_npcname("Document Pile#Site5");
|
||||
enablenpc instance_npcname("Miriam#base1");
|
||||
enablenpc instance_npcname("Maram#base5");
|
||||
enablenpc instance_npcname("Pile of documents#Base1");
|
||||
enablenpc instance_npcname("Pile of documents#Base2");
|
||||
enablenpc instance_npcname("Pile of documents#Base3");
|
||||
enablenpc instance_npcname("Pile of documents#Base4");
|
||||
enablenpc instance_npcname("Pile of documents#Base5");
|
||||
enablenpc instance_npcname("Miriam#Base1");
|
||||
enablenpc instance_npcname("Maram#Base5");
|
||||
if ('step == 0)
|
||||
'step = 1;
|
||||
end;
|
||||
}
|
||||
1@tcamp,80,97,3 duplicate(Lock#4-1) Lock#4-2 4_ROPEPILE
|
||||
1@tcamp,80,95,3 duplicate(Lock#4-1) Lock#4-3 4_ROPEPILE
|
||||
1@tcamp,82,100,3 duplicate(dummy_npc) Maram#Lock4 4_EP18_MARAM
|
||||
1@tcamp,80,97,3 duplicate(Lock Device#4-1) Lock Device#4-2 4_ROPEPILE
|
||||
1@tcamp,80,95,3 duplicate(Lock Device#4-1) Lock Device#4-3 4_ROPEPILE
|
||||
1@tcamp,82,100,3 duplicate(dummy_disabled_npc) Maram#Lock Device4 4_EP18_MARAM
|
||||
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
// Final
|
||||
//-------------------------------------------------------------------
|
||||
1@tcamp,32,100,3 script Document Pile#Site1 4_EP18_PAPERS,{
|
||||
mes "[Pile of Papers]";
|
||||
mes "All the papers are jumbled up.";
|
||||
mes "I took out a few sheets from the middle These are the expiry date of the weapon and the sales statement.";
|
||||
1@tcamp,32,100,3 script(DISABLED) Pile of documents#Base1 4_EP18_PAPERS,{
|
||||
if ('step != 1)
|
||||
end;
|
||||
mes "[Pile of documents]";
|
||||
mes "All kinds of documents are all mixed up.";
|
||||
mes "I took out a few pages from the middle and found that they were weapons expiration dates and sales records.";
|
||||
next;
|
||||
mes "[Pile of Papers]";
|
||||
mes "Even the date is very recent. There is a record of handing over a large number of weapons to Mr. Dandelion.";
|
||||
mes "I think I found what I was looking for. I put the documents in my pocket.";
|
||||
mes "[Pile of documents]";
|
||||
mes "Even the date is very recent. There is also a record of handing over a large amount of weapons to Mr. Dandelion.";
|
||||
mes "It looks like I found what I was looking for. I put the documents in my arms.";
|
||||
close2;
|
||||
getitem 1000409,1; // Ep18_Docu_File
|
||||
cloakonnpcself( instance_npcname("Document Pile#Site1") );
|
||||
cloakonnpcself();
|
||||
end;
|
||||
}
|
||||
|
||||
1@tcamp,49,123,3 script Document Pile#Site2 4_EP18_PAPERS,{
|
||||
mes "[Pile of Papers]";
|
||||
mes "All the papers are jumbled up.";
|
||||
mes "At the top of the page the final menu for luncheon dinner?";
|
||||
1@tcamp,49,123,3 script(DISABLED) Pile of documents#Base2 4_EP18_PAPERS,{
|
||||
if ('step != 1)
|
||||
end;
|
||||
mes "[Pile of documents]";
|
||||
mes "All kinds of documents are all mixed up.";
|
||||
mes "On the top page... is it a battle to decide the menu for lunch?";
|
||||
next;
|
||||
mes "[Pile of Papers]";
|
||||
mes "It seems that the menu is fried fish with sauce.";
|
||||
mes "You seem to have left unimportant documents. Let's take care of them first.";
|
||||
mes "[Pile of documents]";
|
||||
mes "It looks like the menu has been set on fried fish covered in sauce....";
|
||||
mes "It looks like he left behind only unimportant documents. Let's take care of them for now.";
|
||||
close2;
|
||||
getitem 1000409,1; // Ep18_Docu_File
|
||||
cloakonnpcself( instance_npcname("Document Pile#Site2") );
|
||||
cloakonnpcself();
|
||||
end;
|
||||
}
|
||||
|
||||
1@tcamp,29,86,3 script Document Pile#Site3 4_EP18_PAPERS,{
|
||||
mes "[Pile of Papers]";
|
||||
mes "All the papers are jumbled up.";
|
||||
mes "I took one out of the middle The layout of the military base guards?";
|
||||
1@tcamp,29,86,3 script(DISABLED) Pile of documents#Base3 4_EP18_PAPERS,{
|
||||
if ('step != 1)
|
||||
end;
|
||||
mes "[Pile of documents]";
|
||||
mes "All kinds of documents are all mixed up.";
|
||||
mes "I took one out from the middle and saw... a map of the security guards at the military base?";
|
||||
next;
|
||||
mes "[Pile of Papers]";
|
||||
mes "Looking at the date, it was a long time ago.";
|
||||
mes "You seem to have left unimportant documents. Let's take care of them first.";
|
||||
mes "[Pile of documents]";
|
||||
mes "Looking at the date, it's a long time ago document.";
|
||||
mes "It looks like he left behind only unimportant documents. Let's take care of them for now.";
|
||||
close2;
|
||||
getitem 1000409,1; // Ep18_Docu_File
|
||||
cloakonnpcself( instance_npcname("Document Pile#Site3") );
|
||||
cloakonnpcself();
|
||||
end;
|
||||
}
|
||||
|
||||
1@tcamp,60,122,3 script Document Pile#Site4 4_EP18_PAPERS,{
|
||||
mes "[Pile of Papers]";
|
||||
mes "All the papers are jumbled up.";
|
||||
mes "The top one... 'If you feed the magmaring potatoes and hunt them after a while, will they drop the baked potatoes?'";
|
||||
1@tcamp,60,122,3 script(DISABLED) Pile of documents#Base4 4_EP18_PAPERS,{
|
||||
if ('step != 1)
|
||||
end;
|
||||
mes "[Pile of documents]";
|
||||
mes "All kinds of documents are all mixed up.";
|
||||
mes "The top chapter is... ¡®If you feed a magmaring a potato and then hunt it after a while, should it drop a baked potato?'";
|
||||
next;
|
||||
mes "[Pile of Papers]";
|
||||
mes "why is this here. But I'm curious about the result!";
|
||||
mes "You seem to have left unimportant documents. Let's take care of them first.";
|
||||
mes "[Pile of documents]";
|
||||
mes "...Why is this here? But I'm curious about the results!";
|
||||
mes "It looks like he left behind only unimportant documents. Let's take care of them for now.";
|
||||
close2;
|
||||
getitem 1000409,1; // Ep18_Docu_File
|
||||
cloakonnpcself( instance_npcname("Document Pile#Site4") );
|
||||
cloakonnpcself();
|
||||
end;
|
||||
}
|
||||
|
||||
1@tcamp,31,84,3 script Document Pile#Site5 4_EP18_PAPERS,{
|
||||
mes "[Pile of Papers]";
|
||||
mes "All the papers are jumbled up.";
|
||||
mes "Picking one out of the middle I found an illustration of the Pope drawn by icing the Pope's cookie icing with a pen.";
|
||||
1@tcamp,31,84,3 script(DISABLED) Pile of documents#Base5 4_EP18_PAPERS,{
|
||||
if ('step != 1)
|
||||
end;
|
||||
mes "[Pile of documents]";
|
||||
mes "All kinds of documents are all mixed up.";
|
||||
mes "When I pulled one out from the middle... I found an illustration of the Pope drawn with Pope cookie icing using a pen.";
|
||||
next;
|
||||
mes "[Pile of Papers]";
|
||||
mes "What kind of picture is it? Besides, you drew it very well.";
|
||||
mes "You seem to have left unimportant documents. Let's take care of them first.";
|
||||
mes "[Pile of documents]";
|
||||
mes "What kind of picture is this? And it's really well drawn....";
|
||||
mes "It looks like he left behind only unimportant documents. Let's take care of them for now.";
|
||||
close2;
|
||||
getitem 1000409,1; // Ep18_Docu_File
|
||||
cloakonnpcself( instance_npcname("Document Pile#Site5") );
|
||||
cloakonnpcself();
|
||||
end;
|
||||
}
|
||||
|
||||
|
||||
1@tcamp,34,100,3 script Miriam#base1 4_EP18_MIRIAM,3,3,{
|
||||
disable_items;
|
||||
if (countitem(1000409) < 5) { // Ep18_Docu_File
|
||||
1@tcamp,34,100,3 script(DISABLED) Miriam#Base1 4_EP18_MIRIAM,3,3,{
|
||||
if ('step == 1) {
|
||||
if (countitem(1000409) < 5) { // Ep18_Docu_File
|
||||
cutin "ep18_miriam_02.png",2;
|
||||
mes "[Miriam]";
|
||||
mes "As expected, you are talented, adventurer. I used all my connections to find out the location.";
|
||||
mes "It looks like you found the adventurer and Maram right away.";
|
||||
next;
|
||||
mes "[Miriam]";
|
||||
mes "Please read these documents. They contain what we are looking for.";
|
||||
mes "Rather than having me explain everything to you, I think it would be better for you to see it for yourself.";
|
||||
close3;
|
||||
}
|
||||
if (getequipid(EQI_HEAD_TOP) != 400127) { // Ep18_Mini_Elly
|
||||
mes "[Mini Elly]";
|
||||
mes "Get it out of the bag. Put it on your head.";
|
||||
close;
|
||||
}
|
||||
mes "[Miriam]";
|
||||
mes ".......";
|
||||
next;
|
||||
cutin "ep18_maram_01.png",2;
|
||||
mes "[Maram]";
|
||||
mes "No, Miriam! How are you here?";
|
||||
mes "They said they would conduct a separate investigation!";
|
||||
next;
|
||||
cutin "ep18_miriam_01.png",2;
|
||||
mes "[Miriam]";
|
||||
mes "How did you and the adventurer dig this far?";
|
||||
mes "As expected, your skills are good. I used all my connections to find out the location, but you found it right away.";
|
||||
next;
|
||||
cutin "ep18_maram_02.png",2;
|
||||
mes "[Maram]";
|
||||
mes "Let's do something about it, right, adventurer?";
|
||||
mes "Anyway, what information did you get?";
|
||||
next;
|
||||
cutin "ep18_miriam_02.png",2;
|
||||
mes "[Miriam]";
|
||||
mes "As expected, you are talented, adventurer. I used all sorts of connections to find the position.";
|
||||
mes "It seems that Adventurer and Maram found it at once.";
|
||||
mes "Look at this document here.";
|
||||
next;
|
||||
cutin "",255;
|
||||
mes "[Mini Elly]";
|
||||
mes "This document is a weapon sales record. Please show it to me.";
|
||||
mes "All of the weapons and firearms that these people disposed of have less than a year left before their expiration date.";
|
||||
next;
|
||||
cutin "ep18_miriam_03.png",2;
|
||||
mes "[Miriam]";
|
||||
mes "You sell weapons like this so recklessly.";
|
||||
mes "If a weapon is not properly maintained, it may not function properly.";
|
||||
next;
|
||||
cutin "ep18_maram_03.png",2;
|
||||
mes "[Maram]";
|
||||
mes "The quality of all weapons coming out of the back hole is the same.";
|
||||
mes "...But I guess it's at this point in time.";
|
||||
next;
|
||||
mes "[Maram]";
|
||||
mes "One year is not a long expiration date, but it is not too tight.";
|
||||
mes "Why did it pour out at this moment when we were preparing for the protest?";
|
||||
next;
|
||||
mes "[Maram]";
|
||||
mes "There wouldn't have been a need to dispose of it right away.";
|
||||
next;
|
||||
cutin "ep18_miriam_02.png",2;
|
||||
mes "[Miriam]";
|
||||
mes "This is one of the military bases managed by my adoptive father.";
|
||||
mes "I was wondering if it would really pop out at a time like this.";
|
||||
next;
|
||||
cutin "",255;
|
||||
select( "If it's your adoptive father, is it Priest Amal?", "That adoptive father who is a hardliner and pro-war?" );
|
||||
cutin "ep18_miriam_02.png",2;
|
||||
mes "[Miriam]";
|
||||
mes "That's right, adventurer. When I looked at the ledger, it doesn't seem like my adoptive father was involved.";
|
||||
mes "I think it's an isolated corruption at the lowest level, the weapons leak incident.";
|
||||
next;
|
||||
mes "[Miriam]";
|
||||
mes "Read some of the documents here. We have what we were looking for.";
|
||||
mes "I think it would be better to come and see it firsthand than to explain everything.";
|
||||
close3;
|
||||
mes "I'll have to dig a little deeper, but that's my guess for now.";
|
||||
mes "Oh, please give me the documents. I'll take them as evidence.";
|
||||
delitem 1000409,5; // Ep18_Docu_File
|
||||
if ('step == 1)
|
||||
'step = 2;
|
||||
if (isbegin_quest(16578) == 1) {
|
||||
erasequest 16578;
|
||||
setquest 16579;
|
||||
}
|
||||
close2;
|
||||
cutin "",255;
|
||||
npctalk "Maram: Ha, this is really fun.", instance_npcname("Maram#Base5");
|
||||
end;
|
||||
}
|
||||
if (getequipid(EQI_HEAD_TOP) != 400127) { // Ep18_Mini_Elly
|
||||
mes "[Mini Elly]";
|
||||
mes "Get it out of the bag. Put it on your head.";
|
||||
if ('step == 2) {
|
||||
cutin "ep18_miriam_02.png",2;
|
||||
mes "[Miriam]";
|
||||
mes "...Just a moment, I'm reading the document.";
|
||||
close;
|
||||
}
|
||||
cutin "ep18_miriam_02.png",2;
|
||||
mes "[Miriam]";
|
||||
mes ".";
|
||||
next;
|
||||
cutin "ep18_maram_01.png",2;
|
||||
mes "[Maram]";
|
||||
mes "No, Miriam! How are you here?";
|
||||
mes "They said they would investigate separately!";
|
||||
next;
|
||||
cutin "ep18_miriam_01.png",2;
|
||||
mes "[Miriam]";
|
||||
mes "How did you and the adventurer dig this far?";
|
||||
mes "You have good skills, too. It was a location that I found using all kinds of connections, but you found it at once.";
|
||||
next;
|
||||
cutin "ep18_maram_02.png",2;
|
||||
mes "[Maram]";
|
||||
mes "Let's do some, right, adventurer?";
|
||||
mes "Anyway, what information did you get?";
|
||||
next;
|
||||
cutin "ep18_miriam_02.png",2;
|
||||
mes "[Miriam]";
|
||||
mes "Look at this document here.";
|
||||
next;
|
||||
cutin "",255;
|
||||
mes "[Mini Elly]";
|
||||
mes "This is a sales statement for arms. Show it to me as well.";
|
||||
mes "The weapons and firearms these men have disposed of are all less than a year old.";
|
||||
next;
|
||||
cutin "ep18_miriam_03.png",2;
|
||||
mes "[Miriam]";
|
||||
mes "How dare you sell such weapons.";
|
||||
mes "A weapon that is not properly maintained may not function properly.";
|
||||
next;
|
||||
cutin "ep18_maram_03.png",2;
|
||||
mes "[Maram]";
|
||||
mes "The weapons that come out of the back hole are all the same.";
|
||||
mes "but, at least it's at this point.";
|
||||
next;
|
||||
mes "[Maram]";
|
||||
mes "A year is not a long term, but it is not tight.";
|
||||
mes "Why did we pour out at this moment in preparation for the protest?";
|
||||
next;
|
||||
mes "[Maram]";
|
||||
mes "You wouldn't have to dispose of it right away.";
|
||||
next;
|
||||
npctalk "Maram: haha, this is so funny", instance_npcname("Maram#base5");
|
||||
sleep2 300;
|
||||
cutin "ep18_miriam_02.png",2;
|
||||
mes "[Miriam]";
|
||||
mes "This is one of the military bases managed by my stepfather.";
|
||||
mes "Just by chance, it really came out at a time like this.";
|
||||
next;
|
||||
cutin "",255;
|
||||
select( "If your stepfather is a priest, Youth Amal?", "The hard-line and pro-war stepfather?" );
|
||||
cutin "ep18_miriam_02.png",2;
|
||||
mes "[Miriam]";
|
||||
mes "That's right, adventurer. Looking at the ledger, it doesn't seem like the stepfather was involved.";
|
||||
mes "I think it was a single corruption at the end, the weapon leak case.";
|
||||
next;
|
||||
mes "[Miriam]";
|
||||
mes "I'll have to dig a little deeper, but that's my guess for now.";
|
||||
mes "Oh, give me the documents. I'll take it as evidence.";
|
||||
delitem 1000409,5; // Ep18_Docu_File
|
||||
if (isbegin_quest(16578) == 1) {
|
||||
erasequest 16578;
|
||||
setquest 16579;
|
||||
}
|
||||
close2;
|
||||
cutin "",255;
|
||||
npctalk "Maram: haha, this is so funny", instance_npcname("Maram#base5");
|
||||
end;
|
||||
|
||||
OnTouch:
|
||||
npctalk "Miriam: Oh, adventurer? Maram you too!?";
|
||||
if (countitem(1000409) < 5)
|
||||
npctalk "Miriam: Oh, adventurer? Maram, you too!?";
|
||||
end;
|
||||
|
||||
OnInstanceInit:
|
||||
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(16578) == 1 && countitem(1000409) > 4" ); // Ep18_Docu_File
|
||||
disablenpc instance_npcname("Miriam#base1");
|
||||
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(16578) == 1 && countitem(1000409) > 4" ); // Ep18_Docu_File
|
||||
end;
|
||||
}
|
||||
|
||||
1@tcamp,32,102,3 script Maram#base5 4_EP18_MARAM,{
|
||||
if (isbegin_quest(16579) == 0) {
|
||||
1@tcamp,32,102,3 script(DISABLED) Maram#Base5 4_EP18_MARAM,{
|
||||
if ('step == 1) {
|
||||
cutin "ep18_maram_01.png",2;
|
||||
mes "[Maram]";
|
||||
mes "I didn't know Miriam was here, right, adventurer?";
|
||||
mes "I didn't know Miriam would be here. Right, adventurer?";
|
||||
close3;
|
||||
}
|
||||
cutin "ep18_maram_02.png",2;
|
||||
mes "[Maram]";
|
||||
mes "We moved separately, but in the end we are in the same position.";
|
||||
mes "Still, what I got in the process was different, so I guess it has its own meaning.";
|
||||
next;
|
||||
cutin "ep18_miriam_02.png",2;
|
||||
mes "[Miriam]";
|
||||
mes "Then I must be away for a while.";
|
||||
mes "I'm going to pass on my findings to my stepfather.";
|
||||
next;
|
||||
mes "[Miriam]";
|
||||
mes "Because there is a possibility that the adoptive father may not know yet if it is a single corruption.";
|
||||
next;
|
||||
cutin "ep18_maram_03.png",2;
|
||||
mes "[Maram]";
|
||||
mes "Is it really an independent corruption? That's probably what bothers me.";
|
||||
mes "I have something to give to Rachel, Miriam, let's go together.";
|
||||
next;
|
||||
cutin "ep18_maram_01.png",2;
|
||||
mes "[Maram]";
|
||||
mes "I'll give you a shortcut, so can you please tell Suad what you found out here?";
|
||||
mes "We will follow soon, so please go ahead and tell me.";
|
||||
if (ep18_1_main == 46) {
|
||||
ep18_1_main = 47;
|
||||
erasequest 16579;
|
||||
setquest 16580;
|
||||
getitem "Ep18_Amethyst_Fragment",50;
|
||||
if ('step == 2) {
|
||||
mes "[Maram]";
|
||||
mes "They moved separately, but ended up in the same place.";
|
||||
mes "Still, what I gained from the process was different, so I guess it has some meaning.";
|
||||
next;
|
||||
cutin "ep18_miriam_02.png",2;
|
||||
mes "[Miriam]";
|
||||
mes "Then I guess I'll have to leave for a while.";
|
||||
mes "I'll have to relay what I found out to my adoptive father.";
|
||||
next;
|
||||
mes "[Miriam]";
|
||||
mes "If it's an isolated corruption, there's a chance that even my adoptive father doesn't know about it yet.";
|
||||
next;
|
||||
cutin "ep18_maram_03.png",2;
|
||||
mes "[Maram]";
|
||||
mes "Is this really an isolated case of corruption? That is something that bothers me.";
|
||||
mes "I also have something to deliver to Rachel, so Miriam, let's go together.";
|
||||
next;
|
||||
cutin "ep18_maram_01.png",2;
|
||||
mes "[Maram]";
|
||||
mes "I will tell you a shortcut to get out, so would you, adventurer, tell Suad what you found out here?";
|
||||
mes "We will follow shortly, so please go and tell us first.";
|
||||
if (ep18_main == 46) {
|
||||
ep18_main = 47;
|
||||
erasequest 16579;
|
||||
setquest 16580;
|
||||
getitem 1000405,50; // Ep18_Amethyst_Fragment
|
||||
}
|
||||
close2;
|
||||
warp "wolfvill",162,154;
|
||||
end;
|
||||
}
|
||||
close2;
|
||||
// debug
|
||||
warp "wolfvill",162,154;
|
||||
end;
|
||||
|
||||
OnInstanceInit:
|
||||
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(16579) == 1" );
|
||||
disablenpc instance_npcname("Maram#base5");
|
||||
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(16579) == 1" );
|
||||
end;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//= Instance Villa of Deception.
|
||||
//===== Description: =========================================
|
||||
//- [Walkthrough conversion]
|
||||
//- Require to complete the episode 18.1 main quest.
|
||||
//- Require to complete the Episode 18 main quest.
|
||||
//- The function to drop an item with random option is defined in re/other/glocal_npc2.txt
|
||||
// Notes:
|
||||
// Some of the setting can be modified in 'Optional settings'.
|
||||
@@ -16,14 +16,14 @@
|
||||
wolfvill,79,260,0 script #con_wp11 HIDDEN_WARP_NPC,4,4,{
|
||||
end;
|
||||
OnTouch:
|
||||
if (ep18_1_main < 57)
|
||||
if (ep18_main < 57)
|
||||
end;
|
||||
cloakoffnpcself( "Aira#con" );
|
||||
end;
|
||||
}
|
||||
|
||||
wolfvill,79,260,4 script(CLOAKED) Aira#con 4_M_BRZ_JACI,{
|
||||
if (ep18_1_main < 57)
|
||||
if (ep18_main < 57)
|
||||
end;
|
||||
switch( checkquest(12522,PLAYTIME) ) {
|
||||
case -1:
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -29,15 +29,6 @@
|
||||
//= 1.7 Added Rock Ridge Kafra. [Capuche]
|
||||
//============================================================
|
||||
|
||||
// Brasilis
|
||||
//============================================================
|
||||
brasilis,197,221,4 script Kafra Employee::kaf_bra 4_F_KAFRA1,{
|
||||
cutin "kafra_01",2;
|
||||
callfunc "F_Kafra",0,3,0,80,700;
|
||||
savepoint "brasilis",195,259,1,1;
|
||||
callfunc "F_KafEnd",0,1,"in the city of Brasilis";
|
||||
}
|
||||
|
||||
// Dewata
|
||||
//============================================================
|
||||
dewata,202,184,6 script Kafra Employee::kaf_dewata 4_F_KAFRA1,{
|
||||
|
||||
@@ -8,10 +8,8 @@
|
||||
//============================================================
|
||||
|
||||
//============================================================
|
||||
// Episode 13
|
||||
// Episode 13.3
|
||||
//============================================================
|
||||
brasilis mapflag nightenabled
|
||||
bra_fild01 mapflag nightenabled
|
||||
dicastes01 mapflag nightenabled
|
||||
dicastes02 mapflag nightenabled
|
||||
dic_fild01 mapflag nightenabled
|
||||
|
||||
@@ -42,12 +42,6 @@ job3_war01 mapflag nobranch
|
||||
job3_war02 mapflag nobranch
|
||||
jupe_core2 mapflag nobranch
|
||||
|
||||
//============================================================
|
||||
// Brasilis
|
||||
//============================================================
|
||||
brasilis mapflag nobranch
|
||||
bra_in01 mapflag nobranch
|
||||
|
||||
//============================================================
|
||||
// Episode 13.3
|
||||
//============================================================
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
paramk mapflag nomemo
|
||||
|
||||
//============================================================
|
||||
// Episode 13
|
||||
// Episode 13.3
|
||||
//============================================================
|
||||
job3_arch01 mapflag nomemo
|
||||
job3_arch02 mapflag nomemo
|
||||
@@ -37,9 +37,6 @@ job3_gen01 mapflag nomemo
|
||||
job3_sha01 mapflag nomemo
|
||||
jupe_core2 mapflag nomemo
|
||||
s_atelier mapflag nomemo
|
||||
bra_in01 mapflag nomemo
|
||||
bra_dun01 mapflag nomemo
|
||||
bra_dun02 mapflag nomemo
|
||||
dicastes01 mapflag nomemo
|
||||
dicastes02 mapflag nomemo
|
||||
dic_in01 mapflag nomemo
|
||||
|
||||
@@ -16,8 +16,6 @@ paramk mapflag nopenalty
|
||||
//============================================================
|
||||
// Municipality (Cities/Towns/Villages)
|
||||
//============================================================
|
||||
brasilis mapflag nopenalty
|
||||
bra_in01 mapflag nopenalty
|
||||
dicastes01 mapflag nopenalty
|
||||
dicastes02 mapflag nopenalty
|
||||
dic_in01 mapflag nopenalty
|
||||
|
||||
@@ -85,8 +85,6 @@ paramk mapflag pvp off
|
||||
// Municipality (Cities/Towns/Villages)
|
||||
//============================================================
|
||||
moc_para01 mapflag pvp off
|
||||
brasilis mapflag pvp off
|
||||
bra_in01 mapflag pvp off
|
||||
dicastes01 mapflag pvp off
|
||||
dicastes02 mapflag pvp off
|
||||
dic_in01 mapflag pvp off
|
||||
|
||||
@@ -26,10 +26,9 @@ paramk mapflag noteleport
|
||||
moc_para01 mapflag noteleport
|
||||
|
||||
//============================================================
|
||||
// Episode 13
|
||||
// Episode 13.3
|
||||
//============================================================
|
||||
s_atelier mapflag noteleport
|
||||
bra_in01 mapflag noteleport
|
||||
dic_in01 mapflag noteleport
|
||||
job3_gen01 mapflag noteleport
|
||||
job3_sha01 mapflag noteleport
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
//= 1.1 Added Izlude duplicates. [Euphy]
|
||||
//============================================================
|
||||
|
||||
brasilis mapflag reset
|
||||
dewata mapflag reset
|
||||
dicastes01 mapflag reset
|
||||
dicastes02 mapflag reset
|
||||
|
||||
@@ -247,7 +247,6 @@ lhz_d_n2 mapflag restricted 6
|
||||
//============================================================
|
||||
// Municipality (Cities/Towns/Villages)
|
||||
//============================================================
|
||||
brasilis mapflag restricted 7
|
||||
dewata mapflag restricted 7
|
||||
dicastes01 mapflag restricted 7
|
||||
eclage mapflag restricted 7
|
||||
|
||||
50
npc/re/mapflag/specialpopup.txt
Normal file
50
npc/re/mapflag/specialpopup.txt
Normal file
@@ -0,0 +1,50 @@
|
||||
//===== rAthena Script =======================================
|
||||
//= Mapflag: special popup map setting.
|
||||
//===== Description: =========================================
|
||||
//= Displays a special popup when a player enters the map.
|
||||
//===== Additional Comments: =================================
|
||||
//= 1.0 Initial script. [eppc0330]
|
||||
//============================================================
|
||||
|
||||
herosria mapflag specialpopup 1
|
||||
hero_in1 mapflag specialpopup 1
|
||||
hero_in2 mapflag specialpopup 1
|
||||
hero_in3 mapflag specialpopup 1
|
||||
hero_in4 mapflag specialpopup 1
|
||||
hero_out1 mapflag specialpopup 1
|
||||
hero_out2 mapflag specialpopup 1
|
||||
hero_out3 mapflag specialpopup 1
|
||||
hero_out4 mapflag specialpopup 1
|
||||
hero_ent1 mapflag specialpopup 1
|
||||
hero_ent2 mapflag specialpopup 1
|
||||
hero_ent3 mapflag specialpopup 1
|
||||
|
||||
hero_tra mapflag specialpopup 2
|
||||
hero_dun1 mapflag specialpopup 2
|
||||
|
||||
bl_ice mapflag specialpopup 3
|
||||
bl_lava mapflag specialpopup 3
|
||||
bl_grass mapflag specialpopup 3
|
||||
bl_death mapflag specialpopup 3
|
||||
bl_soul mapflag specialpopup 3
|
||||
bl_venom mapflag specialpopup 3
|
||||
bl_temple mapflag specialpopup 3
|
||||
|
||||
thana_step mapflag specialpopup 4
|
||||
tha_t07 mapflag specialpopup 4
|
||||
tha_t08 mapflag specialpopup 4
|
||||
tha_t09 mapflag specialpopup 4
|
||||
tha_t10 mapflag specialpopup 4
|
||||
tha_t11 mapflag specialpopup 4
|
||||
tha_t12 mapflag specialpopup 4
|
||||
|
||||
ama_dun01 mapflag specialpopup 5
|
||||
|
||||
lhz_dun_n mapflag specialpopup 6
|
||||
|
||||
bl_depth1 mapflag specialpopup 7
|
||||
|
||||
for_dun01 mapflag specialpopup 8
|
||||
for_dun02 mapflag specialpopup 8
|
||||
|
||||
bl_depth2 mapflag specialpopup 9
|
||||
@@ -7,7 +7,6 @@
|
||||
//= 1.1 Added Izlude duplicates. [Euphy]
|
||||
//============================================================
|
||||
|
||||
brasilis mapflag town
|
||||
dewata mapflag town
|
||||
dicastes01 mapflag town
|
||||
eclage mapflag town
|
||||
|
||||
@@ -60,4 +60,5 @@ Footer:
|
||||
- Path: npc/re/merchants/barters/enchan_illusion_dungeons.yml
|
||||
- Path: npc/re/merchants/barters/quests_exp_175.yml
|
||||
- Path: npc/re/merchants/barters/mysterious_cookie_shop.yml
|
||||
- Path: npc/re/merchants/barters/quests_18_1.yml
|
||||
- Path: npc/re/merchants/barters/quests_18.yml
|
||||
- Path: npc/re/merchants/barters/quests_19.yml
|
||||
|
||||
289
npc/re/merchants/barters/quests_19.yml
Normal file
289
npc/re/merchants/barters/quests_19.yml
Normal file
@@ -0,0 +1,289 @@
|
||||
# This file is a part of rAthena.
|
||||
# Copyright(C) 2022 rAthena Development Team
|
||||
# https://rathena.org - https://github.com/rathena
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
###########################################################################
|
||||
# Barter Database
|
||||
###########################################################################
|
||||
#
|
||||
# Barter Settings
|
||||
#
|
||||
###########################################################################
|
||||
# - Name NPC name.
|
||||
# Map Map name. (Default: not on a map)
|
||||
# X Map x coordinate. (Default: 0)
|
||||
# Y Map y coordinate. (Default: 0)
|
||||
# Direction Direction the NPC is looking. (Default: North)
|
||||
# Sprite Sprite name of the NPC. (Default: FakeNpc)
|
||||
# Items: List of sold items.
|
||||
# - Index Index of the item inside the shop. (0-...)
|
||||
# Maximum index depends on client.
|
||||
# Item Aegis name of the item.
|
||||
# Stock Amount of item in stock. 0 means unlimited. (Default: 0)
|
||||
# Zeny Cost of them item in Zeny. (Default: 0)
|
||||
# RequiredItems: List of required items (Optional)
|
||||
# - Index Index of the required item. (0-4)
|
||||
# Item Aegis name of required item.
|
||||
# Amount Amount of required item. (Default: 1)
|
||||
# Refine Refine level of required item. (Default: 0)
|
||||
###########################################################################
|
||||
|
||||
Header:
|
||||
Type: BARTER_DB
|
||||
Version: 1
|
||||
|
||||
Body:
|
||||
- Name: barter_Ep19_Rgan_Scroll
|
||||
Items:
|
||||
- Index: 0
|
||||
Item: Ep19_Rgan_Scroll
|
||||
Zeny: 2000
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Ep19_Rgan_Core_F
|
||||
Amount: 2
|
||||
- Name: barter_ep19_snow_stone
|
||||
Items:
|
||||
- Index: 0
|
||||
Item: Snow_F_Stone1
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Snow_F_Ore
|
||||
Amount: 5
|
||||
- Index: 1
|
||||
Item: Snow_F_Stone2
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Snow_F_Stone1
|
||||
Amount: 5
|
||||
- Index: 2
|
||||
Item: Snow_F_Stone3
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Snow_F_Stone2
|
||||
Amount: 5
|
||||
- Name: barter_ep19_repu_1
|
||||
Items:
|
||||
- Index: 0
|
||||
Item: Snow_F_Refine
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Ep19_Snow_Flower
|
||||
Amount: 200
|
||||
- Index: 1
|
||||
Item: Glacier_W_Refine
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Ep19_Snow_Flower
|
||||
Amount: 500
|
||||
- Index: 2
|
||||
Item: Teleport_Ep19_01
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Ep19_Snow_Flower
|
||||
- Name: barter_ep19_repu_2
|
||||
Items:
|
||||
- Index: 0
|
||||
Item: Snow_F_Refine
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Ep19_Snow_Flower
|
||||
Amount: 200
|
||||
- Index: 1
|
||||
Item: Glacier_W_Refine
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Ep19_Snow_Flower
|
||||
Amount: 500
|
||||
- Index: 2
|
||||
Item: Teleport_Ep19_01
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Ep19_Snow_Flower
|
||||
- Index: 3
|
||||
Item: Ep19_Dry_Icegangu
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Ep19_Snow_Flower
|
||||
- Index: 4
|
||||
Item: C_Ep19_Rgan
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Ep19_Snow_Flower
|
||||
Amount: 1000
|
||||
- Index: 5
|
||||
Item: C_Ep19_Iwin
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Ep19_Snow_Flower
|
||||
Amount: 1000
|
||||
- Name: barter_ep19_snow_armor
|
||||
Items:
|
||||
- Index: 0
|
||||
Item: Snowflower_Armor
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Ep19_Snow_Flower
|
||||
Amount: 100
|
||||
- Index: 1
|
||||
Item: Snowflower_Robe
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Ep19_Snow_Flower
|
||||
Amount: 100
|
||||
- Index: 2
|
||||
Item: Snowflower_Manteau
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Ep19_Snow_Flower
|
||||
Amount: 100
|
||||
- Index: 3
|
||||
Item: Snowflower_Muffler
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Ep19_Snow_Flower
|
||||
Amount: 100
|
||||
- Index: 4
|
||||
Item: Snowflower_Boots
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Ep19_Snow_Flower
|
||||
Amount: 100
|
||||
- Index: 5
|
||||
Item: Snowflower_Shoes
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Ep19_Snow_Flower
|
||||
Amount: 100
|
||||
- Index: 6
|
||||
Item: Snowflower_Pendant
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Ep19_Snow_Flower
|
||||
Amount: 100
|
||||
- Index: 7
|
||||
Item: Snowflower_Ring
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Ep19_Snow_Flower
|
||||
Amount: 100
|
||||
- Index: 8
|
||||
Item: Snowflower_Necklace
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Ep19_Snow_Flower
|
||||
Amount: 100
|
||||
- Index: 9
|
||||
Item: Snowflower_Earring
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Ep19_Snow_Flower
|
||||
Amount: 100
|
||||
- Name: barter_ep19_new_content
|
||||
Items:
|
||||
- Index: 0
|
||||
Item: EP19_N_P_Ore
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: EP19_D_P_Ore
|
||||
Amount: 3
|
||||
- Index: 1
|
||||
Item: Ep19_Snow_Flower
|
||||
Amount: 5
|
||||
- Index: 2
|
||||
Item: Ep18_Amethyst_Fragment
|
||||
Amount: 25
|
||||
- Index: 1
|
||||
Item: EP19_D_P_Crystal
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: EP19_D_P_Ore
|
||||
Amount: 15
|
||||
- Index: 1
|
||||
Item: Ep19_Snow_Flower
|
||||
Amount: 30
|
||||
- Index: 2
|
||||
Item: Ep18_Amethyst_Fragment
|
||||
Amount: 150
|
||||
- Index: 2
|
||||
Item: EP19_N_P_Crystal
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: EP19_N_P_Ore
|
||||
Amount: 5
|
||||
- Index: 1
|
||||
Item: Ep19_Snow_Flower
|
||||
Amount: 5
|
||||
- Index: 2
|
||||
Item: Ep18_Amethyst_Fragment
|
||||
Amount: 25
|
||||
- Index: 3
|
||||
Item: EP19_S_F_1_Extract
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Snow_F_Stone1
|
||||
Amount: 20
|
||||
- Index: 1
|
||||
Item: Ep19_Snow_Flower
|
||||
Amount: 5
|
||||
- Index: 2
|
||||
Item: Ep18_Amethyst_Fragment
|
||||
Amount: 25
|
||||
- Index: 4
|
||||
Item: EP19_S_F_2_Extract
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Snow_F_Stone2
|
||||
Amount: 15
|
||||
- Index: 1
|
||||
Item: Ep19_Snow_Flower
|
||||
Amount: 10
|
||||
- Index: 2
|
||||
Item: Ep18_Amethyst_Fragment
|
||||
Amount: 50
|
||||
- Index: 5
|
||||
Item: EP19_S_F_3_Extract
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Snow_F_Stone3
|
||||
Amount: 10
|
||||
- Index: 1
|
||||
Item: Ep19_Snow_Flower
|
||||
Amount: 15
|
||||
- Index: 2
|
||||
Item: Ep18_Amethyst_Fragment
|
||||
Amount: 75
|
||||
- Index: 6
|
||||
Item: EP19_Gla_Extract
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: Ep19_Snow_Flower
|
||||
Amount: 40
|
||||
- Index: 1
|
||||
Item: Ep18_Amethyst_Fragment
|
||||
Amount: 200
|
||||
- Index: 7
|
||||
Item: EP19_DGW_Refine
|
||||
RequiredItems:
|
||||
- Index: 0
|
||||
Item: EP19_D_P_Stone
|
||||
Amount: 1
|
||||
- Index: 1
|
||||
Item: EP19_D_P_Crystal
|
||||
Amount: 10
|
||||
- Index: 2
|
||||
Item: EP19_N_P_Crystal
|
||||
Amount: 10
|
||||
97
npc/re/merchants/episode_19.txt
Normal file
97
npc/re/merchants/episode_19.txt
Normal file
@@ -0,0 +1,97 @@
|
||||
//===== rAthena Script =======================================
|
||||
//= Episode 19 NPCs.
|
||||
//===== Description: =========================================
|
||||
//- [Walkthrough conversion]
|
||||
//- Related to new content.
|
||||
//===== Changelogs: ==========================================
|
||||
//= 1.0 First version. [Capuche]
|
||||
//============================================================
|
||||
|
||||
icas_in,192,57,3 script Incineration Furnace#ep19 4_POINT_RED,{
|
||||
mes "There is a brazier where you can feel the heat.";
|
||||
mes "If you have useless Dim Glacier weapons, put them in and melt them.";
|
||||
close2;
|
||||
laphine_synthesis("Dim Glacier Extractor");
|
||||
end;
|
||||
}
|
||||
|
||||
icas_in,188,60,3 script Forr#ep19 4_EP19_IWIN,{
|
||||
cutin "ep19_iwin11.png",2;
|
||||
mes "[Forr]";
|
||||
mes "Did you know that weapons are being found in recently abandoned pits and the like?";
|
||||
mes "It is called Dim Glacier because it is an object imbued with unusual magical powers.";
|
||||
next;
|
||||
mes "[Forr]";
|
||||
mes "I've done some research with Vellgunde, and I've found that it has the magical powers of mutated Jormungand.";
|
||||
mes "If you have Dim Glacier, try adjusting your magic to increase the weapon's performance.";
|
||||
next;
|
||||
mes "[Forr]";
|
||||
mes "I need some tricky refining materials, but how about exchanging them appropriately for what I'm lacking?";
|
||||
next;
|
||||
switch( select( "Exchange materials.", "Awaken Dim Glacier's potential.", "What do you do with unnecessary weapons?", "Okay." ) ) {
|
||||
case 1:
|
||||
mes "[Forr]";
|
||||
mes "The amethyst shards brought by Maram helped make various containers.";
|
||||
mes "It's something you can't get here, so you might ask for it often.";
|
||||
close2;
|
||||
cutin "",255;
|
||||
callshop "barter_ep19_new_content";
|
||||
end;
|
||||
case 2:
|
||||
mes "[Forr]";
|
||||
mes "I wish you good luck";
|
||||
close2;
|
||||
cutin "",255;
|
||||
item_enchant(47);
|
||||
end;
|
||||
case 3:
|
||||
mes "[Forr]";
|
||||
mes "Can you see the brazier down there?";
|
||||
mes "I made it for the incineration of useless things that have been researched.";
|
||||
next;
|
||||
mes "[Forr]";
|
||||
mes "If you're going to throw it away, use that incinerator.";
|
||||
mes "Dim Glacier has magical powers, so if you melt it, whatever comes out will come out.";
|
||||
close3;
|
||||
case 4:
|
||||
mes "[Forr]";
|
||||
mes "I will stay for a while to help Vellgunde-sama.";
|
||||
mes "Come to me anytime.";
|
||||
close3;
|
||||
}
|
||||
}
|
||||
|
||||
// Storage
|
||||
icas_in,169,70,3 script Card#ep19 4_POINT_BLUE,{
|
||||
.@total_storage = 1; // by default rAthena just open the basic storage (but 3 on kRO)
|
||||
|
||||
cutin "ep19_iwin02.png",2;
|
||||
mes "[Hoyoyo]";
|
||||
mes "Are you going to use the closet?";
|
||||
mes "Hyo, hy, hyo, put in a coin from the continent.";
|
||||
mes "Hey... Would you like to put 500zeny in it?";
|
||||
next;
|
||||
cutin "",255;
|
||||
for ( .@i = 0; .@i < .@total_storage; .@i++ )
|
||||
.@menu$ += "Storage " + (.@i+1) + ":";
|
||||
.@menu$ += "Stop.";
|
||||
.@s = select( .@menu$ ) - 2;
|
||||
|
||||
if (.@s == (.@total_storage - 1)) {
|
||||
mes "I decided to use it next time.";
|
||||
close;
|
||||
}
|
||||
|
||||
if (Zeny < 500) {
|
||||
mes "Looks like you have to put 500 zeny to use the closet.";
|
||||
close3;
|
||||
}
|
||||
mes "When a coin was inserted, the cabinet opened with a rattling sound.";
|
||||
close2;
|
||||
Zeny -= 500;
|
||||
if (.@s == -1) // basic storage
|
||||
openstorage;
|
||||
else // "premium" storage starting from index 0
|
||||
openstorage2 .@s, STOR_MODE_GET|STOR_MODE_PUT; // note: opened before close button
|
||||
end;
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
//===== rAthena Script =======================================
|
||||
//= Inn Npcs
|
||||
//===== By: ==================================================
|
||||
//= c, L0ne_W0lf
|
||||
//===== Current Version: =====================================
|
||||
//= 1.1
|
||||
//===== Compatible With: =====================================
|
||||
//= rAthena Project
|
||||
//===== Description: =========================================
|
||||
//= Inn Npcs, Save and Heal
|
||||
//===== Additional Comments: =================================
|
||||
//= 1.0 Added Brasilis inn receptionist. [c]
|
||||
//= 1.1 Updated dialog for Brasilis inn. [L0ne_W0lf]
|
||||
//============================================================
|
||||
|
||||
// Brasilis
|
||||
//============================================================
|
||||
bra_in01,27,24,3 script Hotel Keeper#bra1 478,{
|
||||
mes "[Hotel Keeper]";
|
||||
mes "Welcome to the beautiful Brasilis Hotel.";
|
||||
next;
|
||||
switch(select("Save:Rest -5000 zeny")) {
|
||||
case 1:
|
||||
mes "[Hotel Keeper]";
|
||||
mes "Do you want to save here at the Brasilis Hotel?";
|
||||
next;
|
||||
switch(select("No thank you.:Absolutely.")) {
|
||||
case 1:
|
||||
mes "[Hotel Keeper]";
|
||||
mes "Ok then, enjoy your stay.";
|
||||
close;
|
||||
case 2:
|
||||
mes "[Hotel Keeper]";
|
||||
mes "Your respawn has been saved here at the hotel. I hope that you enjoy your stay here in Brasilis.";
|
||||
savepoint "bra_in01",144,69,1,1;
|
||||
close;
|
||||
}
|
||||
case 2:
|
||||
if (Zeny > 4999) {
|
||||
mes "[Hotel Keeper]";
|
||||
mes "I will show you a great room.";
|
||||
close2;
|
||||
set Zeny, Zeny-5000;
|
||||
percentheal 100,100;
|
||||
warp "bra_in01",144,69;
|
||||
end;
|
||||
}
|
||||
else {
|
||||
mes "[Hotel Keeper]";
|
||||
mes "I'm sorry, but the service charge is 5,000 zeny per night.";
|
||||
close;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,37 +1,29 @@
|
||||
//===== rAthena Script =======================================
|
||||
//= Brasilis Dungeon Monster Spawn Script
|
||||
//===== By: ==================================================
|
||||
//= Kisuka
|
||||
//===== Current Version: =====================================
|
||||
//= 1.0
|
||||
//===== Compatible With: =====================================
|
||||
//= rAthena Project
|
||||
//===== Description: =========================================
|
||||
//= Official monster spawns in Brasilis Dungeon.
|
||||
//===== Additional Comments: =================================
|
||||
//===== Changelog: ===========================================
|
||||
//= 1.0 Official spawns from Aegis [Kisuka]
|
||||
//============================================================
|
||||
|
||||
//==================================================
|
||||
// bra_dun01 - Behind the Waterfall
|
||||
//==================================================
|
||||
bra_dun01,0,0 monster Piranha 2070,80,5000
|
||||
bra_dun01,0,0 monster Iara 2069,30,5000
|
||||
bra_dun01,0,0 monster Black Mushroom 1084,5,180000,90000
|
||||
bra_dun01,0,0 monster Marina 1141,20,5000
|
||||
bra_dun01,0,0 monster Kukre 1070,10,5000
|
||||
bra_dun01,0,0 monster Plankton 1161,10,5000
|
||||
bra_dun01,0,0 monster Hydra 1068,15,5000
|
||||
bra_dun01 monster Piranha 2070,80,5000
|
||||
bra_dun01 monster Iara 2069,30,5000
|
||||
bra_dun01 monster Black Mushroom 1084,5,180000,90000
|
||||
bra_dun01 monster Marina 1141,20,5000
|
||||
bra_dun01 monster Kukre 1070,10,5000
|
||||
bra_dun01 monster Plankton 1161,10,5000
|
||||
bra_dun01 monster Hydra 1068,15,5000
|
||||
|
||||
//==================================================
|
||||
// bra_dun02 - Behind the Waterfall
|
||||
//==================================================
|
||||
bra_dun02,0,0 monster Piranha 2070,60,5000
|
||||
bra_dun02,0,0 monster Iara 2069,110,5000
|
||||
bra_dun02,0,0 monster Marina 1141,10,5000
|
||||
bra_dun02,0,0 monster Kukre 1070,10,5000
|
||||
bra_dun02,0,0 monster Plankton 1161,10,5000
|
||||
bra_dun02,0,0 monster Hydra 1068,15,5000
|
||||
bra_dun02,0,0 monster Shining Plant 1083,2,5000
|
||||
bra_dun02,0,0 monster Black Mushroom 1084,5,5000
|
||||
bra_dun02,0,0,0,0 boss_monster Boitata 2068,1,7200000,600000,1
|
||||
bra_dun02 monster Piranha 2070,60,5000
|
||||
bra_dun02 monster Iara 2069,110,5000
|
||||
bra_dun02 monster Marina 1141,10,5000
|
||||
bra_dun02 monster Kukre 1070,10,5000
|
||||
bra_dun02 monster Plankton 1161,10,5000
|
||||
bra_dun02 monster Hydra 1068,15,5000
|
||||
bra_dun02 monster Shining Plant 1083,2,5000
|
||||
bra_dun02 monster Black Mushroom 1084,5,5000
|
||||
bra_dun02 boss_monster Boitata 2068,1,7200000,600000,1
|
||||
|
||||
19
npc/re/mobs/dungeons/jor_ab.txt
Normal file
19
npc/re/mobs/dungeons/jor_ab.txt
Normal file
@@ -0,0 +1,19 @@
|
||||
//===== rAthena Script =======================================
|
||||
//= jor_ab Monsters Spawn Script
|
||||
//===== Current Version: =====================================
|
||||
//= 1.0
|
||||
//===== Additional Comments: =================================
|
||||
//= 1.0 First version. [Atemo]
|
||||
//============================================================
|
||||
|
||||
jor_ab01 monster --ja-- 21538,65
|
||||
jor_ab01 monster --ja-- 21540,65
|
||||
jor_ab01 monster --ja-- 21541,35
|
||||
jor_ab01 monster --ja-- 21543,35
|
||||
jor_ab01 monster --ja-- 21600,10
|
||||
|
||||
jor_ab02 monster --ja-- 21539,55
|
||||
jor_ab02 monster --ja-- 21542,55
|
||||
jor_ab02 monster --ja-- 21544,40
|
||||
jor_ab02 monster --ja-- 21545,40
|
||||
jor_ab02 monster --ja-- 21601,10
|
||||
20
npc/re/mobs/dungeons/jor_dun.txt
Normal file
20
npc/re/mobs/dungeons/jor_dun.txt
Normal file
@@ -0,0 +1,20 @@
|
||||
//===== rAthena Script =======================================
|
||||
//= jor_dun Monsters Spawn Script
|
||||
//===== Current Version: =====================================
|
||||
//= 1.0
|
||||
//===== Additional Comments: =================================
|
||||
//= 1.0 First version. [Atemo]
|
||||
//============================================================
|
||||
|
||||
jor_dun01 monster --ja-- 21526,80
|
||||
jor_dun01 monster --ja-- 21527,50
|
||||
jor_dun01 monster --ja-- 21528,20
|
||||
jor_dun01 monster --ja-- 21599,10
|
||||
|
||||
jor_dun02 monster --ja-- 21527,60
|
||||
jor_dun02 monster --ja-- 21528,50
|
||||
jor_dun02 monster --ja-- 21529,15
|
||||
jor_dun02 monster --ja-- 21599,10
|
||||
|
||||
jor_que monster --ja-- 21534,3
|
||||
jor_que monster --ja-- 21535,5
|
||||
@@ -1,22 +1,16 @@
|
||||
//===== rAthena Script =======================================
|
||||
//= Brasilis Fields Monster Spawn Script
|
||||
//===== By: ==================================================
|
||||
//= Kisuka
|
||||
//===== Current Version: =====================================
|
||||
//= 1.0
|
||||
//===== Compatible With: =====================================
|
||||
//= rAthena Project
|
||||
//===== Additional Comments: =================================
|
||||
//===== Changelog: ===========================================
|
||||
//= 1.0 Official spawns from Aegis [Kisuka]
|
||||
//============================================================
|
||||
|
||||
//==================================================
|
||||
// bra_fild01 - Brasilis Field
|
||||
//==================================================
|
||||
bra_fild01,0,0 monster Curupira 2074,50,5000
|
||||
bra_fild01,0,0 monster Dokebi 1110,10,5000
|
||||
bra_fild01,0,0 monster Savage 1166,5,5000
|
||||
bra_fild01,0,0 monster Headless Mule 2071,40,5000
|
||||
bra_fild01,0,0 monster Red Mushroom 1085,5,5000
|
||||
bra_fild01,0,0 monster Jaguar 2072,55,5000
|
||||
bra_fild01,0,0 monster Toucan 2073,60,5000
|
||||
bra_fild01 monster Curupira 2074,50,5000
|
||||
bra_fild01 monster Dokebi 1110,10,5000
|
||||
bra_fild01 monster Savage 1166,5,5000
|
||||
bra_fild01 monster Headless Mule 2071,40,5000
|
||||
bra_fild01 monster Red Mushroom 1085,5,5000
|
||||
bra_fild01 monster Jaguar 2072,55,5000
|
||||
bra_fild01 monster Toucan 2073,60,5000
|
||||
|
||||
24
npc/re/mobs/fields/jor_back.txt
Normal file
24
npc/re/mobs/fields/jor_back.txt
Normal file
@@ -0,0 +1,24 @@
|
||||
//===== rAthena Script =======================================
|
||||
//= jor_back Monsters Spawn Script
|
||||
//===== Current Version: =====================================
|
||||
//= 1.0
|
||||
//===== Additional Comments: =================================
|
||||
//= 1.0 First version. [Atemo]
|
||||
//============================================================
|
||||
|
||||
jor_back1 monster --ja-- 21524,60
|
||||
jor_back1 monster --ja-- 21525,60
|
||||
jor_back1 monster --ja-- 21523,80
|
||||
|
||||
jor_back2 monster --ja-- 21521,70
|
||||
jor_back2 monster --ja-- 21525,25
|
||||
jor_back2 monster --ja-- 21523,35
|
||||
jor_back2 monster --ja-- 21520,70
|
||||
|
||||
jor_back3 monster --ja-- 21526,30
|
||||
jor_back3 monster --ja-- 21527,15
|
||||
jor_back3 monster --ja-- 21525,20
|
||||
jor_back3 monster --ja-- 21522,70
|
||||
jor_back3 monster --ja-- 21520,70
|
||||
// unknown delay
|
||||
jor_back3 boss_monster --ja-- 21537,1,7200000,600000,1
|
||||
@@ -65,4 +65,23 @@ function script F_queststatus {
|
||||
return 2;
|
||||
}
|
||||
end;
|
||||
}
|
||||
}
|
||||
|
||||
// Return a value referring to the state of the quests in range.
|
||||
// -1 : at least on of the quest doesn't have the same state
|
||||
// 0 : all the quests are in the state 0 (not in quest log)
|
||||
// 1 : all the quests are in the state 1 (given)
|
||||
// 2 : all the quests are in the state 2 (completed)
|
||||
function script F_queststatus_between {
|
||||
.@start = getarg(0);
|
||||
.@end = getarg(1);
|
||||
.@state = isbegin_quest(.@start);
|
||||
|
||||
for ( .@i = .@start+1; .@i <= .@end; ++.@i ) {
|
||||
if (isbegin_quest(.@i) != .@state) {
|
||||
.@state = -1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return .@state;
|
||||
}
|
||||
|
||||
@@ -4007,8 +4007,8 @@ OnInit:
|
||||
}
|
||||
|
||||
|
||||
// ba_in01,26,266,3 script Smart Ellie#ep18ely01 4_EP17_TABLET,{
|
||||
ba_in01,26,266,3 script Smart Ellie#ep172_ely01 4_EP17_TABLET,{
|
||||
// ba_in01,26,266,3 script Smart Elly#ep18ely01 4_EP17_TABLET,{
|
||||
ba_in01,26,266,3 script Smart Elly#ep172_ely01 4_EP17_TABLET,{
|
||||
if (checkweight(1000103,15) == 0) {
|
||||
mes "You cannot proceed with the quest because you have too many items in your possession.";
|
||||
mes "Please clean up your inventory and try again.";
|
||||
@@ -4016,39 +4016,39 @@ ba_in01,26,266,3 script Smart Ellie#ep172_ely01 4_EP17_TABLET,{
|
||||
}
|
||||
if (ep17_2_main < 32) {
|
||||
cutin "ep172_beta.bmp", 2;
|
||||
mes "[Ellie]";
|
||||
mes "[Elly]";
|
||||
mes "Hello, guest.";
|
||||
mes "I'm responsible for the airship hangar's information.";
|
||||
mes "Please call me Ellie.";
|
||||
mes "Please call me Elly.";
|
||||
close3;
|
||||
}
|
||||
if (ep17_2_main == 32) {
|
||||
cutin "ep172_beta",2;
|
||||
mes "[Ellie]";
|
||||
mes "[Elly]";
|
||||
mes "Hello, guest.";
|
||||
mes "I'm responsible for the airship hangar's information.";
|
||||
mes "Please call me Ellie.";
|
||||
mes "Please call me Elly.";
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "[Elly]";
|
||||
mes "After the master had destroyed this place, I have been doing something else for a while, but...";
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "[Elly]";
|
||||
mes "Now I'm back at Alpha's request.";
|
||||
mes "Please leave the hangar's matters to me, Ellie.";
|
||||
mes "Please leave the hangar's matters to me, Elly.";
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "[Elly]";
|
||||
mes "The leader of the 'intruders' had freely access the area for the master's collection 3...";
|
||||
mes "I returned here to manage it.";
|
||||
npctalk "Sounds troublesome.", "", bc_self;
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "[Elly]";
|
||||
mes "We are currently tracking the expected path after receiving the incident report.";
|
||||
mes "However, tracking it is not easy because the main system of No. 3 is completely disconnected.";
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "[Elly]";
|
||||
mes "The 'invaders' which the 'guests' calls the 'Illusions' has a 99.9% chance that they made modifications on the system.";
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "[Elly]";
|
||||
mes "Dear 'guests', are you here?";
|
||||
cloakoffnpcself( "Est#ep172_est02" );
|
||||
cloakoffnpcself( "Rookie#ep172_rk03" );
|
||||
@@ -4063,15 +4063,15 @@ ba_in01,26,266,3 script Smart Ellie#ep172_ely01 4_EP17_TABLET,{
|
||||
mes "I told Alpha that the analysisable data in the current state is over.";
|
||||
next;
|
||||
cutin "ep172_beta",2;
|
||||
mes "[Ellie]";
|
||||
mes "[Elly]";
|
||||
mes "Yes. I have sent the data.";
|
||||
mes "Currently, there is no reception from the master's collection 3, but we have caught some unusual signals.";
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "[Elly]";
|
||||
mes "This facility has not been used for a long time, but it has been secretly used by the 'intruders' and...";
|
||||
npctalk "Unusual signal?", "Rookie#ep172_rk03", bc_self;
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "[Elly]";
|
||||
mes "There are traces of magical communication with certain places outside the mansion.";
|
||||
mes "It's an intermittent signal.";
|
||||
next;
|
||||
@@ -4081,16 +4081,16 @@ ba_in01,26,266,3 script Smart Ellie#ep172_ely01 4_EP17_TABLET,{
|
||||
mes "Where? the enterprise?";
|
||||
next;
|
||||
cutin "ep172_beta",2;
|
||||
mes "[Ellie]";
|
||||
mes "[Elly]";
|
||||
mes "According to the analysis, it's a one-way reception.";
|
||||
mes "It appears to be collecting reports from the outside...";
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "[Elly]";
|
||||
mes "It will take some time to completely analyze the code because it was used by the 'intruders' for one-way reception.";
|
||||
next;
|
||||
cutin "16loo_01",0;
|
||||
mes "[Rookie]";
|
||||
mes "Then, Ellie, I'll ask for one thing.";
|
||||
mes "Then, Elly, I'll ask for one thing.";
|
||||
mes "Continue receiving the signals as if the 'intruders' leader is still here.";
|
||||
next;
|
||||
cutin "ep162_est01",1;
|
||||
@@ -4099,7 +4099,7 @@ ba_in01,26,266,3 script Smart Ellie#ep172_ely01 4_EP17_TABLET,{
|
||||
mes "With that, we'll be able to trace back the other collaborators out there.";
|
||||
next;
|
||||
cutin "ep172_beta",2;
|
||||
mes "[Ellie]";
|
||||
mes "[Elly]";
|
||||
mes "I will do as you say.";
|
||||
mes "We will maintain information patters of the 'intruders' and collect information received from their accomplices from outside the mansion.";
|
||||
next;
|
||||
@@ -4135,10 +4135,10 @@ ba_in01,26,266,3 script Smart Ellie#ep172_ely01 4_EP17_TABLET,{
|
||||
cutin "16loo_03",0;
|
||||
mes "[Rookie]";
|
||||
mes "Then I'll let everyone and help Alpha.";
|
||||
mes "Take good care of Ellie!";
|
||||
mes "Take good care of Elly!";
|
||||
next;
|
||||
cutin "ep172_beta",2;
|
||||
mes "[Ellie]";
|
||||
mes "[Elly]";
|
||||
mes "Do not worry about this place.";
|
||||
mes "Me and Almond will take care of it.";
|
||||
mes "You can be rest assured.";
|
||||
@@ -4148,189 +4148,190 @@ ba_in01,26,266,3 script Smart Ellie#ep172_ely01 4_EP17_TABLET,{
|
||||
cloakonnpcself( "Rookie#ep172_rk03" );
|
||||
end;
|
||||
}
|
||||
if (ep18_1_main == 0 && BaseLevel >= 170) {
|
||||
if (ep18_main == 0 && BaseLevel >= 170) {
|
||||
cutin "ep172_beta.bmp",2;
|
||||
mes "[Ellie]";
|
||||
mes "The periodic signal has not yet been received.";
|
||||
mes "The whereabouts of your master's collection#3 are also being tracked.";
|
||||
mes "[Elly]";
|
||||
mes "No regular signals have been received yet.";
|
||||
mes "We're also tracking the whereabouts of your collection #3.";
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "Don't worry.";
|
||||
mes "Time is on our side";
|
||||
mes "[Elly]";
|
||||
mes "No worries.";
|
||||
mes "Time is on our side.";
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "I and Alpha will analyze the information properly, so if you clean up the abandoned remnants... Ah!";
|
||||
mes "[Elly]";
|
||||
mes "We'll properly analyze the information, so it would be great if the guest could clean up the remnants left behind... Oh!";
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "Please don't go anywhere for a moment.";
|
||||
mes "It will be over soon";
|
||||
mes "Time was on our side, wasn't it?";
|
||||
mes "[Elly]";
|
||||
mes "Just a moment, please stay here.";
|
||||
mes "It'll be over soon.";
|
||||
mes "Time is on our side, right?";
|
||||
next;
|
||||
// note: progressbar_npc must be after "next" otherwise the client may crash
|
||||
progressbar_npc "FFFF00",4;
|
||||
mes "[Ellie]";
|
||||
mes "[Elly]";
|
||||
mes "Wait a minute...";
|
||||
mes "...";
|
||||
mes "...";
|
||||
// note: progressbar_npc must be after "next" otherwise the client may crash
|
||||
// progressbar_npc "FFFF00",4;
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "As soon as the password is decrypted, it will be fast.";
|
||||
mes "The thing that took the longest is an instant.";
|
||||
progressbar_npc "FFFF00",4;
|
||||
mes "[Elly]";
|
||||
mes "Once we decrypt the code, it'll be quick.";
|
||||
mes "The longest part is over, so it feels like it went by in a flash.";
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "There is something in ^0000FFRachel^000000";
|
||||
mes "Of course I've only heard of Rachel, but I've never been there.";
|
||||
mes "The 'collaborators' there don't seem to know that their heads have moved yet.";
|
||||
mes "[Elly]";
|
||||
mes "There is something in ^0000FFRachel^000000.";
|
||||
mes "Of course, I've only heard of Rachel, and I've never been there.";
|
||||
mes "The 'collaborators' at that location seem unaware of their leaders' movements as of yet.";
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "Although we don't know where your master's Collection#3 is yet, we'll have to keep an eye out for information coming in here...";
|
||||
mes "what if?";
|
||||
mes "[Elly]";
|
||||
mes "Although we still don't know the whereabouts of Master's Collection No. 3, we need to continue to gather information coming in from here...";
|
||||
mes "What should we do?";
|
||||
next;
|
||||
select( "What?" );
|
||||
mes "[" + strcharinfo(0) + "]";
|
||||
mes "What are you doing?";
|
||||
mes "What should I do?";
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "The collaborator's position has been roughly secured. Reportedly 'waiting for your next instruction',";
|
||||
mes "Then, before the next instruction is issued, we should catch up on that side as soon as possible...";
|
||||
mes "[Elly]";
|
||||
mes "The location of the collaborator has been roughly secured. According to the report, they are awaiting further instructions, so...";
|
||||
mes "In that case, we should thoroughly investigate that area before the next instructions are given...";
|
||||
cloakoffnpcself( "Rookie#ep181_rk01" );
|
||||
cloakoffnpcself( "EST#ep181_est01" );
|
||||
npctalk "Rookie: Did you call?", "Rookie#ep181_rk01", bc_self;
|
||||
npctalk "EST: It ended sooner than I thought.", "EST#ep181_est01", bc_self;
|
||||
cloakoffnpcself( "Est#ep181_est01" );
|
||||
npctalk "Rookie: Did you call me?", "Rookie#ep181_rk01", bc_self;
|
||||
npctalk "Est: That was quicker than I thought.", "Est#ep181_est01", bc_self;
|
||||
next;
|
||||
cutin "ep162_est01.bmp",1;
|
||||
mes "[EST]";
|
||||
mes "Okay then Rachel...";
|
||||
mes "[Est]";
|
||||
mes "Okay, so Rachel...";
|
||||
next;
|
||||
cutin "16loo_01.bmp",0;
|
||||
mes "[Rookie]";
|
||||
mes "Rachel... who's going?";
|
||||
mes "Rachel... Who's going?";
|
||||
next;
|
||||
cutin "ep172_beta.bmp",2;
|
||||
mes "[Ellie]";
|
||||
mes "Is this a conflict of opinion?";
|
||||
mes "[Elly]";
|
||||
mes "Are we having a difference of opinion?";
|
||||
next;
|
||||
cutin "16loo_03.bmp",0;
|
||||
mes "[Rookie]";
|
||||
mes "It's not like that...";
|
||||
mes "I think it will be a bit difficult if we all go.";
|
||||
mes "Not really...";
|
||||
mes "I think it would be a little awkward if we all went.";
|
||||
next;
|
||||
cutin "ep162_est01.bmp",1;
|
||||
mes "[EST]";
|
||||
mes "Ah... I see.";
|
||||
mes "Yes. If 'Rebellion' moves, it could become a diplomatic matter.";
|
||||
mes "[Est]";
|
||||
mes "Ah, I see.";
|
||||
mes "Yes. If the Rebellion moves, it could become a diplomatic issue.";
|
||||
next;
|
||||
cutin "16loo_03.bmp",0;
|
||||
mes "[Rookie]";
|
||||
mes "Yes. Especially if it's Rachel.";
|
||||
mes "The problem between the mansion and the business has not yet been fully resolved...";
|
||||
mes "Yes, even more so if it's Rachel.";
|
||||
mes "...and the problems between the mansion and the company haven't all been solved yet.";
|
||||
next;
|
||||
cutin "ep172_beta.bmp",2;
|
||||
mes "[Ellie]";
|
||||
mes "Okay.";
|
||||
mes "[Elly]";
|
||||
mes "I see.";
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "Then...";
|
||||
mes "[Elly]";
|
||||
mes "If so, then...";
|
||||
next;
|
||||
select( "Why are you looking at me?" );
|
||||
select( "Why are they looking at me?" );
|
||||
cutin "",255;
|
||||
mes "[" + strcharinfo(0) + "]";
|
||||
mes "what are you doing?";
|
||||
mes "What do I do?";
|
||||
next;
|
||||
cutin "ep172_beta.bmp",2;
|
||||
mes "[Ellie]";
|
||||
mes "[Elly]";
|
||||
mes "Let's go, Rachel.";
|
||||
npctalk "Rookie: name.", "Rookie#ep181_rk01", bc_self;
|
||||
npctalk "Est: Name.", "EST#ep181_est01", bc_self;
|
||||
npctalk "Rookie: So it's a place name, huh?", "Rookie#ep181_rk01", bc_self;
|
||||
npctalk "Est: A place name.", "Est#ep181_est01", bc_self;
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "Are other guests affiliated?";
|
||||
mes "It is difficult when disputes arise because of jurisdiction.";
|
||||
mes "You never know how long it will take, so it's not suitable for a companion.";
|
||||
mes "[Elly]";
|
||||
mes "But the other guests have affiliations, don't they?";
|
||||
mes "It will be difficult if there is a conflict due to jurisdiction.";
|
||||
mes "You don't know how long it will take, so it's not a good idea to accompany them.";
|
||||
next;
|
||||
cutin "ep162_est01.bmp",1;
|
||||
mes "[EST]";
|
||||
mes "It sounds like you want to go there yourself.";
|
||||
mes "[Est]";
|
||||
mes "That sounds like you're saying you're definitely going to go in person.";
|
||||
next;
|
||||
cutin "ep172_beta.bmp",2;
|
||||
mes "[Ellie]";
|
||||
mes "Yes.";
|
||||
mes "Please wait a minute.";
|
||||
mes "[Elly]";
|
||||
mes "Yes, it is.";
|
||||
mes "Please wait a moment.";
|
||||
next;
|
||||
progressbar_npc "00CCFF",7;
|
||||
mes "[Ellie]";
|
||||
progressbar_npc "CCFF",7;
|
||||
mes "[Elly]";
|
||||
mes "...";
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "You have permission.";
|
||||
npctalk "Meeting ended.", "", bc_self;
|
||||
mes "[Elly]";
|
||||
mes "You're authorized.";
|
||||
npctalk "The meeting has ended.", "Smart Elly#ep18ely01", bc_self;
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "The purpose is support, not hindrance.";
|
||||
mes "I will follow you without burden.";
|
||||
mes "I'll give you this.";
|
||||
mes "[Elly]";
|
||||
mes "The purpose is not to hinder but to support.";
|
||||
mes "We'll follow along, no pressure.";
|
||||
mes "I will give this to you.";
|
||||
next;
|
||||
cutin "",255;
|
||||
mes "What Ellie gave her was a doll with a slightly droopy feel that resembled Ellie.";
|
||||
mes "It may not necessarily be Ellie.";
|
||||
mes "What Elly gave was a doll that looked exactly like Elly and felt a little stretched out.";
|
||||
mes "It may not be Elly, but...";
|
||||
next;
|
||||
cutin "ep172_beta.bmp",2;
|
||||
mes "[Ellie]";
|
||||
mes "We have equipment that can transmit and receive data over long distances.";
|
||||
mes "Because we are such beings.";
|
||||
mes "[Elly]";
|
||||
mes "We also have equipment capable of long-distance data transmission and reception.";
|
||||
mes "Because that's who we are.";
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "But things are a little different now, so I'll give you a simple beta.";
|
||||
npctalk "Be sure to take it with you", "", bc_self;
|
||||
mes "[Elly]";
|
||||
mes "But things are a little different now, so I'll give you a beta version.";
|
||||
npctalk "Don't forget to take it with you.", "Smart Elly#ep18ely01", bc_self;
|
||||
next;
|
||||
cutin "16loo_02.bmp",0;
|
||||
mes "[Rookie]";
|
||||
mes "Uh... Mini Ellie?";
|
||||
mes "Uh... Mini Elly?";
|
||||
next;
|
||||
cutin "ep172_beta.bmp",2;
|
||||
mes "[Ellie]";
|
||||
mes "Okay. I'll take that name.";
|
||||
mes "Using the resources of the main body, it is possible to collect visual and auditory information and communicate like a clone.";
|
||||
mes "[Elly]";
|
||||
mes "Great, I'm adopting that name.";
|
||||
mes "I can collect information like vision and hearing and communicate like an avatar using my own resources.";
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "There is no individual core, so the information obtained is not shared between betas unless I update it,";
|
||||
mes "If communication is lost, it's just a doll.";
|
||||
mes "[Elly]";
|
||||
mes "There are no individual cores, so the information I get is not shared between betas unless I update it,";
|
||||
mes "If communication is lost, it's just a puppet.";
|
||||
next;
|
||||
cutin "16loo_01.bmp",0;
|
||||
mes "[Rookie]";
|
||||
mes "Then call us if you need assistance.";
|
||||
mes "Like Ellie, we will provide generous support except for the manpower.";
|
||||
mes "Then call us if you need our support.";
|
||||
mes "I will support you without reservation, just like Elly, except for manpower.";
|
||||
next;
|
||||
cutin "ep172_beta.bmp",2;
|
||||
mes "[Ellie]";
|
||||
mes "It will be so";
|
||||
mes "[Elly]";
|
||||
mes "Yes, I will do that.";
|
||||
mes "Please take care of yourself.";
|
||||
npctalk "I'm going with you, but it's strange to greet you like this.", "", bc_self;
|
||||
npctalk "It's strange to be greeting each other like this when we're going together.", "Smart Elly#ep18ely01", bc_self;
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "The almost exact coordinates from which the signal was sent...";
|
||||
mes "About <NAVI>[here]<INFO>rachel,182,176,0,101,0</INFO></NAVI>";
|
||||
ep18_1_main = 1;
|
||||
mes "[Elly]";
|
||||
mes "The nearly exact coordinates of the signal's origin are...";
|
||||
mes "around <NAVI>[here]<INFO>rachel,182,176,0,101,0</INFO></NAVI> or so.";
|
||||
ep18_main = 1;
|
||||
setquest 8681;
|
||||
getitem 400127,1; // Ep18_Mini_Elly
|
||||
close3;
|
||||
}
|
||||
if (ep18_1_main == 1) {
|
||||
mes "[Ellie]";
|
||||
mes "Please be safe.";
|
||||
if (ep18_main == 1) {
|
||||
mes "[Elly]";
|
||||
mes "Safe travels to Rachel.";
|
||||
close;
|
||||
|
||||
}
|
||||
cutin "ep172_beta",2;
|
||||
mes "[Ellie]";
|
||||
mes "[Elly]";
|
||||
mes "No intermittent signal has been received yet.";
|
||||
mes "The whereabouts of the master's collection 3 are also being tracked at the same time.";
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "[Elly]";
|
||||
mes "Don't worry.";
|
||||
mes "Time is on our side.";
|
||||
next;
|
||||
mes "[Ellie]";
|
||||
mes "[Elly]";
|
||||
mes "Me and Alpha will analyze the information properly, so I'd like you to clean up the intruders remnant.";
|
||||
close3;
|
||||
|
||||
@@ -4339,7 +4340,7 @@ OnInit:
|
||||
// questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(18018) == 1" );
|
||||
|
||||
// check for episode 17.2 completion
|
||||
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(8681) == 0 && isbegin_quest(18018) == 2 && BaseLevel >= 170" );
|
||||
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(8681) == 0 && isbegin_quest(18018) == 2 && BaseLevel >= 170" );
|
||||
end;
|
||||
}
|
||||
|
||||
@@ -9389,8 +9390,8 @@ ba_in01,32,250,3 script Sweety#ep172_swty 4_EP17_SWEETY,{
|
||||
mes "[Almond]";
|
||||
mes "Not possible.";
|
||||
mes "You won't be able to receieve it even if it came.";
|
||||
mes "Ellie took your receiving chip while we're repairing you.";
|
||||
mes "Doesn't that mean Ellie will take the orders for you?";
|
||||
mes "Elly took your receiving chip while we're repairing you.";
|
||||
mes "Doesn't that mean Elly will take the orders for you?";
|
||||
npctalk "No! I'll receive my next orders soon!", "", bc_self;
|
||||
next;
|
||||
mes "[Almond]";
|
||||
|
||||
13096
npc/re/quests/quests_18.txt
Normal file
13096
npc/re/quests/quests_18.txt
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user