168 lines
3.6 KiB
Plaintext
168 lines
3.6 KiB
Plaintext
autoImport("SceneCreatureProxy")
|
||
SceneAINpcProxy = class('SceneAINpcProxy', SceneCreatureProxy)
|
||
|
||
SceneAINpcProxy.Instance = nil;
|
||
|
||
SceneAINpcProxy.NAME = "SceneAINpcProxy"
|
||
|
||
--AI npc(艾娃)數據管理,新增、刪除、查詢npc
|
||
function SceneAINpcProxy:ctor(proxyName, data)
|
||
self.proxyName = proxyName or SceneAINpcProxy.NAME
|
||
self.userMap = {}
|
||
if(SceneAINpcProxy.Instance == nil) then
|
||
SceneAINpcProxy.Instance = self
|
||
end
|
||
|
||
self.delayRemoveDuration = {}
|
||
self.delayRemoveDuration[NpcData.NpcDetailedType.NPC] = GameConfig.MonsterBodyDisappear.NPC
|
||
end
|
||
|
||
function SceneAINpcProxy:Find(guid)
|
||
return self.userMap[guid]
|
||
end
|
||
|
||
function SceneAINpcProxy:Add(data, classRef)
|
||
local npc = self:Find(data.guid)
|
||
if npc ~= nil then
|
||
return npc
|
||
end
|
||
|
||
if classRef then
|
||
npc = classRef.CreateAsTable(data)
|
||
self:PureAdd(npc.data.id, npc)
|
||
end
|
||
|
||
return npc
|
||
end
|
||
|
||
function SceneAINpcProxy:PureAdd(id, creature)
|
||
self.userMap[id] = creature
|
||
end
|
||
|
||
function SceneAINpcProxy:Remove(guid, fade)
|
||
if self.userMap[guid] then
|
||
self.userMap[guid]:Destroy()
|
||
self:PureRemove(guid)
|
||
|
||
return true
|
||
end
|
||
|
||
return false
|
||
end
|
||
|
||
function SceneAINpcProxy:PureRemove(guid)
|
||
self.userMap[guid] = nil
|
||
end
|
||
|
||
function SceneAINpcProxy:Die(guid, npc)
|
||
if npc == nil then
|
||
npc = self:Find(guid)
|
||
end
|
||
if npc then
|
||
npc:Server_PlayActionCmd(Asset_Role.ActionName.Die,nil,false,false)
|
||
local delay = self.delayRemoveDuration[npc.data.detailedType]
|
||
if delay==nil then
|
||
delay = 1600
|
||
end
|
||
npc:SetDelayRemove(delay/1000)
|
||
end
|
||
return npc
|
||
end
|
||
|
||
function SceneAINpcProxy:Clear()
|
||
self:ChangeAddMode(SceneCreatureProxy.AddMode.Normal)
|
||
self:ClearNpc()
|
||
SceneAINpcProxy.super.Clear(self)
|
||
end
|
||
|
||
function SceneAINpcProxy:ClearNpc()
|
||
for k,v in pairs(self.userMap) do
|
||
v:Destroy()
|
||
self:PureRemove(k)
|
||
end
|
||
end
|
||
|
||
--艾娃(新增/刪除)
|
||
function SceneAINpcProxy:SetHandNpc(data)
|
||
if data.userid then
|
||
local user = NSceneUserProxy.Instance:Find(data.userid)
|
||
if user ~= nil then
|
||
local serverData = data.data
|
||
if data.ishand then
|
||
local npc = self:Find(serverData.guid)
|
||
if npc then
|
||
npc:ResetData(serverData)
|
||
else
|
||
npc = SceneAINpcProxy.Instance:Add( serverData, NHandNpc)
|
||
user:AddHandNpc( npc.data.id )
|
||
end
|
||
|
||
npc:SetMaster(user)
|
||
npc:SetPos(user)
|
||
else
|
||
user:RemoveHandNpc()
|
||
self:Remove( serverData.guid )
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
--九屏新增艾娃
|
||
function SceneAINpcProxy:AddHandNpc(role,handnpcData,serverpos)
|
||
if handnpcData.body ~= 0 then
|
||
local npc = self:Find(handnpcData.guid)
|
||
if npc then
|
||
npc:ResetData(handnpcData)
|
||
else
|
||
npc = SceneAINpcProxy.Instance:Add( handnpcData, NHandNpc)
|
||
role:AddHandNpc( npc.data.id )
|
||
end
|
||
|
||
npc:SetMaster(role)
|
||
npc:SetPos(role, serverpos)
|
||
end
|
||
end
|
||
|
||
--薑餅人(新增/刪除)
|
||
function SceneAINpcProxy:SetExpressNpc(data)
|
||
if data.userid then
|
||
local user = NSceneUserProxy.Instance:Find(data.userid)
|
||
if user ~= nil then
|
||
local id = data.data.guid
|
||
if data.isadd then
|
||
if not user:IsExpressNpc(id) then
|
||
local npc = self:Add( data.data, NExpressNpc)
|
||
if npc then
|
||
npc:SetMaster(user)
|
||
npc:SetPos(user, data.bornpos)
|
||
|
||
user:AddExpressNpc(id)
|
||
end
|
||
end
|
||
else
|
||
self:Die(id)
|
||
|
||
if id == FunctionVisitNpc.Me():GetTargetId() then
|
||
self:sendNotification(UIEvent.CloseUI, UIViewType.DialogLayer)
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
--九屏新增薑餅人
|
||
function SceneAINpcProxy:AddExpressNpc(role,expressnpcDatas,serverpos)
|
||
if expressnpcDatas and #expressnpcDatas > 0 then
|
||
role:ClearExpressNpc()
|
||
|
||
for i=1,#expressnpcDatas do
|
||
local npc = self:Add( expressnpcDatas[i], NExpressNpc)
|
||
if npc then
|
||
npc:SetMaster(role)
|
||
npc:SetPos(role, serverpos)
|
||
|
||
role:AddExpressNpc(npc.data.id)
|
||
end
|
||
end
|
||
end
|
||
end |