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

219 lines
6.2 KiB
Plaintext
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.

autoImport("SceneCreatureProxy")
NSceneUserProxy = class('NSceneUserProxy', SceneCreatureProxy)
NSceneUserProxy.Instance = nil;
NSceneUserProxy.NAME = "NSceneUserProxy"
-- autoImport("Table_RoleData")
function NSceneUserProxy:ctor(proxyName, data)
self:CountClear()
self.userMap = {}
if(NSceneUserProxy.Instance == nil) then
NSceneUserProxy.Instance = self
end
self.proxyName = proxyName or NSceneUserProxy.NAME
if(Game and Game.LogicManager_Creature) then
Game.LogicManager_Creature:SetSceneUserProxy(self)
end
end
function NSceneUserProxy:FindOtherRole(guid)
--臨時不處理玩家自己的新增
-- if(Player.Me.activeRoleInfo.ID == guid) then
if(Game.Myself and Game.Myself.data and Game.Myself.data.id == guid) then
return nil
end
return self:Find(guid)
end
function NSceneUserProxy:Find(guid)
if(Game.Myself and Game.Myself.data and Game.Myself.data.id == guid) then
return Game.Myself
end
return self.userMap[guid]
end
function NSceneUserProxy:SyncMove(data)
local role = self:FindOtherRole(data.charid)
if nil ~= role then
role:Server_MoveToXYZCmd(data.pos.x,data.pos.y,data.pos.z)
return true
end
return false
end
function NSceneUserProxy:SyncServerSkill(data)
if nil ~= data.petid and 0 ~= data.petid then
if 0 < data.petid then
return self:SyncServerPetSkill(data)
else
if not self:NotifyUseSkill(data) then
return NSceneUserProxy.super.SyncServerSkill(self,data)
end
end
else
-- if(data.charid ==Game.Myself.data.id) then
-- local skillConfig = Table_Skill[data.skillID]
-- if(skillConfig.SkillType == GameConfig.SkillType.Purify.type) then
-- FunctionPurify.Me():StartPurifyByServerSkill(data)
-- end
-- return true
-- else
-- return NSceneUserProxy.super.SyncServerSkill(self,data)
-- end
return NSceneUserProxy.super.SyncServerSkill(self,data)
end
end
function NSceneUserProxy:Add(data,classRef)
local role = nil
if Game.Myself.data.id == data.guid then
-- helplog("設定自己的稱號: ",tostring(data.achievetitle))
Game.Myself.data:SetAchievementtitle(data.achievetitle)
role = Game.Myself
--是我自己
role.data:SetTeamID(data.teamid)
-- self:HandleConnectRole(data.lines)
role:InitBuffs(data,false)
GameFacade.Instance:sendNotification(MyselfEvent.AddBuffs,data.buffs)
role:Server_SetUserDatas(data.datas,true)
else
role = self:Find(data.guid)
if nil ~= role then
return role
end
role = NPlayer.CreateAsTable(data)
self.userMap[data.guid] = role
self:CountPlus()
if(data.dest ~= nil and not PosUtil.IsZero(data.dest)) then
role:Server_MoveToXYZCmd(data.dest.x,data.dest.y,data.dest.z,1000)
end
end
self:HandleAddScenicBuffs(data)
local spEffectDatas = data.speffectdata
if nil ~= spEffectDatas then
for i=1, #spEffectDatas do
role:Server_AddSpEffect(spEffectDatas[i])
end
end
SceneAINpcProxy.Instance:AddHandNpc(role, data.handnpc , data.pos)
SceneAINpcProxy.Instance:AddExpressNpc(role, data.givenpcdatas, data.pos)
return role
end
local tmpRoles = {}
function NSceneUserProxy:PureAddSome(datas)
for i = 1, #datas do
if datas[i] ~= nil then
local role = self:Add(datas[i])
if(role ~=nil) then
tmpRoles[#tmpRoles+1] = role
-- table.insert(roles,role)
end
end
end
GameFacade.Instance:sendNotification(SceneUserEvent.SceneAddRoles,tmpRoles)
EventManager.Me():PassEvent(SceneUserEvent.SceneAddRoles, tmpRoles)
SceneCarrierProxy.Instance:PureAddSome(datas)
TableUtility.TableClear(tmpRoles)
end
--attentionarray 需要在使用完畢清空內容
function NSceneUserProxy:FindCreateByGuild(guild,array)
TableUtility.TableClear(array)
for k,user in pairs(self.userMap) do
local guildData = user.data:GetGuildData()
if(guildData and guildData.id == guild)then
array[#array+1] = user
end
end
if(Game.Myself.data and Game.Myself.data:GetGuildData())then
local selfData = Game.Myself.data:GetGuildData()
if(selfData and selfData.id == guild)then
array[#array+1] = Game.Myself
end
end
end
function NSceneUserProxy:RemoveSome(guids)
local roles = NSceneUserProxy.super.RemoveSome(self,guids)
if(roles and #roles >0) then
GameFacade.Instance:sendNotification(SceneUserEvent.SceneRemoveRoles,roles)
EventManager.Me():PassEvent(SceneUserEvent.SceneRemoveRoles, roles)
self:HandleRemoveScenicBuffs(roles)
end
end
local tempPos = LuaVector3.zero
function NSceneUserProxy:FindNearUsers(position,distance,filter)
tempPos:Set(position[1],position[2],position[3])
local list = {}
for k,user in pairs(self.userMap) do
if nil == filter or filter(user) then
local dist = LuaVector3.Distance(user:GetPosition(),tempPos)
if distance >= dist then
table.insert(list,user)
end
end
end
return list
end
function NSceneUserProxy:Clear()
print("清空場景玩家")
local clears = NSceneUserProxy.super.Clear(self)
if(clears and #clears >0) then
GameFacade.Instance:sendNotification(SceneUserEvent.SceneRemoveRoles,clears)
EventManager.Me():PassEvent(SceneUserEvent.SceneRemoveRoles, clears)
end
end
function NSceneUserProxy:AddScenicBuff(guid,buffId)
local buffData = Table_Buffer[buffId]
if(buffData and buffData.BuffEffect.type == "Scenery")then
local data = FunctionScenicSpot.Me():AddCreatureScenicSpot(guid,buffData.BuffEffect.scenic)
if(data)then
GameFacade.Instance:sendNotification(MiniMapEvent.CreatureScenicAdd,{data})
end
end
end
local tempArray = {}
function NSceneUserProxy:HandleAddScenicBuffs(serverData)
TableUtility.ArrayClear(tempArray)
local buffDatas = serverData.buffs
if(buffDatas and #buffDatas>0) then
for i=1,#buffDatas do
local scenic = self:AddScenicBuff(serverData.guid,buffDatas[i].id)
if(scenic)then
tempArray[#tempArray+1] = scenic
end
end
end
end
function NSceneUserProxy:RemoveScenicBuff(guid,buffId)
local ssId = nil
if(buffId)then
local buffData = Table_Buffer[buffId]
if(buffData and buffData.BuffEffect.type == "Scenery")then
ssId = buffData.BuffEffect.scenic
FunctionScenicSpot.Me():RemoveCreatureScenicSpot(guid,ssId)
end
end
-- GameFacade.Instance:sendNotification(AdventureDataEvent.SceneItemsUpdate,ssId)
end
function NSceneUserProxy:HandleRemoveScenicBuffs(guids)
for i=1,#guids do
-- self:RemoveScenicBuff(guids[i])
FunctionScenicSpot.Me():RemoveCreatureScenicSpot(guids[i])
end
end