210 lines
5.9 KiB
Plaintext
210 lines
5.9 KiB
Plaintext
-- 場景中npc頭頂任務圖示的相關邏輯
|
|
SceneQuestSymbolView = class("SceneQuestSymbolView", SubView);
|
|
|
|
function SceneQuestSymbolView:Init()
|
|
self:MapViewListener();
|
|
end
|
|
|
|
function SceneQuestSymbolView:UpdateSingleRoleQuset(role, isRemove)
|
|
if(not role.data)then
|
|
return false;
|
|
end
|
|
|
|
if(not role.data:IsNpc())then
|
|
return false;
|
|
end
|
|
|
|
local hasSymbol = false
|
|
local hasAttention = false
|
|
|
|
local questlst = QuestProxy.Instance:getDialogQuestListByNpcId(role.data.staticData.id, role.data.uniqueid);
|
|
hasAttention = self:HandleAttention(role, questlst)
|
|
hasSymbol = self:HandleSymbol(role, questlst)
|
|
|
|
if(not hasSymbol)then
|
|
local sceneUI = role:GetSceneUI();
|
|
if(sceneUI)then
|
|
sceneUI.roleTopUI:RemoveQuestEffectSymbol();
|
|
end
|
|
end
|
|
if(not hasAttention) then
|
|
role:DestroyGuideEffect();
|
|
end
|
|
end
|
|
|
|
function SceneQuestSymbolView:HandleAttention(role,questlst)
|
|
if(role.data:IsNpc() and questlst and #questlst>0)then
|
|
local d = nil
|
|
for i=1,#questlst do
|
|
d = questlst[i];
|
|
if(d.questDataStepType == QuestDataStepType.QuestDataStepType_VISIT) then
|
|
--如果是visit任務(這個條件,其實可以去掉)
|
|
if(d.staticData and d.staticData.Params and d.staticData.Params.attention == "guide") then
|
|
role:PlayGuideEffect();
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return false;
|
|
end
|
|
|
|
function SceneQuestSymbolView:HandleSymbol(role, questlst)
|
|
questlst = QuestProxy.Instance:getSymbolDQListByNpcId(role.data.staticData.id, role.data.uniqueid, questlst)
|
|
if(not questlst)then
|
|
return;
|
|
end
|
|
local symbolType = nil;
|
|
for i=1,#questlst do
|
|
-- ShowSymbol為2隱藏小地圖
|
|
if(questlst[i].staticData)then
|
|
if( questlst[i].staticData.Params.ShowSymbol~=1 and questlst[i].staticData.Params.ShowSymbol~=3)then
|
|
local tsymbolType = QuestSymbolCheck.GetQuestSymbolByQuest(questlst[i])
|
|
if(tsymbolType)then
|
|
if(symbolType == nil or tsymbolType < symbolType)then
|
|
symbolType = tsymbolType;
|
|
end
|
|
end
|
|
else
|
|
errorLog(string.format("%s Not Have StaticData", questlst[i].id));
|
|
end
|
|
end
|
|
end
|
|
-- 日常任務需要額外判定 如封印、研究所等
|
|
if(not symbolType and QuestSymbolCheck.HasDailySymbol(role.data.staticData))then
|
|
symbolType = QuestSymbolType.Daily;
|
|
end
|
|
if(symbolType)then
|
|
local sceneUI = role:GetSceneUI();
|
|
if(sceneUI)then
|
|
sceneUI.roleTopUI:PlayQuestEffectSymbol(symbolType);
|
|
end
|
|
return true;
|
|
end
|
|
return false;
|
|
end
|
|
|
|
|
|
-- 公會福利
|
|
function SceneQuestSymbolView:UpdateGuildWelfareSymbol(role)
|
|
if(role == nil)then
|
|
return;
|
|
end
|
|
|
|
if(not role.data.IsNpc or not role.data:IsNpc())then
|
|
return;
|
|
end
|
|
|
|
if(role.data.staticData.id ~= GuildProxy.Instance:GetWelfareNpcId())then
|
|
return;
|
|
end
|
|
|
|
local sceneUI = role:GetSceneUI();
|
|
if(sceneUI)then
|
|
local show = GuildProxy.Instance:GetGuildWelfareState();
|
|
if(show == true)then
|
|
local getEffect = GameConfig.GuildBuilding.uieffect_getwelfare or "PetGift";
|
|
sceneUI.roleTopUI:SetTopGiftSymbol(getEffect, self.GetGuildWelfare, self);
|
|
|
|
local roleEffect = GameConfig.GuildBuilding.roleeffect_getwelfare or {""};
|
|
role:PlayGuildWelfareEffect();
|
|
else
|
|
sceneUI.roleTopUI:RemoveTopGiftSymbol();
|
|
role:DestroyGuideWelfareEffect();
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 公會寶箱Npc領取獎勵
|
|
function SceneQuestSymbolView:UpdateGuildTreasureGiftSymbol(role)
|
|
if(role == nil)then
|
|
return;
|
|
end
|
|
|
|
if(not role.data.IsNpc or not role.data:IsNpc())then
|
|
return;
|
|
end
|
|
|
|
if(role.data.staticData.id ~= GuildTreasureProxy.Instance:GetTreasureNpcId())then
|
|
return;
|
|
end
|
|
|
|
local sceneUI = role:GetSceneUI();
|
|
if(sceneUI)then
|
|
local can = GuildProxy.Instance:CanIDoAuthority(GuildAuthorityMap.Treasure)
|
|
local show = GuildProxy.Instance.myGuildData.gvg_treasure_count==1
|
|
if(show and can)then
|
|
local getEffect = GameConfig.GuildTreasure.GiftSymbol or "PetGift";
|
|
sceneUI.roleTopUI:SetTopGiftSymbol(getEffect);
|
|
else
|
|
sceneUI.roleTopUI:RemoveTopGiftSymbol();
|
|
end
|
|
end
|
|
end
|
|
|
|
function SceneQuestSymbolView:GetGuildWelfare(creatureid)
|
|
ServiceGuildCmdProxy.Instance:CallGetWelfareGuildCmd();
|
|
end
|
|
-- 公會福利
|
|
|
|
|
|
function SceneQuestSymbolView:MapViewListener()
|
|
self:AddListenEvt(ServiceEvent.QuestQuestUpdate, self.HandleQuestUpdate);
|
|
self:AddListenEvt(ServiceEvent.QuestQuestStepUpdate, self.HandleQuestUpdate);
|
|
self:AddListenEvt(ServiceEvent.NUserVarUpdate, self.HandleQuestUpdate);
|
|
self:AddListenEvt(SystemUnLockEvent.NUserNewMenu, self.HandleQuestUpdate);
|
|
self:AddListenEvt(ServiceEvent.QuestQuestList, self.HandleQuestUpdate);
|
|
|
|
self:AddListenEvt(SceneUserEvent.SceneAddNpcs, self.HandleAddNpcRole)
|
|
|
|
self:AddListenEvt(ServiceEvent.GuildCmdWelfareNtfGuildCmd, self.HandleGuildWelfareNtfCmd);
|
|
self:AddListenEvt(ServiceEvent.GuildCmdExitGuildGuildCmd, self.HandleGuildWelfareNtfCmd);
|
|
self:AddListenEvt(ServiceEvent.GuildCmdGuildDataUpdateGuildCmd , self.HandleGuildTreasureGiftNtfCmd);
|
|
end
|
|
|
|
-- 任務更新
|
|
function SceneQuestSymbolView:HandleQuestUpdate(note)
|
|
local nowNpcs = NSceneNpcProxy.Instance.npcMap;
|
|
for npcid,npcList in pairs(nowNpcs)do
|
|
for k, role in pairs(npcList)do
|
|
if(role.data:IsNpc())then
|
|
self:UpdateSingleRoleQuset(role)
|
|
self:UpdateGuildWelfareSymbol(role);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 新增NPC頭頂任務資訊
|
|
function SceneQuestSymbolView:HandleAddNpcRole(note)
|
|
local npcs = note.body;
|
|
for _,role in pairs(npcs)do
|
|
self:UpdateSingleRoleQuset(role);
|
|
self:UpdateGuildWelfareSymbol(role);
|
|
self:UpdateGuildTreasureGiftSymbol(role);
|
|
end
|
|
end
|
|
|
|
function SceneQuestSymbolView:HandleGuildWelfareNtfCmd(note)
|
|
if(not Game.MapManager:IsRaidMode())then
|
|
return;
|
|
end
|
|
|
|
local roles_welfare = NSceneNpcProxy.Instance:FindNpcs(GuildProxy.Instance:GetWelfareNpcId())
|
|
if(roles_welfare == nil or #roles_welfare ==0)then
|
|
return;
|
|
end
|
|
self:UpdateGuildWelfareSymbol(roles_welfare[1]);
|
|
end
|
|
|
|
function SceneQuestSymbolView:HandleGuildTreasureGiftNtfCmd(note)
|
|
local roles_welfare = NSceneNpcProxy.Instance:FindNpcs(GuildTreasureProxy.Instance:GetTreasureNpcId())
|
|
if(roles_welfare == nil or #roles_welfare ==0)then
|
|
return;
|
|
end
|
|
self:UpdateGuildTreasureGiftSymbol(roles_welfare[1]);
|
|
end
|
|
|
|
|
|
|