PGRData/Script/matrix/xdlcfight/level/8000.lua

214 lines
8 KiB
Lua
Raw Normal View History

2024-09-01 20:49:41 +00:00
---万用关卡测试关
local XLevelPrototype = XDlcScriptManager.RegLevelScript(8000, "XLevelPrototype1")
local FuncSet = CS.StatusSyncFight.XFightScriptFuncs
local Tool = require("XDLCFight/Level/Common/XLevelTools")
local _cameraResRefTable = {
"MHWCam1",
"MHWCam0",
"TPSmode",
}
function XLevelPrototype.GetCameraResRefTable()
return _cameraResRefTable
end
---@param proxy StatusSyncFight.XScriptLuaProxy
function XLevelPrototype:Ctor(proxy)
self._proxy = proxy
--- 传送点配置
self._playerInTeleport = false
self._teleports = {
[100] = true,
[101] = true,
[102] = true,
} -- 用index来储存传送点id信息就能用id来查询免得写contain方法
self._inputBtnList = {}
--- 死区测试trigger
self._deathZonePlaceId = 1022
self._resetToCheckPointZonePlaceId = 1023
--- 开关
self.switches = {
{
--- 出生点附近的开关,测试虚拟相机的开关
placeId = 20,
agent = nil,
object = self,
func = self.SwitchVCam,
param = nil,
triggerTimes = -1,
},
{
--- 出生点附近的开关,测试虚拟相机瞄准场景物体
placeId = 28,
agent = nil,
object = self,
func = self.SwitchVCamAimSceneObject,
param = nil,
triggerTimes = -1,
},
}
--- 手动开关的虚拟相机的参数
self.VCamActive = false
self.VCamAimSceneObjectActive = false
end
function XLevelPrototype:Init()
self._proxy:RegisterSceneObjectTriggerEvent(1, 1)
self._vCamSceneObjPlaceId = 6
XLog.Debug("------------Level 11 start set npc ids for SceneObj 25")
self._localPlayerNpcId = FuncSet.GetLocalPlayerNpcId()
-- 注册虚拟相机属性
local testVCamAgent = XDlcScriptManager.GetSceneObjectScript(25) ---@type XSObjVCamAgent
testVCamAgent:SetCallBackBeforeActivated(function()
testVCamAgent:SetActorIds(0, -1, -1)
testVCamAgent:SetCallBackBeforeActivated(nil)
end)
self._proxy:RegisterNpcEvent(EScriptEvent.NpcCastSkill, self._localPlayerNpcId)
self._proxy:RegisterNpcEvent(EScriptEvent.NpcExitSkill, self._localPlayerNpcId)
for key, _ in pairs(self._teleports) do
self._proxy:RegisterSceneObjectTriggerEvent(key, 1) --注册传送门事件
end
self._proxy:RegisterSceneObjectTriggerEvent(self._deathZonePlaceId, 1) -- 注册死区试验场的死区
self._proxy:RegisterSceneObjectTriggerEvent(self._resetToCheckPointZonePlaceId, 1) -- 注册死区试验场的死区
self._switches = Tool.InitSwitch(self.switches) --配置开关
end
---@param dt number @ delta time
function XLevelPrototype:Update(dt)
self:TeleportCheck()
end
---@param eventType number
---@param eventArgs userdata
function XLevelPrototype:HandleEvent(eventType, eventArgs)
XLevelPrototype.Super.HandleEvent(self, eventType, eventArgs)
if eventType == EScriptEvent.SceneObjectTrigger then
--XLog.Debug("XLevelPrototype SceneObjectTriggerEvent:"
-- .. " TouchType " .. tostring(eventArgs.TouchType)
-- .. " SourceActorId " .. tostring(eventArgs.SourceActorId)
-- .. " SceneObjectId " .. tostring(eventArgs.SceneObjectId)
-- .. " TriggerId " .. tostring(eventArgs.TriggerId)
-- .. " TriggerState " .. tostring(eventArgs.TriggerState)
-- .. " Log自关卡"
--)
if eventArgs.SceneObjectId == self._vCamSceneObjPlaceId then
if eventArgs.TriggerState == ESceneObjectTriggerState.Enter then
FuncSet.ActivateVCam(eventArgs.SourceActorId, "MHWCam0", 0, 0, 0,
0, 7, -7, 0, 0, 0,
0, eventArgs.SourceActorId, 100, false);
elseif eventArgs.TriggerState == ESceneObjectTriggerState.Exit then
FuncSet.DeactivateVCam(eventArgs.SourceActorId, "MHWCam0", false);
end
elseif self._teleports[eventArgs.SceneObjectId] then
-- 触发传送门
if eventArgs.TriggerState == ESceneObjectTriggerState.Enter then
self._playerInTeleport = true
else
self._playerInTeleport = false
end
end
-- 死区重生
if eventArgs.SceneObjectId == self._deathZonePlaceId and FuncSet.IsPlayerNpc(eventArgs.SourceActorId) then
FuncSet.ResetNpcToSafePoint(eventArgs.SourceActorId)
end
-- 重生到检查点
if eventArgs.SceneObjectId == self._resetToCheckPointZonePlaceId and FuncSet.IsPlayerNpc(eventArgs.SourceActorId) then
FuncSet.ResetNpcToCheckPoint(eventArgs.SourceActorId)
XLog.Debug(11111111111111111)
end
elseif eventType == EScriptEvent.NpcCastSkill then
XLog.Debug(string.format("Level listen npc:%d cast skill:%d to target:%d", eventArgs.LauncherId, eventArgs.SkillId, eventArgs.TargetId))
elseif eventType == EScriptEvent.NpcExitSkill then
XLog.Debug(string.format("Level listen npc:%d exit skill:%d to target:%d", eventArgs.LauncherId, eventArgs.SkillId, eventArgs.TargetId))
end
end
function XLevelPrototype:TeleportCheck()
if self._playerInTeleport then
if FuncSet.IsKeyDown(ENpcOperationKey.Ball1) then
table.insert(self._inputBtnList, 1)
XLog.Debug("Input Password 1")
elseif FuncSet.IsKeyDown(ENpcOperationKey.Ball2) then
table.insert(self._inputBtnList, 2)
XLog.Debug("Input Password 2")
elseif FuncSet.IsKeyDown(ENpcOperationKey.Ball3) then
table.insert(self._inputBtnList, 3)
XLog.Debug("Input Password 3")
elseif FuncSet.IsKeyDown(ENpcOperationKey.Ball4) then
table.insert(self._inputBtnList, 4)
XLog.Debug("Input Password 4")
elseif FuncSet.IsKeyDown(ENpcOperationKey.Ball5) then
table.insert(self._inputBtnList, 5)
XLog.Debug("Input Password 5")
elseif FuncSet.IsKeyDown(ENpcOperationKey.Ball6) then
table.insert(self._inputBtnList, 6)
XLog.Debug("Input Password 6")
elseif FuncSet.IsKeyDown(ENpcOperationKey.Ball7) then
table.insert(self._inputBtnList, 7)
XLog.Debug("Input Password 7")
elseif FuncSet.IsKeyDown(ENpcOperationKey.Ball8) then
table.insert(self._inputBtnList, 8)
XLog.Debug("Input Password 8")
elseif FuncSet.IsKeyDown(ENpcOperationKey.Ball9) then
table.insert(self._inputBtnList, 9)
XLog.Debug("Input Password 9")
elseif FuncSet.IsKeyDown(ENpcOperationKey.Ball10) then
table.insert(self._inputBtnList, 0)
XLog.Debug("Input Password 0")
end
if FuncSet.IsKeyDown(ENpcOperationKey.Attack) then
self:PasswordCheck()
end
end
end
---检查输入的密码,传送到对应的传送点
function XLevelPrototype:PasswordCheck()
local result = tonumber(table.concat(self._inputBtnList))
XLog.Debug(result)
self._inputBtnList = {}
if self._teleports[result] then
local resultPosition = FuncSet.GetSceneObjectPosition(result)
FuncSet.SetNpcPosition(self._localPlayerNpcId, resultPosition)
end
end
function XLevelPrototype:SwitchVCam()
if self.VCamActive then
FuncSet.DeactivateVCam(self._localPlayerNpcId,"TPSmode",true)
else
FuncSet.ActivateVCam(self._localPlayerNpcId,"TPSmode",1,1,0,0,0,0,0,0,0,self._localPlayerNpcId,self._localPlayerNpcId,100,true)
end
self.VCamActive = not self.VCamActive
end
function XLevelPrototype:SwitchVCamAimSceneObject()
local uuid = FuncSet.GetSceneObjectUUID(19)
if self.VCamAimSceneObjectActive then
FuncSet.DeactivateVCam(self._localPlayerNpcId,"TPSmode",true)
else
FuncSet.ActivateVCam(self._localPlayerNpcId,"TPSmode",1,1,0,0,0,0,0,0,0,self._localPlayerNpcId,uuid,100,true)
end
self.VCamAimSceneObjectActive = not self.VCamAimSceneObjectActive
end
function XLevelPrototype:Terminate()
end
return XLevelPrototype