184 lines
5.0 KiB
Plaintext
184 lines
5.0 KiB
Plaintext
|
|
autoImport ("Buff")
|
|
autoImport ("BuffGroup")
|
|
|
|
FunctionBuff = class("FunctionBuff")
|
|
|
|
function FunctionBuff.Me()
|
|
if nil == FunctionBuff.me then
|
|
FunctionBuff.me = FunctionBuff.new()
|
|
end
|
|
return FunctionBuff.me
|
|
end
|
|
|
|
function FunctionBuff:ctor()
|
|
self.cache_mybuff = {};
|
|
end
|
|
--九屏通知
|
|
function FunctionBuff:ServerSyncBuff(serverData)
|
|
local creatureID = serverData.guid
|
|
local creature = SceneCreatureProxy.FindCreature(creatureID)
|
|
|
|
local isMine = Game.Myself == creature;
|
|
|
|
if(creature) then
|
|
self:_ServerSyncAddBuff(creature,serverData.updates,isMine)
|
|
self:_ServerSyncRemoveBuff(creature,serverData.dels,isMine)
|
|
|
|
if(isMine) then
|
|
GameFacade.Instance:sendNotification(MyselfEvent.SyncBuffs)
|
|
EventManager.Me():PassEvent(MyselfEvent.BuffChange)
|
|
end
|
|
end
|
|
end
|
|
|
|
function FunctionBuff:_ServerSyncAddBuff(creature,ids,isMine)
|
|
local buff
|
|
for i=1,#ids do
|
|
buff = ids[i]
|
|
creature:AddBuff(buff.id,false,nil,buff.fromid,buff.layer,buff.level)
|
|
NSceneUserProxy.Instance:AddScenicBuff(creature.data.id,buff.id)
|
|
|
|
if(isMine)then
|
|
self.cache_mybuff[ buff.id ] = 1;
|
|
end
|
|
end
|
|
|
|
if(isMine)then
|
|
GameFacade.Instance:sendNotification(MyselfEvent.AddBuffs,ids)
|
|
EventManager.Me():PassEvent(MyselfEvent.BuffChange)
|
|
end
|
|
end
|
|
|
|
function FunctionBuff:_ServerSyncRemoveBuff(creature,ids,isMine)
|
|
for i=1,#ids do
|
|
creature:RemoveBuff(ids[i])
|
|
NSceneUserProxy.Instance:RemoveScenicBuff(creature.data.id,ids[i])
|
|
|
|
if(isMine)then
|
|
self.cache_mybuff[ ids[i] ] = nil;
|
|
end
|
|
end
|
|
|
|
if(isMine) then
|
|
GameFacade.Instance:sendNotification(MyselfEvent.RemoveBuffs,ids)
|
|
EventManager.Me():PassEvent(MyselfEvent.BuffChange)
|
|
end
|
|
end
|
|
|
|
local temp_t = {};
|
|
function FunctionBuff:ClearMyBuffs()
|
|
for id,_ in pairs(self.cache_mybuff)do
|
|
table.insert(temp_t, id);
|
|
end
|
|
|
|
if(#temp_t == 0)then
|
|
return;
|
|
end
|
|
|
|
self:_ServerSyncRemoveBuff(Game.Myself, temp_t, true);
|
|
|
|
TableUtility.ArrayClear(temp_t);
|
|
end
|
|
|
|
|
|
local OffEquip_BuffId = 106200;
|
|
local ProtectEquip_BuffId = 104140;
|
|
local BreakEquip_BuffId = 104160;
|
|
local EquipBuffs = {};
|
|
function FunctionBuff:UpdateOffingEquipBuff()
|
|
local offPoses = MyselfProxy.Instance:GetOffingEquipPoses();
|
|
if(offPoses and #offPoses>0)then
|
|
local maxtime;
|
|
for _,site in pairs(offPoses)do
|
|
local stateTime = MyselfProxy.Instance:GetEquipPos_StateTime(site);
|
|
if(stateTime.offendtime and stateTime.offendtime~=0)then
|
|
if(maxtime == nil or stateTime.offendtime > maxtime)then
|
|
maxtime = stateTime.offendtime;
|
|
end
|
|
end
|
|
|
|
end
|
|
if(self.offEquipBuff == nil)then
|
|
self.offEquipBuff = {};
|
|
else
|
|
TableUtility.TableClear(self.offEquipBuff);
|
|
end
|
|
self.offEquipBuff.isEquipBuff = true;
|
|
self.offEquipBuff.id = OffEquip_BuffId;
|
|
self.offEquipBuff.time = maxtime * 1000;
|
|
table.insert(EquipBuffs, self.offEquipBuff);
|
|
|
|
GameFacade.Instance:sendNotification(MyselfEvent.AddBuffs, EquipBuffs);
|
|
else
|
|
GameFacade.Instance:sendNotification(MyselfEvent.RemoveBuffs, { OffEquip_BuffId });
|
|
end
|
|
TableUtility.ArrayClear(EquipBuffs);
|
|
end
|
|
function FunctionBuff:UpdateProtectEquipBuff()
|
|
local protectPoses = MyselfProxy.Instance:GetProtectEquipPoses();
|
|
if(protectPoses and #protectPoses>0)then
|
|
local maxtime;
|
|
local protectalways = false;
|
|
for _,site in pairs(protectPoses)do
|
|
local stateTime = MyselfProxy.Instance:GetEquipPos_StateTime(site);
|
|
if(stateTime.protecttime and stateTime.protecttime~=0)then
|
|
if(maxtime == nil or stateTime.protecttime > maxtime)then
|
|
maxtime = stateTime.protecttime;
|
|
end
|
|
if(stateTime.protectalways > 0)then
|
|
protectalways = true;
|
|
end
|
|
end
|
|
end
|
|
if(self.protectEquipBuff == nil)then
|
|
self.protectEquipBuff = {};
|
|
else
|
|
TableUtility.TableClear(self.protectEquipBuff);
|
|
end
|
|
self.protectEquipBuff.isEquipBuff = true;
|
|
self.protectEquipBuff.id = ProtectEquip_BuffId;
|
|
|
|
if(protectalways == true)then
|
|
self.protectEquipBuff.isalways = true;
|
|
else
|
|
self.protectEquipBuff.isalways = false;
|
|
if(maxtime)then
|
|
self.protectEquipBuff.time = maxtime * 1000;
|
|
end
|
|
end
|
|
|
|
table.insert(EquipBuffs, self.protectEquipBuff);
|
|
|
|
GameFacade.Instance:sendNotification(MyselfEvent.AddBuffs, EquipBuffs);
|
|
else
|
|
table.insert(EquipBuffs, ProtectEquip_BuffId);
|
|
GameFacade.Instance:sendNotification(MyselfEvent.RemoveBuffs, EquipBuffs);
|
|
end
|
|
TableUtility.ArrayClear(EquipBuffs);
|
|
end
|
|
function FunctionBuff:UpdateBreakEquipBuff()
|
|
local breakInfos = BagProxy.Instance.roleEquip:GetBreakEquipSiteInfo();
|
|
if(breakInfos and #breakInfos > 0)then
|
|
local maxtime;
|
|
for k,v in pairs(breakInfos)do
|
|
if(maxtime == nil or v.breakendtime > maxtime)then
|
|
maxtime = v.breakendtime;
|
|
end
|
|
end
|
|
if(self.breakEquipBuff == nil)then
|
|
self.breakEquipBuff = {};
|
|
else
|
|
TableUtility.TableClear(self.breakEquipBuff);
|
|
end
|
|
self.breakEquipBuff.isEquipBuff = true;
|
|
self.breakEquipBuff.id = BreakEquip_BuffId;
|
|
self.breakEquipBuff.time = maxtime * 1000;
|
|
table.insert(EquipBuffs, self.breakEquipBuff);
|
|
GameFacade.Instance:sendNotification(MyselfEvent.AddBuffs, EquipBuffs);
|
|
else
|
|
GameFacade.Instance:sendNotification(MyselfEvent.RemoveBuffs, { BreakEquip_BuffId });
|
|
end
|
|
TableUtility.ArrayClear(EquipBuffs);
|
|
end
|