Compare commits

..

45 Commits

Author SHA1 Message Date
vstumpf
fd1e582156 It kinda works! 2024-07-05 09:07:17 +00:00
vstumpf
920b6a78c5 Merge branch 'refactor/cmake' into refactor/skills 2024-07-05 08:26:47 +00:00
vstumpf
34bdb49db9 Merge remote-tracking branch 'origin/refactor/cmake' into refactor/cmake 2024-07-05 01:02:10 +00:00
vstumpf
f54a204a7d Merge branch 'master' into refactor/cmake 2024-07-05 01:01:11 +00:00
Vincent Stumpf
b1a2d74b54 Merge pull request #4 from secretdataz/refactor/cmake
Added some Windows fixes, Added MAXXCON option to CMake
2024-05-09 00:10:14 -07:00
Jittapan Pluemsumran
d16dccf994 Added some Windows fixes, Added MAXXCON option to CMake 2024-05-04 19:47:01 +07:00
vstumpf
2e69ccedea Merge branch 'master' into refactor/cmake 2024-04-21 05:23:58 +00:00
Vincent Stumpf
b01e7da68d Merge branch 'master' into refactor/cmake 2024-02-17 01:50:56 +00:00
Vincent Stumpf
008d25cfb2 Merge remote-tracking branch 'upstream/master' into refactor/cmake 2023-12-24 00:26:14 +00:00
Vincent Stumpf
f4c9ed691c Merge remote-tracking branch 'upstream/master' into refactor/cmake 2023-12-12 07:43:50 +00:00
Vincent Stumpf
cc397167ab Enable configurable multi-threaded compilation 2023-12-12 07:43:19 +00:00
Vincent Stumpf
8f15bc2117 Merge remote-tracking branch 'upstream/master' into refactor/cmake 2023-11-26 05:45:27 +00:00
Vincent Stumpf
bf36dd4b1f Merge remote-tracking branch 'upstream/master' into refactor/cmake 2023-11-05 01:13:39 +00:00
Vincent Stumpf
fc242d0472 remove commented code 2023-08-06 06:24:33 +00:00
Vincent Stumpf
f41a80ca59 Remove redundant ubuntu-latest build 2023-07-20 03:34:32 +00:00
Vincent Stumpf
eadff3366d Fix cmake arg order 2023-07-12 03:27:56 +00:00
Vincent Stumpf
9636aa020d Remove deprecated builds 2023-07-12 03:23:48 +00:00
Vincent Stumpf
5c2718de03 Add concurrency and dependency on CMakeLists.txt 2023-07-12 03:22:52 +00:00
Vincent Stumpf
1b3357611b Merge remote-tracking branch 'upstream/master' into refactor/cmake 2023-07-03 07:44:30 +00:00
Vincent Stumpf
b3f6ad41ba Merge branch 'master' of github.com:rathena/rathena into refactor/cmake 2023-06-19 05:44:33 +00:00
Vincent Stumpf
c789cdbadd Merge remote-tracking branch 'upstream/master' into refactor/cmake 2023-06-18 22:28:19 +00:00
Vincent Stumpf
98ac59a940 change to oop 2023-06-17 02:00:01 +00:00
Vincent Stumpf
f73e6658ca Add deprecation notice in rAthena.sln 2023-06-15 03:01:39 +00:00
Vincent Stumpf
d98166383c Add .sh filetype to athena-start 2023-06-14 07:19:05 +00:00
Vincent Stumpf
b1520ea969 Add new line after tools 2023-06-14 07:10:48 +00:00
Vincent Stumpf
ee456d8af6 Add HAVE_STRNLEN and HAVE_SETRLIMIT 2023-06-14 07:08:14 +00:00
Vincent Stumpf
1545d483c0 Build tools in cmake workflow 2023-06-14 04:57:28 +00:00
Vincent Stumpf
b6ce15af00 Don't need to copy the configure files, they're being replaced by cmake 2023-06-13 07:34:08 +00:00
Vincent Stumpf
1f474a62cf enable PCRE for mapserver 2023-06-11 07:22:21 +00:00
Vincent Stumpf
9024cc7ef8 Change most github workflows to cmake 2023-06-11 06:41:37 +00:00
Vincent Stumpf
026c014eb2 Add ENABLE_VIP option to cmake 2023-06-11 06:39:36 +00:00
Vincent Stumpf
26dee6891b Fix windows cmake 2023-06-11 05:03:44 +00:00
Vincent Stumpf
258a8e6be0 Let's add windows to the cmake ci 2023-06-11 03:07:36 +00:00
Vincent Stumpf
48b0b082b6 Whoops, let's leave the configure script in, and the linux scripts too for now 2023-06-11 02:33:46 +00:00
Vincent Stumpf
6ae46a7bf8 Add custom 'server' target 2023-06-11 02:29:17 +00:00
Vincent Stumpf
855cf12007 Move scripts to tools 2023-06-11 02:29:17 +00:00
Vincent Stumpf
ae862453bd Move extra cmake files to tools/cmake 2023-06-11 02:29:17 +00:00
Vincent Stumpf
c11d73d6a8 Add epoll support 2023-06-11 02:29:17 +00:00
Vincent Stumpf
ff86c7b9d1 Maybe make scripts work? 2023-06-11 02:29:17 +00:00
Vincent Stumpf
e1b9b0d9b3 Add support for import files
This will check and copy import files whenever we regenerate the build system
2023-06-11 02:29:17 +00:00
Vincent Stumpf
b3c47f043e Remove cmakelistsold (oops) and clean up httplib 2023-06-11 02:29:17 +00:00
Vincent Stumpf
c69587c2e7 Refactor CMake to be nicer, more modern, easier to understand 2023-06-11 02:29:15 +00:00
Vincent Stumpf
95ee5d04e6 Double visitor? 2023-06-10 06:41:25 +00:00
Vincent Stumpf
28383ee332 Initial commit of skills 2023-06-04 05:45:11 +00:00
Vincent Stumpf
857f335729 Fix cmake stuff 2023-05-26 01:58:55 +00:00
169 changed files with 32192 additions and 41128 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

6
.gitignore vendored
View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

35
conf/CMakeLists.txt Normal file
View File

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

View File

@@ -1032,11 +1032,6 @@ Body:
- Command: setcard
Help: |
Adds a card or enchant to the specific slot of the equipment.
- Command: resetcooltime
Aliases:
- resetcooldown
Help: |
Resets the cooldown of all skills of the player and if active also of the homunculus or the mercenary.
Footer:
Imports:

View File

@@ -17,18 +17,10 @@
// 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

View File

@@ -12,10 +12,8 @@
// The highest value at which an item can be sold via the merchant vend skill. (in zeny)
vending_max_value: 1000000000
// 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.
// 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.
vending_over_max: yes
// Tax to apply to all vending transactions (eg: 10000 = 100%, 50 = 0.50%)

View File

@@ -295,8 +295,8 @@ trait_points_job_change: 7
// Max trait stats cap.
// Trait Stats: POW, STA, WIS, SPL, CON, CRT
// Official is 110.
max_trait_parameter: 110
// Official is 100.
max_trait_parameter: 100
// Max percent of RES/MRES that can be ignored by item bonus/skill.
// Default: 50

View File

@@ -1823,8 +1823,5 @@
1534: Usage: @stockall {<type>}
1535: %d items are transferred (%d skipped)!
1536: Log configuration has been reloaded.
1537: Found skill '%s', unblocking...
//Custom translations
import: conf/msg_conf/import/map_msg_eng_conf.txt

72
db/CMakeLists.txt Normal file
View File

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

View File

@@ -33,24 +33,3 @@ 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

View File

@@ -2613,7 +2613,7 @@ Body:
Flags:
BuyingStore: true
Script: |
sc_start SC_SLOWDOWN,5000,100;
sc_start SC_SlowDown,5000,0;
- Id: 12018
AegisName: Fire_Cracker
Name: Firecracker

View File

@@ -866,14 +866,3 @@ 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

View File

@@ -3660,27 +3660,17 @@ 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: 1200
Time: 2000
- Level: 3
Time: 1400
Time: 3000
- Level: 4
Time: 1600
Time: 4000
- Level: 5
Time: 1800
Time: 5000
AfterCastActDelay: 700
Requires:
SpCost:
- Level: 1
@@ -3732,7 +3722,7 @@ Body:
Time: 4000
- Level: 5
Time: 5000
AfterCastActDelay: 1000
AfterCastActDelay: 700
Duration1: 100
Requires:
SpCost:
@@ -30736,8 +30726,10 @@ Body:
TargetType: Self
DamageFlags:
NoDamage: true
Range: 9
Hit: Single
HitCount: 1
AfterCastActDelay: 2000
AfterCastWalkDelay: 1000
Requires:
SpCost:
- Level: 1
@@ -30760,8 +30752,11 @@ Body:
TargetType: Self
DamageFlags:
NoDamage: true
Splash: true
Hit: Single
HitCount: 1
SplashArea: -1
AfterCastActDelay: 35000
AfterCastWalkDelay: 1000
Duration1:
- Level: 1
Time: 40000
@@ -30790,6 +30785,7 @@ Body:
Name: HLIF_BRAIN
Description: Brain Surgery
MaxLevel: 5
SplashArea: 1
- Id: 8004
Name: HLIF_CHANGE
Description: Change
@@ -30797,14 +30793,7 @@ Body:
TargetType: Self
DamageFlags:
NoDamage: true
AfterCastActDelay:
- Level: 1
Time: 600000
- Level: 2
Time: 900000
- Level: 3
Time: 1200000
AfterCastWalkDelay: 1000
Hit: Single
Duration1:
- Level: 1
Time: 60000
@@ -30812,6 +30801,13 @@ 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
@@ -30822,8 +30818,8 @@ Body:
TargetType: Self
DamageFlags:
NoDamage: true
AfterCastActDelay: 1000
AfterCastWalkDelay: 1000
Hit: Single
Duration2: 1000
Requires:
SpCost: 10
- Id: 8006
@@ -30833,8 +30829,8 @@ Body:
TargetType: Self
DamageFlags:
NoDamage: true
Hit: Single
AfterCastActDelay: 30000
AfterCastWalkDelay: 1000
Duration1:
- Level: 1
Time: 40000
@@ -30863,6 +30859,8 @@ Body:
Name: HAMI_SKIN
Description: Adamantium Skin
MaxLevel: 5
DamageFlags:
NoDamage: true
- Id: 8008
Name: HAMI_BLOODLUST
Description: Bloodlust
@@ -30870,14 +30868,7 @@ Body:
TargetType: Self
DamageFlags:
NoDamage: true
AfterCastActDelay:
- Level: 1
Time: 300000
- Level: 2
Time: 600000
- Level: 3
Time: 900000
AfterCastWalkDelay: 1000
Hit: Single
Duration1:
- Level: 1
Time: 60000
@@ -30885,6 +30876,13 @@ 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
@@ -30907,6 +30905,7 @@ Body:
Count: -2
- Level: 5
Count: -3
AfterCastWalkDelay: 2000
Requires:
SpCost:
- Level: 1
@@ -30927,18 +30926,6 @@ 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
@@ -30950,6 +30937,17 @@ 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
@@ -30973,18 +30971,6 @@ 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
@@ -30996,6 +30982,17 @@ 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
@@ -31018,6 +31015,7 @@ Body:
Range: 15
Hit: Single
HitCount: 1
AfterCastActDelay: 1000
Requires:
SpCost: 1
- Id: 8013
@@ -31039,6 +31037,17 @@ 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
@@ -31059,7 +31068,8 @@ Body:
DamageFlags:
NoDamage: true
Hit: Single
AfterCastWalkDelay: 1500
AfterCastActDelay: 3000
AfterCastWalkDelay: 3000
Requires:
SpCost: 40
- Id: 8015
@@ -31083,6 +31093,7 @@ Body:
HitCount: 1
Element: Weapon
SplashArea: 4
AfterCastWalkDelay: 1000
Requires:
SpCost: 1
- Id: 8018

View File

@@ -552,33 +552,3 @@ Body:
Points: 4545
- Level: 260
Points: 4545
- Level: 261
Points: 4545
- Level: 262
Points: 4545
- Level: 263
Points: 4545
- Level: 264
Points: 4545
- Level: 265
Points: 4545
- Level: 266
Points: 4545
- Level: 267
Points: 4545
- Level: 268
Points: 4545
- Level: 269
Points: 4545
- Level: 270
Points: 4545
- Level: 271
Points: 4545
- Level: 272
Points: 4545
- Level: 273
Points: 4545
- Level: 274
Points: 4545
- Level: 275
Points: 4545

View File

@@ -2478,17 +2478,13 @@ Body:
DurationLookup: HLIF_AVOID
CalcFlags:
Speed: true
Flags:
NoSave: true
RemoveFromHomOnWarp: true
- Status: Change
DurationLookup: HLIF_CHANGE
CalcFlags:
Vit: true
Int: true
Flags:
NoSave: true
RemoveFromHomOnWarp: true
RemoveOnChangeMap: true
Fail:
Change: true
- Status: Bloodlust
@@ -2496,9 +2492,6 @@ Body:
CalcFlags:
Batk: true
Watk: true
Flags:
NoSave: true
RemoveFromHomOnWarp: true
- Status: Fleet
DurationLookup: HFLI_FLEET
CalcFlags:
@@ -2513,10 +2506,6 @@ Body:
DurationLookup: HAMI_DEFENCE
CalcFlags:
Def: true
Vit: true
Flags:
NoSave: true
RemoveFromHomOnWarp: true
- Status: Incaspdrate
CalcFlags:
Aspd: true
@@ -3974,7 +3963,7 @@ Body:
Unlimitedhummingvoice: true
Sircleofnature: true
- Status: Deepsleep
Icon: EFST_DEEP_SLEEP
Icon: EFST_HANDICAPSTATE_DEEP_SLEEP
DurationLookup: WM_LULLABY_DEEPSLEEP
States:
NoCast: true

View File

@@ -76,15 +76,15 @@ Body:
- Refine: 15
Chance: 7000
- Refine: 16
Chance: 8000
Chance: 7000
- Refine: 17
Chance: 8000
Chance: 7000
- Refine: 18
Chance: 8000
Chance: 7000
- Refine: 19
Chance: 8000
Chance: 7000
- Refine: 20
Chance: 8000
Chance: 7000
Bonus: 10
Catalyst:
Item: Blessed_Etel_Dust
@@ -116,15 +116,15 @@ Body:
- Refine: 15
Chance: 6000
- Refine: 16
Chance: 7000
Chance: 6000
- Refine: 17
Chance: 7000
Chance: 6000
- Refine: 18
Chance: 7000
Chance: 6000
- Refine: 19
Chance: 7000
Chance: 6000
- Refine: 20
Chance: 7000
Chance: 6000
Bonus: 30
Catalyst:
Item: Blessed_Etel_Dust
@@ -154,15 +154,15 @@ Body:
- Refine: 15
Chance: 5000
- Refine: 16
Chance: 6000
Chance: 5000
- Refine: 17
Chance: 6000
Chance: 5000
- Refine: 18
Chance: 6000
Chance: 5000
- Refine: 19
Chance: 6000
Chance: 5000
- Refine: 20
Chance: 6000
Chance: 5000
Bonus: 50
AnnounceFail: true
Catalyst:
@@ -193,15 +193,15 @@ Body:
- Refine: 15
Chance: 4000
- Refine: 16
Chance: 5000
Chance: 4000
- Refine: 17
Chance: 5000
Chance: 4000
- Refine: 18
Chance: 5000
Chance: 4000
- Refine: 19
Chance: 5000
Chance: 4000
- Refine: 20
Chance: 5000
Chance: 4000
Bonus: 100
AnnounceFail: true
Catalyst:
@@ -240,15 +240,15 @@ Body:
- Refine: 15
Chance: 7000
- Refine: 16
Chance: 8000
Chance: 7000
- Refine: 17
Chance: 8000
Chance: 7000
- Refine: 18
Chance: 8000
Chance: 7000
- Refine: 19
Chance: 8000
Chance: 7000
- Refine: 20
Chance: 8000
Chance: 7000
Bonus: 10
Catalyst:
Item: Blessed_Etel_Dust
@@ -280,15 +280,15 @@ Body:
- Refine: 15
Chance: 6000
- Refine: 16
Chance: 7000
Chance: 6000
- Refine: 17
Chance: 7000
Chance: 6000
- Refine: 18
Chance: 7000
Chance: 6000
- Refine: 19
Chance: 7000
Chance: 6000
- Refine: 20
Chance: 7000
Chance: 6000
Bonus: 30
Catalyst:
Item: Blessed_Etel_Dust
@@ -318,15 +318,15 @@ Body:
- Refine: 15
Chance: 5000
- Refine: 16
Chance: 6000
Chance: 5000
- Refine: 17
Chance: 6000
Chance: 5000
- Refine: 18
Chance: 6000
Chance: 5000
- Refine: 19
Chance: 6000
Chance: 5000
- Refine: 20
Chance: 6000
Chance: 5000
Bonus: 50
AnnounceFail: true
Catalyst:
@@ -357,15 +357,15 @@ Body:
- Refine: 15
Chance: 4000
- Refine: 16
Chance: 5000
Chance: 4000
- Refine: 17
Chance: 5000
Chance: 4000
- Refine: 18
Chance: 5000
Chance: 4000
- Refine: 19
Chance: 5000
Chance: 4000
- Refine: 20
Chance: 5000
Chance: 4000
Bonus: 100
AnnounceFail: true
Catalyst:

View File

@@ -501,19 +501,19 @@ Body:
7@thts: true
8@thts: true
- Id: 67
Name: Oz Labyrinth
Name: The Maze of Oz
Enter:
Map: 1@oz
X: 284
Y: 167
- Id: 68
Name: Thor Military Base
Name: Thor Gunsu Base
Enter:
Map: 1@tcamp
X: 103
Y: 237
- Id: 69
Name: Wolves Gathering Place
Name: A Gathering Place of Wolves
Enter:
Map: 1@nyr
X: 194
@@ -529,7 +529,7 @@ Body:
AdditionalMaps:
2@nyr: true
- Id: 71
Name: High Priest's Villa
Name: Villa of High Priest
Enter:
Map: 1@adv
X: 123

View File

@@ -112246,7 +112246,8 @@ Body:
Defense: 30
Slots: 1
Classes:
All: true
All_Third: true
Fourth: true
Locations:
Garment: true
ArmorLevel: 1
@@ -112275,7 +112276,8 @@ Body:
Defense: 30
Slots: 1
Classes:
All: true
All_Third: true
Fourth: true
Locations:
Garment: true
ArmorLevel: 1
@@ -112304,7 +112306,8 @@ Body:
Defense: 30
Slots: 1
Classes:
All: true
All_Third: true
Fourth: true
Locations:
Garment: true
ArmorLevel: 1
@@ -139532,7 +139535,7 @@ Body:
AegisName: Ein_BHAXE
Name: Saw Axe
Type: Weapon
SubType: 2hAxe
SubType: 1hAxe
Weight: 5000
Attack: 350
Range: 1
@@ -169197,8 +169200,6 @@ Body:
Defense: 12
Slots: 1
Jobs:
Crusader: true
Knight: true
Swordman: true
Classes:
All_Upper: true
@@ -169219,8 +169220,6 @@ Body:
Defense: 12
Slots: 1
Jobs:
Crusader: true
Knight: true
Swordman: true
Classes:
All_Upper: true
@@ -187653,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_FATALMENACE",20*(.@r/3);
bonus2 bSkillAtk,"SC_STARTMARK",20*(.@r/3);
if (.@r>=9) {
bonus bLongAtkRate,10;
bonus bShortAtkRate,10;

View File

@@ -86200,31 +86200,31 @@ Body:
Flags:
BuyingStore: true
- Id: 1001072
AegisName: Evil_Black_Bid
AegisName: aegis_1001072
Name: Evil Orb
Type: Etc
Buy: 1480
Weight: 10
- Id: 1001073
AegisName: Ectoplasmic_Stone
AegisName: aegis_1001073
Name: Ectoplasmic Stone
Type: Etc
Buy: 1460
Weight: 10
- Id: 1001074
AegisName: Heavy_Chain
AegisName: aegis_1001074
Name: Heavy Chain
Type: Etc
Buy: 1480
Weight: 10
- Id: 1001075
AegisName: Evil_Minded_Ruby
AegisName: aegis_1001075
Name: Evil Minded Ruby
Type: Etc
Buy: 1500
Weight: 10
- Id: 1001076
AegisName: Small_Sewing_Box
AegisName: aegis_1001076
Name: Small Sewing Kit
Type: Etc
Buy: 1640
@@ -86236,37 +86236,37 @@ Body:
Buy: 1600
Weight: 10
- Id: 1001078
AegisName: Blue_Moon_Stone
AegisName: aegis_1001078
Name: Fragments of the Blue Moon
Type: Etc
Buy: 1720
Weight: 10
- Id: 1001079
AegisName: Weird_Tentacle
AegisName: aegis_1001079
Name: Monstrous Tentacles
Type: Etc
Buy: 1520
Weight: 10
- Id: 1001080
AegisName: Congealed_Poison
AegisName: aegis_1001080
Name: Congealed Poison
Type: Etc
Buy: 1600
Weight: 10
- Id: 1001081
AegisName: Slicky_Fluid
AegisName: aegis_1001081
Name: Slimy Fluid
Type: Etc
Buy: 1560
Weight: 10
- Id: 1001082
AegisName: Reptile_Stone
AegisName: aegis_1001082
Name: Monster's Stone
Type: Etc
Buy: 1720
Weight: 10
- Id: 1001083
AegisName: Turn_Yellow_Leaf
AegisName: aegis_1001083
Name: Maple Leaves
Type: Etc
Buy: 1640
@@ -86278,13 +86278,13 @@ Body:
Buy: 1480
Weight: 10
- Id: 1001085
AegisName: Cool_Liquid
AegisName: aegis_1001085
Name: Cool Liquid
Type: Etc
Buy: 1460
Weight: 10
- Id: 1001086
AegisName: Green_Crystal_Fragment
AegisName: aegis_1001086
Name: Blue Crystal Shard
Type: Etc
Buy: 1480
@@ -86296,7 +86296,7 @@ Body:
Buy: 1600
Weight: 10
- Id: 1001088
AegisName: Fresh_Pear
AegisName: aegis_1001088
Name: Fresh Pear
Type: Etc
Buy: 1640
@@ -90384,7 +90384,7 @@ Body:
Ammo: true
EquipLevelMin: 1
Script: |
bonus bAtkEle,Ele_Ghost;
bonus bAtkEle,Ele_Neutral;
- Id: 1220003
AegisName: Kunai_Of_Shadow
Name: Kunai Of Shadow

File diff suppressed because it is too large Load Diff

View File

@@ -3365,7 +3365,7 @@ Body:
Night_Watch: true
Hyper_Novice: true
Spirit_Handler: true
MaxBaseLevel: 275
MaxBaseLevel: 260
BaseExp:
- Level: 1
Exp: 658
@@ -3886,36 +3886,6 @@ Body:
- Level: 259
Exp: 270217017679
- Level: 260
Exp: 283727868563
- Level: 261
Exp: 297914261991
- Level: 262
Exp: 312809975091
- Level: 263
Exp: 328450473845
- Level: 264
Exp: 344872997537
- Level: 265
Exp: 353494822476
- Level: 266
Exp: 362332193038
- Level: 267
Exp: 371390497864
- Level: 268
Exp: 380675260310
- Level: 269
Exp: 390192141818
- Level: 270
Exp: 397995984654
- Level: 271
Exp: 405955904348
- Level: 272
Exp: 414075022434
- Level: 273
Exp: 422356522883
- Level: 274
Exp: 430803653341
- Level: 275
Exp: 999999999999
- Jobs:
Dragon_Knight: true
@@ -3942,7 +3912,7 @@ Body:
Night_Watch: true
Hyper_Novice: true
Spirit_Handler: true
MaxJobLevel: 60
MaxJobLevel: 55
JobExp:
- Level: 1
Exp: 4700000
@@ -4053,14 +4023,4 @@ Body:
- Level: 54
Exp: 6559840847
- Level: 55
Exp: 7543816974
- Level: 56
Exp: 8675389520
- Level: 57
Exp: 9976697948
- Level: 58
Exp: 11473202640
- Level: 59
Exp: 13194183036
- Level: 60
Exp: 99999999999
Exp: 9999999999

View File

@@ -8893,10 +8893,6 @@ Body:
Crt: 1
- Level: 55
Sta: 1
- Level: 56
Sta: 1
- Level: 58
Con: 1
- Jobs:
Meister: true
Meister2: true
@@ -9039,10 +9035,6 @@ Body:
Wis: 1
- Level: 55
Pow: 1
- Level: 57
Wis: 1
- Level: 59
Pow: 1
- Jobs:
Shadow_Cross: true
MaxWeight: 32000
@@ -9184,10 +9176,6 @@ Body:
Crt: 1
- Level: 55
Crt: 1
- Level: 57
Con: 1
- Level: 59
Crt: 1
- Jobs:
Arch_Mage: true
MaxWeight: 30000
@@ -9329,10 +9317,6 @@ Body:
Wis: 1
- Level: 55
Spl: 1
- Level: 57
Wis: 1
- Level: 59
Spl: 1
- Jobs:
Cardinal: true
MaxWeight: 30000
@@ -9475,10 +9459,6 @@ Body:
Wis: 1
- Level: 55
Crt: 1
- Level: 56
Con: 1
- Level: 59
Spl: 1
- Jobs:
Windhawk: true
Windhawk2: true
@@ -9621,10 +9601,6 @@ Body:
Sta: 1
- Level: 55
Pow: 1
- Level: 57
Crt: 1
- Level: 59
Pow: 1
- Jobs:
Imperial_Guard: true
Imperial_Guard2: true
@@ -9768,10 +9744,6 @@ Body:
- Level: 55
Wis: 1
Con: 1
- Level: 57
Pow: 1
- Level: 59
Spl: 1
- Jobs:
Biolo: true
MaxWeight: 32000
@@ -9913,10 +9885,6 @@ Body:
Crt: 1
- Level: 55
Con: 1
- Level: 56
Sta: 1
- Level: 59
Pow: 1
- Jobs:
Abyss_Chaser: true
MaxWeight: 28000
@@ -10058,10 +10026,6 @@ Body:
- Level: 55
Sta: 1
Con: 1
- Level: 56
Spl: 1
- Level: 59
Pow: 1
- Jobs:
Elemental_Master: true
MaxWeight: 30000
@@ -10204,10 +10168,6 @@ Body:
Wis: 1
- Level: 55
Spl: 1
- Level: 56
Wis: 1
- Level: 59
Con: 1
- Jobs:
Inquisitor: true
MaxWeight: 30000
@@ -10349,10 +10309,6 @@ Body:
- Level: 55
Pow: 1
Wis: 1
- Level: 57
Wis: 1
- Level: 59
Con: 1
- Jobs:
Troubadour: true
MaxWeight: 32000
@@ -10494,10 +10450,6 @@ Body:
- Level: 55
Pow: 1
Con: 1
- Level: 56
Spl: 1
- Level: 59
Pow: 1
- Jobs:
Trouvere: true
MaxWeight: 32000
@@ -10640,10 +10592,6 @@ Body:
- Level: 55
Pow: 1
Con: 1
- Level: 56
Spl: 1
- Level: 59
Pow: 1
- Jobs:
Sky_Emperor: true
MaxWeight: 42000
@@ -10786,10 +10734,6 @@ Body:
- Level: 55
Pow: 1
Con: 1
- Level: 57
Wis: 1
- Level: 59
Con: 1
- Jobs:
Soul_Ascetic: true
MaxWeight: 42000
@@ -10923,10 +10867,6 @@ Body:
Sta: 1
- Level: 55
Spl: 1
- Level: 56
Wis: 1
- Level: 59
Con: 1
- Jobs:
Shinkiro: true
MaxWeight: 45000
@@ -11070,14 +11010,6 @@ Body:
Sta: 1
- Level: 55
Sta: 1
- Level: 56
Int: 1
Dex: 1
- Level: 57
Wis: 1
- Level: 59
Int: 1
Spl: 1
- Jobs:
Shiranui: true
MaxWeight: 45000
@@ -11209,14 +11141,6 @@ Body:
- Level: 55
Spl: 1
Con: 1
- Level: 56
Str: 1
- Level: 57
Vit: 1
Spl: 1
- Level: 59
Str: 1
Pow: 1
- Jobs:
Night_Watch: true
MaxWeight: 48000
@@ -11357,10 +11281,6 @@ Body:
Wis: 1
- Level: 55
Pow: 1
- Level: 56
Wis: 1
- Level: 59
Crt: 1
- Jobs:
Hyper_Novice: true
MaxWeight: 40000
@@ -11506,12 +11426,6 @@ Body:
Sta: 1
- Level: 55
Spl: 1
- Level: 56
Dex: 1
- Level: 57
Pow: 1
- Level: 59
Spl: 1
- Jobs:
Spirit_Handler: true
MaxWeight: 42000
@@ -11653,7 +11567,3 @@ Body:
Wis: 1
- Level: 55
Sta: 1
- Level: 57
Spl: 1
- Level: 59
Pow: 1

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -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,self,myhpltmaxrate,10,,,,,,,
20811,ILL_KRAKEN@NPC_DAMAGE_HEAL,attack,753,1,10000,1000,60000,no,target,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,self,myhpltmaxrate,10,,,,,,,
20843,ILL_ABYSMAL_WITCH@NPC_DAMAGE_HEAL,attack,753,1,10000,1000,60000,no,target,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,self,myhpltmaxrate,20,,,,,,,
// 20934,R001_BESTIA@NPC_DAMAGE_HEAL,attack,753,1,3000,1500,40000,no,target,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,self,myhpltmaxrate,10,,,,,,,
// 20943,DEATH_WITCH@NPC_DAMAGE_HEAL,attack,753,1,10000,1000,60000,no,target,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,self,myhpltmaxrate,50,,,,,,32,
21395,ILL_MAYA@NPC_DAMAGE_HEAL,attack,753,1,500,1500,120000,no,target,myhpltmaxrate,50,,,,,,32,
21395,ILL_MAYA@NPC_ALL_STAT_DOWN,attack,751,5,5000,1500,45000,no,target,always,0,,,,,,18,
// Episode 18

File diff suppressed because it is too large Load Diff

View File

@@ -1578,26 +1578,26 @@ Body:
- Id: 3495
Title: Conversation with Jeojin
- Id: 3496
Title: Conversation with Skuain
Title: Conversation with Squain
- Id: 3497
Title: Conversation with Senado
- Id: 3498
Title: Conversation with Japer
- Id: 3499
Title: Conversation with Shiroan
Title: Conversation with Shirouan
- Id: 3500
Title: Conversation with Isira
Title: Conversation with Ishira
- Id: 3501
Title: Conversation with Dina
Title: Conversation with Gina
- Id: 3502
Title: Conversation with Hari
- Id: 3503
Title: "[Daily] Opinion Gathering"
Title: Examine the Sky
- Id: 3504
Title: "[Cooldown] Opinion Gathering"
TimeLimit: 4h
Title: Look at the Sky - Standby
- Id: 3505
Title: Completed Opinion Gathering
Title: Report to Junok
TimeLimit: 4h
- Id: 3507
Title: Illusion Investigation Team - Sheshin
- Id: 3508
@@ -3234,28 +3234,26 @@ Body:
Title: "[Standby] Subjugation-Yanggeochon"
TimeLimit: 4h
- Id: 5932
Title: Abused Child
Title: The Abused Child
- Id: 5933
Title: Business Plan
Title: Business Plan Presentation
- Id: 5934
Title: Foraging Practice (1)
Title: Gathering Training (1)
- Id: 5935
Title: Foraging Practice (2)
Title: Gathering Training (2)
- Id: 5936
Title: Foraging Practice (3)
Title: Gathering Training (3)
- Id: 5937
Title: "[Cooldown] Half Flower Gathering"
Title: "[Standby] Flower Room's work"
TimeLimit: 4h
- Id: 5938
Title: "[Daily] Half Flower Gathering"
Title: Gathering Half Flower
- Id: 5939
Title: "[Daily] Half Flower Gathering"
Title: Gathering Half Flower
- Id: 5940
Title: "[Daily] Half Flower Gathering"
Title: Gathering Half Flower
- Id: 5941
Title: "[Daily] Half Flower Gathering"
- Id: 5942
Title: Flower Room Opening Ceremony
Title: Gathering Half Flower
- Id: 6000
Title: Job Change to Taekwon
- Id: 6001
@@ -6318,55 +6316,55 @@ Body:
DROSERA: true
MUSCIPULAR: true
- Id: 8681
Title: Towards Rachel (1)
Title: To Rachel (1)
- Id: 8682
Title: Towards Rachel (2)
Title: To Rachel (2)
- Id: 8683
Title: Heated Argument
Title: Please stop fighting
- Id: 8684
Title: State of Conflict
Title: It's over
- Id: 8685
Title: Suspicious Movement
Title: A suspicious movement detected in the temple
- Id: 8686
Title: Intruder of the Temple
Title: The Intruder of the Temple
- Id: 8687
Title: Staged Plot
Title: Did you break it?
- Id: 8688
Title: Today's Daily Bread
Title: Thanks for today's daily food
- Id: 8689
Title: "[Cooldown] Today's Daily Bread"
Title: Today's Daily food - Standby
TimeLimit: 4h
- Id: 8690
Title: "[Daily] Today's Daily Bread"
Title: Thanks for today's daily food
- Id: 8691
Title: Water Purification (1)
Title: Sacred Relics for Essence (1)
- Id: 8692
Title: Water Purification (2)
Title: Sacred Relics for Essence (2)
- Id: 8693
Title: Water Purification (3)
Title: Sacred Relics for Essence (3)
- Id: 8694
Title: "[Cooldown] Water Purification"
Title: Clean Water Procurement - Standby
TimeLimit: 4h
- Id: 8695
Title: "[Daily] Water Purification (1)"
Title: Procurement of clean water (1)
- Id: 8696
Title: "[Daily] Water Purification (2)"
Title: Procurement of clean water (2)
- Id: 8697
Title: "[Daily] Water Purification (3)"
Title: Procurement of clean water (3)
- Id: 8698
Title: Horim's Bizarre Adventure (1)
Title: Late migration
- Id: 8699
Title: Horim's Bizarre Adventure (2)
Title: First Step Out of the City
- Id: 8700
Title: Horim's Bizarre Adventure (3)
Title: I couldn't even come halfway
- Id: 8701
Title: Horim's Bizarre Adventure (4)
Title: Scenery I've Seen for the First Time
- Id: 8702
Title: Horim's Bizarre Adventure (5)
Title: Smell of Volcanic Ash
- Id: 8703
Title: Horim's Bizarre Adventure (6)
Title: The easy way to go
- Id: 8718
Title: Greetings from a Friend
Title: My friend's regards
- Id: 8719
Title: A new area somewhere in the anthill
- Id: 8720
@@ -8198,104 +8196,104 @@ Body:
Title: Squirrels are rats, too? Standby
TimeLimit: 4h
- Id: 11696
Title: Niren's Request (1)
Title: Niren's Request
- Id: 11697
Title: Niren's Request (2)
Title: Niren's Request
- Id: 11698
Title: Niren's Request (3)
Title: Niren's Request
- Id: 11699
Title: Niren's Request (4)
Title: Niren's Request
- Id: 11700
Title: Niren's Request (5)
Title: Niren's Request
- Id: 11701
Title: Niren's Request (6)
Title: Niren's Request
- Id: 11702
Title: Niren's Request (7)
Title: Niren's Request
- Id: 11703
Title: Niren's Request (8)
Title: Niren's Request
- Id: 11704
Title: Gray Children (1)
Title: Niren's Request
- Id: 11705
Title: Gray Children (2)
Title: Children of Grey
- Id: 11706
Title: Gray Children (3)
Title: Children of Grey
- Id: 11707
Title: Gray Children (4)
Title: Children of Grey
- Id: 11708
Title: Gray Children (5)
Title: Children of Grey
- Id: 11709
Title: Gray Children (6)
Title: Children of Grey
- Id: 11710
Title: Gray Children (7)
Title: Children of Grey
- Id: 11711
Title: Gray Children (8)
Title: Children of Grey
- Id: 11712
Title: Gray Children (9)
Title: Children of Grey
- Id: 11713
Title: Gray Children (10)
Title: Children of Grey
- Id: 11714
Title: Gray Children (11)
Title: Children of Grey
- Id: 11715
Title: Gray Children (12)
Title: Children of Grey
- Id: 11716
Title: Gray Children (13)
Title: Children of Grey
- Id: 11717
Title: Gray Children (14)
Title: Children of Grey
- Id: 11718
Title: Gray Children (15)
Title: Children of Grey
- Id: 11719
Title: Gray Children (16)
Title: Children of Grey
- Id: 11720
Title: Gray Children (17)
Title: Children of Grey
- Id: 11721
Title: Gray Children (18)
Title: Children of Grey
- Id: 11722
Title: Gray Children (19)
Title: Children of Grey
- Id: 11723
Title: Gray Children (20)
Title: Children of Grey
- Id: 11724
Title: Gray Children (21)
Title: Children of Grey
- Id: 11725
Title: The Labyrinth and the Merchant (1)
Title: Investigation of Oz Labyrinth
- Id: 11726
Title: The Labyrinth and the Merchant (2)
Title: Investigation of Oz Labyrinth
- Id: 11727
Title: The Labyrinth and the Merchant (3)
Title: Investigation of Oz Labyrinth
- Id: 11728
Title: The Labyrinth and the Merchant (4)
Title: Investigation of Oz Labyrinth
- Id: 11729
Title: The Labyrinth and the Merchant (5)
Title: Investigation of Oz Labyrinth
- Id: 11730
Title: The Labyrinth and the Merchant (6)
Title: Investigation of Oz Labyrinth
Targets:
- Id: 1
Location: oz_dun01
Count: 10
- Id: 11731
Title: The Labyrinth and the Merchant (7)
Title: Investigation of Oz Labyrinth
- Id: 11732
Title: The Labyrinth and the Merchant (8)
Title: Investigation of Oz Labyrinth
- Id: 11733
Title: The Labyrinth and the Merchant (9)
Title: Investigation of Oz Labyrinth
- Id: 11734
Title: The Labyrinth and the Merchant (10)
Title: Investigation of Oz Labyrinth
- Id: 11735
Title: The Labyrinth and the Merchant (11)
Title: Investigation of Oz Labyrinth
- Id: 11736
Title: Oz Labyrinth 1F (170lv)
Title: Maze of Oz 1st Floor (170lv)
Targets:
- Mob: EP18_ASH_TOAD
Count: 20
- Id: 11737
Title: "[Cooldown] Oz Labyrinth 1F"
Title: Maze of Oz Level 1 - Standby
TimeLimit: 4h
- Id: 11738
Title: Oz Labyrinth 2F (200lv)
Title: Maze of Oz Level 2 (200lv)
Targets:
- Mob: EP18_HOT_MOLAR
Count: 20
- Id: 11739
Title: "[Cooldown] Oz Labyrinth 2F"
Title: Maze of Oz Level 2 (200lv)
TimeLimit: 4h
- Id: 12000
Title: An old friend
@@ -9337,30 +9335,30 @@ Body:
Title: Let's try again to seal the crack
TimeLimit: 4h
- Id: 12520
Title: "[Normal] Villa of Deception"
Title: Villa of Deception
- Id: 12521
Title: "[Hard] Villa of Deception"
Title: Villa of Deception Hard
- Id: 12522
Title: "[Cooldown] Villa of Deception"
Title: Cooldown: Villa of Deception
TimeLimit: 4h
- Id: 12531
Title: Transporting Goods
Title: Future General Candidate
- Id: 12532
Title: Broken Wagon
Title: Trouble at the Top
- Id: 12533
Title: Hidden Helper
Title: The Hidden Helper
- Id: 12534
Title: Missing Camille
Title: The Missing Camille
- Id: 12535
Title: Chief Decision
Title: The Governor's Decision
- Id: 12536
Title: Scattered Goods (North)
Title: The Scattered Luggage (North)
- Id: 12537
Title: Scattered Goods (West)
Title: Scattered Luggage (West)
- Id: 12538
Title: Scattered Goods (East)
Title: The Scattered Luggage (East)
- Id: 12539
Title: Scattered Goods (South)
Title: Scattered Luggage (South)
- Id: 13000
Title: RWC2011Card Gathering
- Id: 13001
@@ -11514,84 +11512,84 @@ Body:
- Mob: EP18_FIREWIND_KITE
Count: 30
- Id: 16549
Title: "[Daily] I can't sleep"
Title: I can't sleep
Targets:
- Mob: EP18_FIREWIND_KITE
Count: 30
- Id: 16550
Title: "[Cooldown] I can't sleep"
Title: I Can't Sleep - Wait
TimeLimit: 4h
- Id: 16551
Title: Collecting Folklore (1)
Title: The Story of Dinar
- Id: 16552
Title: Collecting Folklore (2)
Title: Amira's Story
- Id: 16553
Title: Collecting Folklore (3)
Title: Shanina's Grandma's Story
- Id: 16554
Title: Collecting Folklore (4)
Title: Please collect the stories
- Id: 16555
Title: "[Daily] Dinar's Story"
Title: The Story of Dinar
- Id: 16556
Title: "[Daily] Amira's Story"
Title: Amira's Story
- Id: 16557
Title: "[Daily] Shanina's Story"
Title: Shanina's Grandma's Story
- Id: 16558
Title: "[Daily] Collecting Folklore"
Title: Please collect the stories
- Id: 16559
Title: "[Cooldown] Collecting Folklore"
Title: Please collect the stories - Standby
TimeLimit: 4h
- Id: 16560
Title: Ahab's Gossip (1)
Title: This is not the place
- Id: 16561
Title: Ahab's Gossip (2)
Title: This is not the place
- Id: 16562
Title: Ahab's Gossip (3)
Title: This is not the place
- Id: 16563
Title: Ahab's Gossip (4)
Title: This is not the place
- Id: 16564
Title: Ahab's Gossip (5)
Title: This is not the place
- Id: 16565
Title: Ahab's Gossip (6)
Title: This is not the place
- Id: 16566
Title: Ahab's Gossip (7)
Title: This is not the place
- Id: 16567
Title: Gray Wolf Forest Tournament (1)
Title: The Contest of the Grey Wolf Forest
- Id: 16568
Title: People's Opinion (1)
Title: Everyone's Opinion
- Id: 16569
Title: People's Opinion (2)
Title: Everyone's Opinion
- Id: 16570
Title: People's Opinion (3)
Title: Everyone's Opinion
- Id: 16571
Title: People's Opinion (4)
Title: Everyone's Opinion
- Id: 16572
Title: Gray Wolf Forest Tournament (2)
Title: The Contest of the Grey Wolf Forest
- Id: 16573
Title: Source of Weapons (1)
Title: Source of Weapon
- Id: 16574
Title: Source of Weapons (2)
Title: Source of Weapon
- Id: 16575
Title: Source of Weapons (3)
Title: Source of Weapon
- Id: 16576
Title: Source of Weapons (4)
Title: Source of Weapon
- Id: 16577
Title: Source of Weapons (5)
Title: Source of Weapon
- Id: 16578
Title: Source of Weapons (6)
Title: Source of Weapon
- Id: 16579
Title: Source of Weapons (7)
Title: Source of Weapon
- Id: 16580
Title: Source of Weapons (8)
Title: Source of Weapon
- Id: 16581
Title: Even children know (1)
Title: Children Know It
- Id: 16582
Title: Even children know (2)
Title: Children Know It
- Id: 16583
Title: Even children know (3)
Title: Children Know It
- Id: 16584
Title: The Price of Labor (1)
Title: The Price of Labor
- Id: 16585
Title: The Price of Labor (2)
Title: The Price of Labor
- Id: 17000
Title: Meet with Father Bamph
- Id: 17001
@@ -11854,62 +11852,62 @@ Body:
Title: (Standby) Thanatos Tower, 12th floor
TimeLimit: 4h
- Id: 17504
Title: Where is My Home (1)
Title: Where's My Home
- Id: 17505
Title: Where is My Home (2)
Title: Where's My Home
- Id: 17506
Title: Where is My Home (3)
Title: Where's My Home
- Id: 17507
Title: Where is My Home (4)
Title: Where's My Home
- Id: 17508
Title: "[Daily] Shortage of Supplies"
Title: Lack of Supplies
Drops:
- Mob: EP18_GREY_WOLF
Item: Ep18_Very_Ddan_Crystal
Rate: 5000
- Id: 17509
Title: "[Cooldown] Shortage of Supplies"
Title: (Standby) Lack of supplies
TimeLimit: 4h
- Id: 17510
Title: There are no evil beasts in this world (1)
Title: There are no bad beasts in the world
- Id: 17511
Title: There are no evil beasts in this world (2)
Title: There are no bad beasts in the world
- Id: 17512
Title: There are no evil beasts in this world (3)
Title: There are no bad beasts in the world
- Id: 17513
Title: An Unexpected Shepherd (1)
Title: The Unexpected Shepherd
- Id: 17514
Title: An Unexpected Shepherd (2)
Title: The Unexpected Shepherd
Targets:
- Mob: EP18_ASHRING
Count: 20
- Id: 17515
Title: An Unexpected Shepherd (3)
Title: The Unexpected Shepherd
- Id: 17516
Title: "[Cooldown] An Unexpected Shepherd"
Title: (Standby) Unexpected shepherd
TimeLimit: 4h
- Id: 17517
Title: Rebellion (1)
Title: The Rebels
- Id: 17518
Title: Rebellion (2)
Title: The Rebels
- Id: 17519
Title: Rebellion (3)
Title: The Rebels
- Id: 17520
Title: Wolf Among Sheep (1)
Title: Wolf in the Sheep
- Id: 17521
Title: Wolf Among Sheep (2)
Title: When you need a conversation
- Id: 17522
Title: Wolf Among Sheep (3)
Title: Cleaning the Traitors
- Id: 17523
Title: Sanctuary Purification
Title: Purification of the Sanctuary
- Id: 17524
Title: "[Completed] Renegade Cleaning"
Title: Cleaning the Traitors
- Id: 17525
Title: Aftermath
Title: When you need a conversation
- Id: 17526
Title: "[Completed] Sanctuary Purification"
Title: Purification of the Sanctuary
- Id: 17527
Title: "[Cooldown] Sanctuary Purification"
Title: (Standby) Cleaning strategy
TimeLimit: 4h
- Id: 17566
Title: (Standby) Code name! Is it a star button?
@@ -12037,21 +12035,21 @@ Body:
Title: Goseong dungeon 1st floor attack
TimeLimit: 4h
- Id: 18082
Title: Eligibility to attend the competition
Title: Eligibility to Participate in the Competition
- Id: 18083
Title: High Priest's Villa
Title: Investigation of Daishinkan's Villa
- Id: 18084
Title: Fact Finding
Title: Fact Investigation
- Id: 18085
Title: Direction of Prayer
Title: The Direction of Prayer
- Id: 18086
Title: "[Daily] Gray Wolf Forest Hunting"
Title: Make the Grey Wolf Forest Safer
Targets:
- Id: 1
Location: gw_fild01
Count: 30
- Id: 18087
Title: "[Cooldown] Gray Wolf Forest Hunting"
Title: Safer in the Gray Wolf Forest - Standby
TimeLimit: 4h
- Id: 18100
Title: Legends from Moscovia

View File

@@ -43018,10 +43018,10 @@ Body:
TargetType: Self
DamageFlags:
NoDamage: true
Flags:
IgnoreGtb: true
AfterCastWalkDelay: 1000
Cooldown: 20000
Range: 9
Hit: Single
HitCount: 1
AfterCastActDelay: 2000
Requires:
SpCost:
- Level: 1
@@ -43044,7 +43044,11 @@ Body:
TargetType: Self
DamageFlags:
NoDamage: true
AfterCastWalkDelay: 1000
Splash: true
Hit: Single
HitCount: 1
SplashArea: -1
AfterCastActDelay: 35000
Duration1:
- Level: 1
Time: 40000
@@ -43056,7 +43060,6 @@ Body:
Time: 25000
- Level: 5
Time: 20000
Cooldown: 35000
Requires:
SpCost:
- Level: 1
@@ -43074,6 +43077,7 @@ Body:
Name: HLIF_BRAIN
Description: Brain Surgery
MaxLevel: 5
SplashArea: 1
- Id: 8004
Name: HLIF_CHANGE
Description: Change
@@ -43081,7 +43085,7 @@ Body:
TargetType: Self
DamageFlags:
NoDamage: true
AfterCastWalkDelay: 1000
Hit: Single
Duration1:
- Level: 1
Time: 60000
@@ -43089,7 +43093,7 @@ Body:
Time: 180000
- Level: 3
Time: 300000
Cooldown:
Duration2:
- Level: 1
Time: 600000
- Level: 2
@@ -43106,8 +43110,8 @@ Body:
TargetType: Self
DamageFlags:
NoDamage: true
AfterCastWalkDelay: 1000
Cooldown: 1000
Hit: Single
Duration2: 1000
Requires:
SpCost: 10
- Id: 8006
@@ -43117,7 +43121,8 @@ Body:
TargetType: Self
DamageFlags:
NoDamage: true
AfterCastWalkDelay: 1000
Hit: Single
AfterCastActDelay: 30000
Duration1:
- Level: 1
Time: 40000
@@ -43129,7 +43134,6 @@ Body:
Time: 25000
- Level: 5
Time: 20000
Cooldown: 30000
Requires:
SpCost:
- Level: 1
@@ -43147,6 +43151,8 @@ Body:
Name: HAMI_SKIN
Description: Adamantium Skin
MaxLevel: 5
DamageFlags:
NoDamage: true
- Id: 8008
Name: HAMI_BLOODLUST
Description: Bloodlust
@@ -43154,7 +43160,7 @@ Body:
TargetType: Self
DamageFlags:
NoDamage: true
AfterCastWalkDelay: 1000
Hit: Single
Duration1:
- Level: 1
Time: 60000
@@ -43162,7 +43168,7 @@ Body:
Time: 180000
- Level: 3
Time: 300000
Cooldown:
Duration2:
- Level: 1
Time: 300000
- Level: 2
@@ -43191,7 +43197,7 @@ Body:
Count: -2
- Level: 5
Count: -3
Cooldown: 2000
AfterCastWalkDelay: 2000
Requires:
SpCost:
- Level: 1
@@ -43212,7 +43218,6 @@ Body:
DamageFlags:
NoDamage: true
Hit: Single
AfterCastWalkDelay: 1000
Duration1:
- Level: 1
Time: 60000
@@ -43224,7 +43229,7 @@ Body:
Time: 45000
- Level: 5
Time: 40000
Cooldown:
Duration2:
- Level: 1
Time: 60000
- Level: 2
@@ -43258,7 +43263,6 @@ Body:
NoDamage: true
Hit: Single
CastCancel: true
AfterCastWalkDelay: 1000
Duration1:
- Level: 1
Time: 60000
@@ -43270,7 +43274,7 @@ Body:
Time: 45000
- Level: 5
Time: 40000
Cooldown:
Duration2:
- Level: 1
Time: 60000
- Level: 2
@@ -43303,7 +43307,7 @@ Body:
Range: 15
Hit: Single
HitCount: 1
Cooldown: 1000
AfterCastActDelay: 1000
Requires:
SpCost: 1
- Id: 8013
@@ -43325,7 +43329,7 @@ Body:
Count: 4
- Level: 5
Count: 5
Cooldown:
AfterCastActDelay:
- Level: 1
Time: 2000
- Level: 2
@@ -43356,8 +43360,8 @@ Body:
DamageFlags:
NoDamage: true
Hit: Single
AfterCastWalkDelay: 1500
Cooldown: 3000
AfterCastActDelay: 3000
AfterCastWalkDelay: 3000
Requires:
SpCost: 40
- Id: 8015
@@ -43381,8 +43385,7 @@ Body:
HitCount: 1
Element: Weapon
SplashArea: 4
AfterCastActDelay: 5000
CoolDown: 1000
AfterCastWalkDelay: 1000
Requires:
SpCost: 1
- Id: 8018

View File

@@ -612,48 +612,3 @@ Body:
- Level: 260
Points: 4099
TraitPoints: 228
- Level: 261
Points: 4099
TraitPoints: 231
- Level: 262
Points: 4099
TraitPoints: 234
- Level: 263
Points: 4099
TraitPoints: 237
- Level: 264
Points: 4099
TraitPoints: 240
- Level: 265
Points: 4099
TraitPoints: 247
- Level: 266
Points: 4099
TraitPoints: 250
- Level: 267
Points: 4099
TraitPoints: 253
- Level: 268
Points: 4099
TraitPoints: 256
- Level: 269
Points: 4099
TraitPoints: 259
- Level: 270
Points: 4099
TraitPoints: 266
- Level: 271
Points: 4099
TraitPoints: 269
- Level: 272
Points: 4099
TraitPoints: 272
- Level: 273
Points: 4099
TraitPoints: 275
- Level: 274
Points: 4099
TraitPoints: 278
- Level: 275
Points: 4099
TraitPoints: 285

View File

@@ -86,7 +86,7 @@ Body:
Opt1: StoneWait
Flags:
SendOption: true
BossResist: true
BossResist: true
StopAttacking: true
Fail:
Whiteimprison: true
@@ -1822,7 +1822,6 @@ Body:
Icon: EFST_ETERNALCHAOS
DurationLookup: BD_ETERNALCHAOS
CalcFlags:
Def: true
Def2: true
Flags:
NoDispell: true
@@ -2601,17 +2600,13 @@ Body:
DurationLookup: HLIF_AVOID
CalcFlags:
Speed: true
Flags:
NoSave: true
RemoveFromHomOnMapWarp: true
- Status: Change
DurationLookup: HLIF_CHANGE
CalcFlags:
Vit: true
Int: true
Flags:
NoSave: true
RemoveFromHomOnMapWarp: true
RemoveOnChangeMap: true
Fail:
Change: true
- Status: Bloodlust
@@ -2619,9 +2614,6 @@ Body:
CalcFlags:
Batk: true
Watk: true
Flags:
NoSave: true
RemoveFromHomOnMapWarp: true
- Status: Fleet
DurationLookup: HFLI_FLEET
CalcFlags:
@@ -2635,11 +2627,7 @@ Body:
- Status: Defence
DurationLookup: HAMI_DEFENCE
CalcFlags:
Def: true
Vit: true
Flags:
NoSave: true
RemoveFromHomOnMapWarp: true
- Status: Incaspdrate
CalcFlags:
Aspd: true
@@ -4138,7 +4126,7 @@ Body:
Unlimitedhummingvoice: true
Sircleofnature: true
- Status: Deepsleep
Icon: EFST_DEEP_SLEEP
Icon: EFST_HANDICAPSTATE_DEEP_SLEEP
DurationLookup: WM_LULLABY_DEEPSLEEP
States:
NoCast: true
@@ -7022,9 +7010,7 @@ Body:
CalcFlags:
Regen: true
- Status: Earthshaker
Icon: EFST_EARTHSHAKER
Flags:
BlEffect: true
NoWarning: true
- Status: Weaponblock_On
Icon: EFST_WEAPONBLOCK_ON
@@ -7039,7 +7025,6 @@ Body:
Icon: EFST_SPORE_EXPLOSION_DEBUFF
DurationLookup: GN_SPORE_EXPLOSION
Flags:
BlEffect: true
NoDispell: true
NoBanishingBuster: true
NoClearance: true
@@ -7461,7 +7446,7 @@ Body:
NoClearance: true
NoClearbuff: true
- Status: Madogear
Icon: EFST_MADOGEAR_TYPE
Icon: EFST_MADOGEAR
CalcFlags:
Speed: true
Flags:
@@ -7975,8 +7960,6 @@ Body:
DurationLookup: EM_SPELL_ENCHANTING
CalcFlags:
Smatk: true
Flags:
DisplayPc: true
- Status: Summon_Elemental_Ardor
Icon: EFST_SUMMON_ELEMENTAL_ARDOR
DurationLookup: EM_SUMMON_ELEMENTAL_ARDOR
@@ -8028,23 +8011,17 @@ Body:
DurationLookup: TR_MUSICAL_INTERLUDE
CalcFlags:
Res: true
Flags:
DisplayPc: true
- Status: Jawaii_Serenade
Icon: EFST_JAWAII_SERENADE
DurationLookup: TR_JAWAII_SERENADE
CalcFlags:
Smatk: true
Speed: true
Flags:
DisplayPc: true
- Status: Pron_March
Icon: EFST_PRON_MARCH
DurationLookup: TR_PRON_MARCH
CalcFlags:
Patk: true
Flags:
DisplayPc: true
- Status: Roseblossom
Icon: EFST_ROSEBLOSSOM
DurationLookup: TR_ROSEBLOSSOM
@@ -8058,8 +8035,6 @@ Body:
Powerful_Faith: true
Firm_Faith: true
Sincere_Faith: true
Flags:
DisplayPc: true
- Status: Sincere_Faith
Icon: EFST_SINCERE_FAITH
DurationLookup: IQ_SINCERE_FAITH

View File

@@ -1250,11 +1250,6 @@ Adds a card or enchant to the specific slot of the equipment.
---------------------------------------
@resetcooltime
/resetcooltime
Resets the cooldown of all skills of the player and if active also of the homunculus or the mercenary.
==============================
| 5. Administrative Commands |
==============================

View File

@@ -474,9 +474,3 @@ 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.
---------------------------------------

View File

@@ -6124,12 +6124,11 @@ will always return 0.
---------------------------------------
*skilleffect <skill id>,<number>{,<game ID>};
*skilleffect "<skill name>",<number>{,<game ID>};
*skilleffect <skill id>,<number>;
*skilleffect "<skill name>",<number>;
This command displays visual and aural effects of given skill on currently
attached character or, when defined, on any unit with the given ID.
The number parameter is for skill whose visual effect
attached character. 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
@@ -8509,15 +8508,6 @@ 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
@@ -10691,7 +10681,6 @@ 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.
---------------------------------------

View File

@@ -254,9 +254,6 @@ 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.

View File

@@ -1001,23 +1001,17 @@ SC_FLING ()
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_AVOID ()
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_CHANGE ()
desc:
val1:
SC_BLOODLUST (EFST_HAMI_BLOODLUST)
desc: Increase the homunculus ATK and has a chance to leech HP from the target
val1: Skill Level
val2: ATK increase (20 + (10 * val1))
val3: Chance to leech HP (9 * val1)%
val4: Leeched HP percentage 20%
SC_BLOODLUST ()
desc:
val1:
SC_FLEET ()
desc:
@@ -1027,10 +1021,10 @@ SC_SPEED ()
desc:
val1:
SC_DEFENCE (EFST_HAMI_DEFENCE)
desc: Increase VIT and as result VIT-based DEF of the Player and plain VIT of the Homunculus
val1: Skill Level
val2: VIT increase for players, DEF increase for homunculus (5 + (5 * val1)) [Renewal], (2 * val1) [Pre-Renewal]
SC_DEFENCE ()
desc: Increase Defense, HAMI_DEFENCE effect
val1: (none)
val2: + Def(Pre-renewal) or VIT (Renewal)
SC_INCASPDRATE ()
desc: Increase ASPD

View File

@@ -110,18 +110,7 @@ function Pick {
Go(.@map$,.@x,.@y);
}
function Restrict {
.@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(0) == "RE" && !checkre(0)) || (getarg(0) == "Pre-RE" && checkre(0))) {
if (getarg(1,0)) {
set @warp_block,0;
for (set .@i,1; .@i<getargcount(); set .@i,.@i+1)
@@ -152,7 +141,7 @@ T2: Go("alberta",28,234);
T3: Go("aldebaran",140,131);
T4: Go("amatsu",198,84);
T5: Go("ayothaya",208,166);
T6: Restrict("Brasilis");
T6: Restrict("RE");
Go("brasilis",196,217);
T7: Go("comodo",209,143);
T8: Restrict("RE");
@@ -229,7 +218,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("Brasilis");
F4: Restrict("RE");
setarray @c[2],74,32;
Disp("Brasilis Field",1,1); Pick("bra_fild");
F5: Restrict("Pre-RE",5);
@@ -354,7 +343,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("Brasilis");
D9: Restrict("RE");
setarray @c[2],87,47,262,262;
Disp("Brasilis Dungeon",1,2); Pick("bra_dun");
D10: Restrict("RE",6);

View File

@@ -1,9 +1,15 @@
//===== rAthena Script =======================================
//===== rAthena Script =======================================
//= Assassin Job Quest
//===== Description: =========================================
//===== By: ==================================================
//= kobra_k88
//===== Current Version: =====================================
//= 3.7
//===== Compatible With: =====================================
//= rAthena Project
//===== Description: =========================================
//= [Official Conversion]
//= Job Change quest for Assassin class.
//===== Changelog: ===========================================
//===== Additional Comments: =================================
//= 1.0 Used some dialogue from the aegis Assassin script translated By: Pgro Team (OwNaGe)
//= Also converted the booby traps from the aegis script.[kobra_k88]
//= 1.1 Made adjustments to ontouch npcs to work with the new "ontouch" functionality.
@@ -22,7 +28,7 @@
//= 2.0 Changed numbers to constants. [Vicious]
//= 2.1 Removed Duplicates [Silent]
//= 2.2 Merged back JFunc. Fixed missing dialogue [Lupus]
//= 2.3 Fixed typo and change Nameless addtimer to 100 (with 700ms I
//= 2.3 Fixed typo and change Nameless addtimer to 100 (with 700ms I
//= was still able to bypass it) [Toms]
//= 2.4 Fixed skipping of Nameless NPC [Lupus]
//= 2.5 Fixed a Rogue exploit [Lupus]
@@ -44,8 +50,8 @@
//= 3.5 Fixed the waitingroom where player can enter the Test Area without passing the written exam. Now player will not be warp inside the Test Area when did not passed the written exam instead the player will be warp back to the written exam entrance [JayPee]
//= 3.6 Fixed broken event calls. [Euphy]
//= 3.7 Fixed issue that the player can't progress in the quest if timed out at weapon reward step. This issue is fixed on iRO but not on kRO. [https://forums.warpportal.com/index.php?/topic/130060-didnt-receive-necklace-of-oblivion-when-changing-assassin/#entry1496042] [MrAntares]
//= 3.8 Another 'unofficial fix'. Player can't change job if time out after the necklace is deleted. [Atemo]
//============================================================
//= 3.8 Another 'unofficial fix'. Player can't change job if time out after the necklace is deleted.
//============================================================
in_moc_16,19,33,1 script Guildsman#asn 55,{
if (Upper == 1) {
@@ -80,7 +86,7 @@ in_moc_16,19,33,1 script Guildsman#asn 55,{
mes "Well then,";
mes "go for it!";
close2;
ASSIN_Q = 0;
set ASSIN_Q,0;
warp "in_moc_16",19,76;
end;
}
@@ -90,10 +96,9 @@ in_moc_16,19,33,1 script Guildsman#asn 55,{
mes "[Ferocious-looking guy]";
mes "You'll have to walk if you want to get back to town. Oh, and don't forget to save your spawn point, alright?";
close2;
ASSIN_Q = 0;
ASSIN_Q2 = 0;
if (ASSIN_Q3 < 3)
ASSIN_Q3 = 0;
set ASSIN_Q,0;
set ASSIN_Q2,0;
set ASSIN_Q3,0;
savepoint "in_moc_16",18,14,1,1;
warp "in_moc_16",18,14;
end;
@@ -252,7 +257,7 @@ in_moc_16,19,33,1 script Guildsman#asn 55,{
mes "It's been a while since I've received a guest. I'm sending";
mes "you to the office.";
close2;
ASSIN_Q = 0;
set ASSIN_Q,0;
if (checkquest(8000) != -1) {
changequest 8000,8001;
} else {
@@ -548,9 +553,8 @@ OnTouch_:
mes "Alright then,";
mes "best of luck to you!";
close2;
if (ASSIN_Q3 < 3)
ASSIN_Q3 = 1;
ASSIN_Q = 1;
set ASSIN_Q3,1;
set ASSIN_Q,1;
changequest 8001,8002;
warp "in_moc_16",19,144;
end;
@@ -572,9 +576,8 @@ OnTouch_:
mes "to the Test Hall.";
mes "Best of luck~";
close2;
if (ASSIN_Q3 < 3)
ASSIN_Q3 = 2;
ASSIN_Q = 1;
set ASSIN_Q3,2;
set ASSIN_Q,1;
changequest 8001,8002;
warp "in_moc_16",19,144;
end;
@@ -599,8 +602,9 @@ OnTouch_:
mes "Eh, get outta here.";
mes "Stop wastin' my time...";
close2;
ASSIN_Q = 0;
ASSIN_Q2 = 0;
set ASSIN_Q,0;
set ASSIN_Q3,0;
set ASSIN_Q2,0;
erasequest 8001;
warp "moc_fild16",206,229;
end;
@@ -626,9 +630,8 @@ OnTouch_:
mes "[Assassin 'Khai']";
mes "Are you done filling out the form? Alright, give it to me so I can send you to the Test Hall. Good luck~";
next;
if (ASSIN_Q3 < 3)
ASSIN_Q3 = 1;
ASSIN_Q = 1;
set ASSIN_Q3,1;
set ASSIN_Q,1;
changequest 8001,8002;
warp "in_moc_16",19,144;
end;
@@ -641,9 +644,8 @@ OnTouch_:
mes "Then give me the form so that I can send you to the Test Hall, alright?";
mes "Good luck...";
next;
if (ASSIN_Q3 < 3)
ASSIN_Q3 = 2;
ASSIN_Q = 1;
set ASSIN_Q3,2;
set ASSIN_Q,1;
changequest 8001,8002;
warp "in_moc_16",19,144;
end;
@@ -709,7 +711,7 @@ OnTouch_:
mes "Although I am heartless,";
mes "I am not necessarily cruel. Before we proceed, is there anything you wish to know?";
next;
ASSIN_Q2 = 0;
set ASSIN_Q2,0;
while(ASSIN_Q2 < 3) {
switch(select("...Skills?:...Stats?:Hmpf, I know it all.")) {
case 1:
@@ -772,7 +774,7 @@ OnTouch_:
mes "Now...";
mes "That's all I have to tell you";
mes "about Assassin skills.";
ASSIN_Q2 = 1;
set ASSIN_Q2,1;
next;
break;
case 2:
@@ -785,7 +787,7 @@ OnTouch_:
next;
mes "[The Anonymous One]";
mes "I cannot give you better advice than that in regards to Stats. You should research and see which stats suit you, and decide what kind of Assassin you want to be.";
ASSIN_Q2 = 2;
set ASSIN_Q2,2;
next;
break;
case 3:
@@ -795,7 +797,7 @@ OnTouch_:
mes "I'll be the judge of that!";
next;
}
ASSIN_Q2 = 3;
set ASSIN_Q2,3;
break;
}
}
@@ -845,53 +847,53 @@ OnTouch_:
mes "1. Choose skill that is not required to learn Grimtooth.";
next;
if (select("Cloaking level 2:Sonic Blow level 5:Katar Mastery level 4:Right hand Mastery level 2") == 4)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "2. What property does Enchant Poison possess?";
next;
if (select("Poison:Earth:Fire:Wind") == 1)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "3. How does Level 4 Right Hand Mastery work?";
next;
if (select("Recover 80% of damage decrease:Recover 90% of damage decrease:Increase 90% of damage:Increase 108% of damage") == 2)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "4. What is the item required for using Venom Dust?";
next;
if (select("Red Blood:Blue Gemstone:Yellow Gemstone:Red Gemstone") == 4)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "5. Which skill can you learn when you reach Level 5 Enchant Poison?";
next;
if (select("Envenom:Sonic Blow:Venom Splasher:Venom Dust") == 4)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "6. Among the following skills, which allows you to walk while invisible?";
next;
if (select("Hiding:Back Slide:Cloaking:Sand Attack") == 3)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "7. Choose the condition that is unrelated to Venom Splasher.";
next;
if (select("Poisoned target.:Red Gemstone.:Remaing HP of Target.") == 2)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "8. Which monster is weak to a weapon with Vadon card (adds 20% damage on Fire property monster)?";
next;
if (select("Steel Chonchon:Deviruchi:Elder Willow:Baphomet") == 3)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "9. How much SP does";
mes "Double Attack need?";
next;
if (select("15:It's a passive skill, so SP use is 0.:It's passive skill, so SP use is 10.:54") == 2)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "10. What is the best elemental Main Gauche weapon for hunting in Izlude dungeon?";
next;
if (select("Wind Main Gauche:Ice Main Gauche:Earth Main Gauche:Fire Main Gauche") == 1)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
break;
case 2:
mes "[The Anonymous One]";
@@ -899,104 +901,104 @@ OnTouch_:
mes "drops a slotted Katar?";
next;
if (select("Thief Bug:Peco Peco:Desert Wolf:Hammer Cobolt") == 3)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "2. Which monster";
mes "drops a slotted Jur?";
next;
if (select("Martin:Desert Wolf:Marionette:Myst") == 1)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "3. Which class is allowed to craft elemental weapons?";
next;
if (select("Merchant:Blacksmith:Thief:Priest") == 2)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "4. Choose the weapon which is not in the Katar class.";
next;
if (select("Jamadhar:Jur:Katar:Gladius") == 4)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "5. What property do Izlude dungeon monsters posses?";
next;
if (select("Water:Fire:Wind:Earth") == 1)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "6. Which monster";
mes "cannot be a Cute Pet?";
next;
if (select("Poporing:Roda Frog:Smokie:Poison Spore") == 2)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "7. Choose a monster that Fire property Daggers work the best on.";
next;
if (select("Dagger Goblin:Mace Goblin:Morning Star Goblin:Hammer Goblin") == 4)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "8. Choose the non-elemental Katar from the following:";
next;
if (select("Katar of Raging Blaze:Katar of Dusty Thornbush:Sharpened Legbone of Ghoul:Infiltrator") == 4)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "9. Which is the uncommon monster?";
next;
if (select("Poring:Mastering:Ghostring:Spore") == 3)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "10. Choose the monster";
mes "that is not Undead.";
next;
if (select("Drake:Megalodon:Spore:Khalitzburg") == 3)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
break;
case 3:
mes "[The Anonymous One]";
mes "1. Choose the correct amount of the maximum dodge rate increase from the 'Increase Dodge' skill when at level 10.";
next;
if (select("30:40:160:20") == 1)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "2. Choose a monster which detects hiding/cloaking Thieves and Assassins.";
next;
if (select("Worm Tail:Andre:Mummy:Soldier Skeleton") == 2)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "3. Choose a group of weapons that cannot be used by an Assassin at once.";
next;
if (select("Main Gaughe + Gladius:Stiletto + Main Gauche:Katar + Maingauche:Hammer + Stiletto") == 3)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "4. Choose the town where Thieves can change their jobs.";
next;
if (select("Prontera:Lutie:Alberta:Morocc") == 4)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "5. Choose a card that does not affect the AGI stat.";
next;
if (select("Baphomet Jr. card:Whisper Card:Female Thiefbug card:Male Thiefbug card") == 2)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "6. Choose the correct specialty of the Assassin class.";
next;
if (select("Excellent singing talent:Excellent reading talent:Excellent dancing talent:Excellent dodge ability") == 4)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "7. Choose the maximum AGI bonus an Assassin can get at job level 50.";
next;
if (select("7:8:9:10") == 4)
.@assassin_t += 10;
if (select("7:8:9:10") == 4)
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "8. Choose the item that an Assassin cannot equip.";
next;
if (select("Dagger:Helm:Boots:Brooch") == 2)
.@assassin_t += 10;
if (select("Dagger:Helm:Boots:Brooch") == 2)
set .@assassin_t,.@assassin_t+10;
mes "[The Anonymous One]";
mes "9. Choose the job change item for Thief.";
next;
switch(select("Orange Gooey Mushroom:Red Gooey Mushroom:Orange Net Mushroom:Orange Hair Mushroom")) {
case 1:
case 3:
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
break;
default:
break;
@@ -1005,7 +1007,7 @@ OnTouch_:
mes "10. Choose a card that would typically benefit an Assassin the least.";
next;
if (select("Whisper card:Elder Willow card:Soldier Skeleton card:Cobold card") == 2)
.@assassin_t += 10;
set .@assassin_t,.@assassin_t+10;
break;
}
if (ASSIN_Q2 == 3) {
@@ -1021,7 +1023,7 @@ OnTouch_:
mes "You scored";
mes "" + .@assassin_t + " percent...";
if (.@assassin_t > 80) {
ASSIN_Q2 = 5;
set ASSIN_Q2,5;
changequest 8002,8003;
mes "Well done.";
mes "You pass.";
@@ -1031,7 +1033,7 @@ OnTouch_:
close;
}
else {
ASSIN_Q2 = 4;
set ASSIN_Q2,4;
mes "That means you fail!";
next;
mes "[The Anonymous One]";
@@ -1058,7 +1060,7 @@ OnTouch_:
mes "You scored";
mes "" + .@assassin_t + " points...";
if (.@assassin_t > 80) {
ASSIN_Q2 = 5;
set ASSIN_Q2,5;
changequest 8002,8003;
next;
mes "[The Anonymous One]";
@@ -1066,7 +1068,7 @@ OnTouch_:
close;
}
else {
ASSIN_Q2 = 4;
set ASSIN_Q2,4;
mes "You failed!";
next;
mes "[The Anonymous One]";
@@ -1192,8 +1194,9 @@ OnTouch_:
mes "I guess you";
mes "could use a break...";
close2;
ASSIN_Q = 0;
ASSIN_Q2 = 0;
set ASSIN_Q,0;
set ASSIN_Q3,0;
set ASSIN_Q2,0;
changequest 8003,8000;
warp "in_moc_16",19,13;
end;
@@ -1204,7 +1207,7 @@ in_moc_16,1,1,0 script Beholder#ASNTEST -1,{
end;
OnEnable:
.MyMobs = 6;
set .MyMobs,6;
// Target mobs
monster "in_moc_16",62,161,"Job change target",1002,1,"Beholder#ASNTEST::OnMyMobDead";
monster "in_moc_16",85,169,"Job change target",1063,1,"Beholder#ASNTEST::OnMyMobDead";
@@ -1264,15 +1267,15 @@ OnResetmob:
end;
OnMyMobDead:
.MyMobs--;
set .MyMobs,.MyMobs-1;
if (.MyMobs < 1) {
mapannounce "in_moc_16","You seem to be doing quite well. Keep it up!",bc_map;
ASSIN_Q = 3;
set ASSIN_Q,3;
changequest 8003,8004;
donpcevent "timestopper#1::OnEnable";
donpcevent "Keeper of the Door#ASN::OnEnable";
donpcevent "Beholder#ASNTEST::OnResetmob";
.DisableTraps = 1;
set .DisableTraps,1;
stopnpctimer;
}
else {
@@ -1282,7 +1285,7 @@ OnMyMobDead:
OnMyMobDead2:
mapannounce "in_moc_16",strcharinfo(0) + "! You made a mistake! I'm bringing you back!",bc_map;
ASSIN_Q = 2;
set ASSIN_Q,2;
warp "in_moc_16",19,161;
donpcevent "Beholder#ASNTEST::OnReset";
end;
@@ -1338,7 +1341,7 @@ OnTimer184000:
OnTimer185000:
mapannounce "in_moc_16","Time's up!",bc_map;
mapannounce "in_moc_16","Well, good job... If you wanted to waste your time. You'll have to try again!",bc_map;
//ASSIN_Q = 2;
//set ASSIN_Q,2;
end;
OnTimer186000:
@@ -1354,7 +1357,7 @@ in_moc_16,68,158,0 script 01_1::SinTrap -1,0,0,{
OnTouch_:
if (getvariableofnpc(.DisableTraps,"Beholder#ASNTEST") < 1) {
mapannounce "in_moc_16",strcharinfo(0) + ", you're trapped. You will be sent back.",bc_map;
ASSIN_Q = 2;
set ASSIN_Q,2;
warp "in_moc_16",19,161;
donpcevent "Beholder#ASNTEST::OnResetmob";
donpcevent "Standby Room#ASNTEST::OnStart";
@@ -1454,9 +1457,9 @@ OnInit:
OnTouch_:
donpcevent "Thomas#ASNTEST::OnDisable";
if (ASSIN_Q == 3)
ASSIN_Q = 3;
set ASSIN_Q,3;
else
ASSIN_Q = 4;
set ASSIN_Q,4;
warp "in_moc_16",87,102;
savepoint "in_moc_16",16,13,1,1;
end;
@@ -1484,13 +1487,13 @@ OnTimer187000:
OnDisable:
stopnpctimer;
end;
OnMyMobDead:
mapannounce "in_moc_16","Hey, what the hell was that?! I told you: No killing monsters!",bc_map;
mapannounce "in_moc_16","I'm bringing you back... *Sigh...*",bc_map;
ASSIN_Q = 3;
set ASSIN_Q,3;
warp "in_moc_16",87,102;
killmonster "in_moc_16","timestopper#1::OnMyMobDead";
killmonsterall "in_moc_16";
end;
}
@@ -1522,8 +1525,9 @@ OnTouch_:
mes "Oh hey, don't forget to save your respawn point in town.";
close2;
mapannounce "in_moc_16",strcharinfo(0) + " got scared and quit the test...Who's Next?!",bc_map;
ASSIN_Q = 0;
ASSIN_Q2 = 0;
set ASSIN_Q,0;
set ASSIN_Q2,0;
set ASSIN_Q3,0;
changequest 8004,8000;
savepoint "in_moc_16",18,14,1,1;
warp "in_moc_16",18,14;
@@ -1544,7 +1548,7 @@ OnTouch_:
mes "[Thomas]";
mes "If you run away, get a nose bleed and pass out or something like that, I'll fail ya'. Enough talk. Let's see what you got.";
close2;
ASSIN_Q = 4;
set ASSIN_Q,4;
monster "in_moc_16",81,77,"Mummy",1041,1,"timestopper#1::OnMyMobDead";
monster "in_moc_16",82,77,"Mummy",1041,1,"timestopper#1::OnMyMobDead";
@@ -1579,7 +1583,7 @@ OnTouch_:
OnDisable:
donpcevent "Standby Room#ASNTEST::OnStart";
killmonster "in_moc_16","timestopper#1::OnMyMobDead";
killmonsterall "in_moc_16";
end;
}
@@ -1592,7 +1596,7 @@ OnTouch_:
mes "Oh! Congratulations!";
mes "You may now proceed to our Guildmaster's room. Good luck!!";
close2;
ASSIN_Q = 5;
set ASSIN_Q,5;
changequest 8004,8005;
warp "in_moc_16",181,183;
end;
@@ -1602,7 +1606,7 @@ in_moc_16,182,169,0 script Maze Assistant 45,1,1,{
OnTouch_:
if (ASSIN_Q == 5 || ASSIN_Q == 6) {
warp "in_moc_16",181,183;
ASSIN_Q++;
set ASSIN_Q,ASSIN_Q+1;
if (!isbegin_quest(8006))
changequest 8005,8006;
}
@@ -1644,7 +1648,7 @@ OnTouch_:
else
savepoint "moc_ruins",79,99,1,1;
if (ASSIN_Q == 7 && BaseJob == Job_Thief) {
ASSIN_Q = 8;
set ASSIN_Q,8;
mes "[Guildmaster]";
mes "Welcome.";
mes "I apologize for";
@@ -1678,6 +1682,7 @@ OnTouch_:
next;
switch(select("Revenge...!:Money~:I want to travel.")) {
case 1:
set ASSIN_Q,8;
mes "[Guildmaster]";
mes "Revenge...?";
mes "Yes, I understand. All of us hold grudges against someone else eventually.";
@@ -1691,7 +1696,7 @@ OnTouch_:
next;
break;
case 2:
ASSIN_Q = 9;
set ASSIN_Q,9;
mes "[Guildmaster]";
mes "Financial reasons...? I won't deny that we all need money to live. But being Assassin means living for a higher purpose.";
next;
@@ -1702,7 +1707,7 @@ OnTouch_:
next;
break;
case 3:
ASSIN_Q = 10;
set ASSIN_Q,10;
mes "[Guildmaster]";
mes "Good idea. Traveling around the world will allow you to broaden your experiences.";
next;
@@ -1731,7 +1736,7 @@ OnTouch_:
next;
switch(select("I like the solitude.:Making money being an Assassin.:They just look interesting.")) {
case 1:
ASSIN_Q = 11;
set ASSIN_Q,11;
mes "[Guildmaster]";
mes "You got the point...";
mes "We are lonely. We will always be alone, even amongst each other...";
@@ -1746,13 +1751,13 @@ OnTouch_:
next;
break;
case 2:
ASSIN_Q = 12;
set ASSIN_Q,12;
mes "[Guildmaster]";
mes "Well, I can't deny it, we do need money to make a living. But don't you think we should pursue something even more important than money?";
next;
break;
case 3:
ASSIN_Q = 13;
set ASSIN_Q,13;
mes "[Guildmaster]";
mes "Style and appearance is only superficial. It is sad that many people think this way...";
next;
@@ -1777,7 +1782,7 @@ OnTouch_:
next;
switch(select("To broaden my skills.:It's a goal of mine.:For spiritual improvement.")) {
case 1:
ASSIN_Q = 14;
set ASSIN_Q,14;
mes "[Guildmaster]";
mes "Learning skills comes naturally with the Assassin job. But don't think of skills as the best value of your training.";
next;
@@ -1786,7 +1791,7 @@ OnTouch_:
next;
break;
case 2:
ASSIN_Q = 15;
set ASSIN_Q,15;
mes "[Guildmaster]";
mes "It's a goal of yours, eh? Well, I guess you've got to have goals...";
next;
@@ -1800,7 +1805,7 @@ OnTouch_:
next;
break;
case 3:
ASSIN_Q = 16;
set ASSIN_Q,16;
mes "[Guildmaster]";
mes "Good idea...";
mes "That is a good way to improve yourself. I've seen many people who know how to be strong physically but not in their mental state.";
@@ -1832,14 +1837,14 @@ OnTouch_:
next;
switch(select("I would level up fast.:I want to explore my Assassin skills.:I will go where I couldn't go as a Thief.")) {
case 1:
.@assassin_sangdam += 10;
set .@assassin_sangdam,.@assassin_sangdam+10;
mes "[Guildmaster]";
mes "Don't act recklessly...";
mes "Being an Assassin never makes you a different person. And don't rely on chance.";
next;
break;
case 2:
.@assassin_sangdam += 5;
set .@assassin_sangdam,.@assassin_sangdam+5;
mes "[Guildmaster]";
mes "It is good for one to examine oneself. I can understand that you will be excited by the great change in your ability.";
next;
@@ -1866,14 +1871,14 @@ OnTouch_:
next;
switch(select("My friends.:My Guildsmen.:My lover.")) {
case 1:
.@assassin_sangdam += 5;
set .@assassin_sangdam,.@assassin_sangdam+5;
mes "[Guildmaster]";
mes "I see...";
mes "Appreciate them for caring about you, even when you're alone.";
next;
break;
case 2:
.@assassin_sangdam += 5;
set .@assassin_sangdam,.@assassin_sangdam+5;
mes "[Guildmaster]";
mes "Great...";
mes "Comrades for whom you would die for...";
@@ -1904,7 +1909,7 @@ OnTouch_:
next;
switch(select("Places where Assassins can level up...:Main goals as an Assassin.:Financial consulting.")) {
case 1:
.@assassin_sangdam += 5;
set .@assassin_sangdam,.@assassin_sangdam+5;
mes "[Guildmaster]";
mes "It all depends on your mind. Any place could be the best to level up according to your mind state.";
next;
@@ -1922,7 +1927,7 @@ OnTouch_:
next;
break;
case 3:
.@assassin_sangdam += 10;
set .@assassin_sangdam,.@assassin_sangdam+10;
mes "[Guildmaster]";
mes "Oh my lord...";
mes "Are you planning to become an Assassin in order to make money?";
@@ -1974,7 +1979,7 @@ OnTouch_:
mes "supports you. How";
mes "about you, Huey?";
next;
if (ASSIN_Q3 == 1) { // player Job Level was above 48
if (ASSIN_Q3 == 1) {
mes "[Huey]";
mes "A rarity.";
mes "You can tell";
@@ -1984,7 +1989,7 @@ OnTouch_:
mes "I agree with";
mes "the Anonymous One.";
}
else { // player Job Level was below 48
else {
mes "[Huey]";
mes "Although "+ strcharinfo(0) +" looks too mellow and gentle, kind of like a pussycat, "+ strcharinfo(0) +" has the stuff.";
next;
@@ -2059,8 +2064,7 @@ OnTouch_:
mes "I believe you stand out amongst them...";
next;
}
switch(ASSIN_Q3) {
case 1: // player Job Level was above 48
if (ASSIN_Q3 == 1 && BaseJob == Job_Thief && ASSIN_Q > 6 && ASSIN_Q < 17) {
mes "[Guildmaster]";
mes "Well, I've said too much. Please choose a weapon as a present.";
next;
@@ -2094,10 +2098,10 @@ OnTouch_:
mes "It used to rule over the Assassin weapon market. Please take care of my gladius.";
getitem 1220,1; //Gladius_
}
ASSIN_Q3 = 3;
ASSIN_Q3 = 2;
next;
break;
case 2: // player Job Level was below 48
}
else if (ASSIN_Q3 != 2) {
mes "[Guildmaster]";
mes "Well, I talked too much.";
mes "Please take this first.";
@@ -2118,7 +2122,7 @@ OnTouch_:
case 5:
getitem 1252,1; //Katar
}
ASSIN_Q3 = 3;
ASSIN_Q3 = 2;
}
mes "[Guildmaster]";
mes "Well, I am giving you a token. Please return to the Assassin expert, the Ferocious-Looking Huey, at the entrance.";
@@ -2161,7 +2165,7 @@ OnTouch_:
end;
}
else if (ASSIN_Q > 7 && ASSIN_Q < 17) {
ASSIN_Q = 7;
set ASSIN_Q,7;
mes "[Guildmaster]";
mes "What the hell? You pressed 'Cancel' during the process. Do you want to change your job or what?";
next;

View File

@@ -687,12 +687,3 @@ 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";
}

View File

@@ -298,12 +298,6 @@ man_fild02 mapflag nightenabled
splendide mapflag nightenabled
spl_fild01 mapflag nightenabled
//============================================================
// Brasilis
//============================================================
brasilis mapflag nightenabled
bra_fild01 mapflag nightenabled
//============================================================
// Events
//============================================================

View File

@@ -371,12 +371,6 @@ splendide mapflag nobranch
spl_in01 mapflag nobranch
spl_in02 mapflag nobranch
//============================================================
// Brasilis
//============================================================
brasilis mapflag nobranch
bra_in01 mapflag nobranch
//============================================================
// RWC
//============================================================

View File

@@ -731,13 +731,6 @@ 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
//============================================================

View File

@@ -25,8 +25,6 @@ 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

View File

@@ -58,8 +58,6 @@ 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

View File

@@ -426,7 +426,7 @@ bat_a01 mapflag noteleport
bat_a02 mapflag noteleport
//============================================================
// Episode 13.2
// Episode 13
//============================================================
mid_campin mapflag noteleport
moc_fild22b mapflag noteleport
@@ -438,11 +438,6 @@ man_in01 mapflag noteleport
spl_in01 mapflag noteleport
spl_in02 mapflag noteleport
//============================================================
// Brasilis
//============================================================
bra_in01 mapflag noteleport
//============================================================
// Orc's Memory
//============================================================

View File

@@ -14,7 +14,6 @@ alberta mapflag reset
aldebaran mapflag reset
amatsu mapflag reset
ayothaya mapflag reset
brasilis mapflag reset
comodo mapflag reset
einbroch mapflag reset
einbech mapflag reset

View File

@@ -28,4 +28,3 @@ louyang mapflag town
hugel mapflag town
rachel mapflag town
veins mapflag town
brasilis mapflag town

View File

@@ -203,47 +203,6 @@ 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);

View File

@@ -1,20 +0,0 @@
//===== 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

View File

@@ -1,77 +0,0 @@
//===== 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;
}
}

View File

@@ -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.";
close;
break;
case 3:
mes "[Hairdresser Jovovich]";

View File

@@ -1,64 +0,0 @@
//===== 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

View File

@@ -1,48 +0,0 @@
//===== 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

View File

@@ -98,34 +98,3 @@ 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

View File

@@ -21,10 +21,6 @@ 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

View File

@@ -1,19 +1,26 @@
//===== rAthena Script =======================================
//===== rAthena Script =======================================
//= Brasilis Town
//===== Description: =========================================
//===== By: ==================================================
//= L0ne_W0lf
//===== Current Version: =====================================
//= 1.4
//===== Compatible With: =====================================
//= rAthena Project
//===== Description: =========================================
//= [Official Conversion]
//= Brasilis Town Script
//===== Changelog: ===========================================
//= 1.0 First version. Transportation and Basic NPCs. [L0ne_W0lf]
//===== Additional Comments: =================================
//= 1.0 First version. Transportation and Basic NPCs.
//= 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
//============================================================
- script ::Crewman_bra2 -1,{
/* Pre-Renewal coordinates: alberta,247,115,3 */
alberta,246,82,3 script Crewman#bra2 100,{
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.";

View File

@@ -1,13 +1,19 @@
//===== rAthena Script =======================================
//===== rAthena Script =======================================
//= Brasilis Guide
//===== Description: =========================================
//= [Official Conversion based on bRO & jRO servers]
//===== By: ==================================================
//= L0ne_W0lf
//===== Current Version: =====================================
//= 1.2
//===== Compatible With: =====================================
//= rAthena Project
//===== Description: =========================================
//= [Official Conversion]
//= Guide for the city of Brasilis.
//===== Changelog: ===========================================
//= 1.0 First Version, Renewal guide. [L0ne_W0lf]
//= 1.1 Added a missing close. [L0ne_W0lf]
//===== Additional Comments: =================================
//= 1.0 First Version, Renewal guide.
//= 1.1 Added a missing close.
//= 1.2 Navigation system update. [Euphy]
//============================================================
//============================================================
brasilis,219,97,3 script Brasilis Guide 478,{
mes "[Brasilis Guide]";
@@ -53,7 +59,6 @@ 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.";

View File

@@ -2,35 +2,34 @@
//= Instance: The Maze of Oz.
//===== Description: =========================================
//- [Walkthrough conversion]
//- Part of the Episode 18 main quest.
//- Part of the episode 18.1 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$ = "Oz Labyrinth";
ra_fild10,179,176,5 script Merchant#ep18_gorge 4_EP18_MERCHANT,{
.@md_name$ = "The Maze of Oz";
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.";
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";
cutin "ep18_merchant.png",2;
erasequest 11717;
setquest 11719;
ep18_main = 30;
changequest 11717,11719;
ep18_1_main = 30;
close3;
}
if (ep18_main == 30) {
mes "[Disguised Miriam]";
mes "Then let's head to ^e5555e" + .@md_name$ + "^000000";
if (ep18_1_main == 30) {
mes "[Miriam in disguise]";
mes "Then I'll start the ^e5555e" + .@md_name$ + "^000000";
next;
if (getcharid(1) == 0 || is_party_leader() == false) {
mes "[Disguised Miriam]";
mes "I think it would be a good idea to form a ^ff0000party before enter^000000..";
mes "[Miriam in disguise]";
mes "I think it would be a good idea to form a ^ff0000party before enter ^000000..";
close;
}
switch( select( "Open the door.", "Enter.", "Quit." ) ) {
switch( select( "Open the door", "Enter", "Stop" ) ) {
case 1:
if (instance_create(.@md_name$) < 0) {
mes "Party: " + getpartyname(getcharid(1)) + "";
@@ -38,21 +37,21 @@ ra_fild10,179,176,5 script Merchant#ep18_gorge 4_EP18_MERCHANT,{
mes "^0000ff" + .@md_name$ + " ^000000- Unknown error";
close;
}
mes "[Disguised Miriam]";
mes "It's better to wait a bit before entering.";
mes "[Miriam in disguise]";
mes "You'd better wait a little before you go in.";
close;
case 2:
switch( instance_enter(.@md_name$) ) {
case IE_OTHER:
mes "[Disguised Miriam]";
mes "[Miriam in disguise]";
mes "^ff0000An unknown error occurred.^000000";
close;
case IE_NOINSTANCE:
mes "[Disguised Miriam]";
mes "Let's wait a bit and try again.";
mes "[Miriam in disguise]";
mes "^ff0000Your party leader has not yet created the dungeon.^000000";
close;
case IE_NOMEMBER:
mes "[Disguised Miriam]";
mes "[Miriam in disguise]";
mes "^ff0000Only a member of the party can enter the Memorial Dungeon.^000000";
close;
case IE_OK:
@@ -63,25 +62,24 @@ 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;
close3;
mes "[Vendor]";
mes "Someone must have been around here, but they just disappeared. Where did they go?";
close3;
OnInit:
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(11717) == 1" );
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(11719) == 1" );
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(11717) == 1" );
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(11719) == 1" );
end;
}
// Step 1
1@oz,284,164,3 script Rope#outoz 4_ROPEPILE,{
mes "I think we can use the rope to climb up.";
mes "I think I can climb up with a rope.";
next;
if (select( "Use the rope to climb up.", "Do not use." ) == 2)
if (select( "Use a rope to climb", "Do not use" ) == 2)
end;
warp "ra_fild10",173,176;
warp "ra_fild10",180,174;
end;
}
@@ -90,64 +88,64 @@ OnInit:
end;
'event_oz = 1;
.@miriam1$ = instance_npcname("Miriam#ozmd1");
.@maggi1$ = instance_npcname("Maggi#ozmd1");
.@maggi1$ = instance_npcname("Magi#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;
cloakoffnpcself( .@maggi1$ );
cloakoffnpcself( .@mark1$ );
cloakoffnpcself( .@tamarin1$ );
enablenpc .@maggi1$;
enablenpc .@mark1$;
enablenpc .@tamarin1$;
sleep2 2000;
npctalk "Mark: Are you okay?", .@mark1$;
cutin "ep18_mark_01.png",2;
sleep2 2000;
npctalk "Miriam: Lava is flowing right below, so ash is always flying.", .@miriam1$;
npctalk "Miriam: There is lava flowing right below it, always scattering ashes.", .@miriam1$;
cutin "ep18_miriam_03.png",2;
sleep2 2000;
npctalk "Miriam: There may be embers left in the lava ash, so please be careful.", .@miriam1$;
npctalk "Miriam: Beware there may be embers in the lava ash.", .@miriam1$;
sleep2 2000;
npctalk "Miriam: If you inhale it incorrectly, it will burn your lungs.", .@miriam1$;
npctalk "Miriam: If you inhale incorrectly, you will burn your lungs.", .@miriam1$;
sleep2 2000;
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$;
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$;
sleep2 2000;
npctalk "Miriam: First, please follow the road to the north.", .@miriam1$;
npctalk "Miriam: Please follow the road to the north first.", .@miriam1$;
sleep2 2000;
cutin "",255;
setpcblock PCBLOCK_NPC, false;
cloakonnpcself( .@maggi1$ );
cloakonnpcself( .@mark1$ );
cloakonnpcself( .@tamarin1$ );
disablenpc .@maggi1$;
disablenpc .@mark1$;
disablenpc .@tamarin1$;
disablenpc .@miriam1$;
enablenpc .@miriam2$;
end;
}
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
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
// Step 2
1@oz,271,272,3 script(DISABLED) Miriam#ozmd2 4_EP18_MIRIAM,{
1@oz,271,272,3 script 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 the real Maze of Oz.", .@miriam2$;
npctalk "Miriam: If you cross the bridge in front of you, it's a real maze.", .@miriam2$;
sleep2 2000;
npctalk "Miriam: You have to be very careful when crossing the bridge, so let's talk again at the bridge.", .@miriam2$;
npctalk "Miriam: We must be very careful crossing the bridge, let's talk again after.", .@miriam2$;
sleep2 2000;
setpcblock PCBLOCK_NPC, false;
disablenpc .@miriam2$;
@@ -155,43 +153,69 @@ 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(DISABLED) Miriam#ozmd3 EP18_NPC_MIRIAM,{
1@oz,241,272,3 script Miriam#ozmd3 EP18_NPC_MIRIAM,{
if ('event_oz != 2)
end;
'event_oz = 3;
.@maggi3$ = instance_npcname("Maggi#ozmd3");
'miriam3$ = instance_npcname("Miriam#ozmd3");
.@maggi3$ = instance_npcname("Magi#ozmd3");
.@mark3$ = instance_npcname("Mark#ozmd3");
.@tamarin3$ = instance_npcname("Tamarin#ozmd3");
setpcblock PCBLOCK_NPC, true;
npctalk "Miriam: This bridge is dangerous, so it would be better to share the luggage and cross it one at a time.", 'miriam3$;
npctalk "Miriam: This bridge is dangerous, so it's best to split your luggage and cross in turn.", 'miriam3$;
sleep2 2000;
npctalk "Miriam: Then, I will cross first, so please follow me slowly. It will be helpful not to look under your feet.", 'miriam3$;
npctalk "Miriam: Then I will cross first, so please follow slowly. It will help not to look under your feet.", 'miriam3$;
sleep2 2000;
npctalk "Tamarin: Wow... I can't see the bottom.", .@tamarin3$;
cloakoffnpcself( .@maggi3$ );
cloakoffnpcself( .@mark3$ );
cloakoffnpcself( .@tamarin3$ );
npctalk "Tamarin: Wow I can't see the bottom.", .@tamarin3$;
enablenpc .@maggi3$;
enablenpc .@mark3$;
enablenpc .@tamarin3$;
sleep2 2000;
npctalk "Magi: My legs look really worn out...", .@maggi3$;
npctalk "Magi: Your legs look very old...", .@maggi3$;
sleep2 2000;
npctalk "Mark: Everyone be careful.", .@mark3$;
npctalk "Mark: Everyone be careful", .@mark3$;
sleep2 2000;
setpcblock PCBLOCK_NPC, false;
cloakonnpcself( .@maggi3$ );
cloakonnpcself( .@mark3$ );
cloakonnpcself( .@tamarin3$ );
disablenpc .@maggi3$;
disablenpc .@mark3$;
disablenpc .@tamarin3$;
'miriam3_id = getnpcid(0);
unitwalk 'miriam3_id,231,272, 'miriam3$ + "::OnEvent1";
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
end;
OnEvent1:
unitwalk 'miriam3_id,211,272, 'miriam3$ + "::OnEvent2";
@@ -212,13 +236,13 @@ OnEvent5:
end;
}
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
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
// Step 4 + 5
1@oz,157,272,3 script(DISABLED) Miriam#ozmd4 4_EP18_MIRIAM,{
1@oz,157,272,3 script Miriam#ozmd4 4_EP18_MIRIAM,{
if ('event_oz != 3)
end;
'event_oz = 4;
@@ -226,25 +250,25 @@ OnEvent5:
.@miriam4$ = instance_npcname("Miriam#ozmd4");
.@tamarin4$ = instance_npcname("Tamarin#ozmd4");
.@ashtoad2$ = instance_npcname("Ash Toad#ozmd2");
.@maggi4$ = instance_npcname("Maggi#ozmd4");
.@maggi4$ = instance_npcname("Magi#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, 0xB7EE,FW_NORMAL,16;
mapannounce 'map_name$, "Miriam: Ah!! A monster!!!", bc_map, 0x00B7EE,FW_NORMAL,16;
sleep2 1500;
mapannounce 'map_name$, "Miriam: I will take care of this rude guy.", bc_map, 0xB7EE,FW_NORMAL,16;
mapannounce 'map_name$, "Miriam: I'll take this rude bastard.", bc_map, 0x00B7EE,FW_NORMAL,16;
sleep2 1500;
mapannounce 'map_name$, "Tamarin: It also appeared in the back!!!", bc_map, 0xB7EE,FW_NORMAL,16;
mapannounce 'map_name$, "Tamarin: Appeared in the back!!!", bc_map, 0x00B7EE,FW_NORMAL,16;
sleep2 2000;
enablenpc .@tamarin4$;
sleep2 500;
enablenpc .@ashtoad2$;
mapannounce 'map_name$, "Magi: Aaaah!!!", bc_map, 0xB7EE,FW_NORMAL,16;
mapannounce 'map_name$, "Magi: Crazy!!!", bc_map, 0x00B7EE,FW_NORMAL,16;
sleep2 500;
enablenpc .@maggi4$;
enablenpc .@mark4$;
mapannounce 'map_name$, "Mark: Please support the front!!!", bc_map, 0xB7EE,FW_NORMAL,16;
mapannounce 'map_name$, "Mark: Please support me in the front!!!", bc_map, 0x00B7EE,FW_NORMAL,16;
sleep2 1000;
'mob_count_oz = 0;
monster 'map_name$,145,274,"Ash Toad",21295,1, .@miriam4$ + "::OnMobDead"; // EP18_ASH_TOAD
@@ -265,7 +289,7 @@ OnMobDead:
.@tamarin4$ = instance_npcname("Tamarin#ozmd4");
.@ashtoad2$ = instance_npcname("Ash Toad#ozmd2");
.@maggi4$ = instance_npcname("Maggi#ozmd4");
.@maggi4$ = instance_npcname("Magi#ozmd4");
.@mark4$ = instance_npcname("Mark#ozmd4");
.@ashtoad3$ = instance_npcname("Ash Toad#ozmd3");
.@maram4$ = instance_npcname("Maram#ozmd4");
@@ -277,59 +301,60 @@ OnMobDead:
npctalk "Tamarin: I did it!!!", .@tamarin4$;
disablenpc .@ashtoad2$;
sleep2 2000;
npctalk "Magi: This way too!!", .@maggi4$;
npctalk "Magi: Me too!!", .@maggi4$;
disablenpc .@ashtoad3$;
sleep2 2000;
npctalk "Miriam: Huh... It wasn't a great monster, but it would have been dangerous for ordinary merchants.", .@miriam4$;
npctalk "Miriam: Huh It wasn't a great monster, but it would have been dangerous if they were ordinary merchants.", .@miriam4$;
disablenpc .@ashtoad1$;
sleep2 2000;
cloakoffnpcself( .@maram4$ );
npctalk "Maram : " + strcharinfo(0) + ", are you okay?", .@maram4$;
npctalk "Maram : " + strcharinfo(0) + " Are you okay?", .@maram4$;
enablenpc .@maram4$;
sleep2 2000;
npctalk "Miriam: You're late! Maram!!!", .@miriam4$;
sleep2 2000;
npctalk "Maram: I was a little late because I met a monster on the way.", .@maram4$;
npctalk "Maram: I met a monster on the way, so I'm a little late.", .@maram4$;
sleep2 2000;
npctalk "Miriam: There were no monsters on the road we passed earlier.", .@miriam4$;
sleep2 2000;
npctalk "Maram: Really? Where on earth do monsters like this come from?", .@maram4$;
npctalk "Maram: Yeah? Where the hell do monsters spring up like this...", .@maram4$;
sleep2 2000;
npctalk "Maram: It's a big problem because it's getting harder to move supplies because of these monsters.", .@maram4$;
npctalk "Maram: It's a big deal because it's getting harder and harder to move goods because of these monsters.", .@maram4$;
sleep2 2000;
npctalk "Tamarin: What if you travel by land?", .@tamarin4$;
npctalk "Tamarin: If you go to the ground?", .@tamarin4$;
sleep2 2000;
npctalk "Tamarin: I heard there used to be a bridge across the canyon?", .@tamarin4$;
npctalk "Tamarin: I heard there used to be a bridge to cross a canyon?", .@tamarin4$;
sleep2 2000;
npctalk "Tamarin: There are still remains left...", .@tamarin4$;
npctalk "Tamarin: Because there are still remains...", .@tamarin4$;
sleep2 2000;
npctalk "Maram: It is said that the bridge above was destroyed after seeing natives crossing it while fleeing an attack by hardliners.", .@maram4$;
npctalk "Maram: It is said that the bridge above was destroyed when they saw the natives crossing to escape the hardliners' attacks.", .@maram4$;
sleep2 2000;
npctalk "Maram: The area across the bridge has become uninhabitable due to volcanic ash, so they must have been trying to kill him.", .@maram4$;
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$;
sleep2 2000;
npctalk "Maram: It's not difficult to build a bridge again...", .@maram4$;
npctalk "Maram: It's not difficult to make a bridge again...", .@maram4$;
sleep2 2000;
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$;
npctalk "Maram: You can't advertise that you're hiding here by making a bridge because you're in hiding.", .@maram4$;
sleep2 2000;
npctalk "Maram: Although it is dangerous and inconvenient now, we have no choice but to use the Maze of Oz.", .@maram4$;
npctalk "Maram: It's dangerous and inconvenient right now, but I have no choice but to use the maze of Oz.", .@maram4$;
sleep2 2000;
npctalk "Maram: Because it's in this condition, it may be that it hasn't been discovered until now.", .@maram4$;
npctalk "Maram: In this state, it may not have been noticed until now.", .@maram4$;
sleep2 2000;
npctalk "Miriam: If the Maze of Oz didn't exist...", .@miriam4$;
npctalk "Miriam: Without the Maze of Oz...", .@miriam4$;
sleep2 2000;
npctalk "Miriam: It must have been much harder than it is now.", .@miriam4$;
npctalk "Miriam: It must have been a lot 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 then, shall we walk down the lovely maze of Oz again?", .@maram4$;
npctalk "Maram: Now, shall we walk 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, just keep going down until you reach a fork in the road.", .@miriam4$;
npctalk "Miriam : " + strcharinfo(0) + " From now on, go all the way down until you come to a fork.", .@miriam4$;
sleep2 2000;
npctalk "Miriam: It would be nice if monsters didn't appear, but...", .@miriam4$;
npctalk "Miriam: It would be nice if the monsters didn't appear...", .@miriam4$;
sleep2 1000;
cloakonnpcself( .@maram4$ );
disablenpc .@maram4$;
setpcblock PCBLOCK_NPC, false;
disablenpc .@maggi4$;
disablenpc .@mark4$;
disablenpc .@tamarin4$;
@@ -341,43 +366,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) Maggi#ozmd4 4_4JOB_MAGGI
1@oz,155,275,3 duplicate(dummy_disabled_npc) Magi#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_cloaked_npc) Maram#ozmd4 4_EP18_MARAM
1@oz,162,275,3 duplicate(dummy_npc) Maram#ozmd4 4_EP18_MARAM
// Step 6
1@oz,98,172,3 script(DISABLED) Maram#ozmd5 EP18_NPC_MARAM,{
1@oz,98,172,3 script 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 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$;
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... ";
sleep2 2000;
npctalk "Maram: How long will the maze of Oz endure...", .@maram$;
npctalk "Maram: How long will the maze of Oz last...";
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: What is this voice?!?!?!?!?", .@maram$;
npctalk "Maram: This voice?!?!?!?!?";
sleep2 2000;
npctalk "Miriam: Imril!!!!", .@miriam$;
sleep2 2000;
setpcblock PCBLOCK_NPC, false;
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" );
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");
unitwalk getnpcid(0),68,165, .@maram$ + "::OnMove";
donpcevent .@miriam$ + "::OnMove";
end;
@@ -388,33 +413,33 @@ OnMove:
end;
}
1@oz,97,167,3 script(DISABLED) Miriam#ozmd5 EP18_NPC_MIRIAM,{
1@oz,97,167,3 script Miriam#ozmd5 EP18_NPC_MIRIAM,{
end;
OnMove:
npcwalkto 67,164;
end;
}
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
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
// Step 7
1@oz,68,165,3 script(DISABLED) Maram#ozmd7 4_EP18_MARAM,{
1@oz,68,165,3 script Maram#ozmd7 4_EP18_MARAM,{
if ('event_oz != 6)
end;
'event_oz = 7;
npctalk "Maram: Imril are you okay?";
npctalk "Maram: Are you okay, Imril?";
donpcevent instance_npcname("Imril#ozmd6") + "::OnStart";
disablenpc();
disablenpc instance_npcname("Maram#ozmd7");
end;
}
// Step 8
1@oz,61,163,5 script(DISABLED) Imril#ozmd6 4_EP18_IMRIL,{
1@oz,61,163,5 script Imril#ozmd6 4_EP18_IMRIL,{
end;
OnStart:
@@ -435,57 +460,56 @@ OnMobDead:
.@maram8$ = instance_npcname("Maram#ozmd8");
.@imril6$ = instance_npcname("Imril#ozmd6");
.@miriam5$ = instance_npcname("Miriam#ozmd5");
.@maggi6$ = instance_npcname("Maggi#ozmd6");
.@maggi6$ = instance_npcname("Magi#ozmd6");
.@mark6$ = instance_npcname("Mark#ozmd6");
.@tamarin6$ = instance_npcname("Tamarin#ozmd6");
setpcblock PCBLOCK_NPC, true;
cloakoffnpcself( .@maram8$ );
npctalk "Imril: Thank you! I almost died!", .@imril6$;
enablenpc .@maram8$;
npctalk "Imril: Thanks! We almost died!", .@imril6$;
sleep2 2000;
npctalk "Imril: The atmosphere is unusual, so don't go downstairs.", .@imril6$;
npctalk "Imril: Don't go downstairs because the atmosphere isn't too bad.", .@imril6$;
sleep2 2000;
npctalk "Miriam: It seems like I see monsters more often than last time.", .@miriam5$;
npctalk "Miriam: You seem to see monsters more often than last time.", .@miriam5$;
sleep2 2000;
npctalk "Imril: And what about those people?", .@imril6$;
cloakoffnpcself( .@maggi6$ );
cloakoffnpcself( .@mark6$ );
cloakoffnpcself( .@tamarin6$ );
npctalk "Imril: But what about those people?", .@imril6$;
enablenpc .@maggi6$;
enablenpc .@mark6$;
enablenpc .@tamarin6$;
sleep2 2000;
npctalk "Maram: They are adventurers who sometimes help my mother with her work.", .@maram8$;
npctalk "Maram: They are adventurers who sometimes help with mother's work.", .@maram8$;
sleep2 2000;
npctalk "Maram: These are trustworthy people, so don't be so wary.", .@maram8$;
npctalk "Maram: Trustworthy people, don't be so wary.", .@maram8$;
sleep2 2000;
npctalk "Imril: I heard you trust people too easily.", .@imril6$;
npctalk "Imril: Because you trust people too easily.", .@imril6$;
sleep2 2000;
npctalk "Miriam: Yes.", .@miriam5$;
sleep2 2000;
npctalk "Maram: Anyway, let's escape quickly before more monsters appear.", .@maram8$;
npctalk "Maram: Anyway, let's escape before more monsters come out.", .@maram8$;
sleep2 2000;
npctalk "Maram: Not much left.", .@maram8$;
npctalk "Maram: Not long left.", .@maram8$;
sleep2 2000;
npctalk "Maram: It's hard to see, but you can follow the road up here and keep moving!", .@maram8$;
npctalk "Maram: It's hard to see, but just follow the road up here!", .@maram8$;
sleep2 2000;
npctalk "Tamarin: I think this is the way!", .@tamarin6$;
cloakonnpcself( .@maggi6$ );
cloakonnpcself( .@mark6$ );
cloakonnpcself( .@tamarin6$ );
cloakonnpcself( .@maram8$ );
disablenpc .@maggi6$;
disablenpc .@mark6$;
disablenpc .@tamarin6$;
disablenpc .@maram8$;
enablenpc instance_npcname("#oz_way");
setpcblock PCBLOCK_NPC, false;
end;
}
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
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
// Step 9
1@oz,58,256,5 script(DISABLED) #oz_way 1_SHADOW_NPC,3,3,{
1@oz,58,256,5 script #oz_way 1_SHADOW_NPC,3,3,{
end;
OnTouch:
if ('event_oz != 8)
@@ -496,11 +520,11 @@ OnTouch:
}
// Step 10 (maybe not required ?)
1@oz,44,255,5 script(DISABLED) Maram#ozmd6 4_EP18_MARAM,{
1@oz,44,255,5 script Maram#ozmd6 4_EP18_MARAM,{
if ('event_oz != 9)
end;
'event_oz = 10;
npctalk "Maram: Go down this road.";
npctalk "Maram: This way!!!";
initnpctimer;
end;
OnTimer2000:
@@ -512,7 +536,7 @@ OnTimer2000:
// Step 11
// (Step 29 on the main quest).
1@oz,21,189,5 script(DISABLED) Maram#ozmd9 4_EP18_MARAM,{
1@oz,21,189,5 script Maram#ozmd9 4_EP18_MARAM,{
if ('event_oz != 10)
end;
'event_oz = 11;
@@ -522,47 +546,50 @@ OnTimer2000:
.@imril7$ = instance_npcname("Imril#ozmd7");
setpcblock PCBLOCK_NPC, true;
npctalk "Maram: If you climb up the rope in front of here, you can go outside.", .@maram9$;
cloakoffnpcself( .@miriam7$ );
cloakoffnpcself( .@imril7$ );
npctalk "Maram: Climb up the rope in front of this to get out.", .@maram9$;
enablenpc .@miriam7$;
enablenpc .@imril7$;
sleep2 2000;
npctalk "Imril: I'll take some hidden items here, so go up first.", .@imril7$;
npctalk "Imril: I'll go get some hidden stuff here, so go up first.", .@imril7$;
sleep2 2000;
npctalk "Miriam: Everyone is very tired. Let's go up quickly.", .@miriam7$;
if (ep18_main == 30) {
erasequest 11719;
setquest 11720;
ep18_main = 31;
npctalk "Miriam: Everyone is very tired. Let's go upstairs.", .@miriam7$;
if (ep18_1_main == 30) {
changequest 11719,11720;
ep18_1_main = 31;
}
cloakonnpcself( .@miriam7$ );
cloakonnpcself( .@imril7$ );
disablenpc .@miriam7$;
disablenpc .@imril7$;
setpcblock PCBLOCK_NPC, false;
end;
OnInstanceInit:
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(11719) == 1" );
disablenpc instance_npcname("Maram#ozmd9");
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(11719) == 1" );
end;
}
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
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
// Step 12
1@oz,28,190,3 script(DISABLED) Rope#outoz2 4_ROPEPILE,{
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)
if ('event_oz < 11)
end;
warp "gw_fild01",275,337;
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;
}
end;
OnInstanceInit:
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(11720) == 1" );
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(11720) == 1" );
end;
}
@@ -574,7 +601,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
cloakonnpcself();
disablenpc instance_npcname( strnpcinfo(0) );
end;
}
@@ -585,3 +612,4 @@ 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

View File

@@ -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 "[Varmundt]";
mes "I've seen you, " + strcharinfo(0) + ".";
mes "[Barmund]";
mes "Have I seen you " + strcharinfo(0) + "";
mes "I'm sure I can trust you. Let's leave right away.";
close2;
cutin "",255;
@@ -1073,13 +1073,8 @@ 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) {
@@ -1221,24 +1216,10 @@ 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,{
@@ -1265,9 +1246,9 @@ OnEffect:
2@gl_k,150,66,0 script #Servanton HIDDEN_WARP_NPC,7,7,{
end;
OnTouch_:
if ('step != 6)
if ('step != 5)
end;
'step = 7;
'step = 6;
disablenpc();
if ('mode == 1)
donpcevent instance_npcname("#talkinstance5") + "::OnStart";
@@ -1391,18 +1372,16 @@ OnTouch_:
disablenpc();
.@hidden_name$ = strnpcinfo(2);
.@event_type = atoi( charat(.@hidden_name$,4) );
.@event_number = atoi( charat(.@hidden_name$,6) );
if (.@event_type == 2)
.@event$ = instance_npcname("#ghmemorialmob05") + "::OnMyMobDead" + .@event_number; // left side
.@label$ = instance_npcname("#ghmemorialmob05") + "::OnMyMobDead";
else
.@event$ = instance_npcname("#ghmemorialmob06") + "::OnMyMobDead" + .@event_number; // right side
killmonster 'map_name$[1], .@event$;
.@label$ = instance_npcname("#ghmemorialmob06") + "::OnMyMobDead";
getmapxy .@map$,.@x,.@y, BL_NPC;
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$;
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$;
initnpctimer;
end;
OnTimer30000:
@@ -1438,13 +1417,7 @@ OnStart:
enablenpc instance_npcname("#ogh_2-" + .@i);
end;
OnMyMobDead1:
OnMyMobDead2:
OnMyMobDead3:
OnMyMobDead4:
OnMyMobDead5:
OnMyMobDead6:
OnMyMobDead7:
OnMyMobDead:
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
@@ -1472,9 +1445,7 @@ OnBossDead:
for ( .@i = 1; .@i <= 7; .@i++ )
donpcevent instance_npcname("#ogh_2-" + .@i) + "::OnStop";
.@npc_name$ = instance_npcname("#ghmemorialmob05");
for ( .@i = 1; .@i <= 7; .@i++ )
killmonster 'map_name$[1], .@npc_name$ + "::OnMyMobDead" + .@i;
killmonster 'map_name$[1], instance_npcname("#ghmemorialmob05") + "::OnMyMobDead";
end;
}
@@ -1535,13 +1506,6 @@ 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
@@ -1571,10 +1535,7 @@ OnBossDead:
for ( .@i = 1; .@i <= 7; .@i++ )
donpcevent instance_npcname("#ogh_3-" + .@i) + "::OnStop";
.@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;
killmonster 'map_name$[1], instance_npcname("#ghmemorialmob06") + "::OnMyMobDead";
// Hidden mobs
setarray .@coord[0],
@@ -1591,9 +1552,9 @@ OnBossDead:
2@gl_k,150,180,0 script #Geron HIDDEN_WARP_NPC,7,7,{
end;
OnTouch_:
if ('step != 7)
if ('step != 6)
end;
'step = 8;
'step = 7;
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");
@@ -1613,19 +1574,15 @@ 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, .@event$;
monster .@map$,.@x,.@y,"Maggot",2467,.@mobs;
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
@@ -1689,9 +1646,9 @@ OnMobDead:
mes "That is amazing ~ you made it all the way here. May I say thank you?";
close3;
OnTouch_:
if ('step != 8)
if ('step != 7)
end;
'step = 9;
'step = 8;
disablenpc();
if ('mode == 1)
donpcevent instance_npcname("#talkinstance7") + "::OnStart";
@@ -2015,13 +1972,9 @@ OnTimer10000:
2@gl_k,158,241,1 script Hugin#21 4_M_SAGE_C,{
if ('step != 9)
if ('step != 8)
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;
@@ -2078,7 +2031,7 @@ OnTimer10000:
// Treasure Room
//============================================================
1@gl_k,165,136,3 script Strange crack#2 CLEAR_NPC,{
if ('step != 9)
if ('step != 8)
end;
if (isbegin_quest(12322) == 0) {// Space Distortion
mes "The crack looks suspicious but nothing more to check.";

View File

@@ -2,56 +2,54 @@
//= Instance: Thor Gunsu Base.
//===== Description: =========================================
//- [Walkthrough conversion]
//- Part of the Episode 18 main quest.
//- Part of the episode 18.1 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_main < 45 || ep18_main > 46)
if (ep18_1_main != 45 && ep18_1_main != 46)
end;
if (ep18_main == 45) {
if (ep18_1_main == 45) {
cutin "ep18_maram_01.png",2;
mes "[Maram]";
mes "You've arrived, adventurer!";
mes "Thank you for coming all the way here.";
mes "You have arrived, adventurer!";
mes "You did a great job getting here.";
next;
cutin "ep18_maram_03.png",2;
mes "[Maram]";
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.";
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.";
next;
cutin "ep18_maram_01.png",2;
mes "[Maram]";
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;
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;
next;
}
else if (ep18_main == 46) {
cutin "ep18_maram_01.png",2;
else if (ep18_1_main == 46) {
mes "[Maram]";
mes "Let's try to go in while avoiding the guard tower as much as possible.";
mes "Let's try to get in as far as possible from the guard tower.";
next;
}
.@md_name$ = "Thor Military Base";
.@md_name$ = "Thor Gunsu Base";
cutin "",255;
mes "^FF0000Caution : If you perform arbitrary processing within the dungeon, such as monster taming, it will not be considered normal progress.^000000";
mes "^FF0000 Any arbitrary processing such as taming monsters in the dungeon is not considered normal. Please note.^000000";
next;
// player has party
if (is_party_leader())
if (is_party_leader()) {
// player is leader of the party
.@create$ = "Apply for entry to " + .@md_name$ + "";
switch( select( .@create$, "Enter " + .@md_name$ + "" ) ) {
.@create$ = "Open " + .@md_name$;
}
switch( select( .@create$, .@md_name$ + " entry" ) ) {
case 1:
cutin "ep18_maram_01.png",2;
mes "[Maram]";
mes "When the application is complete, talk to me again and select ^0000CD" + .@md_name$ + " entry^000000";
mes "When the application is complete, talk to me again and select ^0000CD Thor military base entry^000000";
if (instance_create(.@md_name$) < 0) {
mes "Party: " + getpartyname(getcharid(1)) + "";
mes "Leader: " + strcharinfo(0) + "";
@@ -69,14 +67,14 @@ que_thr,133,53,5 script Maram#Armybase1 4_EP18_MARAM,{
case IE_NOINSTANCE:
cutin "ep18_maram_01.png",2;
mes "[Maram]";
mes "It seems like you haven't created the dungeon yet. Please check again in a moment.";
mes "I don't think the dungeon has been created yet? Please check later.";
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, 0xFF99;
mapannounce "que_thr", "" + strcharinfo(0) + " of the party, " + getpartyname( getcharid(1) ) + ", is entering " + .@md_name$ + ".",bc_map,"0x00ff99",FW_NORMAL,12;
// warp 1@tcamp,103,237;
end;
}
@@ -84,24 +82,34 @@ que_thr,133,53,5 script Maram#Armybase1 4_EP18_MARAM,{
end;
OnInit:
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(16577) == 1" );
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(16577) == 1" );
end;
}
1@tcamp,106,237,3 script Maram#Base1 4_EP18_MARAM,{
1@tcamp,106,237,3 script Maram#base1 4_EP18_MARAM,{
cutin "ep18_maram_01.png",2;
mes "[Maram]";
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.";
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.";
next;
mes "[Maram]";
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;
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;
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;
@@ -120,11 +128,11 @@ OnInstanceInit:
//-------------------------------------------------------------------
// Traps
//-------------------------------------------------------------------
1@tcamp,120,228,3 script Watchtower#Watch1 4_SYSTEM_BOX,7,7,{
1@tcamp,120,228,3 script Watch Tower#Watch1 4_SYSTEM_BOX,7,7,{
end;
OnTouch: // note: hidden player trigger the event
npctalk "Intruder detected !!";
mapannounce 'map_tcamp$, "Intruder found, intruder found. Ruled out immediately.", bc_map, 0xFF0000;
npctalk "Detect intruders. Exclude them.";
mapannounce 'map_tcamp$, "Intruder detected, intruder detected. We rule 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
@@ -139,338 +147,316 @@ OnInstanceInit:
end;
}
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
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
//-------------------------------------------------------------------
// Walls
//-------------------------------------------------------------------
1@tcamp,138,216,3 script Lock Device#1-1 4_ROPEPILE,{
.@maram$ = instance_npcname("Maram#Lock Device1");
1@tcamp,138,216,3 script Lock#1-1 4_ROPEPILE,{
.@maram$ = instance_npcname("Maram#Lock1");
enablenpc .@maram$;
npctalk "Maram: Please wait a moment. I know how to open it.", .@maram$;
npctalk "Maram: Wait a minute. I know how to open it.", .@maram$;
progressbar_npc "3131FF",10;
npctalk "Maram: Well, we can pass now!", .@maram$;
disablenpc instance_npcname("Lock Device#1-1");
disablenpc instance_npcname("Lock Device#1-2");
npctalk "Maram: Now we can pass!", .@maram$;
disablenpc instance_npcname("Lock#1-1");
disablenpc instance_npcname("Lock#1-2");
disablenpc .@maram$;
setcell 'map_tcamp$,137,216,142,216,cell_walkable,1;
end;
}
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,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,136,145,3 script Lock Device#2-1 4_ROPEPILE,{
.@maram$ = instance_npcname("Maram#Lock Device2");
1@tcamp,136,145,3 script Lock#2-1 4_ROPEPILE,{
.@maram$ = instance_npcname("Maram#Lock2");
enablenpc .@maram$;
progressbar_npc "3131FF",10;
npctalk "It would be better to proceed with caution.", .@maram$;
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 instance_npcname("Lock#2-1");
disablenpc instance_npcname("Lock#2-2");
disablenpc instance_npcname("Lock#2-3");
disablenpc instance_npcname("Lock#2-4");
disablenpc .@maram$;
setcell 'map_tcamp$,135,145,144,145,cell_walkable,1;
end;
}
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,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,223,109,3 script Lock Device#3-1 4_ROPEPILE,{
.@maram$ = instance_npcname("Maram#Lock Device3");
1@tcamp,223,109,3 script Lock#3-1 4_ROPEPILE,{
.@maram$ = instance_npcname("Maram#Lock3");
enablenpc .@maram$;
npctalk "Maram: This building looks quite suspicious, right? There must be a surveillance system in here too.", .@maram$;
npctalk "Maram: This building looks pretty suspicious, right? There must be a surveillance system in it as well.", .@maram$;
progressbar_npc "3131FF",10;
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");
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");
disablenpc .@maram$;
setcell 'map_tcamp$,223,105,223,110,cell_walkable,1;
end;
}
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,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,80,99,3 script Lock Device#4-1 4_ROPEPILE,{
.@maram$ = instance_npcname("Maram#Lock Device4");
1@tcamp,80,99,3 script Lock#4-1 4_ROPEPILE,{
.@maram$ = instance_npcname("Maram#Lock4");
enablenpc .@maram$;
npctalk "Maram: Looks like we're in pretty deep. We should be able to safely find what we need.", .@maram$;
npctalk "Maram: I think you've gotten pretty deep. You should be able to find what you need safely.", .@maram$;
progressbar_npc "3131FF",10;
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");
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");
disablenpc .@maram$;
setcell 'map_tcamp$,80,94,80,100,cell_walkable,1;
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;
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");
end;
}
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
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
//-------------------------------------------------------------------
// Final
//-------------------------------------------------------------------
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.";
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.";
next;
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.";
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.";
close2;
getitem 1000409,1; // Ep18_Docu_File
cloakonnpcself();
cloakonnpcself( instance_npcname("Document Pile#Site1") );
end;
}
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?";
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?";
next;
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.";
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.";
close2;
getitem 1000409,1; // Ep18_Docu_File
cloakonnpcself();
cloakonnpcself( instance_npcname("Document Pile#Site2") );
end;
}
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?";
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?";
next;
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.";
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.";
close2;
getitem 1000409,1; // Ep18_Docu_File
cloakonnpcself();
cloakonnpcself( instance_npcname("Document Pile#Site3") );
end;
}
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?'";
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?'";
next;
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.";
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.";
close2;
getitem 1000409,1; // Ep18_Docu_File
cloakonnpcself();
cloakonnpcself( instance_npcname("Document Pile#Site4") );
end;
}
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.";
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.";
next;
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.";
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.";
close2;
getitem 1000409,1; // Ep18_Docu_File
cloakonnpcself();
cloakonnpcself( instance_npcname("Document Pile#Site5") );
end;
}
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;
1@tcamp,34,100,3 script Miriam#base1 4_EP18_MIRIAM,3,3,{
disable_items;
if (countitem(1000409) < 5) { // Ep18_Docu_File
cutin "ep18_miriam_02.png",2;
mes "[Miriam]";
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.";
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.";
next;
mes "[Miriam]";
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;
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;
}
if ('step == 2) {
cutin "ep18_miriam_02.png",2;
mes "[Miriam]";
mes "...Just a moment, I'm reading the document.";
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;
}
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:
if (countitem(1000409) < 5)
npctalk "Miriam: Oh, adventurer? Maram, you too!?";
npctalk "Miriam: Oh, adventurer? Maram you too!?";
end;
OnInstanceInit:
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(16578) == 1 && countitem(1000409) > 4" ); // Ep18_Docu_File
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(16578) == 1 && countitem(1000409) > 4" ); // Ep18_Docu_File
disablenpc instance_npcname("Miriam#base1");
end;
}
1@tcamp,32,102,3 script(DISABLED) Maram#Base5 4_EP18_MARAM,{
if ('step == 1) {
1@tcamp,32,102,3 script Maram#base5 4_EP18_MARAM,{
if (isbegin_quest(16579) == 0) {
cutin "ep18_maram_01.png",2;
mes "[Maram]";
mes "I didn't know Miriam would be here. Right, adventurer?";
mes "I didn't know Miriam was here, right, adventurer?";
close3;
}
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;
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;
}
// debug
close2;
warp "wolfvill",162,154;
end;
OnInstanceInit:
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(16579) == 1" );
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(16579) == 1" );
disablenpc instance_npcname("Maram#base5");
end;
}

View File

@@ -2,7 +2,7 @@
//= Instance Villa of Deception.
//===== Description: =========================================
//- [Walkthrough conversion]
//- Require to complete the Episode 18 main quest.
//- Require to complete the episode 18.1 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_main < 57)
if (ep18_1_main < 57)
end;
cloakoffnpcself( "Aira#con" );
end;
}
wolfvill,79,260,4 script(CLOAKED) Aira#con 4_M_BRZ_JACI,{
if (ep18_main < 57)
if (ep18_1_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

View File

@@ -29,6 +29,15 @@
//= 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,{

View File

@@ -8,8 +8,10 @@
//============================================================
//============================================================
// Episode 13.3
// Episode 13
//============================================================
brasilis mapflag nightenabled
bra_fild01 mapflag nightenabled
dicastes01 mapflag nightenabled
dicastes02 mapflag nightenabled
dic_fild01 mapflag nightenabled

View File

@@ -42,6 +42,12 @@ job3_war01 mapflag nobranch
job3_war02 mapflag nobranch
jupe_core2 mapflag nobranch
//============================================================
// Brasilis
//============================================================
brasilis mapflag nobranch
bra_in01 mapflag nobranch
//============================================================
// Episode 13.3
//============================================================

View File

@@ -18,7 +18,7 @@
paramk mapflag nomemo
//============================================================
// Episode 13.3
// Episode 13
//============================================================
job3_arch01 mapflag nomemo
job3_arch02 mapflag nomemo
@@ -37,6 +37,9 @@ 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

View File

@@ -16,6 +16,8 @@ paramk mapflag nopenalty
//============================================================
// Municipality (Cities/Towns/Villages)
//============================================================
brasilis mapflag nopenalty
bra_in01 mapflag nopenalty
dicastes01 mapflag nopenalty
dicastes02 mapflag nopenalty
dic_in01 mapflag nopenalty

View File

@@ -85,6 +85,8 @@ 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

View File

@@ -26,9 +26,10 @@ paramk mapflag noteleport
moc_para01 mapflag noteleport
//============================================================
// Episode 13.3
// Episode 13
//============================================================
s_atelier mapflag noteleport
bra_in01 mapflag noteleport
dic_in01 mapflag noteleport
job3_gen01 mapflag noteleport
job3_sha01 mapflag noteleport

View File

@@ -7,6 +7,7 @@
//= 1.1 Added Izlude duplicates. [Euphy]
//============================================================
brasilis mapflag reset
dewata mapflag reset
dicastes01 mapflag reset
dicastes02 mapflag reset

View File

@@ -247,6 +247,7 @@ 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

View File

@@ -1,50 +0,0 @@
//===== 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

View File

@@ -7,6 +7,7 @@
//= 1.1 Added Izlude duplicates. [Euphy]
//============================================================
brasilis mapflag town
dewata mapflag town
dicastes01 mapflag town
eclage mapflag town

View File

@@ -60,4 +60,4 @@ 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.yml
- Path: npc/re/merchants/barters/quests_18_1.yml

View File

@@ -91,19 +91,19 @@ Body:
Item: Ep18_Amethyst_Fragment
Amount: 350
- Index: 7
Item: Gray_W_Ring
Item: Gray_W_Robe
RequiredItems:
- Index: 0
Item: Ep18_Amethyst_Fragment
Amount: 350
- Index: 8
Item: Gray_W_Earing
Item: Gray_W_Ring
RequiredItems:
- Index: 0
Item: Ep18_Amethyst_Fragment
Amount: 350
- Index: 9
Item: Gray_W_Necklace
Item: Gray_W_Earing
RequiredItems:
- Index: 0
Item: Ep18_Amethyst_Fragment

54
npc/re/merchants/inn.txt Normal file
View File

@@ -0,0 +1,54 @@
//===== 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;
}
}
}

View File

@@ -1,29 +1,37 @@
//===== rAthena Script =======================================
//= Brasilis Dungeon Monster Spawn Script
//===== Changelog: ===========================================
//===== By: ==================================================
//= Kisuka
//===== Current Version: =====================================
//= 1.0
//===== Compatible With: =====================================
//= rAthena Project
//===== Description: =========================================
//= Official monster spawns in Brasilis Dungeon.
//===== Additional Comments: =================================
//= 1.0 Official spawns from Aegis [Kisuka]
//============================================================
//==================================================
// bra_dun01 - Behind the Waterfall
//==================================================
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_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_dun02 - Behind the Waterfall
//==================================================
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
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

View File

@@ -5,9 +5,9 @@
//===== Additional Comments: =================================
//= 1.0 First version.
// Venomous Chimera spawn timer is custom. [Capuche]
//= 1.1 Updated Venomous Chimera spawn timer. [Capuche]
//============================================================
slabw01 monster Human Chimera 3631,45
slabw01 monster Material Chimera 3632,45
slabw01 boss_monster Venomous Chimera 3633,1,3600000,600000,0
// unknown timer
slabw01 monster Venomous Chimera 3633,1,18000000,600000,0

View File

@@ -1,16 +1,22 @@
//===== rAthena Script =======================================
//= Brasilis Fields Monster Spawn Script
//===== Changelog: ===========================================
//===== By: ==================================================
//= Kisuka
//===== Current Version: =====================================
//= 1.0
//===== Compatible With: =====================================
//= rAthena Project
//===== Additional Comments: =================================
//= 1.0 Official spawns from Aegis [Kisuka]
//============================================================
//==================================================
// bra_fild01 - Brasilis Field
//==================================================
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
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

View File

@@ -4007,8 +4007,8 @@ OnInit:
}
// 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,{
// 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,{
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 Elly#ep172_ely01 4_EP17_TABLET,{
}
if (ep17_2_main < 32) {
cutin "ep172_beta.bmp", 2;
mes "[Elly]";
mes "[Ellie]";
mes "Hello, guest.";
mes "I'm responsible for the airship hangar's information.";
mes "Please call me Elly.";
mes "Please call me Ellie.";
close3;
}
if (ep17_2_main == 32) {
cutin "ep172_beta",2;
mes "[Elly]";
mes "[Ellie]";
mes "Hello, guest.";
mes "I'm responsible for the airship hangar's information.";
mes "Please call me Elly.";
mes "Please call me Ellie.";
next;
mes "[Elly]";
mes "[Ellie]";
mes "After the master had destroyed this place, I have been doing something else for a while, but...";
next;
mes "[Elly]";
mes "[Ellie]";
mes "Now I'm back at Alpha's request.";
mes "Please leave the hangar's matters to me, Elly.";
mes "Please leave the hangar's matters to me, Ellie.";
next;
mes "[Elly]";
mes "[Ellie]";
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 "[Elly]";
mes "[Ellie]";
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 "[Elly]";
mes "[Ellie]";
mes "The 'invaders' which the 'guests' calls the 'Illusions' has a 99.9% chance that they made modifications on the system.";
next;
mes "[Elly]";
mes "[Ellie]";
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 Elly#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 "[Elly]";
mes "[Ellie]";
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 "[Elly]";
mes "[Ellie]";
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 "[Elly]";
mes "[Ellie]";
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 Elly#ep172_ely01 4_EP17_TABLET,{
mes "Where? the enterprise?";
next;
cutin "ep172_beta",2;
mes "[Elly]";
mes "[Ellie]";
mes "According to the analysis, it's a one-way reception.";
mes "It appears to be collecting reports from the outside...";
next;
mes "[Elly]";
mes "[Ellie]";
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, Elly, I'll ask for one thing.";
mes "Then, Ellie, 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 Elly#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 "[Elly]";
mes "[Ellie]";
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 Elly#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 Elly!";
mes "Take good care of Ellie!";
next;
cutin "ep172_beta",2;
mes "[Elly]";
mes "[Ellie]";
mes "Do not worry about this place.";
mes "Me and Almond will take care of it.";
mes "You can be rest assured.";
@@ -4148,190 +4148,189 @@ ba_in01,26,266,3 script Smart Elly#ep172_ely01 4_EP17_TABLET,{
cloakonnpcself( "Rookie#ep172_rk03" );
end;
}
if (ep18_main == 0 && BaseLevel >= 170) {
if (ep18_1_main == 0 && BaseLevel >= 170) {
cutin "ep172_beta.bmp",2;
mes "[Elly]";
mes "No regular signals have been received yet.";
mes "We're also tracking the whereabouts of your collection #3.";
mes "[Ellie]";
mes "The periodic signal has not yet been received.";
mes "The whereabouts of your master's collection#3 are also being tracked.";
next;
mes "[Elly]";
mes "No worries.";
mes "Time is on our side.";
mes "[Ellie]";
mes "Don't worry.";
mes "Time is on our side";
next;
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!";
mes "[Ellie]";
mes "I and Alpha will analyze the information properly, so if you clean up the abandoned remnants... Ah!";
next;
mes "[Elly]";
mes "Just a moment, please stay here.";
mes "It'll be over soon.";
mes "Time is on our side, right?";
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?";
next;
mes "[Elly]";
// note: progressbar_npc must be after "next" otherwise the client may crash
progressbar_npc "FFFF00",4;
mes "[Ellie]";
mes "Wait a minute...";
mes "...";
mes "...";
// note: progressbar_npc must be after "next" otherwise the client may crash
// progressbar_npc "FFFF00",4;
next;
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.";
mes "[Ellie]";
mes "As soon as the password is decrypted, it will be fast.";
mes "The thing that took the longest is an instant.";
next;
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.";
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.";
next;
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?";
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?";
next;
select( "What?" );
mes "[" + strcharinfo(0) + "]";
mes "What should I do?";
mes "What are you doing?";
next;
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...";
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...";
cloakoffnpcself( "Rookie#ep181_rk01" );
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;
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;
next;
cutin "ep162_est01.bmp",1;
mes "[Est]";
mes "Okay, so Rachel...";
mes "[EST]";
mes "Okay then 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 "[Elly]";
mes "Are we having a difference of opinion?";
mes "[Ellie]";
mes "Is this a conflict of opinion?";
next;
cutin "16loo_03.bmp",0;
mes "[Rookie]";
mes "Not really...";
mes "I think it would be a little awkward if we all went.";
mes "It's not like that...";
mes "I think it will be a bit difficult if we all go.";
next;
cutin "ep162_est01.bmp",1;
mes "[Est]";
mes "Ah, I see.";
mes "Yes. If the Rebellion moves, it could become a diplomatic issue.";
mes "[EST]";
mes "Ah... I see.";
mes "Yes. If 'Rebellion' moves, it could become a diplomatic matter.";
next;
cutin "16loo_03.bmp",0;
mes "[Rookie]";
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.";
mes "Yes. Especially if it's Rachel.";
mes "The problem between the mansion and the business has not yet been fully resolved...";
next;
cutin "ep172_beta.bmp",2;
mes "[Elly]";
mes "I see.";
mes "[Ellie]";
mes "Okay.";
next;
mes "[Elly]";
mes "If so, then...";
mes "[Ellie]";
mes "Then...";
next;
select( "Why are they looking at me?" );
select( "Why are you looking at me?" );
cutin "",255;
mes "[" + strcharinfo(0) + "]";
mes "What do I do?";
mes "what are you doing?";
next;
cutin "ep172_beta.bmp",2;
mes "[Elly]";
mes "[Ellie]";
mes "Let's go, Rachel.";
npctalk "Rookie: So it's a place name, huh?", "Rookie#ep181_rk01", bc_self;
npctalk "Est: A place name.", "Est#ep181_est01", bc_self;
npctalk "Rookie: name.", "Rookie#ep181_rk01", bc_self;
npctalk "Est: Name.", "EST#ep181_est01", bc_self;
next;
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.";
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.";
next;
cutin "ep162_est01.bmp",1;
mes "[Est]";
mes "That sounds like you're saying you're definitely going to go in person.";
mes "[EST]";
mes "It sounds like you want to go there yourself.";
next;
cutin "ep172_beta.bmp",2;
mes "[Elly]";
mes "Yes, it is.";
mes "Please wait a moment.";
mes "[Ellie]";
mes "Yes.";
mes "Please wait a minute.";
next;
progressbar_npc "CCFF",7;
mes "[Elly]";
progressbar_npc "00CCFF",7;
mes "[Ellie]";
mes "...";
next;
mes "[Elly]";
mes "You're authorized.";
npctalk "The meeting has ended.", "Smart Elly#ep18ely01", bc_self;
mes "[Ellie]";
mes "You have permission.";
npctalk "Meeting ended.", "", bc_self;
next;
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.";
mes "[Ellie]";
mes "The purpose is support, not hindrance.";
mes "I will follow you without burden.";
mes "I'll give you this.";
next;
cutin "",255;
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...";
mes "What Ellie gave her was a doll with a slightly droopy feel that resembled Ellie.";
mes "It may not necessarily be Ellie.";
next;
cutin "ep172_beta.bmp",2;
mes "[Elly]";
mes "We also have equipment capable of long-distance data transmission and reception.";
mes "Because that's who we are.";
mes "[Ellie]";
mes "We have equipment that can transmit and receive data over long distances.";
mes "Because we are such beings.";
next;
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;
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;
next;
cutin "16loo_02.bmp",0;
mes "[Rookie]";
mes "Uh... Mini Elly?";
mes "Uh... Mini Ellie?";
next;
cutin "ep172_beta.bmp",2;
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.";
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.";
next;
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.";
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.";
next;
cutin "16loo_01.bmp",0;
mes "[Rookie]";
mes "Then call us if you need our support.";
mes "I will support you without reservation, just like Elly, except for manpower.";
mes "Then call us if you need assistance.";
mes "Like Ellie, we will provide generous support except for the manpower.";
next;
cutin "ep172_beta.bmp",2;
mes "[Elly]";
mes "Yes, I will do that.";
mes "[Ellie]";
mes "It will be so";
mes "Please take care of yourself.";
npctalk "It's strange to be greeting each other like this when we're going together.", "Smart Elly#ep18ely01", bc_self;
npctalk "I'm going with you, but it's strange to greet you like this.", "", bc_self;
next;
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;
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;
setquest 8681;
getitem 400127,1; // Ep18_Mini_Elly
close3;
}
if (ep18_main == 1) {
mes "[Elly]";
mes "Safe travels to Rachel.";
if (ep18_1_main == 1) {
mes "[Ellie]";
mes "Please be safe.";
close;
}
cutin "ep172_beta",2;
mes "[Elly]";
mes "[Ellie]";
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 "[Elly]";
mes "[Ellie]";
mes "Don't worry.";
mes "Time is on our side.";
next;
mes "[Elly]";
mes "[Ellie]";
mes "Me and Alpha will analyze the information properly, so I'd like you to clean up the intruders remnant.";
close3;
@@ -4340,7 +4339,7 @@ OnInit:
// questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(18018) == 1" );
// check for episode 17.2 completion
questinfo( QTYPE_QUEST2, QMARK_YELLOW, "isbegin_quest(8681) == 0 && isbegin_quest(18018) == 2 && BaseLevel >= 170" );
questinfo( QTYPE_QUEST, QMARK_YELLOW, "isbegin_quest(8681) == 0 && isbegin_quest(18018) == 2 && BaseLevel >= 170" );
end;
}
@@ -9390,8 +9389,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 "Elly took your receiving chip while we're repairing you.";
mes "Doesn't that mean Elly will take the orders for you?";
mes "Ellie took your receiving chip while we're repairing you.";
mes "Doesn't that mean Ellie will take the orders for you?";
npctalk "No! I'll receive my next orders soon!", "", bc_self;
next;
mes "[Almond]";

File diff suppressed because it is too large Load Diff

12435
npc/re/quests/quests_18_1.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,12 @@
//===== rAthena Script =======================================
//= Brasilis Quests
//===== Description: =========================================
//===== By ===================================================
//= L0ne_W0lf
//===== Version ==============================================
//= 1.3
//===== Compatible With ======================================
//= rAthena Project
//===== Description ==========================================
//= [Official Conversion]
//= Lost Puppies (Repeatable, 24 hours.)
//= Suspicious Beach (Repeatable, 24 hours. iRO/cRO version.)
@@ -8,14 +14,13 @@
//= Brasilis Water Lily Quest
//= Brasilis Dungeon Access Quest
//= Iara (Buff reward. Repeatable, 24 hours.)
//===== Changelog: ===========================================
//= 1.0 First version. [L0ne_W0lf]
//= 1.1 Hydra Ball (12408). [og2]
//===== Comments =============================================
//= 1.0 First version.
//= 1.1 Hydra Ball (12408)
//= 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
@@ -54,12 +59,10 @@ brasilis,297,307,5 script Angelo#br 1_M_04,{
erasequest 9031;
setquest 9032;
specialeffect2 EF_ASSUMPTIO;
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
}
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]";
@@ -226,15 +229,11 @@ brasilis,192,133,6 script Lucia#brasilis 4_F_BRZ_WOMAN,{
//recall_completequest 9029;
if (.@nQState2 > -1) erasequest 9029;
setquest 9029;
if (checkre(0))
consumeitem 607; //Yggdrasilberry
consumeitem 607; //Yggdrasilberry
consumeitem 12070; //Luk_Dish05
consumeitem 12055; //Vit_Dish05
consumeitem 12065; //Dex_Dish05
if (checkre(0))
getitem 11502,3; //Light_Blue_Pot
else
getitem 505,5; //Blue_Potion
getitem 11502,3; //Light_Blue_Pot
close;
}
else {
@@ -411,12 +410,10 @@ brasilis,187,162,5 script Candy Maker 4_M_BRZ_MAN1,{
brazil_gua = 11;
completequest 2200;
getitem 12414,1; //Guarana_Candy
if (checkre(0)) {
if (VIP_SCRIPT && vip_status(VIP_STATUS_ACTIVE))
getexp 105000,15000;
else
getexp 70000,10000;
}
if (VIP_SCRIPT && vip_status(VIP_STATUS_ACTIVE))
getexp 105000,15000;
else
getexp 70000,10000;
close;
}
else if (brazil_gua == 11) {
@@ -1033,9 +1030,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, checkre(0)?15000:0;
getexp 75000,15000;
else
getexp 50000, checkre(0)?10000:0;
getexp 50000,10000;
close;
}
else {
@@ -2858,13 +2855,9 @@ 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
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;
percentheal 100,100;
sc_start SC_INCFLEE,3600000,20;
sc_start SC_INCCRI,3600000,10;
consumeitem 12043; //Str_Dish03
consumeitem 12063; //Dex_Dish03
consumeitem 12058; //Agi_Dish03

View File

@@ -1225,9 +1225,9 @@ OnInit:
rockrdg1,160,306,3 duplicate(dummy_cloaked_npc) Johnny James#revt04 4_M_JOHNNYJAMES
rockrdg1,168,306,3 duplicate(dummy_cloaked_npc) Albert Ford#revt08 4_M_ALBERTFORD
rockrdg1,156,302,7 duplicate(dummy_cloaked_npc) Ivoka Skudi#revt02 4_M_EVOKASCUDI
rockrdg1,156,306,5 duplicate(dummy_cloaked_npc) Cactus Gunslinger#revt05 4_M_EVOKASCUDI
rockrdg1,161,302,1 duplicate(dummy_cloaked_npc) Cactus Gunslinger#revt06 4_M_EVOKASCUDI
rockrdg1,164,306,3 duplicate(dummy_cloaked_npc) Cactus Gunslinger#revt07 4_M_EVOKASCUDI
rockrdg1,156,306,5 duplicate(dummy_cloaked_npc) Cactus Gunslinger#revt01 4_M_EVOKASCUDI
rockrdg1,161,302,1 duplicate(dummy_cloaked_npc) Cactus Gunslinger#revt02 4_M_EVOKASCUDI
rockrdg1,164,306,3 duplicate(dummy_cloaked_npc) Cactus Gunslinger#revt03 4_M_EVOKASCUDI
rockrdg1,156,312,3 script Unmoving Freight Train# 4_ENERGY_RED,{
if (rock_main_quest == 5) {

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