285 lines
8.0 KiB
Lua
285 lines
8.0 KiB
Lua
|
--------------------------------------------------------------------------------
|
|||
|
-- Progress Func --
|
|||
|
--------------------------------------------------------------------------------
|
|||
|
|
|||
|
--------------------------------------------------------------------------------
|
|||
|
-- InitDungeon
|
|||
|
--------------------------------------------------------------------------------
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
|
|||
|
function InitDungeon( Var )
|
|||
|
cExecCheck "InitDungeon"
|
|||
|
|
|||
|
if Var == nil
|
|||
|
then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
-- <20>ν<EFBFBD><CEBD>Ͻ<EFBFBD> <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" )
|
|||
|
|
|||
|
Var["InitDungeon"] = {}
|
|||
|
|
|||
|
|
|||
|
-- <20><> <20><><EFBFBD><EFBFBD>
|
|||
|
for i = 1, #RegenInfo["Stuff"]["Door"]
|
|||
|
do
|
|||
|
local CurRegenDoor = RegenInfo["Stuff"]["Door"][ i ]
|
|||
|
local CurDoorInfo = DoorInfo[ CurRegenDoor["Name"] ]
|
|||
|
|
|||
|
if CurRegenDoor == nil
|
|||
|
then
|
|||
|
ErrorLog( "InitDungeon::Door CurRegenDoor == nil : "..i )
|
|||
|
else
|
|||
|
local nCurDoorHandle = cDoorBuild( Var["MapIndex"], CurRegenDoor["Index"], CurRegenDoor["x"], CurRegenDoor["y"], CurRegenDoor["dir"], CurRegenDoor["scale"] )
|
|||
|
|
|||
|
if nCurDoorHandle == nil
|
|||
|
then
|
|||
|
ErrorLog( "InitDungeon::Door was not created. : "..i )
|
|||
|
else
|
|||
|
cDoorAction( nCurDoorHandle, CurDoorInfo["Block"], "close" )
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
|||
|
if CurDoorInfo["NeedItem"] ~= nil
|
|||
|
then
|
|||
|
if cSetAIScript ( MainLuaScriptPath, nCurDoorHandle ) == nil
|
|||
|
then
|
|||
|
ErrorLog( "InitDungeon::cSetAIScript ( MainLuaScriptPath, nCurDoorHandle ) == nil : "..i )
|
|||
|
end
|
|||
|
|
|||
|
if cAIScriptFunc( nCurDoorHandle, "NPCClick", "Click_Door" ) == nil
|
|||
|
then
|
|||
|
ErrorLog( "InitDungeon::cAIScriptFunc( nCurDoorHandle, \"NPCClick\", \"Click_Door\" ) : "..i )
|
|||
|
end
|
|||
|
|
|||
|
if cAIScriptFunc( nCurDoorHandle, "NPCMenu", "Menu_Door" ) == nil
|
|||
|
then
|
|||
|
ErrorLog( "InitDungeon::cAIScriptFunc( nCurDoorHandle, \"NPCMenu\", \"Menu_Door\" ) : "..i )
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
Var["Door"][ nCurDoorHandle ] = {}
|
|||
|
Var["Door"][ nCurDoorHandle ]["Info"] = CurDoorInfo
|
|||
|
Var["Door"][ nCurDoorHandle ]["IsOpen"] = false
|
|||
|
Var["Door"][ CurRegenDoor["Name"] ] = nCurDoorHandle
|
|||
|
|
|||
|
-- <20>ֵ<EFBFBD><D6B5><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
if CurDoorInfo["TwinGate"] ~= nil
|
|||
|
then
|
|||
|
Var["Door"][ nCurDoorHandle ]["TwinGate"] = CurDoorInfo["TwinGate"]
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- <20>Ա<EFBFBD><D4B1><EFBFBD> <20>ⱸ<EFBFBD><E2B1B8><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
|||
|
local RegenExitGate = RegenInfo["Stuff"]["StartExitGate"]
|
|||
|
local nExitGateHandle = cDoorBuild( Var["MapIndex"], RegenExitGate["Index"], RegenExitGate["x"], RegenExitGate["y"], RegenExitGate["dir"], RegenExitGate["scale"] )
|
|||
|
|
|||
|
if nExitGateHandle ~= nil
|
|||
|
then
|
|||
|
DebugLog("InitDungeon::<3A>Ա<EFBFBD><D4B1><EFBFBD> <20>ⱸ<EFBFBD><E2B1B8><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>")
|
|||
|
|
|||
|
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
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>캰 <20><><EFBFBD><EFBFBD>
|
|||
|
local RegenMobGroupList = RegenInfo["Mob"]["InitDungeon"]["NormalMobGroup"]
|
|||
|
|
|||
|
if RegenMobGroupList ~= nil
|
|||
|
then
|
|||
|
DebugLog("InitDungeon::<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>")
|
|||
|
|
|||
|
for i = 1, #RegenMobGroupList
|
|||
|
do
|
|||
|
cGroupRegenInstance( Var["MapIndex"], RegenMobGroupList[ i ] )
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD>ð<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
Var["InitDungeon"]["WaitSecDuringInit"] = Var["CurSec"] + DelayTime["AfterInit"]
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>ܰ<EFBFBD><DCB0><EFBFBD>
|
|||
|
if Var["InitDungeon"]["WaitSecDuringInit"] > Var["CurSec"]
|
|||
|
then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
--GoToNextStep( Var )
|
|||
|
Var["StepFunc"] = Step_Routine
|
|||
|
Var["InitDungeon"] = nil
|
|||
|
DebugLog( "End InitDungeon" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
--------------------------------------------------------------------------------
|
|||
|
-- Step_Routine ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٿ<EFBFBD><D9BF><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ )
|
|||
|
--------------------------------------------------------------------------------
|
|||
|
function Step_Routine( Var )
|
|||
|
cExecCheck "Step_Routine"
|
|||
|
|
|||
|
if Var == nil
|
|||
|
then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ش<EFBFBD><D8B4>ϴ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
|
|||
|
if Var["GateProcess"] ~= nil
|
|||
|
then
|
|||
|
for i, v in pairs( Var["GateProcess"] )
|
|||
|
do
|
|||
|
local StepIndex = tostring( i )
|
|||
|
|
|||
|
if v["IsProceed"] == false
|
|||
|
then
|
|||
|
|
|||
|
-- <20>Ϲ<EFBFBD> <20><> <20><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
local RegenMobGroupList = RegenInfo["Mob"][ StepIndex ]["NormalMobGroup"]
|
|||
|
|
|||
|
if RegenMobGroupList ~= nil
|
|||
|
then
|
|||
|
for i = 1,#RegenMobGroupList
|
|||
|
do
|
|||
|
cGroupRegenInstance( Var["MapIndex"], RegenMobGroupList[ i ] )
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
local RegenBossMobList = RegenInfo["Mob"][ StepIndex ]["Boss"]
|
|||
|
|
|||
|
for i = 1, #RegenBossMobList
|
|||
|
do
|
|||
|
local CurRegenBoss = RegenBossMobList[ i ]
|
|||
|
local nBossHandle = cMobRegen_XY( Var["MapIndex"], CurRegenBoss["Index"], CurRegenBoss["x"], CurRegenBoss["y"], CurRegenBoss["dir"] )
|
|||
|
|
|||
|
if nBossHandle == nil
|
|||
|
then
|
|||
|
ErrorLog( StepIndex.."::Boss was not created. : "..i )
|
|||
|
else
|
|||
|
-- <20><><EFBFBD><EFBFBD> AI <20><><EFBFBD><EFBFBD>
|
|||
|
local CurRegenBossInfo = BossInfo[ CurRegenBoss["Index"] ]
|
|||
|
|
|||
|
if CurRegenBossInfo ~= nil
|
|||
|
then
|
|||
|
if cSetAIScript ( MainLuaScriptPath, nBossHandle ) == nil
|
|||
|
then
|
|||
|
ErrorLog( "InitDungeon::cSetAIScript ( MainLuaScriptPath, nCurDoorHandle ) == nil : "..i )
|
|||
|
end
|
|||
|
|
|||
|
if cAIScriptFunc( nBossHandle, "Entrance", CurRegenBossInfo["Lua_EntranceFunc"] ) == nil
|
|||
|
then
|
|||
|
ErrorLog( "InitDungeon::cAIScriptFunc( nExitGateHandle, \"Entrance\", "..CurRegenBossInfo["Lua_EntranceFunc"].." ) : "..i )
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
Var["Enemy"][ CurRegenBoss["Index"] ] = nBossHandle
|
|||
|
|
|||
|
Var["Enemy"][ nBossHandle ] = {}
|
|||
|
Var["Enemy"][ nBossHandle ]["Index"] = CurRegenBoss["Index"]
|
|||
|
Var["Enemy"][ nBossHandle ]["Info"] = CurRegenBossInfo
|
|||
|
Var["Enemy"][ nBossHandle ]["Phase"] = 1
|
|||
|
|
|||
|
Var["RoutineTime"][ nBossHandle ] = cCurrentSecond()
|
|||
|
end
|
|||
|
end
|
|||
|
-- ó<><C3B3><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> true<75><65> <20><><EFBFBD><EFBFBD>
|
|||
|
v["IsProceed"] = true
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD> üũ
|
|||
|
if Var["GateProcess"]["DoorBoss"] ~= nil
|
|||
|
then
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>Ϸ<EFBFBD><CFB7>ƴ<EFBFBD><C6B4><EFBFBD> üũ
|
|||
|
if Var["GateProcess"]["DoorBoss"]["IsProceed"] == true
|
|||
|
then
|
|||
|
|
|||
|
if Var["Step_Routine_Boss"] == nil
|
|||
|
then
|
|||
|
Var["Step_Routine_Boss"] = {}
|
|||
|
DebugLog("Step_Routine_Boss <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD>")
|
|||
|
end
|
|||
|
|
|||
|
if Var["Step_Routine_Boss"] ~= nil
|
|||
|
then
|
|||
|
-- <20><><EFBFBD><EFBFBD> ó<><C3B3>
|
|||
|
if Var["Step_Routine_Boss"]["Chat"] == nil
|
|||
|
then
|
|||
|
local BossIndex = RegenInfo["Mob"]["DoorBoss"]["Boss"][1]["Index"]
|
|||
|
local BossHandle = Var["Enemy"][ BossIndex ]
|
|||
|
|
|||
|
if cIsObjectDead( BossHandle ) == nil
|
|||
|
then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
Var["Step_Routine_Boss"]["Chat"] = {}
|
|||
|
DebugLog("Step_Routine_Boss :: Chat <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD>")
|
|||
|
|
|||
|
if ChatInfo[BossIndex] ~= nil
|
|||
|
then
|
|||
|
cMobChat( BossHandle, ChatInfo["ScriptFileName"], ChatInfo[BossIndex]["Index"], ChatInfo[BossIndex]["IsShowChatWindow"] )
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
if Var["Step_Routine_Boss"]["IDEnd"] == nil
|
|||
|
then
|
|||
|
Var["Step_Routine_Boss"]["IDEnd"] = {}
|
|||
|
DebugLog("Step_Routine_Boss :: IDEnd <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD>")
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ ó<><C3B3>
|
|||
|
cQuestMobKill_AllInMap( Var["MapIndex"], QuestMobKillInfo["QuestID"], QuestMobKillInfo["MobIndex"], QuestMobKillInfo["MaxKillCount"] )
|
|||
|
|
|||
|
-- <20>ⱸ<EFBFBD><E2B1B8><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
|||
|
local RegenExitGate = RegenInfo["Stuff"]["EndExitGate"]
|
|||
|
local nExitGateHandle = cDoorBuild( Var["MapIndex"], RegenExitGate["Index"], RegenExitGate["x"], RegenExitGate["y"], RegenExitGate["dir"], RegenExitGate["scale"] )
|
|||
|
|
|||
|
if nExitGateHandle ~= nil
|
|||
|
then
|
|||
|
if cSetAIScript ( MainLuaScriptPath, nExitGateHandle ) == nil
|
|||
|
then
|
|||
|
ErrorLog( "ReturnToHome::cSetAIScript ( MainLuaScriptPath, nExitGateHandle ) == nil" )
|
|||
|
end
|
|||
|
|
|||
|
if cAIScriptFunc( nExitGateHandle, "NPCClick", "Click_ExitGate" ) == nil
|
|||
|
then
|
|||
|
ErrorLog( "ReturnToHome::cAIScriptFunc( nExitGateHandle, \"NPCClick\", \"Click_ExitGate\" ) == nil" )
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
end
|
|||
|
|