Mob quest target (#7071)
* Added functionality to select monsters that increase the quest counter * Removed the extra conditions on Id * Added an example in quest_db.yml for MapMobTargets * Clean-up the docs * Added the possibility to define "All" to Location Thanks to @aleos89 !
This commit is contained in:
parent
0fa3e6a672
commit
f6bc10bfb1
@ -25,27 +25,19 @@
|
|||||||
# - Id Quest ID.
|
# - Id Quest ID.
|
||||||
# Title Quest title.
|
# Title Quest title.
|
||||||
# TimeLimit Amount of time before the quest expires. (Default: 0)
|
# TimeLimit Amount of time before the quest expires. (Default: 0)
|
||||||
# Use a number following by "d" for day(s), "h" for hour(s), "mn" for minute(s), and "s" for second(s).
|
|
||||||
# Specify with "+" for how long until the quest expires.
|
|
||||||
# Specify without "+" for the exact time the quest expires using "d" (optional), [0-23]"h" (required), [0-59]"mn" (optional), [0-59]"s" (optional) format.
|
|
||||||
# Please note the number before "d" only shift the exact timer to the given day(s).
|
|
||||||
# Targets: Quest objective target. (Default: null)
|
# Targets: Quest objective target. (Default: null)
|
||||||
# The target can be a couple of node Mob/Count or of Id/Race/Size/Element/MinLevel/MaxLevel.
|
# - Mob Name of monster to kill.
|
||||||
# If Mob is supplied, Count is required and the other fields are ignored.
|
|
||||||
# If Id is supplied, at least one other field of Race/Size/Element/MinLevel/MaxLevel is required.
|
|
||||||
# If Id is supplied, Count is required for each new entry.
|
|
||||||
# - Mob Monster to kill (aegis monster name).
|
|
||||||
# Count Amount of monsters to kill. Set to 0 to skip the target on import.
|
# Count Amount of monsters to kill. Set to 0 to skip the target on import.
|
||||||
# Id Unique target index for the quest Id. Requires a positive number.
|
# Id Unique target index for the quest Id. Requires a positive number.
|
||||||
# Race Monster race target (default All). Valid races are Angel, Brute, DemiHuman, Demon, Dragon, Fish, Formless, Insect, Plant, Undead, All.
|
# Race Monster race target. (Default: All)
|
||||||
# Size Monster size target (default All). Valid sizes are Small, Medium, Large, All.
|
# Size Monster size target. (Default: All)
|
||||||
# Element Monster element target (default All). Valid elements are Dark, Earth, Fire, Ghost, Holy, Neutral, Poison, Undead, Water, Wind, All.
|
# Element Monster element target. (Default: All)
|
||||||
# MinLevel Minimum monster level target. If not supplied but MaxLevel defined, MinLevel is 1. Set to 0 to ignore MinLevel on import. (Default: 0)
|
# MinLevel Minimum monster level target. If not supplied but MaxLevel defined, MinLevel is 1. Set to 0 to ignore MinLevel on import. (Default: 0)
|
||||||
# MaxLevel Maximum monster level target. Set to 0 to ignore MaxLevel on import. (Default: 0)
|
# MaxLevel Maximum monster level target. Set to 0 to ignore MaxLevel on import. (Default: 0)
|
||||||
# Location Map name where kills are counted. (Default any location)
|
# Location Map name where kills are counted. (Default: All)
|
||||||
# On normal maps only kills of permanently spawned monsters increase the counter.
|
|
||||||
# On instance maps all monster kills increase the counter.
|
|
||||||
# MapName Displayed map name in quest UI. (Default: empty string)
|
# MapName Displayed map name in quest UI. (Default: empty string)
|
||||||
|
# MapMobTargets List of monster names. Only names in the list will increase the kill counter. Only active when Id is used. (Default: all monsters)
|
||||||
|
# <name>: <bool> Monster name and whether the monster is added or removed from the list.
|
||||||
# Drops: Quest item drop targets. (Default: null)
|
# Drops: Quest item drop targets. (Default: null)
|
||||||
# - Mob Monster to kill. 0 will apply to all monsters. (Default: 0)
|
# - Mob Monster to kill. 0 will apply to all monsters. (Default: 0)
|
||||||
# Item Item to drop.
|
# Item Item to drop.
|
||||||
@ -55,4 +47,4 @@
|
|||||||
|
|
||||||
Header:
|
Header:
|
||||||
Type: QUEST_DB
|
Type: QUEST_DB
|
||||||
Version: 2
|
Version: 3
|
||||||
|
@ -25,27 +25,19 @@
|
|||||||
# - Id Quest ID.
|
# - Id Quest ID.
|
||||||
# Title Quest title.
|
# Title Quest title.
|
||||||
# TimeLimit Amount of time before the quest expires. (Default: 0)
|
# TimeLimit Amount of time before the quest expires. (Default: 0)
|
||||||
# Use a number following by "d" for day(s), "h" for hour(s), "mn" for minute(s), and "s" for second(s).
|
|
||||||
# Specify with "+" for how long until the quest expires.
|
|
||||||
# Specify without "+" for the exact time the quest expires using "d" (optional), [0-23]"h" (required), [0-59]"mn" (optional), [0-59]"s" (optional) format.
|
|
||||||
# Please note the number before "d" only shift the exact timer to the given day(s).
|
|
||||||
# Targets: Quest objective target. (Default: null)
|
# Targets: Quest objective target. (Default: null)
|
||||||
# The target can be a couple of node Mob/Count or of Id/Race/Size/Element/MinLevel/MaxLevel.
|
# - Mob Name of monster to kill.
|
||||||
# If Mob is supplied, Count is required and the other fields are ignored.
|
|
||||||
# If Id is supplied, at least one other field of Race/Size/Element/MinLevel/MaxLevel is required.
|
|
||||||
# If Id is supplied, Count is required for each new entry.
|
|
||||||
# - Mob Monster to kill (aegis monster name).
|
|
||||||
# Count Amount of monsters to kill. Set to 0 to skip the target on import.
|
# Count Amount of monsters to kill. Set to 0 to skip the target on import.
|
||||||
# Id Unique target index for the quest Id. Requires a positive number.
|
# Id Unique target index for the quest Id. Requires a positive number.
|
||||||
# Race Monster race target (default All). Valid races are Angel, Brute, DemiHuman, Demon, Dragon, Fish, Formless, Insect, Plant, Undead, All.
|
# Race Monster race target. (Default: All)
|
||||||
# Size Monster size target (default All). Valid sizes are Small, Medium, Large, All.
|
# Size Monster size target. (Default: All)
|
||||||
# Element Monster element target (default All). Valid elements are Dark, Earth, Fire, Ghost, Holy, Neutral, Poison, Undead, Water, Wind, All.
|
# Element Monster element target. (Default: All)
|
||||||
# MinLevel Minimum monster level target. If not supplied but MaxLevel defined, MinLevel is 1. Set to 0 to ignore MinLevel on import. (Default: 0)
|
# MinLevel Minimum monster level target. If not supplied but MaxLevel defined, MinLevel is 1. Set to 0 to ignore MinLevel on import. (Default: 0)
|
||||||
# MaxLevel Maximum monster level target. Set to 0 to ignore MaxLevel on import. (Default: 0)
|
# MaxLevel Maximum monster level target. Set to 0 to ignore MaxLevel on import. (Default: 0)
|
||||||
# Location Map name where kills are counted. (Default any location)
|
# Location Map name where kills are counted. (Default: All)
|
||||||
# On normal maps only kills of permanently spawned monsters increase the counter.
|
|
||||||
# On instance maps all monster kills increase the counter.
|
|
||||||
# MapName Displayed map name in quest UI. (Default: empty string)
|
# MapName Displayed map name in quest UI. (Default: empty string)
|
||||||
|
# MapMobTargets List of monster names. Only names in the list will increase the kill counter. Only active when Id is used. (Default: all monsters)
|
||||||
|
# <name>: <bool> Monster name and whether the monster is added or removed from the list.
|
||||||
# Drops: Quest item drop targets. (Default: null)
|
# Drops: Quest item drop targets. (Default: null)
|
||||||
# - Mob Monster to kill. 0 will apply to all monsters. (Default: 0)
|
# - Mob Monster to kill. 0 will apply to all monsters. (Default: 0)
|
||||||
# Item Item to drop.
|
# Item Item to drop.
|
||||||
@ -55,7 +47,7 @@
|
|||||||
|
|
||||||
Header:
|
Header:
|
||||||
Type: QUEST_DB
|
Type: QUEST_DB
|
||||||
Version: 2
|
Version: 3
|
||||||
|
|
||||||
Body:
|
Body:
|
||||||
- Id: 1000
|
- Id: 1000
|
||||||
|
@ -25,27 +25,19 @@
|
|||||||
# - Id Quest ID.
|
# - Id Quest ID.
|
||||||
# Title Quest title.
|
# Title Quest title.
|
||||||
# TimeLimit Amount of time before the quest expires. (Default: 0)
|
# TimeLimit Amount of time before the quest expires. (Default: 0)
|
||||||
# Use a number following by "d" for day(s), "h" for hour(s), "mn" for minute(s), and "s" for second(s).
|
|
||||||
# Specify with "+" for how long until the quest expires.
|
|
||||||
# Specify without "+" for the exact time the quest expires using "d" (optional), [0-23]"h" (required), [0-59]"mn" (optional), [0-59]"s" (optional) format.
|
|
||||||
# Please note the number before "d" only shift the exact timer to the given day(s).
|
|
||||||
# Targets: Quest objective target. (Default: null)
|
# Targets: Quest objective target. (Default: null)
|
||||||
# The target can be a couple of node Mob/Count or of Id/Race/Size/Element/MinLevel/MaxLevel.
|
# - Mob Name of monster to kill.
|
||||||
# If Mob is supplied, Count is required and the other fields are ignored.
|
|
||||||
# If Id is supplied, at least one other field of Race/Size/Element/MinLevel/MaxLevel is required.
|
|
||||||
# If Id is supplied, Count is required for each new entry.
|
|
||||||
# - Mob Monster to kill (aegis monster name).
|
|
||||||
# Count Amount of monsters to kill. Set to 0 to skip the target on import.
|
# Count Amount of monsters to kill. Set to 0 to skip the target on import.
|
||||||
# Id Unique target index for the quest Id. Requires a positive number.
|
# Id Unique target index for the quest Id. Requires a positive number.
|
||||||
# Race Monster race target (default All). Valid races are Angel, Brute, DemiHuman, Demon, Dragon, Fish, Formless, Insect, Plant, Undead, All.
|
# Race Monster race target. (Default: All)
|
||||||
# Size Monster size target (default All). Valid sizes are Small, Medium, Large, All.
|
# Size Monster size target. (Default: All)
|
||||||
# Element Monster element target (default All). Valid elements are Dark, Earth, Fire, Ghost, Holy, Neutral, Poison, Undead, Water, Wind, All.
|
# Element Monster element target. (Default: All)
|
||||||
# MinLevel Minimum monster level target. If not supplied but MaxLevel defined, MinLevel is 1. Set to 0 to ignore MinLevel on import. (Default: 0)
|
# MinLevel Minimum monster level target. If not supplied but MaxLevel defined, MinLevel is 1. Set to 0 to ignore MinLevel on import. (Default: 0)
|
||||||
# MaxLevel Maximum monster level target. Set to 0 to ignore MaxLevel on import. (Default: 0)
|
# MaxLevel Maximum monster level target. Set to 0 to ignore MaxLevel on import. (Default: 0)
|
||||||
# Location Map name where kills are counted. (Default any location)
|
# Location Map name where kills are counted. (Default: All)
|
||||||
# On normal maps only kills of permanently spawned monsters increase the counter.
|
|
||||||
# On instance maps all monster kills increase the counter.
|
|
||||||
# MapName Displayed map name in quest UI. (Default: empty string)
|
# MapName Displayed map name in quest UI. (Default: empty string)
|
||||||
|
# MapMobTargets List of monster names. Only names in the list will increase the kill counter. Only active when Id is used. (Default: all monsters)
|
||||||
|
# <name>: <bool> Monster name and whether the monster is added or removed from the list.
|
||||||
# Drops: Quest item drop targets. (Default: null)
|
# Drops: Quest item drop targets. (Default: null)
|
||||||
# - Mob Monster to kill. 0 will apply to all monsters. (Default: 0)
|
# - Mob Monster to kill. 0 will apply to all monsters. (Default: 0)
|
||||||
# Item Item to drop.
|
# Item Item to drop.
|
||||||
@ -55,7 +47,7 @@
|
|||||||
|
|
||||||
Header:
|
Header:
|
||||||
Type: QUEST_DB
|
Type: QUEST_DB
|
||||||
Version: 2
|
Version: 3
|
||||||
|
|
||||||
Footer:
|
Footer:
|
||||||
Imports:
|
Imports:
|
||||||
|
@ -25,27 +25,19 @@
|
|||||||
# - Id Quest ID.
|
# - Id Quest ID.
|
||||||
# Title Quest title.
|
# Title Quest title.
|
||||||
# TimeLimit Amount of time before the quest expires. (Default: 0)
|
# TimeLimit Amount of time before the quest expires. (Default: 0)
|
||||||
# Use a number following by "d" for day(s), "h" for hour(s), "mn" for minute(s), and "s" for second(s).
|
|
||||||
# Specify with "+" for how long until the quest expires.
|
|
||||||
# Specify without "+" for the exact time the quest expires using "d" (optional), [0-23]"h" (required), [0-59]"mn" (optional), [0-59]"s" (optional) format.
|
|
||||||
# Please note the number before "d" only shift the exact timer to the given day(s).
|
|
||||||
# Targets: Quest objective target. (Default: null)
|
# Targets: Quest objective target. (Default: null)
|
||||||
# The target can be a couple of node Mob/Count or of Id/Race/Size/Element/MinLevel/MaxLevel.
|
# - Mob Name of monster to kill.
|
||||||
# If Mob is supplied, Count is required and the other fields are ignored.
|
|
||||||
# If Id is supplied, at least one other field of Race/Size/Element/MinLevel/MaxLevel is required.
|
|
||||||
# If Id is supplied, Count is required for each new entry.
|
|
||||||
# - Mob Monster to kill (aegis monster name).
|
|
||||||
# Count Amount of monsters to kill. Set to 0 to skip the target on import.
|
# Count Amount of monsters to kill. Set to 0 to skip the target on import.
|
||||||
# Id Unique target index for the quest Id. Requires a positive number.
|
# Id Unique target index for the quest Id. Requires a positive number.
|
||||||
# Race Monster race target (default All). Valid races are Angel, Brute, DemiHuman, Demon, Dragon, Fish, Formless, Insect, Plant, Undead, All.
|
# Race Monster race target. (Default: All)
|
||||||
# Size Monster size target (default All). Valid sizes are Small, Medium, Large, All.
|
# Size Monster size target. (Default: All)
|
||||||
# Element Monster element target (default All). Valid elements are Dark, Earth, Fire, Ghost, Holy, Neutral, Poison, Undead, Water, Wind, All.
|
# Element Monster element target. (Default: All)
|
||||||
# MinLevel Minimum monster level target. If not supplied but MaxLevel defined, MinLevel is 1. Set to 0 to ignore MinLevel on import. (Default: 0)
|
# MinLevel Minimum monster level target. If not supplied but MaxLevel defined, MinLevel is 1. Set to 0 to ignore MinLevel on import. (Default: 0)
|
||||||
# MaxLevel Maximum monster level target. Set to 0 to ignore MaxLevel on import. (Default: 0)
|
# MaxLevel Maximum monster level target. Set to 0 to ignore MaxLevel on import. (Default: 0)
|
||||||
# Location Map name where kills are counted. (Default any location)
|
# Location Map name where kills are counted. (Default: All)
|
||||||
# On normal maps only kills of permanently spawned monsters increase the counter.
|
|
||||||
# On instance maps all monster kills increase the counter.
|
|
||||||
# MapName Displayed map name in quest UI. (Default: empty string)
|
# MapName Displayed map name in quest UI. (Default: empty string)
|
||||||
|
# MapMobTargets List of monster names. Only names in the list will increase the kill counter. Only active when Id is used. (Default: all monsters)
|
||||||
|
# <name>: <bool> Monster name and whether the monster is added or removed from the list.
|
||||||
# Drops: Quest item drop targets. (Default: null)
|
# Drops: Quest item drop targets. (Default: null)
|
||||||
# - Mob Monster to kill. 0 will apply to all monsters. (Default: 0)
|
# - Mob Monster to kill. 0 will apply to all monsters. (Default: 0)
|
||||||
# Item Item to drop.
|
# Item Item to drop.
|
||||||
@ -55,7 +47,7 @@
|
|||||||
|
|
||||||
Header:
|
Header:
|
||||||
Type: QUEST_DB
|
Type: QUEST_DB
|
||||||
Version: 2
|
Version: 3
|
||||||
|
|
||||||
Body:
|
Body:
|
||||||
- Id: 1000
|
- Id: 1000
|
||||||
@ -2841,6 +2833,17 @@ Body:
|
|||||||
- Id: 5929
|
- Id: 5929
|
||||||
Title: "[Standby] Subjugation-Turtle Island Dungeon"
|
Title: "[Standby] Subjugation-Turtle Island Dungeon"
|
||||||
TimeLimit: 4h
|
TimeLimit: 4h
|
||||||
|
- Id: 5930
|
||||||
|
Title: Subjugation-Yanggeochon
|
||||||
|
Targets:
|
||||||
|
- Id: 1
|
||||||
|
Count: 80
|
||||||
|
Location: tur_dun03
|
||||||
|
MapMobTargets:
|
||||||
|
ASSULTER: true
|
||||||
|
PERMETER: true
|
||||||
|
FREEZER: true
|
||||||
|
HEATER: true
|
||||||
- Id: 5931
|
- Id: 5931
|
||||||
Title: "[Standby] Subjugation-Yanggeochon"
|
Title: "[Standby] Subjugation-Yanggeochon"
|
||||||
TimeLimit: 4h
|
TimeLimit: 4h
|
||||||
|
57
doc/quest_db.txt
Normal file
57
doc/quest_db.txt
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
//===== rAthena Documentation ================================
|
||||||
|
//= Quest Database Structure
|
||||||
|
//===== By: ==================================================
|
||||||
|
//= rAthena Dev Team
|
||||||
|
//===== Last Updated: ========================================
|
||||||
|
//= 20220629
|
||||||
|
//===== Description: =========================================
|
||||||
|
//= Explanation of the quest_db.yml file and structure.
|
||||||
|
//============================================================
|
||||||
|
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
Id: Quest ID.
|
||||||
|
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
Title: Quest title.
|
||||||
|
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
TimeLimit: Amount of time before the quest expires.
|
||||||
|
|
||||||
|
Use a number followed by "d" for day(s), "h" for hour(s), "mn" for minute(s), and "s" for second(s).
|
||||||
|
Specifying with "+" will mark how long until the quest expires.
|
||||||
|
Specifying without "+" will mark the exact time the quest expires. Format: "d" (optional), [0-23]"h" (required), [0-59]"mn" (optional), [0-59]"s" (optional).
|
||||||
|
|
||||||
|
Please note the number before "d" only shifts the exact timer to the given day(s).
|
||||||
|
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
Targets: Quest objective target.
|
||||||
|
|
||||||
|
The target can be a combination of Mob/Count or of Id/Count and other fields.
|
||||||
|
If Mob is supplied, Count is required and the other fields are ignored.
|
||||||
|
If Id is supplied, Count is required for each new entry.
|
||||||
|
|
||||||
|
- Mob Name of monster to kill (aegis monster name).
|
||||||
|
Count Amount of monsters to kill. Set to 0 to skip the target on import.
|
||||||
|
Id Unique target index for the quest Id. Requires a positive number.
|
||||||
|
Race Monster race target. (Default: All). Valid races are Angel, Brute, DemiHuman, Demon, Dragon, Fish, Formless, Insect, Plant, Undead, All.
|
||||||
|
Size Monster size target. (Default: All). Valid sizes are Small, Medium, Large, All.
|
||||||
|
Element Monster element target. (Default: All). Valid elements are Dark, Earth, Fire, Ghost, Holy, Neutral, Poison, Undead, Water, Wind, All.
|
||||||
|
MinLevel Minimum monster level target. If not supplied but MaxLevel defined, MinLevel is 1. Set to 0 to ignore MinLevel on import.
|
||||||
|
MaxLevel Maximum monster level target. Set to 0 to ignore MaxLevel on import.
|
||||||
|
Location Map name where kills are counted.
|
||||||
|
MapName Displayed map name in quest UI.
|
||||||
|
MapMobTargets List of monster names. Only names in the list will increase the kill counter. Only active when Id is used.
|
||||||
|
<name>: <bool> Monster name and whether the monster is added or removed from the list.
|
||||||
|
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
Drops: Quest item drop targets.
|
||||||
|
|
||||||
|
- Mob Monster to kill. 0 will apply to all monsters.
|
||||||
|
Item Item to drop (aegis item name).
|
||||||
|
Count Amount of items that will drop. Non-stackable items default to 1.
|
||||||
|
Rate Item drop rate. (10000 = 100%)
|
@ -8,27 +8,19 @@
|
|||||||
# - Id Quest ID.
|
# - Id Quest ID.
|
||||||
# Title Quest title.
|
# Title Quest title.
|
||||||
# TimeLimit Amount of time before the quest expires. (Default: 0)
|
# TimeLimit Amount of time before the quest expires. (Default: 0)
|
||||||
# Use a number following by "d" for day(s), "h" for hour(s), "mn" for minute(s), and "s" for second(s).
|
|
||||||
# Specify with "+" for how long until the quest expires.
|
|
||||||
# Specify without "+" for the exact time the quest expires using "d" (optional), [0-23]"h" (required), [0-59]"mn" (optional), [0-59]"s" (optional) format.
|
|
||||||
# Please note the number before "d" only shift the exact timer to the given day(s).
|
|
||||||
# Targets: Quest objective target. (Default: null)
|
# Targets: Quest objective target. (Default: null)
|
||||||
# The target can be a couple of node Mob/Count or of Id/Race/Size/Element/MinLevel/MaxLevel.
|
# - Mob Name of monster to kill.
|
||||||
# If Mob is supplied, Count is required and the other fields are ignored.
|
|
||||||
# If Id is supplied, at least one other field of Race/Size/Element/MinLevel/MaxLevel is required.
|
|
||||||
# If Id is supplied, Count is required for each new entry.
|
|
||||||
# - Mob Monster to kill (aegis monster name).
|
|
||||||
# Count Amount of monsters to kill. Set to 0 to skip the target on import.
|
# Count Amount of monsters to kill. Set to 0 to skip the target on import.
|
||||||
# Id Unique target index for the quest Id. Requires a positive number.
|
# Id Unique target index for the quest Id. Requires a positive number.
|
||||||
# Race Monster race target (default All). Valid races are Angel, Brute, DemiHuman, Demon, Dragon, Fish, Formless, Insect, Plant, Undead, All.
|
# Race Monster race target. (Default: All)
|
||||||
# Size Monster size target (default All). Valid sizes are Small, Medium, Large, All.
|
# Size Monster size target. (Default: All)
|
||||||
# Element Monster element target (default All). Valid elements are Dark, Earth, Fire, Ghost, Holy, Neutral, Poison, Undead, Water, Wind, All.
|
# Element Monster element target. (Default: All)
|
||||||
# MinLevel Minimum monster level target. If not supplied but MaxLevel defined, MinLevel is 1. Set to 0 to ignore MinLevel on import. (Default: 0)
|
# MinLevel Minimum monster level target. If not supplied but MaxLevel defined, MinLevel is 1. Set to 0 to ignore MinLevel on import. (Default: 0)
|
||||||
# MaxLevel Maximum monster level target. Set to 0 to ignore MaxLevel on import. (Default: 0)
|
# MaxLevel Maximum monster level target. Set to 0 to ignore MaxLevel on import. (Default: 0)
|
||||||
# Location Map name where kills are counted. (Default any location)
|
# Location Map name where kills are counted. (Default: All)
|
||||||
# On normal maps only kills of permanently spawned monsters increase the counter.
|
|
||||||
# On instance maps all monster kills increase the counter.
|
|
||||||
# MapName Displayed map name in quest UI. (Default: empty string)
|
# MapName Displayed map name in quest UI. (Default: empty string)
|
||||||
|
# MapMobTargets List of monster names. Only names in the list will increase the kill counter. Only active when Id is used. (Default: all monsters)
|
||||||
|
# <name>: <bool> Monster name and whether the monster is added or removed from the list.
|
||||||
# Drops: Quest item drop targets. (Default: null)
|
# Drops: Quest item drop targets. (Default: null)
|
||||||
# - Mob Monster to kill. 0 will apply to all monsters. (Default: 0)
|
# - Mob Monster to kill. 0 will apply to all monsters. (Default: 0)
|
||||||
# Item Item to drop.
|
# Item Item to drop.
|
||||||
|
@ -26,6 +26,8 @@
|
|||||||
#include "party.hpp"
|
#include "party.hpp"
|
||||||
#include "pc.hpp"
|
#include "pc.hpp"
|
||||||
|
|
||||||
|
using namespace rathena;
|
||||||
|
|
||||||
static int split_exact_quest_time(char* modif_p, int* day, int* hour, int* minute, int *second);
|
static int split_exact_quest_time(char* modif_p, int* day, int* hour, int* minute, int *second);
|
||||||
|
|
||||||
const std::string QuestDatabase::getDefaultLocation() {
|
const std::string QuestDatabase::getDefaultLocation() {
|
||||||
@ -162,13 +164,6 @@ uint64 QuestDatabase::parseBodyNode(const ryml::NodeRef& node) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this->nodeExists(targetNode, "Mob") && !this->nodeExists(targetNode, "MinLevel") && !this->nodeExists(targetNode, "MaxLevel") &&
|
|
||||||
!this->nodeExists(targetNode, "Race") && !this->nodeExists(targetNode, "Size") && !this->nodeExists(targetNode, "Element") &&
|
|
||||||
!this->nodeExists(targetNode, "Location") && !this->nodeExists(targetNode, "MapName")) {
|
|
||||||
this->invalidWarning(targetNode, "Targets is missing required field, skipping.\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
target = std::make_shared<s_quest_objective>();
|
target = std::make_shared<s_quest_objective>();
|
||||||
target->index = index;
|
target->index = index;
|
||||||
target->mob_id = mob_id;
|
target->mob_id = mob_id;
|
||||||
@ -279,7 +274,7 @@ uint64 QuestDatabase::parseBodyNode(const ryml::NodeRef& node) {
|
|||||||
|
|
||||||
uint16 mapindex = mapindex_name2idx(location.c_str(), nullptr);
|
uint16 mapindex = mapindex_name2idx(location.c_str(), nullptr);
|
||||||
|
|
||||||
if (mapindex == 0) {
|
if (mapindex == 0 && strcmpi(location.c_str(), "All") != 0) {
|
||||||
this->invalidWarning(targetNode["Location"], "Map \"%s\" not found.\n", location.c_str());
|
this->invalidWarning(targetNode["Location"], "Map \"%s\" not found.\n", location.c_str());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -296,6 +291,35 @@ uint64 QuestDatabase::parseBodyNode(const ryml::NodeRef& node) {
|
|||||||
target->map_name = map_name;
|
target->map_name = map_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this->nodeExists(targetNode, "MapMobTargets")) {
|
||||||
|
const auto& MapMobTargetsNode = targetNode["MapMobTargets"];
|
||||||
|
|
||||||
|
for (const auto& MapMobTargetsIt : MapMobTargetsNode) {
|
||||||
|
std::string mob_name;
|
||||||
|
c4::from_chars(MapMobTargetsIt.key(), &mob_name);
|
||||||
|
|
||||||
|
std::shared_ptr<s_mob_db> mob = mobdb_search_aegisname(mob_name.c_str());
|
||||||
|
|
||||||
|
if (!mob) {
|
||||||
|
this->invalidWarning(MapMobTargetsNode[MapMobTargetsIt.key()], "Mob %s does not exist, skipping.\n", mob_name.c_str());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool active;
|
||||||
|
|
||||||
|
if (!this->asBool(MapMobTargetsNode, mob_name, active))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (!active) {
|
||||||
|
util::vector_erase_if_exists(target->mobs_allowed, mob->id);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!util::vector_exists( target->mobs_allowed, mob->id ))
|
||||||
|
target->mobs_allowed.push_back(mob->id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// if max_level is set, min_level is 1
|
// if max_level is set, min_level is 1
|
||||||
if (target->min_level == 0 && target->max_level > 0)
|
if (target->min_level == 0 && target->max_level > 0)
|
||||||
target->min_level = 1;
|
target->min_level = 1;
|
||||||
@ -708,11 +732,13 @@ void quest_update_objective(struct map_session_data *sd, struct mob_data* md)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Process quest objectives
|
// Process quest objectives
|
||||||
|
uint8 total_check = 7; // Must pass all checks
|
||||||
|
|
||||||
for (int j = 0; j < qi->objectives.size(); j++) {
|
for (int j = 0; j < qi->objectives.size(); j++) {
|
||||||
uint8 objective_check = 0; // Must pass all 6 checks
|
uint8 objective_check = 0;
|
||||||
|
|
||||||
if (qi->objectives[j]->mob_id == md->mob_id)
|
if (qi->objectives[j]->mob_id == md->mob_id)
|
||||||
objective_check = 6;
|
objective_check = total_check;
|
||||||
else if (qi->objectives[j]->mob_id == 0) {
|
else if (qi->objectives[j]->mob_id == 0) {
|
||||||
if (qi->objectives[j]->min_level == 0 || qi->objectives[j]->min_level <= md->level)
|
if (qi->objectives[j]->min_level == 0 || qi->objectives[j]->min_level <= md->level)
|
||||||
objective_check++;
|
objective_check++;
|
||||||
@ -724,17 +750,21 @@ void quest_update_objective(struct map_session_data *sd, struct mob_data* md)
|
|||||||
objective_check++;
|
objective_check++;
|
||||||
if (qi->objectives[j]->element == ELE_ALL || qi->objectives[j]->element == md->status.def_ele)
|
if (qi->objectives[j]->element == ELE_ALL || qi->objectives[j]->element == md->status.def_ele)
|
||||||
objective_check++;
|
objective_check++;
|
||||||
if (qi->objectives[j]->mapid < 0 || (qi->objectives[j]->mapid == sd->bl.m && md->spawn != nullptr))
|
if (qi->objectives[j]->mapid < 0)
|
||||||
objective_check++;
|
objective_check++;
|
||||||
else if (qi->objectives[j]->mapid >= 0) {
|
else if (qi->objectives[j]->mapid == sd->bl.m)
|
||||||
|
objective_check++;
|
||||||
|
else {
|
||||||
struct map_data *mapdata = map_getmapdata(sd->bl.m);
|
struct map_data *mapdata = map_getmapdata(sd->bl.m);
|
||||||
|
|
||||||
if (mapdata->instance_id && mapdata->instance_src_map == qi->objectives[j]->mapid)
|
if (mapdata->instance_id && mapdata->instance_src_map == qi->objectives[j]->mapid)
|
||||||
objective_check++;
|
objective_check++;
|
||||||
}
|
}
|
||||||
|
if (qi->objectives[j]->mobs_allowed.empty() || util::vector_exists( qi->objectives[j]->mobs_allowed, md->mob_id ))
|
||||||
|
objective_check++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (objective_check == 6 && sd->quest_log[i].count[j] < qi->objectives[j]->count) {
|
if (objective_check == total_check && sd->quest_log[i].count[j] < qi->objectives[j]->count) {
|
||||||
sd->quest_log[i].count[j]++;
|
sd->quest_log[i].count[j]++;
|
||||||
sd->save_quest = true;
|
sd->save_quest = true;
|
||||||
clif_quest_update_objective(sd, &sd->quest_log[i]);
|
clif_quest_update_objective(sd, &sd->quest_log[i]);
|
||||||
|
@ -35,6 +35,7 @@ struct s_quest_objective {
|
|||||||
e_element element;
|
e_element element;
|
||||||
int16 mapid;
|
int16 mapid;
|
||||||
std::string map_name;
|
std::string map_name;
|
||||||
|
std::vector<uint16> mobs_allowed;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct s_quest_db {
|
struct s_quest_db {
|
||||||
@ -55,7 +56,7 @@ enum e_quest_check_type : uint8 {
|
|||||||
|
|
||||||
class QuestDatabase : public TypesafeYamlDatabase<uint32, s_quest_db> {
|
class QuestDatabase : public TypesafeYamlDatabase<uint32, s_quest_db> {
|
||||||
public:
|
public:
|
||||||
QuestDatabase() : TypesafeYamlDatabase("QUEST_DB", 2, 1) {
|
QuestDatabase() : TypesafeYamlDatabase("QUEST_DB", 3, 1) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -288,7 +288,7 @@ int do_init( int argc, char** argv ){
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!process("QUEST_DB", 2, root_paths, "quest_db", [](const std::string &path, const std::string &name_ext) -> bool {
|
if (!process("QUEST_DB", 3, root_paths, "quest_db", [](const std::string &path, const std::string &name_ext) -> bool {
|
||||||
return sv_readdb(path.c_str(), name_ext.c_str(), ',', 3 + MAX_QUEST_OBJECTIVES * 2 + MAX_QUEST_DROPS * 3, 100, -1, &quest_read_db, false);
|
return sv_readdb(path.c_str(), name_ext.c_str(), ',', 3 + MAX_QUEST_OBJECTIVES * 2 + MAX_QUEST_DROPS * 3, 100, -1, &quest_read_db, false);
|
||||||
})) {
|
})) {
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user