125 lines
4.3 KiB
Lua
125 lines
4.3 KiB
Lua
REGISTER_GOAL(GOAL_COMMON_LadderAct, "LadderAct")
|
|
function _GetId(animId, ai)
|
|
local isPlayerType = false
|
|
if not not ai:IsNpcPlayer() or ai:IsLocalPlayer() then
|
|
isPlayerType = true
|
|
end
|
|
local ret = animId
|
|
if isPlayerType == true then
|
|
if animId == 7210 then
|
|
ret = NPC_ATK_Ladder_10
|
|
elseif animId == 7211 then
|
|
ret = NPC_ATK_Ladder_11
|
|
elseif animId == 7212 then
|
|
ret = NPC_ATK_Ladder_12
|
|
elseif animId == 7213 then
|
|
ret = NPC_ATK_Ladder_13
|
|
elseif animId == 7220 then
|
|
ret = NPC_ATK_Ladder_20
|
|
elseif animId == 7221 then
|
|
ret = NPC_ATK_Ladder_21
|
|
elseif animId == 7222 then
|
|
ret = NPC_ATK_Ladder_22
|
|
elseif animId == 7223 then
|
|
ret = NPC_ATK_Ladder_23
|
|
end
|
|
end
|
|
return ret
|
|
end
|
|
|
|
local DEF_LADDER_ACT_STATE_InValid = -1
|
|
local DEF_LADDER_ACT_STATE_BeginBottom = 0
|
|
local DEF_LADDER_ACT_STATE_BeginTop = 1
|
|
local DEF_LADDER_ACT_STATE_RightHandUp_Up = 2
|
|
local DEF_LADDER_ACT_STATE_LeftHandUp_Up = 3
|
|
local DEF_LADDER_ACT_STATE_RightHandUp_Down = 4
|
|
local DEF_LADDER_ACT_STATE_LeftHandUp_Down = 5
|
|
local DEF_LADDER_ACT_STATE_Exit_Up = 6
|
|
local DEF_LADDER_ACT_STATE_Exit_Down = 7
|
|
local DEF_LADDER_ACT_STATE_RightHandUp_Wait = 8
|
|
local DEF_LADDER_ACT_STATE_LeftHandUp_Wait = 9
|
|
local DEF_LADDER_ACT_STATE_StaminaFall = 23
|
|
local DEF_LADDER_ACT_Up = 7210
|
|
local DEF_LADDER_ACT_Down = 7220
|
|
local DEF_LADDER_ACT_SlideDown = 7230
|
|
function LadderAct_Activate(ai, goal)
|
|
local behaviorNo = goal:GetParam(0)
|
|
local target = goal:GetParam(1)
|
|
local initDirMove = goal:GetParam(2)
|
|
local ladderDirMove = initDirMove
|
|
local ladderActState = ai:GetLadderActState(TARGET_SELF)
|
|
local animStartId = 0
|
|
local dmyStartId = ai:CalcGetNearestLadderActDmyIdByLadderObj()
|
|
if dmyStartId == 191 then
|
|
animStartId = _GetId(7210, ai)
|
|
else
|
|
animStartId = _GetId(7220, ai)
|
|
end
|
|
if ladderActState == DEF_LADDER_ACT_STATE_InValid then
|
|
if ai:IsChrAroundLadderEdge(2, dmyStartId) == false then
|
|
ai:SetPosAngBy1stNearObjDmyId(dmyStartId)
|
|
ai:SetAttackRequest(animStartId)
|
|
elseif dmyStartId ~= 192 and dmyStartId == 191 then
|
|
return GOAL_RESULT_Failed
|
|
end
|
|
end
|
|
return
|
|
end
|
|
|
|
DEF_LADDER_ACT_STATE_InValid = DEF_LADDER_ACT_STATE_RightHandUp_Wait
|
|
DEF_LADDER_ACT_STATE_InValid = DEF_LADDER_ACT_STATE_LeftHandUp_Wait
|
|
DEF_LADDER_ACT_STATE_InValid = DEF_LADDER_ACT_Up
|
|
DEF_LADDER_ACT_STATE_InValid = DEF_LADDER_ACT_Down
|
|
DEF_LADDER_ACT_STATE_InValid = DEF_LADDER_ACT_STATE_StaminaFall
|
|
function LadderAct_Update(ai, goal)
|
|
local behaviorNo = goal:GetParam(0)
|
|
local target = goal:GetParam(1)
|
|
if ai:LastPathFindingIsFailed() == false and ai:HasPathResult() == false then
|
|
ai:FollowPath(target, AI_DIR_TYPE_CENTER, 1.5, true, 0)
|
|
end
|
|
local ladderDirMove = ai:GetLadderDirMove(TARGET_ENE_0)
|
|
ai:DoEzAction(0, -1)
|
|
local ladderActState = ai:GetLadderActState(TARGET_SELF)
|
|
local isPassNextAnim = false
|
|
if ladderActState == DEF_LADDER_ACT_STATE_RightHandUp_Wait or ladderActState == DEF_LADDER_ACT_STATE_LeftHandUp_Wait then
|
|
isPassNextAnim = true
|
|
elseif not not ai:IsFinishAttack() or ai:IsEnableComboAttack() then
|
|
isPassNextAnim = true
|
|
end
|
|
if isPassNextAnim then
|
|
if ladderActState == DEF_LADDER_ACT_STATE_InValid then
|
|
return GOAL_RESULT_Success
|
|
elseif ladderDirMove ~= 0 then
|
|
if ladderDirMove == 1 then
|
|
ai:SetAttackRequest(_GetId(DEF_LADDER_ACT_Up, ai))
|
|
elseif ladderDirMove == -1 then
|
|
ai:SetAttackRequest(_GetId(DEF_LADDER_ACT_Down, ai))
|
|
end
|
|
end
|
|
end
|
|
goal:AddLifeParentSubGoal(0.3)
|
|
local ladderActState = ai:GetLadderActState(TARGET_SELF)
|
|
if ladderActState == DEF_LADDER_ACT_STATE_InValid then
|
|
return GOAL_RESULT_Success
|
|
elseif ladderActState == DEF_LADDER_ACT_STATE_StaminaFall then
|
|
return GOAL_RESULT_Failed
|
|
else
|
|
return GOAL_RESULT_Continue
|
|
end
|
|
end
|
|
|
|
function LadderAct_Terminate(ai, goal)
|
|
return
|
|
end
|
|
|
|
REGISTER_GOAL_NO_INTERUPT(GOAL_COMMON_LadderAct, true)
|
|
function LadderAct_Interupt(ai, goal)
|
|
if ai:IsInterupt(INTERUPT_Damaged) then
|
|
return false
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
|
|
return
|