PGRData/Script/matrix/xdlcfight/level/8000.lua
2024-09-01 22:49:41 +02:00

214 lines
No EOL
8 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---万用关卡测试关
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