2025-06-04 05:02:57 +08:00

147 lines
4.0 KiB
Plaintext
Raw Permalink 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.

autoImport("SceneObjectProxy")
autoImport("SceneDropItem")
SceneItemProxy = class('SceneItemProxy',SceneObjectProxy)
SceneItemProxy.Instance = nil;
SceneItemProxy.NAME = "SceneItemProxy"
--場景玩家(可見玩家)數據管理,新增、刪除、查詢玩家
function SceneItemProxy:ctor(proxyName, data)
self.proxyName = proxyName or SceneItemProxy.NAME
self.userMap = {}
self.addMode = SceneObjectProxy.AddMode.Normal
if(SceneItemProxy.Instance == nil) then
SceneItemProxy.Instance = self
end
self:InitConfig()
self.tmp = {}
self.tmpItemData = {}
self.maxTime = GameConfig.SceneDropItem.disappeartime * 1000 * 1.5
self.poringFightMaxTime = 5 * 60 * 1000
TimeTickManager.Me():CreateTick(0,2000,self.Tick,self)
end
function SceneItemProxy:Tick(deltaTime)
local isPoringFight = Game.MapManager and Game.MapManager:IsPVPMode_PoringFight() or false
for k,v in pairs(self.tmp)do
v = v + deltaTime
self.tmp[k] = v
if(v>=self.maxTime) then
if(not isPoringFight or v>=self.poringFightMaxTime) then
local item = self.userMap[k]
if(item~=nil) then
-- Debug.LogFormat("<color=red> 掉落物超過30秒客戶端主動刪除容錯 {0} </color>",k)
self:SetRemoveFlag(k)
self.tmpItemData.itemguid = item.id
GameFacade.Instance:sendNotification(ServiceEvent.MapPickupItem, self.tmpItemData)
else
self.tmp[k] = nil
end
end
end
end
end
function SceneItemProxy:InitConfig()
self.typeConfig = {}
for k,v in pairs(GameConfig.SceneDropItem) do
if(type(v)=="table") then
local types = v.Types
if(types~=nil) then
for i=1,#types do
self.typeConfig[types[i]] = v
end
end
end
end
end
function SceneItemProxy:Add(data)
local item = self.userMap[data.guid]
if(item==nil) then
local staticData = Table_Item[data.id]
if(not staticData) then
error(string.format("伺服器要求新增道具%s,配置未找到",data.id))
end
item = SceneDropItem.CreateAsTable()
self.tmp[data.guid] = 0
item:ResetData(data.guid,staticData,Table_Equip[data.id],data.time,data.pos,data.owners,self.typeConfig[staticData.Type],data.sourceid, data.refinelv)
-- item = SceneDropItem.new(data.guid,staticData,Table_Equip[data.id],data.time,data.pos,data.owners,self.typeConfig[staticData.Type],data.sourceid)
if(#data.owners==0 or (Game.Myself~=nil and TableUtil.ArrayIndexOf(data.owners,Game.Myself.data.id)>0)) then
item.iCanPickUp = true
end
self.userMap[data.guid] = item
else
item = nil
end
if(item and FunctionPurify.Me():MonsterNeedPurify(item.sourceID)) then
FunctionPurify.Me():AddDrops(item)
item = nil
end
return item
end
function SceneItemProxy:PureAddSome(datas)
local items = {}
local item
for i=1,#datas do
item = self:Add(datas[i])
if(item~=nil) then
items[#items+1] = item
end
end
return items
-- print("SceneDropItemProxy PureAddSome")
end
function SceneItemProxy:DropItems(datas)
local items = self:AddSome(datas)
FunctionSceneItemCommand.Me():DropItems(items)
end
function SceneItemProxy:RefreshAdd(datas)
end
function SceneItemProxy:Remove(guid)
local item = self.userMap[guid]
if(item ~=nil) then
item:DestroyUI()
self.userMap[guid] = nil
end
self.tmp[guid] = nil
return item
end
function SceneItemProxy:SetRemoveFlags(guids)
for i=1,#guids do
self:SetRemoveFlag(guids[i])
end
-- FunctionSceneItemCommand.Me():SetRemoveFlags(guids)
end
function SceneItemProxy:SetRemoveFlag(guid)
if(self:Remove(guid)~=nil) then
-- print("remove item:"..guid)
FunctionSceneItemCommand.Me():SetRemoveFlag(guid)
end
-- FunctionSceneItemCommand.Me():SetRemoveFlags(guids)
end
function SceneItemProxy:RemoveSome(guids)
-- local items = SceneDropItemProxy.super.RemoveSome(self,guids)
-- DropSceneItemCommand.Me():RemoveItems(items)
end
function SceneItemProxy:Clear()
-- local items = {}
-- for _, o in pairs(self.userMap) do
-- o:Destroy()
-- items[#items+1] = o
-- end
self.tmp = {}
self.userMap = {}
FunctionSceneItemCommand.Me():Clear()
-- GameFacade.Instance:sendNotification(SceneUserEvent.SceneRemoveRoles,roles)
end