GSServer-CBT/soggy_resources/lua/Actor/Npc/JohnDoe04.lua

171 lines
4.6 KiB
Lua
Raw Permalink Normal View History

2022-11-21 11:30:31 +03:00
require('Actor/ActorCommon')
local NpcActorProxy = require('Actor/Npc/NpcActorProxy')
local JohnDoe04 = class("JohnDoe04", NpcActorProxy)
JohnDoe04.defaultAlias = "JohnDoe04"
JohnDoe04.pointID = 1
JohnDoe04.currWeather = WeatherType.ClearSky
local JohnDoe04Data =
{
BornPos = sceneData:GetDummyPoint(3, "JohnDoe04Born").pos,
BornDir = sceneData:GetDummyPoint(3, "JohnDoe04Born").rot,
HomePos = sceneData:GetDummyPoint(3, "JohnDoe04Home").pos,
HomeDir = sceneData:GetDummyPoint(3, "JohnDoe04Home").rot,
Pos01Pos = sceneData:GetDummyPoint(3, "JohnDoe04Pos01").pos,
Pos01Dir = sceneData:GetDummyPoint(3, "JohnDoe04Pos01").rot,
Pos02Pos = sceneData:GetDummyPoint(3, "JohnDoe04Pos02").pos,
Pos02Dir = sceneData:GetDummyPoint(3, "JohnDoe04Pos02").rot,
Pos03Pos = sceneData:GetDummyPoint(3, "JohnDoe04Pos03").pos,
Pos03Dir = sceneData:GetDummyPoint(3, "JohnDoe04Pos03").rot,
Pos04Pos = sceneData:GetDummyPoint(3, "JohnDoe04Pos04").pos,
Pos04Dir = sceneData:GetDummyPoint(3, "JohnDoe04Pos04").rot,
ScaredPos = sceneData:GetDummyPoint(3, "NPCScaredPoint04").pos,
}
function JohnDoe04:Start()
--print("start!JohnDoe04")
self:StartDaily()
end
function JohnDoe04:DoAppear()
self:ShowSelf()
self:PerformDither(true, 2)
end
function JohnDoe04:DoDisappear()
self:PerformDither(false, 2, self.HideSelf)
end
function JohnDoe04:InvokeOnResetFreeStyle(freeStyleType)
if freeStyleType == 361 or freeStyleType == 141 or freeStyleType == 142 then
self:StartDaily()
end
end
function JohnDoe04:StartDaily()
--print("JohnDoe04 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 JohnDoe04: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 JohnDoe04:StartDay()
self:ClearFollowTask()
self:ShowSelf()
self:TurnTo(M.Euler2DirXZ(JohnDoe04Data.BornDir))
self:PerformDither(true, 2, self.GoChat)
end
function JohnDoe04:GoChat()
if self.pointID == 1 then
self:WalkToTask(JohnDoe04Data.Pos01Pos, self.SelfPointUpdate, self.Standby)
elseif self.pointID == 2 then
self:WalkToTask(JohnDoe04Data.Pos02Pos, self.Chat, self.Standby)
elseif self.pointID == 3 then
self:WalkToTask(JohnDoe04Data.Pos03Pos, self.Chat, self.Standby)
elseif self.pointID == 4 then
self:WalkToTask(JohnDoe04Data.Pos04Pos, self.Chat, self.Standby)
end
end
function JohnDoe04:SelfPointUpdate()
if globalActor.isDay then
self.pointID = self.pointID + 1
self:GoChat()
else
self.pointID = self.pointID - 1
self:GoHome()
end
end
function JohnDoe04:Chat()
if self.pointID < 2 then
self:GoChat()
elseif self.pointID == 2 then
self:DoFreeStyle(51)
self:TurnTo(M.Euler2DirXZ(JohnDoe04Data.Pos02Dir))
elseif self.pointID == 3 then
self:DoFreeStyle(51)
self:TurnTo(M.Euler2DirXZ(JohnDoe04Data.Pos03Dir))
elseif self.pointID == 4 then
self:DoFreeStyle(51)
self:TurnTo(M.Euler2DirXZ(JohnDoe04Data.Pos04Dir))
end
end
function JohnDoe04:HourBehave(Hour)
if Hour == 9 or Hour == 12 or Hour == 15 then
self:DoFreeStateTrigger()
self.pointID = 3
self:GoChat()
elseif Hour == 10 or Hour == 13 or Hour == 16 then
self:DoFreeStateTrigger()
self.pointID = 4
self:GoChat()
elseif Hour == 11 or Hour == 14 or Hour == 17 then
self:DoFreeStateTrigger()
self.pointID = 2
self:GoChat()
end
end
function JohnDoe04:StartNight()
self:ClearFollowTask()
self:DoFreeStateTrigger()
self:GoHome()
end
function JohnDoe04:GoHome()
if self.pointID == 1 then
self:TurnTo(M.Euler2DirXZ(JohnDoe04Data.HomeDir))
self:PerformDither(false, 2, self.HideSelf)
else
self:GoHomeRoute()
end
end
function JohnDoe04:GoHomeRoute()
if self.pointID > 2 then
self.pointID = 3
self:WalkToTask(JohnDoe04Data.Pos01Pos, self.SelfPointUpdate, self.Standby)
elseif self.pointID == 2 then
self:WalkToTask(JohnDoe04Data.HomePos, self.SelfPointUpdate, self.Standby)
end
end
function JohnDoe04: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(JohnDoe04Data.ScaredPos)
self:DoFreeStyle(362)
elseif evt.evtType == 35702 then
self:StartDaily()
end
end
return JohnDoe04