forked from metin2/server
Compare commits
70 Commits
Author | SHA1 | Date | |
---|---|---|---|
175816c81d | |||
b15eb7f3fe | |||
3a8d9e38e8 | |||
4074c3b96a | |||
854fef68e8 | |||
cf66bb3310 | |||
254f6f6664 | |||
0072bc5e14 | |||
62f3635b86 | |||
2c37b2009d | |||
e0701ed5bd | |||
21381a4e3a | |||
ba44269071 | |||
f5ccb17736 | |||
bb52a57ffc | |||
8360d6939f | |||
1e362d8507 | |||
0a907f41d2 | |||
dbcabd7fa9 | |||
fcc2a9e4a0 | |||
12b6abf373 | |||
e1daa48366 | |||
83707434ee | |||
042414a499 | |||
68c7c4bc4f | |||
eafbee616f | |||
026cb861a8 | |||
1ba21fb1f9 | |||
8fede9a1df | |||
dfb3d08998 | |||
326c134f9e | |||
9b7536ee9a | |||
9056f6c6c6 | |||
8685b02fdc | |||
341bef9aba | |||
8a1acefeeb | |||
eacc808366 | |||
4a1460f36e | |||
aae9b169df | |||
dd74eafc24 | |||
d471d99a24 | |||
350fb0d424 | |||
869720f9e6 | |||
4fc612552a | |||
248205ae01 | |||
82317e6c4d | |||
847ab2ef89 | |||
ebc479b7df | |||
1ee687f269 | |||
d85ef28eac | |||
01cc27a7df | |||
72b495c03c | |||
0c86f802ca | |||
05a1406c7c | |||
00c5634c09 | |||
42079d56b7 | |||
0101618d89 | |||
8579828ca6 | |||
3f1ce57fa1 | |||
e4cbdcfc4d | |||
bba0294107 | |||
0aab8162fb | |||
9fba85f947 | |||
a7f4e4e54d | |||
7e543bd05f | |||
405b05fe59 | |||
feac4c0598 | |||
2f829ae2dc | |||
2c8cb0c857 | |||
fc3f2f232c |
@ -5,5 +5,14 @@ cmake-build-release/
|
||||
# Dockerfile (in order to allow changes without rebuilding)
|
||||
Dockerfile
|
||||
|
||||
# Git files
|
||||
.gitignore
|
||||
.gitkeep
|
||||
|
||||
# Compiled quests
|
||||
gamefiles/locale/english/quest/object/
|
||||
gamefiles/locale/english/quest/pre_qc/
|
||||
gamefiles/locale/english/quest/qc
|
||||
|
||||
# Test folder
|
||||
test/
|
6
.idea/encodings.xml
generated
6
.idea/encodings.xml
generated
@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Encoding">
|
||||
<file url="PROJECT" charset="EUC-KR" />
|
||||
</component>
|
||||
</project>
|
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"cmake.configureOnOpen": true
|
||||
}
|
@ -1,8 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.12)
|
||||
|
||||
# Build mode debug/release?
|
||||
set(CMAKE_BUILD_TYPE Debug)
|
||||
|
||||
# Set C++ standard to C++17
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
|
||||
@ -23,15 +20,14 @@ set(METIN2_COMPILER "${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}")
|
||||
set(METIN2_CPU_TARGET ${CMAKE_SYSTEM_PROCESSOR})
|
||||
|
||||
# Git revision
|
||||
include(FindGit)
|
||||
find_package(Git)
|
||||
find_package(GitInfo)
|
||||
|
||||
if(GIT_FOUND)
|
||||
GIT_WC_INFO(${PROJECT_SOURCE_DIR} Metin2)
|
||||
set(METIN2_REVISION ${Metin2_WC_REVISION_NAME})
|
||||
set(METIN2_REVISION ${Metin2_WC_REVISION_HASH})
|
||||
set(METIN2_LAST_CHANGED_DATE ${Metin2_WC_LAST_CHANGED_DATE})
|
||||
|
||||
if (${Metin2_WC_LATEST_TAG} NOT STREQUAL "")
|
||||
if (Metin2_WC_LATEST_TAG)
|
||||
set(METIN2_LATEST_TAG ${Metin2_WC_LATEST_TAG})
|
||||
else()
|
||||
set(METIN2_LATEST_TAG "unknown")
|
||||
|
15
Dockerfile
15
Dockerfile
@ -3,16 +3,20 @@ WORKDIR /app
|
||||
|
||||
# Update the system and install various dependencies
|
||||
RUN apt-get update && \
|
||||
apt-get install -y git cmake build-essential tar curl zip unzip pkg-config autoconf python3 \
|
||||
apt-get install -y git cmake ninja-build build-essential tar curl zip unzip pkg-config autoconf python3 \
|
||||
libdevil-dev libncurses5-dev libbsd-dev
|
||||
|
||||
# Arm specific
|
||||
ENV VCPKG_FORCE_SYSTEM_BINARIES=1
|
||||
|
||||
# Install vcpkg and the required libraries
|
||||
RUN git clone https://github.com/Microsoft/vcpkg.git
|
||||
RUN bash ./vcpkg/bootstrap-vcpkg.sh
|
||||
RUN ./vcpkg/vcpkg install boost-system cryptopp effolkronium-random libmysql libevent lzo
|
||||
RUN ./vcpkg/vcpkg install boost-system cryptopp effolkronium-random libmysql libevent lzo fmt spdlog
|
||||
|
||||
COPY . .
|
||||
|
||||
# Build the binaries
|
||||
RUN mkdir build/
|
||||
RUN cd build && cmake -DCMAKE_TOOLCHAIN_FILE=vcpkg/scripts/buildsystems/vcpkg.cmake ..
|
||||
RUN cd build && make -j $(nproc)
|
||||
@ -20,16 +24,19 @@ RUN cd build && make -j $(nproc)
|
||||
FROM ubuntu:latest as app
|
||||
WORKDIR /app
|
||||
|
||||
RUN apt-get update && apt-get install -y libdevil-dev libbsd-dev && apt-get clean
|
||||
RUN apt-get update && apt-get install -y python2 libdevil-dev libbsd-dev && apt-get clean
|
||||
|
||||
# Copy the binaries from the build stage
|
||||
COPY --from=build /app/build/src/db/db /bin/db
|
||||
COPY --from=build /app/build/src/game/game /bin/game
|
||||
COPY --from=build /app/build/src/quest/quest /bin/quest
|
||||
COPY --from=build /app/build/src/quest/qc /bin/qc
|
||||
|
||||
# Copy the game files
|
||||
COPY ./gamefiles/ .
|
||||
|
||||
# Compile the quests
|
||||
RUN cd /app/locale/english/quest && python2 make.py
|
||||
|
||||
# Symlink the configuration files
|
||||
RUN ln -s "./conf/CMD" "CMD"
|
||||
RUN ln -s ./conf/item_names_en.txt item_names.txt
|
||||
|
@ -39,7 +39,7 @@ Install `vcpkg` according to the [lastest instructions](https://vcpkg.io/en/gett
|
||||
|
||||
Build and install the required libraries:
|
||||
```shell
|
||||
vcpkg install boost-system cryptopp effolkronium-random libmysql libevent lzo
|
||||
vcpkg install boost-system cryptopp effolkronium-random libmysql libevent lzo fmt spdlog
|
||||
```
|
||||
|
||||
Then, it's time to build your binaries. Your commands should look along the lines of:
|
||||
@ -80,6 +80,7 @@ goodies you wish. Also, a lot of time.
|
||||
- Switched to the [effolkronium/random PRNG](https://github.com/effolkronium/random) instead of the standard C functions.
|
||||
- Refactored macros to modern C++ functions.
|
||||
- Network settings are manually configurable through the `PUBLIC_IP`, `PUBLIC_BIND_IP`, `INTERNAL_IP`, `INTERNAL_BIND_IP` settings in the `CONFIG` file. (Might need further work)
|
||||
- Refactored logging to use [spdlog](https://github.com/gabime/spdlog) for more consistent function calls.
|
||||
|
||||
## 4. Bugfixes
|
||||
**WARNING: This project is based on the "kraizy" leak. That was over 10 years ago.
|
||||
@ -88,6 +89,7 @@ This is a very serious security risk and one of the reasons this project is stil
|
||||
|
||||
### Gameplay
|
||||
- Fixed invisibility bug on login/respawn/teleport etc.
|
||||
- Fixed player level not updating [(thread)](https://metin2.dev/topic/30612-official-level-update-fix-reversed/)
|
||||
|
||||
### Exploits
|
||||
- See the warning above :(
|
||||
@ -102,7 +104,6 @@ This is a very serious security risk and one of the reasons this project is stil
|
||||
- Migrate `conf.txt` and `CONFIG` to a modern dotenv-like format, which would enable pretty nice Docker images.
|
||||
- Add a health check to the Docker image.
|
||||
- Use the [fmt](https://fmt.dev/latest/index.html) library for safe and modern string formatting.
|
||||
- Use a modern logging library to clean up the current mess.
|
||||
- Handle kernel signals (SIGTERM, SIGHUP etc.) for gracefully shutting down the game server.
|
||||
- Improve memory safety.
|
||||
- Use fixed width integer types instead of Microsoft-style typedefs.
|
||||
|
@ -1,176 +0,0 @@
|
||||
################################################################################
|
||||
#
|
||||
# Program: 3D Slicer
|
||||
#
|
||||
# Copyright (c) Kitware Inc.
|
||||
#
|
||||
# See COPYRIGHT.txt
|
||||
# or http://www.slicer.org/copyright/copyright.txt for details.
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
# This file was originally developed by Jean-Christophe Fillion-Robin, Kitware Inc.
|
||||
# and was partially funded by NIH grant 3P41RR013218-12S1
|
||||
#
|
||||
################################################################################
|
||||
|
||||
#
|
||||
# The module defines the following variables:
|
||||
# GIT_EXECUTABLE - path to git command line client
|
||||
# GIT_FOUND - true if the command line client was found
|
||||
# GIT_VERSION_STRING - the version of git found (since CMake 2.8.8)
|
||||
#
|
||||
# If the command line client executable is found the macro
|
||||
# GIT_WC_INFO(<dir> <var-prefix>)
|
||||
# is defined to extract information of a git working copy at
|
||||
# a given location.
|
||||
#
|
||||
# The macro defines the following variables:
|
||||
# <var-prefix>_WC_REVISION_HASH - Current SHA1 hash
|
||||
# <var-prefix>_WC_REVISION - Current SHA1 hash
|
||||
# <var-prefix>_WC_REVISION_NAME - Name associated with <var-prefix>_WC_REVISION_HASH
|
||||
# <var-prefix>_WC_URL - output of command `git config --get remote.origin.url'
|
||||
# <var-prefix>_WC_ROOT - Same value as working copy URL
|
||||
# <var-prefix>_WC_LAST_CHANGED_DATE - date of last commit
|
||||
# <var-prefix>_WC_GITSVN - Set to false
|
||||
#
|
||||
# ... and also the following ones if it's a git-svn repository:
|
||||
# <var-prefix>_WC_GITSVN - Set to True if it is a
|
||||
# <var-prefix>_WC_INFO - output of command `git svn info'
|
||||
# <var-prefix>_WC_URL - url of the associated SVN repository
|
||||
# <var-prefix>_WC_ROOT - root url of the associated SVN repository
|
||||
# <var-prefix>_WC_REVISION - current SVN revision number
|
||||
# <var-prefix>_WC_LAST_CHANGED_AUTHOR - author of last commit
|
||||
# <var-prefix>_WC_LAST_CHANGED_DATE - date of last commit
|
||||
# <var-prefix>_WC_LAST_CHANGED_REV - revision of last commit
|
||||
# <var-prefix>_WC_LAST_CHANGED_LOG - last log of base revision
|
||||
#
|
||||
# Example usage:
|
||||
# find_package(Git)
|
||||
# if(GIT_FOUND)
|
||||
# GIT_WC_INFO(${PROJECT_SOURCE_DIR} Project)
|
||||
# message("Current revision is ${Project_WC_REVISION_HASH}")
|
||||
# message("git found: ${GIT_EXECUTABLE}")
|
||||
# endif()
|
||||
#
|
||||
|
||||
# Look for 'git' or 'eg' (easy git)
|
||||
#
|
||||
set(git_names git eg)
|
||||
|
||||
# Prefer .cmd variants on Windows unless running in a Makefile
|
||||
# in the MSYS shell.
|
||||
#
|
||||
if(WIN32)
|
||||
if(NOT CMAKE_GENERATOR MATCHES "MSYS")
|
||||
# Note: Due to a bug in 'git.cmd' preventing it from returning the exit code of 'git',
|
||||
# we excluded it from the list of executables to search.
|
||||
# See http://code.google.com/p/msysgit/issues/detail?id=428
|
||||
# TODO Check if 'git' exists, get the associated version, if the corresponding version
|
||||
# is known to have a working version of 'git.cmd', use it.
|
||||
set(git_names git eg.cmd eg)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
find_program(GIT_EXECUTABLE ${git_names}
|
||||
PATHS
|
||||
"C:/Program Files/Git/bin"
|
||||
"C:/Program Files (x86)/Git/bin"
|
||||
DOC "git command line client")
|
||||
# XXX Comment to workaround https://gitlab.kitware.com/cmake/cmake/issues/15448
|
||||
# mark_as_advanced(GIT_EXECUTABLE)
|
||||
|
||||
if(GIT_EXECUTABLE)
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} --version
|
||||
OUTPUT_VARIABLE git_version
|
||||
ERROR_QUIET
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if (git_version MATCHES "^git version [0-9]")
|
||||
string(REPLACE "git version " "" GIT_VERSION_STRING "${git_version}")
|
||||
endif()
|
||||
unset(git_version)
|
||||
|
||||
macro(GIT_WC_INFO dir prefix)
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --verify -q --short=7 HEAD
|
||||
WORKING_DIRECTORY ${dir}
|
||||
ERROR_VARIABLE GIT_error
|
||||
OUTPUT_VARIABLE ${prefix}_WC_REVISION_HASH
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
set(${prefix}_WC_REVISION ${${prefix}_WC_REVISION_HASH})
|
||||
if(NOT ${GIT_error} EQUAL 0)
|
||||
message(SEND_ERROR "Command \"${GIT_EXECUTBALE} rev-parse --verify -q --short=7 HEAD\" in directory ${dir} failed with output:\n${GIT_error}")
|
||||
else(NOT ${GIT_error} EQUAL 0)
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} name-rev ${${prefix}_WC_REVISION_HASH}
|
||||
WORKING_DIRECTORY ${dir}
|
||||
OUTPUT_VARIABLE ${prefix}_WC_REVISION_NAME
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
endif(NOT ${GIT_error} EQUAL 0)
|
||||
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} config --get remote.origin.url
|
||||
WORKING_DIRECTORY ${dir}
|
||||
OUTPUT_VARIABLE ${prefix}_WC_URL
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} show -s --format="%ci" ${${prefix}_WC_REVISION_HASH}
|
||||
WORKING_DIRECTORY ${dir}
|
||||
OUTPUT_VARIABLE ${prefix}_show_output
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
string(REGEX REPLACE "^([0-9][0-9][0-9][0-9]\\-[0-9][0-9]\\-[0-9][0-9]).*"
|
||||
"\\1" ${prefix}_WC_LAST_CHANGED_DATE "${${prefix}_show_output}")
|
||||
|
||||
set(${prefix}_WC_GITSVN False)
|
||||
|
||||
# Check if this git is likely to be a git-svn repository
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} config --get-regexp "^svn-remote"
|
||||
WORKING_DIRECTORY ${dir}
|
||||
OUTPUT_VARIABLE git_config_output
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
if(NOT "${git_config_output}" STREQUAL "")
|
||||
# In case git-svn is used, attempt to extract svn info
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} svn info
|
||||
WORKING_DIRECTORY ${dir}
|
||||
TIMEOUT 3
|
||||
ERROR_VARIABLE git_svn_info_error
|
||||
OUTPUT_VARIABLE ${prefix}_WC_INFO
|
||||
RESULT_VARIABLE git_svn_info_result
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
|
||||
if(${git_svn_info_result} EQUAL 0)
|
||||
set(${prefix}_WC_GITSVN True)
|
||||
string(REGEX REPLACE "^(.*\n)?URL: ([^\n]+).*"
|
||||
"\\2" ${prefix}_WC_URL "${${prefix}_WC_INFO}")
|
||||
string(REGEX REPLACE "^(.*\n)?Revision: ([^\n]+).*"
|
||||
"\\2" ${prefix}_WC_REVISION "${${prefix}_WC_INFO}")
|
||||
string(REGEX REPLACE "^(.*\n)?Repository Root: ([^\n]+).*"
|
||||
"\\2" ${prefix}_WC_ROOT "${${prefix}_WC_INFO}")
|
||||
string(REGEX REPLACE "^(.*\n)?Last Changed Author: ([^\n]+).*"
|
||||
"\\2" ${prefix}_WC_LAST_CHANGED_AUTHOR "${${prefix}_WC_INFO}")
|
||||
string(REGEX REPLACE "^(.*\n)?Last Changed Rev: ([^\n]+).*"
|
||||
"\\2" ${prefix}_WC_LAST_CHANGED_REV "${${prefix}_WC_INFO}")
|
||||
string(REGEX REPLACE "^(.*\n)?Last Changed Date: ([^\n]+).*"
|
||||
"\\2" ${prefix}_WC_LAST_CHANGED_DATE "${${prefix}_WC_INFO}")
|
||||
endif(${git_svn_info_result} EQUAL 0)
|
||||
endif(NOT "${git_config_output}" STREQUAL "")
|
||||
|
||||
# If there is no 'remote.origin', default to "NA" value and print a warning message.
|
||||
if(NOT ${prefix}_WC_URL)
|
||||
message(WARNING "No remote origin set for git repository: ${dir}" )
|
||||
set( ${prefix}_WC_URL "NA" )
|
||||
else()
|
||||
set(${prefix}_WC_ROOT ${${prefix}_WC_URL})
|
||||
endif()
|
||||
|
||||
endmacro(GIT_WC_INFO)
|
||||
endif(GIT_EXECUTABLE)
|
||||
|
||||
# Handle the QUIETLY and REQUIRED arguments and set GIT_FOUND to TRUE if
|
||||
# all listed variables are TRUE
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(Git DEFAULT_MSG GIT_EXECUTABLE)
|
244
cmake/Modules/FindGitInfo.cmake
Normal file
244
cmake/Modules/FindGitInfo.cmake
Normal file
@ -0,0 +1,244 @@
|
||||
################################################################################
|
||||
#
|
||||
# Program: FindGitInfo from Slicer
|
||||
#
|
||||
# Copyright (c) Kitware Inc.
|
||||
#
|
||||
# See COPYRIGHT.txt
|
||||
# or http://www.slicer.org/copyright/copyright.txt for details.
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
# This file was originally developed by Jean-Christophe Fillion-Robin,
|
||||
# Kitware Inc. and was partially funded by NIH grant 3P41RR013218-12S1
|
||||
#
|
||||
################################################################################
|
||||
|
||||
# If the command line client executable is found the macro
|
||||
# GIT_WC_INFO(<dir> <var-prefix>)
|
||||
# is defined to extract information of a git working copy at
|
||||
# a given location.
|
||||
#
|
||||
# The macro defines the following variables:
|
||||
# <var-prefix>_WC_REVISION_HASH - Current SHA1 hash
|
||||
# <var-prefix>_WC_REVISION - Current SHA1 hash
|
||||
# <var-prefix>_WC_REVISION_NAME - Name associated with <var-prefix>_WC_REVISION_HASH
|
||||
# <var-prefix>_WC_URL - output of command `git config --get remote.origin.url'
|
||||
# <var-prefix>_WC_ROOT - Same value as working copy URL
|
||||
# <var-prefix>_WC_LAST_CHANGED_DATE - date of last commit
|
||||
# <var-prefix>_WC_GITSVN - Set to false
|
||||
# <var-prefix>_WC_LATEST_TAG - Latest tag found in history
|
||||
# <var-prefix>_WC_LATEST_TAG_LONG - <last tag>-<commits since then>-g<actual commit hash>
|
||||
#
|
||||
# ... and also the following ones if it's a git-svn repository:
|
||||
# <var-prefix>_WC_GITSVN - Set to True if it is a
|
||||
# <var-prefix>_WC_INFO - output of command `git svn info'
|
||||
# <var-prefix>_WC_URL - url of the associated SVN repository
|
||||
# <var-prefix>_WC_ROOT - root url of the associated SVN repository
|
||||
# <var-prefix>_WC_REVISION - current SVN revision number
|
||||
# <var-prefix>_WC_LAST_CHANGED_AUTHOR - author of last commit
|
||||
# <var-prefix>_WC_LAST_CHANGED_DATE - date of last commit
|
||||
# <var-prefix>_WC_LAST_CHANGED_REV - revision of last commit
|
||||
# <var-prefix>_WC_LAST_CHANGED_LOG - last log of base revision
|
||||
#
|
||||
# Example usage:
|
||||
# find_package(GitInfo)
|
||||
# if(GIT_FOUND)
|
||||
# GIT_WC_INFO(${PROJECT_SOURCE_DIR} Project)
|
||||
# message("Current revision is ${Project_WC_REVISION_HASH}")
|
||||
# message("git found: ${GIT_EXECUTABLE}")
|
||||
# endif()
|
||||
#
|
||||
|
||||
# Look for git. Respect the quiet and required flags passed to this module.
|
||||
set(FIND_QUIETLY_FLAG "")
|
||||
if (DEFINED GitInfo_FIND_QUIETLY)
|
||||
set(FIND_QUIETLY_FLAG "QUIET")
|
||||
endif ()
|
||||
|
||||
set(FIND_REQUIRED_FLAG "")
|
||||
if (DEFINED GitInfo_FIND_REQUIRED)
|
||||
set(FIND_REQUIRED_FLAG "REQUIRED")
|
||||
endif ()
|
||||
|
||||
find_package(Git ${FIND_QUIETLY_FLAG} ${FIND_REQUIRED_FLAG})
|
||||
|
||||
|
||||
if(GIT_FOUND)
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} --version
|
||||
OUTPUT_VARIABLE git_version
|
||||
ERROR_QUIET
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if (git_version MATCHES "^git version [0-9]")
|
||||
string(REPLACE "git version " "" GIT_VERSION_STRING "${git_version}")
|
||||
endif()
|
||||
unset(git_version)
|
||||
|
||||
macro(GIT_WC_INFO dir prefix)
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --verify -q --short=7 HEAD
|
||||
WORKING_DIRECTORY ${dir}
|
||||
ERROR_VARIABLE GIT_error
|
||||
OUTPUT_VARIABLE ${prefix}_WC_REVISION_HASH
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
set(${prefix}_WC_REVISION ${${prefix}_WC_REVISION_HASH})
|
||||
if(NOT ${GIT_error} EQUAL 0)
|
||||
message(SEND_ERROR "Command \"${GIT_EXECUTBALE} rev-parse --verify -q --short=7 HEAD\" in directory ${dir} failed with output:\n${GIT_error}")
|
||||
else(NOT ${GIT_error} EQUAL 0)
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} name-rev ${${prefix}_WC_REVISION_HASH}
|
||||
WORKING_DIRECTORY ${dir}
|
||||
OUTPUT_VARIABLE ${prefix}_WC_REVISION_NAME
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
endif(NOT ${GIT_error} EQUAL 0)
|
||||
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} config --get remote.origin.url
|
||||
WORKING_DIRECTORY ${dir}
|
||||
OUTPUT_VARIABLE ${prefix}_WC_URL
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} show -s --format="%ci" ${${prefix}_WC_REVISION_HASH}
|
||||
WORKING_DIRECTORY ${dir}
|
||||
OUTPUT_VARIABLE ${prefix}_show_output
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
string(REGEX REPLACE "^([0-9][0-9][0-9][0-9]\\-[0-9][0-9]\\-[0-9][0-9]).*"
|
||||
"\\1" ${prefix}_WC_LAST_CHANGED_DATE "${${prefix}_show_output}")
|
||||
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=0
|
||||
WORKING_DIRECTORY ${dir}
|
||||
OUTPUT_VARIABLE ${prefix}_WC_LATEST_TAG
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_QUIET)
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags
|
||||
WORKING_DIRECTORY ${dir}
|
||||
OUTPUT_VARIABLE ${prefix}_WC_LATEST_TAG_LONG
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_QUIET)
|
||||
|
||||
set(${prefix}_WC_GITSVN False)
|
||||
|
||||
# Check if this git is likely to be a git-svn repository
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} config --get-regexp "^svn-remote"
|
||||
WORKING_DIRECTORY ${dir}
|
||||
OUTPUT_VARIABLE git_config_output
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
if(NOT "${git_config_output}" STREQUAL "")
|
||||
# In case git-svn is used, attempt to extract svn info
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} svn info
|
||||
WORKING_DIRECTORY ${dir}
|
||||
TIMEOUT 3
|
||||
ERROR_VARIABLE git_svn_info_error
|
||||
OUTPUT_VARIABLE ${prefix}_WC_INFO
|
||||
RESULT_VARIABLE git_svn_info_result
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
|
||||
if(${git_svn_info_result} EQUAL 0)
|
||||
set(${prefix}_WC_GITSVN True)
|
||||
string(REGEX REPLACE "^(.*\n)?URL: ([^\n]+).*"
|
||||
"\\2" ${prefix}_WC_URL "${${prefix}_WC_INFO}")
|
||||
string(REGEX REPLACE "^(.*\n)?Revision: ([^\n]+).*"
|
||||
"\\2" ${prefix}_WC_REVISION "${${prefix}_WC_INFO}")
|
||||
string(REGEX REPLACE "^(.*\n)?Repository Root: ([^\n]+).*"
|
||||
"\\2" ${prefix}_WC_ROOT "${${prefix}_WC_INFO}")
|
||||
string(REGEX REPLACE "^(.*\n)?Last Changed Author: ([^\n]+).*"
|
||||
"\\2" ${prefix}_WC_LAST_CHANGED_AUTHOR "${${prefix}_WC_INFO}")
|
||||
string(REGEX REPLACE "^(.*\n)?Last Changed Rev: ([^\n]+).*"
|
||||
"\\2" ${prefix}_WC_LAST_CHANGED_REV "${${prefix}_WC_INFO}")
|
||||
string(REGEX REPLACE "^(.*\n)?Last Changed Date: ([^\n]+).*"
|
||||
"\\2" ${prefix}_WC_LAST_CHANGED_DATE "${${prefix}_WC_INFO}")
|
||||
endif(${git_svn_info_result} EQUAL 0)
|
||||
endif(NOT "${git_config_output}" STREQUAL "")
|
||||
|
||||
# If there is no 'remote.origin', default to "NA" value and print a warning message.
|
||||
if(NOT ${prefix}_WC_URL)
|
||||
message(WARNING "No remote origin set for git repository: ${dir}" )
|
||||
set( ${prefix}_WC_URL "NA" )
|
||||
else()
|
||||
set(${prefix}_WC_ROOT ${${prefix}_WC_URL})
|
||||
endif()
|
||||
|
||||
endmacro(GIT_WC_INFO)
|
||||
|
||||
|
||||
# Get the version info from the latest tag and set it as the projects version.
|
||||
#
|
||||
# Parameters:
|
||||
# prefix The prefix for all version variables.
|
||||
#
|
||||
macro(GIT_VERSION_INFO prefix)
|
||||
# If this project is not deployed via git, the following version file will
|
||||
# be used as fallback and needs to be deployed along with the sources. These
|
||||
# will be generated automatically by depending on the global target
|
||||
# 'project-version-files', if this project has access to the related git
|
||||
# repositoy.
|
||||
set(VERSION_FILE "${PROJECT_SOURCE_DIR}/.version")
|
||||
if (NOT TARGET project-version-files)
|
||||
add_custom_target(project-version-files)
|
||||
endif ()
|
||||
|
||||
if (EXISTS "${PROJECT_SOURCE_DIR}/.git")
|
||||
git_wc_info(${PROJECT_SOURCE_DIR} GIT)
|
||||
|
||||
# Add commands and targets for generating the required version file for
|
||||
# source package deploys. The file will also be to a global property, so
|
||||
# one is able to access a list of all generated version files, e.g. to
|
||||
# clean up the source directory after the package has been packed.
|
||||
add_custom_command(
|
||||
OUTPUT ${VERSION_FILE}
|
||||
COMMAND ${GIT_EXECUTABLE} describe --tags > ${VERSION_FILE}
|
||||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
|
||||
set_property(GLOBAL APPEND
|
||||
PROPERTY GIT_GENERATED_VERSION_FILES "${VERSION_FILE}")
|
||||
add_custom_target(project-version-files-${prefix} DEPENDS ${VERSION_FILE})
|
||||
add_dependencies(project-version-files project-version-files-${prefix})
|
||||
|
||||
# If git is not available (e.g. this git was packed as .tar.gz), try to read
|
||||
# the version-info from a hidden file in the root directory. This file
|
||||
# should not be versioned, but added at packaging time.
|
||||
elseif (EXISTS "${VERSION_FILE}")
|
||||
file(READ "${VERSION_FILE}" GIT_WC_LATEST_TAG_LONG)
|
||||
string(STRIP "${GIT_WC_LATEST_TAG_LONG}" GIT_WC_LATEST_TAG_LONG)
|
||||
|
||||
# If no version could be gathered by git or the version file, print a
|
||||
# warning, so the user has to define a version in the backup version file.
|
||||
else ()
|
||||
if (${ARGN} EQUAL "REQUIRED")
|
||||
message(FATAL_ERROR "No version provided by git or .version file")
|
||||
else ()
|
||||
message(WARNING "No version provided by git or .version file")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if (GIT_WC_LATEST_TAG_LONG MATCHES "^([^0-9]*)([0-9]+)[.]([0-9]+)(.*)")
|
||||
set(${prefix}_VERSION ${GIT_WC_LATEST_TAG_LONG} CACHE STRING "" FORCE)
|
||||
set(${prefix}_VERSION_MAJOR ${CMAKE_MATCH_2} CACHE STRING "" FORCE)
|
||||
set(${prefix}_VERSION_MINOR ${CMAKE_MATCH_3} CACHE STRING "" FORCE)
|
||||
|
||||
if (GIT_WC_LATEST_TAG_LONG MATCHES
|
||||
"^([^0-9]*)([0-9]+)[.]([0-9]+)[.]([0-9]+)")
|
||||
set(${prefix}_VERSION_PATCH ${CMAKE_MATCH_4} CACHE STRING "" FORCE)
|
||||
else ()
|
||||
set(${prefix}_VERSION_PATCH 0 CACHE STRING "" FORCE)
|
||||
endif()
|
||||
|
||||
if (GIT_WC_LATEST_TAG_LONG MATCHES
|
||||
"^([^0-9]*)([0-9]+)[.]([0-9]+)(.*)-([0-9]+)-")
|
||||
set(${prefix}_VERSION_TWEAK ${CMAKE_MATCH_5} CACHE STRING "" FORCE)
|
||||
else ()
|
||||
set(${prefix}_VERSION_TWEAK 0 CACHE STRING "" FORCE)
|
||||
endif()
|
||||
|
||||
mark_as_advanced(${prefix}_VERSION
|
||||
${prefix}_VERSION_MAJOR
|
||||
${prefix}_VERSION_MINOR
|
||||
${prefix}_VERSION_PATCH
|
||||
${prefix}_VERSION_TWEAK)
|
||||
else ()
|
||||
message(FATAL_ERROR "Invalid version info: '${GIT_WC_LATEST_TAG_LONG}'.")
|
||||
endif ()
|
||||
endmacro()
|
||||
endif(GIT_FOUND)
|
@ -41,8 +41,6 @@ tstr IMPLEMENTOR
|
||||
tint IMPLEMENTOR
|
||||
tcon IMPLEMENTOR
|
||||
mob_ld IMPLEMENTOR
|
||||
pcbang_check IMPLEMENTOR
|
||||
pcbang_update IMPLEMENTOR
|
||||
setqf IMPLEMENTOR
|
||||
delqf IMPLEMENTOR
|
||||
effect IMPLEMENTOR
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
2228
gamefiles/locale/english/locale_string_kr.txt
Normal file
2228
gamefiles/locale/english/locale_string_kr.txt
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
6
gamefiles/locale/english/quest/.gitignore
vendored
6
gamefiles/locale/english/quest/.gitignore
vendored
@ -1,10 +1,12 @@
|
||||
# Ignore compiled quest folder
|
||||
# Ignore compiled quest folders
|
||||
object/
|
||||
pre_qc/
|
||||
|
||||
# Quest compiler binaries
|
||||
qc
|
||||
qc.core
|
||||
qc.exe
|
||||
|
||||
# Compilde Python files
|
||||
# Compiled Python files
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/usr/local/bin/python
|
||||
#!/bin/python2
|
||||
import pre_qc
|
||||
import os
|
||||
os.system('rm -rf object')
|
||||
@ -13,7 +13,7 @@ for line in file('locale_list'):
|
||||
else:
|
||||
filename = line
|
||||
|
||||
if os.system('./qc '+filename):
|
||||
if os.system('qc '+filename):
|
||||
print 'Error occured on compile ' + line
|
||||
os.system('chmod -R 770 object')
|
||||
import sys
|
||||
|
@ -1,151 +0,0 @@
|
||||
quest dragon_soul begin
|
||||
state start begin
|
||||
when levelup or letter with pc.level >= 30 begin
|
||||
send_letter(gameforge.dragon_soul._1010_sendLetter)
|
||||
local v = find_npc_by_vnum(20001)
|
||||
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20001))
|
||||
end
|
||||
end
|
||||
when info or button begin
|
||||
say(gameforge.dragon_soul._1020_say)
|
||||
end
|
||||
|
||||
when 20001.chat.gameforge.dragon_soul._1030_npcChat with pc.level >= 30 begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.dragon_soul._1040_say)
|
||||
set_state(state_learning)
|
||||
end
|
||||
end
|
||||
state state_learning begin
|
||||
when letter begin
|
||||
send_letter(gameforge.dragon_soul._1050_sendLetter)
|
||||
end
|
||||
when info or button begin
|
||||
say(gameforge.dragon_soul._1060_say)
|
||||
end
|
||||
when kill begin
|
||||
if npc.is_pc() then
|
||||
return
|
||||
end
|
||||
|
||||
if pc.count_item(30270) < 10 then
|
||||
if drop_gamble_with_flag("ds_drop") then
|
||||
game.drop_item_with_ownership(30270, 1, 300)
|
||||
end
|
||||
end
|
||||
end
|
||||
when 20001.chat.gameforge.dragon_soul._1050_sendLetter begin
|
||||
say_title(mob_name(20001))
|
||||
if pc.count_item(30270) >= 10 then
|
||||
say(gameforge.dragon_soul._1070_say)
|
||||
pc.remove_item(30270, 10)
|
||||
ds.give_qualification()
|
||||
char_log(pc.get_player_id(), 'DS_QUALIFICATION', 'SUCCESS')
|
||||
pc.give_item2(50255)
|
||||
local today = math.floor(get_global_time() / 86400)
|
||||
pc.setf("dragon_soul", "eye_timestamp", today)
|
||||
pc.setf("dragon_soul", "eye_left", 9)
|
||||
set_state(state_farming)
|
||||
else
|
||||
say(gameforge.dragon_soul._1080_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
state state_farming begin
|
||||
when letter begin
|
||||
send_letter(gameforge.dragon_soul._1090_sendLetter)
|
||||
end
|
||||
when info or button begin
|
||||
say(string.format(gameforge.dragon_soul._1100_say, pc.getf("dragon_soul", "eye_left")))
|
||||
end
|
||||
when kill begin
|
||||
if npc.is_pc() then
|
||||
return
|
||||
end
|
||||
|
||||
if drop_gamble_with_flag("ds_drop") then
|
||||
local eye_left = pc.getf("dragon_soul", "eye_left")
|
||||
local haved_gemstone_number = pc.count_item(30270)
|
||||
|
||||
if eye_left > haved_gemstone_number / 10 then
|
||||
game.drop_item_with_ownership(30270, 1, 300)
|
||||
end
|
||||
end
|
||||
end
|
||||
when 30270.pick begin
|
||||
local eye_left = pc.getf("dragon_soul", "eye_left")
|
||||
if eye_left <= 0 then
|
||||
return
|
||||
end
|
||||
|
||||
if pc.count_item(30270) >= 10 then
|
||||
pc.setf("dragon_soul", "eye_left", eye_left - 1)
|
||||
pc.remove_item(30270, 10)
|
||||
pc.give_item2(50255)
|
||||
if 1 == eye_left then
|
||||
notice_multiline(gameforge.dragon_soul._1110_notice, notice)
|
||||
set_state(state_closed_season)
|
||||
end
|
||||
end
|
||||
end
|
||||
when 20001.chat.gameforge.dragon_soul._1120_npcChat begin
|
||||
say_title(mob_name(20001))
|
||||
local today = math.floor(get_global_time() / 86400)
|
||||
if today == pc.getf("dragon_soul", "eye_timestamp") then
|
||||
say(gameforge.dragon_soul._1130_say)
|
||||
else
|
||||
say(gameforge.dragon_soul._1140_say)
|
||||
pc.setf("dragon_soul", "eye_timestamp", today)
|
||||
pc.setf("dragon_soul", "eye_left", 10)
|
||||
end
|
||||
end
|
||||
end
|
||||
state state_closed_season begin
|
||||
when letter begin
|
||||
send_letter(gameforge.dragon_soul._1150_sendLetter)
|
||||
end
|
||||
when info or button begin
|
||||
say(gameforge.dragon_soul._1160_say)
|
||||
local today = math.floor(get_global_time() / 86400)
|
||||
if today == pc.getf("dragon_soul", "eye_timestamp") then
|
||||
say(gameforge.dragon_soul._1170_say)
|
||||
else
|
||||
say(gameforge.dragon_soul._1180_say)
|
||||
end
|
||||
end
|
||||
|
||||
when 20001.chat.gameforge.dragon_soul._1090_sendLetter begin
|
||||
say_title(mob_name(20001))
|
||||
local today = math.floor(get_global_time() / 86400)
|
||||
if today == pc.getf("dragon_soul", "eye_timestamp") then
|
||||
say(gameforge.dragon_soul._1130_say)
|
||||
else
|
||||
say(gameforge.dragon_soul._1140_say)
|
||||
pc.setf("dragon_soul", "eye_timestamp", today)
|
||||
pc.setf("dragon_soul", "eye_left", 10)
|
||||
set_state(state_farming)
|
||||
end
|
||||
end
|
||||
end
|
||||
-- deprecated states. so, jump to new state.
|
||||
state state_1 begin
|
||||
when login begin
|
||||
set_state(state_learning)
|
||||
end
|
||||
end
|
||||
state state_2 begin
|
||||
when login begin
|
||||
set_state(state_learning)
|
||||
end
|
||||
end
|
||||
state state_3 begin
|
||||
when login begin
|
||||
set_state(state_closed_season)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -1,41 +0,0 @@
|
||||
quest dragon_soul_daily_gift begin
|
||||
state start begin
|
||||
function is_event_on()
|
||||
-- <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> dragon_soul_daily_gift_mgr.quest<73><74><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20>뿪<EFBFBD><EBBFAA><EFBFBD><EFBFBD> Ȯ<><C8AE>.
|
||||
local s_time = game.get_event_flag("ds_dg_st")
|
||||
local e_time = game.get_event_flag("ds_dg_et")
|
||||
local now = os.time()
|
||||
return now > s_time and now < e_time
|
||||
end
|
||||
|
||||
when 20001.chat.gameforge.dragon_soul_daily_gift._010_npcChat with dragon_soul_daily_gift.is_event_on() begin
|
||||
local event_id = game.get_event_flag("ds_dg_id")
|
||||
if pc.getqf("event_id") != event_id then
|
||||
say_title(mob_name(20001))
|
||||
if pc.level < 50 then
|
||||
say(gameforge.dragon_soul_daily_gift._020_say)
|
||||
return
|
||||
elseif 0 == ds.is_qualified() then
|
||||
say(gameforge.dragon_soul_daily_gift._030_say)
|
||||
return
|
||||
else
|
||||
say(gameforge.dragon_soul_daily_gift._040_say)
|
||||
pc.setqf("event_id", event_id)
|
||||
wait()
|
||||
end
|
||||
end
|
||||
|
||||
say_title(mob_name(20001))
|
||||
if 0 == get_today_count("dragon_soul_daily_gift", "gift") then
|
||||
-- <20><><EFBFBD><EFBFBD>ġ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
say(gameforge.dragon_soul_daily_gift._050_say)
|
||||
local gift_vnum = game.get_event_flag("ds_dg_item")
|
||||
pc.give_item2(gift_vnum)
|
||||
inc_today_count("dragon_soul_daily_gift", "gift")
|
||||
else
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̹<EFBFBD> <20><>.
|
||||
say(gameforge.dragon_soul_daily_gift._060_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -1,90 +0,0 @@
|
||||
quest dragon_soul_daily_gift_mgr begin
|
||||
state start begin
|
||||
function is_event_on()
|
||||
-- <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> dragon_soul_daily_gift_mgr.quest<73><74><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20>뿪<EFBFBD><EBBFAA><EFBFBD><EFBFBD> Ȯ<><C8AE>.
|
||||
local s_time = game.get_event_flag("ds_dg_st")
|
||||
local e_time = game.get_event_flag("ds_dg_et")
|
||||
local now = os.time()
|
||||
return now > s_time and now < e_time
|
||||
end
|
||||
function date_getter()
|
||||
say(gameforge.dragon_soul_gift_mgr._040_say)
|
||||
say("yy-mm-dd hh:mm")
|
||||
local date = input()
|
||||
local _, _, y, m, d, hour, min = string.find(date, "(%d+)-(%d+)-(%d+) (%d+):(%d+)")
|
||||
return y, m, d, hour, min
|
||||
end
|
||||
function print_quest_info()
|
||||
local s_time = game.get_event_flag("ds_dg_st")
|
||||
local e_time = game.get_event_flag("ds_dg_et")
|
||||
local gift_vnum = game.get_event_flag("ds_dg_item")
|
||||
|
||||
say(os.date("start time[ENTER] year:%Y, month:%m, day:%d hour:%H minite:%M", s_time))
|
||||
say(os.date(" end time[ENTER] year:%Y, month:%m, day:%d hour:%H minite:%M", e_time))
|
||||
|
||||
say(string.format("gift item[ENTER] vnum : %d", gift_vnum))
|
||||
say_item_vnum(gift_vnum)
|
||||
end
|
||||
when 20001.chat.gameforge.dragon_soul_gift_mgr._010_npcChat with pc.is_gm() begin
|
||||
local sel = 0
|
||||
if dragon_soul_daily_gift_mgr.is_event_on() then
|
||||
say(locale.event_on_going)
|
||||
local sel = select(locale.event_modify, locale.event_info_print, locale.event_cancel, locale.close)
|
||||
if 2 == sel then
|
||||
dragon_soul_daily_gift_mgr.print_quest_info()
|
||||
return
|
||||
elseif 3 == sel then
|
||||
game.set_event_flag("ds_dg_et", 0)
|
||||
return
|
||||
elseif 4 == sel then
|
||||
return
|
||||
end
|
||||
|
||||
end
|
||||
-- Get start time and end time.
|
||||
local s_y, s_m, s_d, s_hour, s_min
|
||||
repeat
|
||||
say(gameforge.dragon_soul_gift_mgr._020_say)
|
||||
s_y, s_m, s_d, s_hour, s_min = dragon_soul_daily_gift_mgr.date_getter()
|
||||
s_y = s_y + 2000
|
||||
say(string.format("year:%d month:%d day:%d hour:%d min:%d", s_y, s_m, s_d, s_hour, s_min))
|
||||
until 1 == select(gameforge.locale.yes, gameforge.locale.no)
|
||||
local e_y, e_m, e_d, e_hour, e_min
|
||||
repeat
|
||||
say(gameforge.dragon_soul_gift_mgr._030_say)
|
||||
e_y, e_m, e_d, e_hour, e_min = dragon_soul_daily_gift_mgr.date_getter()
|
||||
e_y = e_y + 2000
|
||||
say(string.format("year:%d month:%d day:%d hour:%d min:%d", e_y, e_m, e_d, e_hour, e_min))
|
||||
until 1 == select(gameforge.locale.yes, gameforge.locale.no)
|
||||
|
||||
local s_time = os.time{year=s_y, month=s_m, day=s_d, hour=s_hour, min=s_min}
|
||||
local e_time = os.time{year=e_y, month=e_m, day=e_d, hour=e_hour, min=e_min}
|
||||
|
||||
-- Get gift item vnum
|
||||
local gift_vnum = input_number("gift vnum")
|
||||
|
||||
-- Print settings and confirm.
|
||||
say(os.date("start time[ENTER] year:%Y, month:%m, day:%d hour:%H minite:%M", s_time))
|
||||
say(os.date(" end time[ENTER] year:%Y, month:%m, day:%d hour:%H minite:%M", e_time))
|
||||
|
||||
say(string.format("gift item[ENTER] vnum : %d", gift_vnum))
|
||||
say_item_vnum(gift_vnum)
|
||||
|
||||
say(gameforge.dragon_soul_gift_mgr._050_say)
|
||||
if 2 == select(gameforge.locale.yes, gameforge.locale.no) then
|
||||
return
|
||||
end
|
||||
|
||||
-- <20>̺<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> event_id<69><64> <20>ٲٸ<D9B2> <20>ȵ<EFBFBD>.
|
||||
if 0 == sel then
|
||||
local event_id = game.get_event_flag("ds_dg_id")
|
||||
game.set_event_flag("ds_dg_id", event_id + 1)
|
||||
end
|
||||
game.set_event_flag("ds_dg_st", s_time)
|
||||
game.set_event_flag("ds_dg_et", e_time)
|
||||
game.set_event_flag("ds_dg_item", gift_vnum)
|
||||
|
||||
say (gameforge.dragon_soul_gift_mgr._060_say)
|
||||
end
|
||||
end
|
||||
end
|
@ -1,9 +0,0 @@
|
||||
quest dragon_soul_refine begin
|
||||
state start begin
|
||||
when 20001.chat.gameforge.dragon_soul_refine._010_npcChat with ds.is_qualified() != 0 begin
|
||||
say_title(mob_name(20001))
|
||||
say (gameforge.dragon_soul_refine._020_say)
|
||||
ds.open_refine_window()
|
||||
end
|
||||
end
|
||||
end
|
@ -1,8 +0,0 @@
|
||||
quest dragon_soul_shop begin
|
||||
state start begin
|
||||
when 20001.chat.gameforge.dragon_soul._100_npcChat with ds.is_qualified() begin
|
||||
say (gameforge.dragon_soul._110_say)
|
||||
npc.open_shop(13)
|
||||
end
|
||||
end
|
||||
end
|
@ -1,103 +0,0 @@
|
||||
quest event_flame_dungeon_open begin
|
||||
state start begin
|
||||
when 20381.chat.gameforge.event_flame_dungeon_open._010_npcChat with pc.get_level() >= 90 begin
|
||||
say(gameforge.event_flame_dungeon_open._020_say)
|
||||
wait()
|
||||
say(gameforge.event_flame_dungeon_open._030_say)
|
||||
wait()
|
||||
say(gameforge.event_flame_dungeon_open._080_say)
|
||||
pc.setqf("event_FD_time", 0)
|
||||
set_state(run)
|
||||
end
|
||||
end
|
||||
|
||||
state run begin
|
||||
when 20381.chat.gameforge.event_flame_dungeon_open._040_npcChat with game.get_event_flag("w21open_event")>0 begin
|
||||
say(gameforge.event_flame_dungeon_open._050_say)
|
||||
wait()
|
||||
|
||||
local t = pc.getqf("event_FD_time")
|
||||
local killcount = pc.getqf("kill_done")
|
||||
if killcount == 0 then
|
||||
say(gameforge.event_flame_dungeon_open._080_say)
|
||||
elseif (t==0) or (t+86400 < get_global_time()) then
|
||||
say(gameforge.event_flame_dungeon_open._060_say)
|
||||
pc.give_item2(71173, 1)
|
||||
pc.give_item2(71174, 3)
|
||||
pc.setqf("event_FD_time", get_global_time())
|
||||
pc.setqf("kill_count_1", 0)
|
||||
else
|
||||
say(gameforge.event_flame_dungeon_open._070_say)
|
||||
end
|
||||
end
|
||||
|
||||
when letter with game.get_event_flag("w21open_event")>0 begin
|
||||
send_letter(gameforge.event_flame_dungeon_open._010_npcChat)
|
||||
--<2D><><EFBFBD><EFBFBD> óġ <20><> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
q.set_counter_name(gameforge.main_quest_lv98._680_counterName)
|
||||
event_flame_dungeon_open.kill_count()
|
||||
end
|
||||
|
||||
when button or info with game.get_event_flag("w21open_event")>0 begin
|
||||
say_title(gameforge.event_flame_dungeon_open._010_npcChat)
|
||||
say(string.format(gameforge.levelup._26_say, 100 - pc.getqf("kill_count_1")))
|
||||
end
|
||||
|
||||
when 3101.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
event_flame_dungeon_open.kill_count()
|
||||
end
|
||||
|
||||
when 3102.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
event_flame_dungeon_open.kill_count()
|
||||
end
|
||||
|
||||
when 3103.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
event_flame_dungeon_open.kill_count()
|
||||
end
|
||||
|
||||
when 3104.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
event_flame_dungeon_open.kill_count()
|
||||
end
|
||||
|
||||
when 3105.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
event_flame_dungeon_open.kill_count()
|
||||
end
|
||||
|
||||
when 3190.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
event_flame_dungeon_open.kill_count()
|
||||
end
|
||||
|
||||
when 3191.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
event_flame_dungeon_open.kill_count()
|
||||
end
|
||||
|
||||
when 71173.use begin
|
||||
pc.warp(614200, 706800, 62)
|
||||
pc.remove_item(71173, 1)
|
||||
end
|
||||
|
||||
function kill_count()
|
||||
local total_remain = 100
|
||||
local remain1 = pc.getqf("kill_count_1")
|
||||
local remain_count = total_remain - remain1
|
||||
q.set_counter_value(remain_count)
|
||||
if total_remain == 0 then
|
||||
pc.setqf("kill_done", 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -1,717 +0,0 @@
|
||||
quest flame_dungeon begin
|
||||
state start begin
|
||||
--when 20394.click with pc.get_level() >= 90 begin
|
||||
--pc.give_item2(71175, 1)
|
||||
--set_state(run)
|
||||
--end
|
||||
--end
|
||||
|
||||
--state run begin
|
||||
|
||||
function setting()
|
||||
return
|
||||
{
|
||||
["bossroom_entry_pos"] = {8109,6867},
|
||||
["boss_pos"] = {686,637},
|
||||
["doors_pos"] = {
|
||||
{320,394},
|
||||
{293,359},
|
||||
{333,321},
|
||||
{378,320},
|
||||
{400,355},
|
||||
{394,401}
|
||||
},
|
||||
["idoors_pos"] = {
|
||||
{268,447},
|
||||
{234,359},
|
||||
{300,264},
|
||||
{454,217},
|
||||
{470,355},
|
||||
{467,469}
|
||||
},
|
||||
["doors_dir"] = {135,90,210,152,90,223},
|
||||
["idoors_dir"] = {135,90,210,135,90,239},
|
||||
["dungeon_entry_pos"] = {7762, 6739},-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
["DUNGEON_MAN_bpos"] = {690,722},
|
||||
["DUNGEON_MAN_pos"] = {354,362},
|
||||
["LEVEL2_STONE_pos"] = {195,352},
|
||||
["LEVEL4_TARGET_pos"] = {470,175},
|
||||
["LEVEL5_STONE_pos"] = {
|
||||
{486, 345},
|
||||
{511, 336},
|
||||
{525, 349},
|
||||
{521, 365},
|
||||
{503, 372},
|
||||
{486, 365},
|
||||
{500, 354}
|
||||
},
|
||||
["LEVEL6_TARGET_pos"] = {511,480},
|
||||
["outside_entry_pos"] = {6142,7068}, --<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ¾<D6B4> <20><><EFBFBD>ִ<EFBFBD> <20><>
|
||||
["YAK_pos"] = {376, 397} -- <20><>ȯ <20><><EFBFBD><EFBFBD>
|
||||
|
||||
}
|
||||
end
|
||||
function is_flamed(idx) -- <20><><EFBFBD>漺<EFBFBD><E6BCBA> <20>ִ<EFBFBD><D6B4><EFBFBD> Ȯ<><C8AE>
|
||||
return idx >= 351 * 10000 and idx < (351 + 1) *10000
|
||||
end
|
||||
function make_dungeon() -- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
local setting = flame_dungeon.setting()
|
||||
d.new_jump_party(351, setting.dungeon_entry_pos[1], setting.dungeon_entry_pos[2])
|
||||
-- d.spawn_mob_ac_dir(20385, setting.DUNGEON_MAN_pos[1], setting.DUNGEON_MAN_pos[2],0)
|
||||
-- d.spawn_mob(YAK,setting.YAK_pos[1],setting.YAK_pos[2])
|
||||
d.regen_file("data/dungeon/flame_dungeon/npc.txt")
|
||||
d.setf("level",0)
|
||||
for i=1,6 do
|
||||
d.set_unique("door"..i, d.spawn_mob_ac_dir(20387, setting.doors_pos[i][1], setting.doors_pos[i][2],setting.doors_dir[i]))
|
||||
end
|
||||
for i=1,6 do
|
||||
d.set_unique("idoor"..i, d.spawn_mob_ac_dir(20388, setting.idoors_pos[i][1], setting.idoors_pos[i][2],setting.idoors_dir[i]))
|
||||
end
|
||||
d.setf("clear_count",0)
|
||||
d.setf("started",0)
|
||||
d.setf("dungeon_enter",0) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD>? // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 0 <20><><EFBFBD><EFBFBD> : 1 // ƨ<><C6A8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѽð<D1BD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
end
|
||||
function go_boss() -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
local setting = flame_dungeon.setting()
|
||||
if pc.get_level() < 104 then --<2D><><EFBFBD><EFBFBD>Ȯ<EFBFBD><C8AE>
|
||||
-- syschat(gameforge.flame_dungeon._580_notice)
|
||||
say(gameforge.flame_dungeon._580_notice)
|
||||
return
|
||||
else
|
||||
--if pc.getf("main_quest_flame_lv103", "__status")==main_quest_flame_lv103.__COMPLETE__ then -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ Ȯ<><C8AE>
|
||||
-- -- say_title(gameforge.flame_dungeon._010_say)
|
||||
say(gameforge.flame_dungeon._010_say)
|
||||
local warp = select(gameforge.flame_dungeon._020_select,gameforge.flame_dungeon._030_select)
|
||||
if warp == 1 then
|
||||
d.setf("level",17)
|
||||
d.jump_all(setting.bossroom_entry_pos[1],setting.bossroom_entry_pos[2])
|
||||
d.set_regen_file ("data/dungeon/flame_dungeon/".."fd_fild_boss.txt")
|
||||
-- d.spawn_mob(20385,setting.DUNGEON_MAN_bpos[1],setting.DUNGEON_MAN_bpos[2])
|
||||
d.spawn_mob(6091,setting.boss_pos[1],setting.boss_pos[2])
|
||||
end
|
||||
-- else
|
||||
-- -- syschat(gameforge.flame_dungeon._040_notice)
|
||||
-- say(gameforge.flame_dungeon._040_notice)
|
||||
-- return
|
||||
-- end
|
||||
end
|
||||
end
|
||||
function level_clear() -- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>Ŭ<EFBFBD><C5AC><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>Ŭ<EFBFBD><C5AC><EFBFBD><EFBFBD>
|
||||
d.setf("level",0)
|
||||
d.clear_regen()
|
||||
d.purge_area(750000,620000,817400,689400) -- <20><><EFBFBD><EFBFBD>ü -- d.purge() <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
end
|
||||
function clear_timer(inx) -- Ÿ<≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
clear_server_timer ("flame_dungeon_0m_left_timer", inx)
|
||||
clear_server_timer ("flame_dungeon_1m_left_timer", inx)
|
||||
clear_server_timer ("flame_dungeon_5m_left_timer", inx)
|
||||
clear_server_timer ("flame_dungeon_10m_left_timer", inx)
|
||||
clear_server_timer ("flame_dungeon_15m_left_timer", inx)
|
||||
clear_server_timer ("flame_dungeon_30m_left_timer", inx)
|
||||
clear_server_timer ("flame_dungeon_45m_left_timer", inx)
|
||||
clear_server_timer ("killed_A_1", inx)
|
||||
clear_server_timer ("killed_A_2", inx)
|
||||
clear_server_timer ("flame_dungeon_ticket_remove", inx)
|
||||
end
|
||||
|
||||
when login begin
|
||||
local idx = pc.get_map_index()
|
||||
local setting = flame_dungeon.setting()
|
||||
if idx == 351 then
|
||||
pc.warp(setting.outside_entry_pos[1]*100, setting.outside_entry_pos[2] * 100, 62)
|
||||
elseif flame_dungeon.is_flamed(idx) then -- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--<2D>Ʒ<EFBFBD><C6B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD>ƿ´<C6BF>. <20>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD> Ȱ<><C8B0>ȭ <20>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȴ<EFBFBD>.
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD>ƿ<EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>漺<EFBFBD><E6BCBA><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɼ<EFBFBD><C9BC><EFBFBD> Ȱ<><C8B0>ȭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
-- pc.set_warp_location(0, 0 , 0) --ƨ<><C6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20><><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20>κ<EFBFBD>
|
||||
pc.set_warp_location(62, setting.outside_entry_pos[1] , setting.outside_entry_pos[2]) -- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ƨ<><C6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
local ticketGroup = {71095, 1, 71130, 1}
|
||||
if d.getf("dungeon_enter") == 0 then -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴϸ<C6B4>
|
||||
local canPass = false
|
||||
for i=1, table.getn(ticketGroup),2 do
|
||||
if pc.count_item(ticketGroup[i]) >= ticketGroup[i+1] then
|
||||
canPass = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if get_global_time() - pc.getf("flame_dungeon","exit_time") < 30 * 60 then -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѽð<D1BD><C3B0><EFBFBD> <20>ɷ<EFBFBD><C9B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.flame_dungeon._050_notice,d.notice)
|
||||
say(gameforge.flame_dungeon._060_say)
|
||||
timer("flame_dungeon_warp_timer", 5)
|
||||
elseif not canPass then
|
||||
notice_multiline(gameforge.flame_dungeon._070_notice,d.notice)
|
||||
say(gameforge.flame_dungeon._080_say)
|
||||
timer("flame_dungeon_warp_timer", 5)
|
||||
elseif pc.get_level() < 100 then
|
||||
notice_multiline(gameforge.flame_dungeon._090_notice,d.notice)
|
||||
say(gameforge.flame_dungeon._100_say)
|
||||
timer("flame_dungeon_warp_timer", 5)
|
||||
end
|
||||
elseif pc.getf("flame_dungeon","ticket_delete") == 0 then -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD> Ƽ<><C6BC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
for i=1, table.getn(ticketGroup),2 do
|
||||
if pc.count_item(ticketGroup[i]) >= ticketGroup[i+1] then
|
||||
pc.remove_item(ticketGroup[i], ticketGroup[i+1])
|
||||
break
|
||||
end
|
||||
end
|
||||
pc.setf("flame_dungeon","ticket_delete",1)
|
||||
end
|
||||
else
|
||||
pc.setf("flame_dungeon","ticket_delete",0)
|
||||
end
|
||||
end
|
||||
when flame_dungeon_warp_timer.timer begin
|
||||
local setting = flame_dungeon.setting()
|
||||
pc.warp(setting.outside_entry_pos[1]*100, setting.outside_entry_pos[2] * 100, 62)
|
||||
end
|
||||
when logout begin
|
||||
local idx = pc.get_map_index()
|
||||
if flame_dungeon.is_flamed(idx) then
|
||||
if d.getf("dungeon_enter") == 1 then -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>αƿ<D7BE>
|
||||
pc.setf("flame_dungeon","exit_time",get_global_time()) -- <20>ν<EFBFBD><CEBD>Ͻ<EFBFBD> <20>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD>, <20>ٵ<EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> or <20>׳<EFBFBD> ƨ<><C6A8><EFBFBD>Ÿ<EFBFBD> <20>ȱ<EFBFBD><C8B1><EFBFBD>
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
when 20394.chat.gameforge.flame_dungeon._110_npcChat begin
|
||||
|
||||
local setting = flame_dungeon.setting()
|
||||
if party.is_party() then
|
||||
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>
|
||||
local party_check = 0
|
||||
if d.find(party.getf("dungeon_index")) then
|
||||
party_check = (d.getf_from_map_index("party_leader_pid", party.getf("dungeon_index")) == party.get_leader_pid())
|
||||
end
|
||||
|
||||
if d.find(party.getf("dungeon_index")) and party_check then
|
||||
if get_global_time() - pc.getf("flame_dungeon","exit_time") < 5 * 60 then -- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 5<><35> <20><>?
|
||||
local dungeon_level = d.getf_from_map_index("level", party.getf("dungeon_index"))
|
||||
if dungeon_level == 17 then -- <20><><EFBFBD><EFBFBD>
|
||||
pc.warp(setting.bossroom_entry_pos[1] * 100, setting.bossroom_entry_pos[2] * 100, party.getf("dungeon_index"))
|
||||
else
|
||||
pc.warp(setting.dungeon_entry_pos[1] * 100, setting.dungeon_entry_pos[2] * 100, party.getf("dungeon_index"))
|
||||
end
|
||||
else -- 5<><35> <20>ʰ<EFBFBD><CAB0>Ͽ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>Ұ<EFBFBD>
|
||||
say_title(mob_name(20394))
|
||||
say(gameforge.flame_dungeon._590_say)
|
||||
end
|
||||
else
|
||||
local pids = {party.get_member_pids()}
|
||||
local noTicketMembers = {}
|
||||
local notEnoughLevelMembers = {}
|
||||
local ticketCheck = true
|
||||
local levelCheck = true
|
||||
local ticketGroup = {71095, 1, 71130, 1}
|
||||
for i, pid in next, pids, nil do
|
||||
q.begin_other_pc_block(pid)
|
||||
local canPass = false
|
||||
for idx=1, table.getn(ticketGroup),2 do
|
||||
if pc.count_item(ticketGroup[idx]) >= ticketGroup[idx+1] then
|
||||
canPass = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if not canPass then
|
||||
table.insert(noTicketMembers, pc.get_name())
|
||||
ticketCheck = false
|
||||
end
|
||||
if pc.level < 100 then
|
||||
table.insert(notEnoughLevelMembers, pc.get_name())
|
||||
levelCheck = false
|
||||
end
|
||||
q.end_other_pc_block()
|
||||
end
|
||||
|
||||
if not ticketCheck then
|
||||
say_title(mob_name(20394))
|
||||
say(gameforge.flame_dungeon._610_say)
|
||||
for i, name in next, noTicketMembers, nil do
|
||||
say(color(1,1,0), " "..name)
|
||||
end
|
||||
if levelCheck then
|
||||
return
|
||||
else
|
||||
wait()
|
||||
end
|
||||
end
|
||||
|
||||
if not levelCheck then
|
||||
say_title(mob_name(20394))
|
||||
say(gameforge.flame_dungeon._630_say)
|
||||
for i, name in next, notEnoughLevelMembers, nil do
|
||||
say(color(1,1,0), " "..name)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
if party.is_leader() then
|
||||
say(gameforge.flame_dungeon._120_say)
|
||||
local warp = select(gameforge.flame_dungeon._130_select,gameforge.flame_dungeon._140_select)
|
||||
if warp == 1 then
|
||||
if party.is_map_member_flag_lt("exit_time", get_global_time() - 30 * 60 ) then
|
||||
flame_dungeon.make_dungeon()
|
||||
else
|
||||
--say("test : <20><>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ѽð<D1BD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʾҽ<CABE><D2BD>ϴ<EFBFBD>.")
|
||||
say(gameforge.flame_dungeon._600_say)
|
||||
end
|
||||
end
|
||||
|
||||
party.setf("flame_dungeon_boss_kill_count", 0)
|
||||
|
||||
else
|
||||
say(gameforge.flame_dungeon._150_say)
|
||||
end
|
||||
end
|
||||
else
|
||||
say(gameforge.flame_dungeon._160_say)
|
||||
end
|
||||
end
|
||||
-- when 20394.chat."Test : <20><><EFBFBD>ҽ<EFBFBD>Ȯ<EFBFBD><C8AE>" with is_test_server() begin -- <20><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
-- local setting = flame_dungeon.setting()
|
||||
-- pc.setf("flame_dungeon","fdRtest",1)
|
||||
-- pc.warp( setting.dungeon_entry_pos[1]*100, setting.dungeon_entry_pos[2]*100, 351)
|
||||
-- end
|
||||
|
||||
|
||||
when 20394.chat."TEST : Init time limit init" with is_test_server() begin -- <20><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
pc.setf("flame_dungeon","exit_time",get_global_time()-1800)
|
||||
say("Done")
|
||||
end
|
||||
-- when 20385.chat."Test : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>" with is_test_server() begin -- <20><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
-- say("<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : "..d.count_monster())
|
||||
-- say("level : "..d.getf("level"))
|
||||
-- say("Dmap index : "..d.get_map_index())
|
||||
-- say("Pmap index : "..pc.get_map_index())
|
||||
-- say("access limit : "..pc.getf("flame_dungeon","exit_time"))
|
||||
-- say("global time : "..get_global_time())
|
||||
-- if flame_dungeon.is_flamed(d.get_map_index()) then
|
||||
-- say("in dungeon") -- is_flamed <20>Լ<EFBFBD> üũ
|
||||
-- end
|
||||
-- if d.is_unique_dead("stone1") then
|
||||
-- say("stone1 is dead")
|
||||
-- else
|
||||
-- say("stone1 is not dead")
|
||||
-- end
|
||||
-- end
|
||||
-- when 20385.chat."ó<><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" begin -- <20><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
-- say("<22>ʱ<EFBFBD>ȭ <20>մϴ<D5B4>")
|
||||
-- flame_dungeon.clear_timer(d.get_map_index())
|
||||
-- flame_dungeon.make_dungeon()
|
||||
-- end
|
||||
when 20385.chat."Test : Boss Room" with is_test_server() begin -- <20><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
flame_dungeon.go_boss()
|
||||
end
|
||||
|
||||
-- < <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD> Ÿ<≯<EFBFBD>>
|
||||
-- when 20385.chat."<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" begin -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ƨ<><C6A8><EFBFBD><EFBFBD> <20>ʰ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> Ȱ<><C8B0>ȭ
|
||||
-- local setting = flame_dungeon.setting()
|
||||
-- say("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ðڽ<C3B0><DABD>ϱ<EFBFBD>?")
|
||||
-- local warp = select("Ȯ<><C8AE>","<22><><EFBFBD><EFBFBD>")
|
||||
-- if warp == 1 then
|
||||
-- pc.warp(setting.outside_entry_pos[1]*100, setting.outside_entry_pos[2] * 100, 62)
|
||||
-- end
|
||||
-- end
|
||||
when flame_dungeon_45m_left_timer.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(string.format(gameforge.flame_dungeon._180_notice, 45),d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._170_notice,d.notice)
|
||||
server_timer('flame_dungeon_30m_left_timer', 15*60, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
when flame_dungeon_30m_left_timer.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(string.format(gameforge.flame_dungeon._180_notice, 30),d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._170_notice,d.notice)
|
||||
server_timer('flame_dungeon_15m_left_timer', 15*60, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
when flame_dungeon_15m_left_timer.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(string.format(gameforge.flame_dungeon._180_notice, 15),d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._170_notice,d.notice)
|
||||
server_timer('flame_dungeon_5m_left_timer', 10*60, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
when flame_dungeon_5m_left_timer.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(string.format(gameforge.flame_dungeon._180_notice, 5),d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._170_notice,d.notice)
|
||||
server_timer('flame_dungeon_1m_left_timer', 4*60, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
when flame_dungeon_1m_left_timer.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(string.format(gameforge.flame_dungeon._180_notice, 1),d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._170_notice,d.notice)
|
||||
server_timer ("flame_dungeon_0m_left_timer", 60, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
when flame_dungeon_0m_left_timer.server_timer begin
|
||||
local setting = flame_dungeon.setting()
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(gameforge.flame_dungeon._190_notice,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._200_notice,d.notice)
|
||||
server_timer("dungeon_end_timer",10,d.get_map_index())
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- <<<< <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>>>>> --
|
||||
when 20385.chat.gameforge.flame_dungeon._210_npcChat with npc.lock() begin -- '0x'<27><> x<><78>° <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> , '1x'<27><> x<><78>° <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
local setting = flame_dungeon.setting()
|
||||
if d.getf("started") == 0 then
|
||||
say(gameforge.flame_dungeon._230_say)
|
||||
say(gameforge.flame_dungeon._240_say)
|
||||
wait()
|
||||
d.setf("started",1)
|
||||
-- <20><>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD> ƨ<>ܹ<EFBFBD><DCB9>ȴµ<C8B4> <20>ڱ⸸ <20><><EFBFBD>Ƽ<EFBFBD> exit timer<65><72> <20><><EFBFBD>µǸ<C2B5> <20>ȵǴϱ<C7B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD><D2B6><EFBFBD> <20><>
|
||||
server_timer ("flame_dungeon_45m_left_timer",15*60, d.get_map_index())
|
||||
notice_multiline(gameforge.flame_dungeon._250_notice,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._170_notice,d.notice)
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>õ<EFBFBD> ó<><C3B3>
|
||||
-- <20><><EFBFBD><EFBFBD> <20>Ŀ<EFBFBD> Ƽ<><C6BC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ƨ<>ܳ<EFBFBD><DCB3><EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> Ÿ<≯Ӹ<CCB8> <20>̿<EFBFBD><CCBF><EFBFBD> Ƽ<><C6BC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
local pids = {party.get_member_pids()}
|
||||
local ticketGroup = {71095, 1, 71130, 1}
|
||||
for i, pid in next, pids, nil do
|
||||
q.begin_other_pc_block(pid)
|
||||
local canPass = false
|
||||
for idx=1, table.getn(ticketGroup),2 do
|
||||
if pc.count_item(ticketGroup[idx]) >= ticketGroup[idx+1] then
|
||||
canPass = true
|
||||
pc.remove_item(ticketGroup[idx], ticketGroup[idx+1])
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if not canPass then
|
||||
pc.warp(setting.outside_entry_pos[1]*100, setting.outside_entry_pos[2] * 100, 62)
|
||||
end
|
||||
q.end_other_pc_block()
|
||||
end
|
||||
d.setqf2("flame_dungeon","ticket_delete",1)
|
||||
d.setf("dungeon_enter",1)
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
party.setf("dungeon_index", d.get_map_index())
|
||||
d.setf("party_leader_pid", party.get_leader_pid())
|
||||
end
|
||||
if d.getf("level") < 7 then --<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴϸ<C6B4>
|
||||
if d.getf("clear_count") == 6 then -- <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
d.setf("level",7)
|
||||
else
|
||||
local rand = number(1,6)--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>湮üũ<C3BC><C5A9> <20><><EFBFBD><EFBFBD> <20>迭<EFBFBD><E8BFAD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD> üũ<C3BC><C5A9>
|
||||
local setlev = 0
|
||||
d.setf("level",7) -- Ȥ<><C8A4> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>츦 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>
|
||||
for i=1,50 do
|
||||
setlev = setlev + 1
|
||||
if setlev > 6 then
|
||||
setlev = 1
|
||||
end
|
||||
if not d.is_unique_dead("door"..setlev) then
|
||||
rand = rand - 1
|
||||
if rand == 0 then
|
||||
d.setf("level",setlev)
|
||||
d.setf("clear_count",d.getf("clear_count")+1)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if d.getf("level") == 1 then
|
||||
say(gameforge.flame_dungeon._260_say)
|
||||
notice_multiline(gameforge.flame_dungeon._260_say,d.notice)
|
||||
d.kill_unique("door1")
|
||||
d.kill_unique("idoor1")
|
||||
d.setf("level",11)
|
||||
d.regen_file ("data/dungeon/flame_dungeon/".."fd_a.txt")
|
||||
|
||||
server_timer ("killed_A_1", 12, d.get_map_index())
|
||||
elseif d.getf("level") == 11 then
|
||||
say(gameforge.flame_dungeon._270_say)
|
||||
say_title(gameforge.flame_dungeon._280_sayTitle .. d.count_monster())
|
||||
elseif d.getf("level") == 2 then
|
||||
say(gameforge.flame_dungeon._290_say)
|
||||
say(gameforge.flame_dungeon._300_say)
|
||||
notice_multiline(gameforge.flame_dungeon._290_say,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._300_say,d.notice)
|
||||
d.spawn_mob(20386, setting.LEVEL2_STONE_pos[1], setting.LEVEL2_STONE_pos[2]) -- <20><><EFBFBD>μ<EFBFBD> <20><>ȯ
|
||||
d.kill_unique("door2")
|
||||
d.kill_unique("idoor2")
|
||||
d.set_regen_file ("data/dungeon/flame_dungeon/".."fd_b.txt")
|
||||
d.setf("level",12)
|
||||
elseif d.getf("level") == 12 then
|
||||
say(gameforge.flame_dungeon._310_say)
|
||||
elseif d.getf("level") == 3 then
|
||||
say(gameforge.flame_dungeon._260_say)
|
||||
notice_multiline(gameforge.flame_dungeon._260_say,d.notice)
|
||||
d.kill_unique("door3")
|
||||
d.kill_unique("idoor3")
|
||||
d.setf("level",13)
|
||||
d.regen_file ("data/dungeon/flame_dungeon/".."fd_c.txt")
|
||||
server_timer ("killed_A_1", 12, d.get_map_index())
|
||||
elseif d.getf("level") == 13 then
|
||||
say(gameforge.flame_dungeon._270_say)
|
||||
say_title(gameforge.flame_dungeon._280_sayTitle..d.count_monster())
|
||||
elseif d.getf("level") == 4 then -- 474 178
|
||||
say(gameforge.flame_dungeon._320_notice)
|
||||
notice_multiline(gameforge.flame_dungeon._320_notice,d.notice)
|
||||
d.setf("level",14)
|
||||
d.kill_unique("door4")
|
||||
d.kill_unique("idoor4")
|
||||
d.set_regen_file ("data/dungeon/flame_dungeon/".."fd_d.txt")
|
||||
d.spawn_mob(6051,setting.LEVEL4_TARGET_pos[1],setting.LEVEL4_TARGET_pos[2] ) -- Ÿ<>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
elseif d.getf("level") == 14 then
|
||||
say(gameforge.flame_dungeon._330_say)
|
||||
say(gameforge.flame_dungeon._340_say)
|
||||
elseif d.getf("level") == 5 then -- 510 355
|
||||
say(gameforge.flame_dungeon._350_say)
|
||||
say(gameforge.flame_dungeon._360_say)
|
||||
notice_multiline(gameforge.flame_dungeon._350_say,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._360_say,d.notice)
|
||||
d.kill_unique("door5")
|
||||
d.kill_unique("idoor5")
|
||||
d.setf("level",15)
|
||||
d.set_regen_file ("data/dungeon/flame_dungeon/".."fd_e.txt")
|
||||
local vis = { 0,0,0,0,0,0,0}
|
||||
for i=1,7 do
|
||||
vis[i] = 0
|
||||
end
|
||||
for i = 1, 7 do -- <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD>ȯ
|
||||
local ran = number(1,7)
|
||||
local st = 0
|
||||
for j = 1, 50 do
|
||||
st = st + 1
|
||||
if st > 7 then
|
||||
st = 1
|
||||
end
|
||||
if vis[st] == 0 then
|
||||
ran = ran - 1
|
||||
if ran == 0 then
|
||||
vis[st] = 1
|
||||
d.set_unique("stone5_"..st, d.spawn_mob(20386, setting.LEVEL5_STONE_pos[i][1], setting.LEVEL5_STONE_pos[i][2]))
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif d.getf("level") == 15 then
|
||||
say(gameforge.flame_dungeon._370_say)
|
||||
elseif d.getf("level") == 6 then -- 507 490
|
||||
say(gameforge.flame_dungeon._380_say)
|
||||
notice_multiline(gameforge.flame_dungeon._380_say,d.notice)
|
||||
d.setf("level",16)
|
||||
d.kill_unique("door6")
|
||||
d.kill_unique("idoor6")
|
||||
d.set_regen_file ("data/dungeon/flame_dungeon/".."fd_f.txt")
|
||||
d.spawn_mob(8057, setting.LEVEL6_TARGET_pos[1],setting.LEVEL6_TARGET_pos[2]) -- Ÿ<>ٿ<EFBFBD><D9BF><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><>ȯ
|
||||
elseif d.getf("level") == 16 then
|
||||
say(gameforge.flame_dungeon._390_say)
|
||||
say(gameforge.flame_dungeon._400_say)
|
||||
elseif d.getf("level") == 7 then
|
||||
-- setskin(NOWINDOW)
|
||||
flame_dungeon.go_boss()
|
||||
else
|
||||
say(gameforge.flame_dungeon._410_say)
|
||||
end
|
||||
npc.unlock()
|
||||
end
|
||||
|
||||
|
||||
|
||||
when dungeon_end_timer.server_timer begin -- <20><><EFBFBD><EFBFBD> Ÿ<≯<EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>°<EFBFBD>)
|
||||
local setting = flame_dungeon.setting()
|
||||
if d.select(get_server_timer_arg()) then
|
||||
flame_dungeon.clear_timer(d.get_map_index())
|
||||
d.set_warp_location(62, setting.outside_entry_pos[1] , setting.outside_entry_pos[2])
|
||||
d.exit_all()
|
||||
d.setf("party_leader_pid", 0)
|
||||
end
|
||||
end
|
||||
|
||||
when killed_A_1.server_timer begin -- Ÿ<≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1 (level1,level3)
|
||||
if d.select(get_server_timer_arg()) then
|
||||
if d.count_monster() <= 0 then -- 1<><31><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if d.getf("level") == 11 then
|
||||
notice_multiline(gameforge.flame_dungeon._420_notice,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._430_notice,d.notice)
|
||||
else
|
||||
notice_multiline(gameforge.flame_dungeon._420_notice,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._430_notice,d.notice)
|
||||
end
|
||||
d.setf("level",0)
|
||||
else
|
||||
server_timer ("killed_A_1", 6, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
end
|
||||
when killed_A_2.server_timer begin -- Ÿ<≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2 (1<><31> 2 <20><><EFBFBD><EFBFBD><EFBFBD>ư<EFBFBD><C6B0>鼭 <20><><EFBFBD>ư<EFBFBD>)
|
||||
if d.select(get_server_timer_arg()) then
|
||||
if d.count_monster() <= 0 then -- 1<><31><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if d.getf("level") == 11 then
|
||||
notice_multiline(gameforge.flame_dungeon._420_notice,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._430_notice,d.notice)
|
||||
else
|
||||
notice_multiline(gameforge.flame_dungeon._420_notice,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._430_notice,d.notice)
|
||||
end
|
||||
d.setf("level",0)
|
||||
else
|
||||
server_timer ("killed_A_2", 6, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when kill with flame_dungeon.is_flamed(pc.get_map_index()) and d.getf("level") == 12 begin -- 2<><32><EFBFBD><EFBFBD> <20><><EFBFBD>μ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
local i = number(1, 100) -- 100<30><30><EFBFBD><EFBFBD> 1 Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if i == 1 then
|
||||
game.drop_item (30329, 1)
|
||||
end
|
||||
end
|
||||
when 20386.take with flame_dungeon.is_flamed(pc.get_map_index()) and item.vnum == 30329 and d.getf("level") == 12 begin -- 2<><32><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ծ<EFBFBD><D4BE><EFBFBD><EFBFBD><EFBFBD>
|
||||
local i = number(1, 5) -- 5<><35><EFBFBD><EFBFBD> 1 Ȯ<><C8AE><EFBFBD><EFBFBD> <20><>¥ <20><><EFBFBD><EFBFBD>
|
||||
if i == 1 then
|
||||
npc.purge()
|
||||
item.remove()
|
||||
notice_multiline(gameforge.flame_dungeon._440_notice,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._430_notice,d.notice)
|
||||
flame_dungeon.level_clear()
|
||||
else
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._450_say)
|
||||
end
|
||||
end
|
||||
|
||||
when 6051.kill with flame_dungeon.is_flamed(pc.get_map_index()) and d.getf("level") == 14 begin
|
||||
notice_multiline(gameforge.flame_dungeon._460_notice,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._430_notice,d.notice)
|
||||
flame_dungeon.level_clear()
|
||||
end
|
||||
|
||||
when kill with flame_dungeon.is_flamed(pc.get_map_index()) and d.getf("level") == 15 begin -- 5<><35><EFBFBD><EFBFBD> <20><><EFBFBD>μ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
local i = number(1, 30) -- 30<33><30><EFBFBD><EFBFBD> 1 Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if i == 1 then
|
||||
game.drop_item (30330, 1)
|
||||
end
|
||||
end
|
||||
when 20386.take with flame_dungeon.is_flamed(d.get_map_index()) and item.vnum == 30330 and d.getf("level") == 15 begin -- 5<><35><EFBFBD><EFBFBD> <20><>¥<EFBFBD><C2A5><EFBFBD><EFBFBD> <20>Ծ<EFBFBD><D4BE><EFBFBD><EFBFBD><EFBFBD>
|
||||
local setting = flame_dungeon.setting()
|
||||
if npc.get_vid() == d.get_unique_vid("stone5_1") then -- ù<><C3B9>° <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ڸ<EFBFBD><DAB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
npc.purge()
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._470_say)
|
||||
d.setf("stonekill",2) -- 2<><32> <20><><EFBFBD><EFBFBD> <20><EFBFBD><D7BF><EFBFBD>
|
||||
if d.count_monster() < 100 then
|
||||
d.regen_file ("data/dungeon/flame_dungeon/".."fd_e.txt")
|
||||
end
|
||||
elseif npc.get_vid() == d.get_unique_vid("stone5_2") then
|
||||
if d.getf("stonekill") == 2 then -- 2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>˵<EFBFBD> 2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>踦 <20>Կ<EFBFBD><D4BF><EFBFBD> <20><>
|
||||
npc.purge()
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._480_say)
|
||||
d.setf("stonekill",3)
|
||||
if d.count_monster() < 100 then
|
||||
d.regen_file ("data/dungeon/flame_dungeon/".."fd_e.txt")
|
||||
end
|
||||
else
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._490_say)
|
||||
-- say("2<><32>")
|
||||
end
|
||||
elseif npc.get_vid() == d.get_unique_vid("stone5_3") then
|
||||
if d.getf("stonekill") == 3 then
|
||||
npc.purge()
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._500_say)
|
||||
d.setf("stonekill",4)
|
||||
if d.count_monster() < 100 then
|
||||
d.regen_file ("data/dungeon/flame_dungeon/".."fd_e.txt")
|
||||
end
|
||||
else
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._490_say)
|
||||
-- say("3<><33>")
|
||||
end
|
||||
elseif npc.get_vid() == d.get_unique_vid("stone5_4") then
|
||||
if d.getf("stonekill") == 4 then
|
||||
npc.purge()
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._510_say)
|
||||
d.setf("stonekill",5)
|
||||
if d.count_monster() < 100 then
|
||||
d.regen_file ("data/dungeon/flame_dungeon/".."fd_e.txt")
|
||||
end
|
||||
else
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._490_say)
|
||||
-- say("4<><34>")
|
||||
end
|
||||
elseif npc.get_vid() == d.get_unique_vid("stone5_5") then
|
||||
if d.getf("stonekill") == 5 then
|
||||
npc.purge()
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._520_say)
|
||||
d.setf("stonekill",6)
|
||||
if d.count_monster() < 100 then
|
||||
d.regen_file ("data/dungeon/flame_dungeon/".."fd_e.txt")
|
||||
end
|
||||
else
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._490_say)
|
||||
-- say("5<><35>")
|
||||
end
|
||||
elseif npc.get_vid() == d.get_unique_vid("stone5_6") then
|
||||
if d.getf("stonekill") == 6 then
|
||||
npc.purge()
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._530_say)
|
||||
d.setf("stonekill",7)
|
||||
if d.count_monster() < 100 then
|
||||
d.regen_file ("data/dungeon/flame_dungeon/".."fd_e.txt")
|
||||
end
|
||||
else
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._490_say)
|
||||
-- say("6<><36>")
|
||||
end
|
||||
else
|
||||
if d.getf("stonekill") == 7 then
|
||||
npc.purge()
|
||||
item.remove()
|
||||
notice_multiline(gameforge.flame_dungeon._440_notice,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._430_notice,d.notice)
|
||||
flame_dungeon.level_clear()
|
||||
else
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._490_say)
|
||||
-- say("7<><37>")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when 8057.kill with flame_dungeon.is_flamed(d.get_map_index()) and d.getf("level") ==16 begin -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
notice_multiline(gameforge.flame_dungeon._540_notice,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._430_notice,d.notice)
|
||||
flame_dungeon.level_clear()
|
||||
end
|
||||
|
||||
when 6091.kill with flame_dungeon.is_flamed(d.get_map_index()) and d.getf("level") ==17 begin -- <20><><EFBFBD><EFBFBD> <20><EFBFBD><D7BF><EFBFBD><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.flame_dungeon._550_notice,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._560_notice,d.notice)
|
||||
server_timer("dungeon_end_timer", 60,d.get_map_index())
|
||||
flame_dungeon.level_clear()
|
||||
|
||||
-- <20><>Ƽ<EFBFBD><C6BC> <20><>, <20>߸<EFBFBD>õ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ(104<30><34>, 105<30><35> <20><><EFBFBD><EFBFBD>Ʈ) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ Ŭ<><C5AC><EFBFBD><EFBFBD> <20>ǵ<EFBFBD><C7B5><EFBFBD>.
|
||||
if party.is_party() then
|
||||
party.setf("flame_dungeon_boss_kill_count", 1)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
@ -1,541 +0,0 @@
|
||||
quest main_quest_flame_lv100 begin
|
||||
state start begin
|
||||
end
|
||||
state state0 begin
|
||||
when login or levelup or enter with pc.level >= 100 begin
|
||||
set_state (state1_1)
|
||||
end
|
||||
end
|
||||
-- Ź<><C5B9><EFBFBD><EFBFBD> <20><>ü
|
||||
state state1_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv100._010_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv100._010_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv100._020_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv100._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv100._030_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv100._040_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv100._060_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv100._070_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv100._080_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state1_2)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state1_2 begin
|
||||
when enter begin
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> óġ <20><> <20><><EFBFBD><EFBFBD>
|
||||
pc.setqf("kill_count_1", 0)
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv100._090_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv100._010_sendLetter)
|
||||
--<2D><><EFBFBD><EFBFBD> óġ <20><> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
q.set_counter_name(gameforge.main_quest_lv98._680_counterName)
|
||||
main_quest_flame_lv100.kill_count()
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv100._100_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv100._110_say)
|
||||
--<2D><><EFBFBD><EFBFBD> óġ <20><> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
say(gameforge.main_quest_lv98._680_counterName)
|
||||
say(string.format(gameforge.main_quest_lv98._670_sayReward, 300 - pc.getqf("kill_count_1")))
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv100._010_sendLetter begin
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv100._120_say)
|
||||
end
|
||||
|
||||
when 2202.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
main_quest_flame_lv100.kill_count()
|
||||
end
|
||||
|
||||
when 2203.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
main_quest_flame_lv100.kill_count()
|
||||
end
|
||||
|
||||
when 2204.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
main_quest_flame_lv100.kill_count()
|
||||
end
|
||||
|
||||
when 2205.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
main_quest_flame_lv100.kill_count()
|
||||
end
|
||||
|
||||
-- <20><> <20>Ʒ<EFBFBD><C6B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> vnum<75><6D> <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> Ŭ<><C5AC><EFBFBD><EFBFBD> <20>ǵ<EFBFBD><C7B5><EFBFBD> <20>Ͽ<EFBFBD><CFBF><EFBFBD>.
|
||||
when 7020.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
main_quest_flame_lv100.kill_count()
|
||||
end
|
||||
|
||||
when 7021.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
main_quest_flame_lv100.kill_count()
|
||||
end
|
||||
|
||||
when 7022.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
main_quest_flame_lv100.kill_count()
|
||||
end
|
||||
|
||||
when 7023.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
main_quest_flame_lv100.kill_count()
|
||||
end
|
||||
|
||||
function kill_count()
|
||||
local total_remain = 0
|
||||
local remain1 = 300 - pc.getqf("kill_count_1")
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
total_remain = total_remain + remain1
|
||||
q.set_counter_value(total_remain)
|
||||
if total_remain == 0 then
|
||||
set_state ("state1_3")
|
||||
end
|
||||
end
|
||||
|
||||
when leave begin
|
||||
pc.setqf("kill_count_1", 0)
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state1_3 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv100._130_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv100._010_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv100._010_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv100._140_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv100._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv100._150_say)
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
wait()--reward
|
||||
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 38143000))
|
||||
pc.give_exp2(38143000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 149000))
|
||||
pc.change_money(149000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(30051),1))
|
||||
pc.give_item2(30051, 1)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(50814),10))
|
||||
pc.give_item2(50814, 10)
|
||||
say()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state2_1)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Ź<><C5B9><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>1-1
|
||||
state state2_1 begin
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv100._160_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20001)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20001))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv100._160_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv100._170_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20001.chat.gameforge.main_quest_flame_lv100._160_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.main_quest_flame_lv100._180_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.main_quest_flame_lv100._190_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv100._200_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.main_quest_flame_lv100._210_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv100._220_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.main_quest_flame_lv100._230_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state2_2)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state2_2 begin -- <20><><EFBFBD>Ḧ <20><><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD> <20>κ<EFBFBD>. <20><><EFBFBD>Ḧ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ľ<EFBFBD><C4BE><EFBFBD> <20>ȵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> state <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>Ϸ<EFBFBD><CFB7><EFBFBD> <20><> <20>ִ<EFBFBD>.
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv100._240_notice,notice)
|
||||
end
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv100._160_sendLetter)
|
||||
q.set_counter_name(gameforge.main_quest_flame_lv100._250_say)
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv100._260_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv100._270_say)
|
||||
say(gameforge.main_quest_flame_lv100._250_say)
|
||||
|
||||
local remain1 = 10 - pc.count_item(90010)
|
||||
local remain2 = 50 - pc.count_item(30010)
|
||||
local remain3 = 10 - pc.count_item(30025)
|
||||
local remain4 = 200 - pc.count_item(51001)
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
if remain2 < 0 then
|
||||
remain2 = 0
|
||||
end
|
||||
if remain3 < 0 then
|
||||
remain3 = 0
|
||||
end
|
||||
if remain4 < 0 then
|
||||
remain4 = 0
|
||||
end
|
||||
|
||||
say(string.format(gameforge.main_quest_lv98._690_sayReward,item_name(90010) ,remain1,item_name(30010) ,remain2))
|
||||
say(string.format(gameforge.main_quest_lv98._690_sayReward,item_name(30025) , remain3,item_name(51001) , remain4))
|
||||
say()
|
||||
q.set_counter_value(remain1 + remain2 + remain3 + remain4)
|
||||
|
||||
local check = remain1 + remain2 + remain3 + remain4
|
||||
|
||||
if check <= 0 then
|
||||
set_state (state2_3)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
when 20001.chat.gameforge.main_quest_flame_lv100._160_sendLetter begin
|
||||
if pc.count_item(90010) >= 10 and pc.count_item(30010) >= 50
|
||||
and pc.count_item(30025) >= 10 and pc.count_item(51001) >= 200 then
|
||||
|
||||
pc.remove_item ( 90010,10)
|
||||
pc.remove_item ( 30010,50)
|
||||
pc.remove_item ( 30025,10)
|
||||
pc.remove_item ( 51001,200)
|
||||
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.main_quest_flame_lv100._280_say)
|
||||
wait()
|
||||
|
||||
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 48584000))
|
||||
pc.give_exp2(48584000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 150000))
|
||||
pc.change_money(150000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(30015),2))
|
||||
pc.give_item2(30015, 2)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(70043),1))
|
||||
pc.give_item2_select(70043)
|
||||
item.set_socket(2, 60)
|
||||
set_state (state3_1)
|
||||
else
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.main_quest_flame_lv100._290_say)
|
||||
end
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state2_3 begin -- <20><><EFBFBD>Ḧ <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ҵ<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>Ŀ<EFBFBD> <20><><EFBFBD>Ḧ <20>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD>ݼ<EFBFBD><DDBC>翡<EFBFBD><E7BFA1> <20><><EFBFBD><EFBFBD> <20>ɸ<EFBFBD> state2_2<5F><32> <20>ٽ<EFBFBD> <20>Ѿ<D1BE><EEB0A1> <20>ȴ<EFBFBD>.
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv100._300_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv100._160_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20001)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20001))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv100._160_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv100._310_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20001.chat.gameforge.main_quest_flame_lv100._160_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
if pc.count_item(90010) >= 10 and pc.count_item(30010) >= 50
|
||||
and pc.count_item(30025) >= 10 and pc.count_item(51001) >= 200 then
|
||||
|
||||
pc.remove_item ( 90010,10)
|
||||
pc.remove_item ( 30010,50)
|
||||
pc.remove_item ( 30025,10)
|
||||
pc.remove_item ( 51001,200)
|
||||
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.main_quest_flame_lv100._280_say)
|
||||
wait()
|
||||
|
||||
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 48584000))
|
||||
pc.give_exp2(48584000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 150000))
|
||||
pc.change_money(150000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(30015),2))
|
||||
pc.give_item2(30015, 2)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(70043),1))
|
||||
pc.give_item2_select(70043)
|
||||
item.set_socket(2, 60)
|
||||
say()
|
||||
|
||||
set_state (state3_1)
|
||||
else
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.main_quest_flame_lv100._290_say)
|
||||
set_state (state2_2)
|
||||
end
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
-- Ź<><C5B9><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>1-2
|
||||
state state3_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv100._320_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20001)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20001))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv100._320_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv100._170_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20001.chat.gameforge.main_quest_flame_lv100._320_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.main_quest_flame_lv100._330_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv100._340_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.main_quest_flame_lv100._350_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state3_2)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state3_2 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv100._240_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv100._320_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20016)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20016))
|
||||
end
|
||||
q.set_counter_name(gameforge.main_quest_flame_lv100._250_say)
|
||||
q.set_counter_value(1)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv100._360_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv100._370_say)
|
||||
say(gameforge.main_quest_flame_lv100._250_say)
|
||||
say(gameforge.main_quest_flame_lv100._380_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20016.chat.gameforge.main_quest_flame_lv100._320_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20016))
|
||||
say(gameforge.main_quest_flame_lv100._390_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv100._400_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20016))
|
||||
say(gameforge.main_quest_flame_lv100._410_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv100._420_say)
|
||||
|
||||
pc.give_item2(31077, 1)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state3_3)
|
||||
end
|
||||
|
||||
when 20001.chat.gameforge.main_quest_flame_lv100._320_sendLetter begin
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.main_quest_flame_lv100._430_say)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state3_3 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv100._440_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv100._320_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20001)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20001))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv100._320_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv100._310_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20001.chat.gameforge.main_quest_flame_lv100._320_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
pc.remove_item(31077, pc.count_item(31077))
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.main_quest_flame_lv100._450_say)
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
wait()--reward
|
||||
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 35843000))
|
||||
pc.give_exp2(35843000)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 152000))
|
||||
pc.change_money(152000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(71095),1))
|
||||
pc.give_item2(71095, 1)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(50708),10))
|
||||
pc.give_item2(50708, 10)
|
||||
|
||||
say()
|
||||
say_reward(string.format(gameforge.main_quest_flame_lv99._430_say, 101))
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (__COMPLETE__)
|
||||
set_quest_state ("main_quest_flame_lv101", "state0")
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
state __COMPLETE__ begin
|
||||
when enter begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
end
|
@ -1,521 +0,0 @@
|
||||
quest main_quest_flame_lv101 begin
|
||||
state start begin
|
||||
end
|
||||
state state0 begin
|
||||
when login or levelup or enter with pc.level >= 101 begin
|
||||
set_state (state1_1)
|
||||
end
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü
|
||||
state state1_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv101._010_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv101._010_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv101._020_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv101._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv101._030_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv101._040_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv101._050_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv101._070_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv101._080_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state1_2)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state1_2 begin -- <20>ܼ<EFBFBD> X, <20><><EFBFBD><EFBFBD> X
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv101._090_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv101._010_sendLetter)
|
||||
q.set_counter_name(gameforge.main_quest_lv97._670_counterName)
|
||||
q.set_counter_value(2)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv101._100_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv101._110_say)
|
||||
|
||||
say(gameforge.main_quest_lv97._670_counterName)
|
||||
say(string.format(gameforge.main_quest_lv90._1190_say, item_name(31074), 1))
|
||||
say(string.format(gameforge.main_quest_lv90._1190_say, item_name(31079), 1))
|
||||
say()
|
||||
say_reward(gameforge.main_quest_flame_lv101._120_sayReward)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv101._010_sendLetter begin
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv101._130_say)
|
||||
end
|
||||
|
||||
when 20393.click begin
|
||||
say(gameforge.main_quest_flame_lv101._140_say)
|
||||
set_state (state1_3) -- <20>ܼ<EFBFBD> X, <20><><EFBFBD><EFBFBD> O
|
||||
end
|
||||
|
||||
when kill with pc.get_map_index() >= 351 * 10000 and pc.get_map_index() < (351 + 1) *10000 begin
|
||||
if number(1,100) == 1 then
|
||||
pc.give_item2(31074, 1)
|
||||
set_state (state1_4) -- <20>ܼ<EFBFBD> O, <20><><EFBFBD><EFBFBD> X
|
||||
end
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state1_3 begin -- <20>ܼ<EFBFBD> X, <20><><EFBFBD><EFBFBD> O
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv101._150_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv101._010_sendLetter)
|
||||
q.set_counter_name(gameforge.main_quest_lv97._670_counterName)
|
||||
q.set_counter_value(1)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv101._100_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv101._110_say)
|
||||
|
||||
say(gameforge.main_quest_lv97._670_counterName)
|
||||
say(string.format(gameforge.main_quest_lv90._1190_say, item_name(31074), 1))
|
||||
say(string.format(gameforge.main_quest_lv90._1190_say, item_name(31079), 0))
|
||||
say()
|
||||
say_reward(gameforge.main_quest_flame_lv101._120_sayReward)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv101._010_sendLetter begin
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv101._160_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv101._180_say)
|
||||
end
|
||||
|
||||
when kill with pc.get_map_index() >= 351 * 10000 and pc.get_map_index() < (351 + 1) *10000 begin
|
||||
if number(1,100) == 1 then
|
||||
pc.give_item2(31074, 1)
|
||||
set_state ("state1_5") -- <20>ܼ<EFBFBD> O, <20><><EFBFBD><EFBFBD> O
|
||||
end
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state1_4 begin -- <20>ܼ<EFBFBD> O, <20><><EFBFBD><EFBFBD> X
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv101._190_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv101._010_sendLetter)
|
||||
q.set_counter_name(gameforge.main_quest_lv97._670_counterName)
|
||||
q.set_counter_value(1)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv101._100_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv101._110_say)
|
||||
|
||||
say(gameforge.main_quest_lv97._670_counterName)
|
||||
say(string.format(gameforge.main_quest_lv90._1190_say, item_name(31074), 0))
|
||||
say(string.format(gameforge.main_quest_lv90._1190_say, item_name(31079), 1))
|
||||
say()
|
||||
say_reward(gameforge.main_quest_flame_lv101._120_sayReward)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv101._010_sendLetter begin
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv101._200_say)
|
||||
end
|
||||
|
||||
when 20393.click begin
|
||||
say(gameforge.main_quest_flame_lv101._140_say)
|
||||
set_state (state1_5)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state1_5 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv101._210_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv101._010_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv101._010_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv101._220_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv101._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
pc.remove_item(31074, pc.count_item(31074))
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv101._230_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv101._250_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(gameforge.main_quest_flame_lv101._260_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv101._270_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv101._280_say)
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
wait()--reward
|
||||
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 37003000))
|
||||
pc.give_exp2(37003000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 153000))
|
||||
pc.change_money(153000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(30047),2))
|
||||
pc.give_item2(30047, 2)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(27992),2)) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
pc.give_item2(27992, 1)
|
||||
pc.give_item2(27992, 1)
|
||||
say()
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state2_1)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
-- <20>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ص<EFBFBD>
|
||||
state state2_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv101._290_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv101._290_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv101._300_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_flame_lv101._290_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv101._310_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv101._330_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv101._340_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv101._350_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state2_2)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state2_2 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv101._360_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv101._290_sendLetter)
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
q.set_counter_name(gameforge.main_quest_lv97._670_counterName)
|
||||
main_quest_flame_lv101.item_count()
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv101._100_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv101._520_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
say(gameforge.main_quest_lv97._670_counterName)
|
||||
say(string.format(gameforge.main_quest_lv90._1190_say,item_name(31080), 1 - pc.count_item(31080)))
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_flame_lv101._290_sendLetter begin
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv101._370_say)
|
||||
end
|
||||
|
||||
when 2206.kill begin
|
||||
if number(1,100) == 1 then
|
||||
pc.give_item2(31080, 1)
|
||||
main_quest_flame_lv101.item_count()
|
||||
end
|
||||
end
|
||||
|
||||
function item_count()
|
||||
if pc.count_item(31080) >= 1 then
|
||||
set_state ("state2_3")
|
||||
end
|
||||
q.set_counter_value(1 - pc.count_item(31080))
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state2_3 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv101._380_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv101._290_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv101._290_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv101._390_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_flame_lv101._290_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
pc.remove_item(31080, pc.count_item(31080))
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv101._400_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
wait()--reward
|
||||
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 48584000))
|
||||
pc.give_exp2( 48584000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 154000))
|
||||
pc.change_money(154000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(72024),1)) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȭ
|
||||
pc.give_item2_select(72024)
|
||||
item.set_socket(2, 180)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(71094),1)) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
pc.give_item2(71094, 1)
|
||||
say()
|
||||
set_state (state2_4)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state2_4 begin
|
||||
when enter begin
|
||||
--<2D>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
pc.setqf("limit_time", get_time() + 60*60*24)
|
||||
end
|
||||
|
||||
when login begin
|
||||
--<2D>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
local remain_time = pc.getqf("limit_time") - get_time()
|
||||
timer("time_over", remain_time)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv101._290_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv101._290_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv101._390_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
local remain_time = pc.getqf("limit_time") - get_time()
|
||||
local left_hour = math.mod(remain_time / (60 * 60), 24);
|
||||
local left_minute = math.mod(remain_time / 60, 60);
|
||||
say(string.format(gameforge.main_quest_flame_lv101._410_say, left_hour, left_minute))
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_flame_lv101._290_sendLetter begin
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv101._420_say)
|
||||
end
|
||||
|
||||
when time_over.timer begin
|
||||
set_state ("state3_1")
|
||||
end
|
||||
|
||||
when leave begin
|
||||
pc.setqf("limit_time", 0);
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
state state3_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv101._430_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv101._430_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv101._300_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_flame_lv101._430_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv101._440_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv101._450_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv101._340_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
set_state (state3_2)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state3_2 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv101._470_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv101._430_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv101._480_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv101._490_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv101._430_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv101._500_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv101._510_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
say_title(gameforge.main_quest_lv27._120_sayTitle)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 48584000))
|
||||
pc.give_exp2( 48584000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 156000))
|
||||
pc.change_money( 156000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(71095),1)) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
pc.give_item2(71095, 1)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(72016),1)) -- <20><>3<EFBFBD><33> <20><>
|
||||
pc.give_item2_select(72016)
|
||||
item.set_socket(2, 60)
|
||||
say()
|
||||
say_title(string.format(gameforge.main_quest_flame_lv99._430_say, 102))
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (__COMPLETE__)
|
||||
set_quest_state ("main_quest_flame_lv102", "state0")
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
state __COMPLETE__ begin
|
||||
when enter begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
end
|
@ -1,623 +0,0 @@
|
||||
quest main_quest_flame_lv102 begin
|
||||
state start begin
|
||||
end
|
||||
state state0 begin
|
||||
when login or levelup or enter with pc.level >= 102 begin
|
||||
set_state (state1_1)
|
||||
end
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD>
|
||||
state state1_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv102._010_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv102._010_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv102._020_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv102._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv102._030_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv102._040_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv102._050_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv102._060_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state1_2)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
state state1_2 begin --<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD> <20>κ<EFBFBD>.
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv102._070_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv102._010_sendLetter)
|
||||
q.set_counter_name(gameforge.main_quest_lv97._670_counterName)
|
||||
main_quest_flame_lv102.kill_count()
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv102._080_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv102._090_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
local remain1 = 30 - pc.getqf("mob1")
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
local remain2 = 30 - pc.getqf("mob2")
|
||||
if remain2 < 0 then
|
||||
remain2 = 0
|
||||
end
|
||||
local remain3 = 30 - pc.getqf("mob3")
|
||||
if remain3 < 0 then
|
||||
remain3 = 0
|
||||
end
|
||||
local remain4 = 30 - pc.getqf("mob4")
|
||||
if remain4 < 0 then
|
||||
remain4 = 0
|
||||
end
|
||||
say(gameforge.main_quest_lv97._670_counterName)
|
||||
say(string.format(gameforge.main_quest_flame_lv102._100_say,mob_name(6005), remain1,mob_name(6006), remain2))
|
||||
say(string.format(gameforge.main_quest_flame_lv102._110_say,mob_name(6007), remain3,mob_name(6008), remain4))
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv102._010_sendLetter begin
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv102._120_say)
|
||||
end
|
||||
|
||||
when 6005.kill begin
|
||||
if number(1,1) == 1 then
|
||||
local kill_count = pc.getqf("mob1")
|
||||
pc.setqf("mob1", kill_count + 1)
|
||||
main_quest_flame_lv102.kill_count()
|
||||
end
|
||||
end
|
||||
|
||||
when 6006.kill begin
|
||||
if number(1,1) == 1 then
|
||||
local kill_count = pc.getqf("mob2")
|
||||
pc.setqf("mob2", kill_count + 1)
|
||||
main_quest_flame_lv102.kill_count()
|
||||
end
|
||||
end
|
||||
|
||||
when 6007.kill begin
|
||||
if number(1,1) == 1 then
|
||||
local kill_count = pc.getqf("mob3")
|
||||
pc.setqf("mob3", kill_count + 1)
|
||||
main_quest_flame_lv102.kill_count()
|
||||
end
|
||||
end
|
||||
|
||||
when 6008.kill begin
|
||||
if number(1,1) == 1 then
|
||||
local kill_count = pc.getqf("mob4")
|
||||
pc.setqf("mob4", kill_count + 1)
|
||||
main_quest_flame_lv102.kill_count()
|
||||
end
|
||||
end
|
||||
|
||||
function kill_count()
|
||||
local total_remain = 0
|
||||
local remain1 = 30 - pc.getqf("mob1")
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
local remain2 = 30 - pc.getqf("mob2")
|
||||
if remain2 < 0 then
|
||||
remain2 = 0
|
||||
end
|
||||
local remain3 = 30 - pc.getqf("mob3")
|
||||
if remain3 < 0 then
|
||||
remain3 = 0
|
||||
end
|
||||
local remain4 = 30 - pc.getqf("mob4")
|
||||
if remain4 < 0 then
|
||||
remain4 = 0
|
||||
end
|
||||
total_remain = remain1 + remain2 + remain3 + remain4
|
||||
q.set_counter_value(total_remain)
|
||||
if total_remain == 0 then
|
||||
set_state ("state1_3")
|
||||
end
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state1_3 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv102._130_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv102._010_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv102._010_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv102._140_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv102._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv102._150_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv102._170_say)
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
wait()--reward
|
||||
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 49584000))
|
||||
pc.give_exp2( 49584000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 157000))
|
||||
pc.change_money(157000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(71095),1))
|
||||
pc.give_item2(71095, 1)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(72723),1)) -- ȭ<><C8AD><EFBFBD><EFBFBD> <20>ູ(<28><>)
|
||||
pc.give_item2(72723, 1)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(70050),1)) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǥ
|
||||
pc.give_item2(70050, 1)
|
||||
say()
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state2_1)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD> <20>߸<EFBFBD>õ?!
|
||||
state state2_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv102._180_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv102._180_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv102._190_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_flame_lv102._180_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv102._200_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv102._220_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv102._250_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv102._050_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv102._260_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state2_2)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state2_2 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv102._270_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv102._180_sendLetter)
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
q.set_counter_name(gameforge.main_quest_lv97._670_counterName)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv102._280_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv102._290_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
say(gameforge.main_quest_lv97._670_counterName)
|
||||
say(string.format(gameforge.main_quest_lv90._1190_say,item_name(31081), 10 - pc.count_item(31081)))
|
||||
say_reward(gameforge.main_quest_flame_lv102._300_sayReward)
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_flame_lv102._180_sendLetter begin
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv102._310_say)
|
||||
end
|
||||
|
||||
when kill with pc.get_map_index() >= 351 * 10000 and pc.get_map_index() < (351 + 1) *10000 begin
|
||||
if number(1,50) == 1 then
|
||||
pc.give_item2(31081, 1)
|
||||
main_quest_flame_lv102.item_count()
|
||||
end
|
||||
end
|
||||
|
||||
function item_count()
|
||||
if pc.count_item(31081) >= 10 then
|
||||
set_state ("state2_3")
|
||||
end
|
||||
q.set_counter_value(10 - pc.count_item(31081))
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state2_3 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv102._320_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv102._180_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv102._180_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv102._140_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_flame_lv102._180_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
pc.remove_item(31081, pc.count_item(31081))
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv102._330_say)
|
||||
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
say_title(gameforge.main_quest_lv27._120_sayTitle)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 52484000))
|
||||
pc.give_exp2( 52484000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 159000))
|
||||
pc.change_money( 159000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(72301),5)) -- <20>ູ<EFBFBD><E0BAB9> <20><>
|
||||
pc.give_item2(72301, 1)
|
||||
pc.give_item2(72301, 1)
|
||||
pc.give_item2(72301, 1)
|
||||
pc.give_item2(72301, 1)
|
||||
pc.give_item2(72301, 1)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state3_1)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
-- Ź<><C5B9><EFBFBD><EFBFBD> <20><>ȭ
|
||||
state state3_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv102._350_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv102._350_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv102._190_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_flame_lv102._350_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv102._360_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv102._380_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv102._390_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv102._050_say)
|
||||
|
||||
set_state (state3_2)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state3_2 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv102._410_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv102._350_sendLetter)
|
||||
q.set_counter_name(gameforge.main_quest_lv97._670_counterName)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv102._420_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv102._430_say)
|
||||
say(gameforge.main_quest_lv97._670_counterName)
|
||||
|
||||
local remain1 = 50 - pc.count_item(50819)
|
||||
local remain2 = 100 - pc.count_item(51001)
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
if remain2 < 0 then
|
||||
remain2 = 0
|
||||
end
|
||||
|
||||
say(string.format(gameforge.main_quest_lv98._690_sayReward,item_name(50819) ,remain1,item_name(51001) ,remain2))
|
||||
|
||||
q.set_counter_value(remain1 + remain2)
|
||||
|
||||
if remain1 + remain2 == 0 then
|
||||
set_state ("state3_3")
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
when 20017.chat.gameforge.main_quest_flame_lv102._350_sendLetter begin
|
||||
if pc.count_item(50819) >= 50 and pc.count_item(51001) >= 100 then
|
||||
pc.remove_item ( 50819,50)
|
||||
pc.remove_item ( 51001,100)
|
||||
|
||||
say_title(mob_name(20017))
|
||||
say(gameforge.main_quest_flame_lv102._440_say)
|
||||
wait()
|
||||
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 48584000))
|
||||
pc.give_exp2( 48584000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 160000))
|
||||
pc.change_money( 160000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(50708),10)) -- <20><><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>
|
||||
pc.give_item2(50708, 10)
|
||||
say()
|
||||
|
||||
set_state (state4_1)
|
||||
else
|
||||
say_title(mob_name(20017))
|
||||
say(gameforge.main_quest_flame_lv102._450_say)
|
||||
end
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state3_3 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv102._460_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv102._350_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20017)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20017))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv102._350_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv102._470_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20017.chat.gameforge.main_quest_flame_lv102._350_sendLetter begin
|
||||
if pc.count_item(50819) >= 50 and pc.count_item(51001) >= 100 then
|
||||
pc.remove_item ( 50819,50)
|
||||
pc.remove_item ( 51001,100)
|
||||
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20017))
|
||||
say(gameforge.main_quest_flame_lv102._440_say)
|
||||
wait()
|
||||
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 48584000))
|
||||
pc.give_exp2( 48584000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 160000))
|
||||
pc.change_money( 160000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(50708),10)) -- <20><><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>
|
||||
pc.give_item2(50708, 10)
|
||||
say()
|
||||
|
||||
set_state (state4_1)
|
||||
else
|
||||
say_title(mob_name(20017))
|
||||
say(gameforge.main_quest_flame_lv102._450_say)
|
||||
set_state (state3_2)
|
||||
end
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- <20><>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD>
|
||||
state state4_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv102._480_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20017)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20017))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv102._480_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv102._490_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20017.chat.gameforge.main_quest_flame_lv102._480_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20017))
|
||||
say(gameforge.main_quest_flame_lv102._500_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv102._510_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20017))
|
||||
say(gameforge.main_quest_flame_lv102._520_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv102._050_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20017))
|
||||
say(gameforge.main_quest_flame_lv102._530_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state4_2)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state4_2 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv102._540_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv102._480_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv102._480_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv102._140_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20017.chat.gameforge.main_quest_flame_lv102._480_sendLetter begin
|
||||
say_title(mob_name(20017))
|
||||
say(gameforge.main_quest_flame_lv102._550_say)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv102._480_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv102._560_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv102._570_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv102._580_say)
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
wait()--reward
|
||||
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 42584000))
|
||||
pc.give_exp2(42584000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 161000))
|
||||
pc.change_money( 161000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(76011),1)) -- <20><><EFBFBD><EFBFBD>
|
||||
pc.give_item2_select(76011)
|
||||
item.set_socket(2, 60)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(50707),5)) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
pc.give_item2(50707, 5)
|
||||
say()
|
||||
say_title(string.format(gameforge.main_quest_flame_lv99._430_say, 103))
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (__COMPLETE__)
|
||||
set_quest_state ("main_quest_flame_lv103", "state0")
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
state __COMPLETE__ begin
|
||||
when enter begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
end
|
@ -1,694 +0,0 @@
|
||||
quest main_quest_flame_lv103 begin
|
||||
state start begin
|
||||
end
|
||||
state state0 begin
|
||||
when login or levelup or enter with pc.level >= 103 begin
|
||||
set_state (state1_1)
|
||||
end
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD>漺<EFBFBD><E6BCBA> <20><><EFBFBD><EFBFBD>
|
||||
state state1_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv103._010_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv103._010_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv103._020_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv103._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv103._030_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv103._040_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv103._220_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv103._060_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state1_2)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state1_2 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv103._070_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv103._010_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20393)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20393))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv103._080_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv103._090_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv103._010_sendLetter begin
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv103._100_say)
|
||||
end
|
||||
|
||||
when 20393.click begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20393))
|
||||
say(gameforge.main_quest_flame_lv103._110_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state1_3)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state1_3 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv103._010_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv103._010_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv103._120_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv103._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv103._130_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv103._150_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv103._170_say)
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
wait()--reward
|
||||
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 42554000))
|
||||
pc.give_exp2( 42554000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 163000))
|
||||
pc.change_money( 163000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(71095),1))
|
||||
pc.give_item2(71095, 1)
|
||||
say()
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state2_1)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
state state2_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv103._180_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv103._180_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv103._020_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv103._180_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv103._190_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv103._200_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv103._210_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv103._220_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state2_2)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state2_2 begin
|
||||
when enter begin
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> óġ <20><> <20><><EFBFBD><EFBFBD>
|
||||
pc.setqf("kill_count_1", 0)
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv103._230_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv103._180_sendLetter)
|
||||
--<2D><><EFBFBD><EFBFBD> óġ <20><> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
q.set_counter_name(gameforge.main_quest_lv98._680_counterName)
|
||||
main_quest_flame_lv103.kill_count_state2_2()
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv103._240_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv103._250_say)
|
||||
--<2D><><EFBFBD><EFBFBD> óġ <20><> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
say(gameforge.main_quest_lv98._680_counterName)
|
||||
say(string.format(gameforge.main_quest_lv98._670_sayReward,"<22><><EFBFBD>漺 <20><><EFBFBD><EFBFBD>", 1000 - pc.getqf("kill_count_1")))
|
||||
say_reward(gameforge.main_quest_flame_lv103._260_sayReward)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv103._180_sendLetter begin
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv103._270_say)
|
||||
end
|
||||
|
||||
when kill with pc.get_map_index() >= 351 * 10000 and pc.get_map_index() < (351 + 1) *10000 begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
main_quest_flame_lv103.kill_count_state2_2()
|
||||
end
|
||||
|
||||
function kill_count_state2_2()
|
||||
local total_remain = 0
|
||||
local remain1 = 1000 - pc.getqf("kill_count_1")
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
total_remain = remain1
|
||||
q.set_counter_value(total_remain)
|
||||
if total_remain == 0 then
|
||||
set_state ("state2_3")
|
||||
end
|
||||
end
|
||||
|
||||
when leave begin
|
||||
pc.setqf("kill_count_1", 0)
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state2_3 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv103._280_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv103._180_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv103._180_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv103._120_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv103._180_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv103._290_say)
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
wait()--reward
|
||||
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 53784000))
|
||||
pc.give_exp2(53784000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 164000))
|
||||
pc.change_money(164000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(71095),1))
|
||||
pc.give_item2(71095, 1)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(70024),1)) -- <20>ູ<EFBFBD><E0BAB9> <20><><EFBFBD><EFBFBD>
|
||||
pc.give_item2(70024, 1)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(30039),3)) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
pc.give_item2(30039, 3)
|
||||
say()
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state3_1)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD>漺<EFBFBD><E6BCBA> <20><>ĩ<EFBFBD>Ÿ<EFBFBD>
|
||||
state state3_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv103._300_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv103._300_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv103._020_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv103._300_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv103._310_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv103._220_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state3_2)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state3_2 begin
|
||||
when enter begin
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> óġ <20><> <20><><EFBFBD><EFBFBD>
|
||||
pc.setqf("kill_count_1", 0)
|
||||
pc.setqf("kill_count_2", 0)
|
||||
pc.setqf("kill_count_3", 0)
|
||||
pc.setqf("kill_count_4", 0)
|
||||
pc.setqf("kill_count_5", 0)
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv103._330_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv103._300_sendLetter)
|
||||
--<2D><><EFBFBD><EFBFBD> óġ <20><> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
q.set_counter_name(gameforge.main_quest_lv98._680_counterName)
|
||||
main_quest_flame_lv103.kill_count_state3_2()
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv103._340_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv103._350_say)
|
||||
--<2D><><EFBFBD><EFBFBD> óġ <20><> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
say(gameforge.main_quest_lv98._680_counterName)
|
||||
local total_remain = 0
|
||||
local remain1 = 50 - pc.getqf("kill_count_1")
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
total_remain = total_remain + remain1
|
||||
local remain2 = 50 - pc.getqf("kill_count_2")
|
||||
if remain2 < 0 then
|
||||
remain2 = 0
|
||||
end
|
||||
total_remain = total_remain + remain2
|
||||
local remain3 = 50 - pc.getqf("kill_count_3")
|
||||
if remain3 < 0 then
|
||||
remain3 = 0
|
||||
end
|
||||
total_remain = total_remain + remain3
|
||||
local remain4 = 50 - pc.getqf("kill_count_4")
|
||||
if remain4 < 0 then
|
||||
remain4 = 0
|
||||
end
|
||||
total_remain = total_remain + remain4
|
||||
local remain5 = 50 - pc.getqf("kill_count_5")
|
||||
if remain5 < 0 then
|
||||
remain5 = 0
|
||||
end
|
||||
say(string.format(gameforge.main_quest_lv98._690_sayReward ,mob_name(6005), remain1,mob_name(6006), remain2))
|
||||
say(string.format(gameforge.main_quest_lv98._690_sayReward ,mob_name(6007), remain3,mob_name(6008), remain4))
|
||||
say(string.format(gameforge.main_quest_lv98._670_sayReward,mob_name(6009), remain5))
|
||||
say_reward(gameforge.main_quest_flame_lv103._260_sayReward)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv103._300_sendLetter begin
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv103._360_say)
|
||||
end
|
||||
|
||||
when 6005.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
main_quest_flame_lv103.kill_count_state3_2()
|
||||
end
|
||||
|
||||
when 6006.kill begin
|
||||
local kill_count = pc.getqf("kill_count_2")
|
||||
pc.setqf("kill_count_2", kill_count+1)
|
||||
main_quest_flame_lv103.kill_count_state3_2()
|
||||
end
|
||||
|
||||
when 6007.kill begin
|
||||
local kill_count = pc.getqf("kill_count_3")
|
||||
pc.setqf("kill_count_3", kill_count+1)
|
||||
main_quest_flame_lv103.kill_count_state3_2()
|
||||
end
|
||||
|
||||
when 6008.kill begin
|
||||
local kill_count = pc.getqf("kill_count_4")
|
||||
pc.setqf("kill_count_4", kill_count+1)
|
||||
main_quest_flame_lv103.kill_count_state3_2()
|
||||
end
|
||||
|
||||
when 6009.kill begin
|
||||
local kill_count = pc.getqf("kill_count_5")
|
||||
pc.setqf("kill_count_5", kill_count+1)
|
||||
main_quest_flame_lv103.kill_count_state3_2()
|
||||
end
|
||||
|
||||
function kill_count_state3_2()
|
||||
local total_remain = 0
|
||||
local remain1 = 50 - pc.getqf("kill_count_1")
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
total_remain = total_remain + remain1
|
||||
local remain2 = 50 - pc.getqf("kill_count_2")
|
||||
if remain2 < 0 then
|
||||
remain2 = 0
|
||||
end
|
||||
total_remain = total_remain + remain2
|
||||
local remain3 = 50 - pc.getqf("kill_count_3")
|
||||
if remain3 < 0 then
|
||||
remain3 = 0
|
||||
end
|
||||
total_remain = total_remain + remain3
|
||||
local remain4 = 50 - pc.getqf("kill_count_4")
|
||||
if remain4 < 0 then
|
||||
remain4 = 0
|
||||
end
|
||||
total_remain = total_remain + remain4
|
||||
local remain5 = 50 - pc.getqf("kill_count_5")
|
||||
if remain5 < 0 then
|
||||
remain5 = 0
|
||||
end
|
||||
total_remain = total_remain + remain5
|
||||
q.set_counter_value(total_remain)
|
||||
if total_remain == 0 then
|
||||
set_state ("state3_3")
|
||||
end
|
||||
end
|
||||
|
||||
when leave begin
|
||||
pc.setqf("kill_count_1", 0)
|
||||
pc.setqf("kill_count_2", 0)
|
||||
pc.setqf("kill_count_3", 0)
|
||||
pc.setqf("kill_count_4", 0)
|
||||
pc.setqf("kill_count_5", 0)
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state3_3 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv103._370_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv103._300_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv103._300_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv103._120_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv103._300_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv103._380_say)
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
wait()--reward
|
||||
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 54491000))
|
||||
pc.give_exp2(54491000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 166000))
|
||||
pc.change_money(166000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(71095),1))
|
||||
pc.give_item2(71095, 1)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(72001),1)) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
pc.give_item2_select(72001)
|
||||
item.set_socket(2, 60)
|
||||
say()
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state4_1)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
-- <20>߸<EFBFBD>õ <20><><EFBFBD><EFBFBD>1-1
|
||||
state state4_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv103._390_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv103._390_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv103._020_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv103._390_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv103._400_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv103._220_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state4_2)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state4_2 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv103._410_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv103._390_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv103._080_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv103._420_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_flame_lv103._390_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv103._430_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv103._440_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv103._460_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv103._220_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state4_3)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state4_3 begin
|
||||
when enter begin
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> óġ <20><> <20><><EFBFBD><EFBFBD>
|
||||
pc.setqf("kill_count_1", 0)
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv103._480_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv103._390_sendLetter)
|
||||
--<2D><><EFBFBD><EFBFBD> óġ <20><> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
q.set_counter_name(gameforge.main_quest_lv98._680_counterName)
|
||||
main_quest_flame_lv103.kill_count_state4_3()
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv103._490_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv103._500_say)
|
||||
--<2D><><EFBFBD><EFBFBD> óġ <20><> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
say(gameforge.main_quest_flame_lv103._510_say)
|
||||
say(string.format(gameforge.main_quest_lv90._1190_say,mob_name(8057), 1 - pc.getqf("kill_count_1")))
|
||||
say_reward(gameforge.main_quest_flame_lv103._260_sayReward)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv103._390_sendLetter begin
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv103._520_say)
|
||||
end
|
||||
|
||||
when 8057.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
main_quest_flame_lv103.kill_count_state4_3()
|
||||
end
|
||||
|
||||
function kill_count_state4_3()
|
||||
local total_remain = 0
|
||||
local remain1 = 1 - pc.getqf("kill_count_1")
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
total_remain = total_remain + remain1
|
||||
q.set_counter_value(total_remain)
|
||||
if total_remain == 0 then
|
||||
set_state ("state4_4")
|
||||
end
|
||||
end
|
||||
|
||||
when leave begin
|
||||
pc.setqf("kill_count_1", 0)
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
state state4_4 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv103._530_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv103._390_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv103._390_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv103._120_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv103._390_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv103._540_say)
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
wait()--reward
|
||||
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 49586000))
|
||||
pc.give_exp2(49586000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 167000))
|
||||
pc.change_money(167000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(71095),1))
|
||||
pc.give_item2(71095, 1)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(31078),1)) -- <20><>ȭ<EFBFBD><C8AD> -- <20><><EFBFBD><EFBFBD>
|
||||
pc.give_item2(31078, 1)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(30015),2)) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǰ
|
||||
pc.give_item2(30015, 2)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(70043),1)) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>尩
|
||||
pc.give_item2_select(70043)
|
||||
item.set_socket(2, 60)
|
||||
say()
|
||||
say_title(string.format(gameforge.main_quest_flame_lv99._430_say, 104))
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (__COMPLETE__)
|
||||
set_quest_state ("main_quest_flame_lv104", "state0")
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
state __COMPLETE__ begin
|
||||
when enter begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
end
|
@ -1,738 +0,0 @@
|
||||
quest main_quest_flame_lv104 begin
|
||||
state start begin
|
||||
end
|
||||
state state0 begin
|
||||
when login or levelup or enter with pc.level >= 104 begin
|
||||
set_state (state1_1)
|
||||
end
|
||||
end
|
||||
|
||||
-- <20>߸<EFBFBD>õ <20><><EFBFBD><EFBFBD> 1-2
|
||||
state state1_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv104._010_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv104._010_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv104._020_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv104._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv104._030_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv104._040_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv104._050_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state1_2)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state1_2 begin
|
||||
when enter begin
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> óġ <20><> <20><><EFBFBD><EFBFBD>
|
||||
pc.setqf("kill_count_1", 0)
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv104._060_notice,notice)
|
||||
end
|
||||
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv104._010_sendLetter)
|
||||
--<2D><><EFBFBD><EFBFBD> óġ <20><> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
q.set_counter_name(gameforge.main_quest_lv98._680_counterName)
|
||||
|
||||
-- <20><>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߸<EFBFBD>õ<EFBFBD><C3B5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>, <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> Ŭ<><C5AC><EFBFBD><EFBFBD> <20>ǵ<EFBFBD><C7B5><EFBFBD> <20>ϴ<EFBFBD> <20>ڵ<EFBFBD>.
|
||||
if party.is_party() then
|
||||
local map_index = pc.get_map_index()
|
||||
-- <20><><EFBFBD>漺<EFBFBD><E6BCBA> <20><><EFBFBD><EFBFBD><EFBFBD>ߴٴ<DFB4> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
if map_index >= 351 * 10000 and map_index < (351 + 1) *10000 then
|
||||
pc.setqf("in_dungeon", 1)
|
||||
else -- <20><><EFBFBD>漺<EFBFBD><E6BCBA><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD>ش<EFBFBD>.
|
||||
if pc.getqf("in_dungeon") == 1 then
|
||||
if party.getf("flame_dungeon_boss_kill_count") == 1 then
|
||||
set_state (state1_3)
|
||||
end
|
||||
pc.setqf("in_dungeon", 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
main_quest_flame_lv104.kill_count()
|
||||
end
|
||||
|
||||
when logout begin
|
||||
if party.is_party() then
|
||||
if party.getf("flame_dungeon_boss_kill_count") == 0 then
|
||||
pc.setqf("in_dungeon", 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv104._070_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv104._080_say)
|
||||
--<2D><><EFBFBD><EFBFBD> óġ <20><> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
say(gameforge.main_quest_lv98._680_counterName)
|
||||
say(string.format(gameforge.main_quest_lv98._670_sayReward,mob_name(6091), 1 - pc.getqf("kill_count_1")))
|
||||
say_reward(gameforge.main_quest_flame_lv104._090_sayReward)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv104._010_sendLetter begin
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv104._100_say)
|
||||
end
|
||||
|
||||
|
||||
when 31078.use begin -- <20><>ȭ<EFBFBD><C8AD>
|
||||
affect.add(apply.MAX_HP, 1000, 60 * 60)
|
||||
affect.add(apply.DEF_GRADE_BONUS, 25, 60 * 60)
|
||||
affect.add(apply.MELEE_MAGIC_ATTBONUS_PER, 10, 60 * 60)
|
||||
pc.remove_item(31078,1)
|
||||
end
|
||||
|
||||
when 6091.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
main_quest_flame_lv104.kill_count()
|
||||
end
|
||||
|
||||
function kill_count()
|
||||
local total_remain = 0
|
||||
local remain1 = 1 - pc.getqf("kill_count_1")
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
total_remain = total_remain + remain1
|
||||
q.set_counter_value(total_remain)
|
||||
if total_remain == 0 then
|
||||
set_state ("state1_3")
|
||||
end
|
||||
end
|
||||
|
||||
when leave begin
|
||||
pc.setqf("kill_count_1", 0)
|
||||
pc.setqf("in_dungeon", 0)
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state1_3 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv104._120_notice,notice)
|
||||
|
||||
say_title(mob_name(6091))
|
||||
say(gameforge.main_quest_flame_lv104._110_say)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv104._010_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv104._010_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv104._130_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv104._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv104._140_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv104._150_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv104._160_say)
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
wait()--reward
|
||||
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 64491000))
|
||||
pc.give_exp2(64491000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 168000))
|
||||
pc.change_money(168000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(71095),1))
|
||||
pc.give_item2(71095, 1)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(71026),1)) -- <20><>ö
|
||||
pc.give_item2(71026, 1)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(71025),2)) -- <20>߰<EFBFBD><DFB0><EFBFBD>
|
||||
pc.give_item2(71025, 1)
|
||||
pc.give_item2(71025, 1)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(70102),5)) -- <20><><EFBFBD><EFBFBD>
|
||||
pc.give_item2(70102, 1)
|
||||
pc.give_item2(70102, 1)
|
||||
pc.give_item2(70102, 1)
|
||||
pc.give_item2(70102, 1)
|
||||
pc.give_item2(70102, 1)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(50706),20)) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
pc.give_item2(50706, 20)
|
||||
say()
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state2_1)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>1-1
|
||||
state state2_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv104._170_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv104._170_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv104._020_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv104._170_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv104._180_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv104._190_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv104._050_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state2_2)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state2_2 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv104._200_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv104._170_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv104._210_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv104._220_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv104._170_sendLetter begin
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv104._230_say)
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_flame_lv104._170_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv104._240_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv104._250_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv104._260_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv104._270_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv104._050_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state2_3)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state2_3 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv104._280_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv104._170_sendLetter)
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
q.set_counter_name(gameforge.main_quest_lv97._670_counterName)
|
||||
main_quest_flame_lv104.item_count_state2_3()
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv104._280_notice)
|
||||
say(gameforge.main_quest_flame_lv104._290_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
say(gameforge.main_quest_lv97._670_counterName)
|
||||
local item_count = pc.getqf("item_count_1")
|
||||
local remain = 5 - item_count
|
||||
if remain < 0 then
|
||||
remain = 0
|
||||
end
|
||||
say(string.format(gameforge.main_quest_lv90._1190_say,item_name(31082), remain))
|
||||
say_reward(gameforge.main_quest_flame_lv104._090_sayReward)
|
||||
main_quest_flame_lv104.item_count_state2_3()
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_flame_lv104._170_sendLetter with pc.count_item(31082) > 0 begin
|
||||
pc.remove_item(31082, 1)
|
||||
-- <20><>ǰ <20><><EFBFBD><EFBFBD>
|
||||
if number(1, 100) <= 90 then
|
||||
local item_count = pc.getqf("item_count_1")
|
||||
item_count = item_count + 1
|
||||
pc.setqf("item_count_1", item_count)
|
||||
if item_count < 5 then -- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
say_title(mob_name(20380))
|
||||
say(string.format(gameforge.main_quest_flame_lv104._300_say, 5 - item_count))
|
||||
else -- <20><>ǰ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ä<><C3A4>.
|
||||
pc.remove_item(31082, pc.count_item(31082))
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv104._310_say)
|
||||
wait()
|
||||
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 57583000))
|
||||
pc.give_exp2(57583000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 170000))
|
||||
pc.change_money( 170000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(72723),1)) -- ȭ<><C8AD><EFBFBD><EFBFBD> <20>ູ(<28><>)
|
||||
pc.give_item2(72723, 1)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(70050),1)) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǥ
|
||||
pc.give_item2(70050, 1)
|
||||
say()
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state3_1)
|
||||
end
|
||||
else -- <20><>ǰ <20><><EFBFBD><EFBFBD>
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv104._320_say)
|
||||
end
|
||||
|
||||
main_quest_flame_lv104.item_count_state2_3()
|
||||
end
|
||||
|
||||
when 6005.kill begin
|
||||
if number(1,50) == 1 then
|
||||
pc.give_item2(31082, 1)
|
||||
main_quest_flame_lv104.item_count_state2_3()
|
||||
end
|
||||
end
|
||||
|
||||
when 6006.kill begin
|
||||
if number(1,50) == 1 then
|
||||
pc.give_item2(31082, 1)
|
||||
main_quest_flame_lv104.item_count_state2_3()
|
||||
end
|
||||
end
|
||||
|
||||
when 6007.kill begin
|
||||
if number(1,50) == 1 then
|
||||
pc.give_item2(31082, 1)
|
||||
main_quest_flame_lv104.item_count_state2_3()
|
||||
end
|
||||
end
|
||||
|
||||
when 6008.kill begin
|
||||
if number(1,50) == 1 then
|
||||
pc.give_item2(31082, 1)
|
||||
main_quest_flame_lv104.item_count_state2_3()
|
||||
end
|
||||
end
|
||||
|
||||
when 6009.kill begin
|
||||
if number(1,50) == 1 then
|
||||
pc.give_item2(31082, 1)
|
||||
main_quest_flame_lv104.item_count_state2_3()
|
||||
end
|
||||
end
|
||||
|
||||
function item_count_state2_3()
|
||||
local item_count = pc.getqf("item_count_1")
|
||||
local remain = 5 - item_count
|
||||
if remain <= 0 then
|
||||
remain = 0
|
||||
end
|
||||
q.set_counter_value(remain)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
pc.setqf("item_count_1", 0)
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>1-2
|
||||
state state3_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv104._330_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv104._330_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv104._340_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_flame_lv104._330_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv104._350_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv104._360_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv104._050_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state3_2)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state3_2 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv104._370_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv104._330_sendLetter)
|
||||
q.set_counter_name(gameforge.main_quest_lv97._670_counterName)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv104._280_notice)
|
||||
say(gameforge.main_quest_flame_lv104._380_say)
|
||||
say(gameforge.main_quest_lv97._670_counterName)
|
||||
|
||||
local remain1 = 100 - pc.count_item(50814)
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
|
||||
say(string.format(gameforge.main_quest_lv90._1190_say,item_name(50814) ,remain1))
|
||||
say()
|
||||
q.set_counter_value(remain1)
|
||||
|
||||
if remain1 == 0 then
|
||||
set_state (state3_3)
|
||||
end
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_flame_lv104._330_sendLetter begin
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if pc.count_item(50814) >= 100 then
|
||||
pc.remove_item(50814, 100)
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv104._390_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv104._400_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv104._410_say)
|
||||
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 46581000))
|
||||
pc.give_exp2(46581000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 171000))
|
||||
pc.change_money( 171000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(30045),2)) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ħ
|
||||
pc.give_item2(30045, 2)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(50817),10)) -- <20><>Ȱ<EFBFBD>ɾ<EFBFBD>
|
||||
pc.give_item2(50817, 10)
|
||||
say()
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state4_1)
|
||||
else
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv104._420_say)
|
||||
end
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state3_3 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv104._430_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv104._330_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv104._280_notice)
|
||||
say(gameforge.main_quest_flame_lv104._440_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_flame_lv104._330_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if pc.count_item(50814) >= 100 then
|
||||
pc.remove_item(50814, 100)
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv104._390_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv104._400_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv104._410_say)
|
||||
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 46581000))
|
||||
pc.give_exp2(46581000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 171000))
|
||||
pc.change_money( 171000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(30045),2)) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ħ
|
||||
pc.give_item2(30045, 2)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(50817),10)) -- <20><>Ȱ<EFBFBD>ɾ<EFBFBD>
|
||||
pc.give_item2(50817, 10)
|
||||
say()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state4_1)
|
||||
else
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv104._420_say)
|
||||
|
||||
set_state (state3_2)
|
||||
end
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>1-3
|
||||
state state4_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv104._450_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv104._450_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv104._340_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_flame_lv104._450_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv104._460_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv104._470_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv104._050_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state4_2)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state4_2 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv104._480_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv104._450_sendLetter)
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
q.set_counter_name(gameforge.main_quest_lv97._670_counterName)
|
||||
main_quest_flame_lv104.item_count_state4_2()
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv104._450_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv104._490_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
say(gameforge.main_quest_lv97._670_counterName)
|
||||
local remain = 5 - pc.count_item(31024)
|
||||
if remain < 0 then
|
||||
remain = 0
|
||||
end
|
||||
say(string.format(gameforge.main_quest_lv90._1190_say,item_name(31024), remain))
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_flame_lv104._450_sendLetter begin
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv104._500_say)
|
||||
end
|
||||
|
||||
when 3291.kill begin
|
||||
if number(1,1) == 1 then
|
||||
pc.give_item2(31024, 1)
|
||||
main_quest_flame_lv104.item_count_state4_2()
|
||||
end
|
||||
end
|
||||
|
||||
function item_count_state4_2()
|
||||
if pc.count_item(31024) >= 5 then
|
||||
set_state ("state4_3")
|
||||
end
|
||||
q.set_counter_value(5 - pc.count_item(31024))
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state4_3 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv104._520_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv104._450_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv104._450_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv104._440_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_flame_lv104._450_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
if pc.count_item(31024) < 5 then
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv104._500_say)
|
||||
|
||||
set_state (state4_2)
|
||||
else
|
||||
pc.remove_item(31024, 5)
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv104._510_say)
|
||||
|
||||
wait()
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 45580000))
|
||||
pc.give_exp2( 45580000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 173000))
|
||||
pc.change_money(173000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(71095),1))
|
||||
pc.give_item2(71095, 1)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(30015),2)) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǰ
|
||||
pc.give_item2(30015, 2)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(70043),1)) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>尩
|
||||
pc.give_item2_select(70043)
|
||||
item.set_socket(2, 60)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(31083),3)) -- <20><><EFBFBD><EFBFBD> <20>ָӴ<D6B8>
|
||||
pc.give_item2(31083, 3)
|
||||
|
||||
say()
|
||||
say_title(string.format(gameforge.main_quest_flame_lv99._430_say, 105))
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_quest_state ("main_quest_flame_lv105", "state0")
|
||||
set_state (__COMPLETE__)
|
||||
end
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
state __COMPLETE__ begin
|
||||
when enter begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
end
|
@ -1,541 +0,0 @@
|
||||
quest main_quest_flame_lv105 begin
|
||||
state start begin
|
||||
end
|
||||
state state0 begin
|
||||
when login or levelup or enter with pc.level >= 105 begin
|
||||
set_state (state1_1)
|
||||
end
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
state state1_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv105._010_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv105._010_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv105._020_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv105._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
pc.remove_item(31083, 3)
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv105._030_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv105._040_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv105._050_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv105._060_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv105._070_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state1_2)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state1_2 begin
|
||||
when enter begin
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> óġ <20><> <20><><EFBFBD><EFBFBD>
|
||||
pc.setqf("kill_count_1", 0)
|
||||
pc.setqf("kill_count_2", 0)
|
||||
pc.setqf("kill_count_3", 0)
|
||||
pc.setqf("kill_count_4", 0)
|
||||
pc.setqf("kill_count_5", 0)
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv105._080_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv105._010_sendLetter)
|
||||
--<2D><><EFBFBD><EFBFBD> óġ <20><> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
q.set_counter_name(gameforge.main_quest_lv98._680_counterName)
|
||||
main_quest_flame_lv105.kill_count_state1_2()
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv105._090_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv105._100_say)
|
||||
--<2D><><EFBFBD><EFBFBD> óġ <20><> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
say(gameforge.main_quest_lv98._680_counterName)
|
||||
local remain1 = 10 - pc.getqf("kill_count_1")
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
local remain2 = 10 - pc.getqf("kill_count_2")
|
||||
if remain2 < 0 then
|
||||
remain2 = 0
|
||||
end
|
||||
local remain3 = 10 - pc.getqf("kill_count_3")
|
||||
if remain3 < 0 then
|
||||
remain3 = 0
|
||||
end
|
||||
local remain4 = 10 - pc.getqf("kill_count_4")
|
||||
if remain4 < 0 then
|
||||
remain4 = 0
|
||||
end
|
||||
local remain5 = 10 - pc.getqf("kill_count_5")
|
||||
if remain5 < 0 then
|
||||
remain5 = 0
|
||||
end
|
||||
say(string.format(gameforge.main_quest_lv98._690_sayReward ,mob_name(6005), remain1,mob_name(6006), remain2))
|
||||
say(string.format(gameforge.main_quest_lv98._690_sayReward ,mob_name(6007), remain3,mob_name(6008), remain4))
|
||||
say(string.format(gameforge.main_quest_lv98._670_sayReward,mob_name(6009), remain5))
|
||||
say_reward(gameforge.main_quest_flame_lv105._110_sayReward)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv105._010_sendLetter begin
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv105._120_say)
|
||||
end
|
||||
|
||||
when 6005.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
main_quest_flame_lv105.kill_count_state1_2()
|
||||
end
|
||||
|
||||
when 6006.kill begin
|
||||
local kill_count = pc.getqf("kill_count_2")
|
||||
pc.setqf("kill_count_2", kill_count+1)
|
||||
main_quest_flame_lv105.kill_count_state1_2()
|
||||
end
|
||||
|
||||
when 6007.kill begin
|
||||
local kill_count = pc.getqf("kill_count_3")
|
||||
pc.setqf("kill_count_3", kill_count+1)
|
||||
main_quest_flame_lv105.kill_count_state1_2()
|
||||
end
|
||||
|
||||
when 6008.kill begin
|
||||
local kill_count = pc.getqf("kill_count_4")
|
||||
pc.setqf("kill_count_4", kill_count+1)
|
||||
main_quest_flame_lv105.kill_count_state1_2()
|
||||
end
|
||||
|
||||
when 6009.kill begin
|
||||
local kill_count = pc.getqf("kill_count_5")
|
||||
pc.setqf("kill_count_5", kill_count+1)
|
||||
main_quest_flame_lv105.kill_count_state1_2()
|
||||
end
|
||||
|
||||
function kill_count_state1_2()
|
||||
local total_remain = 0
|
||||
local remain1 = 10 - pc.getqf("kill_count_1")
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
total_remain = total_remain + remain1
|
||||
local remain2 = 10 - pc.getqf("kill_count_2")
|
||||
if remain2 < 0 then
|
||||
remain2 = 0
|
||||
end
|
||||
total_remain = total_remain + remain2
|
||||
local remain3 = 10 - pc.getqf("kill_count_3")
|
||||
if remain3 < 0 then
|
||||
remain3 = 0
|
||||
end
|
||||
total_remain = total_remain + remain3
|
||||
local remain4 = 10 - pc.getqf("kill_count_4")
|
||||
if remain4 < 0 then
|
||||
remain4 = 0
|
||||
end
|
||||
total_remain = total_remain + remain4
|
||||
local remain5 = 10 - pc.getqf("kill_count_5")
|
||||
if remain5 < 0 then
|
||||
remain5 = 0
|
||||
end
|
||||
total_remain = total_remain + remain5
|
||||
q.set_counter_value(total_remain)
|
||||
if total_remain == 0 then
|
||||
set_state ("state1_3")
|
||||
end
|
||||
end
|
||||
|
||||
when leave begin
|
||||
pc.setqf("kill_count_1", 0)
|
||||
pc.setqf("kill_count_2", 0)
|
||||
pc.setqf("kill_count_3", 0)
|
||||
pc.setqf("kill_count_4", 0)
|
||||
pc.setqf("kill_count_5", 0)
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state1_3 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv105._130_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv105._010_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv105._010_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv105._140_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv105._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv105._150_say)
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
wait()--reward
|
||||
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 48584000))
|
||||
pc.give_exp2(48584000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 174000))
|
||||
pc.change_money(174000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(71095),1))
|
||||
pc.give_item2(71095, 1)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(30033),3)) -- <09><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
pc.give_item2(30033, 3)
|
||||
say()
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state2_1)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD>
|
||||
state state2_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv105._160_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv105._160_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv105._020_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv105._160_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv105._170_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv105._180_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv105._070_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state2_2)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state2_2 begin
|
||||
when enter begin
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> óġ <20><> <20><><EFBFBD><EFBFBD>
|
||||
pc.setqf("kill_count_1", 0)
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv105._190_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv105._160_sendLetter)
|
||||
--<2D><><EFBFBD><EFBFBD> óġ <20><> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
q.set_counter_name(gameforge.main_quest_lv98._680_counterName)
|
||||
|
||||
-- <20><>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߸<EFBFBD>õ<EFBFBD><C3B5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>, <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> Ŭ<><C5AC><EFBFBD><EFBFBD> <20>ǵ<EFBFBD><C7B5><EFBFBD> <20>ϴ<EFBFBD> <20>ڵ<EFBFBD>.
|
||||
if party.is_party() then
|
||||
local map_index = pc.get_map_index()
|
||||
-- <20><><EFBFBD>漺<EFBFBD><E6BCBA> <20><><EFBFBD><EFBFBD><EFBFBD>ߴٴ<DFB4> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
if map_index >= 351 * 10000 and map_index < (351 + 1) *10000 then
|
||||
pc.setqf("in_dungeon", 1)
|
||||
else -- <20><><EFBFBD>漺<EFBFBD><E6BCBA><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD>ش<EFBFBD>.
|
||||
if pc.getqf("in_dungeon") == 1 then
|
||||
if party.getf("flame_dungeon_boss_kill_count") == 1 then
|
||||
set_state (state2_3)
|
||||
end
|
||||
pc.setqf("in_dungeon", 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
main_quest_flame_lv105.kill_count_state2_2()
|
||||
end
|
||||
|
||||
when logout begin
|
||||
if party.is_party() then
|
||||
if party.getf("flame_dungeon_boss_kill_count") == 0 then
|
||||
pc.setqf("in_dungeon", 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv105._200_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv105._210_say)
|
||||
--<2D><><EFBFBD><EFBFBD> óġ <20><> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
say(gameforge.main_quest_lv98._680_counterName)
|
||||
say(string.format(gameforge.main_quest_lv98._670_sayReward,mob_name(6091), 1 - pc.getqf("kill_count_1")))
|
||||
say_reward(gameforge.main_quest_flame_lv105._110_sayReward)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv105._160_sendLetter begin
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv105._220_say)
|
||||
end
|
||||
|
||||
when 6091.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
main_quest_flame_lv105.kill_count_state2_2()
|
||||
end
|
||||
|
||||
function kill_count_state2_2()
|
||||
local total_remain = 0
|
||||
local remain1 = 1 - pc.getqf("kill_count_1")
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
total_remain = total_remain + remain1
|
||||
q.set_counter_value(total_remain)
|
||||
if total_remain == 0 then
|
||||
set_state ("state2_3")
|
||||
end
|
||||
end
|
||||
|
||||
when leave begin
|
||||
pc.setqf("kill_count_1", 0)
|
||||
pc.setqf("in_dungeon", 0)
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state2_3 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv105._230_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv105._160_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv105._160_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv105._140_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv105._160_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv105._240_say)
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
wait()--reward
|
||||
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 60583000))
|
||||
pc.give_exp2(60583000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 175000))
|
||||
pc.change_money(175000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(71095),1))
|
||||
pc.give_item2(71095, 1)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(71026),1)) -- <20><>ö
|
||||
pc.give_item2(71026, 1)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(71025),2)) -- <20>߰<EFBFBD><DFB0><EFBFBD>
|
||||
pc.give_item2(71025, 1)
|
||||
pc.give_item2(71025, 1)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(72001),1)) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
pc.give_item2_select(72001)
|
||||
item.set_socket(2, 60)
|
||||
say()
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state3_1)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
state state3_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv105._250_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv105._250_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv105._020_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv105._250_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv105._260_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv105._270_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv105._070_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(31083),1))
|
||||
pc.give_item2(31083, 1)
|
||||
set_state (state3_2)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state3_2 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv105._280_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv105._250_sendLetter)
|
||||
q.set_counter_name(gameforge.main_quest_flame_lv105._290_say)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv105._300_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv105._310_say)
|
||||
|
||||
say_title(gameforge.main_quest_flame_lv105._290_say)
|
||||
say(gameforge.main_quest_flame_lv105._320_say)
|
||||
say()
|
||||
say_reward(gameforge.main_quest_flame_lv105._110_sayReward)
|
||||
end
|
||||
|
||||
when 20390.take with item.vnum == 31083 begin
|
||||
item.remove()
|
||||
say_title(gameforge.main_quest_flame_lv105._330_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv105._340_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state3_3)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state3_3 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv105._350_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv105._250_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv105._250_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv105._140_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv105._250_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv105._360_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv105._370_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv105._380_say)
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
wait()--reward
|
||||
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 48584000))
|
||||
pc.give_exp2(177000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 177000))
|
||||
pc.change_money(177000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(72024),1)) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȭ
|
||||
pc.give_item2_select(72024)
|
||||
item.set_socket(2, 180)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(71094),1)) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
pc.give_item2(71094, 1)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(71001),5)) -- <09>־ȼ<D6BE><C8BC><EFBFBD>
|
||||
pc.give_item2(71001, 5)
|
||||
say()
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (__COMPLETE__)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
state __COMPLETE__ begin
|
||||
when enter begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
end
|
@ -1,483 +0,0 @@
|
||||
quest main_quest_flame_lv99 begin
|
||||
state start begin
|
||||
when login or levelup or enter with pc.get_level() >= 99 begin
|
||||
if pc.getf("main_quest_lv98", "__status")==main_quest_lv98.__COMPLETE__ then
|
||||
set_state ( state0 )
|
||||
end
|
||||
end
|
||||
end
|
||||
state state0 begin
|
||||
when login or levelup or enter with pc.level >= 99 begin
|
||||
set_state (state1_1)
|
||||
end
|
||||
end
|
||||
|
||||
-- <20>ٽ<EFBFBD> <20><><EFBFBD>۵Ǵ<DBB5> <20><><EFBFBD><EFBFBD> : <20>ӹ<EFBFBD><D3B9>ޱ<EFBFBD>
|
||||
state state1_1 begin
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv99._010_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv99._010_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv99._020_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv99._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv99._030_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv99._050_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv99._060_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv99._070_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv99._080_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state1_2)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state1_2 begin -- <20>ٽ<EFBFBD> <20><><EFBFBD>۵Ǵ<DBB5> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(string.format(gameforge.main_quest_flame_lv99._090_notice, 127, 928),notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
target.pos ("__TARGET__",127,928,62,"")
|
||||
send_letter (gameforge.main_quest_flame_lv99._010_sendLetter)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv99._100_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv99._110_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv99._010_sendLetter begin
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv99._120_say)
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD> --
|
||||
when __TARGET__.target.arrive begin
|
||||
target.delete("__TARGET__")
|
||||
set_state (state1_3)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state1_3 begin -- <20>ٽ<EFBFBD> <20><><EFBFBD>۵Ǵ<DBB5> <20><><EFBFBD><EFBFBD> : <20>Ϸ<EFBFBD> & <20><><EFBFBD><EFBFBD><EFBFBD>ޱ<EFBFBD>
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv99._130_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv99._010_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv99._010_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv99._140_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv99._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv99._150_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv99._160_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv99._170_say)
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
wait()--reward
|
||||
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 33003000))
|
||||
pc.give_exp2( 33003000)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 145000))
|
||||
pc.change_money( 145000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(50705),10))
|
||||
pc.give_item2(50705, 10)
|
||||
say()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state2_1)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD>1-1 : <20>ӹ<EFBFBD><D3B9>ޱ<EFBFBD>
|
||||
state state2_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv99._180_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv99._180_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv99._020_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_flame_lv99._180_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_flame_lv99._190_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv99._070_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state2_2)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state2_2 begin -- <20><><EFBFBD><EFBFBD>1-1 : <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> ã<>ư<EFBFBD><C6B0><EFBFBD> <20><><EFBFBD><EFBFBD>..
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv99._180_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv99._180_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv99._200_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_flame_lv99._180_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv99._210_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv99._240_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state2_3)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state2_3 begin -- <20><><EFBFBD><EFBFBD>1-1 : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
when enter begin
|
||||
notice_multiline(gameforge.main_quest_flame_lv99._250_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv99._180_sendLetter)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv99._260_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv99._270_say)
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_flame_lv99._180_sendLetter begin
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv99._280_say)
|
||||
end
|
||||
|
||||
when 2202.kill begin
|
||||
if number(1,100) == 1 then
|
||||
set_state (state2_4)
|
||||
end
|
||||
end
|
||||
|
||||
when 2203.kill begin
|
||||
if number(1,100) == 1 then
|
||||
set_state (state2_4)
|
||||
end
|
||||
end
|
||||
|
||||
when 2204.kill begin
|
||||
if number(1,100) == 1 then
|
||||
set_state (state2_4)
|
||||
end
|
||||
end
|
||||
|
||||
when 2205.kill begin
|
||||
if number(1,100) == 1 then
|
||||
set_state (state2_4)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- <20><> <20>Ʒ<EFBFBD><C6B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> vnum<75><6D> <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> Ŭ<><C5AC><EFBFBD><EFBFBD> <20>ǵ<EFBFBD><C7B5><EFBFBD> <20>Ͽ<EFBFBD><CFBF><EFBFBD>.
|
||||
when 7020.kill begin
|
||||
if number(1,100) == 1 then
|
||||
set_state (state2_4)
|
||||
end
|
||||
end
|
||||
|
||||
when 7021.kill begin
|
||||
if number(1,100) == 1 then
|
||||
set_state (state2_4)
|
||||
end
|
||||
end
|
||||
|
||||
when 7022.kill begin
|
||||
if number(1,100) == 1 then
|
||||
set_state (state2_4)
|
||||
end
|
||||
end
|
||||
|
||||
when 7023.kill begin
|
||||
if number(1,100) == 1 then
|
||||
set_state (state2_4)
|
||||
end
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
-- <20><><EFBFBD><EFBFBD>1-1 : <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD>ư<EFBFBD><C6B0><EFBFBD>.
|
||||
state state2_4 begin
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv99._290_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv99._180_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv99._180_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv99._200_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_flame_lv99._180_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv99._300_say)
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
wait()--reward
|
||||
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 37003000))
|
||||
pc.give_exp2(37003000)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 146000))
|
||||
pc.change_money(146000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(72001),1))
|
||||
pc.give_item2_select(72001)
|
||||
item.set_socket(2, 60)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(30046),1))
|
||||
pc.give_item2(30046, 1)
|
||||
say()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state3_1)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD>1-2 : <20>ӹ<EFBFBD><D3B9>ޱ<EFBFBD>
|
||||
state state3_1 begin
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv99._310_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv99._310_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv99._320_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_flame_lv99._310_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv99._330_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv99._340_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv99._350_say)
|
||||
wait()--<2D>߰<EFBFBD> <20><>ȭ
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_flame_lv99._360_say)
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (state3_2)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state3_2 begin -- <20><><EFBFBD><EFBFBD>1-2
|
||||
when enter begin
|
||||
notice_multiline(gameforge.main_quest_flame_lv99._370_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv99._310_sendLetter)
|
||||
q.set_counter_name(gameforge.main_quest_lv97._670_counterName)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20391)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20391))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv99._380_sayTitle)
|
||||
say(gameforge.main_quest_flame_lv99._390_say)
|
||||
say(gameforge.main_quest_lv97._670_counterName)
|
||||
say(string.format(gameforge.main_quest_lv90._1190_say,item_name(31076), 1 - pc.count_item(31076)))
|
||||
--say_reward(locale.target_info)
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_flame_lv99._310_sendLetter begin
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv99._400_say)
|
||||
end
|
||||
|
||||
-- <20>¾<EFBFBD><C2BE><EFBFBD> NPC<50><43> Ŭ<><C5AC><EFBFBD>Ͽ<EFBFBD> <20>¾<EFBFBD><C2BE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>κ<EFBFBD>.
|
||||
when 20391.click begin
|
||||
target.delete("__TARGET__")
|
||||
pc.give_item2(31076, 1)
|
||||
set_state (state3_3)
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
state state3_3 begin -- <20><><EFBFBD><EFBFBD>1-2
|
||||
when enter begin
|
||||
-- notice <20><><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.main_quest_flame_lv99._410_notice,notice)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_flame_lv99._310_sendLetter)
|
||||
--npc Ÿ<><C5B8>
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_flame_lv99._310_sendLetter)
|
||||
say(gameforge.main_quest_flame_lv99._200_say)
|
||||
--npc Ÿ<><C5B8> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
--say_reward(locale.target_npc_info)
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_flame_lv99._310_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
if pc.count_item(31076) >= 1 then
|
||||
pc.remove_item ( 31076, pc.count_item(31076))
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv99._420_say)
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
wait()--reward
|
||||
say_title(gameforge.main_quest_lv27._120_sayTitle)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 35003000))
|
||||
pc.give_exp2(35003000)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 147000))
|
||||
pc.change_money(147000)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(30021),1))
|
||||
pc.give_item2(30021, 1)
|
||||
say()
|
||||
say_title(string.format(gameforge.main_quest_flame_lv99._430_say, 100))
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state (__COMPLETE__)
|
||||
set_quest_state ("main_quest_flame_lv100", "state0")
|
||||
else
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_flame_lv99._400_say)
|
||||
|
||||
set_state (state3_2)
|
||||
end
|
||||
end
|
||||
|
||||
when leave begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
state __COMPLETE__ begin
|
||||
when enter begin
|
||||
--q.done()
|
||||
end
|
||||
end
|
||||
|
||||
end
|
@ -1,484 +0,0 @@
|
||||
quest main_quest_lv60 begin
|
||||
state start begin
|
||||
when login or levelup or enter with pc.get_level() >= 60 begin
|
||||
if pc.getf("main_quest_lv55", "__status")==main_quest_lv55.__COMPLETE__ then
|
||||
set_state ( quest1_begin )
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
state run begin
|
||||
when login or levelup or enter with pc.get_level() >= 60 begin
|
||||
set_state ( quest1_begin )
|
||||
end
|
||||
end
|
||||
|
||||
state quest1_begin begin
|
||||
when letter begin --<2D><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD>1
|
||||
send_letter(gameforge.main_quest_lv60._10_sendLetter)
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ų<EFBFBD><C5B2>.
|
||||
local vid_20011 = find_npc_by_vnum(20011)
|
||||
if 0 != vid_20011 then
|
||||
target.vid("__TARGET__", vid_20011, mob_name(20011))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin -- <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD>1 <20><><EFBFBD><EFBFBD>
|
||||
say_title(gameforge.main_quest_lv60._10_sendLetter)
|
||||
|
||||
----"12345678901234567890123456789012345678901234567890"|
|
||||
say(gameforge.main_quest_lv60._20_say)
|
||||
say("")
|
||||
|
||||
end
|
||||
|
||||
when __TARGET__.target.click begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20011))
|
||||
----"12345678901234567890123456789012345678901234567890"|
|
||||
say(gameforge.main_quest_lv60._30_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv60._40_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20011))
|
||||
say(gameforge.main_quest_lv60._50_say)
|
||||
say("")
|
||||
|
||||
set_state ( quest2_begin )
|
||||
end
|
||||
end
|
||||
|
||||
state quest2_begin begin
|
||||
-----------<2D><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD>2------------
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv60._60_sendLetter)
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ų<EFBFBD><C5B2>.
|
||||
local v = find_npc_by_vnum(20011)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20011))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv60._60_sendLetter)
|
||||
say(gameforge.main_quest_lv60._70_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
when __TARGET__.target.click begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20011))
|
||||
----"12345678901234567890123456789012345678901234567890"|
|
||||
say(gameforge.main_quest_lv60._80_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20011))
|
||||
say(gameforge.main_quest_lv60._90_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv60._100_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20011))
|
||||
say(gameforge.main_quest_lv60._110_say)
|
||||
|
||||
set_state (quest2_ongoing)
|
||||
end
|
||||
end
|
||||
|
||||
state quest2_ongoing begin --<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD>ϰ<EFBFBD> Ź<><C5B9><EFBFBD><EFBFBD> <20>ƿ<DEBE><C6BF><EFBFBD><EFBFBD><EFBFBD> <20>̼<EFBFBD><CCBC><EFBFBD> <20>Ҵ<DEBE>.
|
||||
-----------<2D><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD>2------------
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv60._60_sendLetter)
|
||||
|
||||
-- <20><><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ų<EFBFBD><C5B2>. (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> npc<70><63> <20><><EFBFBD><EFBFBD>Ų<EFBFBD><C5B2>.)
|
||||
local v = find_npc_by_vnum(20371)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20371))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv60._60_sendLetter)
|
||||
say(gameforge.main_quest_lv60._120_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>õ<EFBFBD> <20><>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD>.
|
||||
when 20011.gameforge.main_quest_lv60._60_sendLetter begin
|
||||
say_title(mob_name(20011))
|
||||
say(gameforge.main_quest_lv60._130_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
--<2D><><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
when 20371.click begin
|
||||
target.delete("__TARGET__")
|
||||
say_reward(gameforge.main_quest_lv60._140_sayReward)
|
||||
pc.give_item2 ( 31001 )
|
||||
say("")
|
||||
|
||||
set_state (quest2_end)
|
||||
end
|
||||
end
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ź<><C5B9><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
state quest2_end begin
|
||||
-----------<2D><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD>2------------
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv60._60_sendLetter)
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ų<EFBFBD><C5B2>.
|
||||
local v = find_npc_by_vnum(20011)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20011))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv60._60_sendLetter)
|
||||
say(gameforge.main_quest_lv60._150_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
when __TARGET__.target.click begin
|
||||
pc.remove_item ( 31001, 1 )
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20011))
|
||||
say(gameforge.main_quest_lv60._160_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20011))
|
||||
say(gameforge.main_quest_lv60._170_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20011))
|
||||
say(gameforge.main_quest_lv60._180_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 980000))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 175000))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(71001).." ".."10"..locale.count_postfix))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(50721).." ".."10"..locale.count_postfix))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(50725).." ".."10"..locale.count_postfix))
|
||||
say("")
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> --
|
||||
-- <20>̰<EFBFBD><CCB0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
pc.give_exp2(980000)
|
||||
pc.change_money(175000)
|
||||
|
||||
pc.give_item2(71001, 10) -- <20>־ȼ<D6BE><C8BC><EFBFBD>
|
||||
pc.give_item2(50721, 10) -- <20><><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD>
|
||||
pc.give_item2(50725, 10) -- <20><>â<EFBFBD><C3A2>
|
||||
|
||||
|
||||
|
||||
set_state (quest3_begin)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
state quest3_begin begin
|
||||
-------<2D><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD>3---------
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv60._220_sendLetter)
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ų<EFBFBD><C5B2>.
|
||||
local v = find_npc_by_vnum(20011)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20011))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv60._220_sendLetter)
|
||||
say(gameforge.main_quest_lv60._230_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
when __TARGET__.target.click begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20011))
|
||||
----"12345678901234567890123456789012345678901234567890"|
|
||||
say(gameforge.main_quest_lv60._240_say)
|
||||
say("")
|
||||
|
||||
set_state (quest3_ongoing1)
|
||||
end
|
||||
end
|
||||
|
||||
state quest3_ongoing1 begin
|
||||
-------<2D><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD>3---------
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv60._220_sendLetter)
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8><EFBFBD> <20><>ġ<EFBFBD><C4A1> ǥ<><C7A5><EFBFBD>Ѵ<EFBFBD>.--
|
||||
--------------------------------
|
||||
--------------------------------
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv60._220_sendLetter)
|
||||
say(gameforge.main_quest_lv60._230_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>õ<EFBFBD> <20><>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD>.
|
||||
when 20011.chat.gameforge.main_quest_lv60._220_sendLetter begin
|
||||
say_title(mob_name(20011))
|
||||
say(gameforge.main_quest_lv60._260_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1000<30><30><EFBFBD><EFBFBD> 1 Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD>.
|
||||
when 2305.kill begin
|
||||
if number (1,100) == 1 then
|
||||
pc.give_item2 (31002, 1 )
|
||||
say_reward(gameforge.main_quest_lv60._270_sayReward)
|
||||
say("")
|
||||
|
||||
--3.<2E><><EFBFBD><EFBFBD>
|
||||
set_state (quest3_end1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD>빮<EFBFBD><EBB9AE><EFBFBD><EFBFBD> <20>ϳ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
state quest3_end1 begin
|
||||
-------<2D><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD>3---------
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv60._220_sendLetter)
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ų<EFBFBD><C5B2>.
|
||||
local v = find_npc_by_vnum(20011)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20011))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv60._220_sendLetter)
|
||||
say(gameforge.main_quest_lv60._230_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
when __TARGET__.target.click begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20011))
|
||||
----"12345678901234567890123456789012345678901234567890"|
|
||||
say(gameforge.main_quest_lv60._280_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
--@@@@@@@@@<40><><EFBFBD><EFBFBD>@@@@@@@@@@--
|
||||
--1. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
|
||||
say_title(mob_name(20011))
|
||||
----"12345678901234567890123456789012345678901234567890"|
|
||||
pc.remove_item (31002, 1 )
|
||||
say(gameforge.main_quest_lv60._290_say)
|
||||
say("")
|
||||
|
||||
set_state (quest3_ongoing2)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
state quest3_ongoing2 begin
|
||||
--<2D><> <20><><EFBFBD>¿<EFBFBD> ó<><C3B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD> '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>' <20><><EFBFBD><EFBFBD>Ʈ <20>÷<EFBFBD><C3B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
-- <20>ʱⰪ<CAB1><E2B0AA> 9<><39> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<><31> <20>ٿ<EFBFBD> 0<><30><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
-- 0<><30> <20>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><>ȭ<EFBFBD><C8AD>Ų<EFBFBD><C5B2>.
|
||||
when enter begin
|
||||
pc.setqf("remain_item",9)
|
||||
end
|
||||
|
||||
--*************************--
|
||||
-------<2D><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD>3_1---------
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv60._220_sendLetter)
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8><EFBFBD> <20><>ġ<EFBFBD><C4A1> ǥ<><C7A5><EFBFBD>Ѵ<EFBFBD>.--
|
||||
--------------------------------
|
||||
--------------------------------
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv60._220_sendLetter)
|
||||
say(gameforge.main_quest_lv60._230_say)
|
||||
say("")
|
||||
q.set_counter(gameforge.main_quest_lv60._250_counter, pc.getqf("remain_item"))
|
||||
end
|
||||
-----------------------------
|
||||
--*************************--
|
||||
|
||||
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1000<30><30><EFBFBD><EFBFBD> 1 Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ٿ<EFBFBD><D9BF>ش<EFBFBD>.
|
||||
when 2305.kill begin
|
||||
if number (1,100) == 1 then
|
||||
local remain_item_prev = pc.getqf("remain_item")
|
||||
pc.setqf("remain_item",remain_item_prev-1)
|
||||
|
||||
pc.give_item2 (31002, 1 )
|
||||
notice(string.format(gameforge.main_quest_lv60._300_say,pc.getqf("remain_item")))
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>Ѿ<D1BE><EEB0A3>.
|
||||
if pc.getqf("remain_item")==0 then
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8><EFBFBD> <20><>ġ ǥ<>ø<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD> --
|
||||
-------------------------------------
|
||||
-------------------------------------
|
||||
set_state (quest3_end2)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
state quest3_end2 begin
|
||||
--*************************--
|
||||
-------<2D><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD>3_1---------
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv60._220_sendLetter)
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ų<EFBFBD><C5B2>.
|
||||
local v = find_npc_by_vnum(20011)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20011))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv60._220_sendLetter)
|
||||
say(gameforge.main_quest_lv60._230_say)
|
||||
say("")
|
||||
q.set_counter(gameforge.main_quest_lv60._250_counter, pc.getqf("remain_item"))
|
||||
end
|
||||
-----------------------------
|
||||
--*************************--
|
||||
|
||||
when __TARGET__.target.click begin
|
||||
target.delete("__TARGET__")
|
||||
pc.remove_item (31002, pc.count_item (31002) )
|
||||
say_title(mob_name(20011))
|
||||
----"12345678901234567890123456789012345678901234567890"|
|
||||
say(gameforge.main_quest_lv60._310_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20011))
|
||||
----"12345678901234567890123456789012345678901234567890"|
|
||||
say(gameforge.main_quest_lv60._320_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20011))
|
||||
----"12345678901234567890123456789012345678901234567890"|
|
||||
say(gameforge.main_quest_lv60._330_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(locale.reward)
|
||||
----"12345678901234567890123456789012345678901234567890"|
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 3300000))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(71094).." ".."3"..locale.count_postfix))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(30056)))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(30025)))
|
||||
say("")
|
||||
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> --
|
||||
pc.give_exp2(3300000)
|
||||
|
||||
pc.give_item2(71094, 3) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> * 3
|
||||
pc.give_item2(30056) -- <20>Ź<EFBFBD><C5B9><EFBFBD>
|
||||
pc.give_item2(30025) -- <20>Ź<EFBFBD><C5B9><EFBFBD> <20><><EFBFBD>ָӴ<D6B8>
|
||||
|
||||
set_state (quest4_begin)
|
||||
end
|
||||
end
|
||||
|
||||
state quest4_begin begin
|
||||
--*************************--
|
||||
-------<2D><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD>4-----------
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv60._340_sendLetter)
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ų<EFBFBD><C5B2>.
|
||||
local v = find_npc_by_vnum(20011)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20011))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv60._340_sendLetter)
|
||||
say(gameforge.main_quest_lv60._350_say)
|
||||
say("")
|
||||
end
|
||||
-----------------------------
|
||||
--*************************--
|
||||
|
||||
|
||||
when __TARGET__.target.click begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20011))
|
||||
----"12345678901234567890123456789012345678901234567890"|
|
||||
say(gameforge.main_quest_lv60._360_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20011))
|
||||
----"12345678901234567890123456789012345678901234567890"|
|
||||
say(gameforge.main_quest_lv60._370_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
----"12345678901234567890123456789012345678901234567890"|
|
||||
say(gameforge.main_quest_lv60._380_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20011))
|
||||
----"12345678901234567890123456789012345678901234567890"|
|
||||
say(gameforge.main_quest_lv60._390_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20011))
|
||||
----"12345678901234567890123456789012345678901234567890"|
|
||||
say(gameforge.main_quest_lv60._400_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
----"12345678901234567890123456789012345678901234567890"|
|
||||
say_reward(gameforge.main_quest_lv60._410_sayReward)
|
||||
say("")
|
||||
|
||||
--@@@ <20><><EFBFBD><EFBFBD> @@@--
|
||||
--1. <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD>.
|
||||
clear_letter()
|
||||
set_quest_state ("main_quest_lv66", "state_0")
|
||||
set_state (__COMPLETE__)
|
||||
end
|
||||
end
|
||||
|
||||
state __COMPLETE__ begin
|
||||
when enter begin
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
end
|
@ -1,375 +0,0 @@
|
||||
quest main_quest_lv66 begin
|
||||
state start begin
|
||||
end
|
||||
state state_0 begin
|
||||
when login or levelup or enter with pc.level >= 66 begin
|
||||
set_state (state_1)
|
||||
end
|
||||
end
|
||||
state state_1 begin
|
||||
when letter begin
|
||||
send_letter (gameforge.main_quest_lv66._10_sendLetter)
|
||||
local v = find_npc_by_vnum (20011)
|
||||
if v != 0 then
|
||||
target.vid ("__TARGET__",v,"")
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title (gameforge.main_quest_lv66._10_sendLetter)
|
||||
say (gameforge.main_quest_lv66._20_say)
|
||||
end
|
||||
when 20011.chat.gameforge.main_quest_lv66._10_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title ( mob_name(20011))
|
||||
say(gameforge.main_quest_lv66._30_say)
|
||||
end
|
||||
when 1091.kill begin
|
||||
-- target.delete("__TARGET__")
|
||||
set_state (state_2)
|
||||
end
|
||||
end
|
||||
state state_2 begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum (20011)
|
||||
if v != 0 then
|
||||
target.vid ("__TARGET__",v,"")
|
||||
end
|
||||
send_letter (gameforge.main_quest_lv66._10_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title (gameforge.main_quest_lv66._10_sendLetter)
|
||||
say (gameforge.main_quest_lv66._40_say)
|
||||
end
|
||||
when 20011.chat.gameforge.main_quest_lv66._10_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title ( mob_name(20011))
|
||||
say(gameforge.main_quest_lv66._50_say)
|
||||
set_state (state_3)
|
||||
end
|
||||
end
|
||||
state state_3 begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum (20011)
|
||||
if v != 0 then
|
||||
target.vid ("__TARGET__",v,"")
|
||||
end
|
||||
send_letter(gameforge.main_quest_lv66._60_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title (gameforge.main_quest_lv66._60_sendLetter)
|
||||
say(gameforge.main_quest_lv66._70_say)
|
||||
end
|
||||
when 20011.chat.gameforge.main_quest_lv66._60_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20011))
|
||||
say(gameforge.main_quest_lv66._80_say)
|
||||
wait()
|
||||
say_title ( mob_name(20011))
|
||||
say(gameforge.main_quest_lv66._90_say)
|
||||
wait()
|
||||
say_title ( mob_name(20011))
|
||||
say(gameforge.main_quest_lv66._100_say)
|
||||
wait()
|
||||
say_title ( mob_name(20011))
|
||||
say(gameforge.main_quest_lv66._110_say)
|
||||
wait()
|
||||
say_title ( mob_name(20011))
|
||||
say(gameforge.main_quest_lv66._120_say)
|
||||
wait()
|
||||
|
||||
--say_title ("<22><><EFBFBD><EFBFBD> :")
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 5800000))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(72301).." ".."3"..locale.count_postfix))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(30046)))
|
||||
|
||||
pc.give_exp2(5800000)
|
||||
|
||||
pc.give_item2(72301) -- <20>ູ<EFBFBD><E0BAB9> <20><> * 3
|
||||
pc.give_item2(72301)
|
||||
pc.give_item2(72301)
|
||||
pc.give_item2(30046) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
set_state (state_4)
|
||||
end
|
||||
end
|
||||
state state_4 begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum (pc_find_square_guard_vid())
|
||||
if v != 0 then
|
||||
target.vid ("__TARGET__",v,"")
|
||||
end
|
||||
send_letter (gameforge.main_quest_lv66._130_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title (gameforge.main_quest_lv66._130_sendLetter)
|
||||
say (gameforge.main_quest_lv66._140_say)
|
||||
end
|
||||
when 11000.chat.gameforge.main_quest_lv66._130_sendLetter or 11002.chat.gameforge.main_quest_lv66._130_sendLetter or 11004.chat.gameforge.main_quest_lv66._130_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(11000))
|
||||
say(gameforge.main_quest_lv66._150_say)
|
||||
wait()
|
||||
say_title(mob_name(11000))
|
||||
say(gameforge.main_quest_lv66._160_say)
|
||||
set_state (state_5)
|
||||
end
|
||||
end
|
||||
state state_5 begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum (20369)
|
||||
if v != 0 then
|
||||
target.vid ("__TARGET__",v,"")
|
||||
end
|
||||
send_letter(gameforge.main_quest_lv66._170_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv66._170_sendLetter)
|
||||
say (gameforge.main_quest_lv66._140_say)
|
||||
end
|
||||
when 20369.chat.gameforge.main_quest_lv66._170_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(gameforge.main_quest_lv66._190_sayTitle)
|
||||
say(gameforge.main_quest_lv66._200_say)
|
||||
set_state (state_6)
|
||||
end
|
||||
end
|
||||
state state_6 begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum (20369)
|
||||
if v != 0 then
|
||||
target.vid ("__TARGET__",v,"")
|
||||
end
|
||||
send_letter (gameforge.main_quest_lv66._210_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title (gameforge.main_quest_lv66._210_sendLetter)
|
||||
say (gameforge.main_quest_lv66._220_say)
|
||||
end
|
||||
when 20369.chat.gameforge.main_quest_lv66._210_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(gameforge.main_quest_lv66._190_sayTitle)
|
||||
say(gameforge.main_quest_lv66._230_say)
|
||||
wait()
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv66._240_say)
|
||||
wait()
|
||||
say_title(gameforge.main_quest_lv66._190_sayTitle)
|
||||
say(gameforge.main_quest_lv66._250_say)
|
||||
wait()
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv66._260_say)
|
||||
wait()
|
||||
say_title(gameforge.main_quest_lv66._190_sayTitle)
|
||||
say(gameforge.main_quest_lv66._270_say)
|
||||
wait()
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv66._280_say)
|
||||
wait()
|
||||
say_title(mob_name(20369))
|
||||
say(gameforge.main_quest_lv66._290_say)
|
||||
wait()
|
||||
say_title(gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv66._310_say)
|
||||
set_state (state_7)
|
||||
end
|
||||
end
|
||||
state state_7 begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum (20369)
|
||||
if v != 0 then
|
||||
target.vid ("__TARGET__",v,"")
|
||||
end
|
||||
send_letter (gameforge.main_quest_lv66._320_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title (gameforge.main_quest_lv66._320_sendLetter)
|
||||
say (gameforge.main_quest_lv66._330_say)
|
||||
end
|
||||
when 20369.chat.gameforge.main_quest_lv66._320_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title( gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv66._340_say)
|
||||
wait()
|
||||
say_title( gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(string.format(gameforge.main_quest_lv66._350_say,item_name(30033)))
|
||||
wait()
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv66._360_say)
|
||||
wait()
|
||||
say_title(gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv66._370_say)
|
||||
set_state (state_8)
|
||||
end
|
||||
end
|
||||
state state_8 begin
|
||||
when enter begin
|
||||
pc.setqf ("rgd_kill", 0)
|
||||
pc.setqf ("state_8_start", get_global_time())
|
||||
notice_multiline(string.format(gameforge.main_quest_lv66._380_notice, 30), notice)
|
||||
timer("rgd_kill_timer", 30 * 60 / 2)
|
||||
end
|
||||
when letter begin
|
||||
send_letter (gameforge.main_quest_lv66._390_sendLetter)
|
||||
local t = pc.getqf ("state_8_start") + 30 * 60 - get_global_time()
|
||||
q.set_clock(locale.stash.enlarge_1_timer, t)
|
||||
q.set_counter_name (mob_name (2313))
|
||||
q.set_counter_value (200)
|
||||
end
|
||||
when button or info begin
|
||||
say_title (gameforge.main_quest_lv66._390_sendLetter)
|
||||
say (string.format(gameforge.main_quest_lv66._400_say, 200))
|
||||
local t = pc.getqf ("state_8_start") + 30 * 60 - get_global_time()
|
||||
if t < 0 then
|
||||
say(gameforge.main_quest_lv66._410_say)
|
||||
else
|
||||
say(string.format(gameforge.main_quest_lv66._420_say, t / 60))
|
||||
end
|
||||
end
|
||||
when 2313.kill begin
|
||||
if pc.getqf("rgd_kill") >= 200 - 1 then
|
||||
pc.give_item2 (31003, 1)
|
||||
pc.setqf ("rgd_kill", 0)
|
||||
q.set_counter_value (0)
|
||||
set_state (state_9)
|
||||
else
|
||||
pc.setqf ("rgd_kill", pc.getqf ("rgd_kill") + 1)
|
||||
q.set_counter_value (200 - pc.getqf ("rgd_kill"))
|
||||
end
|
||||
end
|
||||
when rgd_kill_timer.timer begin
|
||||
local t = pc.getqf ("state_8_start") + 30 * 60 - get_global_time()
|
||||
notice (string.format(gameforge.main_quest_lv66._420_say, t / 60))
|
||||
end
|
||||
end
|
||||
state state_9 begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum (20369)
|
||||
if v != 0 then
|
||||
target.vid ("__TARGET__",v,"")
|
||||
end
|
||||
send_letter (gameforge.main_quest_lv66._390_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title (gameforge.main_quest_lv66._390_sendLetter)
|
||||
say(gameforge.main_quest_lv66._430_say)
|
||||
end
|
||||
when 20369.chat.gameforge.main_quest_lv66._390_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
pc.remove_item (31003, 1)
|
||||
if (pc.getqf ("state_8_start") + 30 * 60 - get_global_time()) >= 0 then
|
||||
q.done()
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv66._440_say)
|
||||
wait()
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv66._450_say)
|
||||
wait()
|
||||
say_title (locale.reward)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 2900000))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 200000))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(30033)))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(50727).." ".."10"..locale.count_postfix))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(50728).." ".."10"..locale.count_postfix))
|
||||
|
||||
pc.give_exp2(2900000)
|
||||
pc.change_money(200000)
|
||||
|
||||
pc.give_item2(30033) -- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
pc.give_item2(50727, 10) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 10
|
||||
pc.give_item2(50728, 10) -- <20><><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD> 10
|
||||
|
||||
else
|
||||
|
||||
say_title(gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv66._460_say)
|
||||
wait()
|
||||
say_title(gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv66._470_say)
|
||||
wait()
|
||||
|
||||
say_title (locale.reward)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 2000000))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 100000))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(50727).." ".."10"..locale.count_postfix))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(50728).." ".."10"..locale.count_postfix))
|
||||
|
||||
pc.give_exp2(2000000)
|
||||
pc.change_money(100000)
|
||||
|
||||
pc.give_item2(50727, 10) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 10
|
||||
pc.give_item2(50728, 10) -- <20><><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD> 10
|
||||
|
||||
end
|
||||
set_state (state_10)
|
||||
end
|
||||
end
|
||||
state state_10 begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum (20370)
|
||||
if v != 0 then
|
||||
target.vid ("__TARGET__",v,"")
|
||||
end
|
||||
send_letter (gameforge.main_quest_lv66._480_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title (gameforge.main_quest_lv66._480_sendLetter)
|
||||
say(gameforge.main_quest_lv66._490_say)
|
||||
end
|
||||
when 20370.chat.gameforge.main_quest_lv66._480_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title( mob_name(20370))
|
||||
say(gameforge.main_quest_lv66._500_say)
|
||||
wait()
|
||||
say_title ( pc.getname())
|
||||
say(gameforge.main_quest_lv66._510_say)
|
||||
wait()
|
||||
say_title ( mob_name(20370))
|
||||
say(gameforge.main_quest_lv66._520_say)
|
||||
wait()
|
||||
say_title ( pc.getname())
|
||||
say(gameforge.main_quest_lv66._530_say)
|
||||
wait()
|
||||
say_title ( mob_name(20370))
|
||||
say(gameforge.main_quest_lv66._540_say)
|
||||
wait()
|
||||
say_title ( mob_name(20370))
|
||||
say(gameforge.main_quest_lv66._550_say)
|
||||
set_state (state_11)
|
||||
end
|
||||
end
|
||||
state state_11 begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum (20369)
|
||||
if v != 0 then
|
||||
target.vid ("__TARGET__",v,"")
|
||||
end
|
||||
send_letter (gameforge.main_quest_lv66._560_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title (gameforge.main_quest_lv66._560_sendLetter)
|
||||
say (gameforge.main_quest_lv66._570_say)
|
||||
end
|
||||
when 20369.chat.gameforge.main_quest_lv66._560_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv66._580_say)
|
||||
wait()
|
||||
say_title ( pc.getname())
|
||||
say(gameforge.main_quest_lv66._590_say)
|
||||
wait()
|
||||
say_title(gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv66._600_say)
|
||||
wait()
|
||||
say_title(gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv66._610_say)
|
||||
wait()
|
||||
say_title(gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv66._620_say)
|
||||
set_state (__COMPLETE__)
|
||||
q.done()
|
||||
set_quest_state ("main_quest_lv72", "state_0")
|
||||
end
|
||||
end
|
||||
state __COMPLETE__ begin
|
||||
end
|
||||
end
|
@ -1,220 +0,0 @@
|
||||
quest main_quest_lv72 begin
|
||||
state start begin
|
||||
end
|
||||
state state_0 begin
|
||||
when login or levelup or enter with pc.level >= 72 begin
|
||||
set_state (state_1)
|
||||
end
|
||||
end
|
||||
state state_1 begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum (20369)
|
||||
if v != 0 then
|
||||
target.vid ("__TARGET__",v,"")
|
||||
end
|
||||
send_letter(gameforge.main_quest_lv72._10_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv72._10_sendLetter)
|
||||
say (gameforge.main_quest_lv72._20_say)
|
||||
end
|
||||
when 20369.chat.gameforge.main_quest_lv72._10_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv72._30_say)
|
||||
wait()
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv72._40_say)
|
||||
wait()
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv72._50_say)
|
||||
set_state (state_2)
|
||||
end
|
||||
end
|
||||
state state_2 begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum (20372)
|
||||
if v != 0 then
|
||||
target.vid ("__TARGET__",v,"")
|
||||
end
|
||||
send_letter(gameforge.main_quest_lv72._60_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv72._60_sendLetter)
|
||||
say (gameforge.main_quest_lv72._70_say)
|
||||
end
|
||||
when 20372.click begin
|
||||
target.delete("__TARGET__")
|
||||
say(gameforge.main_quest_lv72._80_say)
|
||||
wait()
|
||||
say_title(mob_name(20372))
|
||||
say(gameforge.main_quest_lv72._90_say)
|
||||
wait()
|
||||
say_title(mob_name(20372))
|
||||
say(gameforge.main_quest_lv72._100_say)
|
||||
wait()
|
||||
say(gameforge.main_quest_lv72._110_say)
|
||||
pc.give_item2 (30160, 1)
|
||||
set_state (report_discovery)
|
||||
end
|
||||
end
|
||||
state report_discovery begin
|
||||
|
||||
when button or info begin
|
||||
return
|
||||
end
|
||||
|
||||
when 20369.chat.gameforge.main_quest_lv72._60_sendLetter begin
|
||||
pc.remove_item (30160)
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv72._120_say)
|
||||
wait()
|
||||
say_title ( pc.getname())
|
||||
say(gameforge.main_quest_lv72._130_say)
|
||||
wait()
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv72._140_say)
|
||||
wait()
|
||||
say_title ( pc.getname())
|
||||
say(gameforge.main_quest_lv72._150_say)
|
||||
wait()
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv72._160_say)
|
||||
wait()
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv72._170_say)
|
||||
wait()
|
||||
|
||||
if number (1,2) == 1 then
|
||||
drug = 30009
|
||||
else
|
||||
drug = 30083
|
||||
end
|
||||
say_title (locale.reward)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 3100000))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(70005)))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(drug)))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(30039)))
|
||||
|
||||
pc.give_exp2(3100000)
|
||||
|
||||
pc.give_item2(70005) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
pc.give_item2(drug) -- <20>˼<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> (+<2B><> <20><><EFBFBD><EFBFBD>)
|
||||
pc.give_item2(30039) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
set_state (state_4)
|
||||
end
|
||||
end
|
||||
state state_4 begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum (20369)
|
||||
if v != 0 then
|
||||
target.vid ("__TARGET__",v,"")
|
||||
end
|
||||
send_letter(gameforge.main_quest_lv72._180_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv72._180_sendLetter)
|
||||
say(gameforge.main_quest_lv72._190_say)
|
||||
end
|
||||
when 20369.chat.gameforge.main_quest_lv72._180_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv72._200_say)
|
||||
wait()
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv72._210_say)
|
||||
wait()
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv72._220_say)
|
||||
pc.setqf ("collect_beads", 0)
|
||||
|
||||
set_state (state_5)
|
||||
end
|
||||
end
|
||||
state state_5 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv72._180_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv72._180_sendLetter)
|
||||
say(gameforge.main_quest_lv72._190_say)
|
||||
end
|
||||
|
||||
when 1105.kill or 1106.kill or 1107.kill begin
|
||||
if number(1, 100) > 1 then
|
||||
return
|
||||
end
|
||||
|
||||
local n = pc.getqf ("pass_beads")
|
||||
local i = pc.count_item (31005)
|
||||
if n < 50 and pc.count_item (31005) < 50 - n then
|
||||
notice_multiline(gameforge.main_quest_lv72._240_notice, notice)
|
||||
notice_multiline(string.format(gameforge.main_quest_lv72._250_notice, 50 - n - 1), notice)
|
||||
pc.give_item2 (31005, 1)
|
||||
end
|
||||
end
|
||||
|
||||
when 20369.chat.gameforge.main_quest_lv72._180_sendLetter with pc.count_item (31005) > 0 begin
|
||||
local now = get_global_time()
|
||||
local today = now - math.mod (now, 86400)
|
||||
local can_report_num
|
||||
if pc.getqf ("last_access_date") != today then
|
||||
pc.setqf ("last_access_date", today)
|
||||
pc.setqf ("blue_bead_todays_report_num", 1)
|
||||
else
|
||||
local reported_num = pc.getqf("blue_bead_todays_report_num")
|
||||
|
||||
if 10 - reported_num <= 0 then
|
||||
say(gameforge.main_quest_lv72._260_say)
|
||||
return
|
||||
else
|
||||
if not pc.is_gm() then
|
||||
pc.setqf ("blue_bead_todays_report_num", reported_num + 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
pc.remove_item (31005, 1)
|
||||
local n = pc.getqf("pass_beads")
|
||||
if number (1,100) > 60 then
|
||||
say_title (mob_name(20369))
|
||||
say(gameforge.main_quest_lv72._270_say)
|
||||
return
|
||||
elseif n < 50 -1 then
|
||||
pc.setqf ("pass_beads", n + 1)
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say (string.format(gameforge.main_quest_lv72._280_say, 50 - n - 1))
|
||||
else
|
||||
pc.setqf("pass_beads", 0)
|
||||
say_title(gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv72._290_say)
|
||||
wait()
|
||||
say_title (locale.reward)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 20000000))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 225000))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(71035).." ".."3"..locale.count_postfix))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(70043)))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(72024)))
|
||||
|
||||
pc.give_exp2(20000000)
|
||||
pc.change_money(225000)
|
||||
|
||||
pc.give_item2(71035)
|
||||
pc.give_item2(71035)
|
||||
pc.give_item2(71035)
|
||||
pc.give_item2(70043)
|
||||
pc.give_item2(72024)
|
||||
|
||||
wait()
|
||||
say(gameforge.main_quest_lv72._300_say)
|
||||
set_state (__COMPLETE__)
|
||||
q.done()
|
||||
set_quest_state ("main_quest_lv78", "state_0")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
state __COMPLETE__ begin
|
||||
end
|
||||
end
|
@ -1,228 +0,0 @@
|
||||
quest main_quest_lv78 begin
|
||||
state start begin
|
||||
end
|
||||
state state_0 begin
|
||||
when login or levelup or enter with pc.level >= 78 begin
|
||||
set_state (state_1)
|
||||
end
|
||||
end
|
||||
state state_1 begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum (20369)
|
||||
if v != 0 then
|
||||
target.vid ("__TARGET__",v,"")
|
||||
end
|
||||
send_letter(gameforge.main_quest_lv78._10_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv78._10_sendLetter)
|
||||
say (gameforge.main_quest_lv78._20_say)
|
||||
end
|
||||
when 20369.chat.gameforge.main_quest_lv78._10_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv78._30_say)
|
||||
wait()
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv78._40_say)
|
||||
set_state (make_red_bead)
|
||||
end
|
||||
end
|
||||
state make_red_bead begin
|
||||
when enter begin
|
||||
pc.setqf ("first_make_time", 0)
|
||||
end
|
||||
when 2205.kill or 2204.kill or 2203.kill begin
|
||||
if number(1, 500) == 1 then
|
||||
pc.give_item2 (31007, 1)
|
||||
end
|
||||
end
|
||||
when 20369.chat.gameforge.main_quest_lv78._10_sendLetter begin
|
||||
if pc.count_item (31006) >= 20 then
|
||||
say_title (mob_name(20369))
|
||||
say(string.format(gameforge.main_quest_lv78._50_say, 20))
|
||||
wait()
|
||||
|
||||
say_title (locale.reward)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 36000000))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(72725)))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(70024)))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(70004)))
|
||||
|
||||
pc.give_exp2(36000000)
|
||||
|
||||
pc.give_item2(72725) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ູ(<28><>)
|
||||
pc.give_item2(70024) -- <20>ູ<EFBFBD><E0BAB9> <20><><EFBFBD><EFBFBD>
|
||||
pc.give_item2(70004) -- <20>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
pc.remove_item (31006, pc.count_item (31006))
|
||||
set_state (state_2)
|
||||
return
|
||||
end
|
||||
local t = get_global_time()
|
||||
local today = t - math.mod (t, 86400)
|
||||
if pc.getqf ("first_make_time") != today then
|
||||
pc.setqf ("first_make_time", today)
|
||||
pc.setqf ("make_count", 0)
|
||||
end
|
||||
if pc.count_item (90010) < 1 or pc.count_item (30019) < 1 or
|
||||
pc.count_item (31007) < 1 then
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say (gameforge.main_quest_lv78._60_say)
|
||||
return
|
||||
end
|
||||
local n = pc.getqf ("make_count")
|
||||
if n >= 7 then
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv78._70_say)
|
||||
return
|
||||
else
|
||||
pc.remove_item(90010, 1)
|
||||
pc.remove_item(30019, 1)
|
||||
pc.remove_item(31007, 1)
|
||||
say_title(gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv78._80_say)
|
||||
wait()
|
||||
pc.setqf ("make_count", n + 1)
|
||||
local n = number (1,100)
|
||||
if n > 60 then
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv78._90_say)
|
||||
wait()
|
||||
elseif pc.count_item (31006) < 20 then
|
||||
pc.give_item2 (31006, 1)
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv78._100_say)
|
||||
say_item_vnum(31006)
|
||||
wait ()
|
||||
else
|
||||
say_title (mob_name(20369))
|
||||
say(string.format(gameforge.main_quest_lv78._50_say, 20))
|
||||
wait()
|
||||
|
||||
say_title (locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 36000000))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(72725)))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(70024)))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(70004)))
|
||||
|
||||
pc.give_exp2(36000000)
|
||||
|
||||
pc.give_item2(72725) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ູ(<28><>)
|
||||
pc.give_item2(70024) -- <20>ູ<EFBFBD><E0BAB9> <20><><EFBFBD><EFBFBD>
|
||||
pc.give_item2(70004) -- <20>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
pc.remove_item (31006, pc.count_item (31006))
|
||||
set_state (state_2)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
state state_2 begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum (20369)
|
||||
if v != 0 then
|
||||
target.vid ("__TARGET__",v,"")
|
||||
end
|
||||
send_letter (gameforge.main_quest_lv78._110_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title (gameforge.main_quest_lv78._110_sendLetter)
|
||||
say(gameforge.main_quest_lv78._120_say)
|
||||
end
|
||||
when 20369.chat.gameforge.main_quest_lv78._110_sendLetter with pc.count_item (31004) < 100 begin
|
||||
target.delete("__TARGET__")
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv78._130_say)
|
||||
wait()
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv78._140_say)
|
||||
end
|
||||
when 2315.kill or 2314.kill begin
|
||||
if number (1, 300) == 1 then
|
||||
pc.give_item2 (31004, 1)
|
||||
local n = pc.count_item (31004)
|
||||
if n < 100 then
|
||||
notice (string.format(gameforge.main_quest_lv78._150_say, 100 - n))
|
||||
else
|
||||
notice_multiline(gameforge.main_quest_lv78._160_notice, notice)
|
||||
end
|
||||
end
|
||||
end
|
||||
when 20369.chat.gameforge.main_quest_lv78._110_sendLetter with pc.count_item (31004) >= 100 begin
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv78._170_say)
|
||||
wait()
|
||||
say_title ( pc.getname())
|
||||
say(gameforge.main_quest_lv78._180_say)
|
||||
wait()
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv78._190_say)
|
||||
wait()
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv78._200_say)
|
||||
wait()
|
||||
say_title (locale.reward)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 48000000))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 230000))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(72729)))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(70035)))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(70003)))
|
||||
|
||||
pc.give_exp2(48000000)
|
||||
pc.change_money(230000)
|
||||
|
||||
pc.give_item2(72729) -- ȭ<><C8AD><EFBFBD><EFBFBD> <20>ູ(<28><>)
|
||||
pc.give_item2(70035) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö
|
||||
pc.give_item2(70003) -- <20><><EFBFBD><EFBFBD>
|
||||
pc.remove_item (31004, pc.count_item (31004))
|
||||
set_state (state_3)
|
||||
end
|
||||
end
|
||||
state state_3 begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum (20018)
|
||||
if v != 0 then
|
||||
target.vid ("__TARGET__",v,"")
|
||||
end
|
||||
send_letter (gameforge.main_quest_lv78._210_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title (gameforge.main_quest_lv78._210_sendLetter)
|
||||
say(gameforge.main_quest_lv78._220_say)
|
||||
end
|
||||
when 20018.chat.gameforge.main_quest_lv78._210_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title ( mob_name(20018))
|
||||
say(gameforge.main_quest_lv78._230_say)
|
||||
wait()
|
||||
say_title ( pc.get_name ())
|
||||
say(gameforge.main_quest_lv78._240_say)
|
||||
wait()
|
||||
say_title ( mob_name(20018))
|
||||
say(gameforge.main_quest_lv78._250_say)
|
||||
wait()
|
||||
say_title ( pc.get_name ())
|
||||
say(gameforge.main_quest_lv78._260_say)
|
||||
wait()
|
||||
say_title ( mob_name(20018))
|
||||
say(gameforge.main_quest_lv78._270_say)
|
||||
wait()
|
||||
say_title ( pc.get_name ())
|
||||
say(gameforge.main_quest_lv78._280_say)
|
||||
wait()
|
||||
say_title ( mob_name(20018))
|
||||
say(gameforge.main_quest_lv78._290_say)
|
||||
wait()
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(30319).." ".."2"..locale.count_postfix))
|
||||
pc.give_item2(30319,2)
|
||||
wait()
|
||||
say(gameforge.main_quest_lv78._300_say)
|
||||
set_state (__COMPLETE__)
|
||||
q.done()
|
||||
set_quest_state("main_quest_lv84", "state_0")
|
||||
|
||||
end
|
||||
end
|
||||
state __COMPLETE__ begin
|
||||
end
|
||||
end
|
@ -1,151 +0,0 @@
|
||||
quest main_quest_lv84 begin
|
||||
state start begin
|
||||
end
|
||||
state state_0 begin
|
||||
when login or levelup or enter with pc.level >= 84 begin
|
||||
set_state (state_1)
|
||||
end
|
||||
end
|
||||
state state_1 begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum (20369)
|
||||
if v != 0 then
|
||||
target.vid ("__TARGET__",v,"")
|
||||
end
|
||||
send_letter (gameforge.main_quest_lv84._10_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv84._10_sendLetter)
|
||||
say(gameforge.main_quest_lv84._20_say)
|
||||
end
|
||||
when 20369.chat.gameforge.main_quest_lv84._10_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv84._30_say)
|
||||
wait()
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv84._40_say)
|
||||
wait()
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv84._50_say)
|
||||
pc.give_item2(31008)
|
||||
set_state (state_4)
|
||||
end
|
||||
|
||||
end
|
||||
state state_4 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv84._60_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv84._60_sendLetter)
|
||||
say(gameforge.main_quest_lv84._70_say)
|
||||
end
|
||||
|
||||
when 31008.use with pc.get_map_index() >= 2160000 and pc.get_map_index() < 2170000 begin --and pc.getf("devilcatacomb_zone", "level") == 5 begin
|
||||
party.give_buff(303, POINT_ATT_SPEED, 20, 13, 1800, 0, true, true)
|
||||
party.give_buff(303, POINT_MOV_SPEED, 20, 12, 1800, 0, true, true)
|
||||
party.give_buff(303, POINT_CASTING_SPEED, 20, 0, 1800, 0, true, true)
|
||||
party.give_buff(303, POINT_ATTBONUS_MONSTER, 30, 0, 1800, 0, true, true)
|
||||
party.give_buff(303, POINT_MAX_HP_PCT, 10, 0, 1800, 0, true, true)
|
||||
party.give_buff(303, POINT_MAX_SP_PCT, 10, 0, 1800, 0, true, true)
|
||||
|
||||
say(gameforge.main_quest_lv84._80_say)
|
||||
|
||||
end
|
||||
|
||||
when 2591.kill begin
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 63000000))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(71026).." ".."2"..locale.count_postfix))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(70051)))
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward, item_name(70050)))
|
||||
|
||||
pc.give_exp2(63000000)
|
||||
pc.change_money(250000)
|
||||
|
||||
pc.give_item2(71026) -- <20><>ö
|
||||
pc.give_item2(71026) -- <20><>ö
|
||||
pc.give_item2(70051) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>尩
|
||||
pc.give_item2(70050) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǥ
|
||||
|
||||
set_state (state_2)
|
||||
end
|
||||
end
|
||||
state state_2 begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum (20369)
|
||||
if v != 0 then
|
||||
target.vid ("__TARGET__",v,"")
|
||||
end
|
||||
send_letter(gameforge.main_quest_lv84._90_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv84._90_sendLetter)
|
||||
say (gameforge.main_quest_lv84._100_say)
|
||||
end
|
||||
when 20369.chat.gameforge.main_quest_lv84._90_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv84._110_say)
|
||||
wait()
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv84._120_say)
|
||||
end
|
||||
when 2597.kill begin
|
||||
say_reward(gameforge.main_quest_lv84._130_sayReward)
|
||||
say(gameforge.main_quest_lv84._140_say)
|
||||
set_state (state_3)
|
||||
end
|
||||
end
|
||||
state state_3 begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum (20369)
|
||||
if v != 0 then
|
||||
target.vid ("__TARGET__",v,"")
|
||||
end
|
||||
send_letter(gameforge.main_quest_lv84._150_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv84._150_sendLetter)
|
||||
say (gameforge.main_quest_lv84._160_say)
|
||||
end
|
||||
when 20369.chat.gameforge.main_quest_lv84._150_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
say_title (" ")
|
||||
say(gameforge.main_quest_lv84._170_say)
|
||||
wait()
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv84._180_say)
|
||||
wait()
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv84._190_say)
|
||||
wait()
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv84._200_say)
|
||||
wait()
|
||||
say_title (gameforge.main_quest_lv66._300_sayTitle)
|
||||
say(gameforge.main_quest_lv84._210_say)
|
||||
wait()
|
||||
say_title (locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 84000000))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 250000))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(71025).." ".."2"..locale.count_postfix))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(70038)))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(71107)))
|
||||
|
||||
pc.give_exp2(84000000)
|
||||
pc.change_money(250000)
|
||||
|
||||
pc.give_item2(71025) -- <20>߰<EFBFBD><DFB0><EFBFBD>
|
||||
pc.give_item2(71025) -- <20>߰<EFBFBD><DFB0><EFBFBD>
|
||||
pc.give_item2(70038) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
pc.give_item2(71107) -- õ<><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
set_state (__COMPLETE__)
|
||||
end
|
||||
end
|
||||
|
||||
state __COMPLETE__ begin
|
||||
end
|
||||
end
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,768 +0,0 @@
|
||||
quest main_quest_lv91 begin
|
||||
state start begin
|
||||
end
|
||||
state state0 begin
|
||||
when login or levelup or enter with pc.level >= 91 begin
|
||||
set_state (state1_1)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-----------------<1> <20>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ƶ<EFBFBD>!1-1-----------------
|
||||
-----------------<1> <20>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ƶ<EFBFBD>!1-1-----------------
|
||||
-----------------<1> <20>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ƶ<EFBFBD>!1-1-----------------
|
||||
-----------------<1> <20>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ƶ<EFBFBD>!1-1-----------------
|
||||
-----------------<1> <20>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ƶ<EFBFBD>!1-1-----------------
|
||||
-----------------<1> <20>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ƶ<EFBFBD>!1-1-----------------
|
||||
-----------------<1> <20>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ƶ<EFBFBD>!1-1-----------------
|
||||
-----------------<1> <20>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ƶ<EFBFBD>!1-1-----------------
|
||||
-----------------<1> <20>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ƶ<EFBFBD>!1-1-----------------
|
||||
-----------------<1> <20>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ƶ<EFBFBD>!1-1-----------------
|
||||
-----------------<1> <20>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ƶ<EFBFBD>!1-1-----------------
|
||||
state state1_1 begin
|
||||
when letter begin
|
||||
send_letter (gameforge.main_quest_lv91._010_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv91._010_sendLetter)
|
||||
say(gameforge.main_quest_lv91._020_say)
|
||||
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv91._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv91._030_say)
|
||||
wait()
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv91._050_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv91._060_say)
|
||||
wait()
|
||||
|
||||
set_state (state1_2)
|
||||
end
|
||||
end
|
||||
state state1_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv91._010_sendLetter)
|
||||
--q.set_counter_name(locale.main_quest_lv91.remain_mob)
|
||||
end
|
||||
when button or info begin
|
||||
-- if pc.get_map_index() == 1 then
|
||||
-- addmapsignal(500 * 100, 500 * 100)
|
||||
-- addmapsignal(600 * 100, 500 * 100)
|
||||
-- addmapsignal(700 * 100, 300 * 100)
|
||||
-- end
|
||||
|
||||
say_title(gameforge.main_quest_lv91._070_sayTitle)
|
||||
say(gameforge.main_quest_lv91._080_say)
|
||||
|
||||
-- say()
|
||||
-- say_reward(locale.main_quest_lv91.pos_info)
|
||||
-- select(gameforge.main_quest_lv90._950_say)
|
||||
-- setskin(NOWINDOW)
|
||||
-- clearmapsignal()
|
||||
--say_title(gameforge.main_quest_lv91._760_say)
|
||||
--local remain = 10 - pc.getqf("mob1_1_killed")
|
||||
--if remain < 0 then
|
||||
-- remain = 0
|
||||
--end
|
||||
--q.set_counter_value(remain)
|
||||
--say_title(string.format(gameforge.main_quest_lv91._770_say,mob_name(3205),remain))
|
||||
end
|
||||
|
||||
--[[
|
||||
--Ŭ<><C5AC><EFBFBD><EFBFBD> <20><>--
|
||||
when 20378.chat.gameforge.main_quest_lv91._010_sendLetter begin
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv91._520_say)
|
||||
end
|
||||
--]]
|
||||
|
||||
when 3205.kill begin
|
||||
local mob1_1_killed = pc.getqf("mob1_1_killed")
|
||||
if mob1_1_killed < 10 then
|
||||
pc.setqf("mob1_1_killed", mob1_1_killed + 1)
|
||||
|
||||
local remain = 10 - pc.getqf("mob1_1_killed")
|
||||
if remain < 0 then
|
||||
remain = 0
|
||||
end
|
||||
--q.set_counter_value(remain)
|
||||
|
||||
if remain == 0 then
|
||||
say_title(mob_name(3205))
|
||||
say(gameforge.main_quest_lv91._100_say)
|
||||
|
||||
notice_multiline(gameforge.main_quest_lv91._090_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv91._090_2_notice,notice)
|
||||
set_state (state1_3)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
state state1_3 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv91._010_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
--q.set_counter_name("")
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv91._010_sendLetter)
|
||||
say(gameforge.main_quest_lv91._110_say)
|
||||
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv91._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv91._120_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv91._130_say)
|
||||
wait()
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv91._150_say)
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 18803050))
|
||||
--say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 0))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(30051),1,locale.count_postfix))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(50814),10,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(18803050)
|
||||
--pc.change_money(0)
|
||||
pc.give_item2(30051, 1)
|
||||
pc.give_item2(50814, 10)
|
||||
|
||||
set_state (state2_1)
|
||||
end
|
||||
end
|
||||
|
||||
-----------------<2> <20>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Żȯ<C5BB>϶<EFBFBD>!-----------------
|
||||
-----------------<2> <20>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Żȯ<C5BB>϶<EFBFBD>!-----------------
|
||||
-----------------<2> <20>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Żȯ<C5BB>϶<EFBFBD>!-----------------
|
||||
-----------------<2> <20>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Żȯ<C5BB>϶<EFBFBD>!-----------------
|
||||
-----------------<2> <20>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Żȯ<C5BB>϶<EFBFBD>!-----------------
|
||||
-----------------<2> <20>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Żȯ<C5BB>϶<EFBFBD>!-----------------
|
||||
-----------------<2> <20>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Żȯ<C5BB>϶<EFBFBD>!-----------------
|
||||
-----------------<2> <20>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Żȯ<C5BB>϶<EFBFBD>!-----------------
|
||||
-----------------<2> <20>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Żȯ<C5BB>϶<EFBFBD>!-----------------
|
||||
-----------------<2> <20>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Żȯ<C5BB>϶<EFBFBD>!-----------------
|
||||
-----------------<2> <20>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Żȯ<C5BB>϶<EFBFBD>!-----------------
|
||||
state state2_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv91._160_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv91._160_sendLetter)
|
||||
say(gameforge.main_quest_lv91._170_say)
|
||||
|
||||
end
|
||||
when 20378.chat.gameforge.main_quest_lv91._160_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv91._180_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv91._190_say)
|
||||
|
||||
set_state (state2_2)
|
||||
end
|
||||
end
|
||||
state state2_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv91._160_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
-- if pc.get_map_index() == 1 then
|
||||
-- addmapsignal(500 * 100, 500 * 100)
|
||||
-- addmapsignal(600 * 100, 500 * 100)
|
||||
-- addmapsignal(700 * 100, 300 * 100)
|
||||
-- end
|
||||
|
||||
say_title(gameforge.main_quest_lv91._200_sayTitle)
|
||||
say(gameforge.main_quest_lv91._210_say)
|
||||
say_item_vnum(31075)
|
||||
|
||||
-- say()
|
||||
-- say_reward(locale.main_quest_lv91.pos_info)
|
||||
-- say()
|
||||
-- say()
|
||||
-- select(gameforge.main_quest_lv90._950_say)
|
||||
-- setskin(NOWINDOW)
|
||||
-- clearmapsignal()
|
||||
end
|
||||
|
||||
--Ŭ<><C5AC><EFBFBD><EFBFBD> <20><>--
|
||||
when 20378.chat.gameforge.main_quest_lv91._160_sendLetter begin
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv91._220_say)
|
||||
end
|
||||
|
||||
when 3291.kill begin
|
||||
if number(1,500) == 1 then
|
||||
if pc.count_item(31075) < 1 then
|
||||
notice_multiline(gameforge.main_quest_lv91._230_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv91._230_2_notice,notice)
|
||||
pc.give_item2(31075, 1)
|
||||
set_state (state2_3)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
-- <20><><EFBFBD><EFBFBD>Ʈ <20>Ϸ<EFBFBD>
|
||||
state state2_3 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv91._160_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv91._160_sendLetter)
|
||||
say(gameforge.main_quest_lv91._240_say)
|
||||
|
||||
end
|
||||
|
||||
-- <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>츦 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD>.
|
||||
when 3291.kill begin
|
||||
if number(1,500) == 1 then
|
||||
if pc.count_item(31075) < 1 then
|
||||
notice_multiline(gameforge.main_quest_lv91._230_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv91._230_2_notice,notice)
|
||||
pc.give_item2(31075, 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv91._160_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
if pc.count_item(31075) >= 1 then
|
||||
pc.remove_item ( 31075, pc.count_item(31075))
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv91._250_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv91._260_say)
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 24873650))
|
||||
--say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 0))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(50722),20,locale.count_postfix))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(72016),1,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(24873650)
|
||||
--pc.change_money(0)
|
||||
pc.give_item2(50722, 20)
|
||||
pc.give_item2_select(72016)
|
||||
item.set_socket(2, 120)
|
||||
|
||||
set_state (state3_1)
|
||||
else
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv91._220_say)
|
||||
|
||||
set_state (state2_2)
|
||||
end
|
||||
end
|
||||
end
|
||||
-----------------<3> <20>ι<EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-1-----------------
|
||||
-----------------<3> <20>ι<EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-1-----------------
|
||||
-----------------<3> <20>ι<EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-1-----------------
|
||||
-----------------<3> <20>ι<EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-1-----------------
|
||||
-----------------<3> <20>ι<EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-1-----------------
|
||||
-----------------<3> <20>ι<EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-1-----------------
|
||||
-----------------<3> <20>ι<EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-1-----------------
|
||||
-----------------<3> <20>ι<EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-1-----------------
|
||||
-----------------<3> <20>ι<EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-1-----------------
|
||||
-----------------<3> <20>ι<EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-1-----------------
|
||||
-----------------<3> <20>ι<EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-1-----------------
|
||||
state state3_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv91._270_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv91._270_sendLetter)
|
||||
say(gameforge.main_quest_lv91._280_say)
|
||||
|
||||
end
|
||||
when 20380.chat.gameforge.main_quest_lv91._270_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20380 ))
|
||||
say(gameforge.main_quest_lv91._290_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv91._300_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20380 ))
|
||||
say(gameforge.main_quest_lv91._310_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20380 ))
|
||||
say(gameforge.main_quest_lv91._320_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20380 ))
|
||||
say(gameforge.main_quest_lv91._330_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv91._340_say)
|
||||
|
||||
set_state (state3_2)
|
||||
end
|
||||
end
|
||||
state state3_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv91._270_sendLetter)
|
||||
q.set_counter_name(gameforge.main_quest_lv90._1180_say)
|
||||
end
|
||||
when button or info begin
|
||||
-- if pc.get_map_index() == 1 then
|
||||
-- addmapsignal(500 * 100, 500 * 100)
|
||||
-- addmapsignal(600 * 100, 500 * 100)
|
||||
-- addmapsignal(700 * 100, 300 * 100)
|
||||
-- end
|
||||
say_title(gameforge.main_quest_lv91._350_sayTitle)
|
||||
say(gameforge.main_quest_lv91._360_say)
|
||||
say_item_vnum(31018)
|
||||
say(gameforge.main_quest_lv90._1180_say)
|
||||
local remain = 10 - pc.getqf("item3_1_checked")
|
||||
if remain < 0 then
|
||||
remain = 0
|
||||
end
|
||||
q.set_counter_value(remain)
|
||||
say_reward(string.format(gameforge.main_quest_lv90._1190_say,item_name(31018),remain))
|
||||
|
||||
-- say()
|
||||
-- say_reward(locale.main_quest_lv91.pos_info)
|
||||
-- select(gameforge.main_quest_lv90._950_say)
|
||||
-- setskin(NOWINDOW)
|
||||
-- clearmapsignal()
|
||||
end
|
||||
|
||||
--Ŭ<><C5AC><EFBFBD><EFBFBD> <20><>--
|
||||
when 20380.chat.gameforge.main_quest_lv91._270_sendLetter with pc.count_item(31018) > 0 begin
|
||||
if pc.count_item(31018) > 0 then
|
||||
pc.remove_item(31018, 1)
|
||||
|
||||
if number(1, 100 ) <= 70 then -- <20><>ǰ <20><><EFBFBD><EFBFBD>
|
||||
say_title(mob_name(20380 ))
|
||||
say(gameforge.main_quest_lv91._380_say)
|
||||
pc.setqf("item3_1_checked", pc.getqf("item3_1_checked") + 1)
|
||||
|
||||
local remain = 10 - pc.getqf("item3_1_checked")
|
||||
if remain < 0 then
|
||||
remain = 0
|
||||
end
|
||||
q.set_counter_value(remain)
|
||||
|
||||
if pc.getqf("item3_1_checked") >= 10 then -- <20><>ǰ <20><><EFBFBD><EFBFBD> <20><EFBFBD>
|
||||
pc.remove_item(31018, pc.count_item(31018))
|
||||
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20380 ))
|
||||
say(gameforge.main_quest_lv91._390_say)
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 25805450))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 214000))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(30009),2,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(25805450)
|
||||
pc.change_money(214000)
|
||||
pc.give_item2(30009, 2)
|
||||
|
||||
set_state (state4_1)
|
||||
q.set_counter_name("")
|
||||
else -- <20><>ǰ <20><><EFBFBD><EFBFBD> <20>̴<EFBFBD>
|
||||
say(string.format(gameforge.main_quest_lv91._400_say,remain))
|
||||
end
|
||||
else -- <20><>ǰ <20><><EFBFBD><EFBFBD>
|
||||
say_title(mob_name(20380 ))
|
||||
say(gameforge.main_quest_lv91._370_say)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
when 3601.kill or 3602.kill or 3603.kill or 3604.kill or 3605.kill begin
|
||||
if number(1,300) == 1 then
|
||||
pc.give_item2(31018, 1)
|
||||
|
||||
notice_multiline(gameforge.main_quest_lv91._410_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv91._410_2_notice,notice)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-----------------<4> <20>ι<EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-2-----------------
|
||||
-----------------<4> <20>ι<EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-2-----------------
|
||||
-----------------<4> <20>ι<EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-2-----------------
|
||||
-----------------<4> <20>ι<EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-2-----------------
|
||||
-----------------<4> <20>ι<EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-2-----------------
|
||||
-----------------<4> <20>ι<EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-2-----------------
|
||||
-----------------<4> <20>ι<EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-2-----------------
|
||||
-----------------<4> <20>ι<EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-2-----------------
|
||||
-----------------<4> <20>ι<EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-2-----------------
|
||||
-----------------<4> <20>ι<EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-2-----------------
|
||||
-----------------<4> <20>ι<EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-2-----------------
|
||||
state state4_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv91._420_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv91._420_sendLetter)
|
||||
say(gameforge.main_quest_lv91._430_say)
|
||||
|
||||
end
|
||||
when 20380.chat.gameforge.main_quest_lv91._420_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20380 ))
|
||||
say(gameforge.main_quest_lv91._440_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv91._450_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20380 ))
|
||||
say(gameforge.main_quest_lv91._460_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv91._470_say)
|
||||
|
||||
set_state (state4_2)
|
||||
end
|
||||
end
|
||||
state state4_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv91._420_sendLetter)
|
||||
q.set_counter_name(gameforge.main_quest_lv90._1180_say)
|
||||
end
|
||||
when button or info begin
|
||||
-- if pc.get_map_index() == 1 then
|
||||
-- addmapsignal(500 * 100, 500 * 100)
|
||||
-- addmapsignal(600 * 100, 500 * 100)
|
||||
-- addmapsignal(700 * 100, 300 * 100)
|
||||
-- end
|
||||
|
||||
say_title(gameforge.main_quest_lv91._480_sayTitle)
|
||||
say(gameforge.main_quest_lv91._490_say)
|
||||
say_item_vnum(31019)
|
||||
say(gameforge.main_quest_lv90._1180_say)
|
||||
local remain = 3 - pc.getqf("item4_1_checked")
|
||||
if remain < 0 then
|
||||
remain = 0
|
||||
end
|
||||
q.set_counter_value(remain)
|
||||
say_reward(string.format(gameforge.main_quest_lv90._1190_say,item_name(31019),remain))
|
||||
|
||||
-- say()
|
||||
-- say_reward(locale.main_quest_lv91.pos_info)
|
||||
-- select(gameforge.main_quest_lv90._950_say)
|
||||
-- setskin(NOWINDOW)
|
||||
-- clearmapsignal()
|
||||
end
|
||||
|
||||
--Ŭ<><C5AC><EFBFBD><EFBFBD> <20><>--
|
||||
when 20380.chat.gameforge.main_quest_lv91._420_sendLetter with pc.count_item(31019) > 0 begin
|
||||
if pc.count_item(31019) > 0 then
|
||||
local cur_t = get_global_time() - 60 * 60 * 9
|
||||
local today_date = cur_t - math.mod(cur_t,86400)
|
||||
|
||||
local last_checked_date = pc.getqf("last_checked_date")
|
||||
|
||||
if today_date ~= last_checked_date then
|
||||
pc.setqf("last_checked_date", today_date)
|
||||
pc.setqf("today_item4_1_checked",0)
|
||||
end
|
||||
|
||||
local today_item4_1_checked = pc.getqf("today_item4_1_checked")
|
||||
if today_item4_1_checked >= 1 then --1<><31> <20><>ǰ <20><><EFBFBD><EFBFBD> <20>ʰ<EFBFBD>
|
||||
say_title(mob_name(20380 ))
|
||||
say(gameforge.main_quest_lv91._500_say)
|
||||
else -- <20><>ǰ <20>õ<EFBFBD>.
|
||||
pc.remove_item(31019, 1)
|
||||
|
||||
if number(1, 100 ) <= 70 then -- <20><>ǰ <20><><EFBFBD><EFBFBD>
|
||||
say_title(mob_name(20380 ))
|
||||
say(gameforge.main_quest_lv91._510_say)
|
||||
pc.setqf("item4_1_checked", pc.getqf("item4_1_checked") + 1)
|
||||
pc.setqf("today_item4_1_checked", pc.getqf("today_item4_1_checked") + 1)
|
||||
|
||||
local remain = 3 - pc.getqf("item4_1_checked")
|
||||
if remain < 0 then
|
||||
remain = 0
|
||||
end
|
||||
q.set_counter_value(remain)
|
||||
|
||||
if pc.getqf("item4_1_checked") >= 3 then -- <20><>ǰ <20><><EFBFBD><EFBFBD> <20><EFBFBD>
|
||||
pc.remove_item(31019, pc.count_item(31019))
|
||||
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20380 ))
|
||||
say(gameforge.main_quest_lv91._520_say)
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 27874000))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 225000))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(27874000)
|
||||
pc.change_money(225000)
|
||||
|
||||
set_state (state5_1)
|
||||
q.set_counter_name("")
|
||||
else -- <20><>ǰ <20><><EFBFBD><EFBFBD> <20>̴<EFBFBD>
|
||||
say(string.format(gameforge.main_quest_lv91._530_say,remain))
|
||||
end
|
||||
else -- <20><>ǰ <20><><EFBFBD><EFBFBD>
|
||||
say_title(mob_name(20380 ))
|
||||
say(gameforge.main_quest_lv91._540_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when 3690.kill or 3691.kill begin
|
||||
if number(1,300) == 1 then
|
||||
pc.give_item2(31019, 1)
|
||||
|
||||
notice_multiline(gameforge.main_quest_lv91._550_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv91._550_2_notice,notice)
|
||||
end
|
||||
end
|
||||
end
|
||||
-----------------<5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ-----------------
|
||||
-----------------<5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ-----------------
|
||||
-----------------<5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ-----------------
|
||||
-----------------<5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ-----------------
|
||||
-----------------<5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ-----------------
|
||||
-----------------<5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ-----------------
|
||||
-----------------<5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ-----------------
|
||||
-----------------<5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ-----------------
|
||||
-----------------<5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ-----------------
|
||||
-----------------<5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ-----------------
|
||||
-----------------<5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ-----------------
|
||||
state state5_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv91._560_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv91._560_sendLetter)
|
||||
say(gameforge.main_quest_lv91._570_say)
|
||||
|
||||
end
|
||||
when 20378.chat.gameforge.main_quest_lv91._560_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv91._580_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv91._590_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv91._600_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv91._610_say)
|
||||
|
||||
set_state (state5_2)
|
||||
end
|
||||
end
|
||||
state state5_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv91._560_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
-- if pc.get_map_index() == 1 then
|
||||
-- addmapsignal(500 * 100, 500 * 100)
|
||||
-- addmapsignal(600 * 100, 500 * 100)
|
||||
-- addmapsignal(700 * 100, 300 * 100)
|
||||
-- end
|
||||
|
||||
say_title(gameforge.main_quest_lv91._620_sayTitle)
|
||||
say(gameforge.main_quest_lv91._630_say)
|
||||
say_item_vnum(31020)
|
||||
|
||||
-- say()
|
||||
-- say_reward(locale.main_quest_lv91.pos_info)
|
||||
-- select(gameforge.main_quest_lv90._950_say)
|
||||
-- setskin(NOWINDOW)
|
||||
-- clearmapsignal()
|
||||
end
|
||||
|
||||
when 20382.click begin
|
||||
if pc.count_item(31020) < 1 then
|
||||
pc.give_item2(31020, 1)
|
||||
notice_multiline(gameforge.main_quest_lv91._640_1_notice,notice)
|
||||
|
||||
set_state (state5_3)
|
||||
end
|
||||
end
|
||||
when 20380.chat.gameforge.main_quest_lv91._560_sendLetter with pc.count_item(31020) >= 1 begin
|
||||
target.delete("__TARGET__")
|
||||
pc.remove_item(31020, pc.count_item(31020))
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_lv91._650_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv91._660_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_lv91._670_say)
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 6766050))
|
||||
--say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 0))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(30045),2,locale.count_postfix))
|
||||
say("")
|
||||
say_title(gameforge.main_quest_lv91._780_say)
|
||||
|
||||
pc.give_exp2(6766050)
|
||||
--pc.change_money(0)
|
||||
pc.give_item2(30045, 2)
|
||||
|
||||
clear_letter()
|
||||
set_quest_state ("main_quest_lv92", "state0")
|
||||
set_state (__COMPLETE__)
|
||||
end
|
||||
end
|
||||
-- <20><><EFBFBD><EFBFBD>Ʈ <20>Ϸ<EFBFBD>
|
||||
state state5_3 begin
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv91._560_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv91._560_sendLetter)
|
||||
say(gameforge.main_quest_lv91._680_say)
|
||||
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>н<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
when 20382.click begin
|
||||
if pc.count_item(31020) < 1 then
|
||||
pc.give_item2(31020, 1)
|
||||
notice_multiline(gameforge.main_quest_lv91._640_1_notice,notice)
|
||||
end
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_lv91._560_sendLetter with pc.count_item(31020) >= 1 begin
|
||||
target.delete("__TARGET__")
|
||||
pc.remove_item(31020, pc.count_item(31020))
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_lv91._650_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv91._660_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_lv91._670_say)
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 6766050))
|
||||
--say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 0))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(30045),2,locale.count_postfix))
|
||||
say("")
|
||||
say_title(gameforge.main_quest_lv91._780_say)
|
||||
|
||||
pc.give_exp2(6766050)
|
||||
--pc.change_money(0)
|
||||
pc.give_item2(30045, 2)
|
||||
|
||||
clear_letter()
|
||||
set_quest_state ("main_quest_lv92", "state0")
|
||||
set_state (__COMPLETE__)
|
||||
end
|
||||
end
|
||||
|
||||
state __COMPLETE__ begin
|
||||
when enter begin
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
end
|
@ -1,699 +0,0 @@
|
||||
quest main_quest_lv92 begin
|
||||
state start begin
|
||||
end
|
||||
state state0 begin
|
||||
when login or levelup or enter with pc.level >= 92 begin
|
||||
set_state (state1_1)
|
||||
end
|
||||
end
|
||||
------------------------------------<2D>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ƶ<EFBFBD>!1-2------------------------------------
|
||||
------------------------------------<2D>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ƶ<EFBFBD>!1-2------------------------------------
|
||||
------------------------------------<2D>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ƶ<EFBFBD>!1-2------------------------------------
|
||||
------------------------------------<2D>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ƶ<EFBFBD>!1-2------------------------------------
|
||||
------------------------------------<2D>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ƶ<EFBFBD>!1-2------------------------------------
|
||||
------------------------------------<2D>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ƶ<EFBFBD>!1-2------------------------------------
|
||||
------------------------------------<2D>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ƶ<EFBFBD>!1-2------------------------------------
|
||||
------------------------------------<2D>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ƶ<EFBFBD>!1-2------------------------------------
|
||||
------------------------------------<2D>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ƶ<EFBFBD>!1-2------------------------------------
|
||||
------------------------------------<2D>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ƶ<EFBFBD>!1-2------------------------------------
|
||||
------------------------------------<2D>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ƶ<EFBFBD>!1-2------------------------------------
|
||||
state state1_1 begin
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv92._010_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv92._010_sendLetter)
|
||||
say(gameforge.main_quest_lv92._020_say)
|
||||
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv92._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv92._030_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv92._040_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv92._050_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv92._060_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv92._070_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv92._080_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv92._090_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv92._100_say)
|
||||
|
||||
set_state (state1_2)
|
||||
|
||||
q.set_counter_value(4)
|
||||
end
|
||||
end
|
||||
--<2D><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>--
|
||||
state state1_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv92._010_sendLetter)
|
||||
|
||||
local remain_item = 4 - pc.count_item(31010)
|
||||
if remain_item <= 0 then
|
||||
remain_item = 0
|
||||
end
|
||||
q.set_counter_name("<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||||
q.set_counter_value(remain_item)
|
||||
end
|
||||
when button or info begin
|
||||
-- if pc.get_map_index() == 1 then
|
||||
-- addmapsignal(500 * 100, 500 * 100)
|
||||
-- addmapsignal(600 * 100, 500 * 100)
|
||||
-- addmapsignal(700 * 100, 300 * 100)
|
||||
-- end
|
||||
|
||||
say_title(gameforge.main_quest_lv92._110_sayTitle)
|
||||
say(gameforge.main_quest_lv92._120_say)
|
||||
say_item_vnum(31010)
|
||||
say(gameforge.main_quest_lv90._1180_say)
|
||||
|
||||
local remain_item = 4 - pc.count_item(31010)
|
||||
if remain_item <= 0 then
|
||||
remain_item = 0
|
||||
end
|
||||
q.set_counter_value(remain_item)
|
||||
say_reward(string.format("%s: %d %s",item_name(31010),remain_item,locale.count_postfix))
|
||||
|
||||
-- say()
|
||||
-- say_reward(locale.main_quest_lv92.pos_info)
|
||||
-- select(gameforge.main_quest_lv90._950_say)
|
||||
-- setskin(NOWINDOW)
|
||||
-- clearmapsignal()
|
||||
|
||||
end
|
||||
|
||||
--Ŭ<><C5AC><EFBFBD><EFBFBD> <20><>--
|
||||
when 20378.chat.gameforge.main_quest_lv92._010_sendLetter begin
|
||||
|
||||
if pc.count_item(31010) >= 4 then
|
||||
pc.remove_item ( 31010, pc.count_item(31010))
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv92._160_say)
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 33874000))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 200000))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(50817),10,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(33874000)
|
||||
pc.change_money(200000)
|
||||
pc.give_item2(50817, 10)
|
||||
|
||||
set_state (state2_1)
|
||||
else
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv92._130_say)
|
||||
|
||||
set_state (state1_2)
|
||||
end
|
||||
end
|
||||
|
||||
when 3504.kill or 3505.kill begin
|
||||
if number(1,500) == 1 then
|
||||
if pc.count_item(31010) < 4 then
|
||||
pc.give_item2(31010, 1)
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>Ʈ <20><EFBFBD> â ī<><C4AB>Ʈ
|
||||
local remain_item = 4 - pc.count_item(31010)
|
||||
if remain_item <= 0 then
|
||||
remain_item = 0
|
||||
end
|
||||
q.set_counter_value(remain_item)
|
||||
|
||||
if pc.count_item(31010) >= 4 then
|
||||
notice_multiline(gameforge.main_quest_lv92._140_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv92._140_2_notice,notice)
|
||||
set_state (state1_3)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
state state1_3 begin
|
||||
|
||||
when letter begin
|
||||
q.set_counter_name("")
|
||||
send_letter(gameforge.main_quest_lv92._010_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv92._010_sendLetter)
|
||||
say(gameforge.main_quest_lv92._150_say)
|
||||
|
||||
end
|
||||
|
||||
-- <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>츦 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD>.
|
||||
when 3504.kill or 3505.kill begin
|
||||
if number(1,500) == 1 then
|
||||
if pc.count_item(31010) < 4 then
|
||||
pc.give_item2(31010, 1)
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>Ʈ <20><EFBFBD> â ī<><C4AB>Ʈ
|
||||
local remain_item = 4 - pc.count_item(31010)
|
||||
if remain_item <= 0 then
|
||||
remain_item = 0
|
||||
end
|
||||
q.set_counter_value(remain_item)
|
||||
|
||||
if pc.count_item(31010) >= 4 then
|
||||
notice_multiline(gameforge.main_quest_lv92._140_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv92._140_2_notice,notice)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv92._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
if pc.count_item(31010) >= 4 then
|
||||
pc.remove_item ( 31010, pc.count_item(31010))
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv92._160_say)
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 33874000))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 200000))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(50817),10,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(33874000)
|
||||
pc.change_money(200000)
|
||||
pc.give_item2(50817, 10)
|
||||
|
||||
set_state (state2_1)
|
||||
else
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv92._130_say)
|
||||
|
||||
set_state (state1_2)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
state state2_1 begin
|
||||
when letter begin
|
||||
q.set_counter_name("")
|
||||
send_letter(gameforge.main_quest_lv92._170_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv92._170_sendLetter)
|
||||
say(gameforge.main_quest_lv92._180_say)
|
||||
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv92._170_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv92._190_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv92._200_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv92._210_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv92._220_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv92._230_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv92._240_say)
|
||||
|
||||
set_state (state2_2)
|
||||
end
|
||||
end
|
||||
--<2D><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>--
|
||||
state state2_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv92._170_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20379)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20379))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
-- if pc.get_map_index() == 1 then
|
||||
-- addmapsignal(500 * 100, 500 * 100)
|
||||
-- addmapsignal(600 * 100, 500 * 100)
|
||||
-- addmapsignal(700 * 100, 300 * 100)
|
||||
-- end
|
||||
|
||||
say_title(gameforge.main_quest_lv92._250_sayTitle)
|
||||
say(gameforge.main_quest_lv92._260_say)
|
||||
say_item_vnum(31010)
|
||||
|
||||
-- say()
|
||||
-- say_reward(locale.main_quest_lv92.pos_info)
|
||||
-- select(gameforge.main_quest_lv90._950_say)
|
||||
-- setskin(NOWINDOW)
|
||||
-- clearmapsignal()
|
||||
end
|
||||
|
||||
--Ŭ<><C5AC><EFBFBD><EFBFBD> <20><>--
|
||||
when 20378.chat.gameforge.main_quest_lv92._170_sendLetter begin
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv92._270_say)
|
||||
end
|
||||
|
||||
when 20379.chat.gameforge.main_quest_lv92._170_sendLetter begin
|
||||
say_title(mob_name(20379))
|
||||
say(gameforge.main_quest_lv92._280_say)
|
||||
|
||||
|
||||
notice_multiline(gameforge.main_quest_lv92._290_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv92._290_2_notice,notice)
|
||||
pc.give_item2(31010, 1)
|
||||
set_state (state2_3)
|
||||
end
|
||||
end
|
||||
state state2_3 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv92._170_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv92._170_sendLetter)
|
||||
say(gameforge.main_quest_lv92._360_say)
|
||||
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv92._170_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
if pc.count_item(31010) >= 1 then
|
||||
pc.remove_item ( 31010, pc.count_item(31010))
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv92._300_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv92._310_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv92._320_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv92._330_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv92._340_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv92._350_say)
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 20874600))
|
||||
--say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 0))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(30047),2,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(20874600)
|
||||
--pc.change_money(0)
|
||||
pc.give_item2(30047, 2)
|
||||
|
||||
set_state (state3_1)
|
||||
else
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv92._270_say)
|
||||
|
||||
set_state (state2_2)
|
||||
end
|
||||
end
|
||||
end
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-1------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-1------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-1------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-1------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-1------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-1------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-1------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-1------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-1------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-1------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>° <20><><EFBFBD><EFBFBD> <20>ǵ<EFBFBD>1-1------------------------------------
|
||||
state state3_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv92._370_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv92._370_sendLetter)
|
||||
say(gameforge.main_quest_lv92._380_say)
|
||||
|
||||
end
|
||||
when 20378.chat.gameforge.main_quest_lv92._370_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv92._390_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv92._400_say)
|
||||
|
||||
set_state (state3_2)
|
||||
end
|
||||
end
|
||||
state state3_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv92._370_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv92._370_sendLetter)
|
||||
say(gameforge.main_quest_lv92._410_say)
|
||||
|
||||
end
|
||||
when 20380.chat.gameforge.main_quest_lv92._370_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20380 ))
|
||||
say(gameforge.main_quest_lv92._420_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv92._430_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20380 ))
|
||||
say(gameforge.main_quest_lv92._440_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv92._450_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20380 ))
|
||||
say(gameforge.main_quest_lv92._460_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv92._470_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20380 ))
|
||||
say(gameforge.main_quest_lv92._480_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv92._490_say)
|
||||
|
||||
set_state (state3_3)
|
||||
end
|
||||
end
|
||||
state state3_3 begin
|
||||
when letter begin
|
||||
q.set_counter_name("<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||||
send_letter(gameforge.main_quest_lv92._370_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
-- if pc.get_map_index() == 1 then
|
||||
-- addmapsignal(500 * 100, 500 * 100)
|
||||
-- addmapsignal(600 * 100, 500 * 100)
|
||||
-- addmapsignal(700 * 100, 300 * 100)
|
||||
-- end
|
||||
|
||||
say_title(gameforge.main_quest_lv92._500_sayTitle)
|
||||
say(gameforge.main_quest_lv92._510_say)
|
||||
say_item_vnum(31022)
|
||||
say(gameforge.main_quest_lv90._1180_say)
|
||||
|
||||
local remain_item = 10 - pc.count_item(31022)
|
||||
if remain_item <= 0 then
|
||||
remain_item = 0
|
||||
end
|
||||
q.set_counter_value(remain_item)
|
||||
say_reward(string.format("%s: %d %s",item_name(31022),remain_item,locale.count_postfix))
|
||||
|
||||
-- say()
|
||||
-- say_reward(locale.main_quest_lv92.pos_info)
|
||||
-- select(gameforge.main_quest_lv90._950_say)
|
||||
-- setskin(NOWINDOW)
|
||||
-- clearmapsignal()
|
||||
end
|
||||
|
||||
--Ŭ<><C5AC><EFBFBD><EFBFBD> <20><>--
|
||||
when 20380.chat.gameforge.main_quest_lv92._370_sendLetter begin
|
||||
if pc.count_item(31022) >= 10 then
|
||||
pc.remove_item ( 31022, pc.count_item(31022))
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_lv92._540_say)
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 34874000))
|
||||
--say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 0))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(27992),2,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(34874000)
|
||||
--pc.change_money(0)
|
||||
pc.give_item2(27992, 1)
|
||||
pc.give_item2(27992, 1)
|
||||
|
||||
set_state (state4_1)
|
||||
else
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_lv92._520_say)
|
||||
end
|
||||
end
|
||||
|
||||
when 3490.kill or 3491.kill begin
|
||||
if number(1,500) == 1 then
|
||||
if pc.count_item(31022) < 10 then
|
||||
pc.give_item2(31022, 1)
|
||||
|
||||
local remain_item = 10 - pc.count_item(31022)
|
||||
if remain_item <= 0 then
|
||||
remain_item = 0
|
||||
end
|
||||
q.set_counter_value(remain_item)
|
||||
|
||||
if pc.count_item(31022) >= 10 then
|
||||
notice_multiline(gameforge.main_quest_lv92._530_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv92._530_2_notice,notice)
|
||||
set_state (state3_4)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
state state3_4 begin
|
||||
|
||||
when letter begin
|
||||
q.set_counter_name("")
|
||||
send_letter(gameforge.main_quest_lv92._370_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv92._370_sendLetter)
|
||||
say(gameforge.main_quest_lv92._550_say)
|
||||
|
||||
end
|
||||
|
||||
-- <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>츦 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD>.
|
||||
when 3490.kill or 3491.kill begin
|
||||
if number(1,500) == 1 then
|
||||
if pc.count_item(31022) < 10 then
|
||||
pc.give_item2(31022, 1)
|
||||
|
||||
if pc.count_item(31022) >= 10 then
|
||||
notice_multiline(gameforge.main_quest_lv92._530_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv92._530_2_notice,notice)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_lv92._370_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
if pc.count_item(31022) >= 10 then
|
||||
pc.remove_item ( 31022, pc.count_item(31022))
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_lv92._540_say)
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 34874000))
|
||||
--say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 0))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(27992),2,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(34874000)
|
||||
--pc.change_money(0)
|
||||
pc.give_item2(27992, 1)
|
||||
pc.give_item2(27992, 1)
|
||||
|
||||
set_state (state4_1)
|
||||
else
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_lv92._520_say)
|
||||
|
||||
set_state (state3_3)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------<2D>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-----------------------------------
|
||||
------------------------------------<2D>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-----------------------------------
|
||||
------------------------------------<2D>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-----------------------------------
|
||||
------------------------------------<2D>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-----------------------------------
|
||||
------------------------------------<2D>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-----------------------------------
|
||||
------------------------------------<2D>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-----------------------------------
|
||||
------------------------------------<2D>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-----------------------------------
|
||||
------------------------------------<2D>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-----------------------------------
|
||||
------------------------------------<2D>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-----------------------------------
|
||||
------------------------------------<2D>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-----------------------------------
|
||||
------------------------------------<2D>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-----------------------------------
|
||||
state state4_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv92._560_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv92._560_sendLetter)
|
||||
say(gameforge.main_quest_lv92._570_say)
|
||||
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv92._560_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv92._580_say)
|
||||
wait()
|
||||
|
||||
say(gameforge.main_quest_lv92._590_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv92._600_say)
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 24911280))
|
||||
--say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 0))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(27993),2,locale.count_postfix))
|
||||
|
||||
say("")
|
||||
say_title(gameforge.main_quest_lv92._610_say)
|
||||
|
||||
pc.give_exp2(24911280)
|
||||
--pc.change_money(0)
|
||||
pc.give_item2(27993, 1)
|
||||
pc.give_item2(27993, 1)
|
||||
|
||||
|
||||
clear_letter()
|
||||
set_quest_state ("main_quest_lv93", "state0")
|
||||
set_state (__COMPLETE__)
|
||||
end
|
||||
end
|
||||
|
||||
state __COMPLETE__ begin
|
||||
when enter begin
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
end
|
@ -1,715 +0,0 @@
|
||||
quest main_quest_lv93 begin
|
||||
state start begin
|
||||
end
|
||||
state state0 begin
|
||||
when login or levelup or enter with pc.level >= 93 begin
|
||||
set_state (state1_1)
|
||||
end
|
||||
end
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-1------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-1------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-1------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-1------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-1------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-1------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-1------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-1------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-1------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-1------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-1------------------------------------
|
||||
state state1_1 begin
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv93._010_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv93._010_sendLetter)
|
||||
say(gameforge.main_quest_lv93._020_say)
|
||||
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv93._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv93._030_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv93._040_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv93._050_say)
|
||||
|
||||
set_state (state1_2)
|
||||
end
|
||||
end
|
||||
state state1_2 begin
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv93._010_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv93._010_sendLetter)
|
||||
say(gameforge.main_quest_lv93._130_say)
|
||||
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_lv93._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_lv93._060_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_lv93._070_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv93._080_say)
|
||||
|
||||
set_state (state1_3)
|
||||
end
|
||||
end
|
||||
--<2D><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>--
|
||||
state state1_3 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv93._010_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
-- if pc.get_map_index() == 1 then
|
||||
-- addmapsignal(500 * 100, 500 * 100)
|
||||
-- addmapsignal(600 * 100, 500 * 100)
|
||||
-- addmapsignal(700 * 100, 300 * 100)
|
||||
-- end
|
||||
|
||||
|
||||
say_title(gameforge.main_quest_lv93._090_sayTitle)
|
||||
say(gameforge.main_quest_lv93._100_say)
|
||||
say_item_vnum(31029)
|
||||
|
||||
-- say()
|
||||
-- say_reward(locale.main_quest_lv93.pos_info)
|
||||
-- select(gameforge.main_quest_lv90._950_say)
|
||||
-- setskin(NOWINDOW)
|
||||
-- clearmapsignal()
|
||||
end
|
||||
|
||||
--Ŭ<><C5AC><EFBFBD><EFBFBD> <20><>--
|
||||
when 20380.chat.gameforge.main_quest_lv93._010_sendLetter begin
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_lv93._110_say)
|
||||
end
|
||||
|
||||
when 3191.kill begin
|
||||
if number(1,1000) == 1 then
|
||||
if pc.count_item(31029) < 1 then
|
||||
pc.give_item2(31029, 1)
|
||||
|
||||
if pc.count_item(31029) >= 1 then
|
||||
notice_multiline(gameforge.main_quest_lv93._120_1_notice,notice)
|
||||
set_state (state1_4)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
state state1_4 begin
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv93._010_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv93._010_sendLetter)
|
||||
say(gameforge.main_quest_lv93._130_say)
|
||||
|
||||
end
|
||||
|
||||
-- <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>츦 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD>.
|
||||
when 3191.kill begin
|
||||
if number(1,1000) == 1 then
|
||||
if pc.count_item(31029) < 1 then
|
||||
pc.give_item2(31029, 1)
|
||||
|
||||
if pc.count_item(31029) >= 1 then
|
||||
notice_multiline(gameforge.main_quest_lv93._120_1_notice,notice)
|
||||
set_state (state1_4)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_lv93._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
if pc.count_item(31029) >= 1 then
|
||||
pc.remove_item ( 31029, pc.count_item(31029))
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_lv93._140_say)
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 27874422))
|
||||
--say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 0))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(27994),1,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(27874422)
|
||||
--pc.change_money(0)
|
||||
pc.give_item2(27994, 1)
|
||||
|
||||
set_state (state2_1)
|
||||
else
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_lv93._110_say)
|
||||
|
||||
set_state (state1_3)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-2------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-2------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-2------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-2------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-2------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-2------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-2------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-2------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-2------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-2------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-2------------------------------------
|
||||
state state2_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv93._150_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv93._150_sendLetter)
|
||||
say(gameforge.main_quest_lv93._160_say)
|
||||
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_lv93._150_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_lv93._170_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv93._180_say)
|
||||
|
||||
set_state (state2_2)
|
||||
end
|
||||
end
|
||||
--<2D><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>--
|
||||
state state2_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv93._150_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
-- if pc.get_map_index() == 1 then
|
||||
-- addmapsignal(500 * 100, 500 * 100)
|
||||
-- addmapsignal(600 * 100, 500 * 100)
|
||||
-- addmapsignal(700 * 100, 300 * 100)
|
||||
-- end
|
||||
say_title(gameforge.main_quest_lv93._190_sayTitle)
|
||||
say(gameforge.main_quest_lv93._200_say)
|
||||
say_item_vnum(31030)
|
||||
|
||||
-- say()
|
||||
-- say_reward(locale.main_quest_lv93.pos_info)
|
||||
-- select(gameforge.main_quest_lv90._950_say)
|
||||
-- setskin(NOWINDOW)
|
||||
-- clearmapsignal()
|
||||
end
|
||||
|
||||
--Ŭ<><C5AC><EFBFBD><EFBFBD> <20><>--
|
||||
when 20380.chat.gameforge.main_quest_lv93._150_sendLetter begin
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_lv93._210_say)
|
||||
end
|
||||
|
||||
when 3791.kill begin
|
||||
if number(1,1000) == 1 then
|
||||
if pc.count_item(31030) < 1 then
|
||||
pc.give_item2(31030, 1)
|
||||
if pc.count_item(31030) >= 1 then
|
||||
notice_multiline(gameforge.main_quest_lv93._220_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv93._220_2_notice,notice)
|
||||
set_state (state2_3)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
state state2_3 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv93._150_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv93._150_sendLetter)
|
||||
say(gameforge.main_quest_lv93._230_say)
|
||||
|
||||
end
|
||||
|
||||
-- <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>츦 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD>.
|
||||
when 3791.kill begin
|
||||
if number(1,1000) == 1 then
|
||||
if pc.count_item(31030) < 1 then
|
||||
pc.give_item2(31030, 1)
|
||||
if pc.count_item(31030) >= 1 then
|
||||
notice_multiline(gameforge.main_quest_lv93._220_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv93._220_2_notice,notice)
|
||||
set_state (state2_3)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_lv93._150_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
if pc.count_item(31030) >= 1 then
|
||||
pc.remove_item ( 31030, pc.count_item(31030))
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_lv93._240_say)
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 28914020))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 302000))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(30048),1,locale.count_postfix))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(50819),10,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(28914020)
|
||||
pc.change_money(302000)
|
||||
pc.give_item2(30048, 1)
|
||||
pc.give_item2(50819, 10)
|
||||
|
||||
set_state (state3_1)
|
||||
else
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_lv93._210_say)
|
||||
|
||||
set_state (state2_2)
|
||||
end
|
||||
end
|
||||
end
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-3------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-3------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-3------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-3------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-3------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-3------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-3------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-3------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-3------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-3------------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-3------------------------------------
|
||||
state state3_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv93._250_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv93._250_sendLetter)
|
||||
say(gameforge.main_quest_lv93._260_say)
|
||||
|
||||
end
|
||||
when 20380.chat.gameforge.main_quest_lv93._250_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20380 ))
|
||||
say(gameforge.main_quest_lv93._270_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv93._280_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20380 ))
|
||||
say(gameforge.main_quest_lv93._290_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv93._300_say)
|
||||
|
||||
set_state (state3_2)
|
||||
end
|
||||
end
|
||||
state state3_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv93._250_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20008)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20008))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv93._310_sayTitle)
|
||||
say(gameforge.main_quest_lv93._320_say)
|
||||
|
||||
end
|
||||
when 20008.chat.gameforge.main_quest_lv93._250_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20008))
|
||||
say(gameforge.main_quest_lv93._330_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv93._340_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20008))
|
||||
say(gameforge.main_quest_lv93._350_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv93._360_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20008))
|
||||
say(gameforge.main_quest_lv93._370_say)
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 17904600))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 30000))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(71094),1,locale.count_postfix))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(72024),1,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(17904600)
|
||||
pc.change_money(30000)
|
||||
pc.give_item2(71094, 1)
|
||||
pc.give_item2_select(72024)
|
||||
|
||||
set_state (state3_3)
|
||||
clear_letter()
|
||||
local cur_t = get_global_time()
|
||||
pc.setf("main_quest_lv93","ockgu_access_time",cur_t)
|
||||
end
|
||||
end
|
||||
state state3_3 begin
|
||||
when login with get_global_time() - pc.getf("main_quest_lv93","ockgu_access_time") >= 24*60*60 begin
|
||||
set_state (state4_1)
|
||||
end
|
||||
when 20008.chat.gameforge.main_quest_lv93._400_npcChat begin
|
||||
if get_global_time() - pc.getf("main_quest_lv93","ockgu_access_time") >= 24*60*60 then
|
||||
set_state (state4_1)
|
||||
else
|
||||
say_title(mob_name(20008))
|
||||
say(gameforge.main_quest_lv93._390_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-4-----------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-4-----------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-4-----------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-4-----------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-4-----------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-4-----------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-4-----------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-4-----------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-4-----------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-4-----------------------------------
|
||||
------------------------------------<2D><><EFBFBD>°<EFBFBD>ȭ1-4-----------------------------------
|
||||
state state4_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv93._400_npcChat)
|
||||
|
||||
local v = find_npc_by_vnum(20008)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20008))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv93._400_npcChat)
|
||||
say(gameforge.main_quest_lv93._410_say)
|
||||
|
||||
end
|
||||
|
||||
when 20008.chat.gameforge.main_quest_lv93._400_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20008 ))
|
||||
say(gameforge.main_quest_lv93._420_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv93._430_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20008 ))
|
||||
say(gameforge.main_quest_lv93._440_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv93._450_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20008 ))
|
||||
say(gameforge.main_quest_lv93._460_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv93._470_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20008 ))
|
||||
say(gameforge.main_quest_lv93._480_say)
|
||||
|
||||
set_state (state4_2)
|
||||
end
|
||||
end
|
||||
-- <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> --
|
||||
state state4_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv93._400_npcChat)
|
||||
q.set_counter_name(gameforge.main_quest_lv94._1080_say)
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv93._490_sayTitle)
|
||||
say(gameforge.main_quest_lv93._500_say)
|
||||
say_item_vnum_inline(50724,0,3)
|
||||
say_item_vnum_inline(50726,1,3)
|
||||
say_item_vnum_inline(50707,2,3)
|
||||
|
||||
local remain1 = 200 - pc.count_item(50724)
|
||||
local remain2 = 200 - pc.count_item(50726)
|
||||
local remain3 = 200 - pc.count_item(50707)
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
if remain2 < 0 then
|
||||
remain2 = 0
|
||||
end
|
||||
if remain3 < 0 then
|
||||
remain3 = 0
|
||||
end
|
||||
|
||||
say(string.format(gameforge.main_quest_lv93._630_say,item_name(50724) ,remain1,item_name(50726) ,remain2,item_name(50707) , remain3))
|
||||
|
||||
q.set_counter_value(remain1 + remain2 + remain3)
|
||||
|
||||
if remain1 + remain2 + remain3 == 0 then
|
||||
notice_multiline(gameforge.main_quest_lv93._650_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv93._650_2_notice,notice)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
--[[
|
||||
when 50724.pick or 50724.take or 50726.pick or 50726.take or 50707.pick or 50707.take begin
|
||||
|
||||
local remain1 = 200 - pc.count_item(50724)
|
||||
local remain2 = 200 - pc.count_item(50726)
|
||||
local remain3 = 200 - pc.count_item(50707)
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
if remain2 < 0 then
|
||||
remain2 = 0
|
||||
end
|
||||
if remain3 < 0 then
|
||||
remain3 = 0
|
||||
end
|
||||
q.set_counter_value(remain1 + remain2 + remain3)
|
||||
end
|
||||
]]--
|
||||
|
||||
when 20008.chat.gameforge.main_quest_lv93._400_npcChat begin
|
||||
if pc.count_item(50724) >= 200 and pc.count_item(50726) >= 200 and pc.count_item(50707) >= 200 then
|
||||
|
||||
pc.remove_item ( 50724,200)
|
||||
pc.remove_item ( 50726,200)
|
||||
pc.remove_item ( 50707,200)
|
||||
|
||||
say_title(mob_name(20008 ))
|
||||
say(gameforge.main_quest_lv93._520_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv93._530_say)
|
||||
|
||||
set_state (state4_3)
|
||||
|
||||
clear_letter()
|
||||
|
||||
local cur_t = get_global_time()
|
||||
pc.setf("main_quest_lv93","item4_make_start_time",cur_t)
|
||||
else
|
||||
say_title(mob_name(20008 ))
|
||||
say(gameforge.main_quest_lv93._640_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
state state4_3 begin
|
||||
when login with get_global_time() - pc.getf("main_quest_lv93","item4_make_start_time") >= 24*60*60 begin
|
||||
set_state (state4_4)
|
||||
q.set_counter_name("")
|
||||
end
|
||||
when 20008.chat.gameforge.main_quest_lv93._400_npcChat begin
|
||||
say_title(mob_name(20008 ))
|
||||
say(gameforge.main_quest_lv93._540_say)
|
||||
end
|
||||
end
|
||||
state state4_4 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv93._400_npcChat)
|
||||
|
||||
local v = find_npc_by_vnum(20008)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20008))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv93._400_npcChat)
|
||||
say(gameforge.main_quest_lv93._550_say)
|
||||
|
||||
end
|
||||
|
||||
when 20008.chat.gameforge.main_quest_lv93._400_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20008 ))
|
||||
say(gameforge.main_quest_lv93._560_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv93._570_say)
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 31374000))
|
||||
--say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 0))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(31031),1,locale.count_postfix))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(50706),20,locale.count_postfix))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(72301),5,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(31374000)
|
||||
--pc.change_money(0)
|
||||
pc.give_item2(31031, 1)
|
||||
pc.give_item2(50706, 20)
|
||||
pc.give_item2(72301, 1)
|
||||
pc.give_item2(72301, 1)
|
||||
pc.give_item2(72301, 1)
|
||||
pc.give_item2(72301, 1)
|
||||
pc.give_item2(72301, 1)
|
||||
|
||||
set_state (state5_1)
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------<2D>ž<EFBFBD> <20><><EFBFBD><EFBFBD>1-1-----------------------------------
|
||||
------------------------------------<2D>ž<EFBFBD> <20><><EFBFBD><EFBFBD>1-1-----------------------------------
|
||||
------------------------------------<2D>ž<EFBFBD> <20><><EFBFBD><EFBFBD>1-1-----------------------------------
|
||||
------------------------------------<2D>ž<EFBFBD> <20><><EFBFBD><EFBFBD>1-1-----------------------------------
|
||||
------------------------------------<2D>ž<EFBFBD> <20><><EFBFBD><EFBFBD>1-1-----------------------------------
|
||||
------------------------------------<2D>ž<EFBFBD> <20><><EFBFBD><EFBFBD>1-1-----------------------------------
|
||||
------------------------------------<2D>ž<EFBFBD> <20><><EFBFBD><EFBFBD>1-1-----------------------------------
|
||||
------------------------------------<2D>ž<EFBFBD> <20><><EFBFBD><EFBFBD>1-1-----------------------------------
|
||||
------------------------------------<2D>ž<EFBFBD> <20><><EFBFBD><EFBFBD>1-1-----------------------------------
|
||||
------------------------------------<2D>ž<EFBFBD> <20><><EFBFBD><EFBFBD>1-1-----------------------------------
|
||||
------------------------------------<2D>ž<EFBFBD> <20><><EFBFBD><EFBFBD>1-1-----------------------------------
|
||||
state state5_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv93._580_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv93._580_sendLetter)
|
||||
say(gameforge.main_quest_lv93._590_say)
|
||||
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_lv93._580_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
pc.remove_item(31031,pc.count_item(31031))
|
||||
|
||||
say_title(mob_name( 20380))
|
||||
say(gameforge.main_quest_lv93._600_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv93._610_say)
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 19920820))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 335000))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(72723),1,locale.count_postfix))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(70050),1,locale.count_postfix))
|
||||
say("")
|
||||
say_title(gameforge.main_quest_lv93._620_say)
|
||||
|
||||
pc.give_exp2(19920820)
|
||||
pc.change_money(335000)
|
||||
pc.give_item2(72723, 1)
|
||||
pc.give_item2_select(70050)
|
||||
item.set_socket(2, 120)
|
||||
|
||||
clear_letter()
|
||||
set_quest_state ("main_quest_lv94", "state0")
|
||||
set_state (__COMPLETE__)
|
||||
end
|
||||
end
|
||||
|
||||
state __COMPLETE__ begin
|
||||
when enter begin
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
end
|
File diff suppressed because it is too large
Load Diff
@ -1,731 +0,0 @@
|
||||
quest main_quest_lv95 begin
|
||||
state start begin
|
||||
end
|
||||
state state0 begin
|
||||
when login or levelup or enter with pc.level >= 95 begin
|
||||
set_state (state1_1)
|
||||
end
|
||||
end
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ſ<EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ſ<EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ſ<EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ſ<EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ſ<EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ſ<EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ſ<EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ſ<EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ſ<EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ſ<EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ſ<EFBFBD>------------------------------------
|
||||
state state1_1 begin
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv95._010_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv95._010_sendLetter)
|
||||
say(gameforge.main_quest_lv95._020_say)
|
||||
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv95._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv95._030_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv95._040_say)
|
||||
wait()
|
||||
set_state (state1_2)
|
||||
end
|
||||
end
|
||||
--<2D><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>--
|
||||
state state1_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv95._010_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
-- if pc.get_map_index() == 1 then
|
||||
-- addmapsignal(500 * 100, 500 * 100)
|
||||
-- addmapsignal(600 * 100, 500 * 100)
|
||||
-- addmapsignal(700 * 100, 300 * 100)
|
||||
-- end
|
||||
say_title(gameforge.main_quest_lv95._070_sayTitle)
|
||||
say(gameforge.main_quest_lv95._080_say)
|
||||
--say_item_vnum(31015)
|
||||
-- say()
|
||||
-- say_reward(locale.main_quest_lv95.pos_info)
|
||||
-- select(gameforge.main_quest_lv90._950_say)
|
||||
-- setskin(NOWINDOW)
|
||||
-- clearmapsignal()
|
||||
end
|
||||
|
||||
--Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ƿԴ<C6BF>.--
|
||||
when 20378.chat.gameforge.main_quest_lv95._010_sendLetter begin
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv95._090_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
when 3904.kill begin
|
||||
if pc.count_item(31015) < 1 then
|
||||
pc.give_item2 ( 31015, 1 )
|
||||
|
||||
notice_multiline(gameforge.main_quest_lv95._100_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv95._100_2_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv95._750_say,notice)
|
||||
set_state (state1_3)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
state state1_3 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv95._010_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv95._010_sendLetter)
|
||||
say(gameforge.main_quest_lv95._110_say)
|
||||
|
||||
end
|
||||
|
||||
-- <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>츦 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD>.
|
||||
when 3904.kill begin
|
||||
if pc.count_item(31015) < 1 then
|
||||
pc.give_item2 ( 31015, 1 )
|
||||
|
||||
notice_multiline(gameforge.main_quest_lv95._100_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv95._100_2_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv95._750_say,notice)
|
||||
end
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv95._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
if pc.count_item(31015) >= 1 then
|
||||
pc.remove_item ( 31015, pc.count_item(31015))
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv95._120_say)
|
||||
wait()
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv95._140_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv95._150_say)
|
||||
wait()
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv95._170_say)
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 27532396))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 302000))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(27994),1,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(27532396)
|
||||
pc.change_money(302000)
|
||||
pc.give_item2(27994, 1)
|
||||
|
||||
set_state (state2_1)
|
||||
else --<2D>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Դ<EFBFBD>.
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv95._090_say)
|
||||
say("")
|
||||
|
||||
set_state (state1_2)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
state state2_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv95._180_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv95._180_sendLetter)
|
||||
say(gameforge.main_quest_lv95._190_say)
|
||||
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv95._180_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv95._200_say)
|
||||
wait()
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv95._220_say)
|
||||
|
||||
set_state (state2_2)
|
||||
end
|
||||
end
|
||||
state state2_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv95._180_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
-- if pc.get_map_index() == 1 then
|
||||
-- addmapsignal(500 * 100, 500 * 100)
|
||||
-- addmapsignal(600 * 100, 500 * 100)
|
||||
-- addmapsignal(700 * 100, 300 * 100)
|
||||
-- end
|
||||
say_title(gameforge.main_quest_lv95._230_sayTitle)
|
||||
say(gameforge.main_quest_lv95._240_say)
|
||||
say_item_vnum(31037)
|
||||
-- say()
|
||||
-- say_reward(locale.main_quest_lv95.pos_info)
|
||||
-- select(gameforge.main_quest_lv90._950_say)
|
||||
-- setskin(NOWINDOW)
|
||||
-- clearmapsignal()
|
||||
end
|
||||
--Ŭ<><C5AC><EFBFBD><EFBFBD> <20><>--
|
||||
when 20378.chat.gameforge.main_quest_lv95._180_sendLetter begin
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv95._250_say)
|
||||
end
|
||||
|
||||
when 3890.kill begin
|
||||
if pc.count_item(31037) < 1 then
|
||||
if number (1,5) == 1 then
|
||||
if pc.count_item(31037) < 1 then
|
||||
pc.give_item2 ( 31037, 1 )
|
||||
end
|
||||
|
||||
notice_multiline(gameforge.main_quest_lv95._260_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv95._260_2_notice,notice)
|
||||
set_state (state2_3)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
state state2_3 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv95._180_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv95._180_sendLetter)
|
||||
say(gameforge.main_quest_lv95._270_say)
|
||||
|
||||
end
|
||||
|
||||
-- <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>츦 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD>.
|
||||
when 3890.kill begin
|
||||
if pc.count_item(31037) < 1 then
|
||||
if number (1,5) == 1 then
|
||||
if pc.count_item(31037) < 1 then
|
||||
pc.give_item2 ( 31037, 1 )
|
||||
end
|
||||
|
||||
notice_multiline(gameforge.main_quest_lv95._260_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv95._260_2_notice,notice)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv95._180_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
if pc.count_item(31037) >= 1 then
|
||||
pc.remove_item ( 31037, pc.count_item(31037))
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv95._280_say)
|
||||
wait()
|
||||
|
||||
say(gameforge.main_quest_lv95._290_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv95._300_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv95._310_say)
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 29032586))
|
||||
--say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 0))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(30048),1,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(29032586)
|
||||
--pc.change_money(0)
|
||||
pc.give_item2(30048, 1)
|
||||
|
||||
set_state (state3_1)
|
||||
else -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv95._250_say)
|
||||
|
||||
set_state (state2_2)
|
||||
end
|
||||
end
|
||||
end
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
------------------------------------<2D><><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>------------------------------------
|
||||
state state3_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv95._320_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv95._320_sendLetter)
|
||||
say(gameforge.main_quest_lv95._330_say)
|
||||
|
||||
end
|
||||
when 20378.chat.gameforge.main_quest_lv95._320_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv95._340_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv95._350_say)
|
||||
set_state (state3_2)
|
||||
end
|
||||
end
|
||||
state state3_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv95._320_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
-- if pc.get_map_index() == 1 then
|
||||
-- addmapsignal(500 * 100, 500 * 100)
|
||||
-- addmapsignal(600 * 100, 500 * 100)
|
||||
-- addmapsignal(700 * 100, 300 * 100)
|
||||
-- end
|
||||
say_title(gameforge.main_quest_lv95._370_sayTitle)
|
||||
say(gameforge.main_quest_lv95._380_say)
|
||||
-- say()
|
||||
-- say_reward(locale.main_quest_lv95.pos_info)
|
||||
-- select(gameforge.main_quest_lv90._950_say)
|
||||
-- setskin(NOWINDOW)
|
||||
-- clearmapsignal()
|
||||
end
|
||||
|
||||
--Ŭ<><C5AC><EFBFBD><EFBFBD> <20><>--
|
||||
when 20378.chat.gameforge.main_quest_lv95._320_sendLetter begin
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv95._390_say)
|
||||
end
|
||||
|
||||
when 3891.kill begin
|
||||
notice_multiline(gameforge.main_quest_lv95._400_notice,notice)
|
||||
say(gameforge.main_quest_lv95._410_say)
|
||||
wait()
|
||||
|
||||
say(gameforge.main_quest_lv95._420_say)
|
||||
|
||||
set_state (state3_3)
|
||||
end
|
||||
end
|
||||
|
||||
state state3_3 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv95._320_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv95._320_sendLetter)
|
||||
say(gameforge.main_quest_lv95._430_say)
|
||||
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv95._320_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv95._440_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv95._450_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv95._460_say)
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 33003907))
|
||||
--say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 0))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(71094),1,locale.count_postfix))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(72024),1,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(33003907)
|
||||
--pc.change_money(0)
|
||||
pc.give_item2(71094, 1)
|
||||
pc.give_item2_select(72024)
|
||||
item.set_socket(2, 180)
|
||||
|
||||
set_state (state4_1)
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------õ<><C3B5><EFBFBD><EFBFBD> <20><>ȭ1-1-----------------------------------
|
||||
------------------------------------õ<><C3B5><EFBFBD><EFBFBD> <20><>ȭ1-1-----------------------------------
|
||||
------------------------------------õ<><C3B5><EFBFBD><EFBFBD> <20><>ȭ1-1-----------------------------------
|
||||
------------------------------------õ<><C3B5><EFBFBD><EFBFBD> <20><>ȭ1-1-----------------------------------
|
||||
------------------------------------õ<><C3B5><EFBFBD><EFBFBD> <20><>ȭ1-1-----------------------------------
|
||||
------------------------------------õ<><C3B5><EFBFBD><EFBFBD> <20><>ȭ1-1-----------------------------------
|
||||
------------------------------------õ<><C3B5><EFBFBD><EFBFBD> <20><>ȭ1-1-----------------------------------
|
||||
------------------------------------õ<><C3B5><EFBFBD><EFBFBD> <20><>ȭ1-1-----------------------------------
|
||||
------------------------------------õ<><C3B5><EFBFBD><EFBFBD> <20><>ȭ1-1-----------------------------------
|
||||
------------------------------------õ<><C3B5><EFBFBD><EFBFBD> <20><>ȭ1-1-----------------------------------
|
||||
------------------------------------õ<><C3B5><EFBFBD><EFBFBD> <20><>ȭ1-1-----------------------------------
|
||||
state state4_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv95._470_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv95._470_sendLetter)
|
||||
say(gameforge.main_quest_lv95._480_say)
|
||||
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv95._470_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv95._490_say)
|
||||
wait()
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv95._510_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv95._520_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv95._530_say)
|
||||
|
||||
set_state (state4_2)
|
||||
end
|
||||
end
|
||||
-- <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> --
|
||||
state state4_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv95._470_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
-- if pc.get_map_index() == 1 then
|
||||
-- addmapsignal(500 * 100, 500 * 100)
|
||||
-- addmapsignal(600 * 100, 500 * 100)
|
||||
-- addmapsignal(700 * 100, 300 * 100)
|
||||
-- end
|
||||
say_title(gameforge.main_quest_lv95._540_sayTitle)
|
||||
say(gameforge.main_quest_lv95._550_say)
|
||||
say_item_vnum(31043)
|
||||
-- say()
|
||||
-- say_reward(locale.main_quest_lv95.pos_info)
|
||||
-- select(gameforge.main_quest_lv90._950_say)
|
||||
-- setskin(NOWINDOW)
|
||||
-- clearmapsignal()
|
||||
end
|
||||
|
||||
-- Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC> --
|
||||
when 20378.chat.gameforge.main_quest_lv95._470_sendLetter begin
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv95._560_say)
|
||||
end
|
||||
|
||||
when 3303.kill begin
|
||||
if pc.count_item(31043) < 1 then
|
||||
if number (1,5) == 1 then
|
||||
pc.give_item2 ( 31043, 1 )
|
||||
|
||||
notice_multiline(gameforge.main_quest_lv95._570_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv95._570_2_notice,notice)
|
||||
set_state (state4_3)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
state state4_3 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv95._470_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv95._470_sendLetter)
|
||||
say(gameforge.main_quest_lv95._580_say)
|
||||
|
||||
end
|
||||
|
||||
-- <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>츦 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD>.
|
||||
when 3303.kill begin
|
||||
if pc.count_item(31043) < 1 then
|
||||
if number (1,5) == 1 then
|
||||
pc.give_item2 ( 31043, 1 )
|
||||
|
||||
notice_multiline(gameforge.main_quest_lv95._570_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv95._570_2_notice,notice)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv95._470_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
if pc.count_item(31043) >= 1 then
|
||||
pc.remove_item ( 31043, pc.count_item(31043))
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv95._590_say)
|
||||
wait()
|
||||
|
||||
say_reward(gameforge.main_quest_lv95._600_sayReward)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv95._610_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv95._620_say)
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 30943586))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 335000))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(72301),5,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(30943586)
|
||||
pc.change_money(335000)
|
||||
pc.give_item2(72301, 1)
|
||||
pc.give_item2(72301, 1)
|
||||
pc.give_item2(72301, 1)
|
||||
pc.give_item2(72301, 1)
|
||||
pc.give_item2(72301, 1)
|
||||
|
||||
set_state (state5_1)
|
||||
else
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv95._560_say)
|
||||
|
||||
set_state (state4_2)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------õ<><C3B5><EFBFBD><EFBFBD> <20><>ȭ1-2-----------------------------------
|
||||
------------------------------------õ<><C3B5><EFBFBD><EFBFBD> <20><>ȭ1-2-----------------------------------
|
||||
------------------------------------õ<><C3B5><EFBFBD><EFBFBD> <20><>ȭ1-2-----------------------------------
|
||||
------------------------------------õ<><C3B5><EFBFBD><EFBFBD> <20><>ȭ1-2-----------------------------------
|
||||
------------------------------------õ<><C3B5><EFBFBD><EFBFBD> <20><>ȭ1-2-----------------------------------
|
||||
------------------------------------õ<><C3B5><EFBFBD><EFBFBD> <20><>ȭ1-2-----------------------------------
|
||||
------------------------------------õ<><C3B5><EFBFBD><EFBFBD> <20><>ȭ1-2-----------------------------------
|
||||
------------------------------------õ<><C3B5><EFBFBD><EFBFBD> <20><>ȭ1-2-----------------------------------
|
||||
------------------------------------õ<><C3B5><EFBFBD><EFBFBD> <20><>ȭ1-2-----------------------------------
|
||||
------------------------------------õ<><C3B5><EFBFBD><EFBFBD> <20><>ȭ1-2-----------------------------------
|
||||
------------------------------------õ<><C3B5><EFBFBD><EFBFBD> <20><>ȭ1-2-----------------------------------
|
||||
-- <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> --
|
||||
state state5_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv95._630_sendLetter)
|
||||
q.set_counter_name(gameforge.main_quest_lv95._760_say)
|
||||
end
|
||||
when button or info begin
|
||||
if pc.get_map_index() == 1 then
|
||||
addmapsignal(500 * 100, 500 * 100)
|
||||
addmapsignal(600 * 100, 500 * 100)
|
||||
addmapsignal(700 * 100, 300 * 100)
|
||||
end
|
||||
say_title(gameforge.main_quest_lv95._640_sayTitle)
|
||||
say(gameforge.main_quest_lv95._650_say)
|
||||
say_item_vnum(31043)
|
||||
say(gameforge.main_quest_lv95._760_say)
|
||||
local remain = 2 - pc.count_item(31043)
|
||||
if remain < 0 then
|
||||
remain = 0
|
||||
end
|
||||
say_reward(string.format(gameforge.main_quest_lv95._770_sayReward,item_name(31043),remain))
|
||||
q.set_counter_value(remain)
|
||||
-- say()
|
||||
-- say_reward(locale.main_quest_lv95.pos_info)
|
||||
-- select(gameforge.main_quest_lv90._950_say)
|
||||
-- setskin(NOWINDOW)
|
||||
-- clearmapsignal()
|
||||
end
|
||||
|
||||
-- Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC> --
|
||||
when 20378.chat.gameforge.main_quest_lv95._630_sendLetter begin
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv95._660_say)
|
||||
end
|
||||
|
||||
when 3303.kill begin
|
||||
if pc.count_item(31043) < 2 then
|
||||
if number (1,4) == 1 then
|
||||
pc.give_item2 ( 31043, 1 )
|
||||
|
||||
local remain = 2 - pc.count_item(31043)
|
||||
if remain < 0 then
|
||||
remain = 0
|
||||
end
|
||||
q.set_counter_value(remain)
|
||||
|
||||
if pc.count_item(31043) >= 2 then
|
||||
set_state (state5_2)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
state state5_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv95._630_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
q.set_counter_name("")
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv95._630_sendLetter)
|
||||
say(gameforge.main_quest_lv95._670_say)
|
||||
|
||||
end
|
||||
|
||||
-- <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>츦 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD>.
|
||||
when 3303.kill begin
|
||||
if pc.count_item(31043) < 2 then
|
||||
if number (1,4) == 1 then
|
||||
pc.give_item2 ( 31043, 1 )
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv95._630_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
if pc.count_item(31043) >= 2 then
|
||||
pc.remove_item ( 31043, pc.count_item(31043))
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv95._680_say)
|
||||
wait()
|
||||
|
||||
say_reward(gameforge.main_quest_lv95._690_sayReward)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv95._700_say)
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv95._710_say)
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv95._720_say)
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 31932545))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 337000))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(72723),1,locale.count_postfix))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(70050),1,locale.count_postfix))
|
||||
say("")
|
||||
say_title(gameforge.main_quest_lv95._740_say)
|
||||
|
||||
pc.give_exp2(31932545)
|
||||
pc.change_money(337000)
|
||||
pc.give_item2(72723, 1)
|
||||
pc.give_item2(70050, 1)
|
||||
|
||||
clear_letter()
|
||||
set_quest_state ("main_quest_lv96", "state0")
|
||||
set_state (__COMPLETE__)
|
||||
else
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv95._660_say)
|
||||
|
||||
set_state (state5_1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
state __COMPLETE__ begin
|
||||
when enter begin
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
end
|
@ -1,750 +0,0 @@
|
||||
quest main_quest_lv96 begin
|
||||
state start begin
|
||||
end
|
||||
state state0 begin
|
||||
when login or levelup or enter with pc.level >= 96 begin
|
||||
set_state (state1_1)
|
||||
end
|
||||
end
|
||||
------------------------------------<2D><><EFBFBD>ɼ<EFBFBD> <20><><EFBFBD><EFBFBD>1-1------------------------------------
|
||||
state state1_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv96._010_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv96._010_sendLetter)
|
||||
say(gameforge.main_quest_lv96._020_say)
|
||||
say("")
|
||||
|
||||
say("")
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv96._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv96._030_say)
|
||||
say("")
|
||||
wait()
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv96._060_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv96._070_say)
|
||||
say("")
|
||||
|
||||
set_state (state1_2)
|
||||
end
|
||||
end
|
||||
--<2D><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>--
|
||||
state state1_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv96._010_sendLetter)
|
||||
q.set_counter_name(gameforge.main_quest_lv96._570_counterName)
|
||||
end
|
||||
when button or info begin
|
||||
-- if pc.get_map_index() == 1 then
|
||||
-- addmapsignal(500 * 100, 500 * 100)
|
||||
-- addmapsignal(600 * 100, 500 * 100)
|
||||
-- addmapsignal(700 * 100, 300 * 100)
|
||||
-- end
|
||||
say_title(gameforge.main_quest_lv96._080_sayTitle)
|
||||
say(gameforge.main_quest_lv96._090_say)
|
||||
say("")
|
||||
say_item_vnum(31038)
|
||||
say(gameforge.main_quest_lv96._570_counterName)
|
||||
local remain = 100 - pc.count_item(31038)
|
||||
if remain < 0 then
|
||||
remain = 0
|
||||
end
|
||||
q.set_counter_value(remain)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._210_sayReward,item_name(31038),remain))
|
||||
-- say()
|
||||
-- say_reward(locale.main_quest_lv96.pos_info)
|
||||
-- select(gameforge.main_quest_lv90._950_say)
|
||||
-- setskin(NOWINDOW)
|
||||
-- clearmapsignal()
|
||||
end
|
||||
|
||||
--Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ƿԴ<C6BF>.--
|
||||
when 20378.chat.gameforge.main_quest_lv96._010_sendLetter begin
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv96._100_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
when 3701.kill or 3702.kill or 3703.kill or 3704.kill or 3705.kill or 3790.kill or 3791.kill begin
|
||||
if pc.count_item(31038) < 100 then
|
||||
if number (1,50) == 1 then
|
||||
pc.give_item2 ( 31038, 1 )
|
||||
|
||||
local remain = 100 - pc.count_item(31038)
|
||||
if remain < 0 then
|
||||
remain = 0
|
||||
end
|
||||
q.set_counter_value(remain)
|
||||
|
||||
if pc.count_item(31038) >= 100 then
|
||||
notice_multiline(gameforge.main_quest_lv96._110_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv96._110_2_notice,notice)
|
||||
|
||||
set_state (state1_3)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
state state1_3 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv96._010_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
q.set_counter_name("")
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv96._010_sendLetter)
|
||||
say(gameforge.main_quest_lv96._120_say)
|
||||
say("")
|
||||
|
||||
say("")
|
||||
end
|
||||
|
||||
-- <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>츦 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD>.
|
||||
when 3701.kill or 3702.kill or 3703.kill or 3704.kill or 3705.kill or 3790.kill or 3791.kill begin
|
||||
if pc.count_item(31038) < 100 then
|
||||
if number (1,50) == 1 then
|
||||
pc.give_item2 ( 31038, 1 )
|
||||
|
||||
if pc.count_item(31038) >= 100 then
|
||||
notice_multiline(gameforge.main_quest_lv96._110_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv96._110_2_notice,notice)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv96._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
if pc.count_item(31038) >= 100 then
|
||||
pc.remove_item ( 31038, pc.count_item(31038))
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv96._130_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 39032537))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 346000))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(30051),1,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(39032537)
|
||||
pc.change_money(346000)
|
||||
pc.give_item2(30051, 1)
|
||||
|
||||
set_state (state2_1)
|
||||
else --<2D>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Դ<EFBFBD>.
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv96._100_say)
|
||||
say("")
|
||||
|
||||
set_state (state1_2)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------<2D><><EFBFBD>ɼ<EFBFBD> <20><><EFBFBD><EFBFBD>1-2------------------------------------
|
||||
state state2_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv96._140_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv96._140_sendLetter)
|
||||
say(gameforge.main_quest_lv96._150_say)
|
||||
say("")
|
||||
|
||||
say("")
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv96._140_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv96._160_say)
|
||||
say("")
|
||||
wait()
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv96._190_say)
|
||||
say("")
|
||||
|
||||
set_state (state2_2)
|
||||
end
|
||||
end
|
||||
state state2_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv96._140_sendLetter)
|
||||
q.set_counter_name(gameforge.main_quest_lv96._570_counterName)
|
||||
end
|
||||
when button or info begin
|
||||
-- if pc.get_map_index() == 1 then
|
||||
-- addmapsignal(500 * 100, 500 * 100)
|
||||
-- addmapsignal(600 * 100, 500 * 100)
|
||||
-- addmapsignal(700 * 100, 300 * 100)
|
||||
-- end
|
||||
say_title(gameforge.main_quest_lv96._200_sayTitle)
|
||||
say(gameforge.main_quest_lv96._210_say)
|
||||
say("")
|
||||
say_item_vnum_inline(31039,0,2)
|
||||
say_item_vnum_inline(31040,1,2)
|
||||
say(gameforge.main_quest_lv96._570_counterName)
|
||||
local remain1 = 1 - pc.count_item(31039)
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
local remain2 = 1 - pc.count_item(31040)
|
||||
if remain2 < 0 then
|
||||
remain2 = 0
|
||||
end
|
||||
q.set_counter_value(remain1 + remain2)
|
||||
say_reward(string.format(gameforge.main_quest_lv96._580_sayReward,item_name(31039),remain1))
|
||||
say_reward(string.format(gameforge.main_quest_lv96._580_sayReward,item_name(31040),remain2))
|
||||
-- say()
|
||||
-- say_reward(locale.main_quest_lv96.pos_info)
|
||||
-- select(gameforge.main_quest_lv90._950_say)
|
||||
-- setskin(NOWINDOW)
|
||||
-- clearmapsignal()
|
||||
end
|
||||
--Ŭ<><C5AC><EFBFBD><EFBFBD> <20><>--
|
||||
when 20378.chat.gameforge.main_quest_lv96._140_sendLetter begin
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv96._220_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
when 3801.kill or 3802.kill or 3803.kill or 3804.kill or 3805.kill or 3890.kill or 3891.kill begin
|
||||
if pc.count_item(31039) < 1 or pc.count_item(31040) < 1 then
|
||||
if number (1,100) == 1 then
|
||||
if pc.count_item(31039) < 1 then
|
||||
pc.give_item2 ( 31039, 1 )
|
||||
end
|
||||
|
||||
if pc.count_item(31040) < 1 then
|
||||
pc.give_item2 ( 31040, 1 )
|
||||
end
|
||||
|
||||
local remain1 = 1 - pc.count_item(31039)
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
local remain2 = 1 - pc.count_item(31040)
|
||||
if remain2 < 0 then
|
||||
remain2 = 0
|
||||
end
|
||||
q.set_counter_value(remain1 + remain2)
|
||||
|
||||
notice_multiline(gameforge.main_quest_lv96._230_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv96._230_2_notice,notice)
|
||||
set_state (state2_3)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
state state2_3 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv96._140_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
q.set_counter_name("")
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv96._140_sendLetter)
|
||||
say(gameforge.main_quest_lv96._240_say)
|
||||
say("")
|
||||
|
||||
say("")
|
||||
end
|
||||
|
||||
-- <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>츦 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD>.
|
||||
when 3801.kill or 3802.kill or 3803.kill or 3804.kill or 3805.kill or 3890.kill or 3891.kill begin
|
||||
if pc.count_item(31039) < 1 or pc.count_item(31040) < 1 then
|
||||
if number (1,100) == 1 then
|
||||
if pc.count_item(31039) < 1 then
|
||||
pc.give_item2 ( 31039, 1 )
|
||||
end
|
||||
|
||||
if pc.count_item(31040) < 1 then
|
||||
pc.give_item2 ( 31040, 1 )
|
||||
end
|
||||
|
||||
notice_multiline(gameforge.main_quest_lv96._230_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv96._230_2_notice,notice)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv96._140_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
if pc.count_item(31039) >= 1 and pc.count_item(31040) >= 1 then
|
||||
pc.remove_item ( 31039, pc.count_item(31039))
|
||||
pc.remove_item ( 31040, pc.count_item(31040))
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv96._250_say)
|
||||
say("")
|
||||
|
||||
set_state (state2_4)
|
||||
else
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv96._220_say)
|
||||
say("")
|
||||
|
||||
set_state (state2_2)
|
||||
end
|
||||
end
|
||||
end
|
||||
--<2D><><EFBFBD>ڿ<EFBFBD><DABF>Է<EFBFBD>
|
||||
state state2_4 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv96._140_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20380)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20380))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv96._140_sendLetter)
|
||||
say(gameforge.main_quest_lv96._260_say)
|
||||
say("")
|
||||
|
||||
say("")
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_lv96._140_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_lv96._270_say)
|
||||
say("")
|
||||
wait()
|
||||
say_title(mob_name(20380))
|
||||
say(gameforge.main_quest_lv96._290_say)
|
||||
say("")
|
||||
|
||||
set_state (state2_5)
|
||||
end
|
||||
|
||||
end
|
||||
--<2D>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>忡<EFBFBD><E5BFA1>
|
||||
state state2_5 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv96._140_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv96._140_sendLetter)
|
||||
say(gameforge.main_quest_lv96._240_say)
|
||||
say("")
|
||||
|
||||
say("")
|
||||
end
|
||||
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv96._140_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv96._590_say)
|
||||
say("")
|
||||
wait()
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 40732586))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 357000))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(72016),1,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(40732586)
|
||||
pc.change_money(357000)
|
||||
pc.give_item2_select(72016)
|
||||
item.set_socket(2, 120)
|
||||
|
||||
set_state (state3_1)
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------<2D><><EFBFBD>ɼ<EFBFBD> <20><><EFBFBD><EFBFBD>1-3------------------------------------
|
||||
state state3_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv96._300_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv96._300_sendLetter)
|
||||
say(gameforge.main_quest_lv96._310_say)
|
||||
say("")
|
||||
|
||||
say("")
|
||||
end
|
||||
when 20378.chat.gameforge.main_quest_lv96._300_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv96._320_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(31073),1,locale.count_postfix))
|
||||
say("")
|
||||
wait()
|
||||
|
||||
if pc.count_item(31073) < 1 then
|
||||
pc.give_item2(31073,1)
|
||||
end
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv96._330_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv96._340_say)
|
||||
say("")
|
||||
|
||||
set_state (state3_2)
|
||||
end
|
||||
end
|
||||
state state3_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv96._300_sendLetter)
|
||||
q.set_counter_name(gameforge.main_quest_lv96._570_counterName)
|
||||
end
|
||||
when button or info begin
|
||||
-- if pc.get_map_index() == 1 then
|
||||
-- addmapsignal(500 * 100, 500 * 100)
|
||||
-- addmapsignal(600 * 100, 500 * 100)
|
||||
-- addmapsignal(700 * 100, 300 * 100)
|
||||
-- end
|
||||
say_title(gameforge.main_quest_lv96._350_sayTitle)
|
||||
say(gameforge.main_quest_lv96._360_say)
|
||||
say("")
|
||||
say_item_vnum(31039)
|
||||
say(gameforge.main_quest_lv96._570_counterName)
|
||||
local remain = 100 - pc.getqf("checked_pocket")
|
||||
if remain < 0 then
|
||||
remain = 0
|
||||
end
|
||||
q.set_counter_value(remain)
|
||||
say_reward(string.format(gameforge.main_quest_lv96._580_sayReward,item_name(31039),remain))
|
||||
-- say()
|
||||
-- say_reward(locale.main_quest_lv96.pos_info)
|
||||
-- select(gameforge.main_quest_lv90._950_say)
|
||||
-- setskin(NOWINDOW)
|
||||
-- clearmapsignal()
|
||||
end
|
||||
|
||||
when 31073.use begin
|
||||
affect.add(apply.CON, 10, 60 * 60)
|
||||
affect.add(apply.INT, 10, 60 * 60)
|
||||
affect.add(apply.STR, 10, 60 * 60)
|
||||
affect.add(apply.DEX, 10, 60 * 60)
|
||||
pc.remove_item(31073,1)
|
||||
end
|
||||
|
||||
when 3801.kill or 3802.kill or 3803.kill or 3804.kill or 3805.kill or 3890.kill or 3891.kill begin
|
||||
if number (1,100) == 1 then
|
||||
pc.give_item2 ( 31039, 1 )
|
||||
notice_multiline(gameforge.main_quest_lv96._620_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv96._620_2_notice,notice)
|
||||
end
|
||||
end
|
||||
|
||||
when 20380.chat.gameforge.main_quest_lv96._300_sendLetter with pc.count_item(31039) > 0 begin
|
||||
pc.remove_item (31039, 1)
|
||||
if number(1,100) <= 70 then -- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
say_title(mob_name(20380 ))
|
||||
say(gameforge.main_quest_lv96._370_say)
|
||||
say("")
|
||||
|
||||
|
||||
local checked = pc.getqf("checked_pocket")
|
||||
pc.setqf("checked_pocket", checked + 1)
|
||||
|
||||
local remain = 100 - pc.getqf("checked_pocket")
|
||||
if remain < 0 then
|
||||
remain = 0
|
||||
end
|
||||
q.set_counter_value(remain)
|
||||
|
||||
if pc.getqf("checked_pocket") >= 100 then
|
||||
pc.remove_item ( 31039, pc.count_item(31039))
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20380 ))
|
||||
say(gameforge.main_quest_lv96._380_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 42983593))
|
||||
--say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 0))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(30009),2,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(42983593)
|
||||
--pc.change_money(0)
|
||||
pc.give_item2(30009, 2)
|
||||
|
||||
set_state (state4_1)
|
||||
else
|
||||
say(string.format(gameforge.main_quest_lv96._390_say,remain))
|
||||
say("")
|
||||
end
|
||||
else -- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
say_title(mob_name(20380 ))
|
||||
say(gameforge.main_quest_lv96._630_say)
|
||||
say("")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
------------------------------------<2D><><EFBFBD>ɼ<EFBFBD> <20><><EFBFBD><EFBFBD>1-4-----------------------------------
|
||||
state state4_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv96._400_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv96._400_sendLetter)
|
||||
say(gameforge.main_quest_lv96._410_say)
|
||||
say("")
|
||||
|
||||
say("")
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv96._400_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv96._420_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv96._430_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv96._450_say)
|
||||
say("")
|
||||
|
||||
set_state (state4_2)
|
||||
end
|
||||
end
|
||||
-- <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> --
|
||||
state state4_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv96._400_sendLetter)
|
||||
q.set_counter_name(gameforge.main_quest_lv96._480_counterName)
|
||||
end
|
||||
when button or info begin
|
||||
-- if pc.get_map_index() == 1 then
|
||||
-- addmapsignal(500 * 100, 500 * 100)
|
||||
-- addmapsignal(600 * 100, 500 * 100)
|
||||
-- addmapsignal(700 * 100, 300 * 100)
|
||||
-- end
|
||||
say_title(gameforge.main_quest_lv96._460_sayTitle)
|
||||
say(gameforge.main_quest_lv96._470_say)
|
||||
say("")
|
||||
say_title(gameforge.main_quest_lv96._480_counterName)
|
||||
local remain1 = 1 - pc.getqf("kill_tree1")
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
local remain2 = 1 - pc.getqf("kill_tree2")
|
||||
if remain2 < 0 then
|
||||
remain2 = 0
|
||||
end
|
||||
local remain3 = 1 - pc.getqf("kill_tree3")
|
||||
if remain3 < 0 then
|
||||
remain3 = 0
|
||||
end
|
||||
q.set_counter_value(remain1 + remain2 + remain3)
|
||||
say_reward(string.format(gameforge.main_quest_lv96._490_say,mob_name(3911) ,remain1, mob_name(3912),remain2 , mob_name(3913),remain3))
|
||||
say("")
|
||||
-- say()
|
||||
-- say_reward(locale.main_quest_lv96.pos_info)
|
||||
-- select(gameforge.main_quest_lv90._950_say)
|
||||
-- setskin(NOWINDOW)
|
||||
-- clearmapsignal()
|
||||
end
|
||||
|
||||
-- Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC> --
|
||||
when 20378.chat.gameforge.main_quest_lv96._400_sendLetter begin
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv96._500_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
when 3911.kill begin
|
||||
pc.setqf("kill_tree1",1)
|
||||
if pc.getqf("kill_tree1") == 1 and pc.getqf("kill_tree2") == 1 and pc.getqf("kill_tree3") == 1 then
|
||||
notice_multiline(gameforge.main_quest_lv96._510_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv96._510_2_notice,notice)
|
||||
set_state (state4_3)
|
||||
end
|
||||
|
||||
local remain1 = 1 - pc.getqf("kill_tree1")
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
local remain2 = 1 - pc.getqf("kill_tree2")
|
||||
if remain2 < 0 then
|
||||
remain2 = 0
|
||||
end
|
||||
local remain3 = 1 - pc.getqf("kill_tree3")
|
||||
if remain3 < 0 then
|
||||
remain3 = 0
|
||||
end
|
||||
q.set_counter_value(remain1 + remain2 + remain3)
|
||||
|
||||
end
|
||||
|
||||
when 3912.kill begin
|
||||
pc.setqf("kill_tree2",1)
|
||||
if pc.getqf("kill_tree1") == 1 and pc.getqf("kill_tree2") == 1 and pc.getqf("kill_tree3") == 1 then
|
||||
notice_multiline(gameforge.main_quest_lv96._510_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv96._510_2_notice,notice)
|
||||
set_state (state4_3)
|
||||
end
|
||||
local remain1 = 1 - pc.getqf("kill_tree1")
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
local remain2 = 1 - pc.getqf("kill_tree2")
|
||||
if remain2 < 0 then
|
||||
remain2 = 0
|
||||
end
|
||||
local remain3 = 1 - pc.getqf("kill_tree3")
|
||||
if remain3 < 0 then
|
||||
remain3 = 0
|
||||
end
|
||||
q.set_counter_value(remain1 + remain2 + remain3)
|
||||
end
|
||||
|
||||
when 3913.kill begin
|
||||
pc.setqf("kill_tree3",1)
|
||||
if pc.getqf("kill_tree1") == 1 and pc.getqf("kill_tree2") == 1 and pc.getqf("kill_tree3") == 1 then
|
||||
notice_multiline(gameforge.main_quest_lv96._510_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv96._510_2_notice,notice)
|
||||
set_state (state4_3)
|
||||
end
|
||||
local remain1 = 1 - pc.getqf("kill_tree1")
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
local remain2 = 1 - pc.getqf("kill_tree2")
|
||||
if remain2 < 0 then
|
||||
remain2 = 0
|
||||
end
|
||||
local remain3 = 1 - pc.getqf("kill_tree3")
|
||||
if remain3 < 0 then
|
||||
remain3 = 0
|
||||
end
|
||||
q.set_counter_value(remain1 + remain2 + remain3)
|
||||
end
|
||||
end
|
||||
state state4_3 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv96._400_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
q.set_counter_name("")
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv96._400_sendLetter)
|
||||
say(gameforge.main_quest_lv96._520_say)
|
||||
say("")
|
||||
|
||||
say("")
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv96._400_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv96._530_say)
|
||||
say("")
|
||||
wait()
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv96._550_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 44941086))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 379000))
|
||||
say("")
|
||||
say_title(gameforge.main_quest_lv96._560_sayTitle)
|
||||
|
||||
pc.give_exp2(44941086)
|
||||
pc.change_money(379000)
|
||||
|
||||
clear_letter()
|
||||
if pc.count_item(31073) > 1 then
|
||||
pc.remove_item(31073,pc.count_item(31073))
|
||||
end
|
||||
set_quest_state ("main_quest_lv97", "state0")
|
||||
set_state (__COMPLETE__)
|
||||
end
|
||||
end
|
||||
|
||||
state __COMPLETE__ begin
|
||||
when enter begin
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
end
|
@ -1,657 +0,0 @@
|
||||
quest main_quest_lv97 begin
|
||||
state start begin
|
||||
end
|
||||
state state0 begin
|
||||
when login or levelup or enter with pc.level >= 97 begin
|
||||
set_state (state1_1)
|
||||
end
|
||||
end
|
||||
----------------------------------õ<><C3B5><EFBFBD>ų<EFBFBD> óġ----------------------------------
|
||||
state state1_1 begin
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv97._010_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv97._010_sendLetter)
|
||||
say(gameforge.main_quest_lv97._020_say)
|
||||
say("")
|
||||
|
||||
say("")
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv97._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv97._030_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv97._040_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv97._050_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv97._060_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv97._070_say)
|
||||
say("")
|
||||
|
||||
set_state (state1_2)
|
||||
end
|
||||
end
|
||||
--<2D><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>--
|
||||
state state1_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv97._010_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
-- if pc.get_map_index() == 1 then
|
||||
-- addmapsignal(500 * 100, 500 * 100)
|
||||
-- addmapsignal(600 * 100, 500 * 100)
|
||||
-- addmapsignal(700 * 100, 300 * 100)
|
||||
-- end
|
||||
say_title(gameforge.main_quest_lv97._080_sayTitle)
|
||||
say(gameforge.main_quest_lv97._090_say)
|
||||
-- say("")
|
||||
-- say_reward(locale.main_quest_lv97.pos_info)
|
||||
-- select(gameforge.main_quest_lv90._950_say)
|
||||
-- setskin(NOWINDOW)
|
||||
-- clearmapsignal()
|
||||
end
|
||||
|
||||
--Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ƿԴ<C6BF>.--
|
||||
when 20378.chat.gameforge.main_quest_lv97._010_sendLetter begin
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv97._650_say)
|
||||
end
|
||||
|
||||
when 3905.kill begin
|
||||
if pc.count_item(31074) < 1 then
|
||||
pc.give_item2 ( 31074, 1 )
|
||||
end
|
||||
|
||||
notice_multiline(gameforge.main_quest_lv97._100_notice,notice)
|
||||
|
||||
say(gameforge.main_quest_lv97._110_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say(gameforge.main_quest_lv97._120_say)
|
||||
say("")
|
||||
|
||||
set_state (state1_3)
|
||||
end
|
||||
end
|
||||
state state1_3 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv97._010_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv97._010_sendLetter)
|
||||
say(gameforge.main_quest_lv97._130_say)
|
||||
say("")
|
||||
|
||||
say("")
|
||||
end
|
||||
|
||||
-- <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>츦 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD>.
|
||||
when 3905.kill begin
|
||||
if pc.count_item(31074) < 1 then
|
||||
pc.give_item2 ( 31074, 1 )
|
||||
end
|
||||
|
||||
notice_multiline(gameforge.main_quest_lv97._100_notice,notice)
|
||||
|
||||
say(gameforge.main_quest_lv97._110_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say(gameforge.main_quest_lv97._120_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv97._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
if pc.count_item(31074) >= 1 then
|
||||
pc.remove_item ( 31074, pc.count_item(31074))
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv97._140_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv97._150_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv97._160_say)
|
||||
say("")
|
||||
wait()
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv97._190_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 45941088))
|
||||
--say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 0))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(30045),2,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(45941088)
|
||||
--pc.change_money(0)
|
||||
pc.give_item2(30045, 2)
|
||||
|
||||
set_state (state2_1)
|
||||
else --<2D>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Դ<EFBFBD>.
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv97._650_say)
|
||||
|
||||
set_state (state1_2)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------- <20>ʸ<EFBFBD><CAB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ----------------------------------
|
||||
state state2_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv97._200_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv97._200_sendLetter)
|
||||
say(gameforge.main_quest_lv97._210_say)
|
||||
say("")
|
||||
|
||||
say("")
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_lv97._200_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_lv97._220_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_lv97._230_say)
|
||||
say("")
|
||||
wait()
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv97._260_say)
|
||||
|
||||
set_state (state2_2)
|
||||
end
|
||||
end
|
||||
state state2_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv97._200_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20001)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20001))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv97._270_sayTitle)
|
||||
say(gameforge.main_quest_lv97._280_say)
|
||||
say("")
|
||||
say_item_vnum(31041)
|
||||
|
||||
say("")
|
||||
end
|
||||
--Ŭ<><C5AC><EFBFBD><EFBFBD> <20><>--
|
||||
when 20377.chat.gameforge.main_quest_lv97._200_sendLetter begin
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_lv97._290_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
when 20001.chat.gameforge.main_quest_lv97._200_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.main_quest_lv97._660_say)
|
||||
|
||||
if pc.count_item(31041) < 1 then
|
||||
pc.give_item2(31041, 1)
|
||||
notice_multiline(gameforge.main_quest_lv97._300_notice,notice)
|
||||
end
|
||||
|
||||
set_state (state2_3)
|
||||
end
|
||||
|
||||
end
|
||||
state state2_3 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv97._200_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv97._200_sendLetter)
|
||||
say(gameforge.main_quest_lv97._300_notice)
|
||||
say("")
|
||||
|
||||
say("")
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_lv97._200_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
if pc.count_item(31041) >= 1 then
|
||||
pc.remove_item ( 31041, pc.count_item(31041))
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_lv97._310_say)
|
||||
say("")
|
||||
wait()
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 41032531))
|
||||
--say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 0))
|
||||
say_reward(string.format ("%s: %d %s", item_name(71001),3,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(41032531)
|
||||
--pc.change_money(0)
|
||||
pc.give_item2(71001, 3)
|
||||
|
||||
set_state (state3_1)
|
||||
else -- <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>߷ȴ<DFB7>.
|
||||
say_title(mob_name(20377))
|
||||
say(gameforge.main_quest_lv97._170_say)
|
||||
say("")
|
||||
|
||||
set_state (state2_2)
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------- <20>Ĺ<EFBFBD> Ȱ<><C8B0> Ȯ<><C8AE>----------------------------------
|
||||
state state3_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv97._320_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv97._320_sendLetter)
|
||||
say(gameforge.main_quest_lv97._330_say)
|
||||
say("")
|
||||
|
||||
say("")
|
||||
end
|
||||
when 20378.chat.gameforge.main_quest_lv97._320_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv97._340_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv97._350_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv97._370_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv97._380_say)
|
||||
say("")
|
||||
|
||||
set_state (state3_2)
|
||||
end
|
||||
end
|
||||
state state3_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv97._320_sendLetter)
|
||||
q.set_counter_name(gameforge.main_quest_lv97._670_counterName)
|
||||
end
|
||||
when button or info begin
|
||||
-- if pc.get_map_index() == 1 then
|
||||
-- addmapsignal(500 * 100, 500 * 100)
|
||||
-- addmapsignal(600 * 100, 500 * 100)
|
||||
-- addmapsignal(700 * 100, 300 * 100)
|
||||
-- end
|
||||
say_title(gameforge.main_quest_lv97._390_sayTitle)
|
||||
say(gameforge.main_quest_lv97._400_say)
|
||||
say("")
|
||||
say_title(gameforge.main_quest_lv97._670_counterName)
|
||||
local remain1 = 2 - pc.getqf("mob3_1_kill")
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
local remain2 = 1 - pc.getqf("mob3_2_kill")
|
||||
if remain2 < 0 then
|
||||
remain2 = 0
|
||||
end
|
||||
local remain3 = 1 - pc.getqf("mob3_3_kill")
|
||||
if remain3 < 0 then
|
||||
remain3 = 0
|
||||
end
|
||||
local remain4 = 1 - pc.getqf("mob3_4_kill")
|
||||
if remain4 < 0 then
|
||||
remain4 = 0
|
||||
end
|
||||
q.set_counter_value(remain1 + remain2 + remain3 + remain4)
|
||||
say_reward(string.format(gameforge.main_quest_lv97._680_sayReward,mob_name(3907),remain1,mob_name(3908),remain2))
|
||||
say_reward(string.format(gameforge.main_quest_lv97._680_sayReward,mob_name(3909),remain3,mob_name(3910),remain4))
|
||||
-- say("")
|
||||
-- say_reward(locale.main_quest_lv97.pos_info)
|
||||
-- select(gameforge.main_quest_lv90._950_say)
|
||||
-- setskin(NOWINDOW)
|
||||
-- clearmapsignal()
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv97._320_sendLetter begin
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv97._410_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
|
||||
function kill_count()
|
||||
local remain1 = 2 - pc.getqf("mob3_1_kill")
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
local remain2 = 1 - pc.getqf("mob3_2_kill")
|
||||
if remain2 < 0 then
|
||||
remain2 = 0
|
||||
end
|
||||
local remain3 = 1 - pc.getqf("mob3_3_kill")
|
||||
if remain3 < 0 then
|
||||
remain3 = 0
|
||||
end
|
||||
local remain4 = 1 - pc.getqf("mob3_4_kill")
|
||||
if remain4 < 0 then
|
||||
remain4 = 0
|
||||
end
|
||||
local total_remain = remain1 + remain2 + remain3 + remain4
|
||||
q.set_counter_value(total_remain)
|
||||
|
||||
return total_remain
|
||||
end
|
||||
|
||||
when 3907.kill begin
|
||||
pc.setqf("mob3_1_kill",pc.getqf("mob3_1_kill") + 1)
|
||||
if main_quest_lv97.kill_count() == 0 then
|
||||
notice_multiline(gameforge.main_quest_lv97._690_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv97._690_2_notice,notice)
|
||||
set_state (state3_3)
|
||||
end
|
||||
end
|
||||
when 3908.kill begin
|
||||
pc.setqf("mob3_2_kill",pc.getqf("mob3_2_kill") + 1)
|
||||
if main_quest_lv97.kill_count() == 0 then
|
||||
notice_multiline(gameforge.main_quest_lv97._690_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv97._690_2_notice,notice)
|
||||
set_state (state3_3)
|
||||
end
|
||||
end
|
||||
when 3909.kill begin
|
||||
pc.setqf("mob3_3_kill",pc.getqf("mob3_3_kill") + 1)
|
||||
if main_quest_lv97.kill_count() == 0 then
|
||||
notice_multiline(gameforge.main_quest_lv97._690_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv97._690_2_notice,notice)
|
||||
set_state (state3_3)
|
||||
end
|
||||
end
|
||||
when 3910.kill begin
|
||||
pc.setqf("mob3_4_kill",pc.getqf("mob3_4_kill") + 1)
|
||||
if main_quest_lv97.kill_count() == 0 then
|
||||
notice_multiline(gameforge.main_quest_lv97._690_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv97._690_2_notice,notice)
|
||||
set_state (state3_3)
|
||||
end
|
||||
end
|
||||
end
|
||||
state state3_3 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv97._320_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
q.set_counter_name("")
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv97._320_sendLetter)
|
||||
say(gameforge.main_quest_lv97._420_say)
|
||||
say("")
|
||||
|
||||
say("")
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv97._320_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv97._430_say)
|
||||
say("")
|
||||
wait()
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 47898648))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 214000))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(30033),3,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(47898648)
|
||||
pc.change_money(214000)
|
||||
pc.give_item2(30033, 3)
|
||||
|
||||
set_state (state4_1)
|
||||
end
|
||||
end
|
||||
---------------------------------- <20><>ȣ<EFBFBD>ų<EFBFBD><C5B3><EFBFBD> <20><><EFBFBD><EFBFBD>, õ<><C3B5><EFBFBD>ų<EFBFBD>----------------------------------
|
||||
state state4_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv97._440_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv97._440_sendLetter)
|
||||
say(gameforge.main_quest_lv97._450_say)
|
||||
say("")
|
||||
|
||||
say("")
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv97._440_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv97._460_say)
|
||||
say("")
|
||||
wait()
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv97._480_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv97._490_say)
|
||||
say("")
|
||||
|
||||
set_state (state4_2)
|
||||
end
|
||||
end
|
||||
-- <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> --
|
||||
state state4_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv97._440_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv97._700_sayTitle)
|
||||
say(gameforge.main_quest_lv97._710_say)
|
||||
end
|
||||
|
||||
-- Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC> --
|
||||
when 20378.chat.gameforge.main_quest_lv97._440_sendLetter begin
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv97._530_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
when 3910.kill begin
|
||||
notice_multiline(gameforge.main_quest_lv97._550_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv97._550_2_notice,notice)
|
||||
|
||||
set_state (state4_3)
|
||||
end
|
||||
end
|
||||
-- <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> --
|
||||
state state4_3 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv97._440_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv97._510_sayTitle)
|
||||
say(gameforge.main_quest_lv97._520_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
-- Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC> --
|
||||
when 20378.chat.gameforge.main_quest_lv97._440_sendLetter begin
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv97._540_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
when 3906.kill begin -- õ<><C3B5><EFBFBD>ų<EFBFBD> óġ
|
||||
notice_multiline(gameforge.main_quest_lv97._560_notice,notice)
|
||||
|
||||
say(gameforge.main_quest_lv97._570_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say(gameforge.main_quest_lv97._580_say)
|
||||
say("")
|
||||
|
||||
if pc.count_item(31017) < 1 then
|
||||
pc.give_item2(31017, 1)
|
||||
end
|
||||
|
||||
set_state (state4_4)
|
||||
end
|
||||
end
|
||||
state state4_4 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv97._440_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv97._440_sendLetter)
|
||||
say(gameforge.main_quest_lv97._420_say)
|
||||
say("")
|
||||
|
||||
say("")
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv97._440_sendLetter begin
|
||||
pc.remove_item(31017,pc.count_item(31017))
|
||||
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv97._590_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv97._600_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv97._610_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_reward(gameforge.main_quest_lv97._620_sayReward)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378 ))
|
||||
say(gameforge.main_quest_lv97._630_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 49586571))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 225000))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(70024),1,locale.count_postfix))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(30039),3,locale.count_postfix))
|
||||
say("")
|
||||
say_title(gameforge.main_quest_lv97._640_sayTitle)
|
||||
|
||||
pc.give_exp2(49586571)
|
||||
pc.change_money(225000)
|
||||
pc.give_item2(70024, 1)
|
||||
pc.give_item2(30039, 3)
|
||||
|
||||
clear_letter()
|
||||
set_quest_state ("main_quest_lv98", "state0")
|
||||
set_state (__COMPLETE__)
|
||||
end
|
||||
end
|
||||
|
||||
state __COMPLETE__ begin
|
||||
when enter begin
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
end
|
@ -1,774 +0,0 @@
|
||||
quest main_quest_lv98 begin
|
||||
state start begin
|
||||
end
|
||||
state state0 begin
|
||||
when login or levelup or enter with pc.level >= 98 begin
|
||||
set_state (state1_1)
|
||||
end
|
||||
end
|
||||
----------------------------------<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 1-1----------------------------------
|
||||
state state1_1 begin
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv98._010_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv98._010_sendLetter)
|
||||
say(gameforge.main_quest_lv98._020_say)
|
||||
say("")
|
||||
say_reward(gameforge.main_quest_lv98._570_sayReward)
|
||||
say("")
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv98._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv98._030_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv98._040_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv98._050_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv98._060_say)
|
||||
say("")
|
||||
|
||||
set_state (state1_2)
|
||||
end
|
||||
end
|
||||
--<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>--
|
||||
state state1_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv98._010_sendLetter)
|
||||
q.set_counter_name(gameforge.main_quest_lv98._660_counterName)
|
||||
end
|
||||
when button or info begin
|
||||
-- if pc.get_map_index() == 1 then
|
||||
-- addmapsignal(500 * 100, 500 * 100)
|
||||
-- addmapsignal(600 * 100, 500 * 100)
|
||||
-- addmapsignal(700 * 100, 300 * 100)
|
||||
-- end
|
||||
say_title(gameforge.main_quest_lv98._540_sayTitle)
|
||||
say(gameforge.main_quest_lv98._550_say)
|
||||
say("")
|
||||
say_item_vnum(31026)
|
||||
say_title(gameforge.main_quest_lv98._660_counterName)
|
||||
local remain = 100 - pc.count_item(31026)
|
||||
if remain < 0 then
|
||||
remain = 0
|
||||
end
|
||||
q.set_counter_value(remain)
|
||||
say_reward(string.format(gameforge.main_quest_lv98._670_sayReward,item_name(31026),remain))
|
||||
-- say()
|
||||
-- say_reward(locale.main_quest_lv98.pos_info)
|
||||
-- select(gameforge.main_quest_lv90._950_say)
|
||||
-- setskin(NOWINDOW)
|
||||
-- clearmapsignal()
|
||||
end
|
||||
|
||||
--Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ƿԴ<C6BF>.--
|
||||
when 20378.chat.gameforge.main_quest_lv98._010_sendLetter begin
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv98._070_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
when 3601.kill or 3602.kill or 3603.kill or 3604.kill or 3605.kill or 3690.kill or 3691.kill begin
|
||||
if number (1,50) == 1 then
|
||||
if pc.count_item(31026) < 100 then
|
||||
pc.give_item2 ( 31026, 1 )
|
||||
|
||||
local remain = 100 - pc.count_item(31026)
|
||||
if remain < 0 then
|
||||
remain = 0
|
||||
end
|
||||
q.set_counter_value(remain)
|
||||
|
||||
if pc.count_item(31026) >= 100 then
|
||||
notice_multiline(gameforge.main_quest_lv98._080_1_notice, notice)
|
||||
notice_multiline(gameforge.main_quest_lv98._080_2_notice,notice)
|
||||
|
||||
set_state (state1_3)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
state state1_3 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv98._010_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
q.set_counter_name("")
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv98._010_sendLetter)
|
||||
say(gameforge.main_quest_lv98._560_say)
|
||||
say("")
|
||||
say_reward(gameforge.main_quest_lv98._570_sayReward)
|
||||
say("")
|
||||
end
|
||||
|
||||
-- <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>츦 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD>.
|
||||
when 3601.kill or 3602.kill or 3603.kill or 3604.kill or 3605.kill or 3690.kill or 3691.kill begin
|
||||
if number (1,50) == 1 then
|
||||
if pc.count_item(31026) < 100 then
|
||||
pc.give_item2 ( 31026, 1 )
|
||||
|
||||
if pc.count_item(31026) >= 100 then
|
||||
notice_multiline(gameforge.main_quest_lv98._080_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv98._080_2_notice,notice)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv98._010_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
if pc.count_item(31026) >= 100 then
|
||||
pc.remove_item ( 31026, pc.count_item(31026))
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv98._090_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 40898550))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 346000))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(72308),1,locale.count_postfix))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(76011),1,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(40898550)
|
||||
pc.change_money(346000)
|
||||
pc.give_item2(72308, 1)
|
||||
pc.give_item2_select(76011)
|
||||
item.set_socket(2, 120)
|
||||
|
||||
set_state (state2_1)
|
||||
else --<2D>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Դ<EFBFBD>.
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv98._070_say)
|
||||
say("")
|
||||
|
||||
set_state (state1_2)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 1-2 ----------------------------------
|
||||
state state2_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv98._130_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv98._130_sendLetter)
|
||||
say(gameforge.main_quest_lv98._140_say)
|
||||
say("")
|
||||
say_reward(gameforge.main_quest_lv98._570_sayReward)
|
||||
say("")
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv98._130_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv98._150_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv98._160_say)
|
||||
say("")
|
||||
|
||||
set_state (state2_2)
|
||||
end
|
||||
end
|
||||
state state2_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv98._130_sendLetter)
|
||||
q.set_counter_name(gameforge.main_quest_lv98._660_counterName)
|
||||
end
|
||||
when button or info begin
|
||||
-- if pc.get_map_index() == 1 then
|
||||
-- addmapsignal(500 * 100, 500 * 100)
|
||||
-- addmapsignal(600 * 100, 500 * 100)
|
||||
-- addmapsignal(700 * 100, 300 * 100)
|
||||
-- end
|
||||
say_title(gameforge.main_quest_lv98._130_sendLetter)
|
||||
say(gameforge.main_quest_lv98._590_say)
|
||||
say("")
|
||||
say_item_vnum(31042)
|
||||
say_title(gameforge.main_quest_lv98._660_counterName)
|
||||
local remain = 100 - pc.count_item(31042)
|
||||
if remain < 0 then
|
||||
remain = 0
|
||||
end
|
||||
q.set_counter_value(remain)
|
||||
say_reward(string.format(gameforge.main_quest_lv98._670_sayReward,item_name(31042),remain))
|
||||
-- say()
|
||||
-- say_reward(locale.main_quest_lv98.pos_info)
|
||||
-- select(gameforge.main_quest_lv90._950_say)
|
||||
-- setskin(NOWINDOW)
|
||||
-- clearmapsignal()
|
||||
end
|
||||
--Ŭ<><C5AC><EFBFBD><EFBFBD> <20><>--
|
||||
when 20378.chat.gameforge.main_quest_lv98._130_sendLetter begin
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv98._170_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
when 3401.kill or 3402.kill or 3403.kill or 3404.kill or 3405.kill or 3490.kill or 3491.kill begin
|
||||
if number (1,50) == 1 then
|
||||
if pc.count_item(31042) < 100 then
|
||||
pc.give_item2 ( 31042, 1 )
|
||||
local remain = 100 - pc.count_item(31042)
|
||||
if remain < 0 then
|
||||
remain = 0
|
||||
end
|
||||
q.set_counter_value(remain)
|
||||
|
||||
if pc.count_item(31042) >= 100 then
|
||||
notice_multiline(gameforge.main_quest_lv98._180_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv98._180_2_notice,notice)
|
||||
set_state (state2_3)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
state state2_3 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv98._130_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
q.set_counter_name("")
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv98._130_sendLetter)
|
||||
say(gameforge.main_quest_lv98._600_say)
|
||||
say("")
|
||||
say_reward(gameforge.main_quest_lv98._570_sayReward)
|
||||
say("")
|
||||
end
|
||||
|
||||
-- <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>츦 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD>.
|
||||
when 3401.kill or 3402.kill or 3403.kill or 3404.kill or 3405.kill or 3490.kill or 3491.kill begin
|
||||
if number (1,50) == 1 then
|
||||
if pc.count_item(31042) < 100 then
|
||||
pc.give_item2 ( 31042, 1 )
|
||||
|
||||
if pc.count_item(31042) >= 100 then
|
||||
notice_multiline(gameforge.main_quest_lv98._180_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv98._180_2_notice,notice)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv98._130_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
if pc.count_item(31042) >= 100 then
|
||||
pc.remove_item ( 31042, pc.count_item(31042))
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv98._190_say)
|
||||
say("")
|
||||
wait()
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 42646751))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 357000))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(71026),1,locale.count_postfix))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(71025),2,locale.count_postfix))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(70102),5,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(42646751)
|
||||
pc.change_money(357000)
|
||||
pc.give_item2(71026, 1)
|
||||
pc.give_item2(71025, 1)
|
||||
pc.give_item2(71025, 1)
|
||||
|
||||
pc.give_item2(70102, 1)
|
||||
pc.give_item2(70102, 1)
|
||||
pc.give_item2(70102, 1)
|
||||
pc.give_item2(70102, 1)
|
||||
pc.give_item2(70102, 1)
|
||||
|
||||
set_state (state3_1)
|
||||
else -- <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>߷ȴ<DFB7>.
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv98._170_say)
|
||||
say("")
|
||||
|
||||
set_state (state2_2)
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------- <20><>Ȱ <20><><EFBFBD><EFBFBD>----------------------------------
|
||||
state state3_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv98._200_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv98._200_sendLetter)
|
||||
say(gameforge.main_quest_lv98._210_say)
|
||||
say("")
|
||||
say_reward(gameforge.main_quest_lv98._570_sayReward)
|
||||
say("")
|
||||
end
|
||||
when 20377.chat.gameforge.main_quest_lv98._200_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20377 ))
|
||||
say(gameforge.main_quest_lv98._220_say)
|
||||
say("")
|
||||
wait()
|
||||
say_title(mob_name(20377 ))
|
||||
say(gameforge.main_quest_lv98._260_say)
|
||||
say("")
|
||||
wait()
|
||||
say_title(mob_name(20377 ))
|
||||
say(gameforge.main_quest_lv98._280_say)
|
||||
say("")
|
||||
set_state (state3_2)
|
||||
end
|
||||
end
|
||||
state state3_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv98._200_sendLetter)
|
||||
q.set_counter_name(gameforge.main_quest_lv98._680_counterName)
|
||||
end
|
||||
when button or info begin
|
||||
-- if pc.get_map_index() == 1 then
|
||||
-- addmapsignal(500 * 100, 500 * 100)
|
||||
-- addmapsignal(600 * 100, 500 * 100)
|
||||
-- addmapsignal(700 * 100, 300 * 100)
|
||||
-- end
|
||||
say_title(gameforge.main_quest_lv98._610_sayTitle)
|
||||
say(gameforge.main_quest_lv98._620_say)
|
||||
say("")
|
||||
say(gameforge.main_quest_lv98._680_counterName)
|
||||
local remain1 = 50 - pc.getqf("mob3_1_kill")
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
local remain2 = 1 - pc.getqf("mob3_2_kill")
|
||||
if remain2 < 0 then
|
||||
remain2 = 0
|
||||
end
|
||||
q.set_counter_value(remain1 + remain2)
|
||||
say_reward(string.format(gameforge.main_quest_lv98._690_sayReward,mob_name(3805),remain1,mob_name(3890),remain2))
|
||||
-- say()
|
||||
-- say_reward(locale.main_quest_lv98.pos_info)
|
||||
-- select(gameforge.main_quest_lv90._950_say)
|
||||
-- setskin(NOWINDOW)
|
||||
-- clearmapsignal()
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_lv98._200_sendLetter begin
|
||||
say_title(mob_name(20377 ))
|
||||
say(gameforge.main_quest_lv98._300_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
when 3805.kill begin
|
||||
local mob3_1_kill = pc.getqf("mob3_1_kill")
|
||||
if mob3_1_kill < 50 then
|
||||
pc.setqf("mob3_1_kill",mob3_1_kill +1)
|
||||
|
||||
local remain1 = 50 - pc.getqf("mob3_1_kill")
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
local remain2 = 1 - pc.getqf("mob3_2_kill")
|
||||
if remain2 < 0 then
|
||||
remain2 = 0
|
||||
end
|
||||
q.set_counter_value(remain1 + remain2)
|
||||
end
|
||||
|
||||
if pc.getqf("mob3_1_kill") >= 50 and pc.getqf("mob3_2_kill") >= 1 then
|
||||
notice_multiline(gameforge.main_quest_lv98._310_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv98._310_2_notice,notice)
|
||||
|
||||
set_state (state3_3)
|
||||
end
|
||||
end
|
||||
when 3890.kill begin
|
||||
local mob3_2_kill = pc.getqf("mob3_2_kill")
|
||||
if mob3_2_kill < 1 then
|
||||
pc.setqf("mob3_2_kill",1)
|
||||
|
||||
local remain1 = 50 - pc.getqf("mob3_1_kill")
|
||||
if remain1 < 0 then
|
||||
remain1 = 0
|
||||
end
|
||||
local remain2 = 1 - pc.getqf("mob3_2_kill")
|
||||
if remain2 < 0 then
|
||||
remain2 = 0
|
||||
end
|
||||
q.set_counter_value(remain1 + remain2)
|
||||
end
|
||||
|
||||
if pc.getqf("mob3_1_kill") >= 50 and pc.getqf("mob3_2_kill") >= 1 then
|
||||
notice_multiline(gameforge.main_quest_lv98._310_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv98._310_2_notice,notice)
|
||||
|
||||
set_state (state3_3)
|
||||
end
|
||||
end
|
||||
end
|
||||
state state3_3 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv98._200_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
q.set_counter_name("")
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv98._200_sendLetter)
|
||||
say(gameforge.main_quest_lv98._630_say)
|
||||
say("")
|
||||
say_reward(gameforge.main_quest_lv98._570_sayReward)
|
||||
say("")
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_lv98._200_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20377 ))
|
||||
say(gameforge.main_quest_lv98._320_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format(gameforge.main_quest_lv60._190_sayReward, 48584941))
|
||||
--say_reward(string.format(gameforge.main_quest_lv60._200_sayReward, 0))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(30021),1,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(48584941)
|
||||
--pc.change_money(0)
|
||||
pc.give_item2(30021, 1)
|
||||
|
||||
set_state (state4_1)
|
||||
end
|
||||
end
|
||||
---------------------------------- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>λ<EFBFBD>----------------------------------
|
||||
state state4_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv98._330_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv98._330_sendLetter)
|
||||
say(gameforge.main_quest_lv98._340_say)
|
||||
say("")
|
||||
say_reward(gameforge.main_quest_lv98._570_sayReward)
|
||||
say("")
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_lv98._330_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20377 ))
|
||||
say(gameforge.main_quest_lv98._350_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20377 ))
|
||||
say(gameforge.main_quest_lv98._360_say)
|
||||
say("")
|
||||
wait()
|
||||
say_title(pc.getname())
|
||||
say(gameforge.main_quest_lv98._380_say)
|
||||
say("")
|
||||
|
||||
set_state (state4_2)
|
||||
end
|
||||
end
|
||||
-- <20>λ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> --
|
||||
state state4_2 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv98._330_sendLetter)
|
||||
q.set_counter_name(gameforge.main_quest_lv98._700_counterName)
|
||||
|
||||
local v_npc1 = find_npc_by_vnum(20381)
|
||||
local v_npc2 = find_npc_by_vnum(9002)
|
||||
local v_npc3 = find_npc_by_vnum(9003)
|
||||
local v_npc4 = find_npc_by_vnum(9001)
|
||||
if 0 != v_npc1 and pc.getqf("click_npc1") ~= 1 then
|
||||
target.vid("__target_npc1__", v_npc1, mob_name(20381))
|
||||
end
|
||||
if 0 != v_npc2 and pc.getqf("click_npc2") ~= 1 then
|
||||
target.vid("__target_npc2__", v_npc2, mob_name(9002))
|
||||
end
|
||||
if 0 != v_npc3 and pc.getqf("click_npc3") ~= 1 then
|
||||
target.vid("__target_npc3__", v_npc3, mob_name(9003))
|
||||
end
|
||||
if 0 != v_npc4 and pc.getqf("click_npc4") ~= 1 then
|
||||
target.vid("__target_npc4__", v_npc4, mob_name(9001))
|
||||
end
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv98._640_sayTitle)
|
||||
say(gameforge.main_quest_lv98._650_say)
|
||||
say("")
|
||||
say_title(gameforge.main_quest_lv98._700_counterName)
|
||||
local npc1 = " "
|
||||
if pc.getqf("click_npc1") == 1 then
|
||||
npc1 = "O"
|
||||
end
|
||||
local npc2 = " "
|
||||
if pc.getqf("click_npc2") == 1 then
|
||||
npc2 = "O"
|
||||
end
|
||||
local npc3 = " "
|
||||
if pc.getqf("click_npc3") == 1 then
|
||||
npc3 = "O"
|
||||
end
|
||||
local npc4 = " "
|
||||
if pc.getqf("click_npc4") == 1 then
|
||||
npc4 = "O"
|
||||
end
|
||||
local remain = 4 - pc.getqf("click_npc1") - pc.getqf("click_npc2") - pc.getqf("click_npc3") - pc.getqf("click_npc4")
|
||||
q.set_counter_value(remain)
|
||||
say(string.format(gameforge.main_quest_lv98._710_say,npc1,npc2))
|
||||
say(string.format(gameforge.main_quest_lv98._720_say,npc3,npc4))
|
||||
say("")
|
||||
say_reward(gameforge.main_quest_lv98._570_sayReward)
|
||||
say("")
|
||||
|
||||
end
|
||||
|
||||
-- Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC> --
|
||||
when 20377.chat.gameforge.main_quest_lv98._330_sendLetter begin
|
||||
say_title(mob_name(20377 ))
|
||||
say(gameforge.main_quest_lv98._390_say)
|
||||
say("")
|
||||
wait()
|
||||
end
|
||||
|
||||
when __target_npc1__.target.click or 20381.click with pc.getqf("click_npc1") ~= 1 begin -- <20><><EFBFBD><EFBFBD>
|
||||
target.delete("__target_npc1__")
|
||||
pc.setqf("click_npc1",1)
|
||||
|
||||
say_title(mob_name(20381))
|
||||
say(gameforge.main_quest_lv98._400_say)
|
||||
say("")
|
||||
|
||||
local remain = 4 - pc.getqf("click_npc1") - pc.getqf("click_npc2") - pc.getqf("click_npc3") - pc.getqf("click_npc4")
|
||||
q.set_counter_value(remain)
|
||||
|
||||
if pc.getqf("click_npc1") == 1 and pc.getqf("click_npc2") == 1 and pc.getqf("click_npc3") == 1 and pc.getqf("click_npc4") == 1 then
|
||||
|
||||
notice_multiline(gameforge.main_quest_lv98._440_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv98._440_2_notice,notice)
|
||||
|
||||
set_state (state4_3)
|
||||
end
|
||||
end
|
||||
when __target_npc2__.target.click or 9002.click with pc.getqf("click_npc2") ~= 1 begin -- <20><><EFBFBD>
|
||||
target.delete("__target_npc2__")
|
||||
pc.setqf("click_npc2",1)
|
||||
|
||||
say_title(mob_name(9002))
|
||||
say(gameforge.main_quest_lv98._410_say)
|
||||
say("")
|
||||
|
||||
local remain = 4 - pc.getqf("click_npc1") - pc.getqf("click_npc2") - pc.getqf("click_npc3") - pc.getqf("click_npc4")
|
||||
q.set_counter_value(remain)
|
||||
|
||||
if pc.getqf("click_npc1") == 1 and pc.getqf("click_npc2") == 1 and pc.getqf("click_npc3") == 1 and pc.getqf("click_npc4") == 1 then
|
||||
|
||||
notice_multiline(gameforge.main_quest_lv98._440_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv98._440_2_notice,notice)
|
||||
|
||||
set_state (state4_3)
|
||||
end
|
||||
|
||||
end
|
||||
when __target_npc3__.target.click or 9003.click with pc.getqf("click_npc3") ~= 1 begin -- <20><>ȭ<EFBFBD><C8AD><EFBFBD><EFBFBD>
|
||||
target.delete("__target_npc3__")
|
||||
pc.setqf("click_npc3",1)
|
||||
|
||||
say_title(mob_name(9003))
|
||||
say(gameforge.main_quest_lv98._430_say)
|
||||
say("")
|
||||
|
||||
local remain = 4 - pc.getqf("click_npc1") - pc.getqf("click_npc2") - pc.getqf("click_npc3") - pc.getqf("click_npc4")
|
||||
q.set_counter_value(remain)
|
||||
|
||||
|
||||
if pc.getqf("click_npc1") == 1 and pc.getqf("click_npc2") == 1 and pc.getqf("click_npc3") == 1 and pc.getqf("click_npc4") == 1 then
|
||||
|
||||
notice_multiline(gameforge.main_quest_lv98._440_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv98._440_2_notice,notice)
|
||||
|
||||
set_state (state4_3)
|
||||
end
|
||||
end
|
||||
when __target_npc4__.target.click or 9001.click with pc.getqf("click_npc4") ~= 1 begin -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
target.delete("__target_npc4__")
|
||||
pc.setqf("click_npc4",1)
|
||||
|
||||
say_title(mob_name(9001))
|
||||
say(gameforge.main_quest_lv98._420_say)
|
||||
say("")
|
||||
|
||||
local remain = 4 - pc.getqf("click_npc1") - pc.getqf("click_npc2") - pc.getqf("click_npc3") - pc.getqf("click_npc4")
|
||||
q.set_counter_value(remain)
|
||||
|
||||
if pc.getqf("click_npc1") == 1 and pc.getqf("click_npc2") == 1 and pc.getqf("click_npc3") == 1 and pc.getqf("click_npc4") == 1 then
|
||||
|
||||
notice_multiline(gameforge.main_quest_lv98._440_1_notice,notice)
|
||||
notice_multiline(gameforge.main_quest_lv98._440_2_notice,notice)
|
||||
|
||||
set_state (state4_3)
|
||||
end
|
||||
end
|
||||
end
|
||||
state state4_3 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv98._330_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20377)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20377))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv98._330_sendLetter)
|
||||
say(gameforge.main_quest_lv98._630_say)
|
||||
say("")
|
||||
say_reward(gameforge.main_quest_lv98._570_sayReward)
|
||||
say("")
|
||||
end
|
||||
|
||||
when 20377.chat.gameforge.main_quest_lv98._330_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20377 ))
|
||||
say(gameforge.main_quest_lv98._450_say)
|
||||
say("")
|
||||
wait()
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 32033398))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 379000))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(30015),2,locale.count_postfix))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(70043),1,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(32033398)
|
||||
pc.change_money(379000)
|
||||
pc.give_item2(30015, 2)
|
||||
pc.give_item2_select(70043)
|
||||
item.set_socket(2, 60)
|
||||
|
||||
set_state (state5_1)
|
||||
end
|
||||
end
|
||||
----------------------------------<2D>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>----------------------------------
|
||||
state state5_1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.main_quest_lv98._480_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20378)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20378))
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.main_quest_lv98._480_sendLetter)
|
||||
say(gameforge.main_quest_lv98._490_say)
|
||||
say("")
|
||||
say_reward(gameforge.main_quest_lv98._570_sayReward)
|
||||
say("")
|
||||
end
|
||||
|
||||
when 20378.chat.gameforge.main_quest_lv98._480_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv98._500_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.main_quest_lv98._520_say)
|
||||
say("")
|
||||
wait()
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD>
|
||||
say_title(locale.reward)
|
||||
say_reward(string.format (gameforge.main_quest_lv60._190_sayReward, 38739560))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._200_sayReward, 390000))
|
||||
say_reward(string.format (gameforge.main_quest_lv60._210_sayReward, item_name(30006),1,locale.count_postfix))
|
||||
say("")
|
||||
|
||||
pc.give_exp2(38739560)
|
||||
pc.change_money(390000)
|
||||
pc.give_item2(30006, 1)
|
||||
|
||||
clear_letter()
|
||||
set_state (__COMPLETE__)
|
||||
end
|
||||
end
|
||||
|
||||
state __COMPLETE__ begin
|
||||
when enter begin
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
end
|
@ -1,44 +0,0 @@
|
||||
quest new_christmas_2012 begin
|
||||
state start begin
|
||||
function has_santa()
|
||||
return (game.get_event_flag("new_xmas_event") > 0)
|
||||
end
|
||||
|
||||
when 20126.chat.gameforge.new_christmas._010_npcChat begin
|
||||
say_title(mob_name(20126))
|
||||
say (gameforge.new_christmas._020_say )
|
||||
wait()
|
||||
say_title(mob_name(20126))
|
||||
say (gameforge.new_christmas._030_say )
|
||||
wait()
|
||||
say_title(mob_name(20126))
|
||||
say (gameforge.new_christmas._040_say )
|
||||
wait()
|
||||
set_quest_state("new_christmas_2012_nog", "nog_first_give")
|
||||
set_quest_state("new_christmas_2012_sock", "baby_dear_give")
|
||||
set_state ("__COMPLETE__")
|
||||
end
|
||||
when login or enter with new_christmas_2012.has_santa() begin
|
||||
if pc.get_map_index() == 1 or pc.get_map_index() == 21 or pc.get_map_index() == 41 then
|
||||
if find_npc_by_vnum(20384) == 0 then
|
||||
if pc.get_map_index() == 1 then
|
||||
mob.spawn(20384, 625, 676, 0, 0 )
|
||||
elseif pc.get_map_index() == 21 then
|
||||
mob.spawn(20384, 542, 551, 0, 0)
|
||||
elseif pc.get_map_index() == 41 then
|
||||
mob.spawn(20384, 442, 717, 0, 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
state __COMPLETE__ begin
|
||||
when 20126.chat."init christmas quest" with is_test_server() or pc.is_gm() begin
|
||||
set_state ("start")
|
||||
set_quest_state("new_christmas_2012_nog", "start")
|
||||
set_quest_state("new_christmas_2012_sock", "start")
|
||||
say ("init complete")
|
||||
end
|
||||
end
|
||||
end
|
@ -1,36 +0,0 @@
|
||||
quest new_christmas_2012_nog begin
|
||||
state start begin
|
||||
end
|
||||
state nog_first_give begin
|
||||
when 20126.chat.gameforge.new_christmas._050_npcChat begin
|
||||
say_title(mob_name(20126))
|
||||
say (gameforge.new_christmas._060_say)
|
||||
wait()
|
||||
say_title(mob_name(20126))
|
||||
say (gameforge.new_christmas._070_say)
|
||||
wait()
|
||||
pc.give_item2 (50216, 6)
|
||||
pc.setqf ("last_nog_give_time", get_global_time())
|
||||
say_title(mob_name(20126))
|
||||
say (gameforge.new_christmas._080_say)
|
||||
set_state(nog_give)
|
||||
end
|
||||
end
|
||||
state nog_give begin
|
||||
when 20126.chat.gameforge.new_christmas._090_npcChat begin
|
||||
say_title(mob_name(20126))
|
||||
say (gameforge.new_christmas._100_say)
|
||||
wait()
|
||||
if get_global_time() - pc.getqf ("last_nog_give_time") >= 86400 then
|
||||
say_title(mob_name(20126))
|
||||
say (gameforge.new_christmas._110_say)
|
||||
pc.setqf ("last_nog_give_time", get_global_time())
|
||||
pc.give_item2 (50216, 6)
|
||||
else
|
||||
say_title(mob_name(20126))
|
||||
say (gameforge.new_christmas._120_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -1,70 +0,0 @@
|
||||
quest new_christmas_2012_sock begin
|
||||
state start begin
|
||||
end
|
||||
state baby_dear_give begin
|
||||
when 20126.chat.gameforge.new_christmas_sock._010_npcChat begin
|
||||
say_title(mob_name(20126))
|
||||
say (gameforge.new_christmas_sock._020_say)
|
||||
wait()
|
||||
say_title(mob_name(20126))
|
||||
say (gameforge.new_christmas_sock._030_say)
|
||||
wait()
|
||||
say_title(mob_name(20126))
|
||||
say (gameforge.new_christmas_sock._040_say)
|
||||
wait()
|
||||
say_title(mob_name(20126))
|
||||
pc.give_item2_select (53007, 1)
|
||||
item.set_socket (0, get_global_time() + 7200)
|
||||
pc.setqf ("last_reindeer_give_time", get_global_time())
|
||||
set_state(sock_take)
|
||||
end
|
||||
end
|
||||
state sock_take begin
|
||||
when 20126.chat.gameforge.new_christmas_sock._080_npcChat begin
|
||||
if get_global_time() - pc.getqf ("last_reindeer_give_time") < 86400 then
|
||||
say_title (mob_name (20126))
|
||||
say (gameforge.new_christmas_sock._090_say)
|
||||
else
|
||||
say_title (mob_name (20126))
|
||||
say (gameforge.new_christmas_sock._040_say)
|
||||
pc.give_item2_select (53007, 1)
|
||||
item.set_socket (0, get_global_time() + 7200)
|
||||
pc.setqf ("last_reindeer_give_time", get_global_time())
|
||||
end
|
||||
end
|
||||
|
||||
when 20126.chat."reset flags / reindeer, socks" with is_test_server() begin
|
||||
pc.setqf ("last_reindeer_give_time", 0)
|
||||
pc.setqf("last_sock_cooldown_time", 0)
|
||||
end
|
||||
|
||||
when 20126.chat.gameforge.new_christmas_sock._050_npcChat begin
|
||||
if get_time() < pc.getqf("last_sock_cooldown_time") then
|
||||
say_title (mob_name(20126))
|
||||
say (gameforge.new_christmas_sock._100_say)
|
||||
else
|
||||
local n = pc.count_item(50010)
|
||||
if n < 5 then
|
||||
say_title(mob_name(20126))
|
||||
say (gameforge.new_christmas_sock._060_say)
|
||||
wait()
|
||||
else
|
||||
say_title(mob_name(20126))
|
||||
say (gameforge.new_christmas_sock._070_say)
|
||||
wait()
|
||||
pc.remove_item (50010, 5)
|
||||
say_title(locale.reward)
|
||||
|
||||
pc.give_item2(71144)
|
||||
say_reward (string.format("%s : 1%s",item_name(71144), locale.count_postfix))
|
||||
|
||||
if is_test_server() then
|
||||
pc.setqf("last_sock_cooldown_time", get_time() + 20)
|
||||
else
|
||||
pc.setqf("last_sock_cooldown_time", get_time()+60*60*24) -----------------------------------24 stunden nun
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -1,470 +0,0 @@
|
||||
quest spider_dungeon_3floor_boss begin
|
||||
state start begin
|
||||
--2, <20><><EFBFBD><EFBFBD> <20><> <20>ð<EFBFBD>.
|
||||
when spider_end_timer.server_timer with game.get_event_flag("spider_dead"..get_channel_id()) == 0 begin --
|
||||
warp_all_in_area_to_area(82700, 612700, 93700,625700, 69100, 614800, 69100, 614800)
|
||||
game.set_event_flag("spider_lair_ongoing_"..get_channel_id(),0)
|
||||
game.set_event_flag("spider_lair_leader_"..get_channel_id(), 0)
|
||||
game.set_event_flag("spider_dead"..get_channel_id(),0)
|
||||
purge_area(82700, 612700, 93700,625700)
|
||||
end
|
||||
|
||||
when spider_dead_timer.server_timer begin
|
||||
warp_all_in_area_to_area(82700, 612700, 93700,625700, 69100, 614800, 69100, 614800)
|
||||
game.set_event_flag("spider_lair_ongoing_"..get_channel_id(), 0)
|
||||
game.set_event_flag("spider_lair_leader_"..get_channel_id(), 0)
|
||||
game.set_event_flag("spider_dead"..get_channel_id(),0)
|
||||
purge_area(82700, 612700, 93700,625700)
|
||||
end
|
||||
|
||||
when login or levelup or enter with pc.get_level() >= 50 begin
|
||||
set_state( step1 )
|
||||
end
|
||||
|
||||
when 30130.chat.gameforge.spider_dungeon_3floor_boss._10_npcChat begin
|
||||
say(gameforge.spider_dungeon_3floor_boss._20_say)
|
||||
end
|
||||
end
|
||||
|
||||
state step1 begin
|
||||
when 20011.chat.gameforge.spider_dungeon_3floor_boss._30_npcChat with is_test_server() begin --<2D><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state(start)
|
||||
say(gameforge.spider_dungeon_3floor_boss._40_say)
|
||||
end
|
||||
|
||||
when 30130.chat.gameforge.spider_dungeon_3floor_boss._10_npcChat begin
|
||||
say(gameforge.spider_dungeon_3floor_boss._20_say)
|
||||
end
|
||||
|
||||
when 20355.chat.gameforge.spider_dungeon_3floor_boss._50_npcChat begin --<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>忡<EFBFBD><E5BFA1> <20><><EFBFBD><EFBFBD> <20>ɾ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
|
||||
say_title(mob_name(20355))
|
||||
----"12345678901234567890123456789012345678901234567890"|
|
||||
say(gameforge.spider_dungeon_3floor_boss._60_say)
|
||||
set_state( step2 )
|
||||
pc.give_item2(76019)
|
||||
end
|
||||
end
|
||||
|
||||
state step2 begin --<2D><EFBFBD> Ź<><C5B9><EFBFBD><EFBFBD> <20>߷<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
when 20011.chat.gameforge.spider_dungeon_3floor_boss._30_npcChat with is_test_server() begin --<2D><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state(start)
|
||||
say(gameforge.spider_dungeon_3floor_boss._40_say)
|
||||
end
|
||||
|
||||
-----------<2D><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD>2------------
|
||||
when letter begin
|
||||
send_letter(gameforge.spider_dungeon_3floor_boss._70_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(30130)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(30130))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.spider_dungeon_3floor_boss._70_sendLetter)
|
||||
say(gameforge.spider_dungeon_3floor_boss._80_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
when 30130.chat.gameforge.spider_dungeon_3floor_boss._70_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(pc.getname())
|
||||
----"12345678901234567890123456789012345678901234567890"|
|
||||
say(gameforge.spider_dungeon_3floor_boss._90_say)
|
||||
set_state(step3)
|
||||
end
|
||||
|
||||
|
||||
when 30130.chat.gameforge.spider_dungeon_3floor_boss._10_npcChat begin
|
||||
say(gameforge.spider_dungeon_3floor_boss._20_say)
|
||||
end
|
||||
|
||||
when 20355.chat.gameforge.spider_dungeon_3floor_boss._50_npcChat begin
|
||||
|
||||
say_title(mob_name(20355))
|
||||
----"12345678901234567890123456789012345678901234567890"|
|
||||
say(gameforge.spider_dungeon_3floor_boss._100_say)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
state step3 begin --Ź<><C5B9><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ư<EFBFBD><C6B0><EFBFBD>.
|
||||
when 20011.chat.gameforge.spider_dungeon_3floor_boss._30_npcChat with is_test_server() begin --<2D><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state(start)
|
||||
say(gameforge.spider_dungeon_3floor_boss._40_say)
|
||||
end
|
||||
|
||||
when 30130.chat.gameforge.spider_dungeon_3floor_boss._10_npcChat begin
|
||||
say(gameforge.spider_dungeon_3floor_boss._20_say)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.spider_dungeon_3floor_boss._110_sendLetter)
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ų<EFBFBD><C5B2>.
|
||||
local v = find_npc_by_vnum(20355)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20355))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.spider_dungeon_3floor_boss._110_sendLetter)
|
||||
say(gameforge.spider_dungeon_3floor_boss._120_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>õ<EFBFBD> <20><>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD>.
|
||||
when 20355.chat.gameforge.spider_dungeon_3floor_boss._110_sendLetter begin
|
||||
say_title(mob_name(20355))
|
||||
say(gameforge.spider_dungeon_3floor_boss._130_say)
|
||||
set_state(step4)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
state step4 begin --<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ź<><C5B9><EFBFBD><EFBFBD> <20>ñ<EFBFBD><C3B1><EFBFBD>.
|
||||
when 20011.chat.gameforge.spider_dungeon_3floor_boss._30_npcChat with is_test_server() begin --<2D><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state(start)
|
||||
say(gameforge.spider_dungeon_3floor_boss._40_say)
|
||||
end
|
||||
|
||||
when 30130.chat.gameforge.spider_dungeon_3floor_boss._10_npcChat begin
|
||||
say(gameforge.spider_dungeon_3floor_boss._20_say)
|
||||
end
|
||||
|
||||
-----------<2D><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD>2------------
|
||||
when letter begin
|
||||
send_letter(gameforge.spider_dungeon_3floor_boss._110_sendLetter)
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ų<EFBFBD><C5B2>.
|
||||
local v = find_npc_by_vnum(20011)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20011))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.spider_dungeon_3floor_boss._110_sendLetter)
|
||||
say(gameforge.spider_dungeon_3floor_boss._140_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
when 20011.chat.gameforge.spider_dungeon_3floor_boss._110_sendLetter begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(20011))
|
||||
say(gameforge.spider_dungeon_3floor_boss._150_say)
|
||||
say("")
|
||||
|
||||
set_state(step5)
|
||||
end
|
||||
|
||||
when 20355.chat.gameforge.spider_dungeon_3floor_boss._110_sendLetter begin
|
||||
say_title(mob_name(20355))
|
||||
say(gameforge.spider_dungeon_3floor_boss._130_say)
|
||||
end
|
||||
end
|
||||
|
||||
state step5 begin --<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
when 20011.chat.gameforge.spider_dungeon_3floor_boss._30_npcChat with is_test_server() begin --<2D><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state(start)
|
||||
say(gameforge.spider_dungeon_3floor_boss._40_say)
|
||||
end
|
||||
|
||||
when 30130.chat.gameforge.spider_dungeon_3floor_boss._10_npcChat begin
|
||||
say(gameforge.spider_dungeon_3floor_boss._20_say)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.spider_dungeon_3floor_boss._110_sendLetter)
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ų<EFBFBD><C5B2>.
|
||||
local v = find_npc_by_vnum(20355)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20355))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.spider_dungeon_3floor_boss._170_sayTitle)
|
||||
say(gameforge.spider_dungeon_3floor_boss._180_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
when 20355.chat.gameforge.spider_dungeon_3floor_boss._190_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20355))
|
||||
----"12345678901234567890123456789012345678901234567890"|
|
||||
say(gameforge.spider_dungeon_3floor_boss._200_say)
|
||||
say("")
|
||||
|
||||
set_state(step6) pc.give_item2(76019)
|
||||
end
|
||||
|
||||
when 20011.chat.gameforge.spider_dungeon_3floor_boss._110_sendLetter begin
|
||||
say_title(mob_name(20011))
|
||||
say(gameforge.spider_dungeon_3floor_boss._160_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
state step6 begin --<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ͻ<EFBFBD>Ų<EFBFBD><C5B2>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
when 20011.chat.gameforge.spider_dungeon_3floor_boss._30_npcChat with is_test_server() begin --<2D><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state(start)
|
||||
say(gameforge.spider_dungeon_3floor_boss._40_say)
|
||||
end
|
||||
|
||||
when 30130.chat.gameforge.spider_dungeon_3floor_boss._10_npcChat begin
|
||||
say(gameforge.spider_dungeon_3floor_boss._20_say)
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.spider_dungeon_3floor_boss._190_npcChat)
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ų<EFBFBD><C5B2>.
|
||||
local v = find_npc_by_vnum(20011)
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(20011))
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.spider_dungeon_3floor_boss._190_npcChat)
|
||||
say(gameforge.spider_dungeon_3floor_boss._200_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>õ<EFBFBD> <20><>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD>.
|
||||
when 20011.chat.gameforge.spider_dungeon_3floor_boss._190_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(mob_name(20011))
|
||||
say(gameforge.spider_dungeon_3floor_boss._230_say)
|
||||
|
||||
set_state(boss_ok)
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
state boss_ok begin -- <20><><EFBFBD>踦 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ְ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ẕ́<C5B9> <20><><EFBFBD><EFBFBD><EFBFBD>뿡 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD>.
|
||||
when 20011.chat.gameforge.spider_dungeon_3floor_boss._30_npcChat with is_test_server() begin --<2D><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state(start)
|
||||
say(gameforge.spider_dungeon_3floor_boss._40_say)
|
||||
end
|
||||
|
||||
when 20011.chat.gameforge.spider_dungeon_3floor_boss._210_npcChat begin
|
||||
|
||||
if pc.count_item(30025) > 0 and pc.count_item(30056) > 0 and pc.count_item(30057) > 0 and pc.count_item(30058) > 0 and pc.count_item(30059) > 0 and pc.count_item(30326) > 0 then
|
||||
say_title(mob_name(20011))
|
||||
say(gameforge.spider_dungeon_3floor_boss._250_say)
|
||||
pc.remove_item(30025, 1)
|
||||
pc.remove_item(30056, 1)
|
||||
pc.remove_item(30057, 1)
|
||||
pc.remove_item(30058, 1)
|
||||
pc.remove_item(30059, 1)
|
||||
pc.remove_item(30326, 1)
|
||||
if math.random(1,2000) <= 1000 then
|
||||
say(gameforge.spider_dungeon_3floor_boss._260_say)
|
||||
pc.give_item2(30324, 1)
|
||||
else
|
||||
say(gameforge.spider_dungeon_3floor_boss._270_say)
|
||||
end
|
||||
else
|
||||
say_title(mob_name(20011))
|
||||
say(gameforge.spider_dungeon_3floor_boss._280_say)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
when 30130.chat.gameforge.spider_dungeon_3floor_boss._10_npcChat begin
|
||||
|
||||
if game.get_event_flag("spider_lair_ongoing_"..get_channel_id()) == 1 then
|
||||
|
||||
local starttime = game.get_event_flag("spider_lair_start_time_"..get_channel_id())
|
||||
local current_time = get_global_time()
|
||||
|
||||
if party.get_leader_pid() == game.get_event_flag("spider_lair_leader_"..get_channel_id()) then
|
||||
|
||||
if starttime + 300 >= current_time and party.get_leader_pid() == game.get_event_flag("spider_lair_leader_"..get_channel_id()) and game.get_event_flag("spider_lair_ongoing_"..get_channel_id()) == 1 then
|
||||
say(gameforge.spider_dungeon_3floor_boss._300_say) -- <20><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
local warp = select(locale.confirm,locale.cancel)
|
||||
if warp == 1 then
|
||||
pc.setqf("firstIn",1)
|
||||
pc.setqf("retry_limit_time", starttime + 1200 + 3600 )
|
||||
set_state(inLair)
|
||||
pc.warp(88100,614800)
|
||||
return
|
||||
end
|
||||
else
|
||||
say(gameforge.spider_dungeon_3floor_boss._310_say) -- <20><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
return
|
||||
end
|
||||
else
|
||||
local remain_time = (game.get_event_flag("spider_lair_end_time_"..get_channel_id() ) - get_global_time()) / 60
|
||||
if remain_time < 0 then
|
||||
say(gameforge.spider_dungeon_3floor_boss._410_say)
|
||||
game.set_event_flag("spider_lair_ongoing_"..get_channel_id(),0)
|
||||
game.set_event_flag("spider_lair_leader_"..get_channel_id(), 0)
|
||||
game.set_event_flag("spider_dead"..get_channel_id(),0)
|
||||
return
|
||||
end
|
||||
say(gameforge.spider_dungeon_3floor_boss._320_say)
|
||||
--- here we should change to string.format %s key
|
||||
say(string.format(gameforge.spider_dungeon_3floor_boss._330_say, math.ceil(remain_time)))
|
||||
return
|
||||
end
|
||||
elseif pc.getqf("retry_limit_time") > get_global_time() then
|
||||
local access_limit = (pc.getqf("retry_limit_time") - get_global_time()) / 60
|
||||
say(gameforge.spider_dungeon_3floor_boss._340_say)
|
||||
-- here we should also change to string.format %s key
|
||||
say(string.format(gameforge.spider_dungeon_3floor_boss._350_say, math.ceil(access_limit)))
|
||||
return
|
||||
elseif party.is_leader() then
|
||||
if false == pc.can_warp() then
|
||||
say(gameforge.spider_dungeon_3floor_boss._360_say)
|
||||
return
|
||||
end
|
||||
if pc.count_item(30324) > 0 then
|
||||
say(gameforge.spider_dungeon_3floor_boss._370_say)
|
||||
local warp = select(locale.confirm,locale.cancel)
|
||||
if warp == 1 then
|
||||
|
||||
set_state(inLair)
|
||||
|
||||
pc.remove_item(30324, 1)
|
||||
|
||||
mob.spawn(2094,369,551,0,0)
|
||||
|
||||
--<2D><> <20><><EFBFBD><EFBFBD>.
|
||||
game.set_event_flag("spider_lair_ongoing_"..get_channel_id() , 1)
|
||||
game.set_event_flag("spider_lair_start_time_"..get_channel_id() , get_global_time())
|
||||
game.set_event_flag("spider_lair_end_time_"..get_channel_id() , get_global_time() + 1200)
|
||||
game.set_event_flag("spider_lair_leader_"..get_channel_id() , party.get_leader_pid())
|
||||
|
||||
pc.setqf("retry_limit_time", get_global_time() + 1200 + 3600 )
|
||||
pc.setqf("firstIn",1)
|
||||
|
||||
|
||||
server_timer("spider_end_timer", 1200 )
|
||||
|
||||
|
||||
pc.warp(88100,614800)
|
||||
end
|
||||
return
|
||||
else
|
||||
say(gameforge.spider_dungeon_3floor_boss._380_say)
|
||||
return
|
||||
end
|
||||
else --<2D><><EFBFBD><EFBFBD> <20>ƴϴ<C6B4>.
|
||||
say(gameforge.spider_dungeon_3floor_boss._390_say)
|
||||
return
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
state inLair begin
|
||||
when 20011.chat.gameforge.spider_dungeon_3floor_boss._30_npcChat with is_test_server() begin --<2D><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
set_state(start)
|
||||
say(gameforge.spider_dungeon_3floor_boss._40_say)
|
||||
end
|
||||
|
||||
|
||||
|
||||
when login begin
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>뿡 <20><><EFBFBD><EFBFBD>.
|
||||
--if pc.getqf("firstIn") == 1 and party.get_leader_pid() == game.get_event_flag("spider_lair_leader_"..get_channel_id()) then
|
||||
if get_global_time() < pc.getqf("retry_limit_time") - 3600 and party.get_leader_pid() == game.get_event_flag("spider_lair_leader_"..get_channel_id()) then
|
||||
pc.setqf("firstIn",0)
|
||||
elseif pc.getx() >= 827 and pc.getx() <= 937 and pc.gety() >= 6127 and pc.gety() <= 6257 then
|
||||
pc.warp(95900,571000)
|
||||
pc.remove_item(30327, 1)
|
||||
else -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ðܳ<C3B0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ۿ<EFBFBD><DBBF><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> <20>ϰ<EFBFBD> <20>Ǹ<EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
pc.remove_item(30327, 1)
|
||||
set_state( boss_ok )
|
||||
local limit = pc.getqf("retry_limit_time")
|
||||
|
||||
if limit > ( get_global_time() + 3600 ) then
|
||||
limit = ( get_global_time() + 3600 )
|
||||
end
|
||||
pc.setqf("retry_limit_time", limit )
|
||||
|
||||
local duration = limit - get_global_time()
|
||||
end
|
||||
end
|
||||
|
||||
when 30130.chat.gameforge.spider_dungeon_3floor_boss._10_npcChat begin
|
||||
if game.get_event_flag("spider_lair_ongoing_"..get_channel_id()) == 1 then
|
||||
local starttime = game.get_event_flag("spider_lair_start_time_"..get_channel_id())
|
||||
local current_time = get_global_time()
|
||||
|
||||
if party.get_leader_pid() == game.get_event_flag("spider_lair_leader_"..get_channel_id()) then
|
||||
if starttime + 300 >= current_time and party.get_leader_pid() == game.get_event_flag("spider_lair_leader_"..get_channel_id()) and game.get_event_flag("spider_lair_ongoing_"..get_channel_id()) == 1 then
|
||||
say(gameforge.spider_dungeon_3floor_boss._300_say) -- <20><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
local warp = select(locale.confirm,locale.cancel)
|
||||
if warp == 1 then
|
||||
pc.warp(88100,614800)
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when 2092.kill begin --<2D><><EFBFBD>հŹ<D5B0> <20><><EFBFBD><EFBFBD>
|
||||
server_timer("spider_dead_timer", 180)
|
||||
game.set_event_flag("spider_dead"..get_channel_id(), 1)
|
||||
notice_multiline(gameforge.spider_dungeon_3floor_boss._400_say,notice_in_map)
|
||||
end
|
||||
|
||||
|
||||
when 2095.kill begin --<2D>Ź̾<C5B9> <20><><EFBFBD><EFBFBD>
|
||||
local kingVid = game.get_event_flag("king_vid")
|
||||
local remain_egg = game.get_event_flag("remain_egg"..get_channel_id())
|
||||
notice_multiline(gameforge.spider_dungeon_3floor_boss._420_notice,notice_in_map)
|
||||
|
||||
if remain_egg > 0 then
|
||||
remain_egg = remain_egg - 1
|
||||
game.set_event_flag("remain_egg"..get_channel_id(), remain_egg)
|
||||
end
|
||||
|
||||
--<2D>Ź<EFBFBD><C5B9><EFBFBD> <20><><EFBFBD>ݷ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
npc.set_vid_attack_mul(kingVid, 10/(remain_egg + 1))
|
||||
|
||||
--<2D>Ź̰<C5B9> <20><EFBFBD> <20><><EFBFBD>ط<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
npc.set_vid_damage_mul(kingVid, 10/(remain_egg + 1))
|
||||
end
|
||||
|
||||
|
||||
-- 2012.4.5 <20>̻<EFBFBD><CCBB><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ <20><><EFBFBD><EFBFBD>
|
||||
when 30327.use with pc.getx() >= 827 and pc.get_map_index() == 217 and pc.getx() <= 937 and pc.gety() >= 6127 and pc.gety() <= 6257 begin
|
||||
--say("<22>ʹ<EFBFBD>ȣ : "..pc.get_map_index())
|
||||
pc.remove_item(30327, 1)
|
||||
i = mob.spawn(2095,400,566,0,0)
|
||||
mob.spawn(2095,400,594,0,0)
|
||||
mob.spawn(2095,362,600,0,0)
|
||||
mob.spawn(2095,337,599,0,0)
|
||||
mob.spawn(2095,335,581,0,0)
|
||||
mob.spawn(2095,344,562,0,0)
|
||||
mob.spawn(2095,364,588,0,0)
|
||||
mob.spawn(2095,379,562,0,0)
|
||||
mob.spawn(2095,368,525,0,0)
|
||||
|
||||
|
||||
local kingVid = mob.spawn(2092,367,588,0,0)
|
||||
game.set_event_flag("king_vid",kingVid)
|
||||
--game.set_event_flag("remain_egg",9)
|
||||
game.set_event_flag("remain_egg"..get_channel_id(), 9)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
@ -1,158 +0,0 @@
|
||||
quest test_att_resist begin
|
||||
state start begin
|
||||
when 20001.chat."ATT_TEST : ITEM - BASIC" with is_test_server() begin
|
||||
say("Test items for basic")
|
||||
say("Check damage with these")
|
||||
|
||||
local item_armor
|
||||
local item_helmet
|
||||
local item_bracelet
|
||||
|
||||
local job = pc.get_job()
|
||||
if job == 0 then -- WARRIOR
|
||||
item_armor = 11299
|
||||
item_helmet = 12249
|
||||
item_bracelet = 14109
|
||||
elseif job==1 then -- ASSASSIN
|
||||
item_armor = 11499
|
||||
item_helmet = 12389
|
||||
item_bracelet = 14109
|
||||
elseif job==2 then -- SURA
|
||||
item_armor = 11699
|
||||
item_helmet = 12529
|
||||
item_bracelet = 14109
|
||||
elseif job==3 then -- SHAMAN
|
||||
item_armor = 11899
|
||||
item_helmet = 12669
|
||||
item_bracelet = 14109
|
||||
end
|
||||
|
||||
pc.give_item2_select(item_armor)
|
||||
pc.give_item2_select(item_helmet)
|
||||
pc.give_item2_select(item_bracelet)
|
||||
end
|
||||
when 20001.chat."ATT_TEST : ITEM - FIRE" with is_test_server() begin
|
||||
say("Test items for Fire resist")
|
||||
say("Use items and Type /state to check resist stat")
|
||||
|
||||
local item_armor
|
||||
local item_helmet
|
||||
local item_bracelet
|
||||
|
||||
local job = pc.get_job()
|
||||
if job == 0 then -- WARRIOR
|
||||
item_armor = 11299
|
||||
item_helmet = 12249
|
||||
item_bracelet = 14109
|
||||
elseif job==1 then -- ASSASSIN
|
||||
item_armor = 11499
|
||||
item_helmet = 12389
|
||||
item_bracelet = 14109
|
||||
elseif job==2 then -- SURA
|
||||
item_armor = 11699
|
||||
item_helmet = 12529
|
||||
item_bracelet = 14109
|
||||
elseif job==3 then -- SHAMAN
|
||||
item_armor = 11899
|
||||
item_helmet = 12669
|
||||
item_bracelet = 14109
|
||||
end
|
||||
|
||||
pc.give_item2_select(item_armor)
|
||||
item.set_value(0, 35, 15)
|
||||
pc.give_item2_select(item_helmet)
|
||||
item.set_value(0, 35, 15)
|
||||
pc.give_item2_select(item_bracelet)
|
||||
item.set_value(0, 35, 15)
|
||||
end
|
||||
when 20001.chat."ATT_TEST : ITEM - ELEC" with is_test_server() begin
|
||||
say("Test items for ELEC resist")
|
||||
say("Use items and Type /state to check resist stat")
|
||||
|
||||
local item_armor
|
||||
local item_helmet
|
||||
local item_bracelet
|
||||
|
||||
local job = pc.get_job()
|
||||
if job == 0 then -- WARRIOR
|
||||
item_armor = 11299
|
||||
item_helmet = 12249
|
||||
item_bracelet = 14109
|
||||
elseif job==1 then -- ASSASSIN
|
||||
item_armor = 11499
|
||||
item_helmet = 12389
|
||||
item_bracelet = 14109
|
||||
elseif job==2 then -- SURA
|
||||
item_armor = 11699
|
||||
item_helmet = 12529
|
||||
item_bracelet = 14109
|
||||
elseif job==3 then -- SHAMAN
|
||||
item_armor = 11899
|
||||
item_helmet = 12669
|
||||
item_bracelet = 14109
|
||||
end
|
||||
|
||||
pc.give_item2_select(item_armor)
|
||||
item.set_value(0, 36, 15)
|
||||
pc.give_item2_select(item_helmet)
|
||||
item.set_value(0, 36, 15)
|
||||
pc.give_item2_select(item_bracelet)
|
||||
item.set_value(0, 36, 15)
|
||||
|
||||
end
|
||||
when 20001.chat."ATT_TEST : ITEM - WIND" with is_test_server() begin
|
||||
say("Test items for WIND resist")
|
||||
say("Use items and Type /state to check resist stat")
|
||||
|
||||
local item_armor
|
||||
local item_helmet
|
||||
local item_bracelet
|
||||
|
||||
local job = pc.get_job()
|
||||
if job == 0 then -- WARRIOR
|
||||
item_armor = 11299
|
||||
item_helmet = 12249
|
||||
item_bracelet = 14109
|
||||
elseif job==1 then -- ASSASSIN
|
||||
item_armor = 11499
|
||||
item_helmet = 12389
|
||||
item_bracelet = 14109
|
||||
elseif job==2 then -- SURA
|
||||
item_armor = 11699
|
||||
item_helmet = 12529
|
||||
item_bracelet = 14109
|
||||
elseif job==3 then -- SHAMAN
|
||||
item_armor = 11899
|
||||
item_helmet = 12669
|
||||
item_bracelet = 14109
|
||||
end
|
||||
|
||||
pc.give_item2_select(item_armor)
|
||||
item.set_value(0, 38, 15)
|
||||
pc.give_item2_select(item_helmet)
|
||||
item.set_value(0, 38, 15)
|
||||
pc.give_item2_select(item_bracelet)
|
||||
item.set_value(0, 38, 15)
|
||||
end
|
||||
|
||||
|
||||
when 20001.chat."ATT_TEST : MOB - FIRE" with is_test_server() begin
|
||||
say("spawn FIRE monster")
|
||||
say("check damage with basic and resist armors")
|
||||
|
||||
mob.spawn(2201, pc.get_local_x(), pc.get_local_y(),0,1,1)
|
||||
end
|
||||
when 20001.chat."ATT_TEST : MOB - ELEC" with is_test_server() begin
|
||||
say("spawn ELEC monster")
|
||||
say("check damage with basic and resist armors")
|
||||
|
||||
mob.spawn(2401, pc.get_local_x(), pc.get_local_y(),0,1,1)
|
||||
end
|
||||
when 20001.chat."ATT_TEST : MOB - WIND" with is_test_server() begin
|
||||
say("spawn WIND monster")
|
||||
say("check damage with basic and resist armors")
|
||||
|
||||
mob.spawn(777, pc.get_local_x(), pc.get_local_y(),0,1,1)
|
||||
end
|
||||
end
|
||||
end
|
@ -174,8 +174,6 @@ guild.level
|
||||
guild.name
|
||||
guild.war_bet
|
||||
guild.war_enter
|
||||
highscore.register
|
||||
highscore.show
|
||||
horse.advance
|
||||
horse.feed
|
||||
horse.get_grade
|
||||
|
@ -1,23 +0,0 @@
|
||||
#!/usr/local/bin/python
|
||||
import pre_qc
|
||||
import os
|
||||
import sys
|
||||
os.system('rm -rf object')
|
||||
os.system('mkdir object')
|
||||
#os.system('rm -rf pre_qc')
|
||||
os.system('mkdir pre_qc')
|
||||
os.system('chgrp quest object')
|
||||
for line in file('locale_list'):
|
||||
r = pre_qc.run (line)
|
||||
if r == True:
|
||||
filename = 'pre_qc/'+line
|
||||
else:
|
||||
filename = line
|
||||
|
||||
if os.system('./qc '+filename):
|
||||
print 'Error occured on compile ' + line
|
||||
os.system('chmod -R 770 object')
|
||||
import sys
|
||||
sys.exit(-1)
|
||||
|
||||
os.system('chmod -R 770 object')
|
@ -1,8 +0,0 @@
|
||||
quest test begin
|
||||
state start begin
|
||||
when 20355.chat."bbbb" begin
|
||||
setskin(NOWINDOW)
|
||||
say_show_item(90013)
|
||||
end
|
||||
end
|
||||
end
|
@ -2,15 +2,15 @@
|
||||
#define __HEADER_VNUM_HELPER__
|
||||
|
||||
/**
|
||||
<EFBFBD>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰų<CFB0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD> <20>ҽ<EFBFBD><D2BD><EFBFBD><EFBFBD><EFBFBD> <20>ĺ<EFBFBD><C4BA><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
<EFBFBD>ĺ<EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>=VNum)<29><> <20>ϵ<EFBFBD><CFB5>ڵ<EFBFBD><DAB5>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE>־ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ſ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>
|
||||
이미 존재하거나 앞으로 추가될 아이템, 몹 등을 소스에서 식별할 때 현재는 모두
|
||||
식별자(숫자=VNum)를 하드코딩하는 방식으로 되어있어서 가독성이 매우 떨어지는데
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD> <20>ҽ<EFBFBD><D2BD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(Ȥ<><C8A4> <20><>)<29><><EFBFBD><EFBFBD> <20><> <20><> <20>ְ<EFBFBD> <20><><EFBFBD>ڴ<EFBFBD> <20><>ö<EFBFBD><C3B6><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD>.
|
||||
앞으로는 소스만 봐도 어떤 아이템(혹은 몹)인지 알 수 있게 하자는 승철님의 제안으로 추가.
|
||||
|
||||
* <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǵµ<C7B4> PCH<43><48> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ؾ<EFBFBD><D8BE>ϴ<EFBFBD>
|
||||
<EFBFBD>ϴ<EFBFBD><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> cpp<70><70><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD> include <20>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
* 이 파일은 변경이 잦을것으로 예상되는데 PCH에 넣으면 바뀔 때마다 전체 컴파일 해야하니
|
||||
일단은 필요한 cpp파일에서 include 해서 쓰도록 했음.
|
||||
|
||||
* cpp<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ~ <20><>ũ<EFBFBD>ؾ<EFBFBD><D8BE>ϴ<EFBFBD> <20>׳<EFBFBD> common<6F><6E> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD>. (game, db<64><62><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
* cpp에서 구현하면 컴파일 ~ 링크해야하니 그냥 common에 헤더만 넣었음. (game, db프로젝트 둘 다 사용 예정)
|
||||
|
||||
@date 2011. 8. 29.
|
||||
*/
|
||||
@ -19,35 +19,35 @@
|
||||
class CItemVnumHelper
|
||||
{
|
||||
public:
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> DVD<56><44> <20>һ<EFBFBD><D2BB><EFBFBD> <20><>ȯ<EFBFBD><C8AF>
|
||||
static const bool IsPhoenix(DWORD vnum) { return 53001 == vnum; } // NOTE: <EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD> <20><>ȯ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 53001 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mob-vnum<EFBFBD><EFBFBD> 34001 <EFBFBD>Դϴ<EFBFBD>.
|
||||
/// 독일 DVD용 불사조 소환권
|
||||
static const bool IsPhoenix(DWORD vnum) { return 53001 == vnum; } // NOTE: 불사조 소환 아이템은 53001 이지만 mob-vnum은 34001 입니다.
|
||||
|
||||
/// <EFBFBD><EFBFBD> <20>̺<EFBFBD>Ʈ <20>ʽ´<CABD><C2B4><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> <20>̺<EFBFBD>Ʈ<EFBFBD><C6AE> Ư<><C6AF> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ȱ<EFBFBD><C8B0><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ٰ<EFBFBD> <20><>)
|
||||
/// 라마단 이벤트 초승달의 반지 (원래는 라마단 이벤트용 특수 아이템이었으나 앞으로 여러 방향으로 재활용해서 계속 쓴다고 함)
|
||||
static const bool IsRamadanMoonRing(DWORD vnum) { return 71135 == vnum; }
|
||||
|
||||
/// <EFBFBD>ҷ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʽ´<CABD><C2B4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
/// 할로윈 사탕 (스펙은 초승달의 반지와 동일)
|
||||
static const bool IsHalloweenCandy(DWORD vnum) { return 71136 == vnum; }
|
||||
|
||||
/// ũ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ູ<EFBFBD><E0BAB9> <20><><EFBFBD><EFBFBD>
|
||||
/// 크리스마스 행복의 반지
|
||||
static const bool IsHappinessRing(DWORD vnum) { return 71143 == vnum; }
|
||||
|
||||
/// <EFBFBD>߷<EFBFBD>Ÿ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD>Ʈ
|
||||
/// 발렌타인 사랑의 팬던트
|
||||
static const bool IsLovePendant(DWORD vnum) { return 71145 == vnum; }
|
||||
};
|
||||
|
||||
class CMobVnumHelper
|
||||
{
|
||||
public:
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> DVD<56><44> <20>һ<EFBFBD><D2BB><EFBFBD> <20><> <20><>ȣ
|
||||
/// 독일 DVD용 불사조 몹 번호
|
||||
static bool IsPhoenix(DWORD vnum) { return 34001 == vnum; }
|
||||
static bool IsIcePhoenix(DWORD vnum) { return 34003 == vnum; }
|
||||
/// PetSystem<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD>ΰ<EFBFBD>?
|
||||
/// PetSystem이 관리하는 펫인가?
|
||||
static bool IsPetUsingPetSystem(DWORD vnum) { return (IsPhoenix(vnum) || IsReindeerYoung(vnum)) || IsIcePhoenix(vnum); }
|
||||
|
||||
/// 2011<EFBFBD><EFBFBD> ũ<><C5A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̺<EFBFBD>Ʈ<EFBFBD><C6AE> <20><> (<28>Ʊ<EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
/// 2011년 크리스마스 이벤트용 펫 (아기 순록)
|
||||
static bool IsReindeerYoung(DWORD vnum) { return 34002 == vnum; }
|
||||
|
||||
/// <EFBFBD><EFBFBD> <20>̺<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>渶(20119) .. <20>ҷ<EFBFBD><D2B7><EFBFBD> <20>̺<EFBFBD>Ʈ<EFBFBD><C6AE> <20><EFBFBD> <20>渶 Ŭ<><C5AC>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, 20219)
|
||||
/// 라마단 이벤트 보상용 흑마(20119) .. 할로윈 이벤트용 라마단 흑마 클론(스펙은 같음, 20219)
|
||||
static bool IsRamadanBlackHorse(DWORD vnum) { return 20119 == vnum || 20219 == vnum || 22022 == vnum; }
|
||||
};
|
||||
|
||||
|
@ -26,7 +26,7 @@ public:
|
||||
int get_price () { return offer_price; }
|
||||
} TAuctionSimpleItemInfo;
|
||||
|
||||
// <EFBFBD><EFBFBD> auction <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// 각 auction 정보들.
|
||||
// primary key (item_id)
|
||||
typedef struct _auction : public _base_auction
|
||||
{
|
||||
@ -49,8 +49,8 @@ public:
|
||||
empire = _empire;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD> <20>ҵ<DEBC><D2B5><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> auction<6F><6E><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϴ<EFBFBD><CFB4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҵ<EFBFBD>.
|
||||
// 이 메소드들은 어떤 변수가 auction에서 어떤 역할을 하는지 까먹을 까봐
|
||||
// 만들어놓았다.
|
||||
// by rtsummit
|
||||
DWORD get_item_id () { return item_id; }
|
||||
DWORD get_bidder_id () { return bidder_id; }
|
||||
@ -89,7 +89,7 @@ typedef struct _sale : public _base_auction
|
||||
|
||||
} TSaleItemInfo;
|
||||
|
||||
// wish<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
// wish는 실제하는 아이템은 없다.
|
||||
// primary key (item_num, wisher_id)
|
||||
typedef struct _wish : public _base_auction
|
||||
{
|
||||
@ -118,9 +118,9 @@ enum AuctionCmd {OPEN_AUCTION, OPEN_WISH_AUCTION, OPEN_MY_AUCTION, OPEN_MY_WISH_
|
||||
AUCTION_REBID, AUCTION_BID_CANCEL,
|
||||
};
|
||||
|
||||
// <EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD> FAIL <EFBFBD>տ<EFBFBD>, <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>;<EFBFBD><CDBE>Ѵ<EFBFBD>.
|
||||
// <EFBFBD>ֳ<EFBFBD>, <= AUCTION_FAIL <EFBFBD>̷<EFBFBD> CHECK<EFBFBD><EFBFBD> <20><> <20>Űŵ<C5B0>
|
||||
// <EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD> SUCCESS <EFBFBD>ڿ<EFBFBD>, <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>;<EFBFBD><CDBE>Ѵ<EFBFBD>. <20>ٵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֱ<EFBFBD> <20>Ϸ<EFBFBD><CFB7><EFBFBD>...
|
||||
// 반드시 FAIL 앞에, 실패 류 들이 와야한다.
|
||||
// 왜냐, <= AUCTION_FAIL 이런 CHECK을 할 거거든
|
||||
// 반대로 SUCCESS 뒤에, 성공 류 들이 와야한다. 근데 성공류가 있긴 하려나...
|
||||
|
||||
enum AuctionResult { AUCTION_EXPIRED, AUCTION_NOT_EXPIRED, AUCTION_NOT_ENOUGH_MONEY,
|
||||
AUCTION_SOLD, AUCTION_CANCEL, AUCTION_ALREADY_IN, AUCTION_NOT_IN, AUCTION_FAIL, AUCTION_SUCCESS };
|
||||
@ -218,7 +218,7 @@ typedef struct command_auction
|
||||
cmd = AUCTION_CHANGING_MONEY;
|
||||
price1 = _money;
|
||||
}
|
||||
// bid<EFBFBD><EFBFBD> cmd<EFBFBD><EFBFBD> <20>ٸ<EFBFBD><D9B8><EFBFBD>.
|
||||
// bid랑 cmd만 다르다.
|
||||
void rebid (DWORD _item_id, int _bidPrice)
|
||||
{
|
||||
cmd = AUCTION_REBID;
|
||||
@ -322,7 +322,7 @@ typedef struct auction_impur : public command_auction
|
||||
// auction_type;
|
||||
// start_idx;
|
||||
// size;
|
||||
// conditions; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ö<EFBFBD>Բ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>.<2E><><EFBFBD><EFBFBD>
|
||||
// conditions; 정렬은 승철님께 조언을 구해보자.ㅇㅇ
|
||||
//}
|
||||
//
|
||||
//get_auction_detail_item_info
|
||||
|
@ -1,15 +0,0 @@
|
||||
#ifndef __INC_METIN_II_COMMON_BILLING_H__
|
||||
#define __INC_METIN_II_COMMON_BILLING_H__
|
||||
|
||||
enum EBillingTypes
|
||||
{
|
||||
BILLING_NONE,
|
||||
BILLING_IP_FREE,
|
||||
BILLING_FREE,
|
||||
BILLING_IP_TIME,
|
||||
BILLING_IP_DAY,
|
||||
BILLING_TIME,
|
||||
BILLING_DAY,
|
||||
};
|
||||
|
||||
#endif
|
@ -41,8 +41,8 @@ namespace building
|
||||
int lNPCX;
|
||||
int lNPCY;
|
||||
|
||||
DWORD dwGroupVnum; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><D7B7><EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD> <20>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
DWORD dwDependOnGroupVnum; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><EFBFBD>
|
||||
DWORD dwGroupVnum; // 같은 그룹은 하나만 건설가능
|
||||
DWORD dwDependOnGroupVnum; // 지어져 있어야하는 그룹
|
||||
} TObjectProto;
|
||||
|
||||
typedef struct SObject
|
||||
|
@ -31,8 +31,8 @@ enum EItemDragonSoulSockets
|
||||
ITEM_SOCKET_DRAGON_SOUL_ACTIVE_IDX = 2,
|
||||
ITEM_SOCKET_CHARGING_AMOUNT_IDX = 2,
|
||||
};
|
||||
// <EFBFBD><EFBFBD> <20>̰<EFBFBD> <20><>ģ<EFBFBD><C4A3> <20>ƴϾ<C6B4>?
|
||||
// <EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD>ϸ<EFBFBD> <20><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -_-;;;
|
||||
// 헐 이거 미친거 아니야?
|
||||
// 나중에 소켓 확장하면 어쩌려고 이지랄 -_-;;;
|
||||
enum EItemUniqueSockets
|
||||
{
|
||||
ITEM_SOCKET_UNIQUE_SAVE_TIME = ITEM_SOCKET_MAX_NUM - 2,
|
||||
@ -42,18 +42,18 @@ enum EItemUniqueSockets
|
||||
enum EItemTypes
|
||||
{
|
||||
ITEM_NONE, //0
|
||||
ITEM_WEAPON, //1//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ITEM_ARMOR, //2//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ITEM_USE, //3//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
ITEM_WEAPON, //1//무기
|
||||
ITEM_ARMOR, //2//갑옷
|
||||
ITEM_USE, //3//아이템 사용
|
||||
ITEM_AUTOUSE, //4
|
||||
ITEM_MATERIAL, //5
|
||||
ITEM_SPECIAL, //6 //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ITEM_SPECIAL, //6 //스페셜 아이템
|
||||
ITEM_TOOL, //7
|
||||
ITEM_LOTTERY, //8//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ITEM_ELK, //9//<EFBFBD><EFBFBD>
|
||||
ITEM_LOTTERY, //8//복권
|
||||
ITEM_ELK, //9//돈
|
||||
ITEM_METIN, //10
|
||||
ITEM_CONTAINER, //11
|
||||
ITEM_FISH, //12//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ITEM_FISH, //12//낚시
|
||||
ITEM_ROD, //13
|
||||
ITEM_RESOURCE, //14
|
||||
ITEM_CAMPFIRE, //15
|
||||
@ -61,21 +61,21 @@ enum EItemTypes
|
||||
ITEM_SKILLBOOK, //17
|
||||
ITEM_QUEST, //18
|
||||
ITEM_POLYMORPH, //19
|
||||
ITEM_TREASURE_BOX, //20//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ITEM_TREASURE_KEY, //21//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
ITEM_TREASURE_BOX, //20//보물상자
|
||||
ITEM_TREASURE_KEY, //21//보물상자 열쇠
|
||||
ITEM_SKILLFORGET, //22
|
||||
ITEM_GIFTBOX, //23
|
||||
ITEM_PICK, //24
|
||||
ITEM_HAIR, //25//<EFBFBD>Ӹ<EFBFBD>
|
||||
ITEM_TOTEM, //26//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ITEM_BLEND, //27//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɶ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20>ٴ<EFBFBD> <20>
|
||||
ITEM_COSTUME, //28//<EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (2011<31><31> 8<><38> <20>߰<EFBFBD><DFB0><EFBFBD> <20>ڽ<EFBFBD><DABD><EFBFBD> <20>ý<EFBFBD><C3BD>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
ITEM_DS, //29 //<EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>
|
||||
ITEM_SPECIAL_DS, //30 // Ư<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȥ<EFBFBD><C8A5> (DS_SLOT<4F><54> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> UNIQUE <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20><>)
|
||||
ITEM_EXTRACT, //31 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
ITEM_SECONDARY_COIN, //32 ?? <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>??
|
||||
ITEM_RING, //33 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ITEM_BELT, //34 <EFBFBD><EFBFBD>Ʈ
|
||||
ITEM_HAIR, //25//머리
|
||||
ITEM_TOTEM, //26//토템
|
||||
ITEM_BLEND, //27//생성될때 랜덤하게 속성이 붙는 약물
|
||||
ITEM_COSTUME, //28//코스츔 아이템 (2011년 8월 추가된 코스츔 시스템용 아이템)
|
||||
ITEM_DS, //29 //용혼석
|
||||
ITEM_SPECIAL_DS, //30 // 특수한 용혼석 (DS_SLOT에 착용하는 UNIQUE 아이템이라 생각하면 됨)
|
||||
ITEM_EXTRACT, //31 추출도구.
|
||||
ITEM_SECONDARY_COIN, //32 ?? 명도전??
|
||||
ITEM_RING, //33 반지
|
||||
ITEM_BELT, //34 벨트
|
||||
};
|
||||
|
||||
enum EMetinSubTypes
|
||||
@ -111,8 +111,8 @@ enum EArmorSubTypes
|
||||
|
||||
enum ECostumeSubTypes
|
||||
{
|
||||
COSTUME_BODY = ARMOR_BODY, // [<EFBFBD>߿<EFBFBD>!!] ECostumeSubTypes enum value<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> EArmorSubTypes<EFBFBD><EFBFBD> <20>װͰ<D7B0> <20><><EFBFBD>ƾ<EFBFBD> <20><>.
|
||||
COSTUME_HAIR = ARMOR_HEAD, // <EFBFBD>̴<EFBFBD> <20>ڽ<EFBFBD><DABD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20>߰<EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD>̰ڴٴ<DAB4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û<EFBFBD><C3BB> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȱ<><C8B0><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
COSTUME_BODY = ARMOR_BODY, // [중요!!] ECostumeSubTypes enum value는 종류별로 EArmorSubTypes의 그것과 같아야 함.
|
||||
COSTUME_HAIR = ARMOR_HEAD, // 이는 코스츔 아이템에 추가 속성을 붙이겠다는 사업부의 요청에 따라서 기존 로직을 활용하기 위함임.
|
||||
COSTUME_NUM_TYPES,
|
||||
};
|
||||
|
||||
@ -215,8 +215,8 @@ enum EUseSubTypes
|
||||
USE_UNBIND,
|
||||
USE_TIME_CHARGE_PER,
|
||||
USE_TIME_CHARGE_FIX, // 28
|
||||
USE_PUT_INTO_BELT_SOCKET, // 29 <EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
USE_PUT_INTO_RING_SOCKET, // 30 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>ũ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
USE_PUT_INTO_BELT_SOCKET, // 29 벨트 소켓에 사용할 수 있는 아이템
|
||||
USE_PUT_INTO_RING_SOCKET, // 30 반지 소켓에 사용할 수 있는 아이템 (유니크 반지 말고, 새로 추가된 반지 슬롯)
|
||||
};
|
||||
|
||||
enum EExtractSubTypes
|
||||
@ -270,7 +270,7 @@ enum EItemFlag
|
||||
{
|
||||
ITEM_FLAG_REFINEABLE = (1 << 0),
|
||||
ITEM_FLAG_SAVE = (1 << 1),
|
||||
ITEM_FLAG_STACKABLE = (1 << 2), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ĥ <20><> <20><><EFBFBD><EFBFBD>
|
||||
ITEM_FLAG_STACKABLE = (1 << 2), // 여러개 합칠 수 있음
|
||||
ITEM_FLAG_COUNT_PER_1GOLD = (1 << 3),
|
||||
ITEM_FLAG_SLOW_QUERY = (1 << 4),
|
||||
ITEM_FLAG_UNUSED01 = (1 << 5), // UNUSED
|
||||
@ -287,24 +287,24 @@ enum EItemFlag
|
||||
|
||||
enum EItemAntiFlag
|
||||
{
|
||||
ITEM_ANTIFLAG_FEMALE = (1 << 0), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ұ<EFBFBD>
|
||||
ITEM_ANTIFLAG_MALE = (1 << 1), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ұ<EFBFBD>
|
||||
ITEM_ANTIFLAG_WARRIOR = (1 << 2), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ұ<EFBFBD>
|
||||
ITEM_ANTIFLAG_ASSASSIN = (1 << 3), // <EFBFBD>ڰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ұ<EFBFBD>
|
||||
ITEM_ANTIFLAG_SURA = (1 << 4), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ұ<EFBFBD>
|
||||
ITEM_ANTIFLAG_SHAMAN = (1 << 5), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ұ<EFBFBD>
|
||||
ITEM_ANTIFLAG_GET = (1 << 6), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
ITEM_ANTIFLAG_DROP = (1 << 7), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
ITEM_ANTIFLAG_SELL = (1 << 8), // <EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
ITEM_ANTIFLAG_EMPIRE_A = (1 << 9), // A <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ұ<EFBFBD>
|
||||
ITEM_ANTIFLAG_EMPIRE_B = (1 << 10), // B <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ұ<EFBFBD>
|
||||
ITEM_ANTIFLAG_EMPIRE_C = (1 << 11), // C <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ұ<EFBFBD>
|
||||
ITEM_ANTIFLAG_SAVE = (1 << 12), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
ITEM_ANTIFLAG_GIVE = (1 << 13), // <EFBFBD>ŷ<EFBFBD> <20>Ұ<EFBFBD>
|
||||
ITEM_ANTIFLAG_PKDROP = (1 << 14), // PK<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
ITEM_ANTIFLAG_STACK = (1 << 15), // <EFBFBD><EFBFBD>ĥ <20><> <20><><EFBFBD><EFBFBD>
|
||||
ITEM_ANTIFLAG_MYSHOP = (1 << 16), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ø<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
ITEM_ANTIFLAG_SAFEBOX = (1 << 17), // â<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
ITEM_ANTIFLAG_FEMALE = (1 << 0), // 여성 사용 불가
|
||||
ITEM_ANTIFLAG_MALE = (1 << 1), // 남성 사용 불가
|
||||
ITEM_ANTIFLAG_WARRIOR = (1 << 2), // 무사 사용 불가
|
||||
ITEM_ANTIFLAG_ASSASSIN = (1 << 3), // 자객 사용 불가
|
||||
ITEM_ANTIFLAG_SURA = (1 << 4), // 수라 사용 불가
|
||||
ITEM_ANTIFLAG_SHAMAN = (1 << 5), // 무당 사용 불가
|
||||
ITEM_ANTIFLAG_GET = (1 << 6), // 집을 수 없음
|
||||
ITEM_ANTIFLAG_DROP = (1 << 7), // 버릴 수 없음
|
||||
ITEM_ANTIFLAG_SELL = (1 << 8), // 팔 수 없음
|
||||
ITEM_ANTIFLAG_EMPIRE_A = (1 << 9), // A 제국 사용 불가
|
||||
ITEM_ANTIFLAG_EMPIRE_B = (1 << 10), // B 제국 사용 불가
|
||||
ITEM_ANTIFLAG_EMPIRE_C = (1 << 11), // C 제국 사용 불가
|
||||
ITEM_ANTIFLAG_SAVE = (1 << 12), // 저장되지 않음
|
||||
ITEM_ANTIFLAG_GIVE = (1 << 13), // 거래 불가
|
||||
ITEM_ANTIFLAG_PKDROP = (1 << 14), // PK시 떨어지지 않음
|
||||
ITEM_ANTIFLAG_STACK = (1 << 15), // 합칠 수 없음
|
||||
ITEM_ANTIFLAG_MYSHOP = (1 << 16), // 개인 상점에 올릴 수 없음
|
||||
ITEM_ANTIFLAG_SAFEBOX = (1 << 17), // 창고에 넣을 수 없음
|
||||
};
|
||||
|
||||
enum EItemWearableFlag
|
||||
@ -333,18 +333,20 @@ enum ELimitTypes
|
||||
LIMIT_DEX,
|
||||
LIMIT_INT,
|
||||
LIMIT_CON,
|
||||
|
||||
// TODO: Remove this and re-check the validity of item_proto afterwards
|
||||
LIMIT_PCBANG,
|
||||
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ǽð<C7BD><C3B0><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD> (socket0<74><30> <20>Ҹ<EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD>: unix_timestamp Ÿ<EFBFBD><EFBFBD>)
|
||||
/// 착용 여부와 상관 없이 실시간으로 시간 차감 (socket0에 소멸 시간이 박힘: unix_timestamp 타입)
|
||||
LIMIT_REAL_TIME,
|
||||
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> ó<><C3B3> <20><><EFBFBD><EFBFBD>(Ȥ<><C8A4> <20><><EFBFBD><EFBFBD>) <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8> Ÿ<≯<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> socket0<74><30> <20><><EFBFBD>밡<EFBFBD>ɽð<C9BD>(<28>ʴ<EFBFBD><CAB4><EFBFBD>, 0<≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> limit value<75><65> <20><><EFBFBD><EFBFBD>) <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ִٰ<D6B4>
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> socket1<74><31> <20><><EFBFBD><EFBFBD> Ƚ<><C8BD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> socket0<EFBFBD><EFBFBD> unix_timestamp Ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҹ<EFBFBD><D2B8>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
/// 아이템을 맨 처음 사용(혹은 착용) 한 순간부터 리얼타임 타이머 시작
|
||||
/// 최초 사용 전에는 socket0에 사용가능시간(초단위, 0이면 프로토의 limit value값 사용) 값이 쓰여있다가
|
||||
/// 아이템 사용시 socket1에 사용 횟수가 박히고 socket0에 unix_timestamp 타입의 소멸시간이 박힘.
|
||||
LIMIT_REAL_TIME_START_FIRST_USE,
|
||||
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// socket0<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20>ʴ<EFBFBD><CAB4><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD> 0<≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> limit value<EFBFBD><EFBFBD><EFBFBD><EFBFBD> socket0<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
/// 아이템을 착용 중일 때만 사용 시간이 차감되는 아이템
|
||||
/// socket0에 남은 시간이 초단위로 박힘. (아이템 최초 사용시 해당 값이 0이면 프로토의 limit value값을 socket0에 복사)
|
||||
LIMIT_TIMER_BASED_ON_WEAR,
|
||||
|
||||
LIMIT_MAX_NUM
|
||||
|
@ -16,17 +16,15 @@ enum EMisc
|
||||
ABILITY_MAX_NUM = 50,
|
||||
EMPIRE_MAX_NUM = 4,
|
||||
BANWORD_MAX_LEN = 24,
|
||||
SMS_MAX_LEN = 80,
|
||||
MOBILE_MAX_LEN = 32,
|
||||
SOCIAL_ID_MAX_LEN = 18,
|
||||
MAP_ALLOW_MAX_LEN = 128,
|
||||
|
||||
GUILD_NAME_MAX_LEN = 12,
|
||||
|
||||
SHOP_HOST_ITEM_MAX_NUM = 40, /* ȣ<EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> */
|
||||
SHOP_GUEST_ITEM_MAX_NUM = 18, /* <EFBFBD>Խ<EFBFBD>Ʈ<EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> */
|
||||
SHOP_HOST_ITEM_MAX_NUM = 40, /* 호스트의 최대 아이템 개수 */
|
||||
SHOP_GUEST_ITEM_MAX_NUM = 18, /* 게스트의 최대 아이템 개수 */
|
||||
|
||||
SHOP_PRICELIST_MAX_NUM = 40, ///< <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
SHOP_PRICELIST_MAX_NUM = 40, ///< 개인상점 가격정보 리스트에서 유지할 가격정보의 최대 갯수
|
||||
|
||||
CHAT_MAX_LEN = 512,
|
||||
|
||||
@ -80,19 +78,19 @@ enum EMisc
|
||||
|
||||
|
||||
/**
|
||||
**** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (DB<EFBFBD><EFBFBD> Item Position) ****
|
||||
**** 현재까지 할당 된 아이템 영역 정리 (DB상 Item Position) ****
|
||||
+------------------------------------------------------+ 0
|
||||
| ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>⺻ <20>κ<EFBFBD><CEBA>丮 (45ĭ * 2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) 90ĭ |
|
||||
| 캐릭터 기본 인벤토리 (45칸 * 2페이지) 90칸 |
|
||||
+------------------------------------------------------+ 90 = INVENTORY_MAX_NUM(90)
|
||||
| ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> â (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) 32ĭ |
|
||||
| 캐릭터 장비 창 (착용중인 아이템) 32칸 |
|
||||
+------------------------------------------------------+ 122 = INVENTORY_MAX_NUM(90) + WEAR_MAX_NUM(32)
|
||||
| <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> â (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȥ<EFBFBD><C8A5>) 12ĭ |
|
||||
| 용혼석 장비 창 (착용중인 용혼석) 12칸 |
|
||||
+------------------------------------------------------+ 134 = 122 + DS_SLOT_MAX(6) * DRAGON_SOUL_DECK_MAX_NUM(2)
|
||||
| <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> â <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20>̻<EFBFBD><CCBB><EFBFBD>) 18ĭ |
|
||||
| 용혼석 장비 창 예약 (아직 미사용) 18칸 |
|
||||
+------------------------------------------------------+ 152 = 134 + DS_SLOT_MAX(6) * DRAGON_SOUL_DECK_RESERVED_MAX_NUM(3)
|
||||
| <EFBFBD><EFBFBD>Ʈ <20>κ<EFBFBD><CEBA>丮 (<28><>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD> <20><>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ȱ<><C8B0>)|
|
||||
| 벨트 인벤토리 (벨트 착용시에만 벨트 레벨에 따라 활성)|
|
||||
+------------------------------------------------------+ 168 = 152 + BELT_INVENTORY_SLOT_COUNT(16) = INVENTORY_AND_EQUIP_CELL_MAX
|
||||
| <EFBFBD>̻<EFBFBD><EFBFBD><EFBFBD> |
|
||||
| 미사용 |
|
||||
+------------------------------------------------------+ ??
|
||||
*/
|
||||
};
|
||||
@ -127,10 +125,10 @@ enum EWearPositions
|
||||
WEAR_COSTUME_BODY, // 19
|
||||
WEAR_COSTUME_HAIR, // 20
|
||||
|
||||
WEAR_RING1, // 21 : <EFBFBD>ű<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1 (<28><><EFBFBD><EFBFBD>)
|
||||
WEAR_RING2, // 22 : <EFBFBD>ű<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2 (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
WEAR_RING1, // 21 : 신규 반지슬롯1 (왼쪽)
|
||||
WEAR_RING2, // 22 : 신규 반지슬롯2 (오른쪽)
|
||||
|
||||
WEAR_BELT, // 23 : <EFBFBD>ű<EFBFBD> <20><>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD>
|
||||
WEAR_BELT, // 23 : 신규 벨트슬롯
|
||||
|
||||
WEAR_MAX = 32 //
|
||||
};
|
||||
@ -141,7 +139,7 @@ enum EDragonSoulDeckType
|
||||
DRAGON_SOUL_DECK_1,
|
||||
DRAGON_SOUL_DECK_MAX_NUM = 2,
|
||||
|
||||
DRAGON_SOUL_DECK_RESERVED_MAX_NUM = 3, // NOTE: <EFBFBD>߿<EFBFBD>! <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 3<><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>з<EFBFBD><D0B7><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><>. DS DECK<43><4B> <20>ø<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ݵ<EFBFBD><DDB5><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>ŭ RESERVED<45><44><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20><>!
|
||||
DRAGON_SOUL_DECK_RESERVED_MAX_NUM = 3, // NOTE: 중요! 아직 사용중이진 않지만, 3페이지 분량을 예약 해 둠. DS DECK을 늘릴 경우 반드시 그 수만큼 RESERVED에서 차감해야 함!
|
||||
};
|
||||
|
||||
enum ESex
|
||||
@ -163,7 +161,7 @@ enum EDirection
|
||||
DIR_MAX_NUM
|
||||
};
|
||||
|
||||
#define ABILITY_MAX_LEVEL 10 /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> */
|
||||
#define ABILITY_MAX_LEVEL 10 /* 기술 최대 레벨 */
|
||||
|
||||
enum EAbilityDifficulty
|
||||
{
|
||||
@ -176,9 +174,9 @@ enum EAbilityDifficulty
|
||||
|
||||
enum EAbilityCategory
|
||||
{
|
||||
CATEGORY_PHYSICAL, /* <EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ */
|
||||
CATEGORY_MENTAL, /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ */
|
||||
CATEGORY_ATTRIBUTE, /* <EFBFBD>ɷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ */
|
||||
CATEGORY_PHYSICAL, /* 신체적 어빌리티 */
|
||||
CATEGORY_MENTAL, /* 정신적 어빌리티 */
|
||||
CATEGORY_ATTRIBUTE, /* 능력 어빌리티 */
|
||||
CATEGORY_NUM_TYPES
|
||||
};
|
||||
|
||||
@ -248,13 +246,13 @@ enum EParts
|
||||
|
||||
enum EChatType
|
||||
{
|
||||
CHAT_TYPE_TALKING, /* <EFBFBD>׳<EFBFBD> ä<><C3A4> */
|
||||
CHAT_TYPE_INFO, /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><>) */
|
||||
CHAT_TYPE_NOTICE, /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
CHAT_TYPE_PARTY, /* <EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD> */
|
||||
CHAT_TYPE_GUILD, /* <EFBFBD><EFBFBD><EFBFBD>帻 */
|
||||
CHAT_TYPE_COMMAND, /* <EFBFBD>Ϲ<EFBFBD> <20><><EFBFBD><EFBFBD> */
|
||||
CHAT_TYPE_SHOUT, /* <EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD> */
|
||||
CHAT_TYPE_TALKING, /* 그냥 채팅 */
|
||||
CHAT_TYPE_INFO, /* 정보 (아이템을 집었다, 경험치를 얻었다. 등) */
|
||||
CHAT_TYPE_NOTICE, /* 공지사항 */
|
||||
CHAT_TYPE_PARTY, /* 파티말 */
|
||||
CHAT_TYPE_GUILD, /* 길드말 */
|
||||
CHAT_TYPE_COMMAND, /* 일반 명령 */
|
||||
CHAT_TYPE_SHOUT, /* 외치기 */
|
||||
CHAT_TYPE_WHISPER,
|
||||
CHAT_TYPE_BIG_NOTICE,
|
||||
CHAT_TYPE_MONARCH_NOTICE,
|
||||
@ -397,38 +395,38 @@ enum EApplyTypes
|
||||
APPLY_ATTBONUS_SURA, // 61
|
||||
APPLY_ATTBONUS_SHAMAN, // 62
|
||||
APPLY_ATTBONUS_MONSTER, // 63
|
||||
APPLY_MALL_ATTBONUS, // 64 <EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD> +x%
|
||||
APPLY_MALL_DEFBONUS, // 65 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> +x%
|
||||
APPLY_MALL_EXPBONUS, // 66 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ +x%
|
||||
APPLY_MALL_ITEMBONUS, // 67 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> x/10<EFBFBD><EFBFBD>
|
||||
APPLY_MALL_GOLDBONUS, // 68 <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> x/10<EFBFBD><EFBFBD>
|
||||
APPLY_MAX_HP_PCT, // 69 <EFBFBD>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> +x%
|
||||
APPLY_MAX_SP_PCT, // 70 <EFBFBD>ִ<EFBFBD> <20><><EFBFBD>ŷ<EFBFBD> +x%
|
||||
APPLY_SKILL_DAMAGE_BONUS, // 71 <EFBFBD><EFBFBD>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * (100+x)%
|
||||
APPLY_NORMAL_HIT_DAMAGE_BONUS, // 72 <EFBFBD><EFBFBD>Ÿ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * (100+x)%
|
||||
APPLY_SKILL_DEFEND_BONUS, // 73 <EFBFBD><EFBFBD>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> * (100-x)%
|
||||
APPLY_NORMAL_HIT_DEFEND_BONUS, // 74 <EFBFBD><EFBFBD>Ÿ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> * (100-x)%
|
||||
APPLY_PC_BANG_EXP_BONUS, // 75 PC<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> EXP <20><><EFBFBD>ʽ<EFBFBD>
|
||||
APPLY_PC_BANG_DROP_BONUS, // 76 PC<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ʽ<EFBFBD>
|
||||
APPLY_MALL_ATTBONUS, // 64 공격력 +x%
|
||||
APPLY_MALL_DEFBONUS, // 65 방어력 +x%
|
||||
APPLY_MALL_EXPBONUS, // 66 경험치 +x%
|
||||
APPLY_MALL_ITEMBONUS, // 67 아이템 드롭율 x/10배
|
||||
APPLY_MALL_GOLDBONUS, // 68 돈 드롭율 x/10배
|
||||
APPLY_MAX_HP_PCT, // 69 최대 생명력 +x%
|
||||
APPLY_MAX_SP_PCT, // 70 최대 정신력 +x%
|
||||
APPLY_SKILL_DAMAGE_BONUS, // 71 스킬 데미지 * (100+x)%
|
||||
APPLY_NORMAL_HIT_DAMAGE_BONUS, // 72 평타 데미지 * (100+x)%
|
||||
APPLY_SKILL_DEFEND_BONUS, // 73 스킬 데미지 방어 * (100-x)%
|
||||
APPLY_NORMAL_HIT_DEFEND_BONUS, // 74 평타 데미지 방어 * (100-x)%
|
||||
APPLY_PC_BANG_EXP_BONUS, // 75 PC방 아이템 EXP 보너스
|
||||
APPLY_PC_BANG_DROP_BONUS, // 76 PC방 아이템 드롭율 보너스
|
||||
|
||||
APPLY_EXTRACT_HP_PCT, // 77 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HP <EFBFBD>Ҹ<EFBFBD>
|
||||
APPLY_EXTRACT_HP_PCT, // 77 사용시 HP 소모
|
||||
|
||||
APPLY_RESIST_WARRIOR, // 78 <EFBFBD><EFBFBD><EFBFBD>翡<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
APPLY_RESIST_ASSASSIN, // 79 <EFBFBD>ڰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
APPLY_RESIST_SURA, // 80 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
APPLY_RESIST_SHAMAN, // 81 <EFBFBD><EFBFBD><EFBFBD>翡<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
APPLY_ENERGY, // 82 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
APPLY_DEF_GRADE, // 83 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. DEF_GRADE_BONUS<EFBFBD><EFBFBD> Ŭ<><EFBFBD> <20>ι<EFBFBD><CEB9><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ǵ<EFBFBD><C7B5><EFBFBD> <20><><EFBFBD><EFBFBD>(...)<29><> <20>ִ<EFBFBD>.
|
||||
APPLY_COSTUME_ATTR_BONUS, // 84 <EFBFBD>ڽ<EFBFBD>Ƭ <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD>ġ <20><><EFBFBD>ʽ<EFBFBD>
|
||||
APPLY_MAGIC_ATTBONUS_PER, // 85 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ݷ<EFBFBD> +x%
|
||||
APPLY_MELEE_MAGIC_ATTBONUS_PER, // 86 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> + <20>и<EFBFBD> <20><><EFBFBD>ݷ<EFBFBD> +x%
|
||||
APPLY_RESIST_WARRIOR, // 78 무사에게 저항
|
||||
APPLY_RESIST_ASSASSIN, // 79 자객에게 저항
|
||||
APPLY_RESIST_SURA, // 80 수라에게 저항
|
||||
APPLY_RESIST_SHAMAN, // 81 무당에게 저항
|
||||
APPLY_ENERGY, // 82 기력
|
||||
APPLY_DEF_GRADE, // 83 방어력. DEF_GRADE_BONUS는 클라에서 두배로 보여지는 의도된 버그(...)가 있다.
|
||||
APPLY_COSTUME_ATTR_BONUS, // 84 코스튬 아이템에 붙은 속성치 보너스
|
||||
APPLY_MAGIC_ATTBONUS_PER, // 85 마법 공격력 +x%
|
||||
APPLY_MELEE_MAGIC_ATTBONUS_PER, // 86 마법 + 밀리 공격력 +x%
|
||||
|
||||
APPLY_RESIST_ICE, // 87 <EFBFBD>ñ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
APPLY_RESIST_EARTH, // 88 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
APPLY_RESIST_DARK, // 89 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
APPLY_RESIST_ICE, // 87 냉기 저항
|
||||
APPLY_RESIST_EARTH, // 88 대지 저항
|
||||
APPLY_RESIST_DARK, // 89 어둠 저항
|
||||
|
||||
APPLY_ANTI_CRITICAL_PCT, //90 ũ<EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
APPLY_ANTI_PENETRATE_PCT, //91 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
APPLY_ANTI_CRITICAL_PCT, //90 크리티컬 저항
|
||||
APPLY_ANTI_PENETRATE_PCT, //91 관통타격 저항
|
||||
|
||||
|
||||
MAX_APPLY_NUM, //
|
||||
@ -580,7 +578,7 @@ enum EGuildWarState
|
||||
GUILD_WAR_OVER,
|
||||
GUILD_WAR_RESERVE,
|
||||
|
||||
GUILD_WAR_DURATION = 30*60, // 1<EFBFBD>ð<EFBFBD>
|
||||
GUILD_WAR_DURATION = 30*60, // 1시간
|
||||
GUILD_WAR_WIN_POINT = 1000,
|
||||
GUILD_WAR_LADDER_HALF_PENALTY_TIME = 12*60*60,
|
||||
};
|
||||
@ -624,13 +622,13 @@ enum EMoneyLogType
|
||||
|
||||
enum EPremiumTypes
|
||||
{
|
||||
PREMIUM_EXP, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD> 1.2<EFBFBD><EFBFBD>
|
||||
PREMIUM_ITEM, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2<><32>
|
||||
PREMIUM_SAFEBOX, // â<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1ĭ<31><C4AD><EFBFBD><EFBFBD> 3ĭ
|
||||
PREMIUM_AUTOLOOT, // <EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20>ݱ<EFBFBD>
|
||||
PREMIUM_FISH_MIND, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE> <20><><EFBFBD><EFBFBD>
|
||||
PREMIUM_MARRIAGE_FAST, // <EFBFBD>ݽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
||||
PREMIUM_GOLD, // <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1.5<EFBFBD><EFBFBD>
|
||||
PREMIUM_EXP, // 경험치가 1.2배
|
||||
PREMIUM_ITEM, // 아이템 드롭율이 2배
|
||||
PREMIUM_SAFEBOX, // 창고가 1칸에서 3칸
|
||||
PREMIUM_AUTOLOOT, // 돈 자동 줍기
|
||||
PREMIUM_FISH_MIND, // 고급 물고기 낚일 확률 상승
|
||||
PREMIUM_MARRIAGE_FAST, // 금실 증가 양을 빠르게합니다.
|
||||
PREMIUM_GOLD, // 돈 드롭율이 1.5배
|
||||
PREMIUM_MAX_NUM = 9
|
||||
};
|
||||
|
||||
@ -660,28 +658,18 @@ enum SPECIAL_EFFECT
|
||||
SE_AUTO_HPUP,
|
||||
SE_AUTO_SPUP,
|
||||
|
||||
SE_EQUIP_RAMADAN_RING, // <EFBFBD><EFBFBD> <20>ʽ´<CABD><C2B4><EFBFBD> <20><><EFBFBD><EFBFBD>(71135) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>Ʈ (<28>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>ƴ<EFBFBD>)
|
||||
SE_EQUIP_HALLOWEEN_CANDY, // <EFBFBD>ҷ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(-_-;)<29><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ߵ<EFBFBD><DFB5>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
|
||||
SE_EQUIP_HAPPINESS_RING, // ũ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ູ<EFBFBD><E0BAB9> <20><><EFBFBD><EFBFBD>(71143) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>Ʈ (<28>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>ƴ<EFBFBD>)
|
||||
SE_EQUIP_LOVE_PENDANT, // <EFBFBD>߷<EFBFBD>Ÿ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD>Ʈ(71145) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>Ʈ (<28>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>ƴ<EFBFBD>)
|
||||
SE_EQUIP_RAMADAN_RING, // 라마단 초승달의 반지(71135) 착용할 때 이펙트 (발동이펙트임, 지속이펙트 아님)
|
||||
SE_EQUIP_HALLOWEEN_CANDY, // 할로윈 사탕을 착용(-_-;)한 순간에 발동하는 이펙트
|
||||
SE_EQUIP_HAPPINESS_RING, // 크리스마스 행복의 반지(71143) 착용할 때 이펙트 (발동이펙트임, 지속이펙트 아님)
|
||||
SE_EQUIP_LOVE_PENDANT, // 발렌타인 사랑의 팬던트(71145) 착용할 때 이펙트 (발동이펙트임, 지속이펙트 아님)
|
||||
} ;
|
||||
|
||||
enum ETeenFlags
|
||||
{
|
||||
TEENFLAG_NONE = 0,
|
||||
TEENFLAG_1HOUR,
|
||||
TEENFLAG_2HOUR,
|
||||
TEENFLAG_3HOUR,
|
||||
TEENFLAG_4HOUR,
|
||||
TEENFLAG_5HOUR,
|
||||
};
|
||||
|
||||
#include "item_length.h"
|
||||
|
||||
// inventory<EFBFBD><EFBFBD> position<EFBFBD><EFBFBD> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü
|
||||
// int<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ͻ<EFBFBD><CFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȯ<EFBFBD><C8AF> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
||||
// <EFBFBD>κ<EFBFBD> <20><><EFBFBD>õ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> window_type<70><65> <20><><EFBFBD><EFBFBD> <20>ʰ<EFBFBD>, cell <20>ϳ<EFBFBD><CFB3><EFBFBD> <20>ұ<DEBE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>κ<EFBFBD><CEBA><EFBFBD> <20>ϳ<EFBFBD> <20><><EFBFBD>̾ inventory type<70>̶<EFBFBD><CCB6><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,)
|
||||
// <EFBFBD>κ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD> ȣ<><C8A3><EFBFBD>κ<EFBFBD><CEBA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> ??<3F><><EFBFBD>̴<EFBFBD>.
|
||||
// inventory의 position을 나타내는 구조체
|
||||
// int와의 암시적 형변환이 있는 이유는,
|
||||
// 인벤 관련된 모든 함수가 window_type은 받지 않고, cell 하나만 받았기 때문에,(기존에는 인벤이 하나 뿐이어서 inventory type이란게 필요없었기 때문에,)
|
||||
// 인벤 관련 모든 함수 호출부분을 수정하는 것이 난감하기 ??문이다.
|
||||
|
||||
enum EDragonSoulRefineWindowSize
|
||||
{
|
||||
@ -730,7 +718,7 @@ typedef struct SItemPos
|
||||
return cell < INVENTORY_AND_EQUIP_SLOT_MAX;
|
||||
case DRAGON_SOUL_INVENTORY:
|
||||
return cell < (DRAGON_SOUL_INVENTORY_MAX_NUM);
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<>Ⱑ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> window<EFBFBD><EFBFBD> valid üũ<EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
// 동적으로 크기가 정해지는 window는 valid 체크를 할 수가 없다.
|
||||
case SAFEBOX:
|
||||
case MALL:
|
||||
return false;
|
||||
|
@ -6,7 +6,7 @@
|
||||
typedef DWORD IDENT;
|
||||
|
||||
/**
|
||||
* @version 05/06/10 Bang2ni - Myshop Pricelist <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ HEADER_XX_MYSHOP_PRICELIST_XXX <EFBFBD>߰<EFBFBD>
|
||||
* @version 05/06/10 Bang2ni - Myshop Pricelist 관련 패킷 HEADER_XX_MYSHOP_PRICELIST_XXX 추가
|
||||
*/
|
||||
enum
|
||||
{
|
||||
@ -49,7 +49,6 @@ enum
|
||||
HEADER_GD_ADD_AFFECT = 32,
|
||||
HEADER_GD_REMOVE_AFFECT = 33,
|
||||
|
||||
HEADER_GD_HIGHSCORE_REGISTER = 34,
|
||||
HEADER_GD_ITEM_FLUSH = 35,
|
||||
|
||||
HEADER_GD_PARTY_CREATE = 36,
|
||||
@ -63,7 +62,6 @@ enum
|
||||
HEADER_GD_RELOAD_PROTO = 43,
|
||||
|
||||
HEADER_GD_CHANGE_NAME = 44,
|
||||
HEADER_GD_SMS = 45,
|
||||
|
||||
HEADER_GD_GUILD_CHANGE_LADDER_POINT = 46,
|
||||
HEADER_GD_GUILD_USE_SKILL = 47,
|
||||
@ -99,38 +97,27 @@ enum
|
||||
|
||||
HEADER_GD_AUTH_LOGIN = 100,
|
||||
HEADER_GD_LOGIN_BY_KEY = 101,
|
||||
HEADER_GD_BILLING_EXPIRE = 104,
|
||||
HEADER_GD_VCARD = 105,
|
||||
HEADER_GD_BILLING_CHECK = 106,
|
||||
HEADER_GD_MALL_LOAD = 107,
|
||||
|
||||
HEADER_GD_MYSHOP_PRICELIST_UPDATE = 108, ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û
|
||||
HEADER_GD_MYSHOP_PRICELIST_REQ = 109, ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>û
|
||||
HEADER_GD_MYSHOP_PRICELIST_UPDATE = 108, ///< 가격정보 갱신 요청
|
||||
HEADER_GD_MYSHOP_PRICELIST_REQ = 109, ///< 가격정보 리스트 요청
|
||||
|
||||
HEADER_GD_BLOCK_CHAT = 110,
|
||||
|
||||
// PCBANG_IP_LIST_BY_AUTH
|
||||
HEADER_GD_PCBANG_REQUEST_IP_LIST = 111,
|
||||
HEADER_GD_PCBANG_CLEAR_IP_LIST = 112,
|
||||
HEADER_GD_PCBANG_INSERT_IP = 113,
|
||||
// END_OF_PCBANG_IP_LIST_BY_AUTH
|
||||
|
||||
HEADER_GD_HAMMER_OF_TOR = 114,
|
||||
HEADER_GD_RELOAD_ADMIN = 115, ///<<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û
|
||||
HEADER_GD_BREAK_MARRIAGE = 116, ///< <EFBFBD><EFBFBD>ȥ <20>ı<EFBFBD>
|
||||
HEADER_GD_ELECT_MONARCH = 117, ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǥ
|
||||
HEADER_GD_CANDIDACY = 118, ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
HEADER_GD_ADD_MONARCH_MONEY = 119, ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
HEADER_GD_TAKE_MONARCH_MONEY = 120, ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
HEADER_GD_COME_TO_VOTE = 121, ///< ǥ<EFBFBD><EFBFBD>
|
||||
HEADER_GD_RMCANDIDACY = 122, ///< <EFBFBD>ĺ<EFBFBD> <20><><EFBFBD><EFBFBD> (<28><EFBFBD><EEBFB5>)
|
||||
HEADER_GD_SETMONARCH = 123, ///<<EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD><EFBFBD><EFBFBD> (<28><EFBFBD><EEBFB5>)
|
||||
HEADER_GD_RMMONARCH = 124, ///<<EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD>
|
||||
HEADER_GD_RELOAD_ADMIN = 115, ///<운영자 정보 요청
|
||||
HEADER_GD_BREAK_MARRIAGE = 116, ///< 결혼 파기
|
||||
HEADER_GD_ELECT_MONARCH = 117, ///< 군주 투표
|
||||
HEADER_GD_CANDIDACY = 118, ///< 군주 등록
|
||||
HEADER_GD_ADD_MONARCH_MONEY = 119, ///< 군주 돈 증가
|
||||
HEADER_GD_TAKE_MONARCH_MONEY = 120, ///< 군주 돈 감소
|
||||
HEADER_GD_COME_TO_VOTE = 121, ///< 표결
|
||||
HEADER_GD_RMCANDIDACY = 122, ///< 후보 제거 (운영자)
|
||||
HEADER_GD_SETMONARCH = 123, ///<군주설정 (운영자)
|
||||
HEADER_GD_RMMONARCH = 124, ///<군주삭제
|
||||
HEADER_GD_DEC_MONARCH_MONEY = 125,
|
||||
|
||||
HEADER_GD_CHANGE_MONARCH_LORD = 126,
|
||||
HEADER_GD_BLOCK_COUNTRY_IP = 127, // <20><><EFBFBD>뿪 IP-Block
|
||||
HEADER_GD_BLOCK_EXCEPTION = 128, // <20><><EFBFBD>뿪 IP-Block <20><><EFBFBD><EFBFBD>
|
||||
|
||||
HEADER_GD_REQ_CHANGE_GUILD_MASTER = 129,
|
||||
|
||||
@ -139,7 +126,7 @@ enum
|
||||
HEADER_GD_UPDATE_HORSE_NAME = 131,
|
||||
HEADER_GD_REQ_HORSE_NAME = 132,
|
||||
|
||||
HEADER_GD_DC = 133, // Login Key<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
HEADER_GD_DC = 133, // Login Key를 지움
|
||||
|
||||
HEADER_GD_VALID_LOGOUT = 134,
|
||||
|
||||
@ -238,12 +225,6 @@ enum
|
||||
|
||||
HEADER_DG_CHANGE_CHARACTER_PRIV = 127,
|
||||
|
||||
HEADER_DG_BILLING_REPAIR = 128,
|
||||
HEADER_DG_BILLING_EXPIRE = 129,
|
||||
HEADER_DG_BILLING_LOGIN = 130,
|
||||
HEADER_DG_VCARD = 131,
|
||||
HEADER_DG_BILLING_CHECK = 132,
|
||||
|
||||
HEADER_DG_CREATE_OBJECT = 140,
|
||||
HEADER_DG_DELETE_OBJECT = 141,
|
||||
HEADER_DG_UPDATE_LAND = 142,
|
||||
@ -257,23 +238,21 @@ enum
|
||||
HEADER_DG_WEDDING_START = 155,
|
||||
HEADER_DG_WEDDING_END = 156,
|
||||
|
||||
HEADER_DG_MYSHOP_PRICELIST_RES = 157, ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
||||
HEADER_DG_RELOAD_ADMIN = 158, ///< <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ε<EFBFBD>
|
||||
HEADER_DG_BREAK_MARRIAGE = 159, ///< <EFBFBD><EFBFBD>ȥ <20>ı<EFBFBD>
|
||||
HEADER_DG_ELECT_MONARCH = 160, ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǥ
|
||||
HEADER_DG_CANDIDACY = 161, ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
HEADER_DG_ADD_MONARCH_MONEY = 162, ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
HEADER_DG_TAKE_MONARCH_MONEY = 163, ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
HEADER_DG_COME_TO_VOTE = 164, ///< ǥ<EFBFBD><EFBFBD>
|
||||
HEADER_DG_RMCANDIDACY = 165, ///< <EFBFBD>ĺ<EFBFBD> <20><><EFBFBD><EFBFBD> (<28><EFBFBD><EEBFB5>)
|
||||
HEADER_DG_SETMONARCH = 166, ///<<EFBFBD><EFBFBD><EFBFBD>ּ<EFBFBD><EFBFBD><EFBFBD> (<28><EFBFBD><EEBFB5>)
|
||||
HEADER_DG_RMMONARCH = 167, ///<<EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD>
|
||||
HEADER_DG_MYSHOP_PRICELIST_RES = 157, ///< 가격정보 리스트 응답
|
||||
HEADER_DG_RELOAD_ADMIN = 158, ///< 운영자 정보 리로드
|
||||
HEADER_DG_BREAK_MARRIAGE = 159, ///< 결혼 파기
|
||||
HEADER_DG_ELECT_MONARCH = 160, ///< 군주 투표
|
||||
HEADER_DG_CANDIDACY = 161, ///< 군주 등록
|
||||
HEADER_DG_ADD_MONARCH_MONEY = 162, ///< 군주 돈 증가
|
||||
HEADER_DG_TAKE_MONARCH_MONEY = 163, ///< 군주 돈 감소
|
||||
HEADER_DG_COME_TO_VOTE = 164, ///< 표결
|
||||
HEADER_DG_RMCANDIDACY = 165, ///< 후보 제거 (운영자)
|
||||
HEADER_DG_SETMONARCH = 166, ///<군주설정 (운영자)
|
||||
HEADER_DG_RMMONARCH = 167, ///<군주삭제
|
||||
HEADER_DG_DEC_MONARCH_MONEY = 168,
|
||||
|
||||
HEADER_DG_CHANGE_MONARCH_LORD_ACK = 169,
|
||||
HEADER_DG_UPDATE_MONARCH_INFO = 170,
|
||||
HEADER_DG_BLOCK_COUNTRY_IP = 171, // <20><><EFBFBD>뿪 IP-Block
|
||||
HEADER_DG_BLOCK_EXCEPTION = 172, // <20><><EFBFBD>뿪 IP-Block <20><><EFBFBD><EFBFBD> account
|
||||
|
||||
HEADER_DG_ACK_CHANGE_GUILD_MASTER = 173,
|
||||
|
||||
@ -364,7 +343,7 @@ typedef struct SPlayerItem
|
||||
DWORD count;
|
||||
|
||||
DWORD vnum;
|
||||
LONG alSockets[ITEM_SOCKET_MAX_NUM]; // <EFBFBD><EFBFBD><EFBFBD>Ϲ<EFBFBD>ȣ
|
||||
LONG alSockets[ITEM_SOCKET_MAX_NUM]; // 소켓번호
|
||||
|
||||
TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
|
||||
|
||||
@ -441,7 +420,6 @@ typedef struct SPlayerTable
|
||||
|
||||
BYTE skill_group;
|
||||
LONG lAlignment;
|
||||
char szMobile[MOBILE_MAX_LEN + 1];
|
||||
|
||||
WORD stat_reset_count;
|
||||
|
||||
@ -572,9 +550,9 @@ typedef struct SShopItemTable
|
||||
DWORD vnum;
|
||||
BYTE count;
|
||||
|
||||
TItemPos pos; // PC <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̿<EFBFBD>
|
||||
DWORD price; // PC, shop_table_ex.txt <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̿<EFBFBD>
|
||||
BYTE display_pos; // PC, shop_table_ex.txt <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̿<EFBFBD>, <20><><EFBFBD><EFBFBD> <20><>ġ.
|
||||
TItemPos pos; // PC 상점에만 이용
|
||||
DWORD price; // PC, shop_table_ex.txt 상점에만 이용
|
||||
BYTE display_pos; // PC, shop_table_ex.txt 상점에만 이용, 보일 위치.
|
||||
} TShopItemTable;
|
||||
|
||||
typedef struct SShopTable
|
||||
@ -638,12 +616,12 @@ typedef struct SItemTable : public SEntityTable
|
||||
BYTE bSpecular;
|
||||
BYTE bGainSocketPct;
|
||||
|
||||
WORD sAddonType; // <EFBFBD>⺻ <20>Ӽ<EFBFBD>
|
||||
WORD sAddonType; // 기본 속성
|
||||
|
||||
// <EFBFBD>Ʒ<EFBFBD> limit flag<EFBFBD><EFBFBD><EFBFBD><EFBFBD> realtime<EFBFBD><EFBFBD> üũ <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> VNUM<55><4D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ε<EFBFBD>,
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ź<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۸<EFBFBD><DBB8><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD>쿡 LIMIT_MAX_NUM<55><4D><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鼭 üũ<C3BC>ϴ<EFBFBD> <20><><EFBFBD>ϰ<EFBFBD> Ŀ<><C4BF> <20≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><>.
|
||||
char cLimitRealTimeFirstUseIndex; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> limit <EFBFBD>ʵ尪 <20>߿<EFBFBD><DFBF><EFBFBD> LIMIT_REAL_TIME_FIRST_USE <EFBFBD>÷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -1)
|
||||
char cLimitTimerBasedOnWearIndex; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> limit <EFBFBD>ʵ尪 <20>߿<EFBFBD><DFBF><EFBFBD> LIMIT_TIMER_BASED_ON_WEAR <EFBFBD>÷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -1)
|
||||
// 아래 limit flag들은 realtime에 체크 할 일이 많고, 아이템 VNUM당 고정된 값인데,
|
||||
// 현재 구조대로 매번 아이템마다 필요한 경우에 LIMIT_MAX_NUM까지 루프돌면서 체크하는 부하가 커서 미리 저장 해 둠.
|
||||
char cLimitRealTimeFirstUseIndex; // 아이템 limit 필드값 중에서 LIMIT_REAL_TIME_FIRST_USE 플래그의 위치 (없으면 -1)
|
||||
char cLimitTimerBasedOnWearIndex; // 아이템 limit 필드값 중에서 LIMIT_TIMER_BASED_ON_WEAR 플래그의 위치 (없으면 -1)
|
||||
|
||||
} TItemTable;
|
||||
|
||||
@ -681,7 +659,7 @@ typedef struct SPlayerLoadPacket
|
||||
{
|
||||
DWORD account_id;
|
||||
DWORD player_id;
|
||||
BYTE account_index; /* account <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ */
|
||||
BYTE account_index; /* account 에서의 위치 */
|
||||
} TPlayerLoadPacket;
|
||||
|
||||
typedef struct SPlayerCreatePacket
|
||||
@ -758,9 +736,9 @@ typedef struct SEmpireSelectPacket
|
||||
typedef struct SPacketGDSetup
|
||||
{
|
||||
char szPublicIP[16]; // Public IP which listen to users
|
||||
BYTE bChannel; // ä<EFBFBD><EFBFBD>
|
||||
WORD wListenPort; // Ŭ<EFBFBD><EFBFBD><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><>Ʈ <20><>ȣ
|
||||
WORD wP2PPort; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ű<EFBFBD><C5B0> P2P <20><>Ʈ <20><>ȣ
|
||||
BYTE bChannel; // 채널
|
||||
WORD wListenPort; // 클라이언트가 접속하는 포트 번호
|
||||
WORD wP2PPort; // 서버끼리 연결 시키는 P2P 포트 번호
|
||||
LONG alMaps[MAP_ALLOW_MAX_LEN];
|
||||
DWORD dwLoginCount;
|
||||
BYTE bAuthServer;
|
||||
@ -851,14 +829,6 @@ typedef struct SPacketGDRemoveAffect
|
||||
BYTE bApplyOn;
|
||||
} TPacketGDRemoveAffect;
|
||||
|
||||
typedef struct SPacketGDHighscore
|
||||
{
|
||||
DWORD dwPID;
|
||||
LONG lValue;
|
||||
char cDir;
|
||||
char szBoard[21];
|
||||
} TPacketGDHighscore;
|
||||
|
||||
typedef struct SPacketPartyCreate
|
||||
{
|
||||
DWORD dwLeaderPID;
|
||||
@ -938,8 +908,8 @@ typedef struct SPacketGuildWar
|
||||
LONG lInitialScore;
|
||||
} TPacketGuildWar;
|
||||
|
||||
// Game -> DB : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD><C8AD>
|
||||
// DB -> Game : <EFBFBD><EFBFBD>Ż<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Game -> DB : 상대적 변화값
|
||||
// DB -> Game : 토탈된 최종값
|
||||
typedef struct SPacketGuildWarScore
|
||||
{
|
||||
DWORD dwGuildGainPoint;
|
||||
@ -960,8 +930,8 @@ typedef struct SRefineTable
|
||||
//DWORD result_vnum;
|
||||
DWORD id;
|
||||
BYTE material_count;
|
||||
DWORD cost; // <EFBFBD>ҿ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
DWORD prob; // Ȯ<EFBFBD><EFBFBD>
|
||||
DWORD cost; // 소요 비용
|
||||
DWORD prob; // 확률
|
||||
TRefineMaterial materials[REFINE_MATERIAL_MAX_NUM];
|
||||
} TRefineTable;
|
||||
|
||||
@ -997,14 +967,6 @@ typedef struct SPacketGuildLadderPoint
|
||||
LONG lChange;
|
||||
} TPacketGuildLadderPoint;
|
||||
|
||||
typedef struct SPacketGDSMS
|
||||
{
|
||||
char szFrom[CHARACTER_NAME_MAX_LEN + 1];
|
||||
char szTo[CHARACTER_NAME_MAX_LEN + 1];
|
||||
char szMobile[MOBILE_MAX_LEN + 1];
|
||||
char szMsg[SMS_MAX_LEN + 1];
|
||||
} TPacketGDSMS;
|
||||
|
||||
typedef struct SPacketGuildUseSkill
|
||||
{
|
||||
DWORD dwGuild;
|
||||
@ -1032,9 +994,7 @@ typedef struct SPacketGDAuthLogin
|
||||
char szLogin[LOGIN_MAX_LEN + 1];
|
||||
char szSocialID[SOCIAL_ID_MAX_LEN + 1];
|
||||
DWORD adwClientKey[4];
|
||||
BYTE bBillType;
|
||||
DWORD dwBillID;
|
||||
DWORD iPremiumTimes[PREMIUM_MAX_NUM];
|
||||
DWORD iPremiumTimes[PREMIUM_MAX_NUM];
|
||||
} TPacketGDAuthLogin;
|
||||
|
||||
typedef struct SPacketGDLoginByKey
|
||||
@ -1046,14 +1006,14 @@ typedef struct SPacketGDLoginByKey
|
||||
} TPacketGDLoginByKey;
|
||||
|
||||
/**
|
||||
* @version 05/06/08 Bang2ni - <EFBFBD><EFBFBD><EFBFBD>ӽð<EFBFBD> <20>߰<EFBFBD>
|
||||
* @version 05/06/08 Bang2ni - 지속시간 추가
|
||||
*/
|
||||
typedef struct SPacketGiveGuildPriv
|
||||
{
|
||||
BYTE type;
|
||||
DWORD value;
|
||||
DWORD guild_id;
|
||||
time_t duration_sec; ///< <EFBFBD><EFBFBD><EFBFBD>ӽð<EFBFBD>
|
||||
time_t duration_sec; ///< 지속시간
|
||||
} TPacketGiveGuildPriv;
|
||||
typedef struct SPacketGiveEmpirePriv
|
||||
{
|
||||
@ -1088,7 +1048,7 @@ typedef struct SPacketDGChangeCharacterPriv
|
||||
} TPacketDGChangeCharacterPriv;
|
||||
|
||||
/**
|
||||
* @version 05/06/08 Bang2ni - <EFBFBD><EFBFBD><EFBFBD>ӽð<EFBFBD> <20>߰<EFBFBD>
|
||||
* @version 05/06/08 Bang2ni - 지속시간 추가
|
||||
*/
|
||||
typedef struct SPacketDGChangeGuildPriv
|
||||
{
|
||||
@ -1096,7 +1056,7 @@ typedef struct SPacketDGChangeGuildPriv
|
||||
DWORD value;
|
||||
DWORD guild_id;
|
||||
BYTE bLog;
|
||||
time_t end_time_sec; ///< <EFBFBD><EFBFBD><EFBFBD>ӽð<EFBFBD>
|
||||
time_t end_time_sec; ///< 지속시간
|
||||
} TPacketDGChangeGuildPriv;
|
||||
|
||||
typedef struct SPacketDGChangeEmpirePriv
|
||||
@ -1146,26 +1106,6 @@ typedef struct SPacketSetEventFlag
|
||||
LONG lValue;
|
||||
} TPacketSetEventFlag;
|
||||
|
||||
typedef struct SPacketBillingLogin
|
||||
{
|
||||
DWORD dwLoginKey;
|
||||
BYTE bLogin;
|
||||
} TPacketBillingLogin;
|
||||
|
||||
typedef struct SPacketBillingRepair
|
||||
{
|
||||
DWORD dwLoginKey;
|
||||
char szLogin[LOGIN_MAX_LEN + 1];
|
||||
char szHost[MAX_HOST_LENGTH + 1];
|
||||
} TPacketBillingRepair;
|
||||
|
||||
typedef struct SPacketBillingExpire
|
||||
{
|
||||
char szLogin[LOGIN_MAX_LEN + 1];
|
||||
BYTE bBillType;
|
||||
DWORD dwRemainSeconds;
|
||||
} TPacketBillingExpire;
|
||||
|
||||
typedef struct SPacketLoginOnSetup
|
||||
{
|
||||
DWORD dwID;
|
||||
@ -1193,15 +1133,6 @@ typedef struct SPacketGDHammerOfTor
|
||||
DWORD delay;
|
||||
} TPacketGDHammerOfTor;
|
||||
|
||||
typedef struct SPacketGDVCard
|
||||
{
|
||||
DWORD dwID;
|
||||
char szSellCharacter[CHARACTER_NAME_MAX_LEN + 1];
|
||||
char szSellAccount[LOGIN_MAX_LEN + 1];
|
||||
char szBuyCharacter[CHARACTER_NAME_MAX_LEN + 1];
|
||||
char szBuyAccount[LOGIN_MAX_LEN + 1];
|
||||
} TPacketGDVCard;
|
||||
|
||||
typedef struct SGuildReserve
|
||||
{
|
||||
DWORD dwID;
|
||||
@ -1277,27 +1208,27 @@ typedef struct
|
||||
DWORD dwPID2;
|
||||
} TPacketWeddingEnd;
|
||||
|
||||
/// <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD> <20><> <20>ڿ<EFBFBD> byCount <EFBFBD><EFBFBD>ŭ<EFBFBD><EFBFBD> TItemPriceInfo <EFBFBD><EFBFBD> <20>´<EFBFBD>.
|
||||
/// 개인상점 가격정보의 헤더. 가변 패킷으로 이 뒤에 byCount 만큼의 TItemPriceInfo 가 온다.
|
||||
typedef struct SPacketMyshopPricelistHeader
|
||||
{
|
||||
DWORD dwOwnerID; ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7>̾<EFBFBD> ID
|
||||
BYTE byCount; ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
DWORD dwOwnerID; ///< 가격정보를 가진 플레이어 ID
|
||||
BYTE byCount; ///< 가격정보 갯수
|
||||
} TPacketMyshopPricelistHeader;
|
||||
|
||||
/// <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// 개인상점의 단일 아이템에 대한 가격정보
|
||||
typedef struct SItemPriceInfo
|
||||
{
|
||||
DWORD dwVnum; ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> vnum
|
||||
DWORD dwPrice; ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
DWORD dwVnum; ///< 아이템 vnum
|
||||
DWORD dwPrice; ///< 가격
|
||||
} TItemPriceInfo;
|
||||
|
||||
/// <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>̺<EFBFBD>
|
||||
/// 개인상점 아이템 가격정보 리스트 테이블
|
||||
typedef struct SItemPriceListTable
|
||||
{
|
||||
DWORD dwOwnerID; ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7>̾<EFBFBD> ID
|
||||
BYTE byCount; ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD>
|
||||
DWORD dwOwnerID; ///< 가격정보를 가진 플레이어 ID
|
||||
BYTE byCount; ///< 가격정보 리스트의 갯수
|
||||
|
||||
TItemPriceInfo aPriceInfo[SHOP_PRICELIST_MAX_NUM]; ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
|
||||
TItemPriceInfo aPriceInfo[SHOP_PRICELIST_MAX_NUM]; ///< 가격정보 리스트
|
||||
} TItemPriceListTable;
|
||||
|
||||
typedef struct
|
||||
@ -1306,24 +1237,15 @@ typedef struct
|
||||
LONG lDuration;
|
||||
} TPacketBlockChat;
|
||||
|
||||
// PCBANG_IP_LIST
|
||||
typedef struct SPacketPCBangIP
|
||||
{
|
||||
DWORD id;
|
||||
DWORD ip;
|
||||
} TPacketPCBangIP;
|
||||
// END_OF_PCBANG_IP_LIST
|
||||
|
||||
|
||||
//ADMIN_MANAGER
|
||||
typedef struct TAdminInfo
|
||||
{
|
||||
DWORD m_ID; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
|
||||
char m_szAccount[32]; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
char m_szName[32]; //ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD>
|
||||
char m_szContactIP[16]; //<EFBFBD><EFBFBD><EFBFBD>پ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
char m_szServerIP[16]; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
DWORD m_Authority; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
DWORD m_ID; //고유ID
|
||||
char m_szAccount[32]; //계정
|
||||
char m_szName[32]; //캐릭터이름
|
||||
char m_szContactIP[16]; //접근아이피
|
||||
char m_szServerIP[16]; //서버아이피
|
||||
DWORD m_Authority; //권한
|
||||
} tAdminInfo;
|
||||
//END_ADMIN_MANAGER
|
||||
|
||||
@ -1344,20 +1266,20 @@ typedef struct SPacketReloadAdmin
|
||||
|
||||
typedef struct TMonarchInfo
|
||||
{
|
||||
DWORD pid[4]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PID
|
||||
int64_t money[4]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
|
||||
char name[4][32]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD>
|
||||
char date[4][32]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>¥
|
||||
DWORD pid[4]; // 군주의 PID
|
||||
int64_t money[4]; // 군주의 별개 돈
|
||||
char name[4][32]; // 군주의 이름
|
||||
char date[4][32]; // 군주 등록 날짜
|
||||
} MonarchInfo;
|
||||
|
||||
typedef struct TMonarchElectionInfo
|
||||
{
|
||||
DWORD pid; // <EFBFBD><EFBFBD>ǥ <20>ѻ<EFBFBD><D1BB><EFBFBD> PID
|
||||
DWORD selectedpid; // <EFBFBD><EFBFBD>ǥ <20><><EFBFBD><EFBFBD> PID ( <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> )
|
||||
char date[32]; // <EFBFBD><EFBFBD>ǥ <20><>¥
|
||||
DWORD pid; // 투표 한사람 PID
|
||||
DWORD selectedpid; // 투표 당한 PID ( 군주 참가자 )
|
||||
char date[32]; // 투표 날짜
|
||||
} MonarchElectionInfo;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>⸶<EFBFBD><E2B8B6>
|
||||
// 군주 출마자
|
||||
typedef struct tMonarchCandidacy
|
||||
{
|
||||
DWORD pid;
|
||||
@ -1379,26 +1301,6 @@ typedef struct tChangeMonarchLordACK
|
||||
char szDate[32];
|
||||
} TPacketChangeMonarchLordACK;
|
||||
|
||||
// Block Country Ip
|
||||
typedef struct tBlockCountryIp
|
||||
{
|
||||
DWORD ip_from;
|
||||
DWORD ip_to;
|
||||
} TPacketBlockCountryIp;
|
||||
|
||||
enum EBlockExceptionCommand
|
||||
{
|
||||
BLOCK_EXCEPTION_CMD_ADD = 1,
|
||||
BLOCK_EXCEPTION_CMD_DEL = 2,
|
||||
};
|
||||
|
||||
// Block Exception Account
|
||||
typedef struct tBlockException
|
||||
{
|
||||
BYTE cmd; // 1 == add, 2 == delete
|
||||
char login[LOGIN_MAX_LEN + 1];
|
||||
}TPacketBlockException;
|
||||
|
||||
typedef struct tChangeGuildMaster
|
||||
{
|
||||
DWORD dwGuildID;
|
||||
@ -1429,14 +1331,14 @@ typedef struct tNeedLoginLogInfo
|
||||
DWORD dwPlayerID;
|
||||
} TPacketNeedLoginLogInfo;
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>˸<EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD>Ʈ<EFBFBD><C6AE> <20><>Ŷ <20><><EFBFBD><EFBFBD>
|
||||
//독일 선물 알림 기능 테스트용 패킷 정보
|
||||
typedef struct tItemAwardInformer
|
||||
{
|
||||
char login[LOGIN_MAX_LEN + 1];
|
||||
char command[20]; //<EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD>
|
||||
DWORD vnum; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
char command[20]; //명령어
|
||||
DWORD vnum; //아이템
|
||||
} TPacketItemAwardInfromer;
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˸<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD>
|
||||
// 선물 알림 기능 삭제용 패킷 정보
|
||||
typedef struct tDeleteAwardID
|
||||
{
|
||||
DWORD dwID;
|
||||
|
@ -1,20 +0,0 @@
|
||||
/*********************************************************************
|
||||
* date : 2007.06.07
|
||||
* file : teen_packet.h
|
||||
* author : mhh
|
||||
* description :
|
||||
*/
|
||||
|
||||
#ifndef _teen_packet_h_
|
||||
#define _teen_packet_h_
|
||||
|
||||
#define HEADER_GT_LOGIN 0x10
|
||||
#define HEADER_GT_LOGOUT 0x11
|
||||
|
||||
|
||||
#define HEADER_TG_TEEN_NOTICE 0x12
|
||||
#define HEADER_TG_FORCE_LOGOUT 0x13
|
||||
#define HEADER_TG_LOGIN_NOTICE 0x14
|
||||
|
||||
#endif /* _teen_packet_h_ */
|
||||
|
@ -1,3 +1,6 @@
|
||||
#ifndef __INC_METIN2_UTILS_H__
|
||||
#define __INC_METIN2_UTILS_H__
|
||||
|
||||
/*----- atoi function -----*/
|
||||
inline bool str_to_number (bool& out, const char *in)
|
||||
{
|
||||
@ -72,3 +75,5 @@ inline bool str_to_number (float& out, const char *in)
|
||||
}
|
||||
|
||||
/*----- atoi function -----*/
|
||||
|
||||
#endif
|
||||
|
@ -10,6 +10,6 @@
|
||||
#define __COMPILER__ "@METIN2_COMPILER@"
|
||||
#define __CPU_TARGET__ "@METIN2_CPU_TARGET@"
|
||||
|
||||
void WriteVersion(std::ostream& out);
|
||||
void WriteVersion();
|
||||
|
||||
#endif
|
||||
|
@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.8)
|
||||
project(db CXX)
|
||||
|
||||
file(GLOB_RECURSE sources
|
||||
src/*.cpp src/*.h
|
||||
src/*.cpp src/*.h
|
||||
)
|
||||
|
||||
# Add the src directory to the include path
|
||||
@ -11,18 +11,25 @@ include_directories(src)
|
||||
|
||||
add_executable(${PROJECT_NAME} ${sources})
|
||||
|
||||
# Set the default log level based on the build type
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
message(STATUS "This is a debug build. Log level will be set to 'trace' for target '${PROJECT_NAME}'.")
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_TRACE)
|
||||
endif()
|
||||
|
||||
# Treat char variables as signed, especially useful for ARM builds
|
||||
target_compile_options(${PROJECT_NAME} PUBLIC -fsigned-char)
|
||||
|
||||
# Find dependencies
|
||||
|
||||
#
|
||||
# vcpkg dependencies
|
||||
#
|
||||
|
||||
# Boost
|
||||
find_package(Boost COMPONENTS system REQUIRED)
|
||||
target_link_libraries (${PROJECT_NAME} PRIVATE Boost::boost Boost::system)
|
||||
|
||||
# Pthreads
|
||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||
find_package(Threads REQUIRED)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE Threads::Threads)
|
||||
|
||||
# LibBSD
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE bsd)
|
||||
|
||||
# Libevent
|
||||
find_package(Libevent CONFIG REQUIRED)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE libevent::core libevent::extra libevent::pthreads)
|
||||
@ -31,4 +38,16 @@ target_link_libraries(${PROJECT_NAME} PRIVATE libevent::core libevent::extra lib
|
||||
find_package(effolkronium_random CONFIG REQUIRED)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE effolkronium_random)
|
||||
|
||||
#
|
||||
# System-provided dependencies
|
||||
#
|
||||
|
||||
# Pthreads
|
||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||
find_package(Threads REQUIRED)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE Threads::Threads)
|
||||
|
||||
# LibBSD
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE bsd)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE libpoly libsql libthecore)
|
||||
|
@ -135,7 +135,7 @@ void AuctionManager::LoadAuctionItem()
|
||||
}
|
||||
int rows;
|
||||
|
||||
if ((rows = mysql_num_rows(res)) <= 0) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if ((rows = mysql_num_rows(res)) <= 0) // 데이터 없음
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -182,7 +182,7 @@ void AuctionManager::LoadAuctionInfo()
|
||||
}
|
||||
int rows;
|
||||
|
||||
if ((rows = mysql_num_rows(res)) <= 0) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if ((rows = mysql_num_rows(res)) <= 0) // 데이터 없음
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -226,7 +226,7 @@ void AuctionManager::LoadSaleInfo()
|
||||
}
|
||||
int rows;
|
||||
|
||||
if ((rows = mysql_num_rows(res)) <= 0) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if ((rows = mysql_num_rows(res)) <= 0) // 데이터 없음
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -269,7 +269,7 @@ void AuctionManager::LoadWishInfo()
|
||||
}
|
||||
int rows;
|
||||
|
||||
if ((rows = mysql_num_rows(res)) <= 0) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if ((rows = mysql_num_rows(res)) <= 0) // 데이터 없음
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -311,7 +311,7 @@ void AuctionManager::LoadMyBidInfo ()
|
||||
}
|
||||
int rows;
|
||||
|
||||
if ((rows = mysql_num_rows(res)) <= 0) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if ((rows = mysql_num_rows(res)) <= 0) // 데이터 없음
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -406,13 +406,13 @@ AuctionResult AuctionManager::EnrollInAuction(CItemCache* item_cache, TAuctionIt
|
||||
CItemCache* c = GetItemCache (item_info.item_id);
|
||||
if (c != NULL)
|
||||
{
|
||||
sys_err ("item id : %d is already in AuctionManager", item_info.item_id);
|
||||
SPDLOG_ERROR("item id : {} is already in AuctionManager", item_info.item_id);
|
||||
return AUCTION_FAIL;
|
||||
}
|
||||
|
||||
if (!Auction.InsertItemInfo (&item_info))
|
||||
{
|
||||
sys_err ("item id : %d is already in AuctionBoard", item_info.item_id);
|
||||
SPDLOG_ERROR("item id : {} is already in AuctionBoard", item_info.item_id);
|
||||
return AUCTION_FAIL;
|
||||
}
|
||||
|
||||
@ -429,19 +429,19 @@ AuctionResult AuctionManager::EnrollInSale(CItemCache* item_cache, TSaleItemInfo
|
||||
CItemCache* c = GetItemCache (item_info.item_id);
|
||||
if (c != NULL)
|
||||
{
|
||||
sys_err ("item id : %d is already in AuctionManager", item_info.item_id);
|
||||
SPDLOG_ERROR("item id : {} is already in AuctionManager", item_info.item_id);
|
||||
return AUCTION_FAIL;
|
||||
}
|
||||
|
||||
if (!Wish.GetItemInfoCache (WishBoard::Key (item_info.item_num, item_info.wisher_id)))
|
||||
{
|
||||
sys_err ("item_num : %d, wisher_id : %d is not in wish auction.", item_info.item_num, item_info.wisher_id);
|
||||
SPDLOG_ERROR("item_num : {}, wisher_id : {} is not in wish auction.", item_info.item_num, item_info.wisher_id);
|
||||
return AUCTION_FAIL;
|
||||
}
|
||||
|
||||
if (!Sale.InsertItemInfo (&item_info))
|
||||
{
|
||||
sys_err ("item id : %d is already in SaleBoard", item_info.item_id);
|
||||
SPDLOG_ERROR("item id : {} is already in SaleBoard", item_info.item_id);
|
||||
return AUCTION_FAIL;
|
||||
}
|
||||
|
||||
@ -457,7 +457,7 @@ AuctionResult AuctionManager::EnrollInWish(TWishItemInfo &item_info)
|
||||
{
|
||||
if (!Wish.InsertItemInfo (&item_info))
|
||||
{
|
||||
sys_err ("wisher_id : %d, item_num : %d is already in WishBoard", item_info.offer_id, item_info.item_num);
|
||||
SPDLOG_ERROR("wisher_id : {}, item_num : {} is already in WishBoard", item_info.offer_id, item_info.item_num);
|
||||
return AUCTION_FAIL;
|
||||
}
|
||||
|
||||
@ -469,7 +469,7 @@ AuctionResult AuctionManager::Bid(DWORD bidder_id, const char* bidder_name, DWOR
|
||||
CItemCache* c = GetItemCache (item_id);
|
||||
if (c == NULL)
|
||||
{
|
||||
sys_err ("item id : %d does not exist in auction.", item_id);
|
||||
SPDLOG_ERROR("item id : {} does not exist in auction.", item_id);
|
||||
return AUCTION_FAIL;
|
||||
}
|
||||
|
||||
@ -506,7 +506,7 @@ AuctionResult AuctionManager::Impur(DWORD purchaser_id, const char* purchaser_na
|
||||
CItemCache* c = GetItemCache (item_id);
|
||||
if (c == NULL)
|
||||
{
|
||||
sys_err ("item id : %d does not exist in auction.", item_id);
|
||||
SPDLOG_ERROR("item id : {} does not exist in auction.", item_id);
|
||||
return AUCTION_FAIL;
|
||||
}
|
||||
|
||||
@ -518,7 +518,7 @@ AuctionResult AuctionManager::Impur(DWORD purchaser_id, const char* purchaser_na
|
||||
return AUCTION_EXPIRED;
|
||||
}
|
||||
|
||||
// <EFBFBD>ﱸ <20>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>, <20><><EFBFBD>Ŵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// 즉구 해버렸으므로, 경매는 끝났다.
|
||||
item_info->expired_time = 0;
|
||||
item_info->bidder_id = purchaser_id;
|
||||
item_info->set_bidder_name (purchaser_name);
|
||||
@ -533,14 +533,14 @@ AuctionResult AuctionManager::GetAuctionedItem (DWORD actor_id, DWORD item_id, T
|
||||
CItemCache* c = GetItemCache (item_id);
|
||||
if (c == NULL)
|
||||
{
|
||||
sys_err ("item id : %d does not exist in auction.", item_id);
|
||||
SPDLOG_ERROR("item id : {} does not exist in auction.", item_id);
|
||||
return AUCTION_FAIL;
|
||||
}
|
||||
|
||||
CAuctionItemInfoCache* item_info_cache = Auction.GetItemInfoCache(item_id);
|
||||
if (item_info_cache == NULL)
|
||||
{
|
||||
sys_err ("how can this accident happen?");
|
||||
SPDLOG_ERROR("how can this accident happen?");
|
||||
return AUCTION_FAIL;
|
||||
}
|
||||
|
||||
@ -561,14 +561,14 @@ AuctionResult AuctionManager::BuySoldItem (DWORD actor_id, DWORD item_id, TPlaye
|
||||
CItemCache* c = GetItemCache (item_id);
|
||||
if (c == NULL)
|
||||
{
|
||||
sys_err ("item id : %d does not exist in auction.", item_id);
|
||||
SPDLOG_ERROR("item id : {} does not exist in auction.", item_id);
|
||||
return AUCTION_FAIL;
|
||||
}
|
||||
|
||||
CSaleItemInfoCache* item_info_cache = Sale.GetItemInfoCache(item_id);
|
||||
if (item_info_cache == NULL)
|
||||
{
|
||||
sys_err ("how can this accident happen?");
|
||||
SPDLOG_ERROR("how can this accident happen?");
|
||||
return AUCTION_FAIL;
|
||||
}
|
||||
|
||||
@ -584,14 +584,14 @@ AuctionResult AuctionManager::CancelAuction (DWORD actor_id, DWORD item_id, TPla
|
||||
CItemCache* c = GetItemCache (item_id);
|
||||
if (c == NULL)
|
||||
{
|
||||
sys_err ("item id : %d does not exist in auction.", item_id);
|
||||
SPDLOG_ERROR("item id : {} does not exist in auction.", item_id);
|
||||
return AUCTION_FAIL;
|
||||
}
|
||||
|
||||
CAuctionItemInfoCache* item_info_cache = Auction.GetItemInfoCache(item_id);
|
||||
if (item_info_cache == NULL)
|
||||
{
|
||||
sys_err ("how can this accident happen?");
|
||||
SPDLOG_ERROR("how can this accident happen?");
|
||||
return AUCTION_FAIL;
|
||||
}
|
||||
TAuctionItemInfo* item_info = item_info_cache->Get(false);
|
||||
@ -618,14 +618,14 @@ AuctionResult AuctionManager::CancelSale (DWORD actor_id, DWORD item_id, TPlayer
|
||||
CItemCache* c = GetItemCache (item_id);
|
||||
if (c == NULL)
|
||||
{
|
||||
sys_err ("item id : %d does not exist in auction.", item_id);
|
||||
SPDLOG_ERROR("item id : {} does not exist in auction.", item_id);
|
||||
return AUCTION_FAIL;
|
||||
}
|
||||
|
||||
CSaleItemInfoCache* item_info_cache = Sale.GetItemInfoCache(item_id);
|
||||
if (item_info_cache == NULL)
|
||||
{
|
||||
sys_err ("how can this accident happen?");
|
||||
SPDLOG_ERROR("how can this accident happen?");
|
||||
return AUCTION_FAIL;
|
||||
}
|
||||
TSaleItemInfo* item_info = item_info_cache->Get(false);
|
||||
@ -639,13 +639,13 @@ AuctionResult AuctionManager::DeleteAuctionItem (DWORD actor_id, DWORD item_id)
|
||||
{
|
||||
if (DeleteItemCache (item_id) == false)
|
||||
{
|
||||
sys_err ("item id : %d does not exist in auction.", item_id);
|
||||
SPDLOG_ERROR("item id : {} does not exist in auction.", item_id);
|
||||
return AUCTION_FAIL;
|
||||
}
|
||||
|
||||
if (Auction.DeleteItemInfoCache (item_id) == NULL)
|
||||
{
|
||||
sys_err ("how can this accident happen?");
|
||||
SPDLOG_ERROR("how can this accident happen?");
|
||||
return AUCTION_FAIL;
|
||||
}
|
||||
return AUCTION_SUCCESS;
|
||||
@ -655,13 +655,13 @@ AuctionResult AuctionManager::DeleteSaleItem (DWORD actor_id, DWORD item_id)
|
||||
{
|
||||
if (DeleteItemCache (item_id) == false)
|
||||
{
|
||||
sys_err ("item id : %d does not exist in auction.", item_id);
|
||||
SPDLOG_ERROR("item id : {} does not exist in auction.", item_id);
|
||||
return AUCTION_FAIL;
|
||||
}
|
||||
|
||||
if (Sale.DeleteItemInfoCache (item_id) == NULL)
|
||||
{
|
||||
sys_err ("how can this accident happen?");
|
||||
SPDLOG_ERROR("how can this accident happen?");
|
||||
return AUCTION_FAIL;
|
||||
}
|
||||
return AUCTION_SUCCESS;
|
||||
@ -672,7 +672,7 @@ AuctionResult AuctionManager::ReBid(DWORD bidder_id, const char* bidder_name, DW
|
||||
CItemCache* c = GetItemCache (item_id);
|
||||
if (c == NULL)
|
||||
{
|
||||
sys_err ("item id : %d does not exist in auction.", item_id);
|
||||
SPDLOG_ERROR("item id : {} does not exist in auction.", item_id);
|
||||
return AUCTION_FAIL;
|
||||
}
|
||||
|
||||
|
@ -243,7 +243,7 @@ private:
|
||||
TItemInfoCacheMap item_cache_map;
|
||||
};
|
||||
|
||||
// pc<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD> <20><><EFBFBD>Ÿ<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
// pc가 입찰에 참여했던 경매를 관리.
|
||||
class MyBidBoard
|
||||
{
|
||||
public:
|
||||
@ -255,7 +255,7 @@ public:
|
||||
|
||||
int GetMoney (DWORD player_id, DWORD item_id);
|
||||
bool Delete (DWORD player_id, DWORD item_id);
|
||||
// <EFBFBD>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// 이미 있으면 덮어 씌운다.
|
||||
void Insert (DWORD player_id, DWORD item_id, int money);
|
||||
|
||||
private:
|
||||
@ -267,11 +267,11 @@ private:
|
||||
class AuctionManager : public singleton <AuctionManager>
|
||||
{
|
||||
private:
|
||||
// auction<EFBFBD><EFBFBD> <20><><EFBFBD>ϵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۵<EFBFBD>.
|
||||
// auction에 등록된 아이템들.
|
||||
typedef std::unordered_map<DWORD, CItemCache *> TItemCacheMap;
|
||||
TItemCacheMap auction_item_cache_map;
|
||||
|
||||
// auction<EFBFBD><EFBFBD> <20><><EFBFBD>ϵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD> <20><><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>͵<EFBFBD>
|
||||
// auction에 등록된 정보 중 가격, 등등 아이템 테이블에 포함되지 않는 정보들을 관리하는 것들
|
||||
AuctionBoard Auction;
|
||||
SaleBoard Sale;
|
||||
WishBoard Wish;
|
||||
|
@ -1,214 +0,0 @@
|
||||
// vim:ts=4 sw=4
|
||||
/*********************************************************************
|
||||
* date : 2007.05.31
|
||||
* file : BlockCountry.cpp
|
||||
* author : mhh
|
||||
* description :
|
||||
*/
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "BlockCountry.h"
|
||||
|
||||
#include "DBManager.h"
|
||||
|
||||
#define DO_ALL_BLOCK_IP(iter) \
|
||||
for ((iter) = m_block_ip.begin(); (iter) != m_block_ip.end(); ++(iter))
|
||||
|
||||
#define DO_ALL_BLOCK_EXCEPTION(iter) \
|
||||
for ((iter) = m_block_exception.begin(); (iter) != m_block_exception.end(); ++(iter))
|
||||
|
||||
CBlockCountry::CBlockCountry()
|
||||
{
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
CBlockCountry::~CBlockCountry()
|
||||
{
|
||||
BLOCK_IP *block_ip;
|
||||
BLOCK_IP_VECTOR::iterator iter;
|
||||
|
||||
DO_ALL_BLOCK_IP(iter)
|
||||
{
|
||||
block_ip = *iter;
|
||||
delete block_ip;
|
||||
}
|
||||
|
||||
m_block_ip.clear();
|
||||
}
|
||||
|
||||
|
||||
bool CBlockCountry::Load()
|
||||
{
|
||||
// load blocked ip
|
||||
{
|
||||
char szQuery[256];
|
||||
snprintf(szQuery, sizeof(szQuery), "SELECT IP_FROM, IP_TO, COUNTRY_NAME FROM iptocountry");
|
||||
SQLMsg * pMsg = CDBManager::instance().DirectQuery(szQuery, SQL_ACCOUNT);
|
||||
|
||||
if (pMsg->Get()->uiNumRows == 0)
|
||||
{
|
||||
sys_err(" DirectQuery failed(%s)", szQuery);
|
||||
delete pMsg;
|
||||
return false;
|
||||
}
|
||||
|
||||
MYSQL_ROW row;
|
||||
for (int n = 0; (row = mysql_fetch_row(pMsg->Get()->pSQLResult)) != NULL; ++n)
|
||||
{
|
||||
BLOCK_IP *block_ip = new BLOCK_IP;
|
||||
block_ip->ip_from = strtoul(row[0], NULL, 10);
|
||||
block_ip->ip_to = strtoul(row[1], NULL, 10);
|
||||
strlcpy(block_ip->country, row[2], sizeof(block_ip->country));
|
||||
|
||||
m_block_ip.push_back(block_ip);
|
||||
sys_log(0, "BLOCKED_IP : %u - %u", block_ip->ip_from, block_ip->ip_to);
|
||||
|
||||
}
|
||||
delete pMsg;
|
||||
}
|
||||
|
||||
|
||||
// load block exception account
|
||||
{
|
||||
char szQuery[256];
|
||||
snprintf(szQuery, sizeof(szQuery), "SELECT login FROM block_exception");
|
||||
SQLMsg * pMsg = CDBManager::instance().DirectQuery(szQuery, SQL_ACCOUNT);
|
||||
|
||||
if (pMsg->Get()->uiNumRows == 0)
|
||||
{
|
||||
sys_err(" DirectQuery failed(%s)", szQuery);
|
||||
delete pMsg;
|
||||
return true;
|
||||
}
|
||||
|
||||
MYSQL_ROW row;
|
||||
for (int n = 0; (row = mysql_fetch_row(pMsg->Get()->pSQLResult)) != NULL; ++n)
|
||||
{
|
||||
const char *login = row[0];
|
||||
|
||||
m_block_exception.push_back(strdup(login));
|
||||
|
||||
sys_log(0, "BLOCK_EXCEPTION = %s", login);
|
||||
|
||||
}
|
||||
delete pMsg;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CBlockCountry::IsBlockedCountryIp(const char *user_ip)
|
||||
{
|
||||
BLOCK_IP* block_ip;
|
||||
BLOCK_IP_VECTOR::iterator iter;
|
||||
struct in_addr st_addr;
|
||||
|
||||
#ifndef __WIN32__
|
||||
if (0 == inet_aton(user_ip, &st_addr))
|
||||
#else
|
||||
unsigned int in_address;
|
||||
in_address = inet_addr(user_ip);
|
||||
st_addr.s_addr = in_address;
|
||||
if (INADDR_NONE == in_address)
|
||||
#endif
|
||||
return true; // <20><><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD>ó<EFBFBD><C3B3>
|
||||
|
||||
DO_ALL_BLOCK_IP(iter)
|
||||
{
|
||||
block_ip = *iter;
|
||||
|
||||
if (st_addr.s_addr >= block_ip->ip_from && st_addr.s_addr <= block_ip->ip_to)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void CBlockCountry::SendBlockedCountryIp(CPeer *peer)
|
||||
{
|
||||
sys_log(0, "SendBlockedCountryIp start");
|
||||
BLOCK_IP *block_ip;
|
||||
BLOCK_IP_VECTOR::iterator iter;
|
||||
TPacketBlockCountryIp packet;
|
||||
|
||||
DO_ALL_BLOCK_IP(iter)
|
||||
{
|
||||
block_ip = *iter;
|
||||
|
||||
packet.ip_from = block_ip->ip_from;
|
||||
packet.ip_to = block_ip->ip_to;
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_BLOCK_COUNTRY_IP, 0, sizeof(TPacketBlockCountryIp));
|
||||
peer->Encode(&packet, sizeof(packet));
|
||||
}
|
||||
|
||||
sys_log(0, "[DONE] CBlockCountry::SendBlockedCountryIp() : count = %d",
|
||||
m_block_ip.size());
|
||||
sys_log(0, "SendBlockedCountryIp end");
|
||||
} /* end of CBlockCountry::SendBlockedCountryIp() */
|
||||
|
||||
|
||||
void CBlockCountry::SendBlockException(CPeer *peer)
|
||||
{
|
||||
BLOCK_EXCEPTION_VECTOR::iterator iter;
|
||||
|
||||
DO_ALL_BLOCK_EXCEPTION(iter)
|
||||
{
|
||||
const char *login = *iter;
|
||||
|
||||
this->SendBlockExceptionOne(peer, login, BLOCK_EXCEPTION_CMD_ADD);
|
||||
}
|
||||
} /* end of CBlockCountry::SendBlockException() */
|
||||
|
||||
void CBlockCountry::SendBlockExceptionOne(CPeer *peer, const char *login, BYTE cmd)
|
||||
{
|
||||
if (NULL == peer || NULL == login)
|
||||
return;
|
||||
|
||||
if (BLOCK_EXCEPTION_CMD_ADD != cmd && BLOCK_EXCEPTION_CMD_DEL != cmd)
|
||||
return;
|
||||
|
||||
TPacketBlockException packet;
|
||||
|
||||
packet.cmd = cmd;
|
||||
strlcpy(packet.login, login, sizeof(packet.login));
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_BLOCK_EXCEPTION, 0, sizeof(TPacketBlockException));
|
||||
peer->Encode(&packet, sizeof(packet));
|
||||
}
|
||||
|
||||
void CBlockCountry::AddBlockException(const char *login)
|
||||
{
|
||||
BLOCK_EXCEPTION_VECTOR::iterator iter;
|
||||
DO_ALL_BLOCK_EXCEPTION(iter)
|
||||
{
|
||||
const char *saved_login = *iter;
|
||||
|
||||
if (!strcmp(saved_login, login))
|
||||
return;
|
||||
}
|
||||
|
||||
m_block_exception.push_back(strdup(login));
|
||||
return;
|
||||
}
|
||||
|
||||
void CBlockCountry::DelBlockException(const char *login)
|
||||
{
|
||||
BLOCK_EXCEPTION_VECTOR::iterator iter;
|
||||
DO_ALL_BLOCK_EXCEPTION(iter)
|
||||
{
|
||||
const char *saved_login = *iter;
|
||||
|
||||
if (!strcmp(saved_login, login))
|
||||
{
|
||||
::free((void*)saved_login);
|
||||
m_block_exception.erase(iter);
|
||||
return;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -1,44 +0,0 @@
|
||||
// vim: ts=4 sw=4
|
||||
// Date : 2007.05.31
|
||||
// File : BlockCountry.h
|
||||
// Author : mhh
|
||||
// Description :
|
||||
|
||||
#ifndef __INC_METIN_II_BLOCKCOUNTRY_H__
|
||||
#define __INC_METIN_II_BLOCKCOUNTRY_H__
|
||||
|
||||
#include "Peer.h"
|
||||
|
||||
#define MAX_COUNTRY_NAME_LENGTH 50
|
||||
|
||||
class CBlockCountry : public singleton<CBlockCountry>
|
||||
{
|
||||
private:
|
||||
struct BLOCK_IP
|
||||
{
|
||||
DWORD ip_from;
|
||||
DWORD ip_to;
|
||||
char country[MAX_COUNTRY_NAME_LENGTH + 1];
|
||||
};
|
||||
|
||||
typedef std::vector<BLOCK_IP*> BLOCK_IP_VECTOR;
|
||||
BLOCK_IP_VECTOR m_block_ip;
|
||||
|
||||
typedef std::vector<const char*> BLOCK_EXCEPTION_VECTOR;
|
||||
BLOCK_EXCEPTION_VECTOR m_block_exception;
|
||||
|
||||
public:
|
||||
CBlockCountry();
|
||||
~CBlockCountry();
|
||||
|
||||
public:
|
||||
bool Load();
|
||||
bool IsBlockedCountryIp(const char *user_ip);
|
||||
void SendBlockedCountryIp(CPeer *peer);
|
||||
void SendBlockException(CPeer *peer);
|
||||
void SendBlockExceptionOne(CPeer *peer, const char *login, BYTE cmd);
|
||||
void AddBlockException(const char *login);
|
||||
void DelBlockException(const char *login);
|
||||
};
|
||||
|
||||
#endif
|
@ -29,12 +29,12 @@ CItemCache::~CItemCache()
|
||||
{
|
||||
}
|
||||
|
||||
// <EFBFBD>̰<EFBFBD> <20>̻<EFBFBD><CCBB>ѵ<EFBFBD>...
|
||||
// Delete<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Cache<68><65> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20>ϴ°<CFB4> <20>ƴѰ<C6B4>???
|
||||
// <EFBFBD>ٵ<EFBFBD> Cache<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>κ<EFBFBD><CEBA><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
// <EFBFBD><EFBFBD> ã<><C3A3> <20>ǰ<EFBFBD>?
|
||||
// <EFBFBD>̷<EFBFBD><EFBFBD><EFBFBD> <20>س<EFBFBD><D8B3><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>...
|
||||
// <EFBFBD>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD>... Ȯ<>λ<EFBFBD><CEBB><EFBFBD>??????
|
||||
// 이거 이상한데...
|
||||
// Delete를 했으면, Cache도 해제해야 하는것 아닌가???
|
||||
// 근데 Cache를 해제하는 부분이 없어.
|
||||
// 못 찾은 건가?
|
||||
// 이렇게 해놓으면, 계속 시간이 될 때마다 아이템을 계속 지워...
|
||||
// 이미 사라진 아이템인데... 확인사살??????
|
||||
// fixme
|
||||
// by rtsummit
|
||||
void CItemCache::Delete()
|
||||
@ -44,8 +44,7 @@ void CItemCache::Delete()
|
||||
|
||||
//char szQuery[QUERY_MAX_LEN];
|
||||
//szQuery[QUERY_MAX_LEN] = '\0';
|
||||
if (g_test_server)
|
||||
sys_log(0, "ItemCache::Delete : DELETE %u", m_data.id);
|
||||
SPDLOG_TRACE("ItemCache::Delete : DELETE {}", m_data.id);
|
||||
|
||||
m_data.vnum = 0;
|
||||
m_bNeedQuery = true;
|
||||
@ -53,19 +52,18 @@ void CItemCache::Delete()
|
||||
OnFlush();
|
||||
|
||||
//m_bNeedQuery = false;
|
||||
//m_lastUpdateTime = time(0) - m_expireTime; // <EFBFBD>ٷ<EFBFBD> Ÿ<>Ӿƿ<D3BE> <20>ǵ<EFBFBD><C7B5><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
//m_lastUpdateTime = time(0) - m_expireTime; // 바로 타임아웃 되도록 하자.
|
||||
}
|
||||
|
||||
void CItemCache::OnFlush()
|
||||
{
|
||||
if (m_data.vnum == 0) // vnum<EFBFBD><EFBFBD> 0<≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD> ǥ<>õ<EFBFBD> <20><><EFBFBD>̴<EFBFBD>.
|
||||
if (m_data.vnum == 0) // vnum이 0이면 삭제하라고 표시된 것이다.
|
||||
{
|
||||
char szQuery[QUERY_MAX_LEN];
|
||||
snprintf(szQuery, sizeof(szQuery), "DELETE FROM item%s WHERE id=%u", GetTablePostfix(), m_data.id);
|
||||
CDBManager::instance().ReturnQuery(szQuery, QID_ITEM_DESTROY, 0, NULL);
|
||||
|
||||
if (g_test_server)
|
||||
sys_log(0, "ItemCache::Flush : DELETE %u %s", m_data.id, szQuery);
|
||||
SPDLOG_TRACE("ItemCache::Flush : DELETE {} {}", m_data.id, szQuery);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -141,8 +139,7 @@ void CItemCache::OnFlush()
|
||||
char szItemQuery[QUERY_MAX_LEN + QUERY_MAX_LEN + 100];
|
||||
snprintf(szItemQuery, sizeof(szItemQuery), "REPLACE INTO item%s (%s) VALUES(%s)", GetTablePostfix(), szColumns, szValues);
|
||||
|
||||
if (g_test_server)
|
||||
sys_log(0, "ItemCache::Flush :REPLACE (%s)", szItemQuery);
|
||||
SPDLOG_TRACE("ItemCache::Flush :REPLACE ({})", szItemQuery);
|
||||
|
||||
CDBManager::instance().ReturnQuery(szItemQuery, QID_ITEM_SAVE, 0, NULL);
|
||||
|
||||
@ -167,8 +164,7 @@ CPlayerTableCache::~CPlayerTableCache()
|
||||
|
||||
void CPlayerTableCache::OnFlush()
|
||||
{
|
||||
if (g_test_server)
|
||||
sys_log(0, "PlayerTableCache::Flush : %s", m_data.name);
|
||||
SPDLOG_TRACE("PlayerTableCache::Flush : {}", m_data.name);
|
||||
|
||||
char szQuery[QUERY_MAX_LEN];
|
||||
CreatePlayerSaveQuery(szQuery, sizeof(szQuery), &m_data);
|
||||
@ -190,7 +186,7 @@ CItemPriceListTableCache::CItemPriceListTableCache()
|
||||
void CItemPriceListTableCache::UpdateList(const TItemPriceListTable* pUpdateList)
|
||||
{
|
||||
//
|
||||
// <EFBFBD>̹<EFBFBD> ij<>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۰<EFBFBD> <20>ߺ<EFBFBD><DFBA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<><C3A3> <20>ߺ<EFBFBD><DFBA><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> tmpvec <EFBFBD><EFBFBD> <20>ִ´<D6B4>.
|
||||
// 이미 캐싱된 아이템과 중복된 아이템을 찾고 중복되지 않는 이전 정보는 tmpvec 에 넣는다.
|
||||
//
|
||||
|
||||
std::vector<TItemPriceInfo> tmpvec;
|
||||
@ -206,12 +202,12 @@ void CItemPriceListTableCache::UpdateList(const TItemPriceListTable* pUpdateList
|
||||
}
|
||||
|
||||
//
|
||||
// pUpdateList <EFBFBD><EFBFBD> m_data <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> tmpvec <20><> <20>տ<EFBFBD><D5BF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ŭ <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// pUpdateList 를 m_data 에 복사하고 남은 공간을 tmpvec 의 앞에서 부터 남은 만큼 복사한다.
|
||||
//
|
||||
|
||||
if (pUpdateList->byCount > SHOP_PRICELIST_MAX_NUM)
|
||||
{
|
||||
sys_err("Count overflow!");
|
||||
SPDLOG_ERROR("Count overflow!");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -219,7 +215,7 @@ void CItemPriceListTableCache::UpdateList(const TItemPriceListTable* pUpdateList
|
||||
|
||||
memcpy(m_data.aPriceInfo, pUpdateList->aPriceInfo, sizeof(TItemPriceInfo) * pUpdateList->byCount);
|
||||
|
||||
int nDeletedNum; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
int nDeletedNum; // 삭제된 가격정보의 갯수
|
||||
|
||||
if (pUpdateList->byCount < SHOP_PRICELIST_MAX_NUM)
|
||||
{
|
||||
@ -238,8 +234,8 @@ void CItemPriceListTableCache::UpdateList(const TItemPriceListTable* pUpdateList
|
||||
|
||||
m_bNeedQuery = true;
|
||||
|
||||
sys_log(0,
|
||||
"ItemPriceListTableCache::UpdateList : OwnerID[%u] Update [%u] Items, Delete [%u] Items, Total [%u] Items",
|
||||
SPDLOG_DEBUG(
|
||||
"ItemPriceListTableCache::UpdateList : OwnerID[{}] Update [{}] Items, Delete [{}] Items, Total [{}] Items",
|
||||
m_data.dwOwnerID, pUpdateList->byCount, nDeletedNum, m_data.byCount);
|
||||
}
|
||||
|
||||
@ -248,14 +244,14 @@ void CItemPriceListTableCache::OnFlush()
|
||||
char szQuery[QUERY_MAX_LEN];
|
||||
|
||||
//
|
||||
// <EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DB <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// 이 캐시의 소유자에 대한 기존에 DB 에 저장된 아이템 가격정보를 모두 삭제한다.
|
||||
//
|
||||
|
||||
snprintf(szQuery, sizeof(szQuery), "DELETE FROM myshop_pricelist%s WHERE owner_id = %u", GetTablePostfix(), m_data.dwOwnerID);
|
||||
CDBManager::instance().ReturnQuery(szQuery, QID_ITEMPRICE_DESTROY, 0, NULL);
|
||||
|
||||
//
|
||||
// ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> DB <20><> <20><><EFBFBD><EFBFBD>.
|
||||
// 캐시의 내용을 모두 DB 에 쓴다.
|
||||
//
|
||||
|
||||
for (int idx = 0; idx < m_data.byCount; ++idx)
|
||||
@ -266,7 +262,7 @@ void CItemPriceListTableCache::OnFlush()
|
||||
CDBManager::instance().ReturnQuery(szQuery, QID_ITEMPRICE_SAVE, 0, NULL);
|
||||
}
|
||||
|
||||
sys_log(0, "ItemPriceListTableCache::Flush : OwnerID[%u] Update [%u]Items", m_data.dwOwnerID, m_data.byCount);
|
||||
SPDLOG_DEBUG("ItemPriceListTableCache::Flush : OwnerID[{}] Update [{}]Items", m_data.dwOwnerID, m_data.byCount);
|
||||
|
||||
m_bNeedQuery = false;
|
||||
}
|
||||
@ -287,8 +283,7 @@ void CAuctionItemInfoCache::Delete()
|
||||
if (m_data.item_num == 0)
|
||||
return;
|
||||
|
||||
if (g_test_server)
|
||||
sys_log(0, "CAuctionItemInfoCache::Delete : DELETE %u", m_data.item_id);
|
||||
SPDLOG_TRACE("CAuctionItemInfoCache::Delete : DELETE {}", m_data.item_id);
|
||||
|
||||
m_data.item_num = 0;
|
||||
m_bNeedQuery = true;
|
||||
|
@ -29,7 +29,7 @@ class CPlayerTableCache : public cache<TPlayerTable>
|
||||
// MYSHOP_PRICE_LIST
|
||||
/**
|
||||
* @class CItemPriceListTableCache
|
||||
* @brief <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> ij<><C4B3> class
|
||||
* @brief 개인상점의 아이템 가격정보 리스트에 대한 캐시 class
|
||||
* @version 05/06/10 Bang2ni - First release.
|
||||
*/
|
||||
class CItemPriceListTableCache : public cache< TItemPriceListTable >
|
||||
@ -38,20 +38,20 @@ class CItemPriceListTableCache : public cache< TItemPriceListTable >
|
||||
|
||||
/// Constructor
|
||||
/**
|
||||
* ij<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
* 캐시 만료 시간을 설정한다.
|
||||
*/
|
||||
CItemPriceListTableCache(void);
|
||||
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
||||
/// 리스트 갱신
|
||||
/**
|
||||
* @param [in] pUpdateList <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
|
||||
* @param [in] pUpdateList 갱신할 리스트
|
||||
*
|
||||
* ij<EFBFBD>õ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> á<><C3A1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
* 캐시된 가격정보를 갱신한다.
|
||||
* 가격정보 리스트가 가득 찼을 경우 기존에 캐싱된 정보들을 뒤에서 부터 삭제한다.
|
||||
*/
|
||||
void UpdateList(const TItemPriceListTable* pUpdateList);
|
||||
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DB <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// 가격정보를 DB 에 기록한다.
|
||||
virtual void OnFlush(void);
|
||||
|
||||
private:
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -48,10 +48,10 @@ class CClientManager : public singleton<CClientManager>
|
||||
typedef std::unordered_map<short, BYTE> TChannelStatusMap;
|
||||
|
||||
// MYSHOP_PRICE_LIST
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>û <20><><EFBFBD><EFBFBD>
|
||||
/// 아이템 가격정보 리스트 요청 정보
|
||||
/**
|
||||
* first: Peer handle
|
||||
* second: <EFBFBD><EFBFBD>û<EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7>̾<EFBFBD><CCBE><EFBFBD> ID
|
||||
* second: 요청한 플레이어의 ID
|
||||
*/
|
||||
typedef std::pair< DWORD, DWORD > TItemPricelistReqInfo;
|
||||
// END_OF_MYSHOP_PRICE_LIST
|
||||
@ -77,7 +77,7 @@ class CClientManager : public singleton<CClientManager>
|
||||
pAccountTable = NULL;
|
||||
player_id = dwPID;
|
||||
};
|
||||
//<EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//독일선물기능용 생성자
|
||||
ClientHandleInfo(DWORD argHandle, DWORD dwPID, DWORD accountId)
|
||||
{
|
||||
dwHandle = argHandle;
|
||||
@ -116,7 +116,7 @@ class CClientManager : public singleton<CClientManager>
|
||||
void SetChinaEventServer(bool flag) { m_bChinaEventServer = flag; }
|
||||
bool IsChinaEventServer() { return m_bChinaEventServer; }
|
||||
|
||||
DWORD GetUserCount(); // <EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
DWORD GetUserCount(); // 접속된 사용자 수를 리턴 한다.
|
||||
|
||||
void SendAllGuildSkillRechargePacket();
|
||||
void SendTime();
|
||||
@ -136,23 +136,23 @@ class CClientManager : public singleton<CClientManager>
|
||||
void UpdateItemCache();
|
||||
|
||||
// MYSHOP_PRICE_LIST
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ ij<>ø<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>.
|
||||
/// 가격정보 리스트 캐시를 가져온다.
|
||||
/**
|
||||
* @param [in] dwID <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.(<28>÷<EFBFBD><C3B7>̾<EFBFBD> ID)
|
||||
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param [in] dwID 가격정보 리스트의 소유자.(플레이어 ID)
|
||||
* @return 가격정보 리스트 캐시의 포인터
|
||||
*/
|
||||
CItemPriceListTableCache* GetItemPriceListCache(DWORD dwID);
|
||||
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ ij<>ø<EFBFBD> <20>ִ´<D6B4>.
|
||||
/// 가격정보 리스트 캐시를 넣는다.
|
||||
/**
|
||||
* @param [in] pItemPriceList ij<EFBFBD>ÿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
|
||||
* @param [in] pItemPriceList 캐시에 넣을 아이템 가격정보 리스트
|
||||
*
|
||||
* ij<EFBFBD>ð<EFBFBD> <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Update <EFBFBD><EFBFBD> <20>ƴ<EFBFBD> replace <EFBFBD>Ѵ<EFBFBD>.
|
||||
* 캐시가 이미 있으면 Update 가 아닌 replace 한다.
|
||||
*/
|
||||
void PutItemPriceListCache(const TItemPriceListTable* pItemPriceList);
|
||||
|
||||
|
||||
/// Flush <EFBFBD>ð<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ ij<>ø<EFBFBD> Flush <20><><EFBFBD>ְ<EFBFBD> ij<>ÿ<EFBFBD><C3BF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// Flush 시간이 만료된 아이템 가격정보 리스트 캐시를 Flush 해주고 캐시에서 삭제한다.
|
||||
void UpdateItemPriceListCache(void);
|
||||
// END_OF_MYSHOP_PRICE_LIST
|
||||
|
||||
@ -170,8 +170,8 @@ class CClientManager : public singleton<CClientManager>
|
||||
|
||||
void SendNotice(const char * c_pszFormat, ...);
|
||||
|
||||
std::string GetCommand(char* str); //<EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ɾ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
|
||||
void ItemAward(CPeer * peer, char* login); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
std::string GetCommand(char* str); //독일선물기능에서 명령어 얻는 함수
|
||||
void ItemAward(CPeer * peer, char* login); //독일 선물 기능
|
||||
|
||||
CPeer * AddPeer(bufferevent* bufev, sockaddr* addr);
|
||||
void RemovePeer(CPeer * pPeer);
|
||||
@ -199,9 +199,9 @@ class CClientManager : public singleton<CClientManager>
|
||||
bool InitializeObjectTable();
|
||||
bool InitializeMonarch();
|
||||
|
||||
// mob_proto.txt, item_proto.txt<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> mob_proto, item_proto<EFBFBD><EFBFBD> real db<EFBFBD><EFBFBD> <20>ݿ<EFBFBD>.
|
||||
// item_proto, mob_proto<EFBFBD><EFBFBD> db<EFBFBD><EFBFBD> <20>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD> <20>ʾƵ<CABE>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ư<EFBFBD><C6B0>µ<EFBFBD><C2B5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
||||
// <EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EEBFA1> db<EFBFBD><EFBFBD> item_proto, mob_proto<EFBFBD><EFBFBD> <20>о<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DFBB>Ѵ<EFBFBD>.
|
||||
// mob_proto.txt, item_proto.txt에서 읽은 mob_proto, item_proto를 real db에 반영.
|
||||
// item_proto, mob_proto를 db에 반영하지 않아도, 게임 돌아가는데는 문제가 없지만,
|
||||
// 운영툴 등에서 db의 item_proto, mob_proto를 읽어 쓰기 때문에 문제가 발생한다.
|
||||
bool MirrorMobTableIntoDB();
|
||||
bool MirrorItemTableIntoDB();
|
||||
|
||||
@ -260,20 +260,20 @@ class CClientManager : public singleton<CClientManager>
|
||||
// END_PLAYER_INDEX_CREATE_BUG_FIX
|
||||
|
||||
// MYSHOP_PRICE_LIST
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Result ó<EFBFBD><EFBFBD>
|
||||
/// 가격정보 로드 쿼리에 대한 Result 처리
|
||||
/**
|
||||
* @param peer <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û<EFBFBD><C3BB> Game server <EFBFBD><EFBFBD> peer <EFBFBD><EFBFBD>ü <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param pMsg <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Result <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param peer 가격정보를 요청한 Game server 의 peer 객체 포인터
|
||||
* @param pMsg 쿼리의 Result 로 받은 객체의 포인터
|
||||
*
|
||||
* <EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> ij<>ÿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> peer <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
|
||||
* 로드된 가격정보 리스트를 캐시에 저장하고 peer 에게 리스트를 보내준다.
|
||||
*/
|
||||
void RESULT_PRICELIST_LOAD(CPeer* peer, SQLMsg* pMsg);
|
||||
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Result ó<EFBFBD><EFBFBD>
|
||||
/// 가격정보 업데이트를 위한 로드 쿼리에 대한 Result 처리
|
||||
/**
|
||||
* @param pMsg <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Result <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param pMsg 쿼리의 Result 로 받은 객체의 포인터
|
||||
*
|
||||
* <EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ ij<>ø<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>Ѵ<EFBFBD>.
|
||||
* 로드된 정보로 가격정보 리스트 캐시를 만들고 업데이트 받은 가격정보로 업데이트 한다.
|
||||
*/
|
||||
void RESULT_PRICELIST_LOAD_FOR_UPDATE(SQLMsg* pMsg);
|
||||
// END_OF_MYSHOP_PRICE_LIST
|
||||
@ -310,9 +310,6 @@ class CClientManager : public singleton<CClientManager>
|
||||
|
||||
void SendPartyOnSetup(CPeer * peer);
|
||||
|
||||
void QUERY_HIGHSCORE_REGISTER(CPeer * peer, TPacketGDHighscore* data);
|
||||
void RESULT_HIGHSCORE_REGISTER(CPeer * pkPeer, SQLMsg * msg);
|
||||
|
||||
void QUERY_FLUSH_CACHE(CPeer * pkPeer, const char * c_pData);
|
||||
|
||||
void QUERY_PARTY_CREATE(CPeer * peer, TPacketPartyCreate* p);
|
||||
@ -327,7 +324,6 @@ class CClientManager : public singleton<CClientManager>
|
||||
void QUERY_CHANGE_NAME(CPeer * peer, DWORD dwHandle, TPacketGDChangeName * p);
|
||||
void GetPlayerFromRes(TPlayerTable * player_table, MYSQL_RES* res);
|
||||
|
||||
void QUERY_SMS(CPeer * pkPeer, TPacketGDSMS * p);
|
||||
void QUERY_LOGIN_KEY(CPeer * pkPeer, TPacketGDLoginKey * p);
|
||||
|
||||
void AddGuildPriv(TPacketGiveGuildPriv* p);
|
||||
@ -347,13 +343,7 @@ class CClientManager : public singleton<CClientManager>
|
||||
void SetEventFlag(TPacketSetEventFlag* p);
|
||||
void SendEventFlagsOnSetup(CPeer* peer);
|
||||
|
||||
void BillingExpire(TPacketBillingExpire * p);
|
||||
void BillingCheck(const char * data);
|
||||
|
||||
void SendAllLoginToBilling();
|
||||
void SendLoginToBilling(CLoginData * pkLD, bool bLogin);
|
||||
|
||||
// <20><>ȥ
|
||||
// 결혼
|
||||
void MarriageAdd(TPacketMarriageAdd * p);
|
||||
void MarriageUpdate(TPacketMarriageUpdate * p);
|
||||
void MarriageRemove(TPacketMarriageRemove * p);
|
||||
@ -363,19 +353,19 @@ class CClientManager : public singleton<CClientManager>
|
||||
void WeddingEnd(TPacketWeddingEnd * p);
|
||||
|
||||
// MYSHOP_PRICE_LIST
|
||||
// <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 개인상점 가격정보
|
||||
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><>Ŷ(HEADER_GD_MYSHOP_PRICELIST_UPDATE) ó<EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>
|
||||
/// 아이템 가격정보 리스트 업데이트 패킷(HEADER_GD_MYSHOP_PRICELIST_UPDATE) 처리함수
|
||||
/**
|
||||
* @param [in] pPacket <EFBFBD><EFBFBD>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param [in] pPacket 패킷 데이터의 포인터
|
||||
*/
|
||||
void MyshopPricelistUpdate(const TPacketMyshopPricelistHeader* pPacket);
|
||||
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>û <20><>Ŷ(HEADER_GD_MYSHOP_PRICELIST_REQ) ó<EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>
|
||||
/// 아이템 가격정보 리스트 요청 패킷(HEADER_GD_MYSHOP_PRICELIST_REQ) 처리함수
|
||||
/**
|
||||
* @param peer <EFBFBD><EFBFBD>Ŷ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Game server <EFBFBD><EFBFBD> peer <EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param [in] dwHandle <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û<EFBFBD><C3BB> peer <20><> <20>ڵ<EFBFBD>
|
||||
* @param [in] dwPlayerID <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><>û<EFBFBD><C3BB> <20>÷<EFBFBD><C3B7>̾<EFBFBD><CCBE><EFBFBD> ID
|
||||
* @param peer 패킷을 보낸 Game server 의 peer 객체의 포인터
|
||||
* @param [in] dwHandle 가격정보를 요청한 peer 의 핸들
|
||||
* @param [in] dwPlayerID 가격정보 리스트를 요청한 플레이어의 ID
|
||||
*/
|
||||
void MyshopPricelistRequest(CPeer* peer, DWORD dwHandle, DWORD dwPlayerID);
|
||||
// END_OF_MYSHOP_PRICE_LIST
|
||||
@ -385,10 +375,6 @@ class CClientManager : public singleton<CClientManager>
|
||||
void DeleteObject(DWORD dwID);
|
||||
void UpdateLand(DWORD * pdw);
|
||||
|
||||
// VCard
|
||||
void VCard(TPacketGDVCard * p);
|
||||
void VCardProcess();
|
||||
|
||||
// BLOCK_CHAT
|
||||
void BlockChat(TPacketBlockChat * p);
|
||||
// END_OF_BLOCK_CHAT
|
||||
@ -413,7 +399,7 @@ class CClientManager : public singleton<CClientManager>
|
||||
typedef std::unordered_map<DWORD, CLoginData *> TLoginDataByAID;
|
||||
TLoginDataByAID m_map_pkLoginDataByAID;
|
||||
|
||||
// Login LoginData pair (<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> <20>Ǿ<EFBFBD><C7BE>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
// Login LoginData pair (실제 로그인 되어있는 계정)
|
||||
typedef std::unordered_map<std::string, CLoginData *> TLogonAccountMap;
|
||||
TLogonAccountMap m_map_kLogonAccount;
|
||||
|
||||
@ -441,18 +427,16 @@ class CClientManager : public singleton<CClientManager>
|
||||
std::vector<building::TObjectProto> m_vec_kObjectProto;
|
||||
std::map<DWORD, building::TObject *> m_map_pkObjectTable;
|
||||
|
||||
std::queue<TPacketGDVCard> m_queue_vcard;
|
||||
|
||||
bool m_bShutdowned;
|
||||
|
||||
TPlayerTableCacheMap m_map_playerCache; // <EFBFBD>÷<EFBFBD><EFBFBD>̾<EFBFBD> id<EFBFBD><EFBFBD> key
|
||||
TPlayerTableCacheMap m_map_playerCache; // 플레이어 id가 key
|
||||
|
||||
TItemCacheMap m_map_itemCache; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> id<EFBFBD><EFBFBD> key
|
||||
TItemCacheSetPtrMap m_map_pkItemCacheSetPtr; // <EFBFBD>÷<EFBFBD><EFBFBD>̾<EFBFBD> id<EFBFBD><EFBFBD> key, <EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7>̾ <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֳ<EFBFBD>?
|
||||
TItemCacheMap m_map_itemCache; // 아이템 id가 key
|
||||
TItemCacheSetPtrMap m_map_pkItemCacheSetPtr; // 플레이어 id가 key, 이 플레이어가 어떤 아이템 캐쉬를 가지고 있나?
|
||||
|
||||
// MYSHOP_PRICE_LIST
|
||||
/// <EFBFBD>÷<EFBFBD><EFBFBD>̾ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ map. key: <EFBFBD>÷<EFBFBD><EFBFBD>̾<EFBFBD> ID, value: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ ij<><C4B3>
|
||||
TItemPriceListCacheMap m_mapItemPriceListCache; ///< <EFBFBD>÷<EFBFBD><EFBFBD>̾ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
|
||||
/// 플레이어별 아이템 가격정보 리스트 map. key: 플레이어 ID, value: 가격정보 리스트 캐시
|
||||
TItemPriceListCacheMap m_mapItemPriceListCache; ///< 플레이어별 아이템 가격정보 리스트
|
||||
// END_OF_MYSHOP_PRICE_LIST
|
||||
|
||||
TChannelStatusMap m_mChannelStatus;
|
||||
@ -490,7 +474,7 @@ class CClientManager : public singleton<CClientManager>
|
||||
|
||||
//BOOT_LOCALIZATION
|
||||
public:
|
||||
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
|
||||
/* 로컬 정보 초기화
|
||||
**/
|
||||
bool InitializeLocalization();
|
||||
|
||||
@ -545,7 +529,6 @@ class CClientManager : public singleton<CClientManager>
|
||||
//END_MONARCH
|
||||
|
||||
void ChangeMonarchLord(CPeer* peer, DWORD dwHandle, TPacketChangeMonarchLord* info);
|
||||
void BlockException(TPacketBlockException *data);
|
||||
|
||||
void SendSpareItemIDRange(CPeer* peer);
|
||||
|
||||
|
@ -16,84 +16,84 @@ bool CClientManager::InitializeTables()
|
||||
{
|
||||
if (!InitializeMobTable())
|
||||
{
|
||||
sys_err("InitializeMobTable FAILED");
|
||||
SPDLOG_ERROR("InitializeMobTable FAILED");
|
||||
return false;
|
||||
}
|
||||
if (!MirrorMobTableIntoDB())
|
||||
{
|
||||
sys_err("MirrorMobTableIntoDB FAILED");
|
||||
SPDLOG_ERROR("MirrorMobTableIntoDB FAILED");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!InitializeItemTable())
|
||||
{
|
||||
sys_err("InitializeItemTable FAILED");
|
||||
SPDLOG_ERROR("InitializeItemTable FAILED");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!MirrorItemTableIntoDB())
|
||||
{
|
||||
sys_err("MirrorItemTableIntoDB FAILED");
|
||||
SPDLOG_ERROR("MirrorItemTableIntoDB FAILED");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!InitializeShopTable())
|
||||
{
|
||||
sys_err("InitializeShopTable FAILED");
|
||||
SPDLOG_ERROR("InitializeShopTable FAILED");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!InitializeSkillTable())
|
||||
{
|
||||
sys_err("InitializeSkillTable FAILED");
|
||||
SPDLOG_ERROR("InitializeSkillTable FAILED");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!InitializeRefineTable())
|
||||
{
|
||||
sys_err("InitializeRefineTable FAILED");
|
||||
SPDLOG_ERROR("InitializeRefineTable FAILED");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!InitializeItemAttrTable())
|
||||
{
|
||||
sys_err("InitializeItemAttrTable FAILED");
|
||||
SPDLOG_ERROR("InitializeItemAttrTable FAILED");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!InitializeItemRareTable())
|
||||
{
|
||||
sys_err("InitializeItemRareTable FAILED");
|
||||
SPDLOG_ERROR("InitializeItemRareTable FAILED");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!InitializeBanwordTable())
|
||||
{
|
||||
sys_err("InitializeBanwordTable FAILED");
|
||||
SPDLOG_ERROR("InitializeBanwordTable FAILED");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!InitializeLandTable())
|
||||
{
|
||||
sys_err("InitializeLandTable FAILED");
|
||||
SPDLOG_ERROR("InitializeLandTable FAILED");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!InitializeObjectProto())
|
||||
{
|
||||
sys_err("InitializeObjectProto FAILED");
|
||||
SPDLOG_ERROR("InitializeObjectProto FAILED");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!InitializeObjectTable())
|
||||
{
|
||||
sys_err("InitializeObjectTable FAILED");
|
||||
SPDLOG_ERROR("InitializeObjectTable FAILED");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!InitializeMonarch())
|
||||
{
|
||||
sys_err("InitializeMonarch FAILED");
|
||||
SPDLOG_ERROR("InitializeMonarch FAILED");
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -117,7 +117,7 @@ bool CClientManager::InitializeRefineTable()
|
||||
|
||||
if (m_pRefineTable)
|
||||
{
|
||||
sys_log(0, "RELOAD: refine_proto");
|
||||
SPDLOG_DEBUG("RELOAD: refine_proto");
|
||||
delete [] m_pRefineTable;
|
||||
m_pRefineTable = NULL;
|
||||
}
|
||||
@ -153,7 +153,7 @@ bool CClientManager::InitializeRefineTable()
|
||||
}
|
||||
}
|
||||
|
||||
sys_log(0, "REFINE: id %ld cost %d prob %d mat1 %lu cnt1 %d", prt->id, prt->cost, prt->prob, prt->materials[0].vnum, prt->materials[0].count);
|
||||
SPDLOG_TRACE("REFINE: id {} cost {} prob {} mat1 {} cnt1 {}", prt->id, prt->cost, prt->prob, prt->materials[0].vnum, prt->materials[0].count);
|
||||
|
||||
prt++;
|
||||
}
|
||||
@ -171,42 +171,42 @@ class FCompareVnum
|
||||
|
||||
bool CClientManager::InitializeMobTable()
|
||||
{
|
||||
//================== <EFBFBD>Լ<EFBFBD> <20><><EFBFBD><EFBFBD> ==================//
|
||||
//1. <EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 'mob_proto.txt', 'mob_proto_test.txt', 'mob_names.txt' <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>а<EFBFBD>,
|
||||
// (!)[mob_table] <EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. (Ÿ<><C5B8> : TMobTable)
|
||||
//2. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 1) 'mob_names.txt' <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о (a)[localMap](vnum:name) <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// 2) 'mob_proto_test.txt'<EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> (a)[localMap] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// (b)[test_map_mobTableByVnum](vnum:TMobTable) <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// 3) 'mob_proto.txt' <EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> (a)[localMap] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// (!)[mob_table] <EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// <<EFBFBD><EFBFBD><EFBFBD><EFBFBD>>
|
||||
// <EFBFBD><EFBFBD> row <EFBFBD><EFBFBD> <20><>,
|
||||
// (b)[test_map_mobTableByVnum],(!)[mob_table] <EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD> <20>ִ<EFBFBD> row<EFBFBD><EFBFBD>
|
||||
// (b)[test_map_mobTableByVnum]<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// 4) (b)[test_map_mobTableByVnum]<EFBFBD><EFBFBD> row<EFBFBD><EFBFBD>, (!)[mob_table]<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0>Ѵ<EFBFBD>.
|
||||
//3. <EFBFBD><EFBFBD>Ʈ
|
||||
// 1)'mob_proto.txt' <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mob_table<EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EEB0AC><EFBFBD><EFBFBD>. -> <EFBFBD>Ϸ<EFBFBD>
|
||||
// 2)'mob_names.txt' <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mob_table<EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EEB0AC><EFBFBD><EFBFBD>.
|
||||
// 3)'mob_proto_test.txt' <EFBFBD><EFBFBD><EFBFBD><EFBFBD> [<5B><>ġ<EFBFBD><C4A1>] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mob_table <20><> <20><> <20><><EFBFBD><EFBFBD><EEB0AC><EFBFBD><EFBFBD>.
|
||||
// 4)'mob_proto_test.txt' <EFBFBD><EFBFBD><EFBFBD><EFBFBD> [<5B><><EFBFBD>ο<EFBFBD>] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mob_table <20><> <20><> <20><><EFBFBD><EFBFBD><EEB0AC><EFBFBD><EFBFBD>.
|
||||
// 5) (<EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>۵<EFBFBD> <20>ϴ<EFBFBD><CFB4><EFBFBD>.
|
||||
//================== 함수 설명 ==================//
|
||||
//1. 요약 : 'mob_proto.txt', 'mob_proto_test.txt', 'mob_names.txt' 파일을 읽고,
|
||||
// (!)[mob_table] 테이블 오브젝트를 생성한다. (타입 : TMobTable)
|
||||
//2. 순서
|
||||
// 1) 'mob_names.txt' 파일을 읽어서 (a)[localMap](vnum:name) 맵을 만든다.
|
||||
// 2) 'mob_proto_test.txt'파일과 (a)[localMap] 맵으로
|
||||
// (b)[test_map_mobTableByVnum](vnum:TMobTable) 맵을 생성한다.
|
||||
// 3) 'mob_proto.txt' 파일과 (a)[localMap] 맵으로
|
||||
// (!)[mob_table] 테이블을 만든다.
|
||||
// <참고>
|
||||
// 각 row 들 중,
|
||||
// (b)[test_map_mobTableByVnum],(!)[mob_table] 모두에 있는 row는
|
||||
// (b)[test_map_mobTableByVnum]의 것을 사용한다.
|
||||
// 4) (b)[test_map_mobTableByVnum]의 row중, (!)[mob_table]에 없는 것을 추가한다.
|
||||
//3. 테스트
|
||||
// 1)'mob_proto.txt' 정보가 mob_table에 잘 들어갔는지. -> 완료
|
||||
// 2)'mob_names.txt' 정보가 mob_table에 잘 들어갔는지.
|
||||
// 3)'mob_proto_test.txt' 에서 [겹치는] 정보가 mob_table 에 잘 들어갔는지.
|
||||
// 4)'mob_proto_test.txt' 에서 [새로운] 정보가 mob_table 에 잘 들어갔는지.
|
||||
// 5) (최종) 게임 클라이언트에서 제대로 작동 하는지.
|
||||
//_______________________________________________//
|
||||
|
||||
|
||||
//===============================================//
|
||||
// 1) 'mob_names.txt' <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о (a)[localMap] <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//<(a)localMap <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>>
|
||||
// 1) 'mob_names.txt' 파일을 읽어서 (a)[localMap] 맵을 만든다.
|
||||
//<(a)localMap 맵 생성>
|
||||
map<int,const char*> localMap;
|
||||
bool isNameFile = true;
|
||||
//<<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>б<EFBFBD>>
|
||||
//<파일 읽기>
|
||||
cCsvTable nameData;
|
||||
if(!nameData.Load("mob_names.txt",'\t'))
|
||||
{
|
||||
fprintf(stderr, "mob_names.txt <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>\n");
|
||||
SPDLOG_ERROR("mob_names.txt Failed to read the file");
|
||||
isNameFile = false;
|
||||
} else {
|
||||
nameData.Next(); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>row <20><><EFBFBD><EFBFBD>.
|
||||
nameData.Next(); //설명row 생략.
|
||||
while(nameData.Next()) {
|
||||
localMap[atoi(nameData.AsStringByIndex(0))] = nameData.AsStringByIndex(1);
|
||||
}
|
||||
@ -215,35 +215,35 @@ bool CClientManager::InitializeMobTable()
|
||||
|
||||
|
||||
//===============================================//
|
||||
// 2) 'mob_proto_test.txt'<EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> (a)localMap <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// (b)[test_map_mobTableByVnum](vnum:TMobTable) <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// 2) 'mob_proto_test.txt'파일과 (a)localMap 맵으로
|
||||
// (b)[test_map_mobTableByVnum](vnum:TMobTable) 맵을 생성한다.
|
||||
//0.
|
||||
set<int> vnumSet; //<EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>űԿ<C5B1><D4BF><EFBFBD> Ȯ<>ο<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
//1. <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD>
|
||||
set<int> vnumSet; //테스트용 파일 데이터중, 신규여부 확인에 사용.
|
||||
//1. 파일 읽어오기
|
||||
bool isTestFile = true;
|
||||
cCsvTable test_data;
|
||||
if(!test_data.Load("mob_proto_test.txt",'\t'))
|
||||
{
|
||||
fprintf(stderr, "<EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. <20>״<EFBFBD><D7B4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.\n");
|
||||
SPDLOG_ERROR("No test file exists, proceed as is.");
|
||||
isTestFile = false;
|
||||
}
|
||||
//2. (c)[test_map_mobTableByVnum](vnum:TMobTable) <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
//2. (c)[test_map_mobTableByVnum](vnum:TMobTable) 맵 생성.
|
||||
map<DWORD, TMobTable *> test_map_mobTableByVnum;
|
||||
if (isTestFile) {
|
||||
test_data.Next(); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ο<EFBFBD> <20>Ѿ<D1BE><EEB0A1>.
|
||||
test_data.Next(); //설명 로우 넘어가기.
|
||||
|
||||
//<EFBFBD><EFBFBD>. <20><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
//ㄱ. 테스트 몬스터 테이블 생성.
|
||||
TMobTable * test_mob_table = NULL;
|
||||
int test_MobTableSize = test_data.m_File.GetRowCount()-1;
|
||||
test_mob_table = new TMobTable[test_MobTableSize];
|
||||
memset(test_mob_table, 0, sizeof(TMobTable) * test_MobTableSize);
|
||||
|
||||
//<EFBFBD><EFBFBD>. <20><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ְ<EFBFBD>, <20>ʿ<EFBFBD><CABF><EFBFBD><EFBFBD><EFBFBD> <20>ֱ<EFBFBD>.
|
||||
//ㄴ. 테스트 몬스터 테이블에 값을 넣고, 맵에까지 넣기.
|
||||
while(test_data.Next()) {
|
||||
|
||||
if (!Set_Proto_Mob_Table(test_mob_table, test_data, localMap))
|
||||
{
|
||||
fprintf(stderr, "<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.\n");
|
||||
SPDLOG_ERROR("Mob proto table setup failed.");
|
||||
}
|
||||
|
||||
test_map_mobTableByVnum.insert(std::map<DWORD, TMobTable *>::value_type(test_mob_table->dwVnum, test_mob_table));
|
||||
@ -254,22 +254,22 @@ bool CClientManager::InitializeMobTable()
|
||||
|
||||
}
|
||||
|
||||
// 3) 'mob_proto.txt' <EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> (a)[localMap] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// (!)[mob_table] <EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// <<EFBFBD><EFBFBD><EFBFBD><EFBFBD>>
|
||||
// <EFBFBD><EFBFBD> row <EFBFBD><EFBFBD> <20><>,
|
||||
// (b)[test_map_mobTableByVnum],(!)[mob_table] <EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD> <20>ִ<EFBFBD> row<EFBFBD><EFBFBD>
|
||||
// (b)[test_map_mobTableByVnum]<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// 3) 'mob_proto.txt' 파일과 (a)[localMap] 맵으로
|
||||
// (!)[mob_table] 테이블을 만든다.
|
||||
// <참고>
|
||||
// 각 row 들 중,
|
||||
// (b)[test_map_mobTableByVnum],(!)[mob_table] 모두에 있는 row는
|
||||
// (b)[test_map_mobTableByVnum]의 것을 사용한다.
|
||||
|
||||
//1. <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>б<EFBFBD>.
|
||||
//1. 파일 읽기.
|
||||
cCsvTable data;
|
||||
if(!data.Load("mob_proto.txt",'\t')) {
|
||||
fprintf(stderr, "mob_proto.txt <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>\n");
|
||||
SPDLOG_ERROR("mob_proto.txt Failed to read the file");
|
||||
return false;
|
||||
}
|
||||
data.Next(); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> row <EFBFBD>Ѿ<EFBFBD><EFBFBD>
|
||||
//2. (!)[mob_table] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
|
||||
//2.1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ľ<EFBFBD>
|
||||
data.Next(); //설명 row 넘어가기
|
||||
//2. (!)[mob_table] 생성하기
|
||||
//2.1 새로 추가되는 갯수를 파악
|
||||
int addNumber = 0;
|
||||
while(data.Next()) {
|
||||
int vnum = atoi(data.AsStringByIndex(0));
|
||||
@ -279,35 +279,35 @@ bool CClientManager::InitializeMobTable()
|
||||
addNumber++;
|
||||
}
|
||||
}
|
||||
//data<EFBFBD><EFBFBD> <20>ٽ<EFBFBD> ù<>ٷ<EFBFBD> <20>ű<EFBFBD><C5B1><EFBFBD>.(<28>ٽ<EFBFBD> <20>о<EFBFBD><D0BE>´<EFBFBD>;;)
|
||||
//data를 다시 첫줄로 옮긴다.(다시 읽어온다;;)
|
||||
data.Destroy();
|
||||
if(!data.Load("mob_proto.txt",'\t'))
|
||||
{
|
||||
fprintf(stderr, "mob_proto.txt <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>\n");
|
||||
SPDLOG_ERROR("mob_proto.txt Failed to read the file");
|
||||
return false;
|
||||
}
|
||||
data.Next(); //<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Į<><C4AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>κ<EFBFBD>)
|
||||
//2.2 ũ<EFBFBD> <20>°<EFBFBD> mob_table <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
data.Next(); //맨 윗줄 제외 (아이템 칼럼을 설명하는 부분)
|
||||
//2.2 크기에 맞게 mob_table 생성
|
||||
if (!m_vec_mobTable.empty())
|
||||
{
|
||||
sys_log(0, "RELOAD: mob_proto");
|
||||
SPDLOG_DEBUG("RELOAD: mob_proto");
|
||||
m_vec_mobTable.clear();
|
||||
}
|
||||
m_vec_mobTable.resize(data.m_File.GetRowCount()-1 + addNumber);
|
||||
memset(&m_vec_mobTable[0], 0, sizeof(TMobTable) * m_vec_mobTable.size());
|
||||
TMobTable * mob_table = &m_vec_mobTable[0];
|
||||
//2.3 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ä<><C3A4><EFBFBD><EFBFBD>
|
||||
//2.3 데이터 채우기
|
||||
while (data.Next())
|
||||
{
|
||||
int col = 0;
|
||||
//(b)[test_map_mobTableByVnum]<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> row<6F><77> <20>ִ<EFBFBD><D6B4><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
//(b)[test_map_mobTableByVnum]에 같은 row가 있는지 조사.
|
||||
bool isSameRow = true;
|
||||
std::map<DWORD, TMobTable *>::iterator it_map_mobTable;
|
||||
it_map_mobTable = test_map_mobTableByVnum.find(atoi(data.AsStringByIndex(col)));
|
||||
if(it_map_mobTable == test_map_mobTableByVnum.end()) {
|
||||
isSameRow = false;
|
||||
}
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> row <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (b)<29><><EFBFBD><EFBFBD> <20>о<EFBFBD><D0BE>´<EFBFBD>.
|
||||
//같은 row 가 있으면 (b)에서 읽어온다.
|
||||
if(isSameRow) {
|
||||
TMobTable *tempTable = it_map_mobTable->second;
|
||||
|
||||
@ -378,39 +378,39 @@ bool CClientManager::InitializeMobTable()
|
||||
|
||||
if (!Set_Proto_Mob_Table(mob_table, data, localMap))
|
||||
{
|
||||
fprintf(stderr, "<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.\n");
|
||||
SPDLOG_ERROR("Mob proto table setup failed.");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
//<EFBFBD>¿<EFBFBD> vnum <EFBFBD>߰<EFBFBD>
|
||||
//셋에 vnum 추가
|
||||
vnumSet.insert(mob_table->dwVnum);
|
||||
|
||||
|
||||
sys_log(1, "MOB #%-5d %-24s %-24s level: %-3u rank: %u empire: %d", mob_table->dwVnum, mob_table->szName, mob_table->szLocaleName, mob_table->bLevel, mob_table->bRank, mob_table->bEmpire);
|
||||
SPDLOG_TRACE("MOB #{:<5} {:24} {:24} level: {:<3} rank: {} empire: {}", mob_table->dwVnum, mob_table->szName, mob_table->szLocaleName, mob_table->bLevel, mob_table->bRank, mob_table->bEmpire);
|
||||
++mob_table;
|
||||
|
||||
}
|
||||
//_____________________________________________________//
|
||||
|
||||
|
||||
// 4) (b)[test_map_mobTableByVnum]<EFBFBD><EFBFBD> row<EFBFBD><EFBFBD>, (!)[mob_table]<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0>Ѵ<EFBFBD>.
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// 4) (b)[test_map_mobTableByVnum]의 row중, (!)[mob_table]에 없는 것을 추가한다.
|
||||
//파일 다시 읽어오기.
|
||||
test_data.Destroy();
|
||||
isTestFile = true;
|
||||
test_data;
|
||||
if(!test_data.Load("mob_proto_test.txt",'\t'))
|
||||
{
|
||||
fprintf(stderr, "<EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. <20>״<EFBFBD><D7B4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.\n");
|
||||
SPDLOG_ERROR("No test file exists, proceed as is.");
|
||||
isTestFile = false;
|
||||
}
|
||||
if(isTestFile) {
|
||||
test_data.Next(); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ο<EFBFBD> <20>Ѿ<D1BE><EEB0A1>.
|
||||
test_data.Next(); //설명 로우 넘어가기.
|
||||
|
||||
while (test_data.Next()) //<EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ⱦ<C8BE><EEB3AA><EFBFBD><EFBFBD>,<2C><><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0>Ѵ<EFBFBD>.
|
||||
while (test_data.Next()) //테스트 데이터 각각을 훑어나가며,새로운 것을 추가한다.
|
||||
{
|
||||
//<EFBFBD>ߺ<EFBFBD><EFBFBD>Ǵ<EFBFBD> <20>κ<EFBFBD><CEBA≯<EFBFBD> <20>Ѿ<D1BE><EEB0A3>.
|
||||
//중복되는 부분이면 넘어간다.
|
||||
set<int>::iterator itVnum;
|
||||
itVnum=vnumSet.find(atoi(test_data.AsStringByIndex(0)));
|
||||
if (itVnum != vnumSet.end()) {
|
||||
@ -419,10 +419,10 @@ bool CClientManager::InitializeMobTable()
|
||||
|
||||
if (!Set_Proto_Mob_Table(mob_table, test_data, localMap))
|
||||
{
|
||||
fprintf(stderr, "<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.\n");
|
||||
SPDLOG_ERROR("Mob proto table setup failed.");
|
||||
}
|
||||
|
||||
sys_log(0, "MOB #%-5d %-24s %-24s level: %-3u rank: %u empire: %d", mob_table->dwVnum, mob_table->szName, mob_table->szLocaleName, mob_table->bLevel, mob_table->bRank, mob_table->bEmpire);
|
||||
SPDLOG_DEBUG("MOB #{:<5} {:24} {:24} level: {:<3} rank: {} empire: {}", mob_table->dwVnum, mob_table->szName, mob_table->szLocaleName, mob_table->bLevel, mob_table->bRank, mob_table->bEmpire);
|
||||
++mob_table;
|
||||
|
||||
}
|
||||
@ -447,13 +447,13 @@ bool CClientManager::InitializeShopTable()
|
||||
|
||||
std::unique_ptr<SQLMsg> pkMsg2(CDBManager::instance().DirectQuery(s_szQuery));
|
||||
|
||||
// shop<EFBFBD><EFBFBD> vnum<EFBFBD><EFBFBD> <20>ִµ<D6B4> shop_item <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>... <20><><EFBFBD>з<EFBFBD> ó<><C3B3><EFBFBD>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
// <EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD>Һκ<EFBFBD>
|
||||
// shop의 vnum은 있는데 shop_item 이 없을경우... 실패로 처리되니 주의 요망.
|
||||
// 고처야할부분
|
||||
SQLResult * pRes2 = pkMsg2->Get();
|
||||
|
||||
if (!pRes2->uiNumRows)
|
||||
{
|
||||
sys_err("InitializeShopTable : Table count is zero.");
|
||||
SPDLOG_ERROR("InitializeShopTable : Table count is zero.");
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -487,7 +487,7 @@ bool CClientManager::InitializeShopTable()
|
||||
|
||||
str_to_number(shop_table->dwNPCVnum, data[col++]);
|
||||
|
||||
if (!data[col]) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> NULL<4C><4C> <20><><EFBFBD><EFBFBD> <20>ǹǷ<C7B9>..
|
||||
if (!data[col]) // 아이템이 하나도 없으면 NULL이 리턴 되므로..
|
||||
continue;
|
||||
|
||||
TShopItemTable * pItem = &shop_table->items[shop_table->byItemCount];
|
||||
@ -508,7 +508,7 @@ bool CClientManager::InitializeShopTable()
|
||||
while (it != map_shop.end())
|
||||
{
|
||||
memcpy((m_pShopTable + i), (it++)->second, sizeof(TShopTable));
|
||||
sys_log(0, "SHOP: #%d items: %d", (m_pShopTable + i)->dwVnum, (m_pShopTable + i)->byItemCount);
|
||||
SPDLOG_DEBUG("SHOP: #{} items: {}", (m_pShopTable + i)->dwVnum, (m_pShopTable + i)->byItemCount);
|
||||
++i;
|
||||
}
|
||||
|
||||
@ -529,7 +529,7 @@ bool CClientManager::InitializeQuestItemTable()
|
||||
|
||||
if (!pRes->uiNumRows)
|
||||
{
|
||||
sys_err("query error or no rows: %s", query);
|
||||
SPDLOG_ERROR("query error or no rows: {}", query);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -556,11 +556,11 @@ bool CClientManager::InitializeQuestItemTable()
|
||||
|
||||
if (m_map_itemTableByVnum.find(tbl.dwVnum) != m_map_itemTableByVnum.end())
|
||||
{
|
||||
sys_err("QUEST_ITEM_ERROR! %lu vnum already exist! (name %s)", tbl.dwVnum, tbl.szLocaleName);
|
||||
SPDLOG_ERROR("QUEST_ITEM_ERROR! {} vnum already exist! (name {})", tbl.dwVnum, tbl.szLocaleName);
|
||||
continue;
|
||||
}
|
||||
|
||||
tbl.bType = ITEM_QUEST; // quest_item_proto <EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20>͵<EFBFBD><CDB5><EFBFBD> <20><><EFBFBD><EFBFBD> ITEM_QUEST <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
tbl.bType = ITEM_QUEST; // quest_item_proto 테이블에 있는 것들은 모두 ITEM_QUEST 유형
|
||||
tbl.bSize = 1;
|
||||
|
||||
m_vec_itemTable.push_back(tbl);
|
||||
@ -571,39 +571,39 @@ bool CClientManager::InitializeQuestItemTable()
|
||||
|
||||
bool CClientManager::InitializeItemTable()
|
||||
{
|
||||
//================== <EFBFBD>Լ<EFBFBD> <20><><EFBFBD><EFBFBD> ==================//
|
||||
//1. <EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 'item_proto.txt', 'item_proto_test.txt', 'item_names.txt' <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>а<EFBFBD>,
|
||||
// <item_table>(TItemTable), <m_map_itemTableByVnum> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
//2. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 1) 'item_names.txt' <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о (a)[localMap](vnum:name) <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// 2) 'item_proto_text.txt'<EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> (a)[localMap] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// (b)[test_map_itemTableByVnum](vnum:TItemTable) <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// 3) 'item_proto.txt' <EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> (a)[localMap] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// (!)[item_table], <m_map_itemTableByVnum><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// <<EFBFBD><EFBFBD><EFBFBD><EFBFBD>>
|
||||
// <EFBFBD><EFBFBD> row <EFBFBD><EFBFBD> <20><>,
|
||||
// (b)[test_map_itemTableByVnum],(!)[mob_table] <EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD> <20>ִ<EFBFBD> row<EFBFBD><EFBFBD>
|
||||
// (b)[test_map_itemTableByVnum]<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// 4) (b)[test_map_itemTableByVnum]<EFBFBD><EFBFBD> row<EFBFBD><EFBFBD>, (!)[item_table]<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0>Ѵ<EFBFBD>.
|
||||
//3. <EFBFBD><EFBFBD>Ʈ
|
||||
// 1)'item_proto.txt' <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> item_table<EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EEB0AC><EFBFBD><EFBFBD>. -> <EFBFBD>Ϸ<EFBFBD>
|
||||
// 2)'item_names.txt' <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> item_table<EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EEB0AC><EFBFBD><EFBFBD>.
|
||||
// 3)'item_proto_test.txt' <EFBFBD><EFBFBD><EFBFBD><EFBFBD> [<5B><>ġ<EFBFBD><C4A1>] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> item_table <20><> <20><> <20><><EFBFBD><EFBFBD><EEB0AC><EFBFBD><EFBFBD>.
|
||||
// 4)'item_proto_test.txt' <EFBFBD><EFBFBD><EFBFBD><EFBFBD> [<5B><><EFBFBD>ο<EFBFBD>] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> item_table <20><> <20><> <20><><EFBFBD><EFBFBD><EEB0AC><EFBFBD><EFBFBD>.
|
||||
// 5) (<EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>۵<EFBFBD> <20>ϴ<EFBFBD><CFB4><EFBFBD>.
|
||||
//================== 함수 설명 ==================//
|
||||
//1. 요약 : 'item_proto.txt', 'item_proto_test.txt', 'item_names.txt' 파일을 읽고,
|
||||
// <item_table>(TItemTable), <m_map_itemTableByVnum> 오브젝트를 생성한다.
|
||||
//2. 순서
|
||||
// 1) 'item_names.txt' 파일을 읽어서 (a)[localMap](vnum:name) 맵을 만든다.
|
||||
// 2) 'item_proto_text.txt'파일과 (a)[localMap] 맵으로
|
||||
// (b)[test_map_itemTableByVnum](vnum:TItemTable) 맵을 생성한다.
|
||||
// 3) 'item_proto.txt' 파일과 (a)[localMap] 맵으로
|
||||
// (!)[item_table], <m_map_itemTableByVnum>을 만든다.
|
||||
// <참고>
|
||||
// 각 row 들 중,
|
||||
// (b)[test_map_itemTableByVnum],(!)[mob_table] 모두에 있는 row는
|
||||
// (b)[test_map_itemTableByVnum]의 것을 사용한다.
|
||||
// 4) (b)[test_map_itemTableByVnum]의 row중, (!)[item_table]에 없는 것을 추가한다.
|
||||
//3. 테스트
|
||||
// 1)'item_proto.txt' 정보가 item_table에 잘 들어갔는지. -> 완료
|
||||
// 2)'item_names.txt' 정보가 item_table에 잘 들어갔는지.
|
||||
// 3)'item_proto_test.txt' 에서 [겹치는] 정보가 item_table 에 잘 들어갔는지.
|
||||
// 4)'item_proto_test.txt' 에서 [새로운] 정보가 item_table 에 잘 들어갔는지.
|
||||
// 5) (최종) 게임 클라이언트에서 제대로 작동 하는지.
|
||||
//_______________________________________________//
|
||||
|
||||
|
||||
|
||||
//=================================================================================//
|
||||
// 1) 'item_names.txt' <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о (a)[localMap](vnum:name) <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// 1) 'item_names.txt' 파일을 읽어서 (a)[localMap](vnum:name) 맵을 만든다.
|
||||
//=================================================================================//
|
||||
bool isNameFile = true;
|
||||
map<int,const char*> localMap;
|
||||
cCsvTable nameData;
|
||||
if(!nameData.Load("item_names.txt",'\t'))
|
||||
{
|
||||
fprintf(stderr, "item_names.txt <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>\n");
|
||||
SPDLOG_ERROR("item_names.txt Failed to read the file");
|
||||
isNameFile = false;
|
||||
} else {
|
||||
nameData.Next();
|
||||
@ -614,32 +614,32 @@ bool CClientManager::InitializeItemTable()
|
||||
//_________________________________________________________________//
|
||||
|
||||
//=================================================================//
|
||||
// 2) 'item_proto_text.txt'<EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> (a)[localMap] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// (b)[test_map_itemTableByVnum](vnum:TItemTable) <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// 2) 'item_proto_text.txt'파일과 (a)[localMap] 맵으로
|
||||
// (b)[test_map_itemTableByVnum](vnum:TItemTable) 맵을 생성한다.
|
||||
//=================================================================//
|
||||
map<DWORD, TItemTable *> test_map_itemTableByVnum;
|
||||
//1. <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//1. 파일 읽어오기.
|
||||
cCsvTable test_data;
|
||||
if(!test_data.Load("item_proto_test.txt",'\t'))
|
||||
{
|
||||
fprintf(stderr, "item_proto_test.txt <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>\n");
|
||||
SPDLOG_ERROR("item_proto_test.txt Failed to read the file");
|
||||
//return false;
|
||||
} else {
|
||||
test_data.Next(); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ο<EFBFBD> <20>Ѿ<D1BE><EEB0A1>.
|
||||
test_data.Next(); //설명 로우 넘어가기.
|
||||
|
||||
//2. <EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
//2. 테스트 아이템 테이블 생성.
|
||||
TItemTable * test_item_table = NULL;
|
||||
int test_itemTableSize = test_data.m_File.GetRowCount()-1;
|
||||
test_item_table = new TItemTable[test_itemTableSize];
|
||||
memset(test_item_table, 0, sizeof(TItemTable) * test_itemTableSize);
|
||||
|
||||
//3. <EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ְ<EFBFBD>, <20>ʿ<EFBFBD><CABF><EFBFBD><EFBFBD><EFBFBD> <20>ֱ<EFBFBD>.
|
||||
//3. 테스트 아이템 테이블에 값을 넣고, 맵에까지 넣기.
|
||||
while(test_data.Next()) {
|
||||
|
||||
|
||||
if (!Set_Proto_Item_Table(test_item_table, test_data, localMap))
|
||||
{
|
||||
fprintf(stderr, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.\n");
|
||||
SPDLOG_ERROR("Item proto table setup failed.");
|
||||
}
|
||||
|
||||
test_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(test_item_table->dwVnum, test_item_table));
|
||||
@ -651,35 +651,35 @@ bool CClientManager::InitializeItemTable()
|
||||
|
||||
|
||||
//========================================================================//
|
||||
// 3) 'item_proto.txt' <EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> (a)[localMap] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// (!)[item_table], <m_map_itemTableByVnum><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// <<EFBFBD><EFBFBD><EFBFBD><EFBFBD>>
|
||||
// <EFBFBD><EFBFBD> row <EFBFBD><EFBFBD> <20><>,
|
||||
// (b)[test_map_itemTableByVnum],(!)[mob_table] <EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD> <20>ִ<EFBFBD> row<EFBFBD><EFBFBD>
|
||||
// (b)[test_map_itemTableByVnum]<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// 3) 'item_proto.txt' 파일과 (a)[localMap] 맵으로
|
||||
// (!)[item_table], <m_map_itemTableByVnum>을 만든다.
|
||||
// <참고>
|
||||
// 각 row 들 중,
|
||||
// (b)[test_map_itemTableByVnum],(!)[mob_table] 모두에 있는 row는
|
||||
// (b)[test_map_itemTableByVnum]의 것을 사용한다.
|
||||
//========================================================================//
|
||||
|
||||
//vnum<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>. <20><><EFBFBD>ο<EFBFBD> <20><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǻ<EFBFBD><C7BA>Ҷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>.
|
||||
//vnum들을 저장할 셋. 새로운 테스트 아이템을 판별할때 사용된다.
|
||||
set<int> vnumSet;
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//파일 읽어오기.
|
||||
cCsvTable data;
|
||||
if(!data.Load("item_proto.txt",'\t'))
|
||||
{
|
||||
fprintf(stderr, "item_proto.txt <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>\n");
|
||||
SPDLOG_ERROR("item_proto.txt Failed to read the file");
|
||||
return false;
|
||||
}
|
||||
data.Next(); //<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Į<><C4AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>κ<EFBFBD>)
|
||||
data.Next(); //맨 윗줄 제외 (아이템 칼럼을 설명하는 부분)
|
||||
|
||||
if (!m_vec_itemTable.empty())
|
||||
{
|
||||
sys_log(0, "RELOAD: item_proto");
|
||||
SPDLOG_DEBUG("RELOAD: item_proto");
|
||||
m_vec_itemTable.clear();
|
||||
m_map_itemTableByVnum.clear();
|
||||
}
|
||||
|
||||
//===== <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD> =====//
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ľ<EFBFBD><C4BE>Ѵ<EFBFBD>.
|
||||
//===== 아이템 테이블 생성 =====//
|
||||
//새로 추가되는 갯수를 파악한다.
|
||||
int addNumber = 0;
|
||||
while(data.Next()) {
|
||||
int vnum = atoi(data.AsStringByIndex(0));
|
||||
@ -689,14 +689,14 @@ bool CClientManager::InitializeItemTable()
|
||||
addNumber++;
|
||||
}
|
||||
}
|
||||
//data<EFBFBD><EFBFBD> <20>ٽ<EFBFBD> ù<>ٷ<EFBFBD> <20>ű<EFBFBD><C5B1><EFBFBD>.(<28>ٽ<EFBFBD> <20>о<EFBFBD><D0BE>´<EFBFBD>;;)
|
||||
//data를 다시 첫줄로 옮긴다.(다시 읽어온다;;)
|
||||
data.Destroy();
|
||||
if(!data.Load("item_proto.txt",'\t'))
|
||||
{
|
||||
fprintf(stderr, "item_proto.txt <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>\n");
|
||||
SPDLOG_ERROR("item_proto.txt Failed to read the file");
|
||||
return false;
|
||||
}
|
||||
data.Next(); //<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Į<><C4AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>κ<EFBFBD>)
|
||||
data.Next(); //맨 윗줄 제외 (아이템 칼럼을 설명하는 부분)
|
||||
|
||||
m_vec_itemTable.resize(data.m_File.GetRowCount() - 1 + addNumber);
|
||||
memset(&m_vec_itemTable[0], 0, sizeof(TItemTable) * m_vec_itemTable.size());
|
||||
@ -711,16 +711,16 @@ bool CClientManager::InitializeItemTable()
|
||||
std::map<DWORD, TItemTable *>::iterator it_map_itemTable;
|
||||
it_map_itemTable = test_map_itemTableByVnum.find(atoi(data.AsStringByIndex(col)));
|
||||
if(it_map_itemTable == test_map_itemTableByVnum.end()) {
|
||||
//<EFBFBD><EFBFBD> Į<><C4AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//각 칼럼 데이터 저장
|
||||
|
||||
if (!Set_Proto_Item_Table(item_table, data, localMap))
|
||||
{
|
||||
fprintf(stderr, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.\n");
|
||||
SPDLOG_ERROR("Item proto table setup failed.");
|
||||
}
|
||||
|
||||
|
||||
|
||||
} else { //$$$$$$$$$$$$$$$$$$$$$$$ <EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD>!
|
||||
} else { //$$$$$$$$$$$$$$$$$$$$$$$ 테스트 아이템 정보가 있다!
|
||||
TItemTable *tempTable = it_map_itemTable->second;
|
||||
|
||||
item_table->dwVnum = tempTable->dwVnum;
|
||||
@ -777,19 +777,19 @@ bool CClientManager::InitializeItemTable()
|
||||
//_______________________________________________________________________//
|
||||
|
||||
//========================================================================//
|
||||
// 4) (b)[test_map_itemTableByVnum]<EFBFBD><EFBFBD> row<EFBFBD><EFBFBD>, (!)[item_table]<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0>Ѵ<EFBFBD>.
|
||||
// 4) (b)[test_map_itemTableByVnum]의 row중, (!)[item_table]에 없는 것을 추가한다.
|
||||
//========================================================================//
|
||||
test_data.Destroy();
|
||||
if(!test_data.Load("item_proto_test.txt",'\t'))
|
||||
{
|
||||
fprintf(stderr, "item_proto_test.txt <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>\n");
|
||||
SPDLOG_ERROR("item_proto_test.txt Failed to read the file");
|
||||
//return false;
|
||||
} else {
|
||||
test_data.Next(); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ο<EFBFBD> <20>Ѿ<D1BE><EEB0A1>.
|
||||
test_data.Next(); //설명 로우 넘어가기.
|
||||
|
||||
while (test_data.Next()) //<EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ⱦ<C8BE><EEB3AA><EFBFBD><EFBFBD>,<2C><><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0>Ѵ<EFBFBD>.
|
||||
while (test_data.Next()) //테스트 데이터 각각을 훑어나가며,새로운 것을 추가한다.
|
||||
{
|
||||
//<EFBFBD>ߺ<EFBFBD><EFBFBD>Ǵ<EFBFBD> <20>κ<EFBFBD><CEBA≯<EFBFBD> <20>Ѿ<D1BE><EEB0A3>.
|
||||
//중복되는 부분이면 넘어간다.
|
||||
set<int>::iterator itVnum;
|
||||
itVnum=vnumSet.find(atoi(test_data.AsStringByIndex(0)));
|
||||
if (itVnum != vnumSet.end()) {
|
||||
@ -798,7 +798,7 @@ bool CClientManager::InitializeItemTable()
|
||||
|
||||
if (!Set_Proto_Item_Table(item_table, test_data, localMap))
|
||||
{
|
||||
fprintf(stderr, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.\n");
|
||||
SPDLOG_ERROR("Item proto table setup failed.");
|
||||
}
|
||||
|
||||
|
||||
@ -823,7 +823,7 @@ bool CClientManager::InitializeItemTable()
|
||||
{
|
||||
TItemTable * item_table = &(*(it++));
|
||||
|
||||
sys_log(1, "ITEM: #%-5lu %-24s %-24s VAL: %ld %ld %ld %ld %ld %ld WEAR %lu ANTI %lu IMMUNE %lu REFINE %lu REFINE_SET %u MAGIC_PCT %u",
|
||||
SPDLOG_TRACE("ITEM: #{:<5} {:24} {:24} VAL: {} {} {} {} {} {} WEAR {} ANTI {} IMMUNE {} REFINE {} REFINE_SET {} MAGIC_PCT {}",
|
||||
item_table->dwVnum,
|
||||
item_table->szName,
|
||||
item_table->szLocaleName,
|
||||
@ -865,13 +865,13 @@ bool CClientManager::InitializeSkillTable()
|
||||
|
||||
if (!pRes->uiNumRows)
|
||||
{
|
||||
sys_err("no result from skill_proto");
|
||||
SPDLOG_ERROR("no result from skill_proto");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!m_vec_skillTable.empty())
|
||||
{
|
||||
sys_log(0, "RELOAD: skill_proto");
|
||||
SPDLOG_DEBUG("RELOAD: skill_proto");
|
||||
m_vec_skillTable.clear();
|
||||
}
|
||||
|
||||
@ -929,7 +929,7 @@ bool CClientManager::InitializeSkillTable()
|
||||
str_to_number(t.bSkillAttrType, data[col++]);
|
||||
str_to_number(t.dwTargetRange, data[col++]);
|
||||
|
||||
sys_log(0, "SKILL: #%d %s flag %u point %s affect %u cooldown %s", t.dwVnum, t.szName, t.dwFlag, t.szPointOn, t.dwAffectFlag, t.szCooldownPoly);
|
||||
SPDLOG_TRACE("SKILL: #{} {} flag {} point {} affect {} cooldown {}", t.dwVnum, t.szName, t.dwFlag, t.szPointOn, t.dwAffectFlag, t.szCooldownPoly);
|
||||
|
||||
m_vec_skillTable.push_back(t);
|
||||
}
|
||||
@ -961,7 +961,7 @@ bool CClientManager::InitializeBanwordTable()
|
||||
}
|
||||
}
|
||||
|
||||
sys_log(0, "BANWORD: total %d", m_vec_banwordTable.size());
|
||||
SPDLOG_DEBUG("BANWORD: total {}", m_vec_banwordTable.size());
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -977,13 +977,13 @@ bool CClientManager::InitializeItemAttrTable()
|
||||
|
||||
if (!pRes->uiNumRows)
|
||||
{
|
||||
sys_err("no result from item_attr");
|
||||
SPDLOG_ERROR("no result from item_attr");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!m_vec_itemAttrTable.empty())
|
||||
{
|
||||
sys_log(0, "RELOAD: item_attr");
|
||||
SPDLOG_DEBUG("RELOAD: item_attr");
|
||||
m_vec_itemAttrTable.clear();
|
||||
}
|
||||
|
||||
@ -1016,7 +1016,7 @@ bool CClientManager::InitializeItemAttrTable()
|
||||
str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_SHIELD], data[col++]);
|
||||
str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_EAR], data[col++]);
|
||||
|
||||
sys_log(0, "ITEM_ATTR: %-20s %4lu { %3d %3d %3d %3d %3d } { %d %d %d %d %d %d %d }",
|
||||
SPDLOG_TRACE("ITEM_ATTR: {:20} {:4} ( {:3} {:3} {:3} {:3} {:3} ) ( {} {} {} {} {} {} {} )",
|
||||
t.szApply,
|
||||
t.dwProb,
|
||||
t.lValues[0],
|
||||
@ -1051,13 +1051,13 @@ bool CClientManager::InitializeItemRareTable()
|
||||
|
||||
if (!pRes->uiNumRows)
|
||||
{
|
||||
sys_err("no result from item_attr_rare");
|
||||
SPDLOG_ERROR("no result from item_attr_rare");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!m_vec_itemRareTable.empty())
|
||||
{
|
||||
sys_log(0, "RELOAD: item_attr_rare");
|
||||
SPDLOG_DEBUG("RELOAD: item_attr_rare");
|
||||
m_vec_itemRareTable.clear();
|
||||
}
|
||||
|
||||
@ -1090,7 +1090,7 @@ bool CClientManager::InitializeItemRareTable()
|
||||
str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_SHIELD], data[col++]);
|
||||
str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_EAR], data[col++]);
|
||||
|
||||
sys_log(0, "ITEM_RARE: %-20s %4lu { %3d %3d %3d %3d %3d } { %d %d %d %d %d %d %d }",
|
||||
SPDLOG_TRACE("ITEM_RARE: {:20} {:4} ( {:3} {:3} {:3} {:3} {:3} ) ( {} {} {} {} {} {} {} )",
|
||||
t.szApply,
|
||||
t.dwProb,
|
||||
t.lValues[0],
|
||||
@ -1129,7 +1129,7 @@ bool CClientManager::InitializeLandTable()
|
||||
|
||||
if (!m_vec_kLandTable.empty())
|
||||
{
|
||||
sys_log(0, "RELOAD: land");
|
||||
SPDLOG_DEBUG("RELOAD: land");
|
||||
m_vec_kLandTable.clear();
|
||||
}
|
||||
|
||||
@ -1156,7 +1156,7 @@ bool CClientManager::InitializeLandTable()
|
||||
str_to_number(t.bGuildLevelLimit, data[col++]);
|
||||
str_to_number(t.dwPrice, data[col++]);
|
||||
|
||||
sys_log(0, "LAND: %lu map %-4ld %7ldx%-7ld w %-4ld h %-4ld", t.dwID, t.lMapIndex, t.x, t.y, t.width, t.height);
|
||||
SPDLOG_TRACE("LAND: {} map {:<4} {:7}x{:<7} w {:<4} h {:<4}", t.dwID, t.lMapIndex, t.x, t.y, t.width, t.height);
|
||||
|
||||
m_vec_kLandTable.push_back(t);
|
||||
}
|
||||
@ -1232,7 +1232,7 @@ bool CClientManager::InitializeObjectProto()
|
||||
|
||||
if (!m_vec_kObjectProto.empty())
|
||||
{
|
||||
sys_log(0, "RELOAD: object_proto");
|
||||
SPDLOG_DEBUG("RELOAD: object_proto");
|
||||
m_vec_kObjectProto.clear();
|
||||
}
|
||||
|
||||
@ -1280,7 +1280,7 @@ bool CClientManager::InitializeObjectProto()
|
||||
t.lNPCY = std::max(t.lRegion[1], t.lRegion[3])+300;
|
||||
// END_OF_ADD_BUILDING_NPC
|
||||
|
||||
sys_log(0, "OBJ_PROTO: vnum %lu price %lu mat %lu %lu",
|
||||
SPDLOG_TRACE("OBJ_PROTO: vnum {} price {} mat {} {}",
|
||||
t.dwVnum, t.dwPrice, t.kMaterials[0].dwItemVnum, t.kMaterials[0].dwCount);
|
||||
|
||||
m_vec_kObjectProto.push_back(t);
|
||||
@ -1301,7 +1301,7 @@ bool CClientManager::InitializeObjectTable()
|
||||
|
||||
if (!m_map_pkObjectTable.empty())
|
||||
{
|
||||
sys_log(0, "RELOAD: object");
|
||||
SPDLOG_DEBUG("RELOAD: object");
|
||||
m_map_pkObjectTable.clear();
|
||||
}
|
||||
|
||||
@ -1327,7 +1327,7 @@ bool CClientManager::InitializeObjectTable()
|
||||
str_to_number(k->zRot, data[col++]);
|
||||
str_to_number(k->lLife, data[col++]);
|
||||
|
||||
sys_log(0, "OBJ: %lu vnum %lu map %-4ld %7ldx%-7ld life %ld",
|
||||
SPDLOG_DEBUG("OBJ: {} vnum {} map {:<4} {:7}x{:<7} life {}",
|
||||
k->dwID, k->dwVnum, k->lMapIndex, k->x, k->y, k->lLife);
|
||||
|
||||
m_map_pkObjectTable.insert(std::make_pair(k->dwID, k));
|
||||
|
@ -21,7 +21,7 @@ void CClientManager::LoadEventFlag()
|
||||
TPacketSetEventFlag p;
|
||||
strlcpy(p.szFlagName, row[0], sizeof(p.szFlagName));
|
||||
str_to_number(p.lValue, row[1]);
|
||||
sys_log(0, "EventFlag Load %s %d", p.szFlagName, p.lValue);
|
||||
SPDLOG_DEBUG("EventFlag Load {} {}", p.szFlagName, p.lValue);
|
||||
m_map_lEventFlag.insert(std::make_pair(std::string(p.szFlagName), p.lValue));
|
||||
ForwardPacket(HEADER_DG_SET_EVENT_FLAG, &p, sizeof(TPacketSetEventFlag));
|
||||
}
|
||||
@ -56,10 +56,10 @@ void CClientManager::SetEventFlag(TPacketSetEventFlag* p)
|
||||
|
||||
//CDBManager::instance().ReturnQuery(szQuery, QID_QUEST_SAVE, 0, NULL);
|
||||
CDBManager::instance().AsyncQuery(szQuery);
|
||||
sys_log(0, "HEADER_GD_SET_EVENT_FLAG : Changed CClientmanager::SetEventFlag(%s %d) ", p->szFlagName, p->lValue);
|
||||
SPDLOG_DEBUG("HEADER_GD_SET_EVENT_FLAG : Changed CClientmanager::SetEventFlag({} {}) ", p->szFlagName, p->lValue);
|
||||
return;
|
||||
}
|
||||
sys_log(0, "HEADER_GD_SET_EVENT_FLAG : No Changed CClientmanager::SetEventFlag(%s %d) ", p->szFlagName, p->lValue);
|
||||
SPDLOG_DEBUG("HEADER_GD_SET_EVENT_FLAG : No Changed CClientmanager::SetEventFlag({} {}) ", p->szFlagName, p->lValue);
|
||||
}
|
||||
|
||||
void CClientManager::SendEventFlagsOnSetup(CPeer* peer)
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
void CClientManager::GuildCreate(CPeer * peer, DWORD dwGuildID)
|
||||
{
|
||||
sys_log(0, "GuildCreate %u", dwGuildID);
|
||||
SPDLOG_DEBUG("GuildCreate {}", dwGuildID);
|
||||
ForwardPacket(HEADER_DG_GUILD_LOAD, &dwGuildID, sizeof(DWORD));
|
||||
|
||||
CGuildManager::instance().Load(dwGuildID);
|
||||
@ -18,14 +18,14 @@ void CClientManager::GuildCreate(CPeer * peer, DWORD dwGuildID)
|
||||
|
||||
void CClientManager::GuildChangeGrade(CPeer* peer, TPacketGuild* p)
|
||||
{
|
||||
sys_log(0, "GuildChangeGrade %u %u", p->dwGuild, p->dwInfo);
|
||||
SPDLOG_DEBUG("GuildChangeGrade {} {}", p->dwGuild, p->dwInfo);
|
||||
ForwardPacket(HEADER_DG_GUILD_CHANGE_GRADE, p, sizeof(TPacketGuild));
|
||||
}
|
||||
|
||||
void CClientManager::GuildAddMember(CPeer* peer, TPacketGDGuildAddMember * p)
|
||||
{
|
||||
CGuildManager::instance().TouchGuild(p->dwGuild);
|
||||
sys_log(0, "GuildAddMember %u %u", p->dwGuild, p->dwPID);
|
||||
SPDLOG_DEBUG("GuildAddMember {} {}", p->dwGuild, p->dwPID);
|
||||
|
||||
char szQuery[512];
|
||||
|
||||
@ -42,7 +42,7 @@ void CClientManager::GuildAddMember(CPeer* peer, TPacketGDGuildAddMember * p)
|
||||
|
||||
if (pmsg->Get()->uiNumRows == 0)
|
||||
{
|
||||
sys_err("Query failed when getting guild member data %s", pmsg->stQuery.c_str());
|
||||
SPDLOG_ERROR("Query failed when getting guild member data {}", pmsg->stQuery.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
@ -67,7 +67,7 @@ void CClientManager::GuildAddMember(CPeer* peer, TPacketGDGuildAddMember * p)
|
||||
|
||||
void CClientManager::GuildRemoveMember(CPeer* peer, TPacketGuild* p)
|
||||
{
|
||||
sys_log(0, "GuildRemoveMember %u %u", p->dwGuild, p->dwInfo);
|
||||
SPDLOG_DEBUG("GuildRemoveMember {} {}", p->dwGuild, p->dwInfo);
|
||||
|
||||
char szQuery[512];
|
||||
snprintf(szQuery, sizeof(szQuery), "DELETE FROM guild_member%s WHERE pid=%u and guild_id=%u", GetTablePostfix(), p->dwInfo, p->dwGuild);
|
||||
@ -81,25 +81,25 @@ void CClientManager::GuildRemoveMember(CPeer* peer, TPacketGuild* p)
|
||||
|
||||
void CClientManager::GuildSkillUpdate(CPeer* peer, TPacketGuildSkillUpdate* p)
|
||||
{
|
||||
sys_log(0, "GuildSkillUpdate %d", p->amount);
|
||||
SPDLOG_DEBUG("GuildSkillUpdate {}", p->amount);
|
||||
ForwardPacket(HEADER_DG_GUILD_SKILL_UPDATE, p, sizeof(TPacketGuildSkillUpdate));
|
||||
}
|
||||
|
||||
void CClientManager::GuildExpUpdate(CPeer* peer, TPacketGuildExpUpdate* p)
|
||||
{
|
||||
sys_log(0, "GuildExpUpdate %d", p->amount);
|
||||
SPDLOG_DEBUG("GuildExpUpdate {}", p->amount);
|
||||
ForwardPacket(HEADER_DG_GUILD_EXP_UPDATE, p, sizeof(TPacketGuildExpUpdate), 0, peer);
|
||||
}
|
||||
|
||||
void CClientManager::GuildChangeMemberData(CPeer* peer, TPacketGuildChangeMemberData* p)
|
||||
{
|
||||
sys_log(0, "GuildChangeMemberData %u %u %d %d", p->pid, p->offer, p->level, p->grade);
|
||||
SPDLOG_DEBUG("GuildChangeMemberData {} {} {} {}", p->pid, p->offer, p->level, p->grade);
|
||||
ForwardPacket(HEADER_DG_GUILD_CHANGE_MEMBER_DATA, p, sizeof(TPacketGuildChangeMemberData), 0, peer);
|
||||
}
|
||||
|
||||
void CClientManager::GuildDisband(CPeer* peer, TPacketGuild* p)
|
||||
{
|
||||
sys_log(0, "GuildDisband %u", p->dwGuild);
|
||||
SPDLOG_DEBUG("GuildDisband {}", p->dwGuild);
|
||||
|
||||
char szQuery[512];
|
||||
|
||||
@ -126,13 +126,13 @@ const char* __GetWarType(int n)
|
||||
switch (n)
|
||||
{
|
||||
case 0 :
|
||||
return "<EFBFBD>п<EFBFBD>";
|
||||
return "\xEF\xBF\xBD\xD0\xBF\xEF\xBF\xBD"; // 패왕
|
||||
case 1 :
|
||||
return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
||||
return "\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBD"; // 맹장
|
||||
case 2 :
|
||||
return "<EFBFBD><EFBFBD>ȣ";
|
||||
return "\xEF\xBF\xBD\xEF\xBF\xBD\xC8\xA3"; // 수호
|
||||
default :
|
||||
return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȣ";
|
||||
return "\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBD\x20\xEF\xBF\xBD\xEF\xBF\xBD\xC8\xA3"; // 없는 번호
|
||||
}
|
||||
}
|
||||
|
||||
@ -141,12 +141,12 @@ void CClientManager::GuildWar(CPeer* peer, TPacketGuildWar* p)
|
||||
switch (p->bWar)
|
||||
{
|
||||
case GUILD_WAR_SEND_DECLARE:
|
||||
sys_log(0, "GuildWar: GUILD_WAR_SEND_DECLARE type(%s) guild(%d - %d)", __GetWarType(p->bType), p->dwGuildFrom, p->dwGuildTo);
|
||||
SPDLOG_DEBUG("GuildWar: GUILD_WAR_SEND_DECLARE type({}) guild({} - {})", __GetWarType(p->bType), p->dwGuildFrom, p->dwGuildTo);
|
||||
CGuildManager::instance().AddDeclare(p->bType, p->dwGuildFrom, p->dwGuildTo);
|
||||
break;
|
||||
|
||||
case GUILD_WAR_REFUSE:
|
||||
sys_log(0, "GuildWar: GUILD_WAR_REFUSE type(%s) guild(%d - %d)", __GetWarType(p->bType), p->dwGuildFrom, p->dwGuildTo);
|
||||
SPDLOG_DEBUG("GuildWar: GUILD_WAR_REFUSE type({}) guild({} - {})", __GetWarType(p->bType), p->dwGuildFrom, p->dwGuildTo);
|
||||
CGuildManager::instance().RemoveDeclare(p->dwGuildFrom, p->dwGuildTo);
|
||||
break;
|
||||
/*
|
||||
@ -160,10 +160,10 @@ void CClientManager::GuildWar(CPeer* peer, TPacketGuildWar* p)
|
||||
*/
|
||||
|
||||
case GUILD_WAR_WAIT_START:
|
||||
sys_log(0, "GuildWar: GUILD_WAR_WAIT_START type(%s) guild(%d - %d)", __GetWarType(p->bType), p->dwGuildFrom, p->dwGuildTo);
|
||||
case GUILD_WAR_RESERVE: // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
SPDLOG_DEBUG("GuildWar: GUILD_WAR_WAIT_START type({}) guild({} - {})", __GetWarType(p->bType), p->dwGuildFrom, p->dwGuildTo);
|
||||
case GUILD_WAR_RESERVE: // 길드전 예약
|
||||
if (p->bWar != GUILD_WAR_WAIT_START)
|
||||
sys_log(0, "GuildWar: GUILD_WAR_RESERVE type(%s) guild(%d - %d)", __GetWarType(p->bType), p->dwGuildFrom, p->dwGuildTo);
|
||||
SPDLOG_DEBUG("GuildWar: GUILD_WAR_RESERVE type({}) guild({} - {})", __GetWarType(p->bType), p->dwGuildFrom, p->dwGuildTo);
|
||||
CGuildManager::instance().RemoveDeclare(p->dwGuildFrom, p->dwGuildTo);
|
||||
|
||||
if (!CGuildManager::instance().ReserveWar(p))
|
||||
@ -173,24 +173,24 @@ void CClientManager::GuildWar(CPeer* peer, TPacketGuildWar* p)
|
||||
|
||||
break;
|
||||
|
||||
case GUILD_WAR_ON_WAR: // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ų<EFBFBD><C5B2>. (<28>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD> <20>ٷ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>)
|
||||
sys_log(0, "GuildWar: GUILD_WAR_ON_WAR type(%s) guild(%d - %d)", __GetWarType(p->bType), p->dwGuildFrom, p->dwGuildTo);
|
||||
case GUILD_WAR_ON_WAR: // 길드전을 시작 시킨다. (필드전은 바로 시작 됨)
|
||||
SPDLOG_DEBUG("GuildWar: GUILD_WAR_ON_WAR type({}) guild({} - {})", __GetWarType(p->bType), p->dwGuildFrom, p->dwGuildTo);
|
||||
CGuildManager::instance().RemoveDeclare(p->dwGuildFrom, p->dwGuildTo);
|
||||
CGuildManager::instance().StartWar(p->bType, p->dwGuildFrom, p->dwGuildTo);
|
||||
break;
|
||||
|
||||
case GUILD_WAR_OVER: // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
sys_log(0, "GuildWar: GUILD_WAR_OVER type(%s) guild(%d - %d)", __GetWarType(p->bType), p->dwGuildFrom, p->dwGuildTo);
|
||||
case GUILD_WAR_OVER: // 길드전 정상 종료
|
||||
SPDLOG_DEBUG("GuildWar: GUILD_WAR_OVER type({}) guild({} - {})", __GetWarType(p->bType), p->dwGuildFrom, p->dwGuildTo);
|
||||
CGuildManager::instance().RecvWarOver(p->dwGuildFrom, p->dwGuildTo, p->bType, p->lWarPrice);
|
||||
break;
|
||||
|
||||
case GUILD_WAR_END: // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
sys_log(0, "GuildWar: GUILD_WAR_END type(%s) guild(%d - %d)", __GetWarType(p->bType), p->dwGuildFrom, p->dwGuildTo);
|
||||
case GUILD_WAR_END: // 길드전 비정상 종료
|
||||
SPDLOG_DEBUG("GuildWar: GUILD_WAR_END type({}) guild({} - {})", __GetWarType(p->bType), p->dwGuildFrom, p->dwGuildTo);
|
||||
CGuildManager::instance().RecvWarEnd(p->dwGuildFrom, p->dwGuildTo);
|
||||
return; // NOTE: RecvWarEnd<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ε<EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
|
||||
return; // NOTE: RecvWarEnd에서 패킷을 보내므로 따로 브로드캐스팅 하지 않는다.
|
||||
|
||||
case GUILD_WAR_CANCEL :
|
||||
sys_log(0, "GuildWar: GUILD_WAR_CANCEL type(%s) guild(%d - %d)", __GetWarType(p->bType), p->dwGuildFrom, p->dwGuildTo);
|
||||
SPDLOG_DEBUG("GuildWar: GUILD_WAR_CANCEL type({}) guild({} - {})", __GetWarType(p->bType), p->dwGuildFrom, p->dwGuildTo);
|
||||
CGuildManager::instance().CancelWar(p->dwGuildFrom, p->dwGuildTo);
|
||||
break;
|
||||
}
|
||||
@ -205,20 +205,20 @@ void CClientManager::GuildWarScore(CPeer* peer, TPacketGuildWarScore * p)
|
||||
|
||||
void CClientManager::GuildChangeLadderPoint(TPacketGuildLadderPoint* p)
|
||||
{
|
||||
sys_log(0, "GuildChangeLadderPoint Recv %u %d", p->dwGuild, p->lChange);
|
||||
SPDLOG_DEBUG("GuildChangeLadderPoint Recv {} {}", p->dwGuild, p->lChange);
|
||||
CGuildManager::instance().ChangeLadderPoint(p->dwGuild, p->lChange);
|
||||
}
|
||||
|
||||
void CClientManager::GuildUseSkill(TPacketGuildUseSkill* p)
|
||||
{
|
||||
sys_log(0, "GuildUseSkill Recv %u %d", p->dwGuild, p->dwSkillVnum);
|
||||
SPDLOG_DEBUG("GuildUseSkill Recv {} {}", p->dwGuild, p->dwSkillVnum);
|
||||
CGuildManager::instance().UseSkill(p->dwGuild, p->dwSkillVnum, p->dwCooltime);
|
||||
SendGuildSkillUsable(p->dwGuild, p->dwSkillVnum, false);
|
||||
}
|
||||
|
||||
void CClientManager::SendGuildSkillUsable(DWORD guild_id, DWORD dwSkillVnum, bool bUsable)
|
||||
{
|
||||
sys_log(0, "SendGuildSkillUsable Send %u %d %s", guild_id, dwSkillVnum, bUsable?"true":"false");
|
||||
SPDLOG_DEBUG("SendGuildSkillUsable Send {} {} {}", guild_id, dwSkillVnum, bUsable?"true":"false");
|
||||
|
||||
TPacketGuildSkillUsableChange p;
|
||||
|
||||
|
@ -11,7 +11,6 @@
|
||||
extern std::string g_stLocale;
|
||||
extern bool CreatePlayerTableFromRes(MYSQL_RES * res, TPlayerTable * pkTab);
|
||||
extern int g_test_server;
|
||||
extern int g_log;
|
||||
|
||||
bool CClientManager::InsertLogonAccount(const char * c_pszLogin, DWORD dwHandle, const char * c_pszIP)
|
||||
{
|
||||
@ -49,14 +48,13 @@ bool CClientManager::DeleteLogonAccount(const char * c_pszLogin, DWORD dwHandle)
|
||||
|
||||
if (pkLD->GetConnectedPeerHandle() != dwHandle)
|
||||
{
|
||||
sys_err("%s tried to logout in other peer handle %lu, current handle %lu", szLogin, dwHandle, pkLD->GetConnectedPeerHandle());
|
||||
SPDLOG_ERROR("{} tried to logout in other peer handle {}, current handle {}", szLogin, dwHandle, pkLD->GetConnectedPeerHandle());
|
||||
return false;
|
||||
}
|
||||
|
||||
if (pkLD->IsPlay())
|
||||
{
|
||||
pkLD->SetPlay(false);
|
||||
SendLoginToBilling(pkLD, false);
|
||||
}
|
||||
|
||||
if (pkLD->IsDeleted())
|
||||
@ -87,7 +85,7 @@ void CClientManager::QUERY_LOGIN_BY_KEY(CPeer * pkPeer, DWORD dwHandle, TPacketG
|
||||
|
||||
if (!pkLoginData)
|
||||
{
|
||||
sys_log(0, "LOGIN_BY_KEY key not exist %s %lu", szLogin, p->dwLoginKey);
|
||||
SPDLOG_DEBUG("LOGIN_BY_KEY key not exist {} {}", szLogin, p->dwLoginKey);
|
||||
pkPeer->EncodeReturn(HEADER_DG_LOGIN_NOT_EXIST, dwHandle);
|
||||
return;
|
||||
}
|
||||
@ -96,7 +94,7 @@ void CClientManager::QUERY_LOGIN_BY_KEY(CPeer * pkPeer, DWORD dwHandle, TPacketG
|
||||
|
||||
if (FindLogonAccount(r.login))
|
||||
{
|
||||
sys_log(0, "LOGIN_BY_KEY already login %s %lu", r.login, p->dwLoginKey);
|
||||
SPDLOG_DEBUG("LOGIN_BY_KEY already login {} {}", r.login, p->dwLoginKey);
|
||||
TPacketDGLoginAlready ptog;
|
||||
strlcpy(ptog.szLogin, szLogin, sizeof(ptog.szLogin));
|
||||
pkPeer->EncodeHeader(HEADER_DG_LOGIN_ALREADY, dwHandle, sizeof(TPacketDGLoginAlready));
|
||||
@ -106,7 +104,7 @@ void CClientManager::QUERY_LOGIN_BY_KEY(CPeer * pkPeer, DWORD dwHandle, TPacketG
|
||||
|
||||
if (strcasecmp(r.login, szLogin))
|
||||
{
|
||||
sys_log(0, "LOGIN_BY_KEY login differ %s %lu input %s", r.login, p->dwLoginKey, szLogin);
|
||||
SPDLOG_DEBUG("LOGIN_BY_KEY login differ {} {} input {}", r.login, p->dwLoginKey, szLogin);
|
||||
pkPeer->EncodeReturn(HEADER_DG_LOGIN_NOT_EXIST, dwHandle);
|
||||
return;
|
||||
}
|
||||
@ -115,7 +113,7 @@ void CClientManager::QUERY_LOGIN_BY_KEY(CPeer * pkPeer, DWORD dwHandle, TPacketG
|
||||
{
|
||||
const DWORD * pdwClientKey = pkLoginData->GetClientKey();
|
||||
|
||||
sys_log(0, "LOGIN_BY_KEY client key differ %s %lu %lu %lu %lu, %lu %lu %lu %lu",
|
||||
SPDLOG_DEBUG("LOGIN_BY_KEY client key differ {} {} {} {} {}, {} {} {} {}",
|
||||
r.login,
|
||||
p->adwClientKey[0], p->adwClientKey[1], p->adwClientKey[2], p->adwClientKey[3],
|
||||
pdwClientKey[0], pdwClientKey[1], pdwClientKey[2], pdwClientKey[3]);
|
||||
@ -137,7 +135,7 @@ void CClientManager::QUERY_LOGIN_BY_KEY(CPeer * pkPeer, DWORD dwHandle, TPacketG
|
||||
info->pAccountTable = pkTab;
|
||||
strlcpy(info->ip, p->szIP, sizeof(info->ip));
|
||||
|
||||
sys_log(0, "LOGIN_BY_KEY success %s %lu %s", r.login, p->dwLoginKey, info->ip);
|
||||
SPDLOG_DEBUG("LOGIN_BY_KEY success {} {} {}", r.login, p->dwLoginKey, info->ip);
|
||||
char szQuery[QUERY_MAX_LEN];
|
||||
snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4, empire FROM player_index%s WHERE id=%u", GetTablePostfix(), r.id);
|
||||
CDBManager::instance().ReturnQuery(szQuery, QID_LOGIN_BY_KEY, pkPeer->GetHandle(), info);
|
||||
@ -164,11 +162,11 @@ void CClientManager::RESULT_LOGIN_BY_KEY(CPeer * peer, SQLMsg * msg)
|
||||
snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4, empire FROM player_index%s WHERE id=%u", GetTablePostfix(), account_id);
|
||||
std::unique_ptr<SQLMsg> pMsg(CDBManager::instance().DirectQuery(szQuery, SQL_PLAYER));
|
||||
|
||||
sys_log(0, "RESULT_LOGIN_BY_KEY FAIL player_index's NULL : ID:%d", account_id);
|
||||
SPDLOG_DEBUG("RESULT_LOGIN_BY_KEY FAIL player_index's NULL : ID:{}", account_id);
|
||||
|
||||
if (pMsg->Get()->uiNumRows == 0)
|
||||
{
|
||||
sys_log(0, "RESULT_LOGIN_BY_KEY FAIL player_index's NULL : ID:%d", account_id);
|
||||
SPDLOG_DEBUG("RESULT_LOGIN_BY_KEY FAIL player_index's NULL : ID:{}", account_id);
|
||||
|
||||
// PLAYER_INDEX_CREATE_BUG_FIX
|
||||
//snprintf(szQuery, sizeof(szQuery), "INSERT IGNORE INTO player_index%s (id) VALUES(%lu)", GetTablePostfix(), info->pAccountTable->id);
|
||||
@ -231,7 +229,7 @@ TAccountTable * CreateAccountTableFromRes(MYSQL_RES * res)
|
||||
TAccountTable * pkTab = new TAccountTable;
|
||||
memset(pkTab, 0, sizeof(TAccountTable));
|
||||
|
||||
// ù<EFBFBD><EFBFBD>° <20>÷<EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD> (JOIN QUERY<52><59> <20><><EFBFBD><EFBFBD> <20><> <20><>)
|
||||
// 첫번째 컬럼 것만 참고 한다 (JOIN QUERY를 위한 것 임)
|
||||
strlcpy(input_pwd, row[col++], sizeof(input_pwd));
|
||||
str_to_number(pkTab->id, row[col++]);
|
||||
strlcpy(pkTab->login, row[col++], sizeof(pkTab->login));
|
||||
@ -332,14 +330,14 @@ void CreateAccountPlayerDataFromRes(MYSQL_RES * pRes, TAccountTable * pkTab)
|
||||
str_to_number(pkTab->players[j].bChangeName, row[col++]);
|
||||
}
|
||||
|
||||
sys_log(0, "%s %lu %lu hair %u",
|
||||
SPDLOG_DEBUG("{} {} {} hair {}",
|
||||
pkTab->players[j].szName, pkTab->players[j].x, pkTab->players[j].y, pkTab->players[j].wHairPart);
|
||||
break;
|
||||
}
|
||||
}
|
||||
/*
|
||||
if (j == PLAYER_PER_ACCOUNT)
|
||||
sys_err("cannot find player_id on this account (login: %s id %lu account %lu %lu %lu)",
|
||||
SPDLOG_ERROR("cannot find player_id on this account (login: {} id {} account {} {} {})",
|
||||
pkTab->login, player_id,
|
||||
pkTab->players[0].dwID,
|
||||
pkTab->players[1].dwID,
|
||||
@ -355,10 +353,10 @@ void CClientManager::RESULT_LOGIN(CPeer * peer, SQLMsg * msg)
|
||||
|
||||
if (info->account_index == 0)
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>?
|
||||
// 계정이 없네?
|
||||
if (msg->Get()->uiNumRows == 0)
|
||||
{
|
||||
sys_log(0, "RESULT_LOGIN: no account");
|
||||
SPDLOG_DEBUG("RESULT_LOGIN: no account");
|
||||
peer->EncodeHeader(HEADER_DG_LOGIN_NOT_EXIST, info->dwHandle, 0);
|
||||
delete info;
|
||||
return;
|
||||
@ -368,7 +366,7 @@ void CClientManager::RESULT_LOGIN(CPeer * peer, SQLMsg * msg)
|
||||
|
||||
if (!info->pAccountTable)
|
||||
{
|
||||
sys_log(0, "RESULT_LOGIN: no account : WRONG_PASSWD");
|
||||
SPDLOG_DEBUG("RESULT_LOGIN: no account : WRONG_PASSWD");
|
||||
peer->EncodeReturn(HEADER_DG_LOGIN_WRONG_PASSWD, info->dwHandle);
|
||||
delete info;
|
||||
}
|
||||
@ -397,17 +395,17 @@ void CClientManager::RESULT_LOGIN(CPeer * peer, SQLMsg * msg)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!info->pAccountTable) // <EFBFBD>̷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;;
|
||||
if (!info->pAccountTable) // 이럴리는 없겠지만;;
|
||||
{
|
||||
peer->EncodeReturn(HEADER_DG_LOGIN_WRONG_PASSWD, info->dwHandle);
|
||||
delete info;
|
||||
return;
|
||||
}
|
||||
|
||||
// <EFBFBD>ٸ<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD> <20>̹<EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> <20>ع<EFBFBD><D8B9>ȴٸ<C8B4>.. <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ߴٰ<DFB4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
// 다른 컨넥션이 이미 로그인 해버렸다면.. 이미 접속했다고 보내야 한다.
|
||||
if (!InsertLogonAccount(info->pAccountTable->login, peer->GetHandle(), info->ip))
|
||||
{
|
||||
sys_log(0, "RESULT_LOGIN: already logon %s", info->pAccountTable->login);
|
||||
SPDLOG_DEBUG("RESULT_LOGIN: already logon {}", info->pAccountTable->login);
|
||||
|
||||
TPacketDGLoginAlready p;
|
||||
strlcpy(p.szLogin, info->pAccountTable->login, sizeof(p.szLogin));
|
||||
@ -417,7 +415,7 @@ void CClientManager::RESULT_LOGIN(CPeer * peer, SQLMsg * msg)
|
||||
}
|
||||
else
|
||||
{
|
||||
sys_log(0, "RESULT_LOGIN: login success %s rows: %lu", info->pAccountTable->login, msg->Get()->uiNumRows);
|
||||
SPDLOG_DEBUG("RESULT_LOGIN: login success {} rows: {}", info->pAccountTable->login, msg->Get()->uiNumRows);
|
||||
|
||||
if (msg->Get()->uiNumRows > 0)
|
||||
CreateAccountPlayerDataFromRes(msg->Get()->pSQLResult, info->pAccountTable);
|
||||
@ -456,23 +454,20 @@ void CClientManager::QUERY_LOGOUT(CPeer * peer, DWORD dwHandle,const char * data
|
||||
{
|
||||
if (pLoginData->GetAccountRef().players[n].dwID == 0)
|
||||
{
|
||||
if (g_test_server)
|
||||
sys_log(0, "LOGOUT %s %d", packet->login, pLoginData->GetAccountRef().players[n].dwID);
|
||||
SPDLOG_TRACE("LOGOUT {} {}", packet->login, pLoginData->GetAccountRef().players[n].dwID);
|
||||
continue;
|
||||
}
|
||||
|
||||
pid[n] = pLoginData->GetAccountRef().players[n].dwID;
|
||||
|
||||
if (g_log)
|
||||
sys_log(0, "LOGOUT InsertLogoutPlayer %s %d", packet->login, pid[n]);
|
||||
SPDLOG_TRACE("LOGOUT InsertLogoutPlayer {} {}", packet->login, pid[n]);
|
||||
|
||||
InsertLogoutPlayer(pid[n]);
|
||||
}
|
||||
|
||||
if (DeleteLogonAccount(packet->login, peer->GetHandle()))
|
||||
{
|
||||
if (g_log)
|
||||
sys_log(0, "LOGOUT %s ", packet->login);
|
||||
SPDLOG_TRACE("LOGOUT {} ", packet->login);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -13,11 +13,11 @@ void CClientManager::QUERY_PARTY_CREATE(CPeer* peer, TPacketPartyCreate* p)
|
||||
{
|
||||
pm.insert(make_pair(p->dwLeaderPID, TPartyMember()));
|
||||
ForwardPacket(HEADER_DG_PARTY_CREATE, p, sizeof(TPacketPartyCreate), peer->GetChannel(), peer);
|
||||
sys_log(0, "PARTY Create [%lu]", p->dwLeaderPID);
|
||||
SPDLOG_DEBUG("PARTY Create [{}]", p->dwLeaderPID);
|
||||
}
|
||||
else
|
||||
{
|
||||
sys_err("PARTY Create - Already exists [%lu]", p->dwLeaderPID);
|
||||
SPDLOG_ERROR("PARTY Create - Already exists [{}]", p->dwLeaderPID);
|
||||
}
|
||||
}
|
||||
|
||||
@ -28,13 +28,13 @@ void CClientManager::QUERY_PARTY_DELETE(CPeer* peer, TPacketPartyDelete* p)
|
||||
|
||||
if (it == pm.end())
|
||||
{
|
||||
sys_err("PARTY Delete - Non exists [%lu]", p->dwLeaderPID);
|
||||
SPDLOG_ERROR("PARTY Delete - Non exists [{}]", p->dwLeaderPID);
|
||||
return;
|
||||
}
|
||||
|
||||
pm.erase(it);
|
||||
ForwardPacket(HEADER_DG_PARTY_DELETE, p, sizeof(TPacketPartyDelete), peer->GetChannel(), peer);
|
||||
sys_log(0, "PARTY Delete [%lu]", p->dwLeaderPID);
|
||||
SPDLOG_DEBUG("PARTY Delete [{}]", p->dwLeaderPID);
|
||||
}
|
||||
|
||||
void CClientManager::QUERY_PARTY_ADD(CPeer* peer, TPacketPartyAdd* p)
|
||||
@ -44,7 +44,7 @@ void CClientManager::QUERY_PARTY_ADD(CPeer* peer, TPacketPartyAdd* p)
|
||||
|
||||
if (it == pm.end())
|
||||
{
|
||||
sys_err("PARTY Add - Non exists [%lu]", p->dwLeaderPID);
|
||||
SPDLOG_ERROR("PARTY Add - Non exists [{}]", p->dwLeaderPID);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -52,10 +52,10 @@ void CClientManager::QUERY_PARTY_ADD(CPeer* peer, TPacketPartyAdd* p)
|
||||
{
|
||||
it->second.insert(std::make_pair(p->dwPID, TPartyInfo()));
|
||||
ForwardPacket(HEADER_DG_PARTY_ADD, p, sizeof(TPacketPartyAdd), peer->GetChannel(), peer);
|
||||
sys_log(0, "PARTY Add [%lu] to [%lu]", p->dwPID, p->dwLeaderPID);
|
||||
SPDLOG_DEBUG("PARTY Add [{}] to [{}]", p->dwPID, p->dwLeaderPID);
|
||||
}
|
||||
else
|
||||
sys_err("PARTY Add - Already [%lu] in party [%lu]", p->dwPID, p->dwLeaderPID);
|
||||
SPDLOG_ERROR("PARTY Add - Already [{}] in party [{}]", p->dwPID, p->dwLeaderPID);
|
||||
}
|
||||
|
||||
void CClientManager::QUERY_PARTY_REMOVE(CPeer* peer, TPacketPartyRemove* p)
|
||||
@ -65,7 +65,7 @@ void CClientManager::QUERY_PARTY_REMOVE(CPeer* peer, TPacketPartyRemove* p)
|
||||
|
||||
if (it == pm.end())
|
||||
{
|
||||
sys_err("PARTY Remove - Non exists [%lu] cannot remove [%lu]",p->dwLeaderPID, p->dwPID);
|
||||
SPDLOG_ERROR("PARTY Remove - Non exists [{}] cannot remove [{}]",p->dwLeaderPID, p->dwPID);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -75,10 +75,10 @@ void CClientManager::QUERY_PARTY_REMOVE(CPeer* peer, TPacketPartyRemove* p)
|
||||
{
|
||||
it->second.erase(pit);
|
||||
ForwardPacket(HEADER_DG_PARTY_REMOVE, p, sizeof(TPacketPartyRemove), peer->GetChannel(), peer);
|
||||
sys_log(0, "PARTY Remove [%lu] to [%lu]", p->dwPID, p->dwLeaderPID);
|
||||
SPDLOG_DEBUG("PARTY Remove [{}] to [{}]", p->dwPID, p->dwLeaderPID);
|
||||
}
|
||||
else
|
||||
sys_err("PARTY Remove - Cannot find [%lu] in party [%lu]", p->dwPID, p->dwLeaderPID);
|
||||
SPDLOG_ERROR("PARTY Remove - Cannot find [{}] in party [{}]", p->dwPID, p->dwLeaderPID);
|
||||
}
|
||||
|
||||
void CClientManager::QUERY_PARTY_STATE_CHANGE(CPeer* peer, TPacketPartyStateChange* p)
|
||||
@ -88,7 +88,7 @@ void CClientManager::QUERY_PARTY_STATE_CHANGE(CPeer* peer, TPacketPartyStateChan
|
||||
|
||||
if (it == pm.end())
|
||||
{
|
||||
sys_err("PARTY StateChange - Non exists [%lu] cannot state change [%lu]",p->dwLeaderPID, p->dwPID);
|
||||
SPDLOG_ERROR("PARTY StateChange - Non exists [{}] cannot state change [{}]",p->dwLeaderPID, p->dwPID);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -96,7 +96,7 @@ void CClientManager::QUERY_PARTY_STATE_CHANGE(CPeer* peer, TPacketPartyStateChan
|
||||
|
||||
if (pit == it->second.end())
|
||||
{
|
||||
sys_err("PARTY StateChange - Cannot find [%lu] in party [%lu]", p->dwPID, p->dwLeaderPID);
|
||||
SPDLOG_ERROR("PARTY StateChange - Cannot find [{}] in party [{}]", p->dwPID, p->dwLeaderPID);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -106,7 +106,7 @@ void CClientManager::QUERY_PARTY_STATE_CHANGE(CPeer* peer, TPacketPartyStateChan
|
||||
pit->second.bRole = 0;
|
||||
|
||||
ForwardPacket(HEADER_DG_PARTY_STATE_CHANGE, p, sizeof(TPacketPartyStateChange), peer->GetChannel(), peer);
|
||||
sys_log(0, "PARTY StateChange [%lu] at [%lu] from %d %d",p->dwPID, p->dwLeaderPID, p->bRole, p->bFlag);
|
||||
SPDLOG_DEBUG("PARTY StateChange [{}] at [{}] from {} {}",p->dwPID, p->dwLeaderPID, p->bRole, p->bFlag);
|
||||
}
|
||||
|
||||
void CClientManager::QUERY_PARTY_SET_MEMBER_LEVEL(CPeer* peer, TPacketPartySetMemberLevel* p)
|
||||
@ -116,7 +116,7 @@ void CClientManager::QUERY_PARTY_SET_MEMBER_LEVEL(CPeer* peer, TPacketPartySetMe
|
||||
|
||||
if (it == pm.end())
|
||||
{
|
||||
sys_err("PARTY SetMemberLevel - Non exists [%lu] cannot level change [%lu]",p->dwLeaderPID, p->dwPID);
|
||||
SPDLOG_ERROR("PARTY SetMemberLevel - Non exists [{}] cannot level change [{}]",p->dwLeaderPID, p->dwPID);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -124,12 +124,12 @@ void CClientManager::QUERY_PARTY_SET_MEMBER_LEVEL(CPeer* peer, TPacketPartySetMe
|
||||
|
||||
if (pit == it->second.end())
|
||||
{
|
||||
sys_err("PARTY SetMemberLevel - Cannot find [%lu] in party [%lu]", p->dwPID, p->dwLeaderPID);
|
||||
SPDLOG_ERROR("PARTY SetMemberLevel - Cannot find [{}] in party [{}]", p->dwPID, p->dwLeaderPID);
|
||||
return;
|
||||
}
|
||||
|
||||
pit->second.bLevel = p->bLevel;
|
||||
|
||||
ForwardPacket(HEADER_DG_PARTY_SET_MEMBER_LEVEL, p, sizeof(TPacketPartySetMemberLevel), peer->GetChannel());
|
||||
sys_log(0, "PARTY SetMemberLevel pid [%lu] level %d",p->dwPID, p->bLevel);
|
||||
SPDLOG_DEBUG("PARTY SetMemberLevel pid [{}] level {}",p->dwPID, p->bLevel);
|
||||
}
|
||||
|
@ -6,14 +6,10 @@
|
||||
#include "Main.h"
|
||||
#include "QID.h"
|
||||
#include "ItemAwardManager.h"
|
||||
#include "HB.h"
|
||||
#include "Cache.h"
|
||||
|
||||
extern bool g_bHotBackup;
|
||||
|
||||
extern std::string g_stLocale;
|
||||
extern int g_test_server;
|
||||
extern int g_log;
|
||||
|
||||
//
|
||||
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
@ -32,7 +28,7 @@ bool CreateItemTableFromRes(MYSQL_RES * res, std::vector<TPlayerItem> * pVec, DW
|
||||
|
||||
int rows;
|
||||
|
||||
if ((rows = mysql_num_rows(res)) <= 0) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if ((rows = mysql_num_rows(res)) <= 0) // 데이터 없음
|
||||
{
|
||||
pVec->clear();
|
||||
return true;
|
||||
@ -159,7 +155,7 @@ size_t CreatePlayerSaveQuery(char * pszQuery, size_t querySize, TPlayerTable * p
|
||||
pkTab->horse.sStamina,
|
||||
pkTab->horse_skill_point);
|
||||
|
||||
// Binary <EFBFBD><EFBFBD> <20>ٲٱ<D9B2> <20><><EFBFBD><EFBFBD> <20>ӽ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// Binary 로 바꾸기 위한 임시 공간
|
||||
char text[8192 + 1];
|
||||
|
||||
CDBManager::instance().EscapeString(text, pkTab->skills, sizeof(pkTab->skills));
|
||||
@ -196,9 +192,6 @@ void CClientManager::PutPlayerCache(TPlayerTable * pNew)
|
||||
m_map_playerCache.insert(TPlayerTableCacheMap::value_type(pNew->id, c));
|
||||
}
|
||||
|
||||
if (g_bHotBackup)
|
||||
PlayerHB::instance().Put(pNew->id);
|
||||
|
||||
c->Put(pNew);
|
||||
}
|
||||
|
||||
@ -211,7 +204,7 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad
|
||||
TPlayerTable * pTab;
|
||||
|
||||
//
|
||||
// <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>͵<EFBFBD> ij<><C4B3>ó<EFBFBD><C3B3>
|
||||
// 한 계정에 속한 모든 캐릭터들 캐쉬처리
|
||||
//
|
||||
CLoginData * pLoginData = GetLoginDataByAID(packet->account_id);
|
||||
|
||||
@ -223,12 +216,12 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------
|
||||
// 1. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DBCache <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : DBCache<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 2. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DBCache <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : DB<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 1. 유저정보가 DBCache 에 존재 : DBCache에서
|
||||
// 2. 유저정보가 DBCache 에 없음 : DB에서
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
//----------------------------------
|
||||
// 1. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DBCache <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : DBCache<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 1. 유저정보가 DBCache 에 존재 : DBCache에서
|
||||
//----------------------------------
|
||||
if ((c = GetPlayerCache(packet->player_id)))
|
||||
{
|
||||
@ -236,7 +229,7 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad
|
||||
|
||||
if (!pkLD || pkLD->IsPlay())
|
||||
{
|
||||
sys_log(0, "PLAYER_LOAD_ERROR: LoginData %p IsPlay %d", pkLD, pkLD ? pkLD->IsPlay() : 0);
|
||||
SPDLOG_DEBUG("PLAYER_LOAD_ERROR: LoginData {} IsPlay {}", (void*) pkLD, pkLD ? pkLD->IsPlay() : 0);
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_LOAD_FAILED, dwHandle, 0);
|
||||
return;
|
||||
}
|
||||
@ -244,7 +237,6 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad
|
||||
pTab = c->Get();
|
||||
|
||||
pkLD->SetPlay(true);
|
||||
SendLoginToBilling(pkLD, true);
|
||||
memcpy(pTab->aiPremiumTimes, pkLD->GetPremiumPtr(), sizeof(pTab->aiPremiumTimes));
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_LOAD_SUCCESS, dwHandle, sizeof(TPlayerTable));
|
||||
@ -265,16 +257,16 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad
|
||||
|
||||
TItemCacheSet * pSet = GetItemCacheSet(pTab->id);
|
||||
|
||||
sys_log(0, "[PLAYER_LOAD] ID %s pid %d gold %d ", pTab->name, pTab->id, pTab->gold);
|
||||
SPDLOG_DEBUG("[PLAYER_LOAD] ID {} pid {} gold {} ", pTab->name, pTab->id, pTab->gold);
|
||||
|
||||
//--------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> & AFFECT & QUEST <EFBFBD>ε<EFBFBD> :
|
||||
// 아이템 & AFFECT & QUEST 로딩 :
|
||||
//--------------------------------------------
|
||||
// 1) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DBCache <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : DBCache <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 2) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DBCache <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : DB <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 1) 아이템이 DBCache 에 존재 : DBCache 에서 가져옴
|
||||
// 2) 아이템이 DBCache 에 없음 : DB 에서 가져옴
|
||||
|
||||
/////////////////////////////////////////////
|
||||
// 1) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DBCache <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : DBCache <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 1) 아이템이 DBCache 에 존재 : DBCache 에서 가져옴
|
||||
/////////////////////////////////////////////
|
||||
if (pSet)
|
||||
{
|
||||
@ -289,12 +281,11 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad
|
||||
CItemCache * c = *it++;
|
||||
TPlayerItem * p = c->Get();
|
||||
|
||||
if (p->vnum) // vnum<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.
|
||||
if (p->vnum) // vnum이 없으면 삭제된 아이템이다.
|
||||
memcpy(&s_items[dwCount++], p, sizeof(TPlayerItem));
|
||||
}
|
||||
|
||||
if (g_test_server)
|
||||
sys_log(0, "ITEM_CACHE: HIT! %s count: %u", pTab->name, dwCount);
|
||||
SPDLOG_TRACE("ITEM_CACHE: HIT! {} count: {}", pTab->name, dwCount);
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_ITEM_LOAD, dwHandle, sizeof(DWORD) + sizeof(TPlayerItem) * dwCount);
|
||||
peer->EncodeDWORD(dwCount);
|
||||
@ -316,7 +307,7 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad
|
||||
CDBManager::instance().ReturnQuery(szQuery, QID_AFFECT, peer->GetHandle(), new ClientHandleInfo(dwHandle));
|
||||
}
|
||||
/////////////////////////////////////////////
|
||||
// 2) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DBCache <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : DB <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 2) 아이템이 DBCache 에 없음 : DB 에서 가져옴
|
||||
/////////////////////////////////////////////
|
||||
else
|
||||
{
|
||||
@ -350,23 +341,23 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad
|
||||
//return;
|
||||
}
|
||||
//----------------------------------
|
||||
// 2. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DBCache <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : DB<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 2. 유저정보가 DBCache 에 없음 : DB에서
|
||||
//----------------------------------
|
||||
else
|
||||
{
|
||||
sys_log(0, "[PLAYER_LOAD] Load from PlayerDB pid[%d]", packet->player_id);
|
||||
SPDLOG_DEBUG("[PLAYER_LOAD] Load from PlayerDB pid[{}]", packet->player_id);
|
||||
|
||||
char queryStr[QUERY_MAX_LEN];
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DB<44><42><EFBFBD><EFBFBD>
|
||||
// 캐릭터 정보 얻어오기 : 무조건 DB에서
|
||||
//--------------------------------------------------------------
|
||||
snprintf(queryStr, sizeof(queryStr),
|
||||
"SELECT "
|
||||
"id,name,job,voice,dir,x,y,z,map_index,exit_x,exit_y,exit_map_index,hp,mp,stamina,random_hp,random_sp,playtime,"
|
||||
"gold,level,level_step,st,ht,dx,iq,exp,"
|
||||
"stat_point,skill_point,sub_skill_point,stat_reset_count,part_base,part_hair,"
|
||||
"skill_level,quickslot,skill_group,alignment,mobile,horse_level,horse_riding,horse_hp,horse_hp_droptime,horse_stamina,"
|
||||
"skill_level,quickslot,skill_group,alignment,horse_level,horse_riding,horse_hp,horse_hp_droptime,horse_stamina,"
|
||||
"UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(last_play),horse_skill_point FROM player%s WHERE id=%d",
|
||||
GetTablePostfix(), packet->player_id);
|
||||
|
||||
@ -375,7 +366,7 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad
|
||||
CDBManager::instance().ReturnQuery(queryStr, QID_PLAYER, peer->GetHandle(), pkInfo);
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 아이템 가져오기
|
||||
//--------------------------------------------------------------
|
||||
snprintf(queryStr, sizeof(queryStr),
|
||||
"SELECT id,window+0,pos,count,vnum,socket0,socket1,socket2,attrtype0,attrvalue0,attrtype1,attrvalue1,attrtype2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrvalue4,attrtype5,attrvalue5,attrtype6,attrvalue6 "
|
||||
@ -384,15 +375,15 @@ void CClientManager::QUERY_PLAYER_LOAD(CPeer * peer, DWORD dwHandle, TPlayerLoad
|
||||
CDBManager::instance().ReturnQuery(queryStr, QID_ITEM, peer->GetHandle(), new ClientHandleInfo(dwHandle, packet->player_id));
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// QUEST <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// QUEST 가져오기
|
||||
//--------------------------------------------------------------
|
||||
snprintf(queryStr, sizeof(queryStr),
|
||||
"SELECT dwPID,szName,szState,lValue FROM quest%s WHERE dwPID=%d",
|
||||
GetTablePostfix(), packet->player_id);
|
||||
CDBManager::instance().ReturnQuery(queryStr, QID_QUEST, peer->GetHandle(), new ClientHandleInfo(dwHandle, packet->player_id,packet->account_id));
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ɿ<EFBFBD><C9BF><EFBFBD> item_award<72><64><EFBFBD>̺<EFBFBD><CCBA><EFBFBD><EFBFBD><EFBFBD> login <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> account id<EFBFBD><EFBFBD> <20>Ѱ<EFBFBD><D1B0>ش<EFBFBD>
|
||||
//독일 선물 기능에서 item_award테이블에서 login 정보를 얻기위해 account id도 넘겨준다
|
||||
//--------------------------------------------------------------
|
||||
// AFFECT <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// AFFECT 가져오기
|
||||
//--------------------------------------------------------------
|
||||
snprintf(queryStr, sizeof(queryStr),
|
||||
"SELECT dwPID,bType,bApplyOn,lApplyValue,dwFlag,lDuration,lSPCost FROM affect%s WHERE dwPID=%d",
|
||||
@ -409,21 +400,21 @@ void CClientManager::ItemAward(CPeer * peer,char* login)
|
||||
std::set<TItemAward *> * pSet = ItemAwardManager::instance().GetByLogin(login_t);
|
||||
if(pSet == NULL)
|
||||
return;
|
||||
typeof(pSet->begin()) it = pSet->begin(); //taken_time<EFBFBD><EFBFBD> NULL<EFBFBD>ΰ͵<EFBFBD> <20>о<EFBFBD><D0BE><EFBFBD>
|
||||
typeof(pSet->begin()) it = pSet->begin(); //taken_time이 NULL인것들 읽어옴
|
||||
while(it != pSet->end() )
|
||||
{
|
||||
TItemAward * pItemAward = *(it++);
|
||||
char* whyStr = pItemAward->szWhy; //why <EFBFBD>ݷ<EFBFBD> <20>б<EFBFBD>
|
||||
char cmdStr[100] = ""; //why<EFBFBD>ݷ뿡<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ӽ<EFBFBD> <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>
|
||||
strcpy(cmdStr,whyStr); //<EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ū<EFBFBD><C5AB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ūȭ <20>DZ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
char* whyStr = pItemAward->szWhy; //why 콜룸 읽기
|
||||
char cmdStr[100] = ""; //why콜룸에서 읽은 값을 임시 문자열에 복사해둠
|
||||
strcpy(cmdStr,whyStr); //명령어 얻는 과정에서 토큰쓰면 원본도 토큰화 되기 때문
|
||||
char command[20] = "";
|
||||
strcpy(command,GetCommand(cmdStr).c_str()); // command <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if( !(strcmp(command,"GIFT") )) // command <EFBFBD><EFBFBD> GIFT<EFBFBD≯<EFBFBD>
|
||||
strcpy(command,GetCommand(cmdStr).c_str()); // command 얻기
|
||||
if( !(strcmp(command,"GIFT") )) // command 가 GIFT이면
|
||||
{
|
||||
TPacketItemAwardInfromer giftData;
|
||||
strcpy(giftData.login, pItemAward->szLogin); //<EFBFBD>α<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
strcpy(giftData.command, command); //<EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
giftData.vnum = pItemAward->dwVnum; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> vnum<75><6D> <20><><EFBFBD><EFBFBD>
|
||||
strcpy(giftData.login, pItemAward->szLogin); //로그인 아이디 복사
|
||||
strcpy(giftData.command, command); //명령어 복사
|
||||
giftData.vnum = pItemAward->dwVnum; //아이템 vnum도 복사
|
||||
ForwardPacket(HEADER_DG_ITEMAWARD_INFORMER,&giftData,sizeof(TPacketItemAwardInfromer));
|
||||
}
|
||||
}
|
||||
@ -444,7 +435,7 @@ std::string CClientManager::GetCommand(char* str)
|
||||
|
||||
bool CreatePlayerTableFromRes(MYSQL_RES * res, TPlayerTable * pkTab)
|
||||
{
|
||||
if (mysql_num_rows(res) == 0) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if (mysql_num_rows(res) == 0) // 데이터 없음
|
||||
return false;
|
||||
|
||||
memset(pkTab, 0, sizeof(TPlayerTable));
|
||||
@ -456,7 +447,7 @@ bool CreatePlayerTableFromRes(MYSQL_RES * res, TPlayerTable * pkTab)
|
||||
// "id,name,job,voice,dir,x,y,z,map_index,exit_x,exit_y,exit_map_index,hp,mp,stamina,random_hp,random_sp,playtime,"
|
||||
// "gold,level,level_step,st,ht,dx,iq,exp,"
|
||||
// "stat_point,skill_point,sub_skill_point,stat_reset_count,part_base,part_hair,"
|
||||
// "skill_level,quickslot,skill_group,alignment,mobile,horse_level,horse_riding,horse_hp,horse_stamina FROM player%s WHERE id=%d",
|
||||
// "skill_level,quickslot,skill_group,alignment,horse_level,horse_riding,horse_hp,horse_stamina FROM player%s WHERE id=%d",
|
||||
str_to_number(pkTab->id, row[col++]);
|
||||
strlcpy(pkTab->name, row[col++], sizeof(pkTab->name));
|
||||
str_to_number(pkTab->job, row[col++]);
|
||||
@ -507,13 +498,6 @@ bool CreatePlayerTableFromRes(MYSQL_RES * res, TPlayerTable * pkTab)
|
||||
str_to_number(pkTab->skill_group, row[col++]);
|
||||
str_to_number(pkTab->lAlignment, row[col++]);
|
||||
|
||||
if (row[col])
|
||||
{
|
||||
strlcpy(pkTab->szMobile, row[col], sizeof(pkTab->szMobile));
|
||||
}
|
||||
|
||||
col++;
|
||||
|
||||
str_to_number(pkTab->horse.bLevel, row[col++]);
|
||||
str_to_number(pkTab->horse.bRiding, row[col++]);
|
||||
str_to_number(pkTab->horse.sHealth, row[col++]);
|
||||
@ -531,11 +515,11 @@ bool CreatePlayerTableFromRes(MYSQL_RES * res, TPlayerTable * pkTab)
|
||||
int max_point = pkTab->level - 9;
|
||||
|
||||
int skill_point =
|
||||
std::min<int>(20, pkTab->skills[121].bLevel) + // SKILL_LEADERSHIP <EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
|
||||
std::min<int>(20, pkTab->skills[124].bLevel) + // SKILL_MINING ä<EFBFBD><EFBFBD>
|
||||
std::min<int>(10, pkTab->skills[131].bLevel) + // SKILL_HORSE_SUMMON <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȯ
|
||||
std::min<int>(20, pkTab->skills[141].bLevel) + // SKILL_ADD_HP HP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::min<int>(20, pkTab->skills[142].bLevel); // SKILL_RESIST_PENETRATE <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::min<int>(20, pkTab->skills[121].bLevel) + // SKILL_LEADERSHIP 통솔력
|
||||
std::min<int>(20, pkTab->skills[124].bLevel) + // SKILL_MINING 채광
|
||||
std::min<int>(10, pkTab->skills[131].bLevel) + // SKILL_HORSE_SUMMON 말소환
|
||||
std::min<int>(20, pkTab->skills[141].bLevel) + // SKILL_ADD_HP HP보강
|
||||
std::min<int>(20, pkTab->skills[142].bLevel); // SKILL_RESIST_PENETRATE 관통저항
|
||||
|
||||
pkTab->sub_skill_point = max_point - skill_point;
|
||||
}
|
||||
@ -554,74 +538,74 @@ void CClientManager::RESULT_COMPOSITE_PLAYER(CPeer * peer, SQLMsg * pMsg, DWORD
|
||||
MYSQL_RES * pSQLResult = pMsg->Get()->pSQLResult;
|
||||
if (!pSQLResult)
|
||||
{
|
||||
sys_err("null MYSQL_RES QID %u", dwQID);
|
||||
SPDLOG_ERROR("null MYSQL_RES QID {}", dwQID);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (dwQID)
|
||||
{
|
||||
case QID_PLAYER:
|
||||
sys_log(0, "QID_PLAYER %u %u", info->dwHandle, info->player_id);
|
||||
SPDLOG_DEBUG("QID_PLAYER {} {}", info->dwHandle, info->player_id);
|
||||
RESULT_PLAYER_LOAD(peer, pSQLResult, info.get());
|
||||
|
||||
break;
|
||||
|
||||
case QID_ITEM:
|
||||
sys_log(0, "QID_ITEM %u", info->dwHandle);
|
||||
SPDLOG_DEBUG("QID_ITEM {}", info->dwHandle);
|
||||
RESULT_ITEM_LOAD(peer, pSQLResult, info->dwHandle, info->player_id);
|
||||
break;
|
||||
|
||||
case QID_QUEST:
|
||||
{
|
||||
sys_log(0, "QID_QUEST %u", info->dwHandle);
|
||||
SPDLOG_DEBUG("QID_QUEST {}", info->dwHandle);
|
||||
RESULT_QUEST_LOAD(peer, pSQLResult, info->dwHandle, info->player_id);
|
||||
//aid<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//aid얻기
|
||||
ClientHandleInfo* temp1 = info.get();
|
||||
if (temp1 == NULL)
|
||||
break;
|
||||
|
||||
CLoginData* pLoginData1 = GetLoginDataByAID(temp1->account_id); //
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//독일 선물 기능
|
||||
if( pLoginData1->GetAccountRef().login == NULL)
|
||||
break;
|
||||
if( pLoginData1 == NULL )
|
||||
break;
|
||||
sys_log(0,"info of pLoginData1 before call ItemAwardfunction %d",pLoginData1);
|
||||
SPDLOG_DEBUG("info of pLoginData1 before call ItemAwardfunction {}", (void*) pLoginData1);
|
||||
ItemAward(peer,pLoginData1->GetAccountRef().login);
|
||||
}
|
||||
break;
|
||||
|
||||
case QID_AFFECT:
|
||||
sys_log(0, "QID_AFFECT %u", info->dwHandle);
|
||||
SPDLOG_DEBUG("QID_AFFECT {}", info->dwHandle);
|
||||
RESULT_AFFECT_LOAD(peer, pSQLResult, info->dwHandle);
|
||||
break;
|
||||
/*
|
||||
case QID_PLAYER_ITEM_QUEST_AFFECT:
|
||||
sys_log(0, "QID_PLAYER_ITEM_QUEST_AFFECT %u", info->dwHandle);
|
||||
SPDLOG_DEBUG("QID_PLAYER_ITEM_QUEST_AFFECT {}", info->dwHandle);
|
||||
RESULT_PLAYER_LOAD(peer, pSQLResult, info->dwHandle);
|
||||
|
||||
if (!pMsg->Next())
|
||||
{
|
||||
sys_err("RESULT_COMPOSITE_PLAYER: QID_PLAYER_ITEM_QUEST_AFFECT: ITEM FAILED");
|
||||
SPDLOG_ERROR("RESULT_COMPOSITE_PLAYER: QID_PLAYER_ITEM_QUEST_AFFECT: ITEM FAILED");
|
||||
return;
|
||||
}
|
||||
|
||||
case QID_ITEM_QUEST_AFFECT:
|
||||
sys_log(0, "QID_ITEM_QUEST_AFFECT %u", info->dwHandle);
|
||||
SPDLOG_DEBUG("QID_ITEM_QUEST_AFFECT {}", info->dwHandle);
|
||||
RESULT_ITEM_LOAD(peer, pSQLResult, info->dwHandle, info->player_id);
|
||||
|
||||
if (!pMsg->Next())
|
||||
{
|
||||
sys_err("RESULT_COMPOSITE_PLAYER: QID_PLAYER_ITEM_QUEST_AFFECT: QUEST FAILED");
|
||||
SPDLOG_ERROR("RESULT_COMPOSITE_PLAYER: QID_PLAYER_ITEM_QUEST_AFFECT: QUEST FAILED");
|
||||
return;
|
||||
}
|
||||
|
||||
case QID_QUEST_AFFECT:
|
||||
sys_log(0, "QID_QUEST_AFFECT %u", info->dwHandle);
|
||||
SPDLOG_DEBUG("QID_QUEST_AFFECT {}", info->dwHandle);
|
||||
RESULT_QUEST_LOAD(peer, pSQLResult, info->dwHandle);
|
||||
|
||||
if (!pMsg->Next())
|
||||
sys_err("RESULT_COMPOSITE_PLAYER: QID_PLAYER_ITEM_QUEST_AFFECT: AFFECT FAILED");
|
||||
SPDLOG_ERROR("RESULT_COMPOSITE_PLAYER: QID_PLAYER_ITEM_QUEST_AFFECT: AFFECT FAILED");
|
||||
else
|
||||
RESULT_AFFECT_LOAD(peer, pSQLResult, info->dwHandle);
|
||||
|
||||
@ -645,13 +629,12 @@ void CClientManager::RESULT_PLAYER_LOAD(CPeer * peer, MYSQL_RES * pRes, ClientHa
|
||||
|
||||
if (!pkLD || pkLD->IsPlay())
|
||||
{
|
||||
sys_log(0, "PLAYER_LOAD_ERROR: LoginData %p IsPlay %d", pkLD, pkLD ? pkLD->IsPlay() : 0);
|
||||
SPDLOG_DEBUG("PLAYER_LOAD_ERROR: LoginData {} IsPlay {}", (void*) pkLD, pkLD ? pkLD->IsPlay() : 0);
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_LOAD_FAILED, pkInfo->dwHandle, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
pkLD->SetPlay(true);
|
||||
SendLoginToBilling(pkLD, true);
|
||||
memcpy(tab.aiPremiumTimes, pkLD->GetPremiumPtr(), sizeof(tab.aiPremiumTimes));
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_LOAD_SUCCESS, pkInfo->dwHandle, sizeof(TPlayerTable));
|
||||
@ -672,18 +655,18 @@ void CClientManager::RESULT_PLAYER_LOAD(CPeer * peer, MYSQL_RES * pRes, ClientHa
|
||||
void CClientManager::RESULT_ITEM_LOAD(CPeer * peer, MYSQL_RES * pRes, DWORD dwHandle, DWORD dwPID)
|
||||
{
|
||||
static std::vector<TPlayerItem> s_items;
|
||||
//DB<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о<EFBFBD><D0BE>´<EFBFBD>.
|
||||
//DB에서 아이템 정보를 읽어온다.
|
||||
CreateItemTableFromRes(pRes, &s_items, dwPID);
|
||||
DWORD dwCount = s_items.size();
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_ITEM_LOAD, dwHandle, sizeof(DWORD) + sizeof(TPlayerItem) * dwCount);
|
||||
peer->EncodeDWORD(dwCount);
|
||||
|
||||
//CacheSet<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//CacheSet을 만든다
|
||||
CreateItemCacheSet(dwPID);
|
||||
|
||||
// ITEM_LOAD_LOG_ATTACH_PID
|
||||
sys_log(0, "ITEM_LOAD: count %u pid %u", dwCount, dwPID);
|
||||
SPDLOG_DEBUG("ITEM_LOAD: count {} pid {}", dwCount, dwPID);
|
||||
// END_OF_ITEM_LOAD_LOG_ATTACH_PID
|
||||
|
||||
if (dwCount)
|
||||
@ -691,7 +674,7 @@ void CClientManager::RESULT_ITEM_LOAD(CPeer * peer, MYSQL_RES * pRes, DWORD dwHa
|
||||
peer->Encode(&s_items[0], sizeof(TPlayerItem) * dwCount);
|
||||
|
||||
for (DWORD i = 0; i < dwCount; ++i)
|
||||
PutItemCache(&s_items[i], true); // <EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>, <20><><EFBFBD><EFBFBD> bSkipQuery<EFBFBD><EFBFBD> true<EFBFBD><EFBFBD> <20>ִ´<D6B4>.
|
||||
PutItemCache(&s_items[i], true); // 로드한 것은 따로 저장할 필요 없으므로, 인자 bSkipQuery에 true를 넣는다.
|
||||
}
|
||||
}
|
||||
|
||||
@ -699,7 +682,7 @@ void CClientManager::RESULT_AFFECT_LOAD(CPeer * peer, MYSQL_RES * pRes, DWORD dw
|
||||
{
|
||||
int iNumRows;
|
||||
|
||||
if ((iNumRows = mysql_num_rows(pRes)) == 0) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if ((iNumRows = mysql_num_rows(pRes)) == 0) // 데이터 없음
|
||||
return;
|
||||
|
||||
static std::vector<TPacketAffectElement> s_elements;
|
||||
@ -725,7 +708,7 @@ void CClientManager::RESULT_AFFECT_LOAD(CPeer * peer, MYSQL_RES * pRes, DWORD dw
|
||||
str_to_number(r.lSPCost, row[6]);
|
||||
}
|
||||
|
||||
sys_log(0, "AFFECT_LOAD: count %d PID %u", s_elements.size(), dwPID);
|
||||
SPDLOG_DEBUG("AFFECT_LOAD: count {} PID {}", s_elements.size(), dwPID);
|
||||
|
||||
DWORD dwCount = s_elements.size();
|
||||
|
||||
@ -764,7 +747,7 @@ void CClientManager::RESULT_QUEST_LOAD(CPeer * peer, MYSQL_RES * pRes, DWORD dwH
|
||||
str_to_number(r.lValue, row[3]);
|
||||
}
|
||||
|
||||
sys_log(0, "QUEST_LOAD: count %d PID %u", s_table.size(), s_table[0].dwPID);
|
||||
SPDLOG_DEBUG("QUEST_LOAD: count {} PID {}", s_table.size(), s_table[0].dwPID);
|
||||
|
||||
DWORD dwCount = s_table.size();
|
||||
|
||||
@ -778,8 +761,7 @@ void CClientManager::RESULT_QUEST_LOAD(CPeer * peer, MYSQL_RES * pRes, DWORD dwH
|
||||
*/
|
||||
void CClientManager::QUERY_PLAYER_SAVE(CPeer * peer, DWORD dwHandle, TPlayerTable * pkTab)
|
||||
{
|
||||
if (g_test_server)
|
||||
sys_log(0, "PLAYER_SAVE: %s", pkTab->name);
|
||||
SPDLOG_TRACE("PLAYER_SAVE: {}", pkTab->name);
|
||||
|
||||
PutPlayerCache(pkTab);
|
||||
}
|
||||
@ -796,7 +778,7 @@ void CClientManager::__QUERY_PLAYER_CREATE(CPeer *peer, DWORD dwHandle, TPlayerC
|
||||
int queryLen;
|
||||
DWORD player_id;
|
||||
|
||||
// <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> X<><58> <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD>.
|
||||
// 한 계정에 X초 내로 캐릭터 생성을 할 수 없다.
|
||||
auto it = s_createTimeByAccountID.find(packet->account_id);
|
||||
|
||||
if (it != s_createTimeByAccountID.end())
|
||||
@ -829,7 +811,7 @@ void CClientManager::__QUERY_PLAYER_CREATE(CPeer *peer, DWORD dwHandle, TPlayerC
|
||||
if (row[0] && dwPID > 0)
|
||||
{
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_ALREADY, dwHandle, 0);
|
||||
sys_log(0, "ALREADY EXIST AccountChrIdx %d ID %d", packet->account_index, dwPID);
|
||||
SPDLOG_DEBUG("ALREADY EXIST AccountChrIdx {} ID {}", packet->account_index, dwPID);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -861,7 +843,7 @@ void CClientManager::__QUERY_PLAYER_CREATE(CPeer *peer, DWORD dwHandle, TPlayerC
|
||||
|
||||
if (*row[0] != '0')
|
||||
{
|
||||
sys_log(0, "ALREADY EXIST name %s, row[0] %s query %s", packet->player_table.name, row[0], queryStr);
|
||||
SPDLOG_DEBUG("ALREADY EXIST name {}, row[0] {} query {}", packet->player_table.name, row[0], queryStr);
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_ALREADY, dwHandle, 0);
|
||||
return;
|
||||
}
|
||||
@ -886,7 +868,7 @@ void CClientManager::__QUERY_PLAYER_CREATE(CPeer *peer, DWORD dwHandle, TPlayerC
|
||||
packet->player_table.job, packet->player_table.voice, packet->player_table.dir, packet->player_table.x, packet->player_table.y, packet->player_table.z,
|
||||
packet->player_table.hp, packet->player_table.sp, packet->player_table.sRandomHP, packet->player_table.sRandomSP, packet->player_table.stat_point, packet->player_table.stamina, packet->player_table.part_base, packet->player_table.part_base, packet->player_table.gold);
|
||||
|
||||
sys_log(0, "PlayerCreate accountid %d name %s level %d gold %d, st %d ht %d job %d",
|
||||
SPDLOG_DEBUG("PlayerCreate accountid {} name {} level {} gold {}, st {} ht {} job {}",
|
||||
packet->account_id,
|
||||
packet->player_table.name,
|
||||
packet->player_table.level,
|
||||
@ -899,20 +881,18 @@ void CClientManager::__QUERY_PLAYER_CREATE(CPeer *peer, DWORD dwHandle, TPlayerC
|
||||
|
||||
CDBManager::instance().EscapeString(text, packet->player_table.skills, sizeof(packet->player_table.skills));
|
||||
queryLen += snprintf(queryStr + queryLen, sizeof(queryStr) - queryLen, "'%s', ", text);
|
||||
if (g_test_server)
|
||||
sys_log(0, "Create_Player queryLen[%d] TEXT[%s]", queryLen, text);
|
||||
SPDLOG_TRACE("Create_Player queryLen[{}] TEXT[{}]", queryLen, text);
|
||||
|
||||
CDBManager::instance().EscapeString(text, packet->player_table.quickslot, sizeof(packet->player_table.quickslot));
|
||||
queryLen += snprintf(queryStr + queryLen, sizeof(queryStr) - queryLen, "'%s')", text);
|
||||
|
||||
std::unique_ptr<SQLMsg> pMsg2(CDBManager::instance().DirectQuery(queryStr));
|
||||
if (g_test_server)
|
||||
sys_log(0, "Create_Player queryLen[%d] TEXT[%s]", queryLen, text);
|
||||
SPDLOG_TRACE("Create_Player queryLen[{}] TEXT[{}]", queryLen, text);
|
||||
|
||||
if (pMsg2->Get()->uiAffectedRows <= 0)
|
||||
{
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_ALREADY, dwHandle, 0);
|
||||
sys_log(0, "ALREADY EXIST3 query: %s AffectedRows %lu", queryStr, pMsg2->Get()->uiAffectedRows);
|
||||
SPDLOG_DEBUG("ALREADY EXIST3 query: {} AffectedRows {}", queryStr, pMsg2->Get()->uiAffectedRows);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -924,7 +904,7 @@ void CClientManager::__QUERY_PLAYER_CREATE(CPeer *peer, DWORD dwHandle, TPlayerC
|
||||
|
||||
if (pMsg3->Get()->uiAffectedRows <= 0)
|
||||
{
|
||||
sys_err("QUERY_ERROR: %s", queryStr);
|
||||
SPDLOG_ERROR("QUERY_ERROR: {}", queryStr);
|
||||
|
||||
snprintf(queryStr, sizeof(queryStr), "DELETE FROM player%s WHERE id=%d", GetTablePostfix(), player_id);
|
||||
CDBManager::instance().DirectQuery(queryStr);
|
||||
@ -954,7 +934,7 @@ void CClientManager::__QUERY_PLAYER_CREATE(CPeer *peer, DWORD dwHandle, TPlayerC
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_SUCCESS, dwHandle, sizeof(TPacketDGCreateSuccess));
|
||||
peer->Encode(&pack, sizeof(TPacketDGCreateSuccess));
|
||||
|
||||
sys_log(0, "7 name %s job %d", pack.player.szName, pack.player.byJob);
|
||||
SPDLOG_DEBUG("7 name {} job {}", pack.player.szName, pack.player.byJob);
|
||||
|
||||
s_createTimeByAccountID[packet->account_id] = time(0);
|
||||
}
|
||||
@ -985,7 +965,7 @@ void CClientManager::__QUERY_PLAYER_DELETE(CPeer* peer, DWORD dwHandle, TPlayerD
|
||||
{
|
||||
if (strlen(r.social_id) < 7 || strncmp(packet->private_code, r.social_id + strlen(r.social_id) - 7, 7))
|
||||
{
|
||||
sys_log(0, "PLAYER_DELETE FAILED len(%d)", strlen(r.social_id));
|
||||
SPDLOG_DEBUG("PLAYER_DELETE FAILED len({})", strlen(r.social_id));
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, dwHandle, 1);
|
||||
peer->EncodeBYTE(packet->account_index);
|
||||
return;
|
||||
@ -998,7 +978,7 @@ void CClientManager::__QUERY_PLAYER_DELETE(CPeer* peer, DWORD dwHandle, TPlayerD
|
||||
|
||||
if (pTab->level >= m_iPlayerDeleteLevelLimit)
|
||||
{
|
||||
sys_log(0, "PLAYER_DELETE FAILED LEVEL %u >= DELETE LIMIT %d", pTab->level, m_iPlayerDeleteLevelLimit);
|
||||
SPDLOG_DEBUG("PLAYER_DELETE FAILED LEVEL {} >= DELETE LIMIT {}", pTab->level, m_iPlayerDeleteLevelLimit);
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, dwHandle, 1);
|
||||
peer->EncodeBYTE(packet->account_index);
|
||||
return;
|
||||
@ -1006,7 +986,7 @@ void CClientManager::__QUERY_PLAYER_DELETE(CPeer* peer, DWORD dwHandle, TPlayerD
|
||||
|
||||
if (pTab->level < m_iPlayerDeleteLevelLimitLower)
|
||||
{
|
||||
sys_log(0, "PLAYER_DELETE FAILED LEVEL %u < DELETE LIMIT %d", pTab->level, m_iPlayerDeleteLevelLimitLower);
|
||||
SPDLOG_DEBUG("PLAYER_DELETE FAILED LEVEL {} < DELETE LIMIT {}", pTab->level, m_iPlayerDeleteLevelLimitLower);
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, dwHandle, 1);
|
||||
peer->EncodeBYTE(packet->account_index);
|
||||
return;
|
||||
@ -1022,12 +1002,12 @@ void CClientManager::__QUERY_PLAYER_DELETE(CPeer* peer, DWORD dwHandle, TPlayerD
|
||||
ClientHandleInfo * pi = new ClientHandleInfo(dwHandle, packet->player_id);
|
||||
pi->account_index = packet->account_index;
|
||||
|
||||
sys_log(0, "PLAYER_DELETE TRY: %s %d pid%d", packet->login, packet->player_id, packet->account_index + 1);
|
||||
SPDLOG_DEBUG("PLAYER_DELETE TRY: {} {} pid{}", packet->login, packet->player_id, packet->account_index + 1);
|
||||
CDBManager::instance().ReturnQuery(szQuery, QID_PLAYER_DELETE, peer->GetHandle(), pi);
|
||||
}
|
||||
|
||||
//
|
||||
// @version 05/06/10 Bang2ni - <EFBFBD>÷<EFBFBD><EFBFBD>̾<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>.
|
||||
// @version 05/06/10 Bang2ni - 플레이어 삭제시 가격정보 리스트 삭제 추가.
|
||||
//
|
||||
void CClientManager::__RESULT_PLAYER_DELETE(CPeer *peer, SQLMsg* msg)
|
||||
{
|
||||
@ -1049,7 +1029,7 @@ void CClientManager::__RESULT_PLAYER_DELETE(CPeer *peer, SQLMsg* msg)
|
||||
|
||||
if (deletedLevelLimit >= m_iPlayerDeleteLevelLimit && !IsChinaEventServer())
|
||||
{
|
||||
sys_log(0, "PLAYER_DELETE FAILED LEVEL %u >= DELETE LIMIT %d", deletedLevelLimit, m_iPlayerDeleteLevelLimit);
|
||||
SPDLOG_DEBUG("PLAYER_DELETE FAILED LEVEL {} >= DELETE LIMIT {}", deletedLevelLimit, m_iPlayerDeleteLevelLimit);
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, pi->dwHandle, 1);
|
||||
peer->EncodeBYTE(pi->account_index);
|
||||
return;
|
||||
@ -1057,7 +1037,7 @@ void CClientManager::__RESULT_PLAYER_DELETE(CPeer *peer, SQLMsg* msg)
|
||||
|
||||
if (deletedLevelLimit < m_iPlayerDeleteLevelLimitLower)
|
||||
{
|
||||
sys_log(0, "PLAYER_DELETE FAILED LEVEL %u < DELETE LIMIT %d", deletedLevelLimit, m_iPlayerDeleteLevelLimitLower);
|
||||
SPDLOG_DEBUG("PLAYER_DELETE FAILED LEVEL {} < DELETE LIMIT {}", deletedLevelLimit, m_iPlayerDeleteLevelLimitLower);
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, pi->dwHandle, 1);
|
||||
peer->EncodeBYTE(pi->account_index);
|
||||
return;
|
||||
@ -1071,21 +1051,21 @@ void CClientManager::__RESULT_PLAYER_DELETE(CPeer *peer, SQLMsg* msg)
|
||||
|
||||
if (pIns->Get()->uiAffectedRows == 0 || pIns->Get()->uiAffectedRows == (uint32_t)-1)
|
||||
{
|
||||
sys_log(0, "PLAYER_DELETE FAILED %u CANNOT INSERT TO player%s_deleted", dwPID, GetTablePostfix());
|
||||
SPDLOG_DEBUG("PLAYER_DELETE FAILED {} CANNOT INSERT TO player{}_deleted", dwPID, GetTablePostfix());
|
||||
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, pi->dwHandle, 1);
|
||||
peer->EncodeBYTE(pi->account_index);
|
||||
return;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
sys_log(0, "PLAYER_DELETE SUCCESS %u", dwPID);
|
||||
// 삭제 성공
|
||||
SPDLOG_DEBUG("PLAYER_DELETE SUCCESS {}", dwPID);
|
||||
|
||||
char account_index_string[16];
|
||||
|
||||
snprintf(account_index_string, sizeof(account_index_string), "player_id%d", m_iPlayerIDStart + pi->account_index);
|
||||
|
||||
// <EFBFBD>÷<EFBFBD><EFBFBD>̾<EFBFBD> <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// 플레이어 테이블을 캐쉬에서 삭제한다.
|
||||
CPlayerTableCache * pkPlayerCache = GetPlayerCache(pi->player_id);
|
||||
|
||||
if (pkPlayerCache)
|
||||
@ -1094,7 +1074,7 @@ void CClientManager::__RESULT_PLAYER_DELETE(CPeer *peer, SQLMsg* msg)
|
||||
delete pkPlayerCache;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۵<EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// 아이템들을 캐쉬에서 삭제한다.
|
||||
TItemCacheSet * pSet = GetItemCacheSet(pi->player_id);
|
||||
|
||||
if (pSet)
|
||||
@ -1123,7 +1103,7 @@ void CClientManager::__RESULT_PLAYER_DELETE(CPeer *peer, SQLMsg* msg)
|
||||
|
||||
if (pMsg->Get()->uiAffectedRows == 0 || pMsg->Get()->uiAffectedRows == (uint32_t)-1)
|
||||
{
|
||||
sys_log(0, "PLAYER_DELETE FAIL WHEN UPDATE account table");
|
||||
SPDLOG_DEBUG("PLAYER_DELETE FAIL WHEN UPDATE account table");
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, pi->dwHandle, 1);
|
||||
peer->EncodeBYTE(pi->account_index);
|
||||
return;
|
||||
@ -1157,8 +1137,8 @@ void CClientManager::__RESULT_PLAYER_DELETE(CPeer *peer, SQLMsg* msg)
|
||||
}
|
||||
else
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
sys_log(0, "PLAYER_DELETE FAIL NO ROW");
|
||||
// 삭제 실패
|
||||
SPDLOG_DEBUG("PLAYER_DELETE FAIL NO ROW");
|
||||
peer->EncodeHeader(HEADER_DG_PLAYER_DELETE_FAILED, pi->dwHandle, 1);
|
||||
peer->EncodeBYTE(pi->account_index);
|
||||
}
|
||||
@ -1211,86 +1191,15 @@ void CClientManager::QUERY_REMOVE_AFFECT(CPeer * peer, TPacketGDRemoveAffect * p
|
||||
CDBManager::instance().AsyncQuery(queryStr);
|
||||
}
|
||||
|
||||
|
||||
void CClientManager::QUERY_HIGHSCORE_REGISTER(CPeer* peer, TPacketGDHighscore * data)
|
||||
{
|
||||
char szQuery[128];
|
||||
snprintf(szQuery, sizeof(szQuery), "SELECT value FROM highscore%s WHERE board='%s' AND pid = %u", GetTablePostfix(), data->szBoard, data->dwPID);
|
||||
|
||||
sys_log(0, "HEADER_GD_HIGHSCORE_REGISTER: PID %u", data->dwPID);
|
||||
|
||||
ClientHandleInfo * pi = new ClientHandleInfo(0);
|
||||
strlcpy(pi->login, data->szBoard, sizeof(pi->login));
|
||||
pi->account_id = (DWORD)data->lValue;
|
||||
pi->player_id = data->dwPID;
|
||||
pi->account_index = (data->cDir > 0);
|
||||
|
||||
CDBManager::instance().ReturnQuery(szQuery, QID_HIGHSCORE_REGISTER, peer->GetHandle(), pi);
|
||||
}
|
||||
|
||||
void CClientManager::RESULT_HIGHSCORE_REGISTER(CPeer * pkPeer, SQLMsg * msg)
|
||||
{
|
||||
CQueryInfo * qi = (CQueryInfo *) msg->pvUserData;
|
||||
ClientHandleInfo * pi = (ClientHandleInfo *) qi->pvData;
|
||||
//DWORD dwHandle = pi->dwHandle;
|
||||
|
||||
char szBoard[21];
|
||||
strlcpy(szBoard, pi->login, sizeof(szBoard));
|
||||
int value = (int)pi->account_id;
|
||||
|
||||
SQLResult * res = msg->Get();
|
||||
|
||||
if (res->uiNumRows == 0)
|
||||
{
|
||||
// <20><><EFBFBD>ο<EFBFBD> <20><><EFBFBD>̽<EFBFBD><CCBD>ھ <20><><EFBFBD><EFBFBD>
|
||||
char buf[256];
|
||||
snprintf(buf, sizeof(buf), "INSERT INTO highscore%s VALUES('%s', %u, %d)", GetTablePostfix(), szBoard, pi->player_id, value);
|
||||
CDBManager::instance().AsyncQuery(buf);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!res->pSQLResult)
|
||||
{
|
||||
delete pi;
|
||||
return;
|
||||
}
|
||||
|
||||
MYSQL_ROW row = mysql_fetch_row(res->pSQLResult);
|
||||
if (row && row[0])
|
||||
{
|
||||
int current_value = 0; str_to_number(current_value, row[0]);
|
||||
if (pi->account_index && current_value >= value || !pi->account_index && current_value <= value)
|
||||
{
|
||||
value = current_value;
|
||||
}
|
||||
else
|
||||
{
|
||||
char buf[256];
|
||||
snprintf(buf, sizeof(buf), "REPLACE INTO highscore%s VALUES('%s', %u, %d)", GetTablePostfix(), szBoard, pi->player_id, value);
|
||||
CDBManager::instance().AsyncQuery(buf);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
char buf[256];
|
||||
snprintf(buf, sizeof(buf), "INSERT INTO highscore%s VALUES('%s', %u, %d)", GetTablePostfix(), szBoard, pi->player_id, value);
|
||||
CDBManager::instance().AsyncQuery(buf);
|
||||
}
|
||||
}
|
||||
// TODO: <20>̰<EFBFBD><CCB0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̽<EFBFBD><CCBD>ھ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD> üũ<C3BC>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ѷ<EFBFBD><D1B7><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
delete pi;
|
||||
}
|
||||
|
||||
void CClientManager::InsertLogoutPlayer(DWORD pid)
|
||||
{
|
||||
TLogoutPlayerMap::iterator it = m_map_logout.find(pid);
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD>
|
||||
// 존재하지 않을경우 추가
|
||||
if (it != m_map_logout.end())
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ұ<EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if (g_log)
|
||||
sys_log(0, "LOGOUT: Update player time pid(%d)", pid);
|
||||
// 존재할경우 시간만 갱신
|
||||
SPDLOG_TRACE("LOGOUT: Update player time pid({})", pid);
|
||||
|
||||
it->second->time = time(0);
|
||||
return;
|
||||
@ -1301,8 +1210,7 @@ void CClientManager::InsertLogoutPlayer(DWORD pid)
|
||||
pLogout->time = time(0);
|
||||
m_map_logout.insert(std::make_pair(pid, pLogout));
|
||||
|
||||
if (g_log)
|
||||
sys_log(0, "LOGOUT: Insert player pid(%d)", pid);
|
||||
SPDLOG_TRACE("LOGOUT: Insert player pid({})", pid);
|
||||
}
|
||||
|
||||
void CClientManager::DeleteLogoutPlayer(DWORD pid)
|
||||
|
@ -67,7 +67,7 @@ bool CConfig::GetWord(FILE *fp, char *tar)
|
||||
|
||||
if ((c == ' ' || c == '\t' || c == '\n'))
|
||||
{
|
||||
// <EFBFBD><EFBFBD>.
|
||||
// 텝.
|
||||
tar[i] = '\0';
|
||||
return true;
|
||||
}
|
||||
@ -144,7 +144,7 @@ bool CConfig::LoadFile(const char* filename)
|
||||
}
|
||||
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ݴ<EFBFBD> <20>κ<EFBFBD>.
|
||||
// 파일 닫는 부분.
|
||||
fclose(fp);
|
||||
return true;
|
||||
}
|
||||
@ -171,7 +171,7 @@ bool CConfig::GetParam(const char*key, int index, DWORD *Param)
|
||||
|
||||
str_to_number(*Param, szParam[index]);
|
||||
|
||||
sys_log(0, "GetParam %d", *Param);
|
||||
SPDLOG_DEBUG("GetParam {}", *Param);
|
||||
return true;
|
||||
}
|
||||
const char * CConfig::Get(const char* key)
|
||||
|
@ -11,14 +11,14 @@
|
||||
|
||||
namespace
|
||||
{
|
||||
/// <EFBFBD>Ľ̿<EFBFBD> state <EFBFBD><EFBFBD><EFBFBD>Ű<EFBFBD>
|
||||
/// 파싱용 state 열거값
|
||||
enum ParseState
|
||||
{
|
||||
STATE_NORMAL = 0, ///< <EFBFBD>Ϲ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
STATE_QUOTE ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǥ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
STATE_NORMAL = 0, ///< 일반 상태
|
||||
STATE_QUOTE ///< 따옴표 뒤의 상태
|
||||
};
|
||||
|
||||
/// <EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD> <20>¿<EFBFBD><C2BF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// 문자열 좌우의 공백을 제거해서 반환한다.
|
||||
std::string Trim(std::string str)
|
||||
{
|
||||
str = str.erase(str.find_last_not_of(" \t\r\n") + 1);
|
||||
@ -26,7 +26,7 @@ namespace
|
||||
return str;
|
||||
}
|
||||
|
||||
/// \brief <EFBFBD>־<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>忡 <20>ִ<EFBFBD> <20><><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ҹ<EFBFBD><D2B9>ڷ<EFBFBD> <20>ٲ۴<D9B2>.
|
||||
/// \brief 주어진 문장에 있는 알파벳을 모두 소문자로 바꾼다.
|
||||
std::string Lower(std::string original)
|
||||
{
|
||||
std::transform(original.begin(), original.end(), original.begin(), tolower);
|
||||
@ -35,9 +35,9 @@ namespace
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD> <20><>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \param name <EFBFBD><EFBFBD> <20≯<EFBFBD>
|
||||
/// \param index <EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>
|
||||
/// \brief 셀을 액세스할 때, 숫자 대신 사용할 이름을 등록한다.
|
||||
/// \param name 셀 이름
|
||||
/// \param index 셀 인덱스
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
void cCsvAlias::AddAlias(const char* name, size_t index)
|
||||
{
|
||||
@ -51,7 +51,7 @@ void cCsvAlias::AddAlias(const char* name, size_t index)
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 모든 데이터를 삭제한다.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
void cCsvAlias::Destroy()
|
||||
{
|
||||
@ -60,9 +60,9 @@ void cCsvAlias::Destroy()
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \param index <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>
|
||||
/// \return const char* <EFBFBD≯<EFBFBD>
|
||||
/// \brief 숫자 인덱스를 이름으로 변환한다.
|
||||
/// \param index 숫자 인덱스
|
||||
/// \return const char* 이름
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
const char* cCsvAlias::operator [] (size_t index) const
|
||||
{
|
||||
@ -78,9 +78,9 @@ const char* cCsvAlias::operator [] (size_t index) const
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// \brief <EFBFBD≯<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \param name <EFBFBD≯<EFBFBD>
|
||||
/// \return size_t <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>
|
||||
/// \brief 이름을 숫자 인덱스로 변환한다.
|
||||
/// \param name 이름
|
||||
/// \return size_t 숫자 인덱스
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
size_t cCsvAlias::operator [] (const char* name) const
|
||||
{
|
||||
@ -96,11 +96,11 @@ size_t cCsvAlias::operator [] (const char* name) const
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> CSV <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5>Ѵ<EFBFBD>.
|
||||
/// \param fileName CSV <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD>
|
||||
/// \param seperator <EFBFBD>ʵ<EFBFBD> <20>и<EFBFBD><D0B8>ڷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20>⺻<EFBFBD><E2BABB><EFBFBD><EFBFBD> ','<EFBFBD>̴<EFBFBD>.
|
||||
/// \param quote <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǥ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20>⺻<EFBFBD><E2BABB><EFBFBD><EFBFBD> '"'<EFBFBD>̴<EFBFBD>.
|
||||
/// \return bool <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5>ߴٸ<DFB4> true, <EFBFBD>ƴ϶<EFBFBD><EFBFBD><EFBFBD> false
|
||||
/// \brief 지정된 이름의 CSV 파일을 로드한다.
|
||||
/// \param fileName CSV 파일 이름
|
||||
/// \param seperator 필드 분리자로 사용할 글자. 기본값은 ','이다.
|
||||
/// \param quote 따옴표로 사용할 글자. 기본값은 '"'이다.
|
||||
/// \return bool 무사히 로드했다면 true, 아니라면 false
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
bool cCsvFile::Load(const char* fileName, const char seperator, const char quote)
|
||||
{
|
||||
@ -109,7 +109,7 @@ bool cCsvFile::Load(const char* fileName, const char seperator, const char quote
|
||||
std::ifstream file(fileName, std::ios::in);
|
||||
if (!file) return false;
|
||||
|
||||
Destroy(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
Destroy(); // 기존의 데이터를 삭제
|
||||
|
||||
cCsvRow* row = NULL;
|
||||
ParseState state = STATE_NORMAL;
|
||||
@ -124,33 +124,33 @@ bool cCsvFile::Load(const char* fileName, const char seperator, const char quote
|
||||
std::string line(Trim(buf));
|
||||
if (line.empty() || (state == STATE_NORMAL && line[0] == '#')) continue;
|
||||
|
||||
std::string text = std::string(line) + " "; // <EFBFBD>Ľ<EFBFBD> lookahead <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٿ<EFBFBD><D9BF>ش<EFBFBD>.
|
||||
std::string text = std::string(line) + " "; // 파싱 lookahead 때문에 붙여준다.
|
||||
size_t cur = 0;
|
||||
|
||||
while (cur < text.size())
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>尡 QUOTE <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>,
|
||||
// 현재 모드가 QUOTE 모드일 때,
|
||||
if (state == STATE_QUOTE)
|
||||
{
|
||||
// '"' <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.
|
||||
// 1. <EFBFBD><EFBFBD> <20><><EFBFBD>ο<EFBFBD> Ư<><C6AF> <20><><EFBFBD>ڰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20≯<EFBFBD> <20>˸<EFBFBD><CBB8><EFBFBD> <20><> <20>¿<EFBFBD><C2BF><EFBFBD> <20><>
|
||||
// 2. <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '"' <20><><EFBFBD>ڰ<EFBFBD> '"' 2<><32><EFBFBD><EFBFBD> ġȯ<C4A1><C8AF> <20><>
|
||||
// <EFBFBD><EFBFBD> <20><> ù<><C3B9>° <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> CSV <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><CCB6><EFBFBD>,
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> STATE_NORMAL<EFBFBD><EFBFBD> <20>ɸ<EFBFBD><C9B8><EFBFBD> <20>Ǿ<EFBFBD><C7BE>ִ<EFBFBD>.
|
||||
// <EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><><EFBFBD>⼭ <20>ɸ<EFBFBD><C9B8><EFBFBD> <20><><EFBFBD><EFBFBD> 1<><31><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>쳪, 2<><32> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̴<EFBFBD>.
|
||||
// 2<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>쿡<EFBFBD><ECBFA1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '"' <20><><EFBFBD>ڰ<EFBFBD> 2<><32><EFBFBD><EFBFBD> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<><31><EFBFBD><EFBFBD>
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>쿡<EFBFBD><ECBFA1> <20>ƴϴ<C6B4>. <20≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ؼ<EFBFBD> <20>ڵ带 ¥<><C2A5>...
|
||||
// '"' 문자의 종류는 두 가지이다.
|
||||
// 1. 셀 내부에 특수 문자가 있을 경우 이를 알리는 셀 좌우의 것
|
||||
// 2. 셀 내부의 '"' 문자가 '"' 2개로 치환된 것
|
||||
// 이 중 첫번째 경우의 좌측에 있는 것은 CSV 파일이 정상적이라면,
|
||||
// 무조건 STATE_NORMAL에 걸리게 되어있다.
|
||||
// 그러므로 여기서 걸리는 것은 1번의 우측 경우나, 2번 경우 뿐이다.
|
||||
// 2번의 경우에는 무조건 '"' 문자가 2개씩 나타난다. 하지만 1번의
|
||||
// 우측 경우에는 아니다. 이를 바탕으로 해서 코드를 짜면...
|
||||
if (text[cur] == quote)
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڰ<EFBFBD> '"' <20><><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD>, <20><> <20><><EFBFBD>ӵ<EFBFBD> '"' <20><><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD>
|
||||
// <EFBFBD>̴<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '"' <20><><EFBFBD>ڰ<EFBFBD> ġȯ<C4A1><C8AF> <20><><EFBFBD>̴<EFBFBD>.
|
||||
// 다음 문자가 '"' 문자라면, 즉 연속된 '"' 문자라면
|
||||
// 이는 셀 내부의 '"' 문자가 치환된 것이다.
|
||||
if (text[cur+1] == quote)
|
||||
{
|
||||
token += quote;
|
||||
++cur;
|
||||
}
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڰ<EFBFBD> '"' <20><><EFBFBD>ڰ<EFBFBD> <20>ƴ϶<C6B4><CFB6><EFBFBD>
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '"'<27><><EFBFBD>ڴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>˸<EFBFBD><CBB8><EFBFBD> <20><><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD> <20><> <20><> <20>ִ<EFBFBD>.
|
||||
// 다음 문자가 '"' 문자가 아니라면
|
||||
// 현재의 '"'문자는 셀의 끝을 알리는 문자라고 할 수 있다.
|
||||
else
|
||||
{
|
||||
state = STATE_NORMAL;
|
||||
@ -161,25 +161,25 @@ bool cCsvFile::Load(const char* fileName, const char seperator, const char quote
|
||||
token += text[cur];
|
||||
}
|
||||
}
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>尡 NORMAL <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>,
|
||||
// 현재 모드가 NORMAL 모드일 때,
|
||||
else if (state == STATE_NORMAL)
|
||||
{
|
||||
if (row == NULL)
|
||||
row = new cCsvRow();
|
||||
|
||||
// ',' <EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ǹ<EFBFBD><C7B9>Ѵ<EFBFBD>.
|
||||
// <EFBFBD><EFBFBD>ū<EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD>ٰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ְ<EFBFBD>, <20><>ū<EFBFBD><C5AB> <20>ʱ<EFBFBD>ȭ<EFBFBD>Ѵ<EFBFBD>.
|
||||
// ',' 문자를 만났다면 셀의 끝의 의미한다.
|
||||
// 토큰으로서 셀 리스트에다가 집어넣고, 토큰을 초기화한다.
|
||||
if (text[cur] == seperator)
|
||||
{
|
||||
row->push_back(token);
|
||||
token.clear();
|
||||
}
|
||||
// '"' <EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD>, QUOTE <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
// '"' 문자를 만났다면, QUOTE 모드로 전환한다.
|
||||
else if (text[cur] == quote)
|
||||
{
|
||||
state = STATE_QUOTE;
|
||||
}
|
||||
// <EFBFBD>ٸ<EFBFBD> <20>Ϲ<EFBFBD> <20><><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ū<EFBFBD><C5AB><EFBFBD>ٰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD>.
|
||||
// 다른 일반 문자라면 현재 토큰에다가 덧붙인다.
|
||||
else
|
||||
{
|
||||
token += text[cur];
|
||||
@ -189,8 +189,8 @@ bool cCsvFile::Load(const char* fileName, const char seperator, const char quote
|
||||
++cur;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ',' <20><><EFBFBD>ڰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⼭ <20>߰<EFBFBD><DFB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// <EFBFBD><EFBFBD>, ó<><C3B3><EFBFBD><EFBFBD> <20>Ľ<EFBFBD> lookahead <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
// 마지막 셀은 끝에 ',' 문자가 없기 때문에 여기서 추가해줘야한다.
|
||||
// 단, 처음에 파싱 lookahead 때문에 붙인 스페이스 문자 두 개를 뗀다.
|
||||
if (state == STATE_NORMAL)
|
||||
{
|
||||
Assert(row != NULL);
|
||||
@ -209,49 +209,49 @@ bool cCsvFile::Load(const char* fileName, const char seperator, const char quote
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CSV <20><><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \param fileName CSV <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD>
|
||||
/// \param append true<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD>. false<73><65> <20><><EFBFBD>쿡<EFBFBD><ECBFA1>
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
/// \param seperator <EFBFBD>ʵ<EFBFBD> <20>и<EFBFBD><D0B8>ڷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20>⺻<EFBFBD><E2BABB><EFBFBD><EFBFBD> ','<EFBFBD>̴<EFBFBD>.
|
||||
/// \param quote <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǥ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20>⺻<EFBFBD><E2BABB><EFBFBD><EFBFBD> '"'<EFBFBD>̴<EFBFBD>.
|
||||
/// \return bool <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ߴٸ<DFB4> true, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>쿡<EFBFBD><ECBFA1> false
|
||||
/// \brief 가지고 있는 내용을 CSV 파일에다 저장한다.
|
||||
/// \param fileName CSV 파일 이름
|
||||
/// \param append true일 경우, 기존의 파일에다 덧붙인다. false인 경우에는
|
||||
/// 기존의 파일 내용을 삭제하고, 새로 쓴다.
|
||||
/// \param seperator 필드 분리자로 사용할 글자. 기본값은 ','이다.
|
||||
/// \param quote 따옴표로 사용할 글자. 기본값은 '"'이다.
|
||||
/// \return bool 무사히 저장했다면 true, 에러가 생긴 경우에는 false
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
bool cCsvFile::Save(const char* fileName, bool append, char seperator, char quote) const
|
||||
{
|
||||
Assert(seperator != quote);
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>忡 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// 출력 모드에 따라 파일을 적당한 플래그로 생성한다.
|
||||
std::ofstream file;
|
||||
if (append) { file.open(fileName, std::ios::out | std::ios::app); }
|
||||
else { file.open(fileName, std::ios::out | std::ios::trunc); }
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ߴٸ<DFB4>, false<73><65> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// 파일을 열지 못했다면, false를 리턴한다.
|
||||
if (!file) return false;
|
||||
|
||||
char special_chars[5] = { seperator, quote, '\r', '\n', 0 };
|
||||
char quote_escape_string[3] = { quote, quote, 0 };
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ⱦ<><C8BE><EFBFBD>ϸ鼭...
|
||||
// 모든 행을 횡단하면서...
|
||||
for (size_t i=0; i<m_Rows.size(); i++)
|
||||
{
|
||||
const cCsvRow& row = *((*this)[i]);
|
||||
|
||||
std::string line;
|
||||
|
||||
// <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ū<EFBFBD><C5AB> Ⱦ<><C8BE><EFBFBD>ϸ鼭...
|
||||
// 행 안의 모든 토큰을 횡단하면서...
|
||||
for (size_t j=0; j<row.size(); j++)
|
||||
{
|
||||
const std::string& token = row[j];
|
||||
|
||||
// <EFBFBD>Ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>('"' <EFBFBD>Ǵ<EFBFBD> ','<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
// <EFBFBD><EFBFBD>ū<EFBFBD>̶<EFBFBD><EFBFBD><EFBFBD> <20>׳<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20>ȴ<EFBFBD>.
|
||||
// 일반적인('"' 또는 ','를 포함하지 않은)
|
||||
// 토큰이라면 그냥 저장하면 된다.
|
||||
if (token.find_first_of(special_chars) == std::string::npos)
|
||||
{
|
||||
line += token;
|
||||
}
|
||||
// Ư<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ū<EFBFBD>̶<EFBFBD><CCB6><EFBFBD> <20><><EFBFBD>ڿ<EFBFBD> <20>¿쿡 '"'<27><> <20>ٿ<EFBFBD><D9BF>ְ<EFBFBD>,
|
||||
// <EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '"'<27><> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// 특수문자를 포함한 토큰이라면 문자열 좌우에 '"'를 붙여주고,
|
||||
// 문자열 내부의 '"'를 두 개로 만들어줘야한다.
|
||||
else
|
||||
{
|
||||
line += quote;
|
||||
@ -265,11 +265,11 @@ bool cCsvFile::Save(const char* fileName, bool append, char seperator, char quot
|
||||
line += quote;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ƴ϶<C6B4><CFB6><EFBFBD> ','<27><> <20><>ū<EFBFBD><C5AB> <20>ڿ<EFBFBD><DABF><EFBFBD> <20>ٿ<EFBFBD><D9BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// 마지막 셀이 아니라면 ','를 토큰의 뒤에다 붙여줘야한다.
|
||||
if (j != row.size() - 1) { line += seperator; }
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// 라인을 출력한다.
|
||||
file << line << std::endl;
|
||||
}
|
||||
|
||||
@ -277,7 +277,7 @@ bool cCsvFile::Save(const char* fileName, bool append, char seperator, char quot
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><DEB8><F0B8AEBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 모든 데이터를 메모리에서 삭제한다.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
void cCsvFile::Destroy()
|
||||
{
|
||||
@ -288,9 +288,9 @@ void cCsvFile::Destroy()
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// \brief <EFBFBD>ش<EFBFBD><EFBFBD>ϴ<EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \param index <EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>
|
||||
/// \return cCsvRow* <EFBFBD>ش<EFBFBD> <20><>
|
||||
/// \brief 해당하는 인덱스의 행을 반환한다.
|
||||
/// \param index 인덱스
|
||||
/// \return cCsvRow* 해당 행
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
cCsvRow* cCsvFile::operator [] (size_t index)
|
||||
{
|
||||
@ -299,9 +299,9 @@ cCsvRow* cCsvFile::operator [] (size_t index)
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// \brief <EFBFBD>ش<EFBFBD><EFBFBD>ϴ<EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \param index <EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>
|
||||
/// \return const cCsvRow* <EFBFBD>ش<EFBFBD> <20><>
|
||||
/// \brief 해당하는 인덱스의 행을 반환한다.
|
||||
/// \param index 인덱스
|
||||
/// \return const cCsvRow* 해당 행
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
const cCsvRow* cCsvFile::operator [] (size_t index) const
|
||||
{
|
||||
@ -310,7 +310,7 @@ const cCsvRow* cCsvFile::operator [] (size_t index) const
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// \brief 생성자
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
cCsvTable::cCsvTable()
|
||||
: m_CurRow(-1)
|
||||
@ -318,18 +318,18 @@ cCsvTable::cCsvTable()
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// \brief <EFBFBD>Ҹ<EFBFBD><EFBFBD><EFBFBD>
|
||||
/// \brief 소멸자
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
cCsvTable::~cCsvTable()
|
||||
{
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> CSV <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5>Ѵ<EFBFBD>.
|
||||
/// \param fileName CSV <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD>
|
||||
/// \param seperator <EFBFBD>ʵ<EFBFBD> <20>и<EFBFBD><D0B8>ڷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20>⺻<EFBFBD><E2BABB><EFBFBD><EFBFBD> ','<EFBFBD>̴<EFBFBD>.
|
||||
/// \param quote <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǥ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20>⺻<EFBFBD><E2BABB><EFBFBD><EFBFBD> '"'<EFBFBD>̴<EFBFBD>.
|
||||
/// \return bool <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5>ߴٸ<DFB4> true, <EFBFBD>ƴ϶<EFBFBD><EFBFBD><EFBFBD> false
|
||||
/// \brief 지정된 이름의 CSV 파일을 로드한다.
|
||||
/// \param fileName CSV 파일 이름
|
||||
/// \param seperator 필드 분리자로 사용할 글자. 기본값은 ','이다.
|
||||
/// \param quote 따옴표로 사용할 글자. 기본값은 '"'이다.
|
||||
/// \return bool 무사히 로드했다면 true, 아니라면 false
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
bool cCsvTable::Load(const char* fileName, const char seperator, const char quote)
|
||||
{
|
||||
@ -338,19 +338,19 @@ bool cCsvTable::Load(const char* fileName, const char seperator, const char quot
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѿ<D1BE><EEB0A3>.
|
||||
/// \return bool <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѿ <20><><EFBFBD><EFBFBD> true<75><65> <20><>ȯ<EFBFBD>ϰ<EFBFBD>, <20><> <20>̻<EFBFBD>
|
||||
/// <EFBFBD>Ѿ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD>쿡<EFBFBD><ECBFA1> false<73><65> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 다음 행으로 넘어간다.
|
||||
/// \return bool 다음 행으로 무사히 넘어간 경우 true를 반환하고, 더 이상
|
||||
/// 넘어갈 행이 존재하지 않는 경우에는 false를 반환한다.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
bool cCsvTable::Next()
|
||||
{
|
||||
// 20<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>÷ΰ<C3B7> <20>Ͼ<CFBE>ٵ<EFBFBD>...<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||||
// 20억번 정도 호출하면 오버플로가 일어날텐데...괜찮겠지?
|
||||
return ++m_CurRow < (int)m_File.GetRowCount() ? true : false;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>ڸ<EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \return size_t <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
/// \brief 현재 행의 셀 숫자를 반환한다.
|
||||
/// \return size_t 현재 행의 셀 숫자
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
size_t cCsvTable::ColCount() const
|
||||
{
|
||||
@ -358,9 +358,9 @@ size_t cCsvTable::ColCount() const
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// \brief <EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̿<EFBFBD><CCBF><EFBFBD> int <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \param index <EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>
|
||||
/// \return int <EFBFBD><EFBFBD> <20><>
|
||||
/// \brief 인덱스를 이용해 int 형으로 셀 값을 반환한다.
|
||||
/// \param index 셀 인덱스
|
||||
/// \return int 셀 값
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
int cCsvTable::AsInt(size_t index) const
|
||||
{
|
||||
@ -371,9 +371,9 @@ int cCsvTable::AsInt(size_t index) const
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// \brief <EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̿<EFBFBD><CCBF><EFBFBD> double <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \param index <EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>
|
||||
/// \return double <EFBFBD><EFBFBD> <20><>
|
||||
/// \brief 인덱스를 이용해 double 형으로 셀 값을 반환한다.
|
||||
/// \param index 셀 인덱스
|
||||
/// \return double 셀 값
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
double cCsvTable::AsDouble(size_t index) const
|
||||
{
|
||||
@ -384,9 +384,9 @@ double cCsvTable::AsDouble(size_t index) const
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// \brief <EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̿<EFBFBD><CCBF><EFBFBD> std::string <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \param index <EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD>
|
||||
/// \return const char* <EFBFBD><EFBFBD> <20><>
|
||||
/// \brief 인덱스를 이용해 std::string 형으로 셀 값을 반환한다.
|
||||
/// \param index 셀 인덱스
|
||||
/// \return const char* 셀 값
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
const char* cCsvTable::AsStringByIndex(size_t index) const
|
||||
{
|
||||
@ -397,7 +397,7 @@ const char* cCsvTable::AsStringByIndex(size_t index) const
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// \brief alias<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief alias를 포함해 모든 데이터를 삭제한다.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
void cCsvTable::Destroy()
|
||||
{
|
||||
@ -407,10 +407,10 @@ void cCsvTable::Destroy()
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \return const cCsvRow* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD>쿡<EFBFBD><ECBFA1> <20><> <20><><EFBFBD><EFBFBD>
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>ϰ<EFBFBD>, <20><> <20>̻<EFBFBD> <20><EFBFBD><D7BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>쿡<EFBFBD><ECBFA1> NULL<EFBFBD><EFBFBD>
|
||||
/// <EFBFBD><EFBFBD>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 현재 행을 반환한다.
|
||||
/// \return const cCsvRow* 액세스가 가능한 현재 행이 존재하는 경우에는 그 행의
|
||||
/// 포인터를 반환하고, 더 이상 액세스 가능한 행이 없는 경우에는 NULL을
|
||||
/// 반환한다.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
const cCsvRow* const cCsvTable::CurRow() const
|
||||
{
|
||||
|
@ -12,28 +12,28 @@
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// \class cCsvAlias
|
||||
/// \brief CSV <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><EFBFBD><DFBB>ϴ<EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̱<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü.
|
||||
/// \brief CSV 파일을 수정했을 때 발생하는 인덱스 문제를 줄이기 위한
|
||||
/// 별명 객체.
|
||||
///
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 0<><30> <20>÷<EFBFBD><C3B7><EFBFBD> A<><41> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD>, 1<><31> <20>÷<EFBFBD><C3B7><EFBFBD> B<><42> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>־<EFBFBD><D6BE>µ<EFBFBD>...
|
||||
/// 예를 들어 0번 컬럼이 A에 관한 내용을 포함하고, 1번 컬럼이 B에 관한 내용을
|
||||
/// 포함하고 있었는데...
|
||||
///
|
||||
/// <pre>
|
||||
/// int a = row.AsInt(0);
|
||||
/// int b = row.AsInt(1);
|
||||
/// </pre>
|
||||
///
|
||||
/// <EFBFBD><EFBFBD> <20><><EFBFBD>̿<EFBFBD> C<><43> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20>ϵ<EFBFBD><CFB5>ڵ<EFBFBD><DAB5>Ǿ<EFBFBD> <20>ִ<EFBFBD>
|
||||
/// 1<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>Ƽ<EFBFBD> <20><><EFBFBD>ľ<EFBFBD> <20>ϴµ<CFB4>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DFBB>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE>̴<EFBFBD>.
|
||||
/// 그 사이에 C에 관한 내용을 포함하는 컬럼이 끼어든 경우, 하드코딩되어 있는
|
||||
/// 1번을 찾아서 고쳐야 하는데, 상당히 에러가 발생하기 쉬운 작업이다.
|
||||
///
|
||||
/// <pre>
|
||||
/// int a = row.AsInt(0);
|
||||
/// int c = row.AsInt(1);
|
||||
/// int b = row.AsInt(2); <-- <EFBFBD><EFBFBD> <20>κ<EFBFBD><CEBA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
/// int b = row.AsInt(2); <-- 이 부분을 일일이 신경써야 한다.
|
||||
/// </pre>
|
||||
///
|
||||
/// <EFBFBD><EFBFBD> <20>κ<EFBFBD><CEBA><EFBFBD> <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> ó<><C3B3><EFBFBD>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EEB0A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ణ<EFBFBD>̳<EFBFBD><CCB3><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
|
||||
/// <EFBFBD>ִ<EFBFBD>.
|
||||
/// 이 부분을 문자열로 처리하면 유지보수에 들어가는 수고를 약간이나마 줄일 수
|
||||
/// 있다.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class cCsvAlias
|
||||
@ -47,51 +47,51 @@ private:
|
||||
typedef std::map<size_t, std::string> INDEX2NAME_MAP;
|
||||
#endif
|
||||
|
||||
NAME2INDEX_MAP m_Name2Index; ///< <EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD>
|
||||
INDEX2NAME_MAP m_Index2Name; ///< <EFBFBD>߸<EFBFBD><EFBFBD><EFBFBD> alias<EFBFBD><EFBFBD> <20>˻<EFBFBD><CBBB>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
NAME2INDEX_MAP m_Name2Index; ///< 셀 인덱스 대신으로 사용하기 위한 이름들
|
||||
INDEX2NAME_MAP m_Index2Name; ///< 잘못된 alias를 검사하기 위한 추가적인 맵
|
||||
|
||||
|
||||
public:
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// \brief 생성자
|
||||
cCsvAlias() {}
|
||||
|
||||
/// \brief <EFBFBD>Ҹ<EFBFBD><EFBFBD><EFBFBD>
|
||||
/// \brief 소멸자
|
||||
virtual ~cCsvAlias() {}
|
||||
|
||||
|
||||
public:
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD> <20><>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 셀을 액세스할 때, 숫자 대신 사용할 이름을 등록한다.
|
||||
void AddAlias(const char* name, size_t index);
|
||||
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 모든 데이터를 삭제한다.
|
||||
void Destroy();
|
||||
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 숫자 인덱스를 이름으로 변환한다.
|
||||
const char* operator [] (size_t index) const;
|
||||
|
||||
/// \brief <EFBFBD≯<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 이름을 숫자 인덱스로 변환한다.
|
||||
size_t operator [] (const char* name) const;
|
||||
|
||||
|
||||
private:
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
/// \brief 복사 생성자 금지
|
||||
cCsvAlias(const cCsvAlias&) {}
|
||||
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
/// \brief 대입 연산자 금지
|
||||
const cCsvAlias& operator = (const cCsvAlias&) { return *this; }
|
||||
};
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// \class cCsvRow
|
||||
/// \brief CSV <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> ĸ<><C4B8>ȭ<EFBFBD><C8AD> Ŭ<><C5AC><EFBFBD><EFBFBD>
|
||||
/// \brief CSV 파일의 한 행을 캡슐화한 클래스
|
||||
///
|
||||
/// CSV<EFBFBD><EFBFBD> <20>⺻ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̴<EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD> <20><><EFBFBD><EFBFBD> ',' <20><><EFBFBD>ڷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̴<EFBFBD>.
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20>ȿ<EFBFBD> Ư<><C6AF> <20><><EFBFBD>ڷ<EFBFBD> <20><><EFBFBD>̴<EFBFBD> ',' <20><><EFBFBD>ڳ<EFBFBD> '"' <20><><EFBFBD>ڰ<EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>,
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ణ <20>̻<EFBFBD><CCBB>ϰ<EFBFBD> <20><><EFBFBD>Ѵ<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><>ȭ<EFBFBD><C8AD> <20><><EFBFBD>̴<EFBFBD>.
|
||||
/// CSV의 기본 포맷은 엑셀에서 보이는 하나의 셀을 ',' 문자로 구분한 것이다.
|
||||
/// 하지만, 셀 안에 특수 문자로 쓰이는 ',' 문자나 '"' 문자가 들어갈 경우,
|
||||
/// 모양이 약간 이상하게 변한다. 다음은 그 변화의 예이다.
|
||||
///
|
||||
/// <pre>
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̴<EFBFBD> <20><><EFBFBD><EFBFBD> | <20><><EFBFBD><EFBFBD> CSV <20><><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
/// 엑셀에서 보이는 모양 | 실제 CSV 파일에 들어가있는 모양
|
||||
/// ---------------------+----------------------------------------------------
|
||||
/// ItemPrice | ItemPrice
|
||||
/// Item,Price | "Item,Price"
|
||||
@ -101,9 +101,9 @@ private:
|
||||
/// Item",Price | "Item"",Price"
|
||||
/// </pre>
|
||||
///
|
||||
/// <EFBFBD><EFBFBD> <20><><EFBFBD>μ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20>ִ<EFBFBD>.
|
||||
/// - <EFBFBD><EFBFBD> <20><><EFBFBD>ο<EFBFBD> ',' <EFBFBD>Ǵ<EFBFBD> '"' <EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><> <20>¿쿡 '"' <20><><EFBFBD>ڰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
/// - <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '"' <20><><EFBFBD>ڴ<EFBFBD> 2<><32><EFBFBD><EFBFBD> ġȯ<C4A1>ȴ<EFBFBD>.
|
||||
/// 이 예로서 다음과 같은 사항을 알 수 있다.
|
||||
/// - 셀 내부에 ',' 또는 '"' 문자가 들어갈 경우, 셀 좌우에 '"' 문자가 생긴다.
|
||||
/// - 셀 내부의 '"' 문자는 2개로 치환된다.
|
||||
///
|
||||
/// \sa cCsvFile
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@ -111,51 +111,51 @@ private:
|
||||
class cCsvRow : public std::vector<std::string>
|
||||
{
|
||||
public:
|
||||
/// \brief <EFBFBD>⺻ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// \brief 기본 생성자
|
||||
cCsvRow() {}
|
||||
|
||||
/// \brief <EFBFBD>Ҹ<EFBFBD><EFBFBD><EFBFBD>
|
||||
/// \brief 소멸자
|
||||
~cCsvRow() {}
|
||||
|
||||
|
||||
public:
|
||||
/// \brief <EFBFBD>ش<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> int <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 해당 셀의 데이터를 int 형으로 반환한다.
|
||||
int AsInt(size_t index) const { return atoi(at(index).c_str()); }
|
||||
|
||||
/// \brief <EFBFBD>ش<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> double <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 해당 셀의 데이터를 double 형으로 반환한다.
|
||||
double AsDouble(size_t index) const { return atof(at(index).c_str()); }
|
||||
|
||||
/// \brief <EFBFBD>ش<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 해당 셀의 데이터를 문자열로 반환한다.
|
||||
const char* AsString(size_t index) const { return at(index).c_str(); }
|
||||
|
||||
/// \brief <EFBFBD>ش<EFBFBD><EFBFBD>ϴ<EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> int <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 해당하는 이름의 셀 데이터를 int 형으로 반환한다.
|
||||
int AsInt(const char* name, const cCsvAlias& alias) const {
|
||||
return atoi( at(alias[name]).c_str() );
|
||||
}
|
||||
|
||||
/// \brief <EFBFBD>ش<EFBFBD><EFBFBD>ϴ<EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> int <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 해당하는 이름의 셀 데이터를 int 형으로 반환한다.
|
||||
double AsDouble(const char* name, const cCsvAlias& alias) const {
|
||||
return atof( at(alias[name]).c_str() );
|
||||
}
|
||||
|
||||
/// \brief <EFBFBD>ش<EFBFBD><EFBFBD>ϴ<EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 해당하는 이름의 셀 데이터를 문자열로 반환한다.
|
||||
const char* AsString(const char* name, const cCsvAlias& alias) const {
|
||||
return at(alias[name]).c_str();
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
/// \brief 복사 생성자 금지
|
||||
cCsvRow(const cCsvRow&) {}
|
||||
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
/// \brief 대입 연산자 금지
|
||||
const cCsvRow& operator = (const cCsvRow&) { return *this; }
|
||||
};
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// \class cCsvFile
|
||||
/// \brief CSV(Comma Seperated Values) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> read/write<EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD>
|
||||
/// \brief CSV(Comma Seperated Values) 파일을 read/write하기 위한 클래스
|
||||
///
|
||||
/// <b>sample</b>
|
||||
/// <pre>
|
||||
@ -179,8 +179,8 @@ private:
|
||||
/// file.save("test.csv", false);
|
||||
/// </pre>
|
||||
///
|
||||
/// \todo <EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ƴ϶<C6B4>, <20><EFBFBD><DEB8><EFBFBD> <20>ҽ<EFBFBD><D2BD>κ<EFBFBD><CEBA><EFBFBD> <20>д<EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD>
|
||||
/// <EFBFBD>־<EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20>ϴ<EFBFBD>.
|
||||
/// \todo 파일에서만 읽어들일 것이 아니라, 메모리 소스로부터 읽는 함수도
|
||||
/// 있어야 할 듯 하다.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class cCsvFile
|
||||
@ -188,55 +188,55 @@ class cCsvFile
|
||||
private:
|
||||
typedef std::vector<cCsvRow*> ROWS;
|
||||
|
||||
ROWS m_Rows; ///< <EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD>
|
||||
ROWS m_Rows; ///< 행 컬렉션
|
||||
|
||||
|
||||
public:
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// \brief 생성자
|
||||
cCsvFile() {}
|
||||
|
||||
/// \brief <EFBFBD>Ҹ<EFBFBD><EFBFBD><EFBFBD>
|
||||
/// \brief 소멸자
|
||||
virtual ~cCsvFile() { Destroy(); }
|
||||
|
||||
|
||||
public:
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> CSV <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5>Ѵ<EFBFBD>.
|
||||
/// \brief 지정된 이름의 CSV 파일을 로드한다.
|
||||
bool Load(const char* fileName, const char seperator=',', const char quote='"');
|
||||
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CSV <20><><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 가지고 있는 내용을 CSV 파일에다 저장한다.
|
||||
bool Save(const char* fileName, bool append=false, char seperator=',', char quote='"') const;
|
||||
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><DEB8><F0B8AEBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 모든 데이터를 메모리에서 삭제한다.
|
||||
void Destroy();
|
||||
|
||||
/// \brief <EFBFBD>ش<EFBFBD><EFBFBD>ϴ<EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 해당하는 인덱스의 행을 반환한다.
|
||||
cCsvRow* operator [] (size_t index);
|
||||
|
||||
/// \brief <EFBFBD>ش<EFBFBD><EFBFBD>ϴ<EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 해당하는 인덱스의 행을 반환한다.
|
||||
const cCsvRow* operator [] (size_t index) const;
|
||||
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 행의 갯수를 반환한다.
|
||||
size_t GetRowCount() const { return m_Rows.size(); }
|
||||
|
||||
|
||||
private:
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
/// \brief 복사 생성자 금지
|
||||
cCsvFile(const cCsvFile&) {}
|
||||
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
/// \brief 대입 연산자 금지
|
||||
const cCsvFile& operator = (const cCsvFile&) { return *this; }
|
||||
};
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// \class cCsvTable
|
||||
/// \brief CSV <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̿<EFBFBD><CCBF><EFBFBD> <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5>ϴ<EFBFBD> <20><><EFBFBD>찡 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// <EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD> <20>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ƿ<EFBFBD><C6BF>Ƽ Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
/// \brief CSV 파일을 이용해 테이블 데이터를 로드하는 경우가 많은데, 이 클래스는
|
||||
/// 그 작업을 좀 더 쉽게 하기 위해 만든 유틸리티 클래스다.
|
||||
///
|
||||
/// CSV <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD>ڸ<EFBFBD> <20>̿<EFBFBD><CCBF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD><D7BC><EFBFBD><EFBFBD>ؾ<EFBFBD> <20>ϴµ<CFB4>, CSV
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. <20><> <20>۾<EFBFBD><DBBE><EFBFBD> <20><>
|
||||
/// <EFBFBD>Ű<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>䱸<EFBFBD>ϴ<EFBFBD> <20><><EFBFBD>ٰ<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DFBB>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD>. <20><EFBFBD><D7B7>Ƿ<EFBFBD> <20><><EFBFBD>ڷ<EFBFBD>
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ⺸<EFBFBD>ٴ<EFBFBD> <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><EFBFBD><D7BC><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ణ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٰ<EFBFBD> <20><> <20><> <20>ִ<EFBFBD>.
|
||||
/// CSV 파일을 로드하는 경우, 숫자를 이용해 셀을 액세스해야 하는데, CSV
|
||||
/// 파일의 포맷이 바뀌는 경우, 이 숫자들을 변경해줘야한다. 이 작업이 꽤
|
||||
/// 신경 집중을 요구하는 데다가, 에러가 발생하기 쉽다. 그러므로 숫자로
|
||||
/// 액세스하기보다는 문자열로 액세스하는 것이 약간 느리지만 낫다고 할 수 있다.
|
||||
///
|
||||
/// <b>sample</b>
|
||||
/// <pre>
|
||||
@ -259,63 +259,63 @@ private:
|
||||
class cCsvTable
|
||||
{
|
||||
public :
|
||||
cCsvFile m_File; ///< CSV <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü
|
||||
cCsvFile m_File; ///< CSV 파일 객체
|
||||
private:
|
||||
cCsvAlias m_Alias; ///< <EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD> <20><> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ü
|
||||
int m_CurRow; ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ⱦ<><C8BE> <20><><EFBFBD><EFBFBD> <20><> <20><>ȣ
|
||||
cCsvAlias m_Alias; ///< 문자열을 셀 인덱스로 변환하기 위한 객체
|
||||
int m_CurRow; ///< 현재 횡단 중인 행 번호
|
||||
|
||||
|
||||
public:
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// \brief 생성자
|
||||
cCsvTable();
|
||||
|
||||
/// \brief <EFBFBD>Ҹ<EFBFBD><EFBFBD><EFBFBD>
|
||||
/// \brief 소멸자
|
||||
virtual ~cCsvTable();
|
||||
|
||||
|
||||
public:
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> CSV <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5>Ѵ<EFBFBD>.
|
||||
/// \brief 지정된 이름의 CSV 파일을 로드한다.
|
||||
bool Load(const char* fileName, const char seperator=',', const char quote='"');
|
||||
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD> <20><>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 셀을 액세스할 때, 숫자 대신 사용할 이름을 등록한다.
|
||||
void AddAlias(const char* name, size_t index) { m_Alias.AddAlias(name, index); }
|
||||
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѿ<D1BE><EEB0A3>.
|
||||
/// \brief 다음 행으로 넘어간다.
|
||||
bool Next();
|
||||
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>ڸ<EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 현재 행의 셀 숫자를 반환한다.
|
||||
size_t ColCount() const;
|
||||
|
||||
/// \brief <EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̿<EFBFBD><CCBF><EFBFBD> int <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 인덱스를 이용해 int 형으로 셀값을 반환한다.
|
||||
int AsInt(size_t index) const;
|
||||
|
||||
/// \brief <EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̿<EFBFBD><CCBF><EFBFBD> double <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 인덱스를 이용해 double 형으로 셀값을 반환한다.
|
||||
double AsDouble(size_t index) const;
|
||||
|
||||
/// \brief <EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̿<EFBFBD><CCBF><EFBFBD> std::string <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 인덱스를 이용해 std::string 형으로 셀값을 반환한다.
|
||||
const char* AsStringByIndex(size_t index) const;
|
||||
|
||||
/// \brief <EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20>̿<EFBFBD><CCBF><EFBFBD> int <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 셀 이름을 이용해 int 형으로 셀값을 반환한다.
|
||||
int AsInt(const char* name) const { return AsInt(m_Alias[name]); }
|
||||
|
||||
/// \brief <EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20>̿<EFBFBD><CCBF><EFBFBD> double <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 셀 이름을 이용해 double 형으로 셀값을 반환한다.
|
||||
double AsDouble(const char* name) const { return AsDouble(m_Alias[name]); }
|
||||
|
||||
/// \brief <EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20>̿<EFBFBD><CCBF><EFBFBD> std::string <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 셀 이름을 이용해 std::string 형으로 셀값을 반환한다.
|
||||
const char* AsString(const char* name) const { return AsStringByIndex(m_Alias[name]); }
|
||||
|
||||
/// \brief alias<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief alias를 포함해 모든 데이터를 삭제한다.
|
||||
void Destroy();
|
||||
|
||||
|
||||
private:
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
/// \brief 현재 행을 반환한다.
|
||||
const cCsvRow* const CurRow() const;
|
||||
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
/// \brief 복사 생성자 금지
|
||||
cCsvTable(const cCsvTable&) {}
|
||||
|
||||
/// \brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
/// \brief 대입 연산자 금지
|
||||
const cCsvTable& operator = (const cCsvTable&) { return *this; }
|
||||
};
|
||||
|
||||
|
@ -98,7 +98,7 @@ int CDBManager::Connect(int iSlot, const char * db_address, const int db_port, c
|
||||
if (iSlot < 0 || iSlot >= SQL_MAX_NUM)
|
||||
return false;
|
||||
|
||||
sys_log(0, "CREATING DIRECT_SQL");
|
||||
SPDLOG_INFO("CREATING DIRECT_SQL");
|
||||
m_directSQL[iSlot] = new CAsyncSQL2;
|
||||
if (!m_directSQL[iSlot]->Setup(db_address, user, pwd, db_name, g_stLocale.c_str(), true, db_port))
|
||||
{
|
||||
@ -107,7 +107,7 @@ int CDBManager::Connect(int iSlot, const char * db_address, const int db_port, c
|
||||
}
|
||||
|
||||
|
||||
sys_log(0, "CREATING MAIN_SQL");
|
||||
SPDLOG_INFO("CREATING MAIN_SQL");
|
||||
m_mainSQL[iSlot] = new CAsyncSQL2;
|
||||
if (!m_mainSQL[iSlot]->Setup(db_address, user, pwd, db_name, g_stLocale.c_str(), false, db_port))
|
||||
{
|
||||
@ -115,7 +115,7 @@ int CDBManager::Connect(int iSlot, const char * db_address, const int db_port, c
|
||||
return false;
|
||||
}
|
||||
|
||||
sys_log(0, "CREATING ASYNC_SQL");
|
||||
SPDLOG_INFO("CREATING ASYNC_SQL");
|
||||
m_asyncSQL[iSlot] = new CAsyncSQL2;
|
||||
if (!m_asyncSQL[iSlot]->Setup(db_address, user, pwd, db_name, g_stLocale.c_str(), false, db_port))
|
||||
{
|
||||
@ -137,7 +137,7 @@ extern int g_query_count[2];
|
||||
void CDBManager::ReturnQuery(const char * c_pszQuery, int iType, IDENT dwIdent, void * udata, int iSlot)
|
||||
{
|
||||
assert(iSlot < SQL_MAX_NUM);
|
||||
//sys_log(0, "ReturnQuery %s", c_pszQuery);
|
||||
//SPDLOG_DEBUG("ReturnQuery {}", c_pszQuery);
|
||||
CQueryInfo * p = new CQueryInfo;
|
||||
|
||||
p->iType = iType;
|
||||
@ -166,14 +166,14 @@ unsigned int CDBManager::EscapeString(void *to, const void *from, unsigned int l
|
||||
void CDBManager::SetLocale(const char * szLocale)
|
||||
{
|
||||
const std::string stLocale(szLocale);
|
||||
sys_log(0, "SetLocale start" );
|
||||
SPDLOG_DEBUG("SetLocale start");
|
||||
for (int n = 0; n < SQL_MAX_NUM; ++n)
|
||||
{
|
||||
m_mainSQL[n]->SetLocale(stLocale);
|
||||
m_directSQL[n]->SetLocale(stLocale);
|
||||
m_asyncSQL[n]->SetLocale(stLocale);
|
||||
}
|
||||
sys_log(0, "End setlocale %s", szLocale);
|
||||
SPDLOG_DEBUG("End setlocale {}", szLocale);
|
||||
}
|
||||
|
||||
void CDBManager::QueryLocaleSet()
|
||||
|
@ -2,9 +2,9 @@
|
||||
#ifndef __INC_METIN2_DB_DBMANAGER_H__
|
||||
#define __INC_METIN2_DB_DBMANAGER_H__
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŀ<>ؼ<EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>... <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ƿ<DEBE><C6BF><EFBFBD>
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϵ<EFBFBD><CFB5><EFBFBD> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>.
|
||||
// <EFBFBD>ڵ<EFBFBD> by <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ķα<CEB1><D7B7><EFBFBD> <20>Ƴ<EFBFBD><C6B3><EFBFBD>~ = _=)b
|
||||
// 디비 커넥션 클래스의 목적은... 디비에 접속해서 쿼리보내고 결과 받아오는
|
||||
// 모든 일들을 처리한다.
|
||||
// 코드 by 꼬붕 후로그래머 아노아~ = _=)b
|
||||
#include <libsql/include/CAsyncSQL.h>
|
||||
|
||||
#define SQL_SAFE_LENGTH(size) (size * 2 + 1)
|
||||
@ -23,7 +23,6 @@ enum eSQL_SLOT
|
||||
SQL_PLAYER,
|
||||
SQL_ACCOUNT,
|
||||
SQL_COMMON,
|
||||
SQL_HOTBACKUP,
|
||||
SQL_MAX_NUM,
|
||||
};
|
||||
|
||||
|
@ -145,8 +145,8 @@ void CGuildManager::ParseResult(SQLResult * pRes)
|
||||
str_to_number(r_info.gold, row[6]);
|
||||
str_to_number(r_info.level, row[7]);
|
||||
|
||||
sys_log(0,
|
||||
"GuildWar: %-24s ladder %-5d win %-3d draw %-3d loss %-3d",
|
||||
SPDLOG_DEBUG(
|
||||
"GuildWar: {:24} ladder {:<5} win {:<3} draw {:<3} loss {:<3}",
|
||||
r_info.szName,
|
||||
r_info.ladder_point,
|
||||
r_info.win,
|
||||
@ -170,17 +170,17 @@ void CGuildManager::Initialize()
|
||||
*str = '\0';
|
||||
|
||||
if (!polyPower.Analyze(str))
|
||||
sys_err("cannot set power poly: %s", str);
|
||||
SPDLOG_ERROR("cannot set power poly: {}", str);
|
||||
else
|
||||
sys_log(0, "POWER_POLY: %s", str);
|
||||
SPDLOG_DEBUG("POWER_POLY: {}", str);
|
||||
|
||||
if (!CConfig::instance().GetValue("POLY_HANDICAP", str, sizeof(str)))
|
||||
*str = '\0';
|
||||
|
||||
if (!polyHandicap.Analyze(str))
|
||||
sys_err("cannot set handicap poly: %s", str);
|
||||
SPDLOG_ERROR("cannot set handicap poly: {}", str);
|
||||
else
|
||||
sys_log(0, "HANDICAP_POLY: %s", str);
|
||||
SPDLOG_DEBUG("HANDICAP_POLY: {}", str);
|
||||
|
||||
QueryRanking();
|
||||
}
|
||||
@ -234,7 +234,7 @@ void CGuildManager::ResultRanking(MYSQL_RES * pRes)
|
||||
if (iLadderPoint != iLastLadderPoint)
|
||||
++iRank;
|
||||
|
||||
sys_log(0, "GUILD_RANK: %-24s %2d %d", row[1], iRank, iLadderPoint);
|
||||
SPDLOG_DEBUG("GUILD_RANK: {:24} {:2} {}", row[1], iRank, iLadderPoint);
|
||||
|
||||
map_kLadderPointRankingByGID.insert(std::make_pair(dwGID, iRank));
|
||||
}
|
||||
@ -242,7 +242,7 @@ void CGuildManager::ResultRanking(MYSQL_RES * pRes)
|
||||
|
||||
void CGuildManager::Update()
|
||||
{
|
||||
ProcessReserveWar(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ó<><C3B3>
|
||||
ProcessReserveWar(); // 예약 전쟁 처리
|
||||
|
||||
time_t now = CClientManager::instance().GetCurrentTime();
|
||||
|
||||
@ -250,7 +250,7 @@ void CGuildManager::Update()
|
||||
{
|
||||
// UNKNOWN_GUILD_MANAGE_UPDATE_LOG
|
||||
/*
|
||||
sys_log(0, "GuildManager::Update size %d now %d top %d, %s(%u) vs %s(%u)",
|
||||
SPDLOG_DEBUG("GuildManager::Update size {} now {} top {}, {}({}) vs {}({})",
|
||||
m_WarMap.size(),
|
||||
now,
|
||||
m_pqOnWar.top().first,
|
||||
@ -307,7 +307,7 @@ void CGuildManager::Update()
|
||||
p.dwGuildTo = ws.GID[1];
|
||||
|
||||
CClientManager::instance().ForwardPacket(HEADER_DG_GUILD_WAR, &p, sizeof(p));
|
||||
sys_log(0, "GuildWar: GUILD sending start of wait start war %d %d", ws.GID[0], ws.GID[1]);
|
||||
SPDLOG_DEBUG("GuildWar: GUILD sending start of wait start war {} {}", ws.GID[0], ws.GID[1]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -402,7 +402,7 @@ bool CGuildManager::IsHalfWinLadderPoint(DWORD dwGuildWinner, DWORD dwGuildLoser
|
||||
|
||||
void CGuildManager::ProcessDraw(DWORD dwGuildID1, DWORD dwGuildID2)
|
||||
{
|
||||
sys_log(0, "GuildWar: \tThe war between %d and %d is ended in draw", dwGuildID1, dwGuildID2);
|
||||
SPDLOG_DEBUG("GuildWar: \tThe war between {} and {} is ended in draw", dwGuildID1, dwGuildID2);
|
||||
|
||||
GuildWarDraw(dwGuildID1);
|
||||
GuildWarDraw(dwGuildID2);
|
||||
@ -416,7 +416,7 @@ void CGuildManager::ProcessWinLose(DWORD dwGuildWinner, DWORD dwGuildLoser)
|
||||
{
|
||||
GuildWarWin(dwGuildWinner);
|
||||
GuildWarLose(dwGuildLoser);
|
||||
sys_log(0, "GuildWar: \tWinner : %d Loser : %d", dwGuildWinner, dwGuildLoser);
|
||||
SPDLOG_DEBUG("GuildWar: \tWinner : {} Loser : {}", dwGuildWinner, dwGuildLoser);
|
||||
|
||||
int iPoint = GetLadderPoint(dwGuildLoser);
|
||||
int gain = (int)(iPoint * 0.05);
|
||||
@ -425,7 +425,7 @@ void CGuildManager::ProcessWinLose(DWORD dwGuildWinner, DWORD dwGuildLoser)
|
||||
if (IsHalfWinLadderPoint(dwGuildWinner, dwGuildLoser))
|
||||
gain /= 2;
|
||||
|
||||
sys_log(0, "GuildWar: \tgain : %d loss : %d", gain, loss);
|
||||
SPDLOG_DEBUG("GuildWar: \tgain : {} loss : {}", gain, loss);
|
||||
|
||||
ChangeLadderPoint(dwGuildWinner, gain);
|
||||
ChangeLadderPoint(dwGuildLoser, -loss);
|
||||
@ -435,7 +435,7 @@ void CGuildManager::ProcessWinLose(DWORD dwGuildWinner, DWORD dwGuildLoser)
|
||||
|
||||
void CGuildManager::RemoveWar(DWORD GID1, DWORD GID2)
|
||||
{
|
||||
sys_log(0, "GuildWar: RemoveWar(%d, %d)", GID1, GID2);
|
||||
SPDLOG_DEBUG("GuildWar: RemoveWar({}, {})", GID1, GID2);
|
||||
|
||||
if (GID1 > GID2)
|
||||
std::swap(GID2, GID1);
|
||||
@ -462,20 +462,20 @@ void CGuildManager::RemoveWar(DWORD GID1, DWORD GID2)
|
||||
}
|
||||
|
||||
//
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ʵ<EFBFBD><CAB5><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// 길드전 비정상 종료 및 필드전 종료
|
||||
//
|
||||
void CGuildManager::WarEnd(DWORD GID1, DWORD GID2, bool bForceDraw)
|
||||
{
|
||||
if (GID1 > GID2)
|
||||
std::swap(GID2, GID1);
|
||||
|
||||
sys_log(0, "GuildWar: WarEnd %d %d", GID1, GID2);
|
||||
SPDLOG_DEBUG("GuildWar: WarEnd {} {}", GID1, GID2);
|
||||
|
||||
itertype(m_WarMap[GID1]) itWarMap = m_WarMap[GID1].find(GID2);
|
||||
|
||||
if (itWarMap == m_WarMap[GID1].end())
|
||||
{
|
||||
sys_err("GuildWar: war not exist or already ended. [1]");
|
||||
SPDLOG_ERROR("GuildWar: war not exist or already ended. [1]");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -484,7 +484,7 @@ void CGuildManager::WarEnd(DWORD GID1, DWORD GID2, bool bForceDraw)
|
||||
|
||||
if (!pData || pData->bEnd)
|
||||
{
|
||||
sys_err("GuildWar: war not exist or already ended. [2]");
|
||||
SPDLOG_ERROR("GuildWar: war not exist or already ended. [2]");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -493,7 +493,7 @@ void CGuildManager::WarEnd(DWORD GID1, DWORD GID2, bool bForceDraw)
|
||||
|
||||
bool bDraw = false;
|
||||
|
||||
if (!bForceDraw) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ºΰ<C2BA> <20>ƴ<EFBFBD> <20><><EFBFBD>쿡<EFBFBD><ECBFA1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> üũ<C3BC>Ѵ<EFBFBD>.
|
||||
if (!bForceDraw) // 강제 무승부가 아닐 경우에는 점수를 체크한다.
|
||||
{
|
||||
if (pData->iScore[0] > pData->iScore[1])
|
||||
{
|
||||
@ -508,7 +508,7 @@ void CGuildManager::WarEnd(DWORD GID1, DWORD GID2, bool bForceDraw)
|
||||
else
|
||||
bDraw = true;
|
||||
}
|
||||
else // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>º<EFBFBD><C2BA><EFBFBD> <20><><EFBFBD>쿡<EFBFBD><ECBFA1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>º<EFBFBD>
|
||||
else // 강제 무승부일 경우에는 무조건 무승부
|
||||
bDraw = true;
|
||||
|
||||
if (bDraw)
|
||||
@ -516,18 +516,18 @@ void CGuildManager::WarEnd(DWORD GID1, DWORD GID2, bool bForceDraw)
|
||||
else
|
||||
ProcessWinLose(win_guild, lose_guild);
|
||||
|
||||
// DB <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ֱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
// DB 서버에서 자체적으로 끝낼 때도 있기 때문에 따로 패킷을 보내줘야 한다.
|
||||
CClientManager::instance().for_each_peer(FSendPeerWar(0, GUILD_WAR_END, GID1, GID2));
|
||||
|
||||
RemoveWar(GID1, GID2);
|
||||
}
|
||||
|
||||
//
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// 길드전 정상 종료
|
||||
//
|
||||
void CGuildManager::RecvWarOver(DWORD dwGuildWinner, DWORD dwGuildLoser, bool bDraw, int lWarPrice)
|
||||
{
|
||||
sys_log(0, "GuildWar: RecvWarOver : winner %u vs %u draw? %d war_price %d", dwGuildWinner, dwGuildLoser, bDraw ? 1 : 0, lWarPrice);
|
||||
SPDLOG_DEBUG("GuildWar: RecvWarOver : winner {} vs {} draw? {} war_price {}", dwGuildWinner, dwGuildLoser, bDraw ? 1 : 0, lWarPrice);
|
||||
|
||||
DWORD GID1 = dwGuildWinner;
|
||||
DWORD GID2 = dwGuildLoser;
|
||||
@ -570,13 +570,13 @@ void CGuildManager::RecvWarOver(DWORD dwGuildWinner, DWORD dwGuildLoser, bool bD
|
||||
|
||||
void CGuildManager::RecvWarEnd(DWORD GID1, DWORD GID2)
|
||||
{
|
||||
sys_log(0, "GuildWar: RecvWarEnded : %u vs %u", GID1, GID2);
|
||||
WarEnd(GID1, GID2, true); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ѿ<EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
SPDLOG_DEBUG("GuildWar: RecvWarEnded : {} vs {}", GID1, GID2);
|
||||
WarEnd(GID1, GID2, true); // 무조건 비정상 종료 시켜야 한다.
|
||||
}
|
||||
|
||||
void CGuildManager::StartWar(BYTE bType, DWORD GID1, DWORD GID2, CGuildWarReserve * pkReserve)
|
||||
{
|
||||
sys_log(0, "GuildWar: StartWar(%d,%d,%d)", bType, GID1, GID2);
|
||||
SPDLOG_DEBUG("GuildWar: StartWar({},{},{})", bType, GID1, GID2);
|
||||
|
||||
if (GID1 > GID2)
|
||||
std::swap(GID1, GID2);
|
||||
@ -610,7 +610,7 @@ void CGuildManager::UpdateScore(DWORD dwGainGID, DWORD dwOppGID, int iScoreDelta
|
||||
|
||||
if (!p || p->bEnd)
|
||||
{
|
||||
sys_err("GuildWar: war not exist or already ended.");
|
||||
SPDLOG_ERROR("GuildWar: war not exist or already ended.");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -634,7 +634,7 @@ void CGuildManager::UpdateScore(DWORD dwGainGID, DWORD dwOppGID, int iScoreDelta
|
||||
iNewBetScore = p->iBetScore[1];
|
||||
}
|
||||
|
||||
sys_log(0, "GuildWar: SendGuildWarScore guild %u wartype %u score_delta %d betscore_delta %d result %u, %u",
|
||||
SPDLOG_DEBUG("GuildWar: SendGuildWarScore guild {} wartype {} score_delta {} betscore_delta {} result {}, {}",
|
||||
dwGainGID, p->bType, iScoreDelta, iBetScoreDelta, iNewScore, iNewBetScore);
|
||||
|
||||
CClientManager::instance().for_each_peer(FSendGuildWarScore(dwGainGID, dwOppGID, iNewScore, iNewBetScore));
|
||||
@ -648,7 +648,7 @@ void CGuildManager::AddDeclare(BYTE bType, DWORD guild_from, DWORD guild_to)
|
||||
if (m_DeclareMap.find(di) == m_DeclareMap.end())
|
||||
m_DeclareMap.insert(di);
|
||||
|
||||
sys_log(0, "GuildWar: AddDeclare(Type:%d,from:%d,to:%d)", bType, guild_from, guild_to);
|
||||
SPDLOG_DEBUG("GuildWar: AddDeclare(Type:{},from:{},to:{})", bType, guild_from, guild_to);
|
||||
}
|
||||
|
||||
void CGuildManager::RemoveDeclare(DWORD guild_from, DWORD guild_to)
|
||||
@ -663,7 +663,7 @@ void CGuildManager::RemoveDeclare(DWORD guild_from, DWORD guild_to)
|
||||
if (it != m_DeclareMap.end())
|
||||
m_DeclareMap.erase(it);
|
||||
|
||||
sys_log(0, "GuildWar: RemoveDeclare(from:%d,to:%d)", guild_from, guild_to);
|
||||
SPDLOG_DEBUG("GuildWar: RemoveDeclare(from:{},to:{})", guild_from, guild_to);
|
||||
}
|
||||
|
||||
bool CGuildManager::TakeBetPrice(DWORD dwGuildTo, DWORD dwGuildFrom, int lWarPrice)
|
||||
@ -673,14 +673,14 @@ bool CGuildManager::TakeBetPrice(DWORD dwGuildTo, DWORD dwGuildFrom, int lWarPri
|
||||
|
||||
if (it_from == m_map_kGuild.end() || it_to == m_map_kGuild.end())
|
||||
{
|
||||
sys_log(0, "TakeBetPrice: guild not exist %u %u",
|
||||
SPDLOG_DEBUG("TakeBetPrice: guild not exist {} {}",
|
||||
dwGuildFrom, dwGuildTo);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (it_from->second.gold < lWarPrice || it_to->second.gold < lWarPrice)
|
||||
{
|
||||
sys_log(0, "TakeBetPrice: not enough gold %u %d to %u %d",
|
||||
SPDLOG_DEBUG("TakeBetPrice: not enough gold {} {} to {} {}",
|
||||
dwGuildFrom, it_from->second.gold, dwGuildTo, it_to->second.gold);
|
||||
return false;
|
||||
}
|
||||
@ -704,8 +704,8 @@ bool CGuildManager::WaitStart(TPacketGuildWar * p)
|
||||
TGuildWaitStartInfo info(p->bType, p->dwGuildFrom, p->dwGuildTo, p->lWarPrice, p->lInitialScore, NULL);
|
||||
m_pqWaitStart.push(std::make_pair(dwCurTime + GetGuildWarWaitStartDuration(), info));
|
||||
|
||||
sys_log(0,
|
||||
"GuildWar: WaitStart g1 %d g2 %d price %d start at %u",
|
||||
SPDLOG_DEBUG(
|
||||
"GuildWar: WaitStart g1 {} g2 {} price {} start at {}",
|
||||
p->dwGuildFrom,
|
||||
p->dwGuildTo,
|
||||
p->lWarPrice,
|
||||
@ -742,10 +742,10 @@ void CGuildManager::ChangeLadderPoint(DWORD GID, int change)
|
||||
snprintf(buf, sizeof(buf), "UPDATE guild%s SET ladder_point=%d WHERE id=%u", GetTablePostfix(), r.ladder_point, GID);
|
||||
CDBManager::instance().AsyncQuery(buf);
|
||||
|
||||
sys_log(0, "GuildManager::ChangeLadderPoint %u %d", GID, r.ladder_point);
|
||||
sys_log(0, "%s", buf);
|
||||
SPDLOG_DEBUG("GuildManager::ChangeLadderPoint {} {}", GID, r.ladder_point);
|
||||
SPDLOG_DEBUG("{}", buf);
|
||||
|
||||
// Packet <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// Packet 보내기
|
||||
TPacketGuildLadder p;
|
||||
|
||||
p.dwGuild = GID;
|
||||
@ -760,14 +760,14 @@ void CGuildManager::ChangeLadderPoint(DWORD GID, int change)
|
||||
void CGuildManager::UseSkill(DWORD GID, DWORD dwSkillVnum, DWORD dwCooltime)
|
||||
{
|
||||
// GUILD_SKILL_COOLTIME_BUG_FIX
|
||||
sys_log(0, "UseSkill(gid=%d, skill=%d) CoolTime(%d:%d)", GID, dwSkillVnum, dwCooltime, CClientManager::instance().GetCurrentTime() + dwCooltime);
|
||||
SPDLOG_DEBUG("UseSkill(gid={}, skill={}) CoolTime({}:{})", GID, dwSkillVnum, dwCooltime, CClientManager::instance().GetCurrentTime() + dwCooltime);
|
||||
m_pqSkill.push(std::make_pair(CClientManager::instance().GetCurrentTime() + dwCooltime, TGuildSkillUsed(GID, dwSkillVnum)));
|
||||
// END_OF_GUILD_SKILL_COOLTIME_BUG_FIX
|
||||
}
|
||||
|
||||
void CGuildManager::MoneyChange(DWORD dwGuild, DWORD dwGold)
|
||||
{
|
||||
sys_log(0, "GuildManager::MoneyChange %d %d", dwGuild, dwGold);
|
||||
SPDLOG_DEBUG("GuildManager::MoneyChange {} {}", dwGuild, dwGold);
|
||||
|
||||
TPacketDGGuildMoneyChange p;
|
||||
p.dwGuild = dwGuild;
|
||||
@ -788,12 +788,12 @@ void CGuildManager::DepositMoney(DWORD dwGuild, INT iGold)
|
||||
|
||||
if (it == m_map_kGuild.end())
|
||||
{
|
||||
sys_err("No guild by id %u", dwGuild);
|
||||
SPDLOG_ERROR("No guild by id {}", dwGuild);
|
||||
return;
|
||||
}
|
||||
|
||||
it->second.gold += iGold;
|
||||
sys_log(0, "GUILD: %u Deposit %u Total %d", dwGuild, iGold, it->second.gold);
|
||||
SPDLOG_DEBUG("GUILD: {} Deposit {} Total {}", dwGuild, iGold, it->second.gold);
|
||||
|
||||
MoneyChange(dwGuild, it->second.gold);
|
||||
}
|
||||
@ -804,15 +804,15 @@ void CGuildManager::WithdrawMoney(CPeer* peer, DWORD dwGuild, INT iGold)
|
||||
|
||||
if (it == m_map_kGuild.end())
|
||||
{
|
||||
sys_err("No guild by id %u", dwGuild);
|
||||
SPDLOG_ERROR("No guild by id {}", dwGuild);
|
||||
return;
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>÷<EFBFBD><C3B7>ش<EFBFBD>
|
||||
// 돈이있으니 출금하고 올려준다
|
||||
if (it->second.gold >= iGold)
|
||||
{
|
||||
it->second.gold -= iGold;
|
||||
sys_log(0, "GUILD: %u Withdraw %d Total %d", dwGuild, iGold, it->second.gold);
|
||||
SPDLOG_DEBUG("GUILD: {} Withdraw {} Total {}", dwGuild, iGold, it->second.gold);
|
||||
|
||||
TPacketDGGuildMoneyWithdraw p;
|
||||
p.dwGuild = dwGuild;
|
||||
@ -830,7 +830,7 @@ void CGuildManager::WithdrawMoneyReply(DWORD dwGuild, BYTE bGiveSuccess, INT iGo
|
||||
if (it == m_map_kGuild.end())
|
||||
return;
|
||||
|
||||
sys_log(0, "GuildManager::WithdrawMoneyReply : guild %u success %d gold %d", dwGuild, bGiveSuccess, iGold);
|
||||
SPDLOG_DEBUG("GuildManager::WithdrawMoneyReply : guild {} success {} gold {}", dwGuild, bGiveSuccess, iGold);
|
||||
|
||||
if (!bGiveSuccess)
|
||||
it->second.gold += iGold;
|
||||
@ -839,7 +839,7 @@ void CGuildManager::WithdrawMoneyReply(DWORD dwGuild, BYTE bGiveSuccess, INT iGo
|
||||
}
|
||||
|
||||
//
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD>)
|
||||
// 예약 길드전(관전자가 배팅할 수 있다)
|
||||
//
|
||||
const int c_aiScoreByLevel[GUILD_MAX_LEVEL+1] =
|
||||
{
|
||||
@ -869,7 +869,7 @@ const int c_aiScoreByLevel[GUILD_MAX_LEVEL+1] =
|
||||
const int c_aiScoreByRanking[GUILD_RANK_MAX_NUM+1] =
|
||||
{
|
||||
0,
|
||||
55000, // 1<EFBFBD><EFBFBD>
|
||||
55000, // 1위
|
||||
50000,
|
||||
45000,
|
||||
40000,
|
||||
@ -878,7 +878,7 @@ const int c_aiScoreByRanking[GUILD_RANK_MAX_NUM+1] =
|
||||
28000,
|
||||
24000,
|
||||
21000,
|
||||
18000, // 10<EFBFBD><EFBFBD>
|
||||
18000, // 10위
|
||||
15000,
|
||||
12000,
|
||||
10000,
|
||||
@ -888,7 +888,7 @@ const int c_aiScoreByRanking[GUILD_RANK_MAX_NUM+1] =
|
||||
3000,
|
||||
2000,
|
||||
1000,
|
||||
500 // 20<EFBFBD><EFBFBD>
|
||||
500 // 20위
|
||||
};
|
||||
|
||||
void CGuildManager::BootReserveWar()
|
||||
@ -932,22 +932,22 @@ void CGuildManager::BootReserveWar()
|
||||
|
||||
char buf[512];
|
||||
snprintf(buf, sizeof(buf), "GuildWar: BootReserveWar : step %d id %u GID1 %u GID2 %u", i, t.dwID, t.dwGuildFrom, t.dwGuildTo);
|
||||
// i == 0 <EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> DB<44><42> ƨ<><C6A8> <20><><EFBFBD>̹Ƿ<CCB9> <20><><EFBFBD>º<EFBFBD> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>.
|
||||
// <EFBFBD>Ǵ<EFBFBD>, 5<><35> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>º<EFBFBD> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>. (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>þ<EFBFBD><C3BE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>)
|
||||
// i == 0 이면 길드전 도중 DB가 튕긴 것이므로 무승부 처리한다.
|
||||
// 또는, 5분 이하 남은 예약 길드전도 무승부 처리한다. (각자의 배팅액을 돌려준다)
|
||||
//if (i == 0 || (int) t.dwTime - CClientManager::instance().GetCurrentTime() < 60 * 5)
|
||||
if (i == 0 || (int) t.dwTime - CClientManager::instance().GetCurrentTime() < 0)
|
||||
{
|
||||
if (i == 0)
|
||||
sys_log(0, "%s : DB was shutdowned while war is being.", buf);
|
||||
SPDLOG_DEBUG("{} : DB was shutdowned while war is being.", buf);
|
||||
else
|
||||
sys_log(0, "%s : left time lower than 5 minutes, will be canceled", buf);
|
||||
SPDLOG_DEBUG("{} : left time lower than 5 minutes, will be canceled", buf);
|
||||
|
||||
pkReserve->Draw();
|
||||
delete pkReserve;
|
||||
}
|
||||
else
|
||||
{
|
||||
sys_log(0, "%s : OK", buf);
|
||||
SPDLOG_DEBUG("{} : OK", buf);
|
||||
m_map_kWarReserve.insert(std::make_pair(t.dwID, pkReserve));
|
||||
}
|
||||
}
|
||||
@ -1010,7 +1010,7 @@ bool CGuildManager::ReserveWar(TPacketGuildWar * p)
|
||||
|
||||
int lvp, rkp, alv, mc;
|
||||
|
||||
// <EFBFBD>Ŀ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// 파워 계산
|
||||
TGuild & k1 = TouchGuild(GID1);
|
||||
|
||||
lvp = c_aiScoreByLevel[std::min<size_t>(GUILD_MAX_LEVEL, k1.level)];
|
||||
@ -1024,9 +1024,9 @@ bool CGuildManager::ReserveWar(TPacketGuildWar * p)
|
||||
polyPower.SetVar("mc", mc);
|
||||
|
||||
t.lPowerFrom = (int) polyPower.Eval();
|
||||
sys_log(0, "GuildWar: %u lvp %d rkp %d alv %d mc %d power %d", GID1, lvp, rkp, alv, mc, t.lPowerFrom);
|
||||
SPDLOG_DEBUG("GuildWar: {} lvp {} rkp {} alv {} mc {} power {}", GID1, lvp, rkp, alv, mc, t.lPowerFrom);
|
||||
|
||||
// <EFBFBD>Ŀ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// 파워 계산
|
||||
TGuild & k2 = TouchGuild(GID2);
|
||||
|
||||
lvp = c_aiScoreByLevel[std::min<size_t>(GUILD_MAX_LEVEL, k2.level)];
|
||||
@ -1040,9 +1040,9 @@ bool CGuildManager::ReserveWar(TPacketGuildWar * p)
|
||||
polyPower.SetVar("mc", mc);
|
||||
|
||||
t.lPowerTo = (int) polyPower.Eval();
|
||||
sys_log(0, "GuildWar: %u lvp %d rkp %d alv %d mc %d power %d", GID2, lvp, rkp, alv, mc, t.lPowerTo);
|
||||
SPDLOG_DEBUG("GuildWar: {} lvp {} rkp {} alv {} mc {} power {}", GID2, lvp, rkp, alv, mc, t.lPowerTo);
|
||||
|
||||
// <EFBFBD>ڵ<EFBFBD>ĸ <20><><EFBFBD><EFBFBD>
|
||||
// 핸디캡 계산
|
||||
if (t.lPowerTo > t.lPowerFrom)
|
||||
{
|
||||
polyHandicap.SetVar("pA", t.lPowerTo);
|
||||
@ -1055,9 +1055,9 @@ bool CGuildManager::ReserveWar(TPacketGuildWar * p)
|
||||
}
|
||||
|
||||
t.lHandicap = (int) polyHandicap.Eval();
|
||||
sys_log(0, "GuildWar: handicap %d", t.lHandicap);
|
||||
SPDLOG_DEBUG("GuildWar: handicap {}", t.lHandicap);
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 쿼리
|
||||
char szQuery[512];
|
||||
|
||||
snprintf(szQuery, sizeof(szQuery),
|
||||
@ -1069,7 +1069,7 @@ bool CGuildManager::ReserveWar(TPacketGuildWar * p)
|
||||
|
||||
if (pmsg->Get()->uiAffectedRows == 0 || pmsg->Get()->uiInsertID == 0 || pmsg->Get()->uiAffectedRows == (uint32_t)-1)
|
||||
{
|
||||
sys_err("GuildWar: Cannot insert row");
|
||||
SPDLOG_ERROR("GuildWar: Cannot insert row");
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1094,14 +1094,14 @@ void CGuildManager::ProcessReserveWar()
|
||||
CGuildWarReserve * pk = it2->second;
|
||||
TGuildWarReserve & r = pk->GetDataRef();
|
||||
|
||||
if (!r.bStarted && r.dwTime - 1800 <= dwCurTime) // 30<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˸<EFBFBD><CBB8><EFBFBD>.
|
||||
if (!r.bStarted && r.dwTime - 1800 <= dwCurTime) // 30분 전부터 알린다.
|
||||
{
|
||||
int iMin = (int) ceil((int)(r.dwTime - dwCurTime) / 60.0);
|
||||
|
||||
TGuild & r_1 = m_map_kGuild[r.dwGuildFrom];
|
||||
TGuild & r_2 = m_map_kGuild[r.dwGuildTo];
|
||||
|
||||
sys_log(0, "GuildWar: started GID1 %u GID2 %u %d time %d min %d", r.dwGuildFrom, r.dwGuildTo, r.bStarted, dwCurTime - r.dwTime, iMin);
|
||||
SPDLOG_DEBUG("GuildWar: started GID1 {} GID2 {} {} time {} min {}", r.dwGuildFrom, r.dwGuildTo, r.bStarted, dwCurTime - r.dwTime, iMin);
|
||||
|
||||
if (iMin <= 0)
|
||||
{
|
||||
@ -1135,9 +1135,9 @@ void CGuildManager::ProcessReserveWar()
|
||||
pk->SetLastNoticeMin(iMin);
|
||||
|
||||
if (!g_stLocale.compare("euckr"))
|
||||
CClientManager::instance().SendNotice("%s <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %s <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> %d<><64> <20><> <20><><EFBFBD><EFBFBD> <20>˴ϴ<CBB4>!", r_1.szName, r_2.szName, iMin);
|
||||
CClientManager::instance().SendNotice("The war between guild %s and guild %s will begin in approximately %d minutes!", r_1.szName, r_2.szName, iMin);
|
||||
else if (!g_stLocale.compare("gb2312"))
|
||||
CClientManager::instance().SendNotice("%s <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %s <20><><EFBFBD><EFBFBD><EFBFBD>İ<EFBFBD><C4B0><EFBFBD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d<><64><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD>ʼ!", r_1.szName, r_2.szName, iMin);
|
||||
CClientManager::instance().SendNotice("The war between guild %s and guild %s will begin in approximately %d minutes!", r_1.szName, r_2.szName, iMin);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1152,7 +1152,7 @@ bool CGuildManager::Bet(DWORD dwID, const char * c_pszLogin, DWORD dwGold, DWORD
|
||||
|
||||
if (it == m_map_kWarReserve.end())
|
||||
{
|
||||
sys_log(0, "WAR_RESERVE: Bet: cannot find reserve war by id %u", dwID);
|
||||
SPDLOG_DEBUG("WAR_RESERVE: Bet: cannot find reserve war by id {}", dwID);
|
||||
snprintf(szQuery, sizeof(szQuery), "INSERT INTO item_award (login, vnum, socket0, given_time) VALUES('%s', %d, %u, NOW())",
|
||||
c_pszLogin, ITEM_ELK_VNUM, dwGold);
|
||||
CDBManager::instance().AsyncQuery(szQuery);
|
||||
@ -1161,7 +1161,7 @@ bool CGuildManager::Bet(DWORD dwID, const char * c_pszLogin, DWORD dwGold, DWORD
|
||||
|
||||
if (!it->second->Bet(c_pszLogin, dwGold, dwGuild))
|
||||
{
|
||||
sys_log(0, "WAR_RESERVE: Bet: cannot bet id %u, login %s, gold %u, guild %u", dwID, c_pszLogin, dwGold, dwGuild);
|
||||
SPDLOG_DEBUG("WAR_RESERVE: Bet: cannot bet id {}, login {}, gold {}, guild {}", dwID, c_pszLogin, dwGold, dwGuild);
|
||||
snprintf(szQuery, sizeof(szQuery), "INSERT INTO item_award (login, vnum, socket0, given_time) VALUES('%s', %d, %u, NOW())",
|
||||
c_pszLogin, ITEM_ELK_VNUM, dwGold);
|
||||
CDBManager::instance().AsyncQuery(szQuery);
|
||||
@ -1239,7 +1239,7 @@ void CGuildWarReserve::Initialize()
|
||||
|
||||
void CGuildWarReserve::OnSetup(CPeer * peer)
|
||||
{
|
||||
if (m_data.bStarted) // <EFBFBD>̹<EFBFBD> <20><><EFBFBD>۵<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
|
||||
if (m_data.bStarted) // 이미 시작된 것은 보내지 않는다.
|
||||
return;
|
||||
|
||||
FSendPeerWar(m_data.bType, GUILD_WAR_RESERVE, m_data.dwGuildFrom, m_data.dwGuildTo) (peer);
|
||||
@ -1271,19 +1271,19 @@ bool CGuildWarReserve::Bet(const char * pszLogin, DWORD dwGold, DWORD dwGuild)
|
||||
|
||||
if (m_data.dwGuildFrom != dwGuild && m_data.dwGuildTo != dwGuild)
|
||||
{
|
||||
sys_log(0, "GuildWarReserve::Bet: invalid guild id");
|
||||
SPDLOG_DEBUG("GuildWarReserve::Bet: invalid guild id");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (m_data.bStarted)
|
||||
{
|
||||
sys_log(0, "GuildWarReserve::Bet: war is already started");
|
||||
SPDLOG_DEBUG("GuildWarReserve::Bet: war is already started");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (mapBet.find(pszLogin) != mapBet.end())
|
||||
{
|
||||
sys_log(0, "GuildWarReserve::Bet: failed. already bet");
|
||||
SPDLOG_DEBUG("GuildWarReserve::Bet: failed. already bet");
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1295,7 +1295,7 @@ bool CGuildWarReserve::Bet(const char * pszLogin, DWORD dwGold, DWORD dwGuild)
|
||||
|
||||
if (pmsg->Get()->uiAffectedRows == 0 || pmsg->Get()->uiAffectedRows == (uint32_t)-1)
|
||||
{
|
||||
sys_log(0, "GuildWarReserve::Bet: failed. cannot insert row to guild_war_bet table");
|
||||
SPDLOG_DEBUG("GuildWarReserve::Bet: failed. cannot insert row to guild_war_bet table");
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1311,7 +1311,7 @@ bool CGuildWarReserve::Bet(const char * pszLogin, DWORD dwGold, DWORD dwGuild)
|
||||
|
||||
CDBManager::instance().AsyncQuery(szQuery);
|
||||
|
||||
sys_log(0, "GuildWarReserve::Bet: success. %s %u war_id %u bet %u : %u", pszLogin, dwGuild, m_data.dwID, m_data.dwBetFrom, m_data.dwBetTo);
|
||||
SPDLOG_DEBUG("GuildWarReserve::Bet: success. {} {} war_id {} bet {} : {}", pszLogin, dwGuild, m_data.dwID, m_data.dwBetFrom, m_data.dwBetTo);
|
||||
mapBet.insert(std::make_pair(pszLogin, std::make_pair(dwGuild, dwGold)));
|
||||
|
||||
TPacketGDGuildWarBet pckBet;
|
||||
@ -1325,8 +1325,8 @@ bool CGuildWarReserve::Bet(const char * pszLogin, DWORD dwGold, DWORD dwGuild)
|
||||
}
|
||||
|
||||
//
|
||||
// <EFBFBD><EFBFBD><EFBFBD>º<EFBFBD> ó<><C3B3>: <20><><EFBFBD>κ<EFBFBD> <20>ºΰ<C2BA> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> Ư<><C6AF> <20><>Ȳ<EFBFBD><C8B2> <20><><EFBFBD>쿡<EFBFBD><ECBFA1>
|
||||
// <EFBFBD><EFBFBD><EFBFBD>º<EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
// 무승부 처리: 대부분 승부가 나야 정상이지만, 서버 문제 등 특정 상황일 경우에는
|
||||
// 무승부 처리가 있어야 한다.
|
||||
//
|
||||
void CGuildWarReserve::Draw()
|
||||
{
|
||||
@ -1338,7 +1338,7 @@ void CGuildWarReserve::Draw()
|
||||
if (mapBet.empty())
|
||||
return;
|
||||
|
||||
sys_log(0, "WAR_REWARD: Draw. war_id %u", m_data.dwID);
|
||||
SPDLOG_DEBUG("WAR_REWARD: Draw. war_id {}", m_data.dwID);
|
||||
|
||||
itertype(mapBet) it = mapBet.begin();
|
||||
|
||||
@ -1368,7 +1368,7 @@ void CGuildWarReserve::Draw()
|
||||
|
||||
if (iRow > 0)
|
||||
{
|
||||
sys_log(0, "WAR_REWARD: QUERY: %s", szQuery);
|
||||
SPDLOG_DEBUG("WAR_REWARD: QUERY: {}", szQuery);
|
||||
CDBManager::instance().AsyncQuery(szQuery);
|
||||
}
|
||||
|
||||
@ -1381,18 +1381,18 @@ void CGuildWarReserve::End(int iScoreFrom, int iScoreTo)
|
||||
{
|
||||
DWORD dwWinner;
|
||||
|
||||
sys_log(0, "WAR_REWARD: End: From %u %d To %u %d", m_data.dwGuildFrom, iScoreFrom, m_data.dwGuildTo, iScoreTo);
|
||||
SPDLOG_DEBUG("WAR_REWARD: End: From {} {} To {} {}", m_data.dwGuildFrom, iScoreFrom, m_data.dwGuildTo, iScoreTo);
|
||||
|
||||
if (m_data.lPowerFrom > m_data.lPowerTo)
|
||||
{
|
||||
if (m_data.lHandicap > iScoreFrom - iScoreTo)
|
||||
{
|
||||
sys_log(0, "WAR_REWARD: End: failed to overcome handicap, From is strong but To won");
|
||||
SPDLOG_DEBUG("WAR_REWARD: End: failed to overcome handicap, From is strong but To won");
|
||||
dwWinner = m_data.dwGuildTo;
|
||||
}
|
||||
else
|
||||
{
|
||||
sys_log(0, "WAR_REWARD: End: success to overcome handicap, From win!");
|
||||
SPDLOG_DEBUG("WAR_REWARD: End: success to overcome handicap, From win!");
|
||||
dwWinner = m_data.dwGuildFrom;
|
||||
}
|
||||
}
|
||||
@ -1400,12 +1400,12 @@ void CGuildWarReserve::End(int iScoreFrom, int iScoreTo)
|
||||
{
|
||||
if (m_data.lHandicap > iScoreTo - iScoreFrom)
|
||||
{
|
||||
sys_log(0, "WAR_REWARD: End: failed to overcome handicap, To is strong but From won");
|
||||
SPDLOG_DEBUG("WAR_REWARD: End: failed to overcome handicap, To is strong but From won");
|
||||
dwWinner = m_data.dwGuildFrom;
|
||||
}
|
||||
else
|
||||
{
|
||||
sys_log(0, "WAR_REWARD: End: success to overcome handicap, To win!");
|
||||
SPDLOG_DEBUG("WAR_REWARD: End: success to overcome handicap, To win!");
|
||||
dwWinner = m_data.dwGuildTo;
|
||||
}
|
||||
}
|
||||
@ -1427,17 +1427,17 @@ void CGuildWarReserve::End(int iScoreFrom, int iScoreTo)
|
||||
dwWinnerBet = m_data.dwBetTo;
|
||||
else
|
||||
{
|
||||
sys_err("WAR_REWARD: fatal error, winner does not exist!");
|
||||
SPDLOG_ERROR("WAR_REWARD: fatal error, winner does not exist!");
|
||||
return;
|
||||
}
|
||||
|
||||
if (dwWinnerBet == 0)
|
||||
{
|
||||
sys_err("WAR_REWARD: total bet money on winner is zero");
|
||||
SPDLOG_ERROR("WAR_REWARD: total bet money on winner is zero");
|
||||
return;
|
||||
}
|
||||
|
||||
sys_log(0, "WAR_REWARD: End: Total bet: %u, Winner bet: %u", dwTotalBet, dwWinnerBet);
|
||||
SPDLOG_DEBUG("WAR_REWARD: End: Total bet: {}, Winner bet: {}", dwTotalBet, dwWinnerBet);
|
||||
|
||||
itertype(mapBet) it = mapBet.begin();
|
||||
|
||||
@ -1458,8 +1458,8 @@ void CGuildWarReserve::End(int iScoreFrom, int iScoreTo)
|
||||
|
||||
double ratio = (double) it->second.second / dwWinnerBet;
|
||||
|
||||
// 10% <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>й<EFBFBD>
|
||||
sys_log(0, "WAR_REWARD: %s %u ratio %f", it->first.c_str(), it->second.second, ratio);
|
||||
// 10% 세금 공제 후 분배
|
||||
SPDLOG_DEBUG("WAR_REWARD: {} {} ratio {}", it->first.c_str(), it->second.second, ratio);
|
||||
|
||||
DWORD dwGold = (DWORD) (dwTotalBet * ratio * 0.9);
|
||||
|
||||
@ -1480,7 +1480,7 @@ void CGuildWarReserve::End(int iScoreFrom, int iScoreTo)
|
||||
|
||||
if (iRow > 0)
|
||||
{
|
||||
sys_log(0, "WAR_REWARD: query: %s", szQuery);
|
||||
SPDLOG_DEBUG("WAR_REWARD: query: {}", szQuery);
|
||||
CDBManager::instance().AsyncQuery(szQuery);
|
||||
}
|
||||
|
||||
|
@ -150,7 +150,7 @@ class CGuildWarReserve
|
||||
void SetLastNoticeMin(int iMin) { m_iLastNoticeMin = iMin; }
|
||||
|
||||
private:
|
||||
CGuildWarReserve(); // <EFBFBD>⺻ <20><><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
CGuildWarReserve(); // 기본 생성자를 사용하지 못하도록 의도적으로 구현하지 않음
|
||||
|
||||
TGuildWarReserve m_data;
|
||||
// <login, <guild, gold>>
|
||||
@ -235,7 +235,7 @@ class CGuildManager : public singleton<CGuildManager>
|
||||
std::map<DWORD, TGuild> m_map_kGuild;
|
||||
std::map<DWORD, std::map<DWORD, time_t> > m_mapGuildWarEndTime;
|
||||
|
||||
std::set<TGuildDeclareInfo> m_DeclareMap; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>¸<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
std::set<TGuildDeclareInfo> m_DeclareMap; // 선전 포고 상태를 저장
|
||||
std::map<DWORD, std::map<DWORD, TGuildWarInfo> > m_WarMap;
|
||||
|
||||
typedef std::pair<time_t, TGuildWarPQElement *> stPairGuildWar;
|
||||
|
@ -1,86 +0,0 @@
|
||||
#include "stdafx.h"
|
||||
#include "HB.h"
|
||||
#include "Main.h"
|
||||
#include "DBManager.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
PlayerHB::PlayerHB()
|
||||
{
|
||||
m_iExpireTime = 3600; // 1 hour hotbackup default.
|
||||
}
|
||||
|
||||
PlayerHB::~PlayerHB()
|
||||
{
|
||||
}
|
||||
|
||||
bool PlayerHB::Initialize()
|
||||
{
|
||||
char szQuery[128];
|
||||
snprintf(szQuery, sizeof(szQuery), "SHOW CREATE TABLE player%s", GetTablePostfix());
|
||||
|
||||
std::unique_ptr<SQLMsg> pMsg(CDBManager::instance().DirectQuery(szQuery));
|
||||
|
||||
if (pMsg->Get()->uiNumRows == 0)
|
||||
return false;
|
||||
|
||||
MYSQL_ROW row = mysql_fetch_row(pMsg->Get()->pSQLResult);
|
||||
m_stCreateTableQuery = row[1];
|
||||
return true;
|
||||
}
|
||||
|
||||
//
|
||||
// @version 05/07/05 Bang2ni - id <20><> <20>ش<EFBFBD><D8B4>ϴ<EFBFBD> data <20><> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> data <20><> insert <20>ϴ<EFBFBD><CFB4>ڵ<EFBFBD> <20>߰<EFBFBD>.
|
||||
//
|
||||
void PlayerHB::Put(DWORD id)
|
||||
{
|
||||
itertype(m_map_data) it = m_map_data.find(id);
|
||||
|
||||
if (it == m_map_data.end())
|
||||
{
|
||||
Query(id);
|
||||
m_map_data.insert(std::pair< DWORD, time_t >(id, get_dword_time()));
|
||||
return;
|
||||
}
|
||||
|
||||
if (time(0) - it->second > m_iExpireTime)
|
||||
Query(id);
|
||||
}
|
||||
|
||||
//
|
||||
// @version 05/07/05 Bang2ni - Query string <20><><EFBFBD>۰<EFBFBD> <20>۾Ƽ<DBBE> <20>÷<EFBFBD><C3B7><EFBFBD>.
|
||||
//
|
||||
bool PlayerHB::Query(DWORD id)
|
||||
{
|
||||
time_t ct = time(0);
|
||||
struct tm curr_tm = *localtime(&ct);
|
||||
char szTableName[64];
|
||||
snprintf(szTableName, sizeof(szTableName), "hb_%02d%02d%02d%02d_player%s",
|
||||
curr_tm.tm_year - 100, curr_tm.tm_mon + 1, curr_tm.tm_mday, curr_tm.tm_hour, GetTablePostfix());
|
||||
|
||||
char szQuery[4096];
|
||||
|
||||
if (m_stTableName.compare(szTableName))
|
||||
{
|
||||
char szFind[32];
|
||||
snprintf(szFind, sizeof(szFind), "CREATE TABLE `player%s`", GetTablePostfix());
|
||||
int pos = m_stCreateTableQuery.find(szFind);
|
||||
|
||||
if (pos < 0)
|
||||
{
|
||||
sys_err("cannot find %s ", szFind);
|
||||
// sys_err("cannot find %s in %s", szFind, m_stCreateTableQuery.c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
snprintf(szQuery, sizeof(szQuery), "CREATE TABLE IF NOT EXISTS %s%s", szTableName, m_stCreateTableQuery.c_str() + strlen(szFind));
|
||||
// sys_log(0, "%s", szQuery);
|
||||
std::unique_ptr<SQLMsg> pMsg(CDBManager::instance().DirectQuery(szQuery, SQL_HOTBACKUP));
|
||||
m_stTableName = szTableName;
|
||||
}
|
||||
|
||||
snprintf(szQuery, sizeof(szQuery), "REPLACE INTO %s SELECT * FROM %splayer%s WHERE id=%u", m_stTableName.c_str(), GetPlayerDBName(), GetTablePostfix(), id);
|
||||
CDBManager::instance().AsyncQuery(szQuery, SQL_HOTBACKUP);
|
||||
return true;
|
||||
}
|
||||
|
@ -1,24 +0,0 @@
|
||||
// vim:ts=8 sw=4
|
||||
#ifndef __INC_METIN_II_PLAYERHB_H__
|
||||
#define __INC_METIN_II_PLAYERHB_H__
|
||||
|
||||
class PlayerHB : public singleton<PlayerHB>
|
||||
{
|
||||
public:
|
||||
PlayerHB();
|
||||
virtual ~PlayerHB();
|
||||
|
||||
bool Initialize();
|
||||
|
||||
void Put(DWORD id);
|
||||
|
||||
private:
|
||||
bool Query(DWORD id);
|
||||
|
||||
std::map<DWORD, time_t> m_map_data;
|
||||
std::string m_stCreateTableQuery;
|
||||
std::string m_stTableName;
|
||||
int m_iExpireTime;
|
||||
};
|
||||
|
||||
#endif
|
@ -54,19 +54,19 @@ void ItemAwardManager::Load(SQLMsg * pMsg)
|
||||
if (row[col])
|
||||
{
|
||||
strlcpy(kData->szWhy, row[col], sizeof(kData->szWhy));
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߿<EFBFBD> why<68>ݷ뿡 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
char* whyStr = kData->szWhy; //why <EFBFBD>ݷ<EFBFBD> <20>б<EFBFBD>
|
||||
char cmdStr[100] = ""; //why<EFBFBD>ݷ뿡<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ӽ<EFBFBD> <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>
|
||||
strcpy(cmdStr,whyStr); //<EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ū<EFBFBD><C5AB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ūȭ <20>DZ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//게임 중에 why콜룸에 변동이 생기면
|
||||
char* whyStr = kData->szWhy; //why 콜룸 읽기
|
||||
char cmdStr[100] = ""; //why콜룸에서 읽은 값을 임시 문자열에 복사해둠
|
||||
strcpy(cmdStr,whyStr); //명령어 얻는 과정에서 토큰쓰면 원본도 토큰화 되기 때문
|
||||
char command[20] = "";
|
||||
strcpy(command,CClientManager::instance().GetCommand(cmdStr).c_str()); // command <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//sys_err("%d, %s",pItemAward->dwID,command);
|
||||
if( !(strcmp(command,"GIFT") )) // command <EFBFBD><EFBFBD> GIFT<EFBFBD≯<EFBFBD>
|
||||
strcpy(command,CClientManager::instance().GetCommand(cmdStr).c_str()); // command 얻기
|
||||
//SPDLOG_ERROR("{}, {}",pItemAward->dwID,command);
|
||||
if( !(strcmp(command,"GIFT") )) // command 가 GIFT이면
|
||||
{
|
||||
TPacketItemAwardInfromer giftData;
|
||||
strcpy(giftData.login, kData->szLogin); //<EFBFBD>α<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
strcpy(giftData.command, command); //<EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
giftData.vnum = kData->dwVnum; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> vnum<75><6D> <20><><EFBFBD><EFBFBD>
|
||||
strcpy(giftData.login, kData->szLogin); //로그인 아이디 복사
|
||||
strcpy(giftData.command, command); //명령어 복사
|
||||
giftData.vnum = kData->dwVnum; //아이템 vnum도 복사
|
||||
CClientManager::instance().ForwardPacket(HEADER_DG_ITEMAWARD_INFORMER,&giftData,sizeof(TPacketItemAwardInfromer));
|
||||
}
|
||||
}
|
||||
@ -74,7 +74,7 @@ void ItemAwardManager::Load(SQLMsg * pMsg)
|
||||
m_map_award.insert(std::make_pair(dwID, kData));
|
||||
|
||||
printf("ITEM_AWARD load id %u bMall %d \n", kData->dwID, kData->bMall);
|
||||
sys_log(0, "ITEM_AWARD: load id %lu login %s vnum %lu count %u socket %lu", kData->dwID, kData->szLogin, kData->dwVnum, kData->dwCount, kData->dwSocket0);
|
||||
SPDLOG_DEBUG("ITEM_AWARD: load id {} login {} vnum {} count {} socket {}", kData->dwID, kData->szLogin, kData->dwVnum, kData->dwCount, kData->dwSocket0);
|
||||
std::set<TItemAward *> & kSet = m_map_kSetAwardByLogin[kData->szLogin];
|
||||
kSet.insert(kData);
|
||||
|
||||
@ -99,7 +99,7 @@ void ItemAwardManager::Taken(DWORD dwAwardID, DWORD dwItemID)
|
||||
|
||||
if (it == m_map_award.end())
|
||||
{
|
||||
sys_log(0, "ITEM_AWARD: Taken ID not exist %lu", dwAwardID);
|
||||
SPDLOG_DEBUG("ITEM_AWARD: Taken ID not exist {}", dwAwardID);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -79,7 +79,7 @@ TItemIDRangeTable CItemIDRangeManager::GetRange()
|
||||
}
|
||||
|
||||
for (int i = 0; i < 10; ++i)
|
||||
sys_err("ItemIDRange: NO MORE ITEM ID RANGE");
|
||||
SPDLOG_ERROR("ItemIDRange: NO MORE ITEM ID RANGE");
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -112,7 +112,7 @@ bool CItemIDRangeManager::BuildRange(DWORD dwMin, DWORD dwMax, TItemIDRangeTable
|
||||
|
||||
if ((dwMax < dwItemMaxID) || (dwMax - dwItemMaxID < cs_dwMinimumRemainCount))
|
||||
{
|
||||
sys_log(0, "ItemIDRange: Build %u ~ %u start: %u\tNOT USE remain count is below %u",
|
||||
SPDLOG_DEBUG("ItemIDRange: Build {} ~ {} start: {}\tNOT USE remain count is below {}",
|
||||
dwMin, dwMax, dwItemMaxID, cs_dwMinimumRemainCount);
|
||||
}
|
||||
else
|
||||
@ -136,12 +136,12 @@ bool CItemIDRangeManager::BuildRange(DWORD dwMin, DWORD dwMax, TItemIDRangeTable
|
||||
|
||||
if (count > 0)
|
||||
{
|
||||
sys_err("ItemIDRange: Build: %u ~ %u\thave a item", range.dwUsableItemIDMin, range.dwMax);
|
||||
SPDLOG_ERROR("ItemIDRange: Build: {} ~ {}\thave a item", range.dwUsableItemIDMin, range.dwMax);
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
sys_log(0, "ItemIDRange: Build: %u ~ %u start:%u", range.dwMin, range.dwMax, range.dwUsableItemIDMin);
|
||||
SPDLOG_TRACE("ItemIDRange: Build: {} ~ {} start:{}", range.dwMin, range.dwMax, range.dwUsableItemIDMin);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -2,16 +2,18 @@
|
||||
#ifndef __INC_METIN_II_ITEM_ID_RANGE_MANAGER_H__
|
||||
#define __INC_METIN_II_ITEM_ID_RANGE_MANAGER_H__
|
||||
|
||||
namespace {
|
||||
static const uint32_t cs_dwMaxItemID = 4290000000UL;
|
||||
static const uint32_t cs_dwMinimumRange = 10000000UL;
|
||||
static const uint32_t cs_dwMinimumRemainCount = 10000UL;
|
||||
}
|
||||
|
||||
class CItemIDRangeManager : public singleton<CItemIDRangeManager>
|
||||
{
|
||||
private :
|
||||
const static DWORD cs_dwMaxItemID = 4290000000UL;
|
||||
const static DWORD cs_dwMinimumRange = 10000000UL;
|
||||
const static DWORD cs_dwMinimumRemainCount = 10000UL;
|
||||
|
||||
private:
|
||||
std::list<TItemIDRangeTable> m_listData;
|
||||
|
||||
public :
|
||||
public:
|
||||
CItemIDRangeManager();
|
||||
|
||||
void Build();
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user