Files
2026-06-01 12:46:52 +02:00

172 lines
4.8 KiB
C++

#pragma once
#include <toolkit/XFlag.h>
#include "ItemBase.h"
//#include <string>
/*
ItemBase
by Faruna 2005-03-29
*/
#ifdef _RDBGENTEST
#pragma pack(push,1)
#endif
struct QuestBase
{
typedef int QuestCode;
typedef XFlag<int> BaseFlag;
enum
{
MAX_VALUE_NUMBER = 12,
MAX_OPTIONAL_REWARD = 6, // 퀘스트 완료 시 선택 보상 3가지 추가 ( 총 6가지 ), kappamind 2009.12.01
MAX_FOREQUEST = 3,
MAX_KEY_VALUE = 3,
};
QuestCode nCode;
// 텍스트 아이디
int nQuestTextId; ///< 퀘스트 이름
int nSummaryTextId; ///< 퀘스트 요약
int nStatusTextId; ///< 퀘스트 상태 (다이얼로그 표시용)
// 수행 제한
enum LIMIT_FLAG
{
LIMIT_DEVA = 1, ///< 데바
LIMIT_ASURA = 2, ///< 아수라
LIMIT_GAIA = 3, ///< 가이아
LIMIT_FIGHTER = 4, ///< 전사
LIMIT_HUNTER = 5, ///< 헌터
LIMIT_MAGICIAN = 6, ///< 마법사
LIMIT_SUMMONER = 7, ///< 소환사
};
int nLimitBeginTime; ///< 퀘스트를 수락할 수 있는 시간대의 시작 시각, 하루 중 0시 0분 0초로부터 경과한 초 값.
int nLimitEndTime; ///< 퀘스트를 수락할 수 있는 시간대의 종료 시각. 하루 중 0시 0분 0초로부터 경과한 초 값.
int nLimitLevel; ///< 제한 레벨
int nLimitJobLevel; ///< 제한 레벨
int nLimitMaxLevel; ///< 퀘스트를 수락할 수 있는 최대 레벨(최소 레벨 제한이 limit_level 컬럼)
int nLimitMaxJobLevel; ///< 퀘스트를 수락할 수 있는 최대 잡 레벨(최소 잡 레벨 제한이 limit_job_level 컬럼)
BaseFlag LimitFlag;
int nLimitJob; ///< 직업 제한
int nLimitFavor; ///< 호감도 제한
bool bIsRepeatable; ///< 반복 가능 여부
int nInvokeCondition; ///< 발동 조건
int nInvokeValue; ///< 발동 값
char timeLimitType; ///< 퀘스트 수행 시간 제한(제한 시간 경과 시 실패+자동포기 처리)의 종류
int nTimeLimit; ///< 퀘스트 수행 시간 제한이 있는 퀘스트에 한해서(time_limit_type이 0 이 아닌 경우) 사용되며, 해당 퀘스트의 수행 제한 시간을 초 단위로 지정
enum QuestTypeFlag
{
TYPE_FLAG_MISC = ( 1 << 0 ),
TYPE_FLAG_KILL_TOTAL = ( 1 << 1 ),
TYPE_FLAG_KILL_INDIVIDUAL = ( 1 << 2 ),
TYPE_FLAG_COLLECT = ( 1 << 3 ),
TYPE_FLAG_HUNT_ITEM = ( 1 << 4 ),
TYPE_FLAG_LEARN_SKILL = ( 1 << 5 ),
TYPE_FLAG_UPGRADE_ITEM = ( 1 << 6 ),
TYPE_FLAG_CONTACT = ( 1 << 7 ),
TYPE_FLAG_JOB_LEVEL = ( 1 << 8 ),
TYPE_FLAG_PARAMETER = ( 1 << 9 ),
TYPE_FLAG_RANDOM_KILL_INDIVIDUAL = ( 1 << 10 ),
TYPE_FLAG_RANDOM_COLLECT = ( 1 << 11 ),
TYPE_FLAG_KILL = ( TYPE_FLAG_KILL_TOTAL | TYPE_FLAG_KILL_INDIVIDUAL | TYPE_FLAG_RANDOM_KILL_INDIVIDUAL ),
TYPE_FLAG_ALL = 0xffffffff,
};
enum QuestType
{
QUEST_MISC = 100, ///< 그때 그때 다른 퀘스트, 스크립트로 동작
QUEST_KILL_TOTAL = 101, ///< 처치 : 통합
QUEST_KILL_INDIVIDUAL = 102, ///< 처치 : 각각
QUEST_COLLECT = 103, ///< 수집
QUEST_HUNT_ITEM = 106, ///< 수집 : 사냥
QUEST_HUNT_ALL_MOB_ITEM = 107, ///< 수집 : 사냥(전체 몬스터)
QUEST_LEARN_SKILL = 201, ///< 스킬 배우기
QUEST_UPGRADE_ITEM = 301, ///< 아이템 레벨업
QUEST_CONTACT = 401, ///< 만나기
QUEST_JOB_LEVEL = 501, ///< 잡레벨 올리기
QUEST_PARAMETER = 601, ///< 파라미터 설정
QUEST_OUT_OF_CONTROL = 701, ///< 2010.11.29 외부 제어 - prodongi
QUEST_RANDOM_KILL_INDIVIDUAL = 901, ///< 랜덤 : 처치 : 각각
QUEST_RANDOM_COLLECT = 902, ///< 랜덤 : 수집
};
enum
{
QUEST_PARAMETER_CHAOS = 99,
};
QuestType nType;
int nValue[MAX_VALUE_NUMBER];
int nDropGroupId; ///< 드랍 그룹 아이디
int nQuestDifficulty; ///< 난이도
struct Reward
{
ItemBase::ItemCode nItemCode;
int nLevel;
int nQuantity;
};
// 보상
int nFavor;
int nExp;
int nJP;
int nHolicPoint; // 2009. 2. 13 floyd 은신감지 관련 추가, 기획쪽 담당자 김동민
int nGold;
Reward DefaultReward;
Reward OptionalReward[MAX_OPTIONAL_REWARD];
int nForeQuest[MAX_FOREQUEST]; ///< 먼저 수행해야 할 퀘스트들
bool bForeCheckType; // 0 : and 1 : or
/// 2011.09.01 퀘스트 몹 마크 표시 - prodongi
enum
{
QUEST_MARK_TARGET_DEFAULT = 0,
QUEST_MARK_TARGET_PROP = 1,
QUEST_MARK_TARGET_MOB = 2,
QUEST_MARK_TARGET_NPC = 3
};
char show_target_type;
int show_target_id;
char mark_hide;
/// 2011.11.08 퀘스트 쿨 타임 적용 될 때, 주석을 풀어야 됨 - prodongi
int cool_time;
int accept_cool_time;
};
#ifdef _RDBGENTEST
#pragma pack(pop)
#endif
struct QuestBaseServer : public QuestBase
{
std::string strAcceptScript;
std::string strClearScript;
std::string strScript;
};
enum
{
QUEST_IS_STARTABLE = 0,
QUEST_IS_IN_PROGRESS = 1,
QUEST_IS_FINISHABLE = 2,
};