#pragma once #include #include "ItemBase.h" //#include /* ItemBase by Faruna 2005-03-29 */ #ifdef _RDBGENTEST #pragma pack(push,1) #endif struct QuestBase { typedef int QuestCode; typedef XFlag 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, };