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