172 lines
4.8 KiB
C++
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,
|
|
};
|
|
|