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.
 
 

667 lines
11 KiB

--------------------------------------------------------------------------------
-- KDFargels Routine Func --
--------------------------------------------------------------------------------
function PlayerMapLogin( Field, Handle )
cExecCheck( "PlayerMapLogin" )
if Field == nil or Handle == nil then
return
end
local EventMemory = InstanceField[Field]
if EventMemory == nil then
return
end
local PlayerList = EventMemory["PlayerList"]
if PlayerList == nil then
return
end
if PlayerList[Handle] == nil and cIsKQJoiner( Handle ) == true then
PlayerList[Handle] = { }
EventMemory["PlayerLogin"] = true
end
if Field ~= nil and EventMemory["CheckLimitTime"] ~= nil then
local RestLimitTime = EventMemory["CheckLimitTime"] - cCurrentSecond()
local LimitTime = cGetKQLimitSecond( Field )
if LimitTime ~= nil then
if 0 < RestLimitTime and RestLimitTime <= LimitTime then
--cTimer_Obj( Handle, RestLimitTime )
cShowKQTimerWithLife_Obj( Handle, RestLimitTime )
end
end
end
end
function TORIN_ROUTINE( Handle, MapIndex )
cExecCheck( "TORIN_ROUTINE" )
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if EventData["TorinList"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
EventData["TorinList"][Handle] = nil
return ReturnAI["END"]
end
return ReturnAI["CPP"]
end
function DLICH_ROUTINE( Handle, MapIndex )
cExecCheck( "DLICH_ROUTINE" )
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if EventData["DLichList"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
EventData["DLichList"][Handle] = nil
return ReturnAI["END"]
end
return ReturnAI["CPP"]
end
function EPIS_ROUTINE( Handle, MapIndex )
cExecCheck( "EPIS_ROUTINE" )
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if EventData["EpisList"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
EventData["EpisList"][Handle] = nil
return ReturnAI["END"]
end
return ReturnAI["CPP"]
end
function FARGELS_ROUTINE( Handle, MapIndex )
cExecCheck( "FARGELS_ROUTINE" )
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if EventData["FargelsList"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
EventData["FargelsList"][Handle] = nil
return ReturnAI["END"]
end
local Fargels = EventData["FargelsList"][Handle]
if Fargels == nil then
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
-- 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"] <= EventMemory["CurrentTime"] 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"] = EventMemory["CurrentTime"] + KeepTime
AbstateList[j]["CheckPrepareTime"] = EventMemory["CurrentTime"] + PrepareTime
AbstateList[j]["Enable"] = true
end
--cDebugLog( "cSkillBlast : " .. SkillIndex )
Fargels["SkillList"][i]["CheckTime"] = EventMemory["CurrentTime"] + Delay
end
end
if Func ~= nil then
Func( EventMemory, Handle, Fargels["SkillList"][i], FARGELS_SKILL[i] )
end
end
return ReturnAI["CPP"]
end
function GUARDIANS_ROUTINE( Handle, MapIndex )
cExecCheck( "GUARDIANS_ROUTINE" )
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if EventData["GuardiansList"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
cAIScriptSet( Handle )
EventData["GuardiansList"][Handle] = nil
return ReturnAI["END"]
end
return ReturnAI["CPP"]
end
function REGENOBJECT_ROUTINE( Handle, MapIndex )
cExecCheck( "REGENOBJECT_ROUTINE" )
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if EventData["RegenObjectList"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local RegenObject = EventData["RegenObjectList"][Handle]
if RegenObject == nil then
cAIScriptSet( Handle )
EventData["RegenObjectList"][Handle] = nil
return ReturnAI["END"]
end
local RegenObjectData = RegenObject["REGENOBJECT_DATA"]
local RegenInfoList = RegenObject["RegenInfoList"]
if cIsObjectDead( Handle ) then
if RegenObject["EventNumber"] ~= EventMemory["EventNumber"] then
cAIScriptSet( Handle )
EventData["RegenObjectList"][Handle] = nil
return ReturnAI["END"]
end
if RegenObjectData["REGEN_CONDITION"] == REGEN_CONDITION["REMOVE"] then
RegenObject["CheckCondition"] = true
else
cAIScriptSet( Handle )
EventData["RegenObjectList"][Handle] = nil
return ReturnAI["END"]
end
end
if RegenObject["EventNumber"] ~= EventMemory["EventNumber"] then
return ReturnAI["END"]
end
if RegenObject["CheckCondition"] == false then
if RegenObjectData["REGEN_CONDITION"] == REGEN_CONDITION["NORMAL"] then
RegenObject["CheckCondition"] = true
elseif RegenObjectData["REGEN_CONDITION"] == REGEN_CONDITION["SENSOR"] then
local FindPlayer = cObjectFind( Handle, RegenObjectData["RANGE"], ObjectType["Player"], "so_ObjectType" )
if FindPlayer ~= nil then
RegenObject["CheckCondition"] = true
end
end
return ReturnAI["END"]
end
-- Object Regen
for i = 1, #RegenInfoList do
local RegenInfo = RegenInfoList[i]
if -1 < RegenInfo["CheckTime"] and RegenInfo["CheckTime"] <= EventMemory["CurrentTime"] then
local RegenData = RegenInfo["REGEN_DATA"]
local RegenX = RegenData["X"]
local RegenY = RegenData["Y"]
if RegenX == -1 or RegenY == -1 then
RegenX, RegenY = cObjectLocate( Handle )
end
for j = 1, RegenData["MOBCOUNT"] do
if RegenInfo["CheckCount"] < RegenData["MAXCOUNT"] then
local Object = { }
Object["Handle"] = cMobRegen_Circle( EventMemory["MapIndex"], RegenData["MOBINDEX"],
RegenX, RegenY, RegenData["RADIUS"] )
if Object["Handle"] ~= nil then
Object["RegenObjectHandle"] = Handle
Object["RegenInfoIndex"] = i
RegenInfo["CheckCount"] = RegenInfo["CheckCount"] + 1
if EventMemory["EventData"]["ObjectList"] == nil then
EventMemory["EventData"]["ObjectList"] = { }
end
EventMemory["EventData"]["ObjectList"][Object["Handle"]] = Object
cSetAIScript( SCRIPT_MAIN, Object["Handle"] )
cAIScriptFunc( Object["Handle"], "Entrance", RegenData["ROUTINE"] )
end
end
end
if RegenData["REGEN_TYPE"] == REGEN_TYPE["ONESHOT"] then
RegenInfo["CheckTime"] = -1
elseif RegenData["REGEN_TYPE"] == REGEN_TYPE["REPEAT"] then
RegenInfo["CheckTime"] = EventMemory["CurrentTime"] + RegenData["DELAY"]
end
end
end
local RegenDialogData = RegenObjectData["REGEN_DIALOG_DATA"]
if RegenDialogData ~= nil then
for i = 1, #RegenDialogData do
local DialogData = RegenDialogData[i]
cMobDialog( EventMemory["MapIndex"], DialogData["FACECUT"], DialogData["FILENAME"], DialogData["INDEX"] )
end
end
if RegenObjectData["REGEN_CONDITION"] == REGEN_CONDITION["REMOVE"] then
cAIScriptSet( Handle )
EventData["RegenObjectList"][Handle] = nil
return ReturnAI["END"]
end
return ReturnAI["CPP"]
end
function OBJECT_ROUTINE( Handle, MapIndex )
cExecCheck( "OBJECT_ROUTINE" )
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if EventData["ObjectList"] == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
if cIsObjectDead( Handle ) then
local Object = EventData["ObjectList"][Handle]
if Object ~= nil then
local RegenObjectHandle = Object["RegenObjectHandle"]
local RegenInfoIndex = Object["RegenInfoIndex"]
local RegenObject = EventData["RegenObjectList"][RegenObjectHandle]
if RegenObject ~= nil then
local RegenInfo = RegenObject["RegenInfoList"][RegenInfoIndex]
if RegenInfo ~= nil then
RegenInfo["CheckCount"] = RegenInfo["CheckCount"] - 1
end
end
end
cAIScriptSet( Handle )
EventData["ObjectList"][Handle] = nil
return ReturnAI["END"]
end
return ReturnAI["CPP"]
end
function DOOR_ROUTINE( Handle, MapIndex )
cExecCheck( "DOOR_ROUTINE" )
local EventMemory = InstanceField[MapIndex]
if EventMemory == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local EventData = EventMemory["EventData"]
if EventData == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
local DoorList = EventData["DoorList"]
if DoorList == nil then
cAIScriptSet( Handle )
cNPCVanish( Handle )
return ReturnAI["END"]
end
return ReturnAI["CPP"]
end