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
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
|
|
|