-- BH_Albireo -- --------------------------------------------------------------------- ----------------------- Script Data Part ------------------------ --------------------------------------------------------------------- MemBlock = {} PhaseData = {} ReturnAI = {} ReturnAI.END = 1 -- Return_AI_END = 1;// -- 모든 AI루틴 끝 ReturnAI.CPP = 2 -- Return_AI_CPP = 2;// -- 루아로 일부 처리한 후 cpp의 AI루틴 돌림 SHINEOBJECT = 2 -- ShineObject_Player HPSection = {} HPSection.Init = -1 HPSection.None = 0 HPSection.First = 1 HPSection.Second = 2 HPSection.Third = 3 -- 1 단계 PhaseData[1] = { -- 단계 진입 조건 HPRateMax = 900, HPRateMin = 750, -- 스킬, 상태이상 Skill = { { Index = "BH_Albireo_Skill06_W", Type = "Skill", Target = "Me", KeepTime = 0, OneShot = true, WaitAfter = 5, Range = 0 }, { Index = "Sta_B_Albi_Fear", Type = "AbState", Target = "Other", KeepTime = 20000, OneShot = true, WaitAfter = 0, Range = 600 }, { Index = "Sta_B_Albi_Dot", Type = "AbState", Target = "Other", KeepTime = 20000, OneShot = true, WaitAfter = 0, Range = 600 }, }, -- 소환 Summon = { { -- MineKN01 { Index = "BHArkMine_Kn", X = 2096, Y = 1886, W = 366, H = 281, D = 0, Interval = 20 }, { Index = "BHArkMine_Kn", X = 2096, Y = 1786, W = 366, H = 281, D = 0, Interval = 20 }, { Index = "BHArkMine_Kn", X = 2096, Y = 1886, W = 366, H = 281, D = 0, Interval = 20 }, { Index = "BHArkMine_Kn", X = 2096, Y = 1886, W = 366, H = 281, D = 0, Interval = 20 }, -- MineKN02 { Index = "BHArkMine_Kn", X = 1096, Y = 1886, W = 366, H = 281, D = 0, Interval = 12 }, { Index = "BHArkMine_Kn", X = 1096, Y = 1886, W = 366, H = 281, D = 0, Interval = 12 }, { Index = "BHArkMine_Kn", X = 1096, Y = 1886, W = 366, H = 281, D = 0, Interval = 12 }, { Index = "BHArkMine_Kn", X = 1096, Y = 1886, W = 366, H = 281, D = 0, Interval = 12 }, { Index = "BHArkMine_Kn", X = 1096, Y = 1886, W = 366, H = 281, D = 0, Interval = 12 }, -- MineKN03 { Index = "BHArkMine_Kn", X = 1096, Y = 781, W = 366, H = 549, D = 0, Interval = 16 }, { Index = "BHArkMine_Kn", X = 1096, Y = 781, W = 366, H = 549, D = 0, Interval = 16 }, { Index = "BHArkMine_Kn", X = 1096, Y = 781, W = 366, H = 549, D = 0, Interval = 16 }, -- MineKN04 { Index = "BHArkMine_Kn", X = 2096, Y = 781, W = 366, H = 549, D = 0, Interval = 24 }, { Index = "BHArkMine_Kn", X = 2096, Y = 781, W = 366, H = 549, D = 0, Interval = 24 }, { Index = "BHArkMine_Kn", X = 2096, Y = 781, W = 366, H = 549, D = 0, Interval = 24 }, { Index = "BHArkMine_Kn", X = 2096, Y = 781, W = 366, H = 549, D = 0, Interval = 24 }, { Index = "BHArkMine_Kn", X = 2096, Y = 781, W = 366, H = 549, D = 0, Interval = 24 }, { Index = "BHArkMine_Kn", X = 2096, Y = 781, W = 366, H = 549, D = 0, Interval = 24 }, }, }, SummonInfo = { { IsAfterPrevSummon = false, IsTimeOver = false, OverTime = 0, EndHPSection = HPSection.Third }, }, } PhaseData[2] = { -- 단계 진입 조건 HPRateMax = 750, HPRateMin = 400, -- 스킬, 상태이상 Skill = { { Index = "BH_Albireo_Skill06_W", Type = "Skill", Target = "Me", KeepTime = 0, OneShot = true, WaitAfter = 5, Range = 0 }, { Index = "Sta_BH_Albi_Reflect", Type = "AbState", Target = "Me", KeepTime = 1200000, OneShot = true, WaitAfter = 0, Range = 150 }, }, -- 소환 Summon = { }, SummonInfo = { }, } PhaseData[3] = { -- 단계 진입 조건 HPRateMax = 400, HPRateMin = 10, -- 스킬, 상태이상 Skill = { { Index = "BH_Albireo_Skill06_W", Type = "Skill", Target = "Me", KeepTime = 0, OneShot = true, WaitAfter = 5, Range = 0 }, { Index = "Sta_BH_Albi_ACMRUp", Type = "AbState", Target = "Me", KeepTime = 600000, OneShot = true, WaitAfter = 0, Range = 0 }, }, -- 소환 Summon = { { -- MineKN05 { Index = "BHArkMine_Kn", X = 1613, Y = 1973, W = 600, H = 600, D = 0, Interval = 22 }, { Index = "BHArkMine_Kn", X = 1613, Y = 1973, W = 600, H = 600, D = 0, Interval = 26 }, { Index = "BHArkMine_Kn", X = 1613, Y = 1973, W = 600, H = 600, D = 0, Interval = 30 }, { Index = "BHArkMine_Kn", X = 1613, Y = 1973, W = 600, H = 600, D = 0, Interval = 34 }, { Index = "BHArkMine_Kn", X = 1613, Y = 1973, W = 600, H = 600, D = 0, Interval = 38 }, -- MineKN06 { Index = "BHArkMine_Kn", X = 1600, Y = 796, W = 600, H = 600, D = 0, Interval = 20 }, { Index = "BHArkMine_Kn", X = 1600, Y = 796, W = 600, H = 600, D = 0, Interval = 28 }, { Index = "BHArkMine_Kn", X = 1600, Y = 796, W = 600, H = 600, D = 0, Interval = 36 }, { Index = "BHArkMine_Kn", X = 1600, Y = 796, W = 600, H = 600, D = 0, Interval = 44 }, -- MineKN07 { Index = "BHArkMine_Kn", X = 1160, Y = 1463, W = 600, H = 600, D = 0, Interval = 30 }, { Index = "BHArkMine_Kn", X = 1160, Y = 1463, W = 600, H = 600, D = 0, Interval = 36 }, { Index = "BHArkMine_Kn", X = 1160, Y = 1463, W = 600, H = 600, D = 0, Interval = 42 }, { Index = "BHArkMine_Kn", X = 1160, Y = 1463, W = 600, H = 600, D = 0, Interval = 48 }, { Index = "BHArkMine_Kn", X = 1160, Y = 1463, W = 600, H = 600, D = 0, Interval = 54 }, { Index = "BHArkMine_Kn", X = 1160, Y = 1463, W = 600, H = 600, D = 0, Interval = 60 }, { Index = "BHArkMine_Kn", X = 1160, Y = 1463, W = 600, H = 600, D = 0, Interval = 66 }, -- MineKN08 { Index = "BHArkMine_Kn", X = 2102, Y = 1487, W = 600, H = 600, D = 0, Interval = 15 }, { Index = "BHArkMine_Kn", X = 2102, Y = 1487, W = 600, H = 600, D = 0, Interval = 21 }, { Index = "BHArkMine_Kn", X = 2102, Y = 1487, W = 600, H = 600, D = 0, Interval = 27 }, { Index = "BHArkMine_Kn", X = 2102, Y = 1487, W = 600, H = 600, D = 0, Interval = 33 }, { Index = "BHArkMine_Kn", X = 2102, Y = 1487, W = 600, H = 600, D = 0, Interval = 39 }, { Index = "BHArkMine_Kn", X = 2102, Y = 1487, W = 600, H = 600, D = 0, Interval = 45 }, { Index = "BHArkMine_Kn", X = 2102, Y = 1487, W = 600, H = 600, D = 0, Interval = 51 }, { Index = "BHArkMine_Kn", X = 2102, Y = 1487, W = 600, H = 600, D = 0, Interval = 57 }, { Index = "BHArkMine_Kn", X = 2102, Y = 1487, W = 600, H = 600, D = 0, Interval = 63 }, }, { -- MineF01 { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 15 }, { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 15 }, { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 15 }, { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 15 }, -- MineF02 { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 15 }, { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 15 }, { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 15 }, { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 15 }, }, { -- MineF03 { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 20 }, { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 20 }, { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 20 }, { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 20 }, { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 20 }, { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 20 }, { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 20 }, -- MineF04 { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 20 }, { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 20 }, { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 20 }, { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 20 }, { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 20 }, { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 20 }, { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 20 }, }, { -- MineF05 { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 2694, Y = 1468, W = 0, H = 0, D = 10, Interval = 30 }, -- MineF06 { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 30 }, { Index = "BHArkMine_F", X = 502, Y = 1464, W = 0, H = 0, D = 10, Interval = 30 }, }, }, SummonInfo = { { IsAfterPrevSummon = false, IsTimeOver = false, OverTime = 0, EndHPSection = HPSection.Third }, { IsAfterPrevSummon = false, IsTimeOver = true, OverTime = 180, EndHPSection = HPSection.None }, { IsAfterPrevSummon = true, IsTimeOver = true, OverTime = 300, EndHPSection = HPSection.None }, { IsAfterPrevSummon = true, IsTimeOver = false, OverTime = 0, EndHPSection = HPSection.Init }, }, } -- 보물상자 소환 정보 BH_AlbiBox = { { Index = "BH_Albireo_Box", ItemDropMobIndex = "BH_Albireo_Box", Radius = 250 }, { Index = "BH_Albireo_Box", ItemDropMobIndex = "BH_Albireo_Box", Radius = 250 }, { Index = "BH_Albireo_Box", ItemDropMobIndex = "BH_Albireo_Box", Radius = 250 }, { Index = "BH_Albireo_Box", ItemDropMobIndex = "BH_Albireo_Box", Radius = 250 }, } AlbiBox_VanishTime = 60 ------------------------------------------------------------------ ----------------------- Albireo Part ------------------------ ------------------------------------------------------------------ function Skill_Wait( Var ) cExecCheck "Skill_Wait" if Var.SkillWaitAfter ~= 0 then --cDebugLog( "cCurSec : " .. cCurrentSecond() .. "SkillWaitAfter : " .. Var.SkillWaitAfter ) if cCurrentSecond() < Var.SkillWaitAfter then --cDebugLog( "SkillWaitAfter......." ) return true else --cDebugLog( "Out Of SkillWaitAfter......." ) Var.SkillWaitAfter = 0 return false end end return false end function Init( Var, Handle, MapIndex ) cExecCheck "Init" MemBlock[Handle] = {} Var = MemBlock[Handle] Var.Handle = Handle Var.MapIndex = MapIndex Var.Wait = {} Var.Wait.Second = 0 Var.Wait.NextFunc = nil Var.TargetLostSec = 0 -- 타겟을 잃은 시간 Var.CurrentPhase = 0 Var.IsInit = {} -- 현 단계의 초기화 여부 Var.IsUsedSkill = false -- OneShot인 스킬의 사용 확인 Var.IsUsedSkillAll = false -- 이 단계의 스킬 사용이 모두 끝났나? Var.CurrentSkill = 1 -- 현재 사용중인 스킬의 Skill 데이터 인덱스 Var.SkillWaitAfter = 0 Var.SummonList = {} for i = 1, #PhaseData do if Var.SummonList[i] == nil then Var.SummonList[i] = {} end for j = 1, #(PhaseData[i]["Summon"]) do if Var.SummonList[i][j] == nil then Var.SummonList[i][j] = {} end Var.SummonList[i][j].IsOver = false -- 그룹 리젠 죵료 여부 Var.SummonList[i][j].OverTime = 0 -- 그룹 리젠 제한 시간 for k = 1, #(PhaseData[i]["Summon"][j]) do if Var.SummonList[i][j][k] == nil then Var.SummonList[i][j][k] = {} end Var.SummonList[i][j][k].IsActive = false -- 개별 리젠 활성 여부 Var.SummonList[i][j][k].Interval = 0 -- 개별 리젠 간격 end end end Var.MobList = {} Var.StepFunc = Albi_HPCheck return ReturnAI.CPP end function BH_Albireo( Handle, MapIndex ) cExecCheck "BH_Albireo" --cDebugLog( "BH_Albireo - Handle : " .. Handle .. " , MapIndex : " .. MapIndex ) -------------------------------------------------------------------------------------- if IsSetScript == false then IsSetScript = true end local Var = MemBlock[Handle] if cIsObjectDead( Handle ) ~= nil then if Var ~= nil then -- 보스가 죽었음 --cDebugLog( "Boss Dead" ) --for k = 1, 2 do --if Var.FellowHandle[k] ~= -1 then --cNPCVanish(Var.FellowHandle[k]) --Var.FellowHandle[k] = -1 --end --end -- 투명인간 소환 - 보물상자 제어용 local InvisibleHandle = cMobRegen_Obj( "InvisibleMan", Handle ) cAIScriptSet( InvisibleHandle, Handle ) MemBlock[InvisibleHandle] = {} MemBlock[InvisibleHandle].Handle = InvisibleHandle MemBlock[InvisibleHandle].MapIndex = MapIndex MemBlock[InvisibleHandle].StepFunc = Invisible_Init MemBlock[Handle] = nil cVanishAll( MapIndex, "BHArkMine_Kn" ) cVanishAll( MapIndex, "BHArkMine_F" ) Var = MemBlock[InvisibleHandle] return Var.StepFunc( Var ) end return ReturnAI.END end if Var == nil then -- 처음 리젠되었음 Init( Var, Handle, MapIndex ) end Var.Handle = Handle Var.MapIndex = MapIndex return Var.StepFunc( Var ) -------------------------------------------------------------------------------------- end function Albi_Init( Var ) cExecCheck "Albi_Init" for i = 1, #PhaseData do Var.IsInit[i] = false end Var.IsUsedSkill = false -- OneShot인 스킬의 사용 확인 Var.IsUsedSkillAll = false -- 이 단계의 스킬 사용이 모두 끝났나? Var.CurrentSkill = 1 -- 현재 사용중인 스킬의 Skill 데이터 인덱스 Var.SkillWaitAfter = 0 end -- Albireo HP 구간 체크 function Albi_HPCheck( Var ) cExecCheck "Albi_HPCheck" local hp local maxhp hp, maxhp = cObjectHP( Var.Handle ) if hp == nil or maxhp == nil or hp == 0 then Albi_Init( Var ) Var.CurrentPhase = HPSection.Init elseif maxhp * PhaseData[1].HPRateMax < hp * 1000 then Albi_Init( Var ) Var.CurrentPhase = HPSection.None elseif maxhp * PhaseData[1].HPRateMin < hp * 1000 and hp * 1000 <= maxhp * PhaseData[1].HPRateMax then if Var.IsInit[1] == false then Albi_Init( Var ) Var.IsInit[1] = true end Var.CurrentPhase = HPSection.First elseif maxhp * PhaseData[2].HPRateMin < hp * 1000 and hp * 1000 <= maxhp * PhaseData[2].HPRateMax then if Var.IsInit[2] == false then Albi_Init( Var ) Var.IsInit[2] = true end Var.CurrentPhase = HPSection.Second elseif maxhp * PhaseData[3].HPRateMin < hp * 1000 and hp * 1000 <= maxhp * PhaseData[3].HPRateMax then if Var.IsInit[3] == false then Albi_Init( Var ) Var.IsInit[3] = true end Var.CurrentPhase = HPSection.Third end Var.StepFunc = Albi_Behaviour return ReturnAI.CPP end function Albi_Behaviour( Var ) cExecCheck "Albi_Behaviour" Var.StepFunc = Albi_HPCheck local Handle = Var.Handle local MapIndex = Var.MapIndex -- 타겟 잃어버린 시간 검사 local TargetHandle = cTargetHandle( Var.Handle ) if TargetHandle ~= nil and cObjectType( TargetHandle ) == SHINEOBJECT then -- 타겟이 있고 플레이어면 (SHINEOBJECT_PLAYER == 2) Var.TargetLostSec = cCurSec() elseif Var.TargetLostSec + 10 < cCurSec() then -- 적이 사라진지 10초 후 cResetAbstate( Var.Handle, "Sta_BH_Albi_Reflect" ) -- 강화버프 제거 cResetAbstate( Var.Handle, "Sta_BH_Albi_ACMRUp" ) -- 강화버프 제거 for i = 1, #(Var.MobList) do cNPCVanish( Var.MobList[i] ) end MemBlock = {} -->모든 메모리 삭제 - 처음부터 다시 시작 WaitBoom = {} Init( Var, Handle, MapIndex ) --cDebugLog( "타겟 사라짐 -> 재초기화!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" ) end -- 벗어난 단계 검사 if Var.CurrentPhase < 1 or #PhaseData < Var.CurrentPhase then return ReturnAI.CPP end Skill = PhaseData[Var.CurrentPhase]["Skill"] -- 알비레오 스킬 사용 if Skill ~= nil then if Skill_Wait( Var ) == false and Var.IsUsedSkillAll == false then -- 스킬이면 if Skill[Var.CurrentSkill]["Type"] == "Skill" then --cDebugLog( "Use Skill!!!!!!!!" ) --cNPCSkillUse( Var.Handle, Var.Handle, Skill[Var.CurrentSkill]["Index"] ) if TargetHandle ~= nil then cSkillBlast( Var.Handle, Var.Handle, Skill[Var.CurrentSkill]["Index"] ) end -- AbState면 elseif Skill[Var.CurrentSkill]["Type"] == "AbState" then --cDebugLog( "Use Abstate!!!!!!!!" ) local Range = Skill[Var.CurrentSkill]["Range"] local Index = Skill[Var.CurrentSkill]["Index"] local KeepTime = Skill[Var.CurrentSkill]["KeepTime"] local Strength = 1 -- 타겟이 적들(플레이어)이면 if Skill[Var.CurrentSkill]["Target"] == "Other" then if TargetHandle ~= nil then cSetAbstate_Range( Var.Handle, Range, SHINEOBJECT, Index, Strength, KeepTime ) end -- 타겟이 나(mob) 이면 elseif Skill[Var.CurrentSkill]["Target"] == "Me" then if TargetHandle ~= nil then cSetAbstate( Var.Handle, Index, Strength, KeepTime ) end end end Var.SkillWaitAfter = cCurrentSecond() + Skill[Var.CurrentSkill]["WaitAfter"] Var.CurrentSkill = Var.CurrentSkill + 1 if #Skill < Var.CurrentSkill then Var.IsUsedSkillAll = true end end end -- 아크 마인 소환 Summon = PhaseData[Var.CurrentPhase]["Summon"] SummonInfo = PhaseData[Var.CurrentPhase]["SummonInfo"] for i = 1, #Var.SummonList do for j = 1, #(Var.SummonList[i]) do for k = 1, #(Var.SummonList[i][j]) do if Var.SummonList[i][j][k].IsActive == false then -- 현재 단계와 같은지 검사 if i == Var.CurrentPhase then -- 이전 그룹 종료 후 실행되는지 검사 if SummonInfo[j].IsAfterPrevSummon == true then if Var.SummonList[i][j - 1].IsOver == true then Var.SummonList[i][j][k].IsActive = true Var.SummonList[i][j].OverTime = cCurSec() + SummonInfo[j].OverTime end else Var.SummonList[i][j][k].IsActive = true Var.SummonList[i][j].OverTime = cCurSec() + SummonInfo[j].OverTime end end elseif Var.SummonList[i][j][k].IsActive == true then -- 리젠 시간 간격 검사 if Var.SummonList[i][j][k].Interval < cCurSec() then local Index = Summon[j][k].Index local X = Summon[j][k].X local Y = Summon[j][k].Y local W = Summon[j][k].W local H = Summon[j][k].H local D = Summon[j][k].D local handle = cMobRegen_Rectangle( Var.MapIndex, Index, X, Y, W, H, D ) if handle ~= nil then cAIScriptSet( handle, Var.Handle ) cAIScriptFunc( handle, "MobAttack", "ArkMine_MobAttack" ) end Var.MobList[#(Var.MobList) + 1] = handle Var.SummonList[i][j][k].Interval = cCurSec() + Summon[j][k].Interval end -- 리젠 종료 검사 if SummonInfo[j].IsTimeOver == true then if Var.SummonList[i][j].OverTime <= cCurSec() then Var.SummonList[i][j][k].IsActive = false Var.SummonList[i][j].IsOver = true for n = 1, #(Var.SummonList[i][j]) do if Var.SummonList[i][j][n].IsActive == true then Var.SummonList[i][j].IsOver = false end end end elseif SummonInfo[j].EndHPSection == Var.CurrentPhase then Var.SummonList[i][j][k].IsActive = false Var.SummonList[i][j].IsOver = true for n = 1, #(Var.SummonList[i][j]) do if Var.SummonList[i][j][n].IsActive == true then Var.SummonList[i][j].IsOver = false end end end end end if 0 < (j - 1) then if Var.SummonList[i][j - 1].IsOver == true then Var.SummonList[i][j - 1].IsOver = false end end end end return ReturnAI.CPP end -------------------------------------------------------------------- ----------------------- ArkMine Part -------------------------- -------------------------------------------------------------------- ExplosionTime = 5 WaitBoom = {} function BHArkMine_Kn( Handle, MapIndex ) cExecCheck "BHArkMine_Kn" local Var = WaitBoom[Handle] if Var == nil then --cDebugLog( "BHArkMine_Kn Init") WaitBoom[Handle] = {} Var = WaitBoom[Handle] Var.Second = cCurSec() + ExplosionTime end -- Mine이 Second 후 자폭 if Var.Second ~= 0 then if Var.Second <= cCurSec() then --cDebugLog( "ATTACK~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~") --cSkillBlast( Handle, Handle, "BHArkMine_Kn_Skill01_W" ) --cNPCSkillUse( Handle, Handle, "BHArkMine_Kn_Skill01_W" ) --cNPCVanish( Handle ) --Var.Second = 0 --ArkMine_MobAttack( Var. end end return ReturnAI.CPP end function BHArkMine_F( Handle, MapIndex ) cExecCheck "BHArkMine_F" return ReturnAI.CPP end function BHArkMine_MobAttack( MapIndex, AtkHandle ) cExecCheck "BHArkMine_MobAttack" --local MobID = cGetMobID( AtkHandle ) --if MobID == nil then -- return --end --for i = 1, #Var.MineIDList do -- if MobID ~= nil then -- if MobID == Var.MineIDList[i] then -- end -- end --end cNPCVanish( AtkHandle ) --cSetObjectHP( 0 ) -- 자살 end -------------------------------------------------------------------- ------------------------- Reward Part -------------------------- -------------------------------------------------------------------- -- 보물상자 제어용 오브젝트 function Common_RemoveTreasure( MapIndex ) cExecCheck "Common_RemoveTreasure" for i = 1, #BH_AlbiBox do cVanishAll( MapIndex, BH_AlbiBox[i].ItemDropMobIndex ) --cDebugLog( "remove" ) end end function Invisible_Init( Var ) cExecCheck "Invisible_Init" ---------------------------------------------------------------------- -- Mantis 8164 -- ※ 보물상제 소환 및 아이템드랍그룹 몬스터 셋팅 local x, y = cObjectLocate( Var.Handle ) for i = 1, #BH_AlbiBox do local BoxHandle = cMobRegen_Circle( Var["MapIndex"], BH_AlbiBox[i]["Index"], x, y, BH_AlbiBox[i]["Radius"] ) if BoxHandle ~= nil then cSetItemDropMobID( BoxHandle, BH_AlbiBox[i]["ItemDropMobIndex"] ) end end ---------------------------------------------------------------------- cGroupRegen("BH_Albi", "BH_AlbiBox") -- 상자가 나오도록 Var.Wait = {} Var.Wait.Second = cCurSec() + AlbiBox_VanishTime Var.StepFunc = Invisible_AllVanish end function InvisibleMan( Handle, MapIndex ) cExecCheck "InvisibleMan" local Var = MemBlock[Handle] if Var == nil then --cDebugLog("InvisibleMan Handle Error : " .. Handle) return end if Var.StepFunc ~= nil then Var.StepFunc( Var ) end return ReturnAI.END end function Invisible_AllVanish( Var ) cExecCheck "Invisible_AllVanish" if cCurSec() > Var.Wait.Second then --cRegenGroupActiv( Var.MapIndex, "UniWpLv125", 0 ) -- 상자가 나오지 않도록(세번째 인수를 생략하거나 1이면 activ) --Common_RemoveTreasure( Var.MapIndex ) cNPCVanish( Var.Handle ) Var.StepFunc = nil end end