You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

410 lines
8.5 KiB

--------------------------------------------------------------------------------
-- Mini Dragon (Hard Mode) Progress Func --
--------------------------------------------------------------------------------
-- 던전 초기화
function InitDungeon( Var )
cExecCheck "InitDungeon"
if Var == nil
then
return
end
-- 킹덤 퀘스트 시작 전에 플레이어의 첫 로그인을 기다린다.
if Var["bPlayerMapLogin"] == nil
then
if Var["InitialSec"] + WAIT_PLAYER_MAP_LOGIN_SEC_MAX <= cCurrentSecond()
then
GoToFail( Var )
return
end
return
end
if Var["InitDungeon"] == nil
then
DebugLog( "Start InitDungeon" )
Var["InitDungeon"] = {}
Var["InitDungeon"]["WaitSecDuringInit"] = Var["CurSec"] + DelayTime["AfterInit"]
end
-- 일정 시간 뒤 다음 단계로
if Var["InitDungeon"]["WaitSecDuringInit"] <= Var["CurSec"]
then
local nLimitSec = cGetKQLimitSecond( Var["MapIndex"] )
if nLimitSec == nil
then
ErrorLog( "GuideOfGuard::nLimitSec == nil" )
else
-- Real Kingdom Quest 시작 !!!!
Var["KQLimitTime"] = Var["CurSec"] + nLimitSec
-- 타이머 시작!
cShowKQTimerWithLife( Var["MapIndex"], nLimitSec )
end
GoToNextStep( Var )
Var["InitDungeon"] = nil
DebugLog( "End InitDungeon" )
return
end
end
-- 1, 2, 3, 4 번째 필드 쫄들과 중간보스 몹들과의 전투
function MidBossStep( Var )
cExecCheck "MidBossStep"
if Var == nil
then
return
end
if Var["MidBossStep"] == nil
then
Var["MidBossStep"] = {}
end
if Var["MidBossStep"]["StepNumber"] == nil
then
Var["MidBossStep"]["StepNumber"] = 1
end
local CurStepNo = Var["MidBossStep"]["StepNumber"]
-- 각 단계 초기 설정
if Var["MidBossStep"..CurStepNo ] == nil
then
DebugLog( "Start MidBossStep "..CurStepNo )
Var["MidBossStep"..CurStepNo ] = {}
-- 단계이름 받아오기
local CurStep = StepNameTable[ CurStepNo ]
-- 몹 그룹 젠
local CurStepRegen = RegenInfo["Group"][ CurStep ]
for i = 1, #CurStepRegen
do
cGroupRegenInstance( Var["MapIndex"], CurStepRegen[i] )
end
-- 중간보스 젠
local RegenMidBoss = nil
local MidBossHandle = nil
for MobName, MobRegenInfo in pairs ( RegenInfo["Mob"][ CurStep ] )
do
RegenMidBoss = MobRegenInfo
MidBossHandle = cMobRegen_XY( Var["MapIndex"], RegenMidBoss["Index"], RegenMidBoss["x"], RegenMidBoss["y"], RegenMidBoss["dir"] )
end
if MidBossHandle ~= nil
then
Var["Enemy"][ MidBossHandle ] = RegenMidBoss
Var["MidBossStep"..CurStepNo ]["MidBossHandle"] = MidBossHandle
Var["RoutineTime"][ MidBossHandle ] = cCurrentSecond()
cSetAIScript ( MainLuaScriptPath, MidBossHandle )
cAIScriptFunc( MidBossHandle, "Entrance", "MidBossRoutine" )
end
end
-- Fail Case : 전멸 시 혹은 플레이어가 아무도 없을 경우
if cObjectCount( Var["MapIndex"], ObjectType["Player"] ) <= 0
then
GoToFail( Var )
Var["MidBossStep"..CurStepNo ] = nil
Var["MidBossStep"] = nil
return
end
-- Fail Case : 타임 오버
if IsKQTimeOver( Var ) == true
then
GoToFail( Var )
Var["MidBossStep"..CurStepNo ] = nil
Var["MidBossStep"] = nil
return
end
local nMidBossHandle = Var["MidBossStep"..CurStepNo ]["MidBossHandle"]
-- Next Case : 중간보스 사망시
if Var["Enemy"][ nMidBossHandle ] == nil
then
-- 안 죽은 잔몹 자살
cMobSuicide( Var["MapIndex"] )
-- 다음 단계로
Var["MidBossStep"..CurStepNo ] = nil
Var["MidBossStep"]["StepNumber"] = CurStepNo + 1
DebugLog( "End MidBossStep "..CurStepNo )
-- 중간보스 올 클리어 : 보스 전으로
if Var["MidBossStep"]["StepNumber"] >= #StepNameTable
then
Var["MidBossStep"] = nil
GoToNextStep( Var )
return
end
return
end
end
-- 보스 미니드래곤과의 전투
function BossBattle( Var )
cExecCheck "BossBattle"
if Var == nil
then
return
end
-- 보스전 셋팅
if Var["BossBattle"] == nil
then
DebugLog( "Start BossBattle" )
Var["BossBattle"] = {}
-- 미니 드래곤 젠
local RegenMiniDragon = RegenInfo["Mob"]["BossBattle"]["MiniDragon"]
local MiniDragonHandle = cMobRegen_XY( Var["MapIndex"], RegenMiniDragon["Index"], RegenMiniDragon["x"], RegenMiniDragon["y"], RegenMiniDragon["dir"] )
if MiniDragonHandle ~= nil
then
Var["Enemy"][ MiniDragonHandle ] = RegenMiniDragon
Var["BossBattle"]["BossHandle"] = MiniDragonHandle
cMobDetectRange( MiniDragonHandle, BossDetectRange["Regen"] )
Var["RoutineTime"][ MiniDragonHandle ] = cCurrentSecond()
cSetAIScript ( MainLuaScriptPath, MiniDragonHandle )
cAIScriptFunc( MiniDragonHandle, "Entrance", "MiniDragonRoutine" )
end
end
-- Fail Case : 전멸 시 혹은 플레이어가 아무도 없을 경우
if cObjectCount( Var["MapIndex"], ObjectType["Player"] ) <= 0
then
GoToFail( Var )
Var["BossBattle"] = nil
return
end
-- Fail Case : 타임 오버
if IsKQTimeOver( Var ) == true
then
GoToFail( Var )
Var["BossBattle"] = nil
return
end
-- Success Case : 미니드래곤 사망시
local nBossHandle = Var["BossBattle"]["BossHandle"]
if Var["Enemy"][ nBossHandle ] == nil
then
GoToSuccess( Var )
Var["BossBattle"] = nil
DebugLog( "End BossBattle" )
return
end
end
-- 킹덤 퀘스트 클리어
function QuestSuccess( Var )
cExecCheck "QuestSuccess"
if Var == nil
then
return
end
if Var["QuestSuccess"] == nil
then
DebugLog( "Start QuestSuccess" )
Var["QuestSuccess"] = {}
Var["QuestSuccess"]["WaitSecAfterKillBoss"] = Var["CurSec"] + DelayTime["WaitAfterKillBoss"]
end
-- 보스 죽인 후 잠시 기다려 줌
if Var["QuestSuccess"]["WaitSecAfterKillBoss"] <= Var["CurSec"]
then
-- Success 띄우고
cVanishTimer( Var["MapIndex"] )
cQuestResult( Var["MapIndex"], "Success" )
-- 플레이어에게 클리어 보상 주기
cReward( Var["MapIndex"], "KQ" )
-- Quest Mob Kill 세기.
cQuestMobKill_AllInMap( Var["MapIndex"], QuestMobKillInfo["QuestID"], QuestMobKillInfo["MobIndex"], QuestMobKillInfo["MaxKillCount"] )
-- 보상용 광석그룹 젠
cGroupRegenInstance( Var["MapIndex"], RegenInfo["Group"]["QuestSuccess"] )
-- 귀환 하러
GoToNextStep( Var )
DebugLog( "End QuestSuccess" )
end
end
-- 킹덤 퀘스트 실패
function QuestFailed( Var )
cExecCheck "QuestFailed"
if Var == nil
then
return
end
DebugLog( "Start QuestFailed" )
-- Fail 띄우고
cVanishTimer( Var["MapIndex"] )
cQuestResult( Var["MapIndex"], "Fail" )
GoToNextStep( Var )
DebugLog( "End QuestFailed" )
end
-- 귀환
function ReturnToHome( Var )
cExecCheck "ReturnToHome"
if Var == nil
then
return
end
if Var["ReturnToHome"] == nil
then
DebugLog( "Start ReturnToHome" )
Var["ReturnToHome"] = {}
Var["ReturnToHome"]["ReturnStepNo"] = 1
Var["ReturnToHome"]["ReturnStepSec"] = Var["CurSec"]
if Var["QuestSuccess"] ~= nil
then
-- 성공시
Var["ReturnToHome"]["ReturnNoticeIndex"] = "KQReturn"
Var["QuestSuccess"] = nil
else
-- 실패시
Var["ReturnToHome"]["ReturnNoticeIndex"] = "KQFReturn"
end
end
local sReturnNoticeIndex = Var["ReturnToHome"]["ReturnNoticeIndex"]
-- Return : return notice substep
if Var["ReturnToHome"]["ReturnStepNo"] <= #NoticeInfo[ sReturnNoticeIndex ]
then
if Var["ReturnToHome"]["ReturnStepSec"] <= Var["CurSec"]
then
-- Notice of Escape
if NoticeInfo[ sReturnNoticeIndex ][ Var["ReturnToHome"]["ReturnStepNo"] ]["Index"] ~= nil
then
cNotice( Var["MapIndex"], NoticeInfo["ScriptFileName"], NoticeInfo[ sReturnNoticeIndex ][ Var["ReturnToHome"]["ReturnStepNo"] ]["Index"] )
end
-- Go To Next Notice
Var["ReturnToHome"]["ReturnStepNo"] = Var["ReturnToHome"]["ReturnStepNo"] + 1
Var["ReturnToHome"]["ReturnStepSec"] = Var["CurSec"] + DelayTime["GapKQReturnNotice"]
end
return
end
-- Return : linkto substep
if Var["ReturnToHome"]["ReturnStepNo"] > #NoticeInfo[ sReturnNoticeIndex ]
then
if Var["ReturnToHome"]["ReturnStepSec"] <= Var["CurSec"]
then
--Finish_KQ
cLinkToAll( Var["MapIndex"], LinkInfo["ReturnMap"]["MapIndex"], LinkInfo["ReturnMap"]["x"], LinkInfo["ReturnMap"]["y"] )
GoToNextStep( Var )
Var["ReturnToHome"] = nil
if cEndOfKingdomQuest( Var["MapIndex"] ) == nil
then
ErrorLog( "ReturnToHome::Function cEndOfKingdomQuest failed" )
end
DebugLog( "End ReturnToHome" )
end
return
end
end
-- 스텝 구분을 위한 던전 진행 함수 리스트
KQ_StepsList =
{
{ Function = InitDungeon, Name = "InitDungeon", },
{ Function = MidBossStep, Name = "MidBossStep", },
{ Function = BossBattle, Name = "BossBattle", },
{ Function = QuestSuccess, Name = "QuestSuccess", },
{ Function = QuestFailed, Name = "QuestFailed", },
{ Function = ReturnToHome, Name = "ReturnToHome", },
}
-- 역참조 리스트
KQ_StepsIndexList =
{
}
for index, funcValue in pairs ( KQ_StepsList )
do
KQ_StepsIndexList[ funcValue["Name"] ] = index
end