-------------------------------------------------------------------------------- -- Emperor Slime Routine -- -------------------------------------------------------------------------------- function PlayerMapLogin( MapIndex, Handle ) cExecCheck "PlayerMapLogin" if MapIndex == nil then DebugLog( "PlayerMapLogin::MapIndex == nil") return end if Handle == nil then DebugLog( "PlayerMapLogin::Handle == nil") return end local Var = InstanceField[ MapIndex ] if Var == nil then DebugLog( "PlayerMapLogin::Var == nil") return end -- ù Ç÷¹À̾îÀÇ ¸Ê ·Î±×ÀΠüũ Var["bPlayerMapLogin"] = true -- ½Ã°£ ¼³Á¤ÀÌ ¾ÆÁ÷ µÇÁö ¾ÊÀº °æ¿ì¿¡´Â ¾Æ¹«°Íµµ ½ÇÇàÇÏÁö ¾Ê´Â´Ù. if Var["KQLimitTime"] == nil then return end if Var["CurSec"] == nil then return end -- ÇöÀç ½Ã°£ ±âÁØÀ¸·Î Á¦Çѽð£À» ¹Þ¾Æ¼­ ¿äûÇÑ´Ù. local nLimitSec = Var["KQLimitTime"] - Var["CurSec"] cShowKQTimerWithLife_Obj( Handle, nLimitSec ) end function KingSlimeRoutine( Handle, MapIndex ) cExecCheck "KingSlimeRoutine" local Var = InstanceField[ MapIndex ] if Var == nil then cAIScriptSet( Handle ) cNPCVanish( Handle ) return ReturnAI["END"] end local RoutineTimeIndex = ""..Handle -- // 0.2Ãʸ¶´Ù üũÇÏ´Â ·çƾ if Var["RoutineTime"][ RoutineTimeIndex ] == nil then Var["RoutineTime"][ RoutineTimeIndex ] = cCurrentSecond() end if Var["RoutineTime"][ RoutineTimeIndex ] + 0.2 > cCurrentSecond() then return ReturnAI["CPP"] else Var["RoutineTime"][ RoutineTimeIndex ] = cCurrentSecond() end -- 0.2Ãʸ¶´Ù üũÇÏ´Â ·çƾ // if Var["Enemy"] == nil then cAIScriptSet( Handle ) cNPCVanish( Handle ) return ReturnAI["END"] end if Var["Enemy"][ Handle ] == nil then cAIScriptSet( Handle ) cNPCVanish( Handle ) return ReturnAI["END"] end if Var["LowerFloor"] == nil then cAIScriptSet( Handle ) cNPCVanish( Handle ) return ReturnAI["END"] end if Var["LowerFloor"]["FloorNumber"] == nil then cAIScriptSet( Handle ) cNPCVanish( Handle ) return ReturnAI["END"] end local CurFloorNo = Var["LowerFloor"]["FloorNumber"] if Var["LowerFloor"..CurFloorNo ] == nil then cAIScriptSet( Handle ) cNPCVanish( Handle ) return ReturnAI["END"] end if Var["LowerFloor"..CurFloorNo ]["nKingSlimeCount"] == nil then cAIScriptSet( Handle ) cNPCVanish( Handle ) return ReturnAI["END"] end -- »ç¸Á if cIsObjectDead( Handle ) == 1 then Var["LowerFloor"..CurFloorNo ]["nKingSlimeCount"] = Var["LowerFloor"..CurFloorNo ]["nKingSlimeCount"] - 1 if Var["LowerFloor"..CurFloorNo ]["nKingSlimeCount"] > 0 then cMobShout( Handle, KingSlimeChat["ScriptFileName"], KingSlimeChat["DeathDialogIndex"] ) else cMobSuicide( MapIndex ) end cAIScriptSet( Handle ) Var["Enemy"][ Handle ] = nil return ReturnAI["END"] end end function EmperorSlimeRoutine( Handle, MapIndex ) cExecCheck "EmperorSlimeRoutine" local Var = InstanceField[ MapIndex ] if Var == nil then cAIScriptSet( Handle ) cNPCVanish( Handle ) return ReturnAI["END"] end local RoutineTimeIndex = ""..Handle -- // 0.2Ãʸ¶´Ù üũÇÏ´Â ·çƾ if Var["RoutineTime"][ RoutineTimeIndex ] == nil then Var["RoutineTime"][ RoutineTimeIndex ] = cCurrentSecond() end if Var["RoutineTime"][ RoutineTimeIndex ] + 0.2 > cCurrentSecond() then return ReturnAI["CPP"] else Var["RoutineTime"][ RoutineTimeIndex ] = cCurrentSecond() end -- 0.2Ãʸ¶´Ù üũÇÏ´Â ·çƾ // if Var["Enemy"] == nil then cAIScriptSet( Handle ) cNPCVanish( Handle ) return ReturnAI["END"] end if Var["Enemy"][ Handle ] == nil then cAIScriptSet( Handle ) cNPCVanish( Handle ) return ReturnAI["END"] end if Var["TopFloor"] == nil then cAIScriptSet( Handle ) cNPCVanish( Handle ) return ReturnAI["END"] end if Var["Enemy"][ Handle ]["PhaseNumber"] == nil then Var["Enemy"][ Handle ]["PhaseNumber"] = 1 end local CurPhaseNumber = Var["Enemy"][ Handle ]["PhaseNumber"] -- Äý½½¶óÀÓÀÌ Áװųª »ç¶óÁú °æ¿ì ÈúÀÌ ³¡³­ °æ¿ìÀ̹ǷΠÇØ´ç ÀÌÆåÆ® Á¦°Å if CurPhaseNumber == 5 or CurPhaseNumber == 3 then if Var["QueenSlimeHandle"] ~= nil then for i = 1, #Var["QueenSlimeHandle"] do if cIsObjectDead( Var["QueenSlimeHandle"][ i ] ) == 1 or cIsObjectDead( Handle ) == 1 then if Var["HealEffect"] ~= nil then if Var["HealEffect"][ i ]["Boss"] ~= nil then cNPCVanish( Var["HealEffect"][ i ]["Boss"] ) DebugLog( "Effect Vanished : "..Var["HealEffect"][ i ]["Boss"] ) end if Var["HealEffect"][ i ]["Queen"] ~= nil then cNPCVanish( Var["HealEffect"][ i ]["Queen"] ) DebugLog( "Effect Vanished : "..Var["HealEffect"][ i ]["Queen"] ) end Var["HealEffect"][ i ] = {} else ErrorLog( "Var[\"HealEffect\"] ~= nil" ) end end end end end -- Emperor Slime »ç¸Á if cIsObjectDead( Handle ) == 1 then cMobDialog( MapIndex, EmperorSlimeChat["SpeakerIndex"], EmperorSlimeChat["ScriptFileName"], EmperorSlimeChat["DeathDialogIndex"] ) cMobSuicide( MapIndex ) cAIScriptSet( Handle ) Var["Enemy"][ Handle ]["PhaseNumber"] = nil Var["Enemy"][ Handle ] = nil return ReturnAI["END"] end -- º¸½ºÀÇ Á¦ÀÚ¸® ºùºù µ¹±â ½ºÅ³ÀÌ ³¡³­ °æ¿ì if Var["TopFloor"]["bBossTurning"] == true then if Var["TopFloor"]["BossAnimationStopStepSec"] <= Var["CurSec"] then cAnimate( Handle, "stop" ) Var["TopFloor"]["bBossTurning"] = false end end -- ÆäÀÌÁî Á¶°Ç üũ ÈÄ Çൿ local CurHP, MaxHP = cObjectHP( Handle ) local RoutineStepFunc = DummyPhaseFunc if CurHP == MaxHP then -- ¸¸ÇÇ »óÅ¿¡¼­ ¾î±×·Î¸¦ °¡Áø ´ë»óÀÌ ¾ø´Ù¸é º¸½º ÆäÀÌÁî ÃʱâÈ­ if cAggroListSize( Handle ) == 0 then if CurPhaseNumber ~= 1 then Var["Enemy"][ Handle ]["PhaseNumber"] = 1 Var["TopFloor"]["bCurPhaseSummonEnd"] = false Var["TopFloor"]["CurPhaseNextSummonStepSec"] = Var["CurSec"] Var["TopFloor"]["QueenRevivalStepSec"] = nil cVanishAll( MapIndex, "Emp_Tornado" ) cVanishAll( MapIndex, "Emp_Slime2" ) cVanishAll( MapIndex, "Emp_FireSlime2" ) cVanishAll( MapIndex, "Emp_IronSlime2" ) cVanishAll( MapIndex, "Emp_QueenSlime2" ) end end return ReturnAI["CPP"] end -- ÆäÀÌÁî ¹øÈ£¿Í ´ÙÀ½ ÆäÀÌÁî ¹øÈ£¸¦ »ç¿ëÇϱâ À§ÇÏ¿© ÆäÀÌÁî ¹øÈ£ üũ if CurPhaseNumber >= #BossPhaseNameTable then return ReturnAI["CPP"] end -- ÇöÀç, ´ÙÀ½ ÆäÀÌÁî ¹øÈ£°¡ À¯È¿ ÇÒ °æ¿ì local CurBossPhaseName = BossPhaseNameTable[ CurPhaseNumber ] local NextBossPhaseName = BossPhaseNameTable[ CurPhaseNumber + 1 ] local CurPhaseSkill = EmperorSlimeSkill[ CurBossPhaseName ] local NextPhaseSkill = EmperorSlimeSkill[ NextBossPhaseName ] local HP_RealRate = ( CurHP * 1000 ) / MaxHP -- 1000ºÐÀ² -- ´ÙÀ½ ÆäÀÌÁî ÁøÀÔÁ¶°ÇÀÏ °æ¿ì if HP_RealRate <= NextPhaseSkill["HP_Rate"] then -- ½ÇÇà µÉ ÆäÀÌÁî·Î ¹Ù²Û ÈÄ, ÆäÀÌÁîÀÇ º¸½º ¾×¼Ç ½ÇÇà Var["Enemy"][ Handle ]["PhaseNumber"] = CurPhaseNumber + 1 RoutineStepFunc = PhaseActionFunc -- ¼Òȯ ȸÂ÷ °ü·Ã ÃʱâÈ­ Var["TopFloor"]["CurSummonCount"] = 1 Var["TopFloor"]["bCurPhaseSummonEnd"] = false Var["TopFloor"]["CurPhaseNextSummonStepSec"] = Var["CurSec"] -- ¼Òȯ Ƚ¼ö°¡ ¹«Á¦ÇÑÀÌ ¾Æ´Ñ °æ¿ì¿¡ ÇÑÇؼ­ ¼Òȯ Ƚ¼ö üũ if NextPhaseSkill["SummonCount"] ~= nil then if NextPhaseSkill["SummonCount"] <= Var["TopFloor"]["CurSummonCount"] then Var["TopFloor"]["bCurPhaseSummonEnd"] = true end end -- ¼Òȯ°ú ¼Òȯ »çÀÌÀÇ ½Ã°£ÀÌ ¹«È¿°¡ ¾Æ´Ñ °æ¿ì¿¡ ÇÑÇؼ­ ½Ã°£ ¼³Á¤ : ¹«È¿ÀÎ °æ¿ì ÇØ´ç ÆäÀÌÁîÀÇ ¼ÒȯÀº À̹ø ÅÏÀ¸·Î Á¾·áµÊ if NextPhaseSkill["SummonGapSec"] ~= nil then Var["TopFloor"]["CurPhaseNextSummonStepSec"] = Var["CurSec"] + NextPhaseSkill["SummonGapSec"] else Var["TopFloor"]["bCurPhaseSummonEnd"] = true end -- ´ÙÀ½ ÆäÀÌÁî ÁøÀÔ Á¶°Ç ¾ÈµÊ & ÇöÀç ÆäÀÌÁî¿¡¼­ ÇÒÀÏÀÌ ³²¾Ò°Å³ª ¸ðµÎ ³¡³­ »óÅ else -- ÇöÀç ÆäÀÌÁî¿¡¼­ ¼ÒȯÀÌ ¸ðµÎ ³¡³µÀ¸¸é ´ÙÀ½ ÆäÀÌÁî Á¶°Ç¿¡ µµ´ÞÇÒ ¶§±îÁö ´ë±â if Var["TopFloor"]["bCurPhaseSummonEnd"] == true then return ReturnAI["CPP"] end -- ¼ÒȯÀÌ ½ÃÀ۵DZâ Àü¿¡´Â ¾Æ¹«°Íµµ ÇÏÁö ¾Ê´Â´Ù. if CurPhaseNumber == 1 then return ReturnAI["CPP"] end -- ¼Òȯ »çÀÌÀÇ ½Ã°£ÀÌ ¹«È¿ÀÎ °æ¿ì Çѹø ¼ÒȯÇÑ ÀÌÈÄ ÀÌ ÆäÀÌÁî¿¡¼­´Â ¼ÒȯÇÒ ÀÏÀÌ ¾øÀ½ if CurPhaseSkill["SummonGapSec"] == nil then -- Ȥ½Ã ÀÌ Á¶°Ç±îÁö µé¾î¿ÔÀ» °æ¿ì¸¦ ´ëºñÇÏ¿© 󸮸¦ Çѹø ´õ ÇÔ Var["TopFloor"]["bCurPhaseSummonEnd"] = true return ReturnAI["CPP"] end -- ½Ã°£»ó ´ÙÀ½ ¼Òȯ ŸÀÌ¹Ö if Var["TopFloor"]["CurPhaseNextSummonStepSec"] <= Var["CurSec"] then local bSummonTiming = true -- ¾ÆÀ̾𠽽¶óÀÓ ¼Òȯ ½Ã¿¡¸¸ HP Á¶°ÇÀ» Çѹø ´õ üũ ÇÑ´Ù. if CurPhaseNumber == 4 then -- º¸½ºÀÇ ÇÇ°¡ ¼Òȯ ´Ü°è ÁøÀÔ Á¶°Çº¸´Ù ³ô¾ÆÁö¸é ¼ÒȯÀ» Àá½Ã ½®´Ù. if HP_RealRate > CurPhaseSkill["HP_Rate"] then bSummonTiming = false end end if bSummonTiming == true then RoutineStepFunc = PhaseActionFunc -- ¼Òȯ ȸÂ÷ Áõ°¡ Var["TopFloor"]["CurSummonCount"] = Var["TopFloor"]["CurSummonCount"] + 1 -- ¼Òȯ Ƚ¼ö°¡ ¹«Á¦ÇÑÀÌ ¾Æ´Ñ °æ¿ì¿¡ ÇÑÇؼ­ ¼Òȯ Ƚ¼ö üũ if CurPhaseSkill["SummonCount"] ~= nil then if CurPhaseSkill["SummonCount"] <= Var["TopFloor"]["CurSummonCount"] then Var["TopFloor"]["bCurPhaseSummonEnd"] = true end end -- ´ÙÀ½ ¼Òȯ ½Ã°£ ¼³Á¤ Var["TopFloor"]["CurPhaseNextSummonStepSec"] = Var["CurSec"] + CurPhaseSkill["SummonGapSec"] else -- ¼ÒȯÀ» Àá½Ã ÁßÁöÇϸ鼭 ÇÇ°¡ ´Ù½Ã ±âÁØÄ¡ ÀÌÇÏ·Î ¶³¾î Áú ½Ã ¹Ù·Î ¼ÒȯÇϵµ·Ï ½Ã°£ ¼³Á¤. Var["TopFloor"]["CurPhaseNextSummonStepSec"] = Var["CurSec"] return ReturnAI["CPP"] end end end RoutineStepFunc( Handle, MapIndex ) return ReturnAI["CPP"] end function DummyPhaseFunc( ) cExecCheck "DummyPhaseFunc" end function PhaseActionFunc( BossHandle, MapIndex ) cExecCheck "PhaseActionFunc" if BossHandle == nil then return end if MapIndex == nil then return end local Var = InstanceField[ MapIndex ] if Var == nil then return end local PhaseNumber = Var["Enemy"][ BossHandle ]["PhaseNumber"] if PhaseNumber == 1 then ErrorLog( "PhaseActionFunc::Normal-Phase does not have Phase-Action." ) return elseif PhaseNumber < 1 and PhaseNumber > #BossPhaseNameTable then -- ºñÁ¤»ó ÄÉÀ̽º ErrorLog( "PhaseActionFunc::Invalid-Phase" ) return end local BossPhase = BossPhaseNameTable[ PhaseNumber ] DebugLog( "Start PhaseActionFunc::"..BossPhase ) if EmperorSlimeChat["SummonMobShout"][ BossPhase ] ~= nil then if Var["TopFloor"]["CurSummonCount"] == 1 -- ÆäÀÌÁî ½ÃÀÛ ½Ã¿¡¸¸ ¿Üħ then cMobShout( BossHandle, EmperorSlimeChat["ScriptFileName"], EmperorSlimeChat["SummonMobShout"][ BossPhase ]["Index"] ) end end local i = 1 local SummonMobTableInfo = nil if EmperorSlimeSkill[ BossPhase ] ~= nil then SummonMobTableInfo = RegenInfo["Mob"]["TopFloor"][ EmperorSlimeSkill[ BossPhase ]["SummonMobsTableIndex"] ] -- ¼ÒȯÇϸ鼭 º¸½º°¡ ȸÀüÇÏ´Â ºÎºÐ if EmperorSlimeSkill[ BossPhase ]["bBossSpinning"] == true then cAnimate( BossHandle, "start", EmperorSlimeSkill["SummonEffect"]["EffectSkillIndex"] ) Var["TopFloor"]["bBossTurning"] = true Var["TopFloor"]["BossAnimationStopStepSec"] = Var["CurSec"] + EmperorSlimeSkill["SummonEffect"]["AnimationKeepSec"] + 1 -- + 1 Àº ¾à°£ÀÇ ½Ã°£Â÷¸¦ À§ÇÑ ¼³Á¤ end else ErrorLog( "SummonMobInfo is not exist( BossPhase : ".. BossPhase.." )" ) end if SummonMobTableInfo ~= nil then -- ÇÑ ·çÇÁ´ç ¼Òȯ ¹üÀ§°¡ ´Ù¸§ for k = 1, #SummonMobTableInfo do if SummonMobTableInfo[ k ] ~= nil then local SummonMobInfo = { Index = SummonMobTableInfo[ k ]["Index"], x = SummonMobTableInfo[ k ]["x"], y = SummonMobTableInfo[ k ]["y"], dir = 0, } -- º¸½º°¡ ¸®Á¨À§Ä¡·Î ºÎÅÍ ÀÏÁ¤°Å¸® ÀÌ»ó ¹ú¾îÁ³À» °æ¿ì Àܸ÷Àº º¸½º¸÷ Áß½ÉÀ¸·Î ¼Òȯ local BossX, BossY = cObjectLocate( BossHandle ) local OriginX = Var["Enemy"][ BossHandle ]["x"] local OriginY = Var["Enemy"][ BossHandle ]["y"] local LimitSquare = EmperorSlimeSkill["LimitDistanceFromOrigin"] * EmperorSlimeSkill["LimitDistanceFromOrigin"] -- °Å¸® ÃÊ°ú½Ã if cDistanceSquar( BossX, BossY, OriginX, OriginY ) > LimitSquare then SummonMobInfo["x"] = BossX SummonMobInfo["y"] = BossY end -- Åä³×À̵µ ¼Òȯ if EmperorSlimeSkill[ BossPhase ]["bSummonAreaCenterTornado"] == true then local TornadoHandle = cMobRegen_XY( MapIndex, EmperorSlimeSkill["TornadoEffect"]["CenterMobIndex"], SummonMobInfo["x"], SummonMobInfo["y"], 0 ) if TornadoHandle ~= nil then cSetAIScript ( MainLuaScriptPath, TornadoHandle ) cAIScriptFunc( TornadoHandle, "Entrance", "SummonMobRoutine" ) local TornadoInfo = { Index = EmperorSlimeSkill["TornadoEffect"]["CenterMobIndex"], x = SummonMobInfo["x"], y = SummonMobInfo["y"], dir = 0, } Var["Enemy"][ TornadoHandle ] = TornadoInfo if EmperorSlimeSkill["TornadoEffect"]["MobLifeSec"] ~= nil then Var["Enemy"][ TornadoHandle ]["DieStepSec"] = Var["CurSec"] + EmperorSlimeSkill["TornadoEffect"]["MobLifeSec"] end else ErrorLog( "Summon Tornado Fail"..TornadoInfo["Index"] ) end end -- ÀÏÁ¤ ¹üÀ§¿¡ Á¤ÇØÁø ¼ö¸¸Å­ ¸÷ ¼Òȯ if Var["KQ_Difficulty"] == nil then Var["KQ_Difficulty"] = 3 end for nSummonCount = 1, SummonMobTableInfo[ k ]["count"..Var["KQ_Difficulty"] ] do local SummonMobHandle = nil -- Äý½½¶óÀÓÀº º¸½º ÁÖÀ§¿¡ ¼Òȯ if PhaseNumber == 5 then SummonMobInfo["x"] = BossX SummonMobInfo["y"] = BossY end SummonMobHandle = cMobRegen_Circle( MapIndex, SummonMobInfo["Index"], SummonMobInfo["x"], SummonMobInfo["y"], SummonMobInfo["radius"] ) if SummonMobHandle ~= nil then cSetAIScript ( MainLuaScriptPath, SummonMobHandle ) cAIScriptFunc( SummonMobHandle, "Entrance", "SummonMobRoutine" ) Var["Enemy"][ SummonMobHandle ] = SummonMobInfo if EmperorSlimeSkill[ BossPhase ]["MobLifeSec"] ~= nil then Var["Enemy"][ SummonMobHandle ]["DieStepSec"] = Var["CurSec"] + EmperorSlimeSkill[ BossPhase ]["MobLifeSec"] end if PhaseNumber == 5 then if Var["QueenSlimeHandle"] == nil then Var["QueenSlimeHandle"] = {} end Var["QueenSlimeHandle"][ nSummonCount ] = SummonMobHandle end else ErrorLog( "Summon Mob Fail : "..SummonMobInfo["Index"] ) end end end end end DebugLog( "End PhaseActionFunc::"..BossPhase ) end function SummonMobRoutine( Handle, MapIndex ) cExecCheck "SummonMobRoutine" local Var = InstanceField[ MapIndex ] if Var == nil then cAIScriptSet( Handle ) cNPCVanish( Handle ) return ReturnAI["END"] end -- // 0.2Ãʸ¶´Ù üũÇÏ´Â ·çƾ local RoutineTimeIndex = ""..Handle if Var["RoutineTime"][ RoutineTimeIndex ] == nil then Var["RoutineTime"][ RoutineTimeIndex ] = cCurrentSecond() end if Var["RoutineTime"][ RoutineTimeIndex ] + 0.2 > cCurrentSecond() then return ReturnAI["CPP"] else Var["RoutineTime"][ RoutineTimeIndex ] = cCurrentSecond() end -- 0.2Ãʸ¶´Ù üũÇÏ´Â ·çƾ // if Var["Enemy"] == nil then cAIScriptSet( Handle ) cNPCVanish( Handle ) Var["RoutineTime"][ RoutineTimeIndex ] = nil return ReturnAI["END"] end if Var["Enemy"][ Handle ] == nil then cAIScriptSet( Handle ) cNPCVanish( Handle ) Var["RoutineTime"][ RoutineTimeIndex ] = nil return ReturnAI["END"] end if Var["TopFloor"] == nil then cAIScriptSet( Handle ) cNPCVanish( Handle ) Var["RoutineTime"][ RoutineTimeIndex ] = nil return ReturnAI["END"] end -- ¼ÒȯµÈ ¸÷ »ç¸Á½Ã if cIsObjectDead( Handle ) == 1 then cAIScriptSet( Handle ) Var["Enemy"][ Handle ] = nil Var["RoutineTime"][ RoutineTimeIndex ] = nil return ReturnAI["END"] end -- º¸½º »ç¸Á½Ã if cIsObjectDead( Var["Enemy"]["BossHandle"] ) == 1 then cMobSuicide( MapIndex, Handle ) cAIScriptSet( Handle ) Var["Enemy"][ Handle ] = nil Var["RoutineTime"][ RoutineTimeIndex ] = nil return ReturnAI["END"] end local sSkillIndex = "" if Var["Enemy"][ Handle ]["Index"] == "Emp_Tornado" then sSkillIndex = "TornadoEffect" elseif Var["Enemy"][ Handle ]["Index"] == "Emp_Slime2" then sSkillIndex = "FirstSummon" elseif Var["Enemy"][ Handle ]["Index"] == "Emp_FireSlime2" then sSkillIndex = "SecondSummon" elseif Var["Enemy"][ Handle ]["Index"] == "Emp_IronSlime2" then sSkillIndex = "ThirdSummon" elseif Var["Enemy"][ Handle ]["Index"] == "Emp_QueenSlime2" then sSkillIndex = "LastSummon" -- Äý ½½¶óÀÓ ¼Ò¸ê Á¶°Ç local CurHP, MaxHP = cObjectHP( Var["Enemy"]["BossHandle"] ) local HP_RealRate = 1000 if MaxHP ~= 0 then HP_RealRate = ( CurHP * 1000 ) / MaxHP -- 1000ºÐÀ² end if HP_RealRate >= EmperorSlimeSkill[ sSkillIndex ]["MobVanishCondBossHP_Rate"] then -- º¸½º ÇÇ°¡ ÀÏÁ¤ ÀÌ»ó ³Ñ¾î°¡¸é Äý½½¶óÀÓ ÀÚµ¿ ¼Ò¸ê ( Çϳª¸¸ Á×¾úÀ» ¶§ Çϴ ó¸® ¶§¹®¿¡ µÎ¸¶¸®¸¦ Çѹø¿¡ ¾ø¾Ø´Ù. ) cVanishAll( MapIndex, Var["Enemy"][ Handle ]["Index"] ) for i = 1, #Var["QueenSlimeHandle"] do local VanishHandle = Var["QueenSlimeHandle"][ i ] DebugLog( "VanishedByHP"..EmperorSlimeSkill[ sSkillIndex ]["MobVanishCondBossHP_Rate"].."More : "..sSkillIndex..", Handle("..VanishHandle..")" ) cAIScriptSet( VanishHandle ) Var["Enemy"][ VanishHandle ] = nil Var["RoutineTime"][ ""..VanishHandle ] = nil end -- º¸½ºÀÇ ÆäÀÌÁî ÀϺΠÃʱâÈ­ : µôÀÌ ¾àÇÑ °æ¿ì Ŭ¸®¾î ºÒ°¡´ÉÇÏ°Ô ¸¸µë -- º¸½ºÀÇ ¼ÒȯÆäÀÌÁ ÆÄÀ̾¶óÀÓ ¼Òȯ ÀÌÈÄ·Î º¯°æÇÑ´Ù ( ÇöÀç HP¿¡ ÀûÇÕÇÏ°Ô ¸ÂÃã ) Var["Enemy"][ Var["Enemy"]["BossHandle"] ]["PhaseNumber"] = 3 Var["TopFloor"]["bCurPhaseSummonEnd"] = true return ReturnAI["END"] end -- ÀÌ ½ÃÁ¡±îÁö ¿Â Äý½½¶óÀÓÀº »ì¾ÆÀÖ´Â Äý ½½¶óÀÓ -- ÇѸ¶¸®¸¸ Á×À¸¸é 30ÃÊ ¾È¿¡ ÀÌ Äý ½½¶óÀÓµµ Á×¾î¾ß Äý½½¶óÀÓÀÌ ¶Ç »ý±âÁö ¾Ê´Â´Ù. local QueenDeadCount = 0 local CurQueenNo = 0 local DeadQueenNo = 0 for i = 1, #Var["QueenSlimeHandle"] do if cIsObjectDead( Var["QueenSlimeHandle"][ i ] ) == 1 then -- »ç¸ÁÇÑ Äý ½½¶óÀÓ Ä«¿îÆà ¹× ¹øÈ£ ¾ò±â QueenDeadCount = QueenDeadCount + 1 DeadQueenNo = i else -- ÇöÀç ·çƾÀÇ Äý ½½¶óÀÓ ¹øÈ£ ¾ò±â if Handle == Var["QueenSlimeHandle"][ i ] then CurQueenNo = i end end end -- Äý »ç¸Áüũ°¡ Á¦´ë·Î ÀÌ·ïÁö°í ÀÖ´ÂÁö üũÇÏ´Â ºÎºÐ(°úµµÇÑ ·Î±× ¹ß»ý ¿ì·Á·Î ÀÎÇØ ´ëºÎºÐÀÇ °æ¿ì ºñÈ°¼ºÈ­ ÇÊ¿ä) --DebugLog( "AtThisRoutine, QueenDeathCount("..QueenDeadCount.."), CurQueenNo("..CurQueenNo.."), DeadQueenNo("..DeadQueenNo..")" ) -- ÇöÀç ·çƾÀÇ Äý ½½¶óÀÓÀÌ »ì¾ÆÀÖÁö ¾Ê°Å³ª Á¦´ë·Î Á¦¾îÁßÀÌ ¾Æ´Ï¸é ÀÚ»ìó¸® if CurQueenNo == 0 then ErrorLog( "This QueenSlime was aleady died." ) cMobSuicide( Handle ) cAIScriptSet( Handle ) Var["Enemy"][ Handle ] = nil Var["RoutineTime"][ RoutineTimeIndex ] = nil return ReturnAI["END"] end if QueenDeadCount == 1 then if Var["TopFloor"]["QueenRevivalStepSec"] ~= nil then -- Äý½½¶óÀÓ Çϳª°¡ Á×Àº ÈÄ ´Ù¸¥ Çϳª°¡ ¾ÈÁ×ÀºÃ¤·Î ÀÏÁ¤½Ã°£ÀÌ Áö³ª¸é ºÎÈ° if Var["TopFloor"]["QueenRevivalStepSec"] <= Var["CurSec"] then DebugLog( "AtThisRoutine, YesQueenRevivalTiming" ) local BossX, BossY = cObjectLocate( Var["Enemy"]["BossHandle"] ) local QueenSlimeRegenInfo = RegenInfo["Mob"]["TopFloor"]["TwinQueenSlimes"][ 1 ] local QueenSlimeHandle = cMobRegen_Circle( MapIndex, QueenSlimeRegenInfo["Index"], BossX, BossY, QueenSlimeRegenInfo["radius"] ) if QueenSlimeHandle ~= nil then DebugLog( "Revival : "..sSkillIndex..", Handle("..QueenSlimeHandle.."), No("..DeadQueenNo..")" ) -- cNoticeString( MapIndex, "Revival : "..sSkillIndex..", Handle("..QueenSlimeHandle.."), No("..DeadQueenNo..")" ) Var["QueenSlimeHandle"][ DeadQueenNo ] = QueenSlimeHandle cSetAIScript ( MainLuaScriptPath, QueenSlimeHandle ) cAIScriptFunc( QueenSlimeHandle, "Entrance", "SummonMobRoutine" ) Var["Enemy"][ QueenSlimeHandle ] = { Index = Var["Enemy"][ Handle ]["Index"], x = Var["Enemy"][ Handle ]["x"], y = Var["Enemy"][ Handle ]["y"], dir = 0, } else ErrorLog( "Summon Queen Fail"..Var["Enemy"][ Handle ]["Index"] ) end Var["TopFloor"]["QueenRevivalStepSec"] = nil QueenDeadCount = 0 else -- Äý ºÎÈ°±îÁö ¾ó¸¶³ª ³²¾Ò´ÂÁö Ãâ·Â -- DebugLog( "Queen Revival Remain Sec : "..( Var["TopFloor"]["QueenRevivalStepSec"] - Var["CurSec"] ) ) end end if QueenDeadCount == 1 and Var["TopFloor"]["QueenRevivalStepSec"] == nil then local RevivalInfo = QueenSlimeInfo["RevivalInfo"] if cGetAbstate( Handle, RevivalInfo["AbstateIndex"] ) == nil then DebugLog( "AtThisRoutine, NoQueenAbstate" ) if cSetAbstate( Handle, RevivalInfo["AbstateIndex"], RevivalInfo["AbstateStrength"], RevivalInfo["AbstateKeepTime"] ) == nil then ErrorLog( "cSetAbstate To Queen : Failed" ) -- cNoticeString( MapIndex, "Queen("..Handle..") Abstate Fail" ) else -- cNoticeString( MapIndex, "Queen("..Handle..") Abstate Success" ) end Var["TopFloor"]["QueenRevivalStepSec"] = Var["CurSec"] + RevivalInfo["RevivalSec"] else -- DebugLog( "AtThisRoutine, YesQueenAbstate" ) end end else Var["TopFloor"]["QueenRevivalStepSec"] = nil end -- Äý ½½¶óÀÓÀÇ Èú if Var["Enemy"][ Handle ]["HealStepSec"] == nil then Var["Enemy"][ Handle ]["HealStepSec"] = Var["CurSec"] end if Var["Enemy"][ Handle ]["HealStepSec"] <= Var["CurSec"] then -- Èú ÀÌÆåÆ® ÇÚµé º¸°ü Å×À̺í ÃʱâÈ­ if Var["HealEffect"] == nil then Var["HealEffect"] = {} for i = 1, #Var["QueenSlimeHandle"] do Var["HealEffect"][ i ] = {} end end -- Èú ÀÌÆåÆ® »èÁ¦ È®½ÇÇÏ°Ô Çѹø ´õ ó¸®Çϱâ if Var["QueenSlimeHandle"] ~= nil then for i = 1, #Var["QueenSlimeHandle"] do if cIsObjectDead( Var["QueenSlimeHandle"][ i ] ) == 1 then if Var["HealEffect"] ~= nil then if Var["HealEffect"][ i ]["Boss"] ~= nil then cNPCVanish( Var["HealEffect"][ i ]["Boss"] ) DebugLog( "Effect Vanished : "..Var["HealEffect"][ i ]["Boss"] ) end if Var["HealEffect"][ i ]["Queen"] ~= nil then cNPCVanish( Var["HealEffect"][ i ]["Queen"] ) DebugLog( "Effect Vanished : "..Var["HealEffect"][ i ]["Queen"] ) end Var["HealEffect"][ i ] = {} else ErrorLog( "Var[\"HealEffect\"] ~= nil" ) end end end end -- ÈúÀû¿ë if Var["KQ_Difficulty"] == nil then Var["KQ_Difficulty"] = 3 end cHeal( Var["Enemy"]["BossHandle"], QueenSlimeInfo["HealInfo"]["HealAmount"..Var["KQ_Difficulty"] ] ) local sHealEffectIndex = QueenSlimeInfo["HealInfo"]["HealEffectIndex"] -- ÀÌÆåÆ®°¡ ¾øÀ»¶§¸¸ ÀÌÆåÆ®¸¦ »ý¼º if Var["HealEffect"][ CurQueenNo ]["Queen"] == nil then -- ÈúÀÌÆåÆ® to Äý local QueenHealEffectHandle = cEffectRegen_Object( MapIndex, sHealEffectIndex, Handle, 3600000, 1, 1000 ) if QueenHealEffectHandle ~= nil then Var["HealEffect"][ CurQueenNo ]["Queen"] = QueenHealEffectHandle else ErrorLog( "QueenHealEffectHandle is nil" ) end end -- ÀÌÆåÆ®°¡ ¾øÀ»¶§¸¸ ÀÌÆåÆ®¸¦ »ý¼º if Var["HealEffect"][ CurQueenNo ]["Boss"] == nil then -- ÈúÀÌÆåÆ® to ¿¥ÆÛ·¯ local BossHealEffectHandle = cEffectRegen_Object( MapIndex, sHealEffectIndex, Var["Enemy"]["BossHandle"], 3600000, 1, 1000 ) if BossHealEffectHandle ~= nil then Var["HealEffect"][ CurQueenNo ]["Boss"] = BossHealEffectHandle else ErrorLog( "BossHealEffectHandle is nil" ) end end -- ´ÙÀ½ Èú ½ÃÁ¡ ¼³Á¤ Var["Enemy"][ Handle ]["HealStepSec"] = Var["CurSec"] + QueenSlimeInfo["HealInfo"]["HealGapSec"] end else -- À߸øµÈ ¸÷À妽ºÀ̹ǷΠ¸÷À» ¾ø¾Ö°í AI¸¦ Á¦°ÅÇÑ´Ù. ErrorLog( "MobIndex is invalid : "..Var["Enemy"][ Handle ]["Index"] ) cNPCVanish( Handle ) cAIScriptSet( Handle ) Var["Enemy"][ Handle ] = nil Var["RoutineTime"][ RoutineTimeIndex ] = nil return ReturnAI["END"] end -- ¼ö¸íÀÌ Á¤ÇØÁ® ÀÖ´Â ¸ó½ºÅÍÀÎ °æ¿ì üũÇÏ¿© ¼ö¸íÀÌ ´ÙÇϸé ÀÚ»ìó¸® if EmperorSlimeSkill[ sSkillIndex ]["MobLifeSec"] ~= nil then if Var["Enemy"][ Handle ]["DieStepSec"] <= Var["CurSec"] then if sSkillIndex == "TornadoEffect" then -- Åä³×À̵µ´Â ¾ø¾îÁö´Â ½Ã°£°ú ¸ð¼ÇÀÇ ÀÌ»óÇÔ Á¦°Å¸¦ À§ÇØ ¼Ò¸ê󸮷ΠÇÑ´Ù. -- DebugLog( "Vanished : "..sSkillIndex..", Handle("..Handle..")" ) cNPCVanish( Handle ) cAIScriptSet( Handle ) Var["Enemy"][ Handle ] = nil Var["RoutineTime"][ RoutineTimeIndex ] = nil return ReturnAI["END"] else -- ±× ¿ÜÀÇ ¸÷Àº ¼ö¸íÀÌ ´ÙÇϸé ÀÚ»ìÇÑ´Ù. -- DebugLog( "Suicided : "..sSkillIndex..", Handle("..Handle..")" ) cMobSuicide( MapIndex, Handle ) cAIScriptSet( Handle ) Var["Enemy"][ Handle ] = nil Var["RoutineTime"][ RoutineTimeIndex ] = nil return ReturnAI["END"] end end end return ReturnAI["CPP"] end