ro-table/Asstes/Resources/Script/FrameWork/Proxy/SceneTriggerProxy.txt
2025-06-04 05:02:57 +08:00

132 lines
3.5 KiB
Plaintext

autoImport("SceneObjectProxy")
SceneTriggerProxy = class('SceneTriggerProxy', SceneObjectProxy)
SceneTriggerProxy.Instance = nil;
SceneTriggerProxy.NAME = "SceneTriggerProxy"
-- autoImport("Table_RoleData")
function SceneTriggerProxy:ctor(proxyName, data)
self:Reset()
self.addMode = SceneObjectProxy.AddMode.Normal
self.proxyName = proxyName or SceneTriggerProxy.NAME
SceneTriggerProxy.Instance = self
if data ~= nil then
self:setData(data)
end
self.typeFunc = {}
self.typeFunc[SceneMap_pb.EACTTYPE_PURIFY] = self.SpawnPurify
self.typeFunc[SceneMap_pb.EACTTYPE_SEAL] = self.RepairSeal;
self.typeFunc[SceneMap_pb.EACTTYPE_SCENEEVENT or 3] = self.SceneEvent;
self.typeFunc[AreaTrigger_Common_ClientType.GvgDroiyan_FightForArea] = self.GvgDroiyan_FightForArea_Handle
end
function SceneTriggerProxy:Reset()
self.userMap = {}
end
function SceneTriggerProxy:onRegister()
end
function SceneTriggerProxy:onRemove()
end
function SceneTriggerProxy:PureAddSome(datas)
printRed("PureAddSome");
for i=1,#datas do
self:Add(datas[i])
end
end
function SceneTriggerProxy:Add(data)
if(self:Find(data.id)==nil) then
local func = self.typeFunc[data.type]
if(func) then
local trigger = func(self,data)
self.userMap[trigger.id] = trigger
Game.AreaTrigger_Common:AddCheck(trigger)
-- print("add trigger range:",data.range)
end
end
end
-- 凈化
function SceneTriggerProxy:SpawnPurify(data)
local skillID = 20001001
local pos = PosUtil.DevideVector3( data.pos.x,data.pos.y,data.pos.z )
local skill = SkillProxy.Instance:GetLearnedSkillWithSameSort(skillID)
FunctionPurify.Me():StartDarkCover(data.masterid)
local result = ReusableTable.CreateTable()
result.id = data.id
result.pos = pos
result.reachDis=data.range
result.type = data.type
result.serverData = data
result.data = {id=skill.id, dis = data.range, skill = skillID}
result.params = {data.actvalue}
result.master = data.masterid
return result;
end
function SceneTriggerProxy:RepairSeal(data)
local pos = PosUtil.DevideVector3( data.pos.x,data.pos.y,data.pos.z )
local result = ReusableTable.CreateTable()
result.id = data.id
result.pos = pos
result.reachDis = data.range
result.type = data.type
result.serverData = data
return result;
end
function SceneTriggerProxy:SceneEvent(data)
local pos = PosUtil.DevideVector3( data.pos.x, data.pos.y, data.pos.z )
local result = ReusableTable.CreateTable()
result.id = data.id
result.pos = LuaVector3(data.pos.x, data.pos.y, data.pos.z);
result.reachDis = data.range
result.type = data.type
result.serverData = data
return result;
end
function SceneTriggerProxy:GvgDroiyan_FightForArea_Handle(data)
local pos = PosUtil.DevideVector3( data.pos.x, data.pos.y, data.pos.z )
local result = ReusableTable.CreateTable()
result.id = data.id
result.pos = LuaVector3(data.pos.x, data.pos.y, data.pos.z);
result.reachDis = data.range
result.type = data.type
result.serverData = data
return result;
end
function SceneTriggerProxy:Remove(guid)
local trigger = self:Find(guid)
if(trigger~=nil) then
print("移除mapact",guid)
self.userMap[guid] = nil
local areaTrigger = Game.AreaTrigger_Common
if(areaTrigger) then
local removed = areaTrigger:RemoveCheck(guid)
if(removed) then
ReusableTable.DestroyAndClearTable(removed)
end
end
end
end
function SceneTriggerProxy:Clear()
local areaTrigger = Game.AreaTrigger_Common
if(areaTrigger) then
local removed
for k,v in pairs(self.userMap) do
removed = areaTrigger:RemoveCheck(k)
if(removed) then
ReusableTable.DestroyAndClearTable(removed)
end
end
end
self:Reset()
end