536 lines
12 KiB
Lua
Raw Normal View History

2023-06-26 04:40:53 -07:00
--------------------------------------------------------------------------------
-- Anti Henis Progress Func --
--------------------------------------------------------------------------------
-- <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
function InitDungeon( Var )
cExecCheck "InitDungeon"
if Var == nil
then
return
end
-- ŷ<><C5B7> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7>̾<EFBFBD><CCBE><EFBFBD> ù <20>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٸ<EFBFBD><D9B8><EFBFBD>.
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" )
local Doors = RegenInfo["Stuff"]
-- <20><> <20><><EFBFBD><EFBFBD>
Var["Door1"] = cDoorBuild( Var["MapIndex"], Doors["Door1"]["Index"], Doors["Door1"]["x"], Doors["Door1"]["y"], Doors["Door1"]["dir"], Doors["Door1"]["scale"] )
Var["Door2"] = cDoorBuild( Var["MapIndex"], Doors["Door2"]["Index"], Doors["Door2"]["x"], Doors["Door2"]["y"], Doors["Door2"]["dir"], Doors["Door2"]["scale"] )
Var["Door3"] = cDoorBuild( Var["MapIndex"], Doors["Door3"]["Index"], Doors["Door3"]["x"], Doors["Door3"]["y"], Doors["Door3"]["dir"], Doors["Door3"]["scale"] )
-- <20><> <20>ݱ<EFBFBD>
cDoorAction( Var["Door1"], Doors["Door1"]["Block"], "close" )
cDoorAction( Var["Door2"], Doors["Door2"]["Block"], "close" )
cDoorAction( Var["Door3"], Doors["Door3"]["Block"], "close" )
Var["InitDungeon"] = {}
Var["InitDungeon"]["WaitSecDuringInit"] = Var["CurSec"]
end
-- <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>ܰ<EFBFBD><DCB0><EFBFBD>
if Var["InitDungeon"]["WaitSecDuringInit"] + DelayTime["AfterInit"] <= Var["CurSec"]
then
GoToNextStep( Var )
Var["InitDungeon"] = nil
DebugLog( "End InitDungeon" )
return
end
end
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
function GuideOfGuard( Var )
cExecCheck "GuideOfGuard"
if Var == nil
then
return
end
if Var["GuideOfGuard"] == nil
then
DebugLog( "Start GuideOfGuard" )
local RegenGuard = RegenInfo["NPC"]["NPC_Guard"]
local GuardHandle = nil
GuardHandle = cMobRegen_XY( Var["MapIndex"], RegenGuard["Index"], RegenGuard["x"],RegenGuard["y"], RegenGuard["dir"] )
if GuardHandle ~= nil
then
Var["Friend"][ GuardHandle ] = RegenGuard
Var["Friend"][ GuardHandle ]["Handle"] = GuardHandle
end
Var["GuideOfGuard"] = {}
Var["GuideOfGuard"]["NoticeStepSec"] = Var["CurSec"]
Var["GuideOfGuard"]["NoticeStepNo"] = 1
end
-- <20><><EFBFBD>̾<EFBFBD><CCBE>α<EFBFBD>(<28><><EFBFBD>̽<EFBFBD><CCBD><EFBFBD>) index üũ <20><> <20><><EFBFBD><EFBFBD>
if Var["GuideOfGuard"]["NoticeStepNo"] <= #NPC_GuardChat["StartWarnDialog"]
then
-- <20><><EFBFBD>̽<EFBFBD><CCBD><EFBFBD> ó<><C3B3>
if Var["GuideOfGuard"]["NoticeStepSec"] <= Var["CurSec"]
then
cMobDialog( Var["MapIndex"], RegenInfo["NPC"]["NPC_Guard"]["Index"], NPC_GuardChat["ScriptFileName"], NPC_GuardChat["StartWarnDialog"][ Var["GuideOfGuard"]["NoticeStepNo"] ]["Index"] )
Var["GuideOfGuard"]["NoticeStepSec"] = Var["CurSec"] + DelayTime["BetweenGuardWarnDialog"] -- <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̽<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD>
Var["GuideOfGuard"]["NoticeStepNo"] = Var["GuideOfGuard"]["NoticeStepNo"] + 1 -- <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̽<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ܰ<EFBFBD> <20><><EFBFBD><EFBFBD>
end
else
for indexHandle, value in pairs( Var["Friend"] )
do
cNPCVanish( indexHandle )
end
local nLimitSec = cGetKQLimitSecond( Var["MapIndex"] )
if nLimitSec == nil
then
ErrorLog( "GuideOfGuard::nLimitSec == nil" )
else
-- Real Kingdom Quest <20><><EFBFBD><EFBFBD> !!!!
Var["KQLimitTime"] = Var["CurSec"] + nLimitSec
-- Ÿ<≯<EFBFBD> <20><><EFBFBD><EFBFBD>!
cShowKQTimerWithLife( Var["MapIndex"], nLimitSec )
end
GoToNextStep( Var )
Var["GuideOfGuard"] = nil
DebugLog( "End GuideOfGuard" )
return
end
end
-- ŷ<><C5B7><EFBFBD><EFBFBD><EFBFBD>Ӿ<EFBFBD><D3BE><EFBFBD> 1, 2, 3<><33>
function LowerFloor( Var )
cExecCheck "LowerFloor"
if Var == nil
then
return
end
if Var["LowerFloor"] == nil
then
Var["LowerFloor"] = {}
end
if Var["LowerFloor"]["FloorNumber"] == nil
then
Var["LowerFloor"]["FloorNumber"] = 1
end
-- <20><> <20><> <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD>
if Var["LowerFloor"..Var["LowerFloor"]["FloorNumber"] ] == nil
then
DebugLog( "Start Floor "..Var["LowerFloor"]["FloorNumber"] )
local CurFloor = FloorNameTable[ Var["LowerFloor"]["FloorNumber"] ] -- <20><><EFBFBD≯<EFBFBD> <20>޾ƿ<DEBE><C6BF><EFBFBD>
local CurRegenFloor = {}
CurRegenFloor = RegenInfo["Group"][ CurFloor ]
for i = 1, #CurRegenFloor
do
cGroupRegenInstance( Var["MapIndex"], CurRegenFloor[i] )
end
Var["LowerFloor"..Var["LowerFloor"]["FloorNumber"] ] = {}
Var["LowerFloor"..Var["LowerFloor"]["FloorNumber"] ]["WaitSecDuringMobGen"] = Var["CurSec"] + DelayTime["AfterMobGen"]
end
-- <20><> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD>ٷ<EFBFBD><D9B7><EFBFBD> <20><> Ŭ<><C5AC><EFBFBD><EFBFBD> üũ<C3BC><C5A9> <20>ϱ<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD>ٷ<EFBFBD><D9B7><EFBFBD>
if Var["LowerFloor"..Var["LowerFloor"]["FloorNumber"] ]["WaitSecDuringMobGen"] > Var["CurSec"]
then
return
end
-- Fail Case : <20><><EFBFBD><EFBFBD> <20><> Ȥ<><C8A4> <20>÷<EFBFBD><C3B7>̾ <20>ƹ<EFBFBD><C6B9><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if cObjectCount( Var["MapIndex"], ObjectType["Player"] ) <= 0
then
GoToFail( Var )
Var["LowerFloor"..Var["LowerFloor"]["FloorNumber"] ] = nil
Var["LowerFloor"] = nil
return
end
-- Fail Case : Ÿ<><C5B8> <20><><EFBFBD><EFBFBD>
if IsKQTimeOver( Var ) == true
then
GoToFail( Var )
Var["LowerFloor"..Var["LowerFloor"]["FloorNumber"] ] = nil
Var["LowerFloor"] = nil
return
end
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>׿<EFBFBD><D7BF><EFBFBD><EFBFBD><EFBFBD> üũ
local bEndFloor = false
if cObjectCount( Var["MapIndex"], ObjectType["Mob"] ) <= 0
then
bEndFloor = true
end
-- Success Case : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>׿<EFBFBD><D7BF><EFBFBD> <20><>
if bEndFloor == true
then
cDoorAction( Var["Door"..Var["LowerFloor"]["FloorNumber"] ], RegenInfo["Stuff"]["Door"..Var["LowerFloor"]["FloorNumber"] ]["Block"], "open" )
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Var["LowerFloor"..Var["LowerFloor"]["FloorNumber"] ] = nil
DebugLog( "End Floor "..Var["LowerFloor"]["FloorNumber"] )
Var["LowerFloor"]["FloorNumber"] = Var["LowerFloor"]["FloorNumber"] + 1
-- 1,2,3<><33><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>!
if Var["LowerFloor"]["FloorNumber"] > 3
then
Var["LowerFloor"] = nil
GoToNextStep( Var )
return
end
return
end
end
-- <20>ֻ<EFBFBD><D6BB><EFBFBD>
function TopFloor( Var )
cExecCheck "TopFloor"
if Var == nil
then
return
end
-- <20>ֻ<EFBFBD><D6BB><EFBFBD> <20><><EFBFBD><EFBFBD>
if Var["TopFloor"] == nil
then
DebugLog( "Start TopFloor" )
local RegenAntiHenisBoss = RegenInfo["Mob"]["TopFloor"]["AntiHenisBoss"]
local AntiHenisBossHandle = nil
AntiHenisBossHandle = cMobRegen_XY( Var["MapIndex"], RegenAntiHenisBoss["Index"], RegenAntiHenisBoss["x"], RegenAntiHenisBoss["y"], RegenAntiHenisBoss["dir"] )
if AntiHenisBossHandle ~= nil
then
cSetAIScript ( MainLuaScriptPath, AntiHenisBossHandle )
cAIScriptFunc( AntiHenisBossHandle, "Entrance", "AntiHenisBossRoutine" )
Var["Enemy"][ AntiHenisBossHandle ] = RegenAntiHenisBoss
end
Var["TopFloor"] = {}
-- ŷ<><C5B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20>ܰ<EFBFBD> <20>ʱ<EFBFBD>ȭ
Var["TopFloor"]["WarnStepSec"] = Var["CurSec"]
Var["TopFloor"]["WarnStepNo"] = 1
-- ŷ<><C5B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD> <20>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD>
Var["TopFloor"]["WaitSecDuringBossGen"] = Var["CurSec"] + DelayTime["AfterMobGen"]
end
------ AntiHenisBoss<73><73> <20><><EFBFBD><EFBFBD>
-- <20><><EFBFBD>̽<EFBFBD><CCBD><EFBFBD> <20>ܰ<EFBFBD> üũ <20><> <20><><EFBFBD><EFBFBD>
if Var["TopFloor"]["WarnStepNo"] <= #AntiHenisBossChat["WarningDialog"]
then
-- <20><><EFBFBD>̾<EFBFBD><CCBE>α<EFBFBD> ó<><C3B3>
if Var["TopFloor"]["WarnStepSec"] <= Var["CurSec"]
then
cMobDialog( Var["MapIndex"], RegenInfo["Mob"]["TopFloor"]["AntiHenisBoss"]["Index"], AntiHenisBossChat["ScriptFileName"], AntiHenisBossChat["WarningDialog"][ Var["TopFloor"]["WarnStepNo"] ]["Index"] )
Var["TopFloor"]["WarnStepNo"] = Var["TopFloor"]["WarnStepNo"] + 1 -- <20><><EFBFBD><EFBFBD> <20>ܰ<EFBFBD> <20><>ȣ <20><><EFBFBD><EFBFBD>
Var["TopFloor"]["WarnStepSec"] = Var["CurSec"] + DelayTime["BetweenAntiHenisBossWarnDialog"] -- <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̽<EFBFBD><CCBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD>
end
return
end
-- <20><><EFBFBD><EFBFBD> <20><> <20>ð<EFBFBD> <20><><EFBFBD>ٸ<EFBFBD><D9B8><EFBFBD>
if Var["TopFloor"]["WaitSecDuringBossGen"] > Var["CurSec"]
then
return
end
-- Fail Case : <20><><EFBFBD><EFBFBD> <20><> Ȥ<><C8A4> <20>÷<EFBFBD><C3B7>̾ <20>ƹ<EFBFBD><C6B9><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if cObjectCount( Var["MapIndex"], ObjectType["Player"] ) <= 0
then
GoToFail( Var )
Var["TopFloor"] = nil
return
end
-- Fail Case : Ÿ<><C5B8> <20><><EFBFBD><EFBFBD>
if IsKQTimeOver( Var ) == true
then
GoToFail( Var )
Var["TopFloor"] = nil
return
end
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>׿<EFBFBD><D7BF><EFBFBD><EFBFBD><EFBFBD> üũ
local bEndTopFloor = true
for indexHandle, Value in pairs( Var["Enemy"] )
do
if Value ~= nil
then
bEndTopFloor = false
end
end
-- Success Case : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>׿<EFBFBD><D7BF><EFBFBD> <20><>
if bEndTopFloor == true
then
GoToSuccess( Var )
Var["TopFloor"] = nil
DebugLog( "End TopFloor" )
return
end
end
-- ŷ<><C5B7> <20><><EFBFBD><EFBFBD>Ʈ Ŭ<><C5AC><EFBFBD><EFBFBD>
function QuestSuccess( Var )
cExecCheck "QuestSuccess"
if Var == nil
then
return
end
if Var["QuestSuccess"] == nil
then
DebugLog( "Start QuestSuccess" )
-- Success <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cVanishTimer( Var["MapIndex"] )
cQuestResult( Var["MapIndex"], "Success" )
-- <20>÷<EFBFBD><C3B7>̾<CCBE><EEBFA1> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ֱ<EFBFBD>
cReward( Var["MapIndex"], "KQ" )
-- Quest Mob Kill <20><><EFBFBD><EFBFBD>.
cQuestMobKill_AllInMap( Var["MapIndex"], QuestMobKillInfo["QuestID"], QuestMobKillInfo["MobIndex"], QuestMobKillInfo["MaxKillCount"] )
Var["QuestSuccess"] = {}
Var["QuestSuccess"]["SuccessStepSec"] = Var["CurSec"]
Var["QuestSuccess"]["SuccessStepNo"] = 1
end
-- <20><><EFBFBD><EFBFBD>â<EFBFBD><C3A2><EFBFBD><EFBFBD> <20>޼<EFBFBD><DEBC><EFBFBD>
if Var["QuestSuccess"]["SuccessStepNo"] <= #NPC_GuardChat["SuccessAndThenDialog"]
then
if Var["QuestSuccess"]["SuccessStepSec"] <= Var["CurSec"]
then
local GuardDialog = NPC_GuardChat["SuccessAndThenDialog"]
cMobDialog( Var["MapIndex"], GuardDialog["SpeakerIndex"], NPC_GuardChat["ScriptFileName"], GuardDialog[ Var["QuestSuccess"]["SuccessStepNo"] ]["Index"] )
Var["QuestSuccess"]["SuccessStepNo"] = Var["QuestSuccess"]["SuccessStepNo"] + 1 -- go to next dialog
Var["QuestSuccess"]["SuccessStepSec"] = Var["CurSec"] + DelayTime["BetweenSuccessDialog"] -- set time for changing step
end
return
end
-- <20><><EFBFBD>̾<EFBFBD><CCBE>α<EFBFBD> <20><>
if Var["QuestSuccess"]["SuccessStepNo"] > #NPC_GuardChat["SuccessAndThenDialog"]
then
if Var["QuestSuccess"]["SuccessStepSec"] <= Var["CurSec"]
then
GoToNextStep( Var )
Var["QuestSuccess"] = nil
DebugLog( "End QuestSuccess" )
end
end
end
-- ŷ<><C5B7> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
function QuestFailed( Var )
cExecCheck "QuestFailed"
if Var == nil
then
return
end
DebugLog( "Start QuestFailed" )
-- Fail <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cVanishTimer( Var["MapIndex"] )
cQuestResult( Var["MapIndex"], "Fail" )
GoToNextStep( Var )
DebugLog( "End QuestFailed" )
Var["QuestFailed"] = {}
end
-- <20><>ȯ
function ReturnToHome( Var )
cExecCheck "ReturnToHome"
if Var == nil
then
return
end
if Var["ReturnToHome"] == nil
then
DebugLog( "Start ReturnToHome" )
Var["ReturnToHome"] = {}
Var["ReturnToHome"]["ReturnStepSec"] = Var["CurSec"]
Var["ReturnToHome"]["ReturnStepNo"] = 1
end
-- Return : return notice substep
if Var["ReturnToHome"]["ReturnStepNo"] <= #NoticeInfo["KQReturn"]
then
if Var["ReturnToHome"]["ReturnStepSec"] <= Var["CurSec"]
then
-- Notice of Escape
if NoticeInfo["KQReturn"][ Var["ReturnToHome"]["ReturnStepNo"] ]["Index"] ~= nil
then
cNotice( Var["MapIndex"], NoticeInfo["ScriptFileName"], NoticeInfo["KQReturn"][ Var["ReturnToHome"]["ReturnStepNo"] ]["Index"] )
end
-- Go To Next Notice
Var["ReturnToHome"]["ReturnStepNo"] = Var["ReturnToHome"]["ReturnStepNo"] + 1
Var["ReturnToHome"]["ReturnStepSec"] = Var["CurSec"] + DelayTime["BetweenKQReturnNotice"]
end
return
end
-- Return : linkto substep
if Var["ReturnToHome"]["ReturnStepNo"] > #NoticeInfo["KQReturn"]
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
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
KQ_StepsList =
{
{ Function = InitDungeon, Name = "InitDungeon", },
{ Function = GuideOfGuard, Name = "GuideOfGuard", },
{ Function = LowerFloor, Name = "LowerFloor", },
{ Function = TopFloor, Name = "TopFloor", },
{ Function = QuestSuccess, Name = "QuestSuccess", },
{ Function = QuestFailed, Name = "QuestFailed", },
{ Function = ReturnToHome, Name = "ReturnToHome", },
}
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
KQ_StepsIndexList =
{
}
for index, funcValue in pairs ( KQ_StepsList )
do
KQ_StepsIndexList[ funcValue["Name"] ] = index
end