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.
1118 lines
31 KiB
1118 lines
31 KiB
--------------------------------------------------------------------------------
|
|
-- DummyProcess
|
|
--------------------------------------------------------------------------------
|
|
function DummyProcess( Var )
|
|
cExecCheck "DummyProcess"
|
|
|
|
--DebugLog("끝")
|
|
return
|
|
|
|
end
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- InitDungeon
|
|
--------------------------------------------------------------------------------
|
|
-- 던전 초기화
|
|
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 )
|
|
Var["StepFunc"] = ReturnToHome
|
|
return
|
|
end
|
|
|
|
return
|
|
end
|
|
|
|
if Var["InitDungeon"] == nil
|
|
then
|
|
--DebugLog( "Start InitDungeon" )
|
|
|
|
Var["InitDungeon"] = {}
|
|
|
|
-- 대기시간 설정
|
|
Var["InitDungeon"]["WaitSecDuringInit"] = Var["CurSec"] + DelayTime["AfterInit"]
|
|
Var["InitDungeon"]["DialogTime"] = Var["InitDungeon"]["WaitSecDuringInit"]
|
|
Var["InitDungeon"]["DialogStep"] = 1
|
|
end
|
|
|
|
-- 대기 후 대사처리 단계로
|
|
if Var["InitDungeon"]["WaitSecDuringInit"] > Var["CurSec"]
|
|
then
|
|
return
|
|
end
|
|
|
|
|
|
|
|
-- 대사처리
|
|
if Var["InitDungeon"]["DialogTime"] ~= nil
|
|
then
|
|
|
|
if Var["InitDungeon"]["DialogTime"] > Var["CurSec"]
|
|
then
|
|
return
|
|
else
|
|
local CurMsg = ChatInfo["InitDungeon"]
|
|
local DialogStep = Var["InitDungeon"]["DialogStep"]
|
|
local MaxDialogStep = #ChatInfo["InitDungeon"]
|
|
|
|
if DialogStep <= MaxDialogStep
|
|
then
|
|
cScriptMessage( Var["MapIndex"], CurMsg[DialogStep]["Index"] )
|
|
Var["InitDungeon"]["DialogTime"] = Var["CurSec"] + DelayTime["GapDialog"]
|
|
Var["InitDungeon"]["DialogStep"] = DialogStep + 1
|
|
return
|
|
end
|
|
|
|
if Var["InitDungeon"]["DialogStep"] > MaxDialogStep
|
|
then
|
|
Var["InitDungeon"]["DialogTime"] = nil
|
|
Var["InitDungeon"]["DialogStep"] = nil
|
|
|
|
Var["InitDungeon"]["NextStepWaitTime"] = Var["CurSec"] + DelayTime["WaitKingCrabProcess"]
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
if Var["InitDungeon"]["NextStepWaitTime"] ~= nil
|
|
then
|
|
if Var["InitDungeon"]["NextStepWaitTime"] > Var["CurSec"]
|
|
then
|
|
return
|
|
end
|
|
|
|
Var["StepFunc"] = KingCrabProcess
|
|
Var["InitDungeon"] = nil
|
|
--DebugLog( "End InitDungeon" )
|
|
|
|
return
|
|
end
|
|
end
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- KingCrabProcess
|
|
--------------------------------------------------------------------------------
|
|
function KingCrabProcess( Var )
|
|
cExecCheck "KingCrabProcess"
|
|
|
|
if Var == nil
|
|
then
|
|
ErrorLog("KingCrabProcess:: Var == nil" )
|
|
--GoToFail( Var )
|
|
Var["StepFunc"] = ReturnToHome
|
|
return
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- KingCrabProcess : 킹크랩 리젠처리
|
|
-----------------------------------------------------------------
|
|
|
|
if Var["KingCrabProcess"] == nil
|
|
then
|
|
Var["KingCrabProcess"] = {}
|
|
|
|
--DebugLog("===KingCrabProcess=========================")
|
|
--DebugLog("킹크랩 프로세스 테이블 생성")
|
|
|
|
|
|
local RegenInfo = RegenInfoTable["KingCrab"]
|
|
local Handle = INVALID_HANDLE
|
|
|
|
-- 맵에 있는 모든 유저의 핸들 받아온다
|
|
local TargetHandleList = { cGetPlayerList(Var["MapIndex"]) }
|
|
local RegenX, RegenY = RegenInfo["RegenX"], RegenInfo["RegenY"]
|
|
|
|
-- 맵에 1명 이상의 유저가 있을 경우, 그 중 한명의 위치로 리젠한다.
|
|
-- 맵에 유저가 없을 경우, RegenInfoTable["KingCrab"]에 세팅된 위치로 리젠한다.
|
|
if TargetHandleList ~= nil
|
|
then
|
|
local TargetUser = cRandomInt( 1, #TargetHandleList )
|
|
if TargetHandleList[TargetUser] ~= nil
|
|
then
|
|
RegenX, RegenY = cObjectLocate( TargetHandleList[TargetUser] )
|
|
end
|
|
end
|
|
|
|
Handle = cMobRegen_XY( Var["MapIndex"], RegenInfo["MobIndex"], RegenX + 5, RegenY, RegenInfo["Dir"] )
|
|
|
|
if Handle == nil
|
|
then
|
|
ErrorLog("킹크랩 생성 실패")
|
|
Var["StepFunc"] = ReturnToHome
|
|
--GoToFail( Var )
|
|
return
|
|
else
|
|
--DebugLog("킹크랩 핸들값은 : "..Handle)
|
|
end
|
|
|
|
-- 대사처리
|
|
local CurMsg = ChatInfo["KingCrabProcess"]["AfterBossRegen"]
|
|
if CurMsg ~= nil
|
|
then
|
|
-- 응? 왠지 땅이 흔들리는거 같지 않아요?
|
|
cScriptMessage( Var["MapIndex"], CurMsg["Index"] )
|
|
end
|
|
|
|
Var["KingCrabProcess"]["Handle"] = Handle
|
|
|
|
Var[Handle] = {}
|
|
Var[Handle]["IsProgressSpecialSkill"] = false
|
|
|
|
return
|
|
end
|
|
|
|
if Var["KingCrabProcess"] ~= nil
|
|
then
|
|
local Handle = Var["KingCrabProcess"]["Handle"]
|
|
|
|
-----------------------------------------------------------------
|
|
-- KingCrabProcess : 다음 단계로 넘어갈 시간인지 체크
|
|
-----------------------------------------------------------------
|
|
-- 다음 단계로 넘어갈 시간이 아니면
|
|
if Var["KingCrabProcess"]["NextStepWaitTime"] ~= nil
|
|
then
|
|
if Var["KingCrabProcess"]["NextStepWaitTime"] > Var["CurSec"]
|
|
then
|
|
--DebugLog("다음단계 넘어가기 대기중...")
|
|
return
|
|
end
|
|
|
|
Var["KingCrabProcess"] = nil
|
|
Var[Handle] = nil
|
|
Var["StepFunc"] = KingSlimeProcess
|
|
|
|
--DebugLog("다음 스텝 설정 : KingSlimeProcess")
|
|
|
|
return
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- KingCrabProcess : 킹크랩 죽었는지 체크
|
|
-----------------------------------------------------------------
|
|
if cIsObjectDead( Handle ) == 1
|
|
then
|
|
--DebugLog("킹크랩 죽었군!")
|
|
if cAIScriptSet( Handle ) == nil
|
|
then
|
|
ErrorLog( "KingCrabProcess : 스크립트 초기화 실패" )
|
|
end
|
|
|
|
-- 대사 처리
|
|
local CurMsg = ChatInfo["KingCrabProcess"]["AfterBossDead"]
|
|
if CurMsg ~= nil
|
|
then
|
|
-- 해안가에 있는 일반적인 킹크랩과는 뭔가 분위기가 다른데요?
|
|
cScriptMessage( Var["MapIndex"], CurMsg["Index"] )
|
|
end
|
|
|
|
-- 보상 지급
|
|
if RewardItemInfo["KingCrabProcess"] ~= nil
|
|
then
|
|
--DebugLog("KingCrabProcess 보상지급 대기중")
|
|
local CurReward = RewardItemInfo["KingCrabProcess"]
|
|
local RewardList = { cGetPlayerList(Var["MapIndex"]) }
|
|
|
|
--DebugLog("RewardList 개수 : "..#RewardList )
|
|
|
|
-- 맵에 있는 유저 중, 현재 죽지 않은 유저들에게 보상을 지급한다.
|
|
for i = 1, #RewardList
|
|
do
|
|
if cIsObjectDead( RewardList[i] ) == nil
|
|
then
|
|
cRewardItem( RewardList[i], CurReward["Index"], CurReward["Num"] )
|
|
end
|
|
end
|
|
end
|
|
|
|
Var["KingCrabProcess"]["NextStepWaitTime"] = Var["CurSec"] + DelayTime["WaitKingSlimeProcess"]
|
|
|
|
return
|
|
end
|
|
|
|
|
|
-----------------------------------------------------------------
|
|
-- KingCrabProcess : 킹크랩 스킬 체크
|
|
-----------------------------------------------------------------
|
|
if Var[Handle]["IsProgressSpecialSkill"] == false
|
|
then
|
|
|
|
local CurTime = Var["CurSec"]
|
|
|
|
local CurMySkill, EndTime = cGetCurrentSkillInfo( Var["KingCrabProcess"]["Handle"] )
|
|
|
|
-- 현재 스킬데이터에 있는 스킬 사용중이 아닌경우, 체크할 필요없으므로 종료
|
|
if CurMySkill == nil
|
|
then
|
|
--DebugLog("스킬사용중아님")
|
|
return
|
|
end
|
|
|
|
-- 이미 스킬 쓴 시간 지났으면, 의미없는 endtime 값이므로 return
|
|
if EndTime == nil
|
|
then
|
|
--DebugLog("시간 == nil")
|
|
return
|
|
end
|
|
|
|
-- 이미 스킬 쓴 시간 지났으면, 의미없는 endtime 값이므로 return
|
|
if EndTime < CurTime
|
|
then
|
|
return
|
|
end
|
|
|
|
-- EndTime 확인하기,
|
|
-- 현재 EndTime이 0으로 들어오는 경우는,
|
|
-- 스킬은 사용중인데 몹ai가 attack 상태가 아니라서, 부모클래스리턴값 받아오기때문
|
|
|
|
--DebugLog("드디어 스킬을사용하나요!")
|
|
--[[
|
|
DebugLog("---------------------------")
|
|
DebugLog("KingCrabProcess : CurTime : "..CurTime )
|
|
DebugLog("KingCrabProcess : CurMySkill : "..CurMySkill)
|
|
DebugLog("KingCrabProcess : EndTime : "..EndTime)
|
|
DebugLog("---------------------------")
|
|
--]]
|
|
|
|
-----------------------------------------------------------------
|
|
-- ★ 스킬이 휠윈드인 경우
|
|
-----------------------------------------------------------------
|
|
if CurMySkill == SkillInfo_KingCrab["KC_WhirlWind"]["SkillIndex"]
|
|
then
|
|
--DebugLog("KC_WhirlWind 사용중")
|
|
|
|
Var["KingCrabProcess"]["SkillStartTime"] = CurTime
|
|
Var["KingCrabProcess"]["SkillWorkTime"] = EndTime
|
|
Var["KingCrabProcess"]["SkillEndTime"] = EndTime + SkillInfo_KingCrab["KC_WhirlWind"]["SkillKeepTime"]
|
|
|
|
--[[
|
|
DebugLog("현재시간은 : " ..Var["CurSec"] )
|
|
DebugLog("스킬 시작한 시간은 : " ..Var["KingCrabProcess"]["SkillStartTime"] )
|
|
DebugLog("스킬끝 예정시간은 : " ..Var["KingCrabProcess"]["SkillWorkTime"] )
|
|
--]]
|
|
|
|
-- 스크립트 부착*******************************************
|
|
if cSetAIScript ( MainLuaScriptPath, Handle ) ~= nil
|
|
then
|
|
if cAIScriptFunc( Handle, "Entrance", "KC_WhirlWind" ) == nil
|
|
then
|
|
ErrorLog("스크립트 부착 실패")
|
|
return
|
|
end
|
|
end
|
|
|
|
-- 스킬 처리 중이므로
|
|
Var[Handle]["IsProgressSpecialSkill"] = true
|
|
|
|
return
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- ★ 스킬이 소환인 경우
|
|
-----------------------------------------------------------------
|
|
|
|
if CurMySkill == SkillInfo_KingCrab["KC_SummonBubble"]["SkillIndex"]
|
|
then
|
|
DebugLog("KC_SummonBubble 사용중")
|
|
|
|
Var["KingCrabProcess"]["SkillStartTime"] = CurTime
|
|
Var["KingCrabProcess"]["SkillWorkTime"] = CurTime + SkillInfo_KingCrab["KC_SummonBubble"]["SummonStartDelay"]
|
|
Var["KingCrabProcess"]["SkillEndTime"] = EndTime
|
|
|
|
--[[
|
|
DebugLog("현재시간은 : " ..Var["CurSec"] )
|
|
DebugLog("스킬 시작한 시간은 : " ..Var["KingCrabProcess"]["SkillStartTime"] )
|
|
DebugLog("스킬처리예정시간은 : " ..Var["KingCrabProcess"]["SkillWorkTime"] )
|
|
DebugLog("스킬끝 예정시간은 : " ..Var["KingCrabProcess"]["SkillEndTime"] )
|
|
--]]
|
|
|
|
-- 스크립트 부착*******************************************
|
|
if cSetAIScript ( MainLuaScriptPath, Handle ) ~= nil
|
|
then
|
|
if cAIScriptFunc( Handle, "Entrance", "KC_SummonBubble" ) == nil
|
|
then
|
|
ErrorLog("스크립트 부착 실패")
|
|
return
|
|
end
|
|
end
|
|
|
|
Var[Handle]["IsProgressSpecialSkill"] = true
|
|
return
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- KingSlimeProcess
|
|
--------------------------------------------------------------------------------
|
|
function KingSlimeProcess( Var )
|
|
cExecCheck "KingSlimeProcess"
|
|
|
|
if Var == nil
|
|
then
|
|
ErrorLog("KingSlimeProcess:: Var == nil" )
|
|
--GoToFail( Var )
|
|
Var["StepFunc"] = ReturnToHome
|
|
return
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- KingSlimeProcess : Var["KingSlimeProcess"] 테이블 초기화작업
|
|
-----------------------------------------------------------------
|
|
if Var["KingSlimeProcess"] == nil
|
|
then
|
|
Var["KingSlimeProcess"] = {}
|
|
|
|
--DebugLog("===KingSlimeProcess=========================")
|
|
--DebugLog("킹슬라임 프로세스 테이블 생성")
|
|
|
|
local RegenInfo = RegenInfoTable["KingSlime"]
|
|
local Handle = INVALID_HANDLE
|
|
|
|
-- 맵에 있는 모든 유저의 핸들 받아온다
|
|
local TargetHandleList = { cGetPlayerList(Var["MapIndex"]) }
|
|
local RegenX, RegenY = RegenInfo["RegenX"], RegenInfo["RegenY"]
|
|
|
|
-- 맵에 1명 이상의 유저가 있을 경우, 그 중 한명의 위치로 리젠한다.
|
|
-- 맵에 유저가 없을 경우, RegenInfoTable["KingCrab"]에 세팅된 위치로 리젠한다.
|
|
if TargetHandleList ~= nil
|
|
then
|
|
local TargetUser = cRandomInt( 1, #TargetHandleList )
|
|
if TargetHandleList[TargetUser] ~= nil
|
|
then
|
|
RegenX, RegenY = cObjectLocate( TargetHandleList[TargetUser] )
|
|
end
|
|
end
|
|
|
|
Handle = cMobRegen_XY( Var["MapIndex"], RegenInfo["MobIndex"], RegenX + 5, RegenY, RegenInfo["Dir"] )
|
|
|
|
if Handle == nil
|
|
then
|
|
ErrorLog("킹슬라임 생성 실패")
|
|
Var["StepFunc"] = ReturnToHome
|
|
--GoToFail( Var )
|
|
return
|
|
else
|
|
DebugLog("킹슬라임 핸들값은 : "..Handle)
|
|
end
|
|
|
|
-- 몹 리젠되자마자 hide상태이상 걸어줌!
|
|
cSetAbstate( Handle, "StaHide", 1, 10000 )
|
|
|
|
Var["KingSlimeProcess"]["Handle"] = Handle
|
|
|
|
Var[Handle] = {}
|
|
Var[Handle]["IsProgressSpecialSkill"] = false
|
|
|
|
-- 대사처리
|
|
local CurMsg = ChatInfo["KingSlimeProcess"]["AfterBossRegen"]
|
|
if CurMsg ~= nil
|
|
then
|
|
-- 응? 바닥에 저 그림자는 뭐죠?
|
|
cScriptMessage( Var["MapIndex"], CurMsg["Index"] )
|
|
end
|
|
|
|
local target = cObjectFind( Handle, 1000, ObjectType["Player"], "so_ObjectType" )
|
|
|
|
if cSkillBlast( Handle, target, SkillInfo_KingSlime["KS_ShowUp"]["SkillIndex"] ) == nil
|
|
then
|
|
ErrorLog("킹슬라임 리젠후 최초낙하 스킬 사용실패")
|
|
end
|
|
|
|
return
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- KingSlimeProcess : Var["KingSlimeProcess"] 테이블 초기화 후 작업
|
|
-----------------------------------------------------------------
|
|
if Var["KingSlimeProcess"] ~= nil
|
|
then
|
|
local Handle = Var["KingSlimeProcess"]["Handle"]
|
|
|
|
-----------------------------------------------------------------
|
|
-- KingSlimeProcess : 다음 단계로 넘어갈 시간인지 체크
|
|
-----------------------------------------------------------------
|
|
-- 다음 단계로 넘어갈 시간이 아니면
|
|
if Var["KingSlimeProcess"]["NextStepWaitTime"] ~= nil
|
|
then
|
|
if Var["KingSlimeProcess"]["NextStepWaitTime"] > Var["CurSec"]
|
|
then
|
|
--DebugLog("다음단계 넘어가기 대기중...")
|
|
return
|
|
end
|
|
|
|
Var["KingSlimeProcess"] = nil
|
|
Var[Handle] = nil
|
|
Var["StepFunc"] = MiniDragonProcess
|
|
|
|
--DebugLog("다음 스텝 설정 : MiniDragonProcess")
|
|
|
|
return
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- KingSlimeProcess : 킹슬라임 죽었는지 체크
|
|
-----------------------------------------------------------------
|
|
|
|
if cIsObjectDead( Handle ) == 1
|
|
then
|
|
--DebugLog("킹슬라임 죽었군!")
|
|
if cAIScriptSet( Handle ) == nil
|
|
then
|
|
ErrorLog( "KingSlimeProcess : 스크립트 초기화 실패" )
|
|
end
|
|
|
|
-- 대사 처리
|
|
local CurMsg = ChatInfo["KingSlimeProcess"]["AfterBossDead"]
|
|
if CurMsg ~= nil
|
|
then
|
|
-- 확실히 예전에 있던 해안가 몬스터들하고 뭔가 달라졌어요. 다들 조심하세요.
|
|
cScriptMessage( Var["MapIndex"], CurMsg["Index"] )
|
|
end
|
|
|
|
-- 보상 지급
|
|
if RewardItemInfo["KingSlimeProcess"] ~= nil
|
|
then
|
|
--DebugLog("KingSlimeProcess 보상지급 대기중")
|
|
local CurReward = RewardItemInfo["KingSlimeProcess"]
|
|
local RewardList = { cGetPlayerList(Var["MapIndex"]) }
|
|
|
|
--DebugLog("RewardList 개수 : "..#RewardList )
|
|
|
|
-- 맵에 있는 유저 중, 현재 죽지 않은 유저들에게 보상을 지급한다.
|
|
for i = 1, #RewardList
|
|
do
|
|
if cIsObjectDead( RewardList[i] ) == nil
|
|
then
|
|
cRewardItem( RewardList[i], CurReward["Index"], CurReward["Num"] )
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
-- 다음 스텝시간 세팅
|
|
Var["KingSlimeProcess"]["NextStepWaitTime"] = Var["CurSec"] + DelayTime["WaitMiniDragonProcess"]
|
|
|
|
return
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- KingSlimeProcess : 킹슬라임 스킬 처리 체크
|
|
-----------------------------------------------------------------
|
|
if Var[Handle]["IsProgressSpecialSkill"] == false
|
|
then
|
|
|
|
local CurTime = Var["CurSec"]
|
|
|
|
local CurMySkill, EndTime = cGetCurrentSkillInfo( Handle )
|
|
|
|
-- 현재 스킬데이터에 있는 스킬 사용중이 아닌경우, 체크할 필요없으므로 종료
|
|
if CurMySkill == nil
|
|
then
|
|
--DebugLog("스킬사용중아님")
|
|
return
|
|
end
|
|
|
|
-- 이미 스킬 쓴 시간 지났으면, 의미없는 endtime 값이므로 return
|
|
if EndTime == nil
|
|
then
|
|
--DebugLog("시간 == nil")
|
|
return
|
|
end
|
|
|
|
-- 이미 스킬 쓴 시간 지났으면, 의미없는 endtime 값이므로 return
|
|
if EndTime < CurTime
|
|
then
|
|
return
|
|
end
|
|
|
|
-- EndTime 확인하기,
|
|
--[[
|
|
DebugLog("드디어 스킬을사용하나요!")
|
|
DebugLog("---------------------------")
|
|
DebugLog("CurTime : "..CurTime )
|
|
DebugLog("CurMySkill : "..CurMySkill)
|
|
DebugLog("EndTime : "..EndTime)
|
|
--]]
|
|
|
|
-----------------------------------------------------------------
|
|
-- ★ 스킬이 최초낙하인 경우( 리젠후 바로 쓰는 스킬 )
|
|
-----------------------------------------------------------------
|
|
if CurMySkill == SkillInfo_KingSlime["KS_ShowUp"]["SkillIndex"]
|
|
then
|
|
Var["KingSlimeProcess"]["SkillStartTime"] = CurTime
|
|
Var["KingSlimeProcess"]["SkillEndTime"] = EndTime
|
|
|
|
--[[
|
|
DebugLog("현재시간은 : " ..Var["CurSec"] )
|
|
DebugLog("스킬 시작한 시간은 : " ..Var["KingSlimeProcess"]["SkillStartTime"] )
|
|
DebugLog("스킬끝 예정시간은 : " ..Var["KingSlimeProcess"]["SkillEndTime"] )
|
|
--]]
|
|
|
|
-- 스크립트 부착*******************************************
|
|
if cSetAIScript ( MainLuaScriptPath, Handle ) ~= nil
|
|
then
|
|
if cAIScriptFunc( Handle, "Entrance", "KS_ShowUp" ) == nil
|
|
then
|
|
ErrorLog("스크립트 부착 실패")
|
|
return
|
|
end
|
|
end
|
|
|
|
Var[Handle]["IsProgressSpecialSkill"] = true
|
|
|
|
return
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- ★ 스킬이 강림인 경우
|
|
-----------------------------------------------------------------
|
|
if CurMySkill == SkillInfo_KingSlime["KS_Warp"]["SkillIndex"]
|
|
then
|
|
Var["KingSlimeProcess"]["SkillStartTime"] = CurTime
|
|
Var["KingSlimeProcess"]["SkillWorkTime"] = CurTime + SkillInfo_KingSlime["KS_Warp"]["NotTargetStartDelay"]
|
|
Var["KingSlimeProcess"]["SkillEndTime"] = EndTime
|
|
|
|
--[[
|
|
DebugLog("현재시간은 : " ..Var["CurSec"] )
|
|
DebugLog("스킬 시작한 시간은 : " ..Var["KingSlimeProcess"]["SkillStartTime"] )
|
|
DebugLog("스킬끝 예정시간은 : " ..Var["KingSlimeProcess"]["SkillEndTime"] )
|
|
--]]
|
|
|
|
-- 스크립트 부착*******************************************
|
|
if cSetAIScript ( MainLuaScriptPath, Handle ) ~= nil
|
|
then
|
|
if cAIScriptFunc( Handle, "Entrance", "KS_Warp" ) == nil
|
|
then
|
|
ErrorLog("스크립트 부착 실패")
|
|
return
|
|
end
|
|
end
|
|
|
|
Var[Handle]["IsProgressSpecialSkill"] = true
|
|
|
|
return
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- ★ 스킬이 소환인 경우
|
|
-----------------------------------------------------------------
|
|
if CurMySkill == SkillInfo_KingSlime["KS_BombSlimePiece"]["SkillIndex_Lump"] or
|
|
CurMySkill == SkillInfo_KingSlime["KS_BombSlimePiece"]["SkillIndex_Ice"] or
|
|
CurMySkill == SkillInfo_KingSlime["KS_BombSlimePiece"]["SkillIndex_All"]
|
|
then
|
|
--DebugLog("KS_BombSlimePiece 소환 사용중")
|
|
|
|
Var["KingSlimeProcess"]["SkillStartTime"] = CurTime
|
|
Var["KingSlimeProcess"]["SkillWorkTime"] = CurTime + SkillInfo_KingSlime["KS_BombSlimePiece"]["SummonStartDelay"]
|
|
Var["KingSlimeProcess"]["SkillEndTime"] = EndTime
|
|
|
|
Var["KingSlimeProcess"]["CurSkillIndex"] = CurMySkill
|
|
|
|
--[[
|
|
DebugLog("현재 사용한 스킬인덱스 : " ..Var["KingSlimeProcess"]["CurSkillIndex"] )
|
|
DebugLog("현재시간은 : " ..Var["CurSec"] )
|
|
DebugLog("스킬 시작한 시간은 : " ..Var["KingSlimeProcess"]["SkillStartTime"] )
|
|
DebugLog("스킬처리예정시간은 : " ..Var["KingSlimeProcess"]["SkillWorkTime"] )
|
|
DebugLog("스킬끝 예정시간은 : " ..Var["KingSlimeProcess"]["SkillEndTime"] )
|
|
--]]
|
|
|
|
-- 스크립트 부착*******************************************
|
|
if cSetAIScript ( MainLuaScriptPath, Handle ) ~= nil
|
|
then
|
|
if cAIScriptFunc( Handle, "Entrance", "KS_BombSlimePiece" ) == nil
|
|
then
|
|
ErrorLog("스크립트 부착 실패")
|
|
return
|
|
end
|
|
end
|
|
|
|
Var[Handle]["IsProgressSpecialSkill"] = true
|
|
return
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- MiniDragonProcess
|
|
--------------------------------------------------------------------------------
|
|
function MiniDragonProcess( Var )
|
|
cExecCheck "MiniDragonProcess"
|
|
|
|
if Var == nil
|
|
then
|
|
ErrorLog("MiniDragonProcess:: Var == nil" )
|
|
Var["StepFunc"] = ReturnToHome
|
|
--GoToFail( Var )
|
|
return
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- MiniDragonProcess : 미니드래곤 리젠처리
|
|
-----------------------------------------------------------------
|
|
|
|
if Var["MiniDragonProcess"] == nil
|
|
then
|
|
Var["MiniDragonProcess"] = {}
|
|
|
|
--DebugLog("===MiniDragonProcess=========================")
|
|
--DebugLog("미니드래곤 프로세스 테이블 생성")
|
|
|
|
local RegenInfo = RegenInfoTable["MiniDragon"]
|
|
local Handle = INVALID_HANDLE
|
|
|
|
|
|
-- 맵에 있는 모든 유저의 핸들 받아온다
|
|
local TargetHandleList = { cGetPlayerList(Var["MapIndex"]) }
|
|
local RegenX, RegenY = RegenInfo["RegenX"], RegenInfo["RegenY"]
|
|
|
|
-- 맵에 1명 이상의 유저가 있을 경우, 그 중 한명의 위치로 리젠한다.
|
|
-- 맵에 유저가 없을 경우, RegenInfoTable["KingCrab"]에 세팅된 위치로 리젠한다.
|
|
if TargetHandleList ~= nil
|
|
then
|
|
local TargetUser = cRandomInt( 1, #TargetHandleList )
|
|
if TargetHandleList[TargetUser] ~= nil
|
|
then
|
|
RegenX, RegenY = cObjectLocate( TargetHandleList[TargetUser] )
|
|
end
|
|
end
|
|
|
|
Handle = cMobRegen_XY( Var["MapIndex"], RegenInfo["MobIndex"], RegenX + 5, RegenY, RegenInfo["Dir"] )
|
|
|
|
if Handle == nil
|
|
then
|
|
ErrorLog("미니드래곤 생성 실패")
|
|
Var["StepFunc"] = ReturnToHome
|
|
--GoToFail( Var )
|
|
return
|
|
else
|
|
--DebugLog("미니드래곤 핸들값은 : "..Handle)
|
|
end
|
|
|
|
-- 몹 리젠되자마자 hide상태이상 걸어줌!
|
|
cSetAbstate( Handle, "StaHide", 1, 10000 )
|
|
|
|
Var["MiniDragonProcess"]["Handle"] = Handle
|
|
|
|
-- 몹 리젠한 핸들값
|
|
Var[Handle] = {}
|
|
Var[Handle]["IsProgressSpecialSkill"] = false
|
|
|
|
-- 미니드래곤 근처의 유저에게 스킬 사용한다.
|
|
local target = cObjectFind( Handle, 1000, ObjectType["Player"], "so_ObjectType" )
|
|
|
|
if cSkillBlast( Handle, target, SkillInfo_MiniDragon["MD_ShowUp"]["SkillIndex"] ) == nil
|
|
then
|
|
ErrorLog("미니드래곤, 리젠후 착륙 스킬 사용실패")
|
|
else
|
|
--DebugLog("미니드래곤, 리젠후 착륙 스킬 성공했음")
|
|
end
|
|
|
|
return
|
|
end
|
|
|
|
|
|
if Var["MiniDragonProcess"] ~= nil
|
|
then
|
|
local Handle = Var["MiniDragonProcess"]["Handle"]
|
|
|
|
-----------------------------------------------------------------
|
|
-- MiniDragonProcess : 다음 단계로 넘어갈 시간인지 체크
|
|
-----------------------------------------------------------------
|
|
-- 다음 단계로 넘어갈 시간이 아니면
|
|
if Var["MiniDragonProcess"]["NextStepWaitTime"] ~= nil
|
|
then
|
|
if Var["MiniDragonProcess"]["NextStepWaitTime"] > Var["CurSec"]
|
|
then
|
|
--DebugLog("다음단계 넘어가기 대기중...")
|
|
return
|
|
end
|
|
|
|
-- DebugLog("미드 죽인 시간.."..Var["MiniDragonProcess"]["BossDeadTime"])
|
|
-- DebugLog("목표시간.."..Var["InitialSec"] + LimitTime["ForBonusStage"])
|
|
|
|
if Var["MiniDragonProcess"]["BossDeadTime"] < Var["InitialSec"] + LimitTime["ForBonusStage"]
|
|
then
|
|
Var["StepFunc"] = BonusStageProcess
|
|
--DebugLog("시간안에 해치워서 보너스스테이지 실행")
|
|
else
|
|
Var["StepFunc"] = ReturnToHome
|
|
--DebugLog("시간안에 못함, 리턴투홈")
|
|
end
|
|
|
|
Var["MiniDragonProcess"] = nil
|
|
Var[Handle] = nil
|
|
|
|
return
|
|
end
|
|
|
|
|
|
-----------------------------------------------------------------
|
|
-- MiniDragonProcess : 미니드래곤 죽었는지 체크
|
|
-----------------------------------------------------------------
|
|
|
|
if cIsObjectDead( Handle ) == 1
|
|
then
|
|
--DebugLog("미니드래곤 죽었군!")
|
|
if cAIScriptSet( Handle ) == nil
|
|
then
|
|
DebugLog( "MiniDragonProcess : 스크립트 초기화 실패" )
|
|
end
|
|
|
|
-- 미니드래곤 해치운 시간 저장
|
|
Var["MiniDragonProcess"]["BossDeadTime"] = Var["CurSec"]
|
|
|
|
-- 보상 지급
|
|
if RewardItemInfo["MiniDragonProcess"] ~= nil
|
|
then
|
|
--DebugLog("MiniDragonProcess 보상지급 대기중")
|
|
local CurReward = RewardItemInfo["MiniDragonProcess"]
|
|
local RewardList = { cGetPlayerList(Var["MapIndex"]) }
|
|
|
|
--DebugLog("RewardList 개수 : "..#RewardList )
|
|
|
|
-- 맵에 있는 유저 중, 현재 죽지 않은 유저들에게 보상을 지급한다.
|
|
for i = 1, #RewardList
|
|
do
|
|
if cIsObjectDead( RewardList[i] ) == nil
|
|
then
|
|
cRewardItem( RewardList[i], CurReward["Index"], CurReward["Num"] )
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
-- 다음 스텝시간 세팅
|
|
Var["MiniDragonProcess"]["NextStepWaitTime"] = Var["CurSec"] + DelayTime["WaitAfterMiniDragonProcess"]
|
|
|
|
return
|
|
end
|
|
end
|
|
|
|
|
|
-----------------------------------------------------------------
|
|
-- MiniDragonProcess : 미니드래곤 스킬 처리 체크
|
|
-----------------------------------------------------------------
|
|
local Handle = Var["MiniDragonProcess"]["Handle"]
|
|
|
|
if Var[Handle]["IsProgressSpecialSkill"] == false
|
|
then
|
|
-- DebugLog("---------------------------")
|
|
-- DebugLog("cGetCurrentSkillInfo 호출")
|
|
|
|
local CurTime = Var["CurSec"]
|
|
|
|
local CurMySkill, EndTime = cGetCurrentSkillInfo( Handle )
|
|
|
|
-- 현재 스킬데이터에 있는 스킬 사용중이 아닌경우, 체크할 필요없으므로 종료
|
|
if CurMySkill == nil
|
|
then
|
|
--DebugLog("스킬사용중아님")
|
|
return
|
|
end
|
|
|
|
-- 이미 스킬 쓴 시간 지났으면, 의미없는 endtime 값이므로 return
|
|
if EndTime == nil
|
|
then
|
|
--DebugLog("시간 == nil")
|
|
return
|
|
end
|
|
|
|
-- 이미 스킬 쓴 시간 지났으면, 의미없는 endtime 값이므로 return
|
|
if EndTime < CurTime
|
|
then
|
|
|
|
--[[
|
|
DebugLog("스킬 이미 사용끝")
|
|
|
|
DebugLog("---------------------------")
|
|
DebugLog("CurTime : "..CurTime )
|
|
DebugLog("CurMySkill : "..CurMySkill)
|
|
DebugLog("EndTime : "..EndTime)
|
|
--]]
|
|
return
|
|
end
|
|
|
|
--DebugLog("드디어 스킬을사용하나요!")
|
|
--[[
|
|
DebugLog("---------------------------")
|
|
DebugLog("CurTime : "..CurTime )
|
|
DebugLog("CurMySkill : "..CurMySkill)
|
|
DebugLog("EndTime : "..EndTime)
|
|
--]]
|
|
|
|
|
|
-----------------------------------------------------------------
|
|
-- ★ 스킬이 리젠 후 착륙인 경우
|
|
-----------------------------------------------------------------
|
|
if CurMySkill == SkillInfo_MiniDragon["MD_ShowUp"]["SkillIndex"]
|
|
then
|
|
--DebugLog("미니드래곤_리젠후 착륙")
|
|
|
|
Var["MiniDragonProcess"]["SkillStartTime"] = CurTime
|
|
Var["MiniDragonProcess"]["SkillEndTime"] = EndTime
|
|
|
|
--[[
|
|
DebugLog("현재시간은 : " ..Var["CurSec"] )
|
|
DebugLog("스킬 시작한 시간은 : " ..Var["MiniDragonProcess"]["SkillStartTime"] )
|
|
DebugLog("스킬 애니 끝 시간은 : " ..Var["MiniDragonProcess"]["SkillEndTime"] )
|
|
--]]
|
|
-- 스크립트 부착*******************************************
|
|
if cSetAIScript ( MainLuaScriptPath, Handle ) ~= nil
|
|
then
|
|
if cAIScriptFunc( Handle, "Entrance", "MD_ShowUp" ) == nil
|
|
then
|
|
ErrorLog("MD_ShowUp 스크립트 부착 실패")
|
|
return
|
|
end
|
|
end
|
|
|
|
Var[Handle]["IsProgressSpecialSkill"] = true
|
|
|
|
return
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- ★ 스킬이 소환인 경우
|
|
-----------------------------------------------------------------
|
|
if CurMySkill == SkillInfo_MiniDragon["MD_SummonSoul"]["SkillIndex_Fire"] or
|
|
CurMySkill == SkillInfo_MiniDragon["MD_SummonSoul"]["SkillIndex_Ice"] or
|
|
CurMySkill == SkillInfo_MiniDragon["MD_SummonSoul"]["SkillIndex_All"]
|
|
then
|
|
Var["MiniDragonProcess"]["SkillStartTime"] = CurTime
|
|
Var["MiniDragonProcess"]["SkillWorkTime"] = CurTime + SkillInfo_MiniDragon["MD_SummonSoul"]["SummonStartDelay"]
|
|
Var["MiniDragonProcess"]["SkillEndTime"] = EndTime
|
|
|
|
Var["MiniDragonProcess"]["CurSkillIndex"] = CurMySkill
|
|
|
|
--[[
|
|
DebugLog("현재 사용한 스킬인덱스 : " ..Var["MiniDragonProcess"]["CurSkillIndex"] )
|
|
DebugLog("현재시간은 : " ..Var["CurSec"] )
|
|
DebugLog("스킬 시작한 시간은 : " ..Var["MiniDragonProcess"]["SkillStartTime"] )
|
|
DebugLog("스킬처리예정시간은 : " ..Var["MiniDragonProcess"]["SkillWorkTime"] )
|
|
DebugLog("스킬애니끝 시간은 : " ..Var["MiniDragonProcess"]["SkillEndTime"] )
|
|
--]]
|
|
|
|
-- 스크립트 부착*******************************************
|
|
if cSetAIScript ( MainLuaScriptPath, Handle ) ~= nil
|
|
then
|
|
if cAIScriptFunc( Handle, "Entrance", "MD_SummonSoul" ) == nil
|
|
then
|
|
ErrorLog("MD_SummonSoul 스크립트 부착 실패")
|
|
return
|
|
end
|
|
end
|
|
|
|
Var[Handle]["IsProgressSpecialSkill"] = true
|
|
|
|
return
|
|
end
|
|
end
|
|
return
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- BonusStage
|
|
--------------------------------------------------------------------------------
|
|
function BonusStageProcess( Var )
|
|
cExecCheck "BonusStageProcess"
|
|
|
|
--DebugLog("===BonusStageProcess=========================")
|
|
|
|
if Var == nil
|
|
then
|
|
ErrorLog("BonusStageProcess:: Var == nil")
|
|
Var["StepFunc"] = ReturnToHome
|
|
--GoToFail( Var )
|
|
return
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- BonusStageProcess : 보너스몹 리젠처리
|
|
-----------------------------------------------------------------
|
|
|
|
if Var["BonusStageProcess"] == nil
|
|
then
|
|
Var["BonusStageProcess"] = {}
|
|
|
|
--DebugLog("===BonusStageProcess=========================")
|
|
--DebugLog("BonusStageProcess 프로세스 테이블 생성")
|
|
|
|
local RegenInfo = RegenInfoTable["BonusMob"]
|
|
local Handle = cMobRegen_XY( Var["MapIndex"], RegenInfo["MobIndex"], RegenInfo["RegenX"], RegenInfo["RegenY"], RegenInfo["Dir"] )
|
|
|
|
if Handle == nil
|
|
then
|
|
ErrorLog("보너스몹 생성 실패")
|
|
--GoToFail( Var )
|
|
Var["StepFunc"] = ReturnToHome
|
|
return
|
|
else
|
|
--DebugLog("보너스몹 핸들값은 : "..Handle)
|
|
end
|
|
|
|
Var["BonusStageProcess"]["Handle"] = Handle
|
|
|
|
-- 대사처리
|
|
local CurMsg = ChatInfo["BonusStageProcess"]["AfterBossRegen"]
|
|
cScriptMessage( Var["MapIndex"], CurMsg["Index"] )
|
|
|
|
return
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- BonusStageProcess : 보너스몹 죽었는지 체크
|
|
-----------------------------------------------------------------
|
|
if Var["BonusStageProcess"] ~= nil
|
|
then
|
|
local Handle = Var["BonusStageProcess"]["Handle"]
|
|
|
|
-----------------------------------------------------------------
|
|
-- BonusStageProcess : 다음 단계로 넘어갈 시간인지 체크
|
|
-----------------------------------------------------------------
|
|
-- 다음 단계로 넘어갈 시간이 아니면
|
|
if Var["BonusStageProcess"]["NextStepWaitTime"] ~= nil
|
|
then
|
|
if Var["BonusStageProcess"]["NextStepWaitTime"] > Var["CurSec"]
|
|
then
|
|
--DebugLog("다음단계 넘어가기 대기중...")
|
|
return
|
|
end
|
|
|
|
Var["BonusStageProcess"] = nil
|
|
Var["StepFunc"] = ReturnToHome
|
|
|
|
--DebugLog("다음 스텝 설정 : ReturnToHome")
|
|
|
|
return
|
|
end
|
|
|
|
|
|
-----------------------------------------------------------------
|
|
-- BonusStageProcess : 보너스몹 죽었는지 체크
|
|
-----------------------------------------------------------------
|
|
if cIsObjectDead( Handle ) == 1
|
|
then
|
|
--DebugLog("보너스몹 죽었군!")
|
|
|
|
-- 보상 지급
|
|
if RewardItemInfo["BonusStageProcess"] ~= nil
|
|
then
|
|
--DebugLog("BonusStageProcess 보상지급 대기중")
|
|
local CurReward = RewardItemInfo["BonusStageProcess"]
|
|
local RewardList = { cGetPlayerList(Var["MapIndex"]) }
|
|
|
|
--DebugLog("RewardList 개수 : "..#RewardList )
|
|
|
|
for i = 1, #RewardList
|
|
do
|
|
-- 여기서 다시 처리를 해줘야되나? 죽은애들 빼는거 말야,
|
|
cRewardItem( RewardList[i], CurReward["Index"], CurReward["Num"] )
|
|
end
|
|
end
|
|
|
|
Var["BonusStageProcess"]["NextStepWaitTime"] = Var["CurSec"] + DelayTime["WaitReturnToHome"]
|
|
|
|
return
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- ReturnToHome
|
|
--------------------------------------------------------------------------------
|
|
-- 귀환
|
|
function ReturnToHome( Var )
|
|
cExecCheck "ReturnToHome"
|
|
|
|
if Var == nil
|
|
then
|
|
ErrorLog("ReturnToHome:: Var == nil" )
|
|
--GoToFail( Var )
|
|
return
|
|
end
|
|
|
|
if Var["ReturnToHome"] == nil
|
|
then
|
|
DebugLog( "Start ReturnToHome" )
|
|
|
|
Var["ReturnToHome"] = {}
|
|
|
|
-- 모든 몬스터 삭제
|
|
cMobSuicide( Var["MapIndex"] )
|
|
|
|
-- 입구쪽 출구게이트 생성
|
|
local RegenExitGate = RegenInfoTable["ExitGate"]
|
|
local nExitGateHandle = cDoorBuild( Var["MapIndex"], RegenExitGate["MobIndex"], RegenExitGate["RegenX"], RegenExitGate["RegenY"], RegenExitGate["Dir"], RegenExitGate["Scale"] )
|
|
|
|
if nExitGateHandle ~= nil
|
|
then
|
|
if cSetAIScript ( MainLuaScriptPath, nExitGateHandle ) == nil
|
|
then
|
|
ErrorLog( "InitDungeon::cSetAIScript ( MainLuaScriptPath, nExitGateHandle ) == nil" )
|
|
end
|
|
|
|
if cAIScriptFunc( nExitGateHandle, "NPCClick", "Click_ExitGate" ) == nil
|
|
then
|
|
ErrorLog( "InitDungeon::cAIScriptFunc( nExitGateHandle, \"NPCClick\", \"Click_ExitGate\" ) == nil" )
|
|
end
|
|
end
|
|
|
|
-- 대사처리
|
|
local CurMsg = ChatInfo["ReturnToHome"]
|
|
cScriptMessage( Var["MapIndex"], CurMsg["Index"] )
|
|
end
|
|
|
|
Var["StepFunc"] = DummyProcess
|
|
Var["ReturnToHome"] = nil
|
|
DebugLog( "End ReturnToHome" )
|
|
return
|
|
|
|
end
|
|
|
|
|
|
|