166 lines
4.5 KiB
Lua
166 lines
4.5 KiB
Lua
|
require('Actor/ActorCommon')
|
||
|
local NpcActorProxy = require('Actor/Npc/NpcActorProxy')
|
||
|
local StoreKeeper04 = class("StoreKeeper04", NpcActorProxy)
|
||
|
|
||
|
StoreKeeper04.defaultAlias = "StoreKeeper04"
|
||
|
StoreKeeper04.pointID = 1
|
||
|
StoreKeeper04.currWeather = WeatherType.ClearSky
|
||
|
|
||
|
local StoreKeeper04Data =
|
||
|
{
|
||
|
BornPos = sceneData:GetDummyPoint(3, "StoreKeeper04Born").pos,
|
||
|
BornDir = sceneData:GetDummyPoint(3, "StoreKeeper04Born").rot,
|
||
|
HomePos = sceneData:GetDummyPoint(3, "StoreKeeper04Home").pos,
|
||
|
HomeDir = sceneData:GetDummyPoint(3, "StoreKeeper04Home").rot,
|
||
|
Pos01Pos = sceneData:GetDummyPoint(3, "StoreKeeper04Pos01").pos,
|
||
|
Pos02Pos = sceneData:GetDummyPoint(3, "StoreKeeper04Pos02").pos,
|
||
|
StorePos = sceneData:GetDummyPoint(3, "StoreKeeper04Store").pos,
|
||
|
StoreDir = sceneData:GetDummyPoint(3, "StoreKeeper04Store").rot,
|
||
|
ChatPos = sceneData:GetDummyPoint(3, "StoreKeeper04Chat").pos,
|
||
|
ChatDir = sceneData:GetDummyPoint(3, "StoreKeeper04Chat").rot,
|
||
|
ScaredPos = sceneData:GetDummyPoint(3, "NPCScaredPoint08").pos,
|
||
|
}
|
||
|
|
||
|
function StoreKeeper04:Start()
|
||
|
--print("start!StoreKeeper04")
|
||
|
self:StartDaily()
|
||
|
end
|
||
|
|
||
|
function StoreKeeper04:DoAppear()
|
||
|
self:ShowSelf()
|
||
|
self:PerformDither(true, 2)
|
||
|
end
|
||
|
|
||
|
function StoreKeeper04:DoDisappear()
|
||
|
self:PerformDither(false, 2, self.HideSelf)
|
||
|
end
|
||
|
|
||
|
function StoreKeeper04:InvokeOnResetFreeStyle(freeStyleType)
|
||
|
if freeStyleType == 361 or freeStyleType == 141 or freeStyleType == 142 then
|
||
|
self:StartDaily()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function StoreKeeper04:StartDaily()
|
||
|
--print("StoreKeeper04 StartDaily")
|
||
|
self:CallOnCollisionEnter(self.OnCollisionEnter)
|
||
|
self:RegisterSelfDayTime(self.StartDay)
|
||
|
self:RegisterSelfHour(self.HourBehave)
|
||
|
self:RegisterSelfNightTime(self.StartNight)
|
||
|
self:RegisterActorEvent(self.OnEvent)
|
||
|
if globalActor.isDay then
|
||
|
self:StartDay()
|
||
|
else
|
||
|
self:StartNight()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function StoreKeeper04:OnCollisionEnter(targetInfo)
|
||
|
if targetInfo.isSprint or targetInfo.isRun then
|
||
|
if targetInfo.isFromBack then
|
||
|
self:DoFreeStyleTask(42, true, self.StartDaily)
|
||
|
else
|
||
|
self:DoFreeStyleTask(71, true, self.StartDaily)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function StoreKeeper04:StartDay()
|
||
|
self:ClearFollowTask()
|
||
|
self:ShowSelf()
|
||
|
self:TurnTo(M.Euler2DirXZ(StoreKeeper04Data.BornDir))
|
||
|
self:PerformDither(true, 2, self.GoStore)
|
||
|
end
|
||
|
|
||
|
function StoreKeeper04:GoStore()
|
||
|
if self.pointID == 4 then
|
||
|
self:DoFreeStyle(331)
|
||
|
self:TurnTo(M.Euler2DirXZ(StoreKeeper04Data.StoreDir))
|
||
|
else
|
||
|
self:GoStoreRoute()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function StoreKeeper04:GoStoreRoute()
|
||
|
if self.pointID == 1 then
|
||
|
self:WalkToTask(StoreKeeper04Data.Pos01Pos, self.SelfPointUpdate, self.Standby)
|
||
|
elseif self.pointID == 2 then
|
||
|
self:WalkToTask(StoreKeeper04Data.Pos02Pos, self.SelfPointUpdate, self.Standby)
|
||
|
elseif self.pointID == 3 then
|
||
|
self:WalkToTask(StoreKeeper04Data.StorePos, self.SelfPointUpdate, self.Standby)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function StoreKeeper04:SelfPointUpdate()
|
||
|
if globalActor.isDay then
|
||
|
self.pointID = self.pointID + 1
|
||
|
self:GoStore()
|
||
|
else
|
||
|
self.pointID = self.pointID - 1
|
||
|
self:GoHome()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function StoreKeeper04:HourBehave(Hour)
|
||
|
if Hour == 10 or Hour == 14 then
|
||
|
self:CallDelay(1, self.DelayChat)
|
||
|
elseif Hour == 11 or Hour == 15 then
|
||
|
self:DoFreeStateTrigger()
|
||
|
self.pointID = 3
|
||
|
self:StartDaily()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function StoreKeeper04:DelayChat()
|
||
|
self:DoFreeStateTrigger()
|
||
|
self:WalkToTask(StoreKeeper04Data.ChatPos, self.Chat, self.Standby)
|
||
|
end
|
||
|
|
||
|
|
||
|
function StoreKeeper04:Chat()
|
||
|
self:DoFreeStyle(52)
|
||
|
self:TurnTo(M.Euler2DirXZ(StoreKeeper04Data.ChatDir))
|
||
|
end
|
||
|
|
||
|
function StoreKeeper04:StartNight()
|
||
|
self:ClearFollowTask()
|
||
|
self:DoFreeStateTrigger()
|
||
|
self:GoHome()
|
||
|
end
|
||
|
|
||
|
function StoreKeeper04:GoHome()
|
||
|
if self.pointID == 1 then
|
||
|
self:TurnTo(M.Euler2DirXZ(StoreKeeper04Data.HomeDir))
|
||
|
self:DoDisappear()
|
||
|
else
|
||
|
self:GoHomeRoute()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function StoreKeeper04:GoHomeRoute()
|
||
|
if self.pointID == 4 then
|
||
|
self:WalkToTask(StoreKeeper04Data.Pos02Pos, self.SelfPointUpdate, self.Standby)
|
||
|
elseif self.pointID == 3 then
|
||
|
self:WalkToTask(StoreKeeper04Data.Pos01Pos, self.SelfPointUpdate, self.Standby)
|
||
|
elseif self.pointID == 2 then
|
||
|
self:WalkToTask(StoreKeeper04Data.HomePos, self.SelfPointUpdate, self.Standby)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function StoreKeeper04:OnEvent(evt)
|
||
|
if evt.evtType == 35701 then
|
||
|
self:ClearAllTask()
|
||
|
self:ClearOnCollisionEnter(self.OnCollisionEnter)
|
||
|
self:UnregisterSelfDayTime(self.StartDay)
|
||
|
self:UnregisterSelfHour(self.HourBehave)
|
||
|
self:UnregisterSelfNightTime(self.StartNight)
|
||
|
self:UnregisterActorEvent(self.OnEvent)
|
||
|
self:DoAppear()
|
||
|
self:SetPos(StoreKeeper04Data.ScaredPos)
|
||
|
self:DoFreeStyle(362)
|
||
|
elseif evt.evtType == 35702 then
|
||
|
self:StartDaily()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return StoreKeeper04
|