You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

437 lines
9.2 KiB

--------------------------------------------------------------------------------
-- Routine --
--------------------------------------------------------------------------------
function DummyRoutineFunc( )
cExecCheck "DummyRoutineFunc"
end
--------------------------------------------------------------------------------
-- PlayerMapLogin : 원본
--------------------------------------------------------------------------------
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
end
--------------------------------------------------------------------------------
-- Routine_Blakan : 블라칸 루틴 함수
--------------------------------------------------------------------------------
function Routine_Blakan( Handle, MapIndex )
cExecCheck "Routine_Blakan"
if Handle == nil
then
ErrorLog( "Routine_Blakan::Handle == nil" )
return ReturnAI["END"]
end
if MapIndex == nil
then
ErrorLog( "Routine_Blakan::MapIndex == nil" )
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local Var = InstanceField[ MapIndex ]
if Var == nil
then
ErrorLog( "Routine_Blakan::Var == nil" )
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if Var["Routine_Blakan"] == nil
then
Var["Routine_Blakan"] = {}
end
-- 0.2초마다 체크하는 루틴
if Var["RoutineTime"]["Routine_Blakan"] <= cCurrentSecond()
then
Var["RoutineTime"]["Routine_Blakan"] = cCurrentSecond() + 0.2
else
return ReturnAI["CPP"]
end
-- 죽었는지 확인
if cIsObjectDead( Handle ) ~= nil
then
--EnemyBufferClear( Var, Handle )
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
-- 봉인석 다 부셨을 경우
if Var["Enemy"]["Seal"]["SealNum"] == 0
then
return ReturnAI["END"]
end
local Blakan_CurHP, BlakanMaxHP = cObjectHP( Handle )
local CurHPRate = Blakan_CurHP/BlakanMaxHP * 100
local Blakan_HP50Info = Blakan_Data_Info["HP50"]
-- 첫 HP 50% 이하시, 테이블 생성 및 소환시간 설정
if CurHPRate < 50
then
if Var["Routine_Blakan"]["SummonTonado"] == nil
then
Var["Routine_Blakan"]["SummonTonado"] = {}
Var["Routine_Blakan"]["SummonTonado"]["SummonTime"] = Var["CurSec"]
end
-- 지속적으로 소환시간 체크
if Var["Routine_Blakan"]["SummonTonado"]["SummonTime"] ~= nil
then
if Var["Routine_Blakan"]["SummonTonado"]["SummonTime"] > Var["CurSec"]
then
return
else
Var["Routine_Blakan"]["SummonTonado"]["SummonTime"] = Var["Routine_Blakan"]["SummonTonado"]["SummonTime"] + Blakan_HP50Info["SummonTick"]
DebugLog( "Routine_Blakan :: SummonTonado" )
for i = 1, #Blakan_HP50Info["Mob"]
do
local CurMobIdx = Blakan_HP50Info["Mob"][i]["Index"]
local CurMobRegenX = Blakan_HP50Info["Mob"][i]["x"]
local CurMobRegenY = Blakan_HP50Info["Mob"][i]["y"]
local CurTornadoHandle = cMobRegen_XY( Var["MapIndex"], CurMobIdx, CurMobRegenX, CurMobRegenY )
if CurTornadoHandle == nil
then
ErrorLog( "Routine_Blakan :: Tornado Regen Fail.." )
end
end
end
end
end
return ReturnAI["CPP"]
end
--------------------------------------------------------------------------------
-- Routine_Fagels : 파겔스 루틴 함수
--------------------------------------------------------------------------------
function Routine_Fagels( Handle, MapIndex )
cExecCheck "Routine_Fagels"
if Handle == nil
then
ErrorLog( "Routine_Fagels::Handle == nil" )
return ReturnAI["END"]
end
if MapIndex == nil
then
ErrorLog( "Routine_Fagels::MapIndex == nil" )
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local Var = InstanceField[ MapIndex ]
if Var == nil
then
ErrorLog( "Routine_Fagels::Var == nil" )
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if Var["Enemy"]["Fagels"] == nil
then
ErrorLog( "Routine_Fagels::Var[\"Enemy\"][\"Fagels\"] == nil" )
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if Var["Enemy"]["Fagels"]["Handle"] == nil
then
ErrorLog( "Routine_Fagels::Var[\"Enemy\"][\"Fagels\"][\"Handle\"] == nil" )
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
-- 0.2초마다 체크하는 루틴
if Var["RoutineTime"]["Routine_Fagels"] <= cCurrentSecond()
then
Var["RoutineTime"]["Routine_Fagels"] = cCurrentSecond() + 0.2
else
return ReturnAI["CPP"]
end
-- 죽었는지 확인
if cIsObjectDead( Handle ) ~= nil
then
--EnemyBufferClear( Var, Handle )
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local HP, MaxHP = cObjectHP( Handle )
if MaxHP == 0 then
return ReturnAI["END"]
end
local HPRate = HP / MaxHP * 100
local Fargels = Var["Enemy"]["Fagels"]
-- Fargels Skill
for i = 1, #FARGELS_SKILL do
local SkillIndex = FARGELS_SKILL[i]["SKILL_INDEX"]
local MinHPRate = FARGELS_SKILL[i]["MINHPRATE"]
local MaxHPRate = FARGELS_SKILL[i]["MAXHPRATE"]
local Delay = FARGELS_SKILL[i]["DELAY"]
local Range = FARGELS_SKILL[i]["RANGE"]
local AbstateData = FARGELS_SKILL[i]["ABSTATE"]
local Func = FARGELS_SKILL[i]["FUNC"]
-- skill
if MinHPRate < HPRate and HPRate <= MaxHPRate then
if Fargels["SkillList"][i]["CheckTime"] <= Var["CurSec"]
then
local ClassList = { 1, 6, 11, 16, 21, 26 }
local PlayerHandle = cFindNearPlayer( Handle, Range, ClassList )
if PlayerHandle ~= nil and SkillIndex ~= nil then
cSkillBlast( Handle, PlayerHandle, SkillIndex )
end
-- abstate
local AbstateList = Fargels["SkillList"][i]["AbstateList"]
for j = 1, #AbstateList do
local KeepTime = AbstateData[j]["KEEPTIME"]
local PrepareTime = AbstateData[j]["PREPARETIME"]
AbstateList[j]["CheckKeepTime"] = Var["CurSec"] + KeepTime
AbstateList[j]["CheckPrepareTime"] = Var["CurSec"] + PrepareTime
AbstateList[j]["Enable"] = true
end
-- Summon
local SummonList = Fargels["SkillList"][i]["Summon"]
if SummonList ~= nil
then
SummonList["CheckTime"] = Var["CurSec"]
SummonList["Enable"] = true
end
if SkillIndex ~= nil
then
cDebugLog( "cSkillBlast : " .. SkillIndex )
end
Fargels["SkillList"][i]["CheckTime"] = Var["CurSec"] + Delay
end
end
if Func ~= nil then
Func( Var, Handle, Fargels["SkillList"][i], FARGELS_SKILL[i] )
end
end
return ReturnAI["CPP"]
end
--------------------------------------------------------------------------------
-- Routine_Seal : 봉인석에 붙을 루틴
--------------------------------------------------------------------------------
function Routine_Seal( Handle, MapIndex )
cExecCheck "Routine_Seal"
if Handle == nil
then
ErrorLog( "Routine_Seal::Handle == nil" )
return ReturnAI["END"]
end
if MapIndex == nil
then
ErrorLog( "Routine_Seal::MapIndex == nil" )
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local Var = InstanceField[ MapIndex ]
if Var == nil
then
ErrorLog( "Routine_Seal::Var == nil" )
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if Var["RoutineTime"]["Routine_Seal"][Handle] == nil
then
ErrorLog( "Var[\"RoutineTime\"][\"Routine_Seal\"][Handle] == nil" .. Handle)
return ReturnAI["END"]
end
-- 0.2초마다 체크하는 루틴
if Var["RoutineTime"]["Routine_Seal"][Handle] <= cCurrentSecond()
then
Var["RoutineTime"]["Routine_Seal"][Handle] = cCurrentSecond() + 0.2
else
return ReturnAI["CPP"]
end
if cIsObjectDead( Var["Enemy"]["Blakan"] ) ~= nil
then
DebugLog( "Routine_Seal :: 블라칸 죽어서 봉인석 루틴 제거" )
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) ~= nil
then
local AtkUp_Idx = AbStateInfo["BlakanAtkUp"]["Index"]
local AtkUp_Strength = AbStateInfo["BlakanAtkUp"]["Strength"]
local AtkUp_KeepTime = AbStateInfo["BlakanAtkUp"]["KeepTime"]
if cSetAbstate( Var["Enemy"]["Blakan"], AtkUp_Idx, AtkUp_Strength, AtkUp_KeepTime, Handle ) == nil
then
ErrorLog("Routine_Seal :: Fail Set Abstate To Blakan")
end
cScriptMessage( Var["MapIndex"], ChatInfo["Seal_Broken"][1] )
Var["Enemy"]["Seal"]["SealNum"] = Var["Enemy"]["Seal"]["SealNum"] - 1
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
return ReturnAI["CPP"]
end
--------------------------------------------------------------------------------
-- Click_ExitGate
--------------------------------------------------------------------------------
function Click_ExitGate( NPCHandle, PlyHandle, RegistNumber )
cExecCheck "ExitGateClick"
DebugLog( "ExitGateClick::Start" )
if NPCHandle == nil
then
ErrorLog( "ExitGateClick::NPCHandle == nil" )
return
end
if PlyHandle == nil
then
ErrorLog( "ExitGateClick::PlyHandle == nil" )
return
end
cLinkTo( PlyHandle, LinkInfo["ReturnMap"]["MapIndex"], LinkInfo["ReturnMap"]["x"], LinkInfo["ReturnMap"]["y"] )
DebugLog( "ExitGateClick::End" )
end