require( "common" ) require( "ID/Tower01/Tower01_Data" ) ---------------------------------------------------------------------------------------------------- -- -- Mian function -- ---------------------------------------------------------------------------------------------------- function Main( Field ) local Var = InstanceField[Field] if Var == nil then -- Àδø ÃÖÃÊ ½ÇÇà½Ã º¯¼ö ÃʱâÈ­ InstanceField[Field] = {} Var = InstanceField[Field] Var["MapIndex"] = Field Var["StepFunc"] = FieldInit end -- ¼³Á¤µÈ ÇÔ¼ö°¡ ÀÖÀ»¶§ ÇÔ¼ö ½ÇÇà if Var["StepFunc"] ~= nil then Var["StepFunc"]( Var ) end end ---------------------------------------------------------------------------------------------------- -- -- Step function -- ---------------------------------------------------------------------------------------------------- -- [ Çʵå ÃʱâÈ­ ÇÔ¼ö ] function FieldInit( Var ) cExecCheck( "FieldInit" ) if Var == nil then return end -- Àδø 1Ãþ Ãⱸ °ÔÀÌÆ® if GateData["ReturnGate"] ~= nil then local GateHnd = cMobRegen_XY( Var["MapIndex"], GateData["ReturnGate"]["InxName"], GateData["ReturnGate"]["x"], GateData["ReturnGate"]["y"], GateData["ReturnGate"]["Dir"] ) cSetAIScript( SCRIPT_MAIN, GateHnd ) cAIScriptFunc( GateHnd, "Entrance", "DummyFunc" ) cAIScriptFunc( GateHnd, "NPCClick", "ReturnGateClick" ) end -- °¢ Ãþ ¹® Var["Door"] = {} for i = 1, #FloorDataTable do -- ÇØ´ç Ãþ¿¡ ¹® µ¥ÀÌÅͰ¡ ÀÖÀ¸¸é ¼Òȯ if FloorDataTable[i]["Door"] ~= nil then Var["Door"][i] = cDoorBuild( Var["MapIndex"], FloorDataTable[i]["Door"]["InxName"], FloorDataTable[i]["Door"]["x"], FloorDataTable[i]["Door"]["y"], FloorDataTable[i]["Door"]["Dir"], FloorDataTable[i]["Door"]["Scale"] ) cDoorAction( Var["Door"][i], FloorDataTable[i]["Door"]["BlockInx"], "close" ) end end Var["Floor"] = 1 -- Ãþ Var["StepFunc"] = FloorInit -- ´ÙÀ½ ½ÇÇà ÇÔ¼ö ¼³Á¤ end -- [ Ãþ ÃʱâÈ­ ÇÔ¼ö ] function FloorInit( Var ) cExecCheck( "FloorInit" ) if Var == nil then return end -- Ãþ µ¥ÀÌÅÍ local nFloor = Var["Floor"] -- Ãþ local FloorData = FloorDataTable[nFloor] -- Ãþ µ¥ÀÌÅÍ if FloorData == nil then return end -- ±×·ì ¸®Á¨ if FloorData["RegenGroup"] ~= nil then for i = 1, #FloorData["RegenGroup"] do cGroupRegenInstance( Var["MapIndex"], FloorData["RegenGroup"][i] ); cAssertLog( "GroupRegen : "..Var["MapIndex"].." - "..FloorData["RegenGroup"][i] ) end end -- º¸½º if FloorData["Boss"] ~= nil then if Var["Boss"] == nil then Var["Boss"] = {} end Var["Boss"]["SummonStep"] = 1 -- ¼Òȯ ´Ü°è Var["Boss"]["Handle"] = cMobRegen_XY( Var["MapIndex"], FloorData["Boss"]["InxName"], FloorData["Boss"]["x"], FloorData["Boss"]["y"], FloorData["Boss"]["Dir"] ) end Var["RoutineCheckDelay"] = cCurSec() + ROUTINE_CHECK_DELAY_INIT -- ¸ó½ºÅÍ Ã¼Å© °£°Ý ( ÃÖÃÊ 10 ÃÊ ) Var["StepFunc"] = FloorRoutine -- ´ÙÀ½ ½ÇÇà ÇÔ¼ö ¼³Á¤ Var["Dialog"] = {} -- ´ÙÀ̾ó ·Î±× ¹Ì¸® ÇÒ´ç end -- [ Ãþ ·çƾ ] function FloorRoutine( Var ) cExecCheck( "FloorRoutine" ) if Var == nil then return; end -- Ãþ µ¥ÀÌÅÍ local nFloor = Var["Floor"] -- Ãþ local FloorData = FloorDataTable[nFloor] -- Ãþ µ¥ÀÌÅÍ local bNextStep = false -- ´ÙÀ½ ÁøÇà ÆÇ´Ü if FloorData == nil then return; end -- Ãþ Ŭ¸®¾î Á¶°Ç È®ÀÎ if Var["Boss"] == nil then -- º¸½º µ¥ÀÌÅͰ¡ ¾øÀ» °æ¿ì if Var["RoutineCheckDelay"] < cCurSec() then Var["RoutineCheckDelay"] = cCurSec() + ROUTINE_CHECK_DELAY if cObjectCount( Var["MapIndex"], ObjectType["Mob"] ) <= 0 then -- ¸ðµç ¸ó½ºÅͰ¡ Á×¾úÀ» °æ¿ì, ´ÙÀ½ ÇÔ¼ö·Î ÁøÇà bNextStep = true end end else -- º¸½º µ¥ÀÌÅͰ¡ ÀÖÀ» °æ¿ì if cIsObjectDead( Var["Boss"]["Handle"] ) == nil then lua_BossSummon( Var, FloorData ) -- ÀüÅõ ÁßÀ̸é, º¸½ºÀÇ HP%¸¦ È®ÀÎ ¸ó½ºÅ͸¦ ¼ÒȯÇÑ´Ù else -- º¸½º°¡ Á×¾úÀ» °æ¿ì cMobSuicide( Var["MapIndex"] ); -- ¸ðµç ¸ó½ºÅÍ »èÁ¦ -- Àδø 1Ãþ Ãⱸ °ÔÀÌÆ® -- ( ¡Ø cMobSuicide°¡ È£ÃâµÇ¸é °ÔÀÌÆ®µµ »èÁ¦µÈ´Ù ) if GateData["ReturnGate"] ~= nil then local GateHnd = cMobRegen_XY( Var["MapIndex"], GateData["ReturnGate"]["InxName"], GateData["ReturnGate"]["x"], GateData["ReturnGate"]["y"], GateData["ReturnGate"]["Dir"] ) cSetAIScript( SCRIPT_MAIN, GateHnd ) cAIScriptFunc( GateHnd, "Entrance", "DummyFunc" ) cAIScriptFunc( GateHnd, "NPCClick", "ReturnGateClick" ) end Var["Boss"] = nil bNextStep = true end end -- ´ÙÀ½ ÁøÇà if bNextStep == true then -- ¹® ¿­±â if Var["Door"][nFloor] ~= nil then cDoorAction( Var["Door"][nFloor], FloorData["Door"]["BlockInx"], "open" ) end -- ´ÙÀ̾ó ·Î±× Á¤º¸ ¼³Á¤ if FloorData["Dialog"] ~= nil then Var["Dialog"]["Step"] = 1 Var["Dialog"]["Time"] = cCurSec() + FloorData["Dialog"][1]["Delay"] end Var["StepFunc"] = FloorEnd -- ´ÙÀ½ ½ÇÇà ÇÔ¼ö ¼³Á¤ end end -- [ Ãþ ÀÓ¹« ¿Ï·á ] function FloorEnd( Var ) cExecCheck( "FloorEnd" ) if Var == nil then return; end -- Data local nFloor = Var["Floor"] -- Ãþ local FloorData = FloorDataTable[nFloor] -- Ãþ µ¥ÀÌÅÍ local bNextFloor = false -- ´ÙÀ½ Ãþ ÁøÇà ÆÇ´Ü if FloorData == nil then return; end -- ´ÙÀ̾ó ·Î±× local DialogData = FloorData["Dialog"] if DialogData == nil then -- ´ÙÀ̾ó ·Î±×°¡ ¾øÀ¸¸é ´ÙÀ½ Ãþ ÁøÇà bNextFloor = true else if Var["Dialog"] ~= nil then local nStep = Var["Dialog"]["Step"] if Var["Dialog"]["Time"] <= cCurSec() then -- Àδø Ŭ¸®¾î if nStep == 1 and nFloor == #FloorDataTable then lua_IDSuccess( Var ); end -- ´ÙÀ̾ó·Î±× Ãâ·Â if DialogData[nStep] ~= nil then cMobDialog( Var["MapIndex"], DialogData[nStep]["Facecut"], DialogData[nStep]["FileName"], DialogData[nStep]["Index"] ) end -- ´ÙÀ½ ´ÙÀ̾ó·Î±× ¼³Á¤ if nStep < #FloorData["Dialog"] then Var["Dialog"]["Step"] = nStep + 1 Var["Dialog"]["Time"] = cCurSec() + DialogData[Var["Dialog"]["Step"]]["Delay"] else bNextFloor = true end end end end -- ´ÙÀ½ Ãþ ÁøÇà if bNextFloor == true then if nFloor < #FloorDataTable then -- ¸¶Áö¸· ÃþÀÌ ¾Æ´Ò °æ¿ì Var["Floor"] = nFloor + 1 Var["StepFunc"] = FloorInit else -- ¸¶Áö¸· Ãþ Var["StepFunc"] = nil end end end ---------------------------------------------------------------------------------------------------- -- -- InstanceDungeon Success function -- ---------------------------------------------------------------------------------------------------- -- [ Àδø ¼º°ø ] function lua_IDSuccess( Var ) cExecCheck( "Success" ) if Var == nil then return; end cQuestResult( Var["MapIndex"], "Success" ) -- Àδø 1Ãþ Ãⱸ °ÔÀÌÆ® if GateData["ReturnGate"] ~= nil then local GateHnd = cMobRegen_XY( Var["MapIndex"], GateData["ReturnGate"]["InxName"], GateData["ReturnGate"]["x"], GateData["ReturnGate"]["y"], GateData["ReturnGate"]["Dir"] ) cSetAIScript( SCRIPT_MAIN, GateHnd ) cAIScriptFunc( GateHnd, "Entrance", "DummyFunc" ) cAIScriptFunc( GateHnd, "NPCClick", "ReturnGateClick" ) end -- ±Íȯ °ÔÀÌÆ® ¼Òȯ if GateData["CompleteGate"] ~= nil then local GateHnd = cMobRegen_XY( Var["MapIndex"], GateData["CompleteGate"]["InxName"], GateData["CompleteGate"]["x"], GateData["CompleteGate"]["y"], GateData["CompleteGate"]["Dir"] ) cSetAIScript( SCRIPT_MAIN, GateHnd ) cAIScriptFunc( GateHnd, "Entrance", "DummyFunc" ) cAIScriptFunc( GateHnd, "NPCClick", "CompleteGateClick" ) end end ---------------------------------------------------------------------------------------------------- -- -- Gate function -- ---------------------------------------------------------------------------------------------------- function DummyFunc( Handle, MapIndex ) cExecCheck( "DummyFunc" ) end -- [ Àδø 1Ãþ Ãⱸ °ÔÀÌÆ® ÇÔ¼ö ] function ReturnGateClick( NPCHandle, PlyHandle, PlyRegnum, String ) cExecCheck( "GateClick" ) if GateData == nil then return end if GateData["ReturnGate"] == nil then return end if GateData["ReturnGate"]["LinkData"] == nil then return end cLinkTo( PlyHandle, GateData["ReturnGate"]["LinkData"]["Map"], GateData["ReturnGate"]["LinkData"]["x"], GateData["ReturnGate"]["LinkData"]["y"] ) end -- [ ±Íȯ °ÔÀÌÆ® ÇÔ¼ö ] function CompleteGateClick( NPCHandle, PlyHandle, PlyRegnum, String ) cExecCheck( "GateClick" ) if GateData == nil then return end if GateData["CompleteGate"] == nil then return end if GateData["CompleteGate"]["LinkData"] == nil then return end cLinkTo( PlyHandle, GateData["CompleteGate"]["LinkData"]["Map"], GateData["CompleteGate"]["LinkData"]["x"], GateData["CompleteGate"]["LinkData"]["y"] ) end ---------------------------------------------------------------------------------------------------- -- -- Boss function -- ---------------------------------------------------------------------------------------------------- -- [ º¸½º : ¸ó½ºÅÍ ¼Òȯ ÇÔ¼ö ] function lua_BossSummon( Var, FloorData ) if Var == nil then return end if Var["Boss"] == nil then return end if FloorData == nil then return end if FloorData["BossSummon"] == nil then return end -- ´õÀÌ»ó ¼ÒȯÇÒ ¸ó½ºÅͰ¡ ¾øÀ» °æ¿ì if Var["Boss"]["SummonStep"] > #FloorData["BossSummon"] then return end -- HP % µû¸¥ ¸ó½ºÅÍ ¼Òȯ local nCurHP local nMaxHP nCurHP, nMaxHP = cObjectHP( Var["Boss"]["Handle"] ) if nCurHP == nil then return end if nMaxHP == nil then return end local SummonData = FloorData["BossSummon"][Var["Boss"]["SummonStep"]] if SummonData == nil then return end -- HP % È®ÀÎ if nCurHP * 1000 > nMaxHP * SummonData["HPPercent"] then return end -- ´ÙÀ̾ó·Î±× Ãâ·Â if SummonData["Dialog"] ~= nil then cMobDialog( Var["MapIndex"], SummonData["Dialog"]["Facecut"], SummonData["Dialog"]["FileName"], SummonData["Dialog"]["Index"] ) end -- ¸ó½ºÅÍ ¼Òȯ for i = 1, #SummonData["MonsterData"] do for j = 1, SummonData["MonsterData"][i]["Number"] do cMobRegen_Obj( SummonData["MonsterData"][i]["InxName"], Var["Boss"]["Handle"] ) end end Var["Boss"]["SummonStep"] = Var["Boss"]["SummonStep"] + 1 end