|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
-- Routine --
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
function DummyRoutineFunc( )
|
|
|
|
|
cExecCheck "DummyRoutineFunc"
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
-- PlayerMapLogin : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
-- ù <EFBFBD>÷<EFBFBD><EFBFBD>̾<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD>α<EFBFBD><EFBFBD><EFBFBD> üũ
|
|
|
|
|
Var["bPlayerMapLogin"] = true
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
-- Routine_Blakan : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĭ <EFBFBD><EFBFBD>ƾ <EFBFBD>Լ<EFBFBD>
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
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<EFBFBD>ʸ<EFBFBD><EFBFBD><EFBFBD> üũ<EFBFBD>ϴ<EFBFBD> <EFBFBD><EFBFBD>ƾ
|
|
|
|
|
if Var["RoutineTime"]["Routine_Blakan"] <= cCurrentSecond()
|
|
|
|
|
then
|
|
|
|
|
Var["RoutineTime"]["Routine_Blakan"] = cCurrentSecond() + 0.2
|
|
|
|
|
else
|
|
|
|
|
return ReturnAI["CPP"]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȯ<EFBFBD><EFBFBD>
|
|
|
|
|
if cIsObjectDead( Handle ) ~= nil
|
|
|
|
|
then
|
|
|
|
|
--EnemyBufferClear( Var, Handle )
|
|
|
|
|
|
|
|
|
|
cAIScriptSet( Handle )
|
|
|
|
|
cNPCVanish( Handle )
|
|
|
|
|
|
|
|
|
|
return ReturnAI["END"]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- <EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD>μ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
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% <EFBFBD><EFBFBD><EFBFBD>Ͻ<EFBFBD>, <EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ȯ<EFBFBD>ð<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if CurHPRate < 50
|
|
|
|
|
then
|
|
|
|
|
|
|
|
|
|
if Var["Routine_Blakan"]["SummonTonado"] == nil
|
|
|
|
|
then
|
|
|
|
|
Var["Routine_Blakan"]["SummonTonado"] = {}
|
|
|
|
|
Var["Routine_Blakan"]["SummonTonado"]["SummonTime"] = Var["CurSec"]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ȯ<EFBFBD>ð<EFBFBD> üũ
|
|
|
|
|
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 : <EFBFBD>İֽ<EFBFBD> <EFBFBD><EFBFBD>ƾ <EFBFBD>Լ<EFBFBD>
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
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<EFBFBD>ʸ<EFBFBD><EFBFBD><EFBFBD> üũ<EFBFBD>ϴ<EFBFBD> <EFBFBD><EFBFBD>ƾ
|
|
|
|
|
if Var["RoutineTime"]["Routine_Fagels"] <= cCurrentSecond()
|
|
|
|
|
then
|
|
|
|
|
Var["RoutineTime"]["Routine_Fagels"] = cCurrentSecond() + 0.2
|
|
|
|
|
else
|
|
|
|
|
return ReturnAI["CPP"]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȯ<EFBFBD><EFBFBD>
|
|
|
|
|
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 : <EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ƾ
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
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<EFBFBD>ʸ<EFBFBD><EFBFBD><EFBFBD> üũ<EFBFBD>ϴ<EFBFBD> <EFBFBD><EFBFBD>ƾ
|
|
|
|
|
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 :: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĭ <EFBFBD> <EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> <EFBFBD><EFBFBD>ƾ <EFBFBD><EFBFBD><EFBFBD><EFBFBD>" )
|
|
|
|
|
|
|
|
|
|
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
|