require( "common" ) -- 비상작동마법석A function AdlFH_EStone01( Handle, MapIndex ) cExecCheck "AdlF_magic_stoneA" return MagicStone( Handle, MapIndex ) end -- 비상작동마법석B function AdlFH_EStone02( Handle, MapIndex ) cExecCheck "AdlF_magic_stoneB" return MagicStone( Handle, MapIndex ) end -- 비상작동마법석C function AdlFH_EStone03( Handle, MapIndex ) cExecCheck "AdlF_magic_stoneC" return MagicStone( Handle, MapIndex ) end MagicStoneMemBlock = {} function MagicStone( Handle, MapIndex ) cExecCheck "MagicStone" local Var = MagicStoneMemBlock[Handle] if cIsObjectDead( Handle ) then -- 죽었음 cAIScriptSet( Handle ) -- 스크립트 없앰 MagicStoneMemBlock[Handle] = nil -- 메모리해제 return ReturnAI.END end if Var == nil then MagicStoneMemBlock[Handle] = {} Var = MagicStoneMemBlock[Handle] Var.Handle = Handle Var.MapIndex = MapIndex cAIScriptFunc( Var.Handle, "NPCClick", "MagicStone_Click" ) cAIScriptFunc( Var.Handle, "NPCMenu", "MagicStone_Casting" ) end return ReturnAI.END end function MagicStone_Click( NPCHandle, PlyHandle, RegistNumber ) cExecCheck "MagicStone_Click" local Var = MagicStoneMemBlock[NPCHandle] if Var == nil then cDebugLog( "MagicStone_Click : nil NPC " .. NPCHandle ) return end -- 필드 전역 변수 if InstanceField[Var.MapIndex] == nil then return end -- local Field = InstanceField[Var.MapIndex] -- if Field.SummonStone_Active ~= nil then -- return -- end cCastingBar( PlyHandle, NPCHandle, WaveEvent.MS_CastingTime * 1000, AniIndex.CharactorCasting ) end function MagicStone_Casting( NPCHandle, PlyHandle, RegistNumber, Menu ) cExecCheck "MagicStone_Casting" local Var = MagicStoneMemBlock[NPCHandle] if Var == nil then cDebugLog( "MagicStone_Casting : nil NPC " .. NPCHandle ) return end -- 필드 전역 변수 if InstanceField[Var.MapIndex] == nil then return end local Field = InstanceField[Var.MapIndex] -- 소환석의 상태에 따라 처리가 달라진다 if Field.SummonStone_Active == nil then local AniIndexNum if Field.Magic_stoneA == NPCHandle then Field.MagicStoneA_ActiveTime = cCurrentSecond() + WaveEvent.MS_ActiveTime AniIndexNum = 1 elseif Field.Magic_stoneB == NPCHandle then Field.MagicStoneB_ActiveTime = cCurrentSecond() + WaveEvent.MS_ActiveTime AniIndexNum = 2 elseif Field.Magic_stoneC == NPCHandle then Field.MagicStoneC_ActiveTime = cCurrentSecond() + WaveEvent.MS_ActiveTime AniIndexNum = 3 else cDebugLog( "MagicStone_Casting : " .. NPCHandle ) end if AniIndexNum ~= nil then cAnimate( NPCHandle, "start", AniIndex.MagicStoneActive[AniIndexNum] ) end else if Field.Magic_stoneA == NPCHandle then Field.MagicStoneA_ActiveTime = cCurrentSecond() + WaveEvent.MS_NonActiveTime elseif Field.Magic_stoneB == NPCHandle then Field.MagicStoneB_ActiveTime = cCurrentSecond() + WaveEvent.MS_NonActiveTime elseif Field.Magic_stoneC == NPCHandle then Field.MagicStoneC_ActiveTime = cCurrentSecond() + WaveEvent.MS_NonActiveTime else cDebugLog( "MagicStone_Casting : " .. NPCHandle ) end cAnimate( NPCHandle, "stop" ) end end