1915 lines
58 KiB
Plaintext
1915 lines
58 KiB
Plaintext
MainViewMiniMap = class("MainViewMiniMap", SubView);
|
|
|
|
autoImport("WrapCellHelper");
|
|
autoImport("MiniMapWindow");
|
|
autoImport("NearlyCreatureCell");
|
|
autoImport("MiniMapData");
|
|
|
|
autoImport("MiniMapGuideAnim");
|
|
|
|
local MapManager = Game.MapManager;
|
|
local miniMapDataDeleteFunc = function (data)
|
|
data:Destroy();
|
|
end
|
|
|
|
function MainViewMiniMap:Init()
|
|
self:InitData();
|
|
self:InitUI();
|
|
self:MapEvent();
|
|
end
|
|
|
|
local _NSceneNpcProxy;
|
|
local _TableClearByDeleter;
|
|
local _TableClear;
|
|
local _SuperGvgProxy;
|
|
local _TeamProxy;
|
|
function MainViewMiniMap:InitData()
|
|
_NSceneNpcProxy = NSceneNpcProxy.Instance;
|
|
_TableClearByDeleter = TableUtility.TableClearByDeleter;
|
|
_TableClear = TableUtility.TableClear;
|
|
_SuperGvgProxy = SuperGvgProxy.Instance;
|
|
_TeamProxy = TeamProxy.Instance;
|
|
|
|
self.questShowDatas = {};
|
|
self.nearlyPlayers = {};
|
|
self.npcRoles = {};
|
|
self.monsterDataMap = {};
|
|
self.teamMemberMapDatas = {};
|
|
self.spotDatas = {};
|
|
self.sealDatasMap = {};
|
|
self.treeMapDatasMap = {};
|
|
self.focusMap = {};
|
|
self.playerMap = {};
|
|
self.showNpcs = {};
|
|
|
|
self.gvgDroiyanMap = {};
|
|
self.poringFightDropMap = {};
|
|
--蝴蝶翅膀和蒼蠅翅膀
|
|
self.UseButterflyButtonInfo = {};
|
|
self.UseFlyButtonInfo = {};
|
|
|
|
-- 組隊競技戰
|
|
self.teamPwsMapInfo = {};
|
|
end
|
|
|
|
local tempArgs = {};
|
|
local tempV3 = LuaVector3();
|
|
function MainViewMiniMap:InitUI()
|
|
self.mapBord = self:FindGO("MapBord");
|
|
self:InitBigMap();
|
|
|
|
self.miniMapButton = self:FindGO("MiniMapButton");
|
|
self:AddOrRemoveGuideId(self.miniMapButton, 107)
|
|
self:AddClickEvent(self.miniMapButton, function (go)
|
|
self:ActiveMapBord(not self.mapBord.activeInHierarchy);
|
|
end);
|
|
|
|
local miniMapWindowGO = self:FindGO("MiniMapWindow");
|
|
self.minimapWindow = MiniMapWindow.new(miniMapWindowGO);
|
|
|
|
|
|
self.mPanel = self:FindComponent("MiniMapScrollView", UIPanel);
|
|
self.minimapWindow:ActiveFocusArrowUpdate(true);
|
|
self.minimapWindow:SetUpdateEvent(self.CenterMiniMapWindow, self);
|
|
|
|
self.nearlyBord = self:FindGO("NearlyBord");
|
|
self.nearlyPlayerTipStick = self:FindComponent("NearlyPlayerTipStick", UIWidget);
|
|
|
|
self.gvgFinalFightTip = self:FindGO("GvgFinalFightTip");
|
|
|
|
local nearly_playerTog = self:FindGO("PlayerTog", self.nearlyBord);
|
|
self.playerTog = nearly_playerTog:GetComponent(UIToggle);
|
|
self:AddClickEvent(nearly_playerTog, function (go)
|
|
self:UpdateNearlyCreature(1, true);
|
|
end);
|
|
local nearly_npcTog = self:FindGO("NPCTog", self.nearlyBord);
|
|
self.npcTog = nearly_npcTog:GetComponent(UIToggle);
|
|
self:AddClickEvent(nearly_npcTog, function (go)
|
|
self:UpdateNearlyCreature(2, true);
|
|
end);
|
|
|
|
-- self.gvgDroiyan_stick = self:FindComponent("GvgDroiyanInfo", UIWidget);
|
|
local nearlyButton = self:FindGO("NearlyButton");
|
|
|
|
self.nearlyButton_Symbol = self:FindComponent("Arrow", UISprite);
|
|
self:AddClickEvent(nearlyButton, function (go)
|
|
if(Game.MapManager:IsPVPMode_PoringFight())then
|
|
MsgManager.ShowMsgByIDTable(3606);
|
|
return;
|
|
end
|
|
|
|
if(Game.MapManager:IsGvgMode_Droiyan())then
|
|
-- if(true)then
|
|
self:ActiveGvgFinalFightTip(not self.gvgFinalFightTip.activeSelf)
|
|
return;
|
|
end
|
|
|
|
if(not self.nearlyBord.activeSelf)then
|
|
if(self.nowNearlyTog == nil)then
|
|
self.nowNearlyTog = 1;
|
|
end
|
|
self:UpdateNearlyCreature(1, true);
|
|
|
|
self:ActiveNearlyBord(true);
|
|
else
|
|
self:ActiveNearlyBord(false);
|
|
end
|
|
end);
|
|
|
|
local nearlyGrid = self:FindGO("NearlyGrid");
|
|
local wrapConfig = {
|
|
wrapObj = nearlyGrid,
|
|
cellName = "NearlyCreatureCell",
|
|
control = NearlyCreatureCell,
|
|
dir = 1,
|
|
}
|
|
self.nearlyCreaturesCtl = WrapCellHelper.new(wrapConfig)
|
|
self.nearlyCreaturesCtl:AddEventListener(MouseEvent.MouseClick, self.ClickNearlyCell, self)
|
|
self.noPlayerTip = self:FindGO("PlayerNoneTip");
|
|
self.bubbleStick = self:FindComponent("BubbleStick", UIWidget);
|
|
|
|
local closeMapGO = self:FindGO("CloseMap");
|
|
self:AddClickEvent(closeMapGO, function ()
|
|
self:ActiveMapBord(false);
|
|
end);
|
|
end
|
|
|
|
local IsNull = Slua.IsNull;
|
|
local InverseTransformPointByTransform = LuaGameObject.InverseTransformPointByTransform;
|
|
local GetLocalPosition = LuaGameObject.GetLocalPosition;
|
|
local GetPosition = LuaGameObject.GetPosition;
|
|
local S_World = Space.World;
|
|
function MainViewMiniMap:CenterMiniMapWindow(window)
|
|
if(IsNull(window.mapTexture))then
|
|
return;
|
|
end
|
|
|
|
local mMap = window.mapTexture.transform;
|
|
tempV3[1],tempV3[2],tempV3[3] = InverseTransformPointByTransform(window.gameObject.transform, window.myTrans, S_World)
|
|
local x,y,z = GetLocalPosition(mMap)
|
|
tempV3[1],tempV3[2],tempV3[3] = x-tempV3[1],y-tempV3[2],z-tempV3[3]
|
|
mMap.transform.localPosition = tempV3;
|
|
|
|
tempV3[1],tempV3[2],tempV3[3] = GetPosition(window.s_symbolParent);
|
|
window.d_symbolParent.position = tempV3;
|
|
end
|
|
|
|
function MainViewMiniMap:ClickNearlyCell( cellCtl )
|
|
local id = cellCtl.id;
|
|
local creatureType = cellCtl.creatureType;
|
|
|
|
if(creatureType == Creature_Type.Player)then
|
|
local creature = SceneCreatureProxy.FindCreature(id);
|
|
if(creature)then
|
|
local playerData = PlayerTipData.new();
|
|
playerData:SetByCreature(creature);
|
|
if(creature ~= self.lastCreature)then
|
|
local playerTip = FunctionPlayerTip.Me():GetPlayerTip(self.nearlyPlayerTipStick, NGUIUtil.AnchorSide.Right, {-356,0});
|
|
local tipData = {
|
|
playerData = playerData,
|
|
};
|
|
tipData.funckeys = FunctionPlayerTip.Me():GetPlayerFunckey(id)
|
|
table.insert(tipData.funckeys, "Booth")
|
|
|
|
playerTip:SetData(tipData);
|
|
playerTip.closecallback = function (go)
|
|
self.lastCreature = nil;
|
|
end
|
|
playerTip:AddIgnoreBound(cellCtl.gameObject);
|
|
self.lastCreature = creature;
|
|
else
|
|
FunctionPlayerTip.Me():CloseTip();
|
|
self.lastCreature = nil;
|
|
end
|
|
end
|
|
elseif(creatureType == Creature_Type.Npc)then
|
|
local pos = cellCtl.pos;
|
|
self.minimapWindow:SetTipPos(pos);
|
|
self.bigmapWindow:SetTipPos(pos);
|
|
|
|
local npcid, uniqueid = cellCtl.npcid, cellCtl.uniqueid;
|
|
_TableClear(tempArgs);
|
|
tempArgs = {
|
|
targetMapID = MapManager:GetMapID(),
|
|
npcID = npcid,
|
|
npcUID = uniqueid,
|
|
}
|
|
local cmd = MissionCommandFactory.CreateCommand(tempArgs, MissionCommandVisitNpc)
|
|
Game.Myself:Client_SetMissionCommand( cmd );
|
|
end
|
|
end
|
|
|
|
function MainViewMiniMap:InitBigMap()
|
|
self.mapName = self:FindComponent("MapName" , UILabel, self.mapBord);
|
|
|
|
self.bigmapWindow = MiniMapWindow.new(self:FindGO("BigMapWindow"));
|
|
self.bigmapWindow:AddMapClick();
|
|
self.bigmapWindow:ActiveFocusArrowUpdate(false);
|
|
|
|
self:AddButtonEvent("ReturnHome", function (go)
|
|
MsgManager.ConfirmMsgByID(7, function ()
|
|
ServiceNUserProxy.Instance:ReturnToHomeCity()
|
|
end, nil)
|
|
end);
|
|
|
|
self.bigMapButton = self:FindGO("BigMapButton");
|
|
self.bigMapLab = self:FindComponent("Label", UILabel, self.bigMapButton);
|
|
self:AddClickEvent(self.bigMapButton, function (go)
|
|
if(self.bigmapWindow.lock)then
|
|
return;
|
|
end
|
|
local inRaid = MapManager:IsRaidMode();
|
|
if(inRaid)then
|
|
if(MapManager:IsPVPMode_TeamPws())then
|
|
MsgManager.ShowMsgByIDTable(25923);
|
|
return;
|
|
end
|
|
MsgManager.ConfirmMsgByID(7, function ()
|
|
ServiceNUserProxy.Instance:ReturnToHomeCity()
|
|
end, nil)
|
|
else
|
|
self:sendNotification(UIEvent.JumpPanel, {view = PanelConfig.WorldMapView, viewdata = {}});
|
|
end
|
|
self:ActiveMapBord(false);
|
|
end);
|
|
|
|
-- 小地圖優化邏輯
|
|
self.frontMapInfo = self:FindGO("MapFrontInfo");
|
|
self.enlargeSprite = self:FindComponent("EnLargeButton", UISprite, self.frontMapInfo);
|
|
self:AddClickEvent(self.enlargeSprite.gameObject, function (go)
|
|
self:EnLargeBigMap(not self.bigmaplarge);
|
|
end);
|
|
|
|
local activeComp = self.mapBord:GetComponent(RelateGameObjectActive);
|
|
activeComp.enable_Call = function ()
|
|
self:EnLargeBigMap(false);
|
|
end
|
|
|
|
self.moreBord = self:FindGO("MoreBord");
|
|
local moreBtn = self:FindGO("MoreButton");
|
|
local DoujinshiNode = self:FindGO("DoujinshiNode");
|
|
self:AddClickEvent(moreBtn, function ()
|
|
if(self.bigmapWindow.active)then
|
|
if(not self:ActiveMapBord(false))then
|
|
return;
|
|
end
|
|
end
|
|
self.moreBord:SetActive(not self.moreBord.activeSelf);
|
|
if self.moreBord.activeSelf then
|
|
DoujinshiNode.gameObject:SetActive(false)
|
|
end
|
|
end)
|
|
|
|
--蝴蝶翅膀
|
|
self.UseButterflyButtonInfo.itemID = 50001
|
|
self.UseButterflyButtonInfo.msgID = 25440
|
|
self.UseButterflyButtonInfo.msgDoNotHaveID = 25444
|
|
self.UseButterflyButtonInfo.base = self:FindComponent("UseButterflyWingsButton", UISprite, self.frontMapInfo);
|
|
self.UseButterflyButtonInfo.icon = self:FindComponent("Icon", UISprite, self.UseButterflyButtonInfo.base.gameObject);
|
|
IconManager:SetItemIcon("item_" .. self.UseButterflyButtonInfo.itemID, self.UseButterflyButtonInfo.icon)
|
|
self:AddClickEvent(self.UseButterflyButtonInfo.base.gameObject, function (go)
|
|
self:TryUseButterflyOrFly(self.UseButterflyButtonInfo)
|
|
end)
|
|
self.UseButterflyButtonInfo.base.gameObject:SetActive(GameConfig.MapIconShow.mapicon_butterfly_open ~= 0)
|
|
|
|
--蒼蠅翅膀
|
|
self.UseFlyButtonInfo.itemID = 5024
|
|
self.UseFlyButtonInfo.msgID = 25439
|
|
self.UseFlyButtonInfo.msgDoNotHaveID = 25444
|
|
self.UseFlyButtonInfo.base = self:FindComponent("UseFlyWingsButton", UISprite, self.frontMapInfo);
|
|
self.UseFlyButtonInfo.icon = self:FindComponent("Icon", UISprite, self.UseFlyButtonInfo.base.gameObject);
|
|
IconManager:SetItemIcon("item_" .. self.UseFlyButtonInfo.itemID, self.UseFlyButtonInfo.icon)
|
|
self:AddClickEvent(self.UseFlyButtonInfo.base.gameObject, function (go)
|
|
self:TryUseButterflyOrFly(self.UseFlyButtonInfo)
|
|
end)
|
|
self.UseFlyButtonInfo.base.gameObject:SetActive(GameConfig.MapIconShow.mapicon_fly_open ~= 0)
|
|
|
|
self:RefreshButterflyAndFlyButtons()
|
|
end
|
|
|
|
function MainViewMiniMap:ActiveMapBord(b)
|
|
if(self.bigmapWindow.lock)then
|
|
return false;
|
|
end
|
|
|
|
--self.nearlyButtonLabel.text = Game.MapManager:IsGvgMode_Droiyan() and ZhString.MiniMapGVGInfo or ZhString.MiniMapNearby
|
|
|
|
if(b)then
|
|
self.mapBord:SetActive(true);
|
|
self.bigmapWindow:Show();
|
|
self.bigmapWindow:UpdateQuestNpcSymbol(self.questShowDatas, true);
|
|
self.bigmapWindow:ResetMapPos();
|
|
self:UpdateNearlyMonsters();
|
|
|
|
if(Game.MapManager:IsGvgMode_Droiyan())then
|
|
self:ActiveGvgFinalFightTip(true)
|
|
end
|
|
|
|
self:UpdateNearlyCreature(self.nowNearlyTog or 1, true);
|
|
|
|
--蝴蝶翅膀和蒼蠅翅膀
|
|
self:RefreshButterflyAndFlyButtons();
|
|
else
|
|
self.mapBord:SetActive(false);
|
|
self.bigmapWindow:Hide();
|
|
self:ActiveNearlyBord(false);
|
|
|
|
if(Game.MapManager:IsGvgMode_Droiyan())then
|
|
self:ActiveGvgFinalFightTip(false)
|
|
end
|
|
|
|
self:ShutDownGuideAnim();
|
|
end
|
|
return true;
|
|
end
|
|
|
|
function MainViewMiniMap:EnLargeBigMap(b, notCenterMyPos)
|
|
if(self.bigmapWindow.lock)then
|
|
return;
|
|
end
|
|
|
|
if(b)then
|
|
self.bigmaplarge = true;
|
|
self.bigmapWindow:SetMapScale(2.3);
|
|
if(notCenterMyPos == nil or notCenterMyPos == false)then
|
|
self.bigmapWindow:CenterOnMyPos(true);
|
|
end
|
|
self.bigmapWindow:EnableDrag(true);
|
|
self.bigmapWindow:ShowOrHideExitInfo(true);
|
|
self.enlargeSprite.spriteName = "com_btn_narrow";
|
|
self.bigmapWindow:ActiveNearlyMonsters(false);
|
|
else
|
|
self.bigmaplarge = false;
|
|
self.bigmapWindow:SetMapScale(1);
|
|
self.bigmapWindow:ResetMapPos();
|
|
self.bigmapWindow:EnableDrag(false);
|
|
self.bigmapWindow:ShowOrHideExitInfo(false);
|
|
self.enlargeSprite.spriteName = "com_btn_enlarge";
|
|
self.bigmapWindow:ActiveNearlyMonsters(true);
|
|
end
|
|
end
|
|
|
|
function MainViewMiniMap:ActiveGvgFinalFightTip(isShow)
|
|
self.gvgFinalFightTip:SetActive(isShow)
|
|
if(isShow)then
|
|
if not self.gvgFinalFightTipCtl then
|
|
self.gvgFinalFightTipCtl = GvgFinalFightTip.new(self.gvgFinalFightTip)
|
|
end
|
|
self.gvgFinalFightTipCtl:OnShow()
|
|
else
|
|
if self.gvgFinalFightTipCtl then
|
|
self.gvgFinalFightTipCtl:OnHide()
|
|
end
|
|
end
|
|
self.nearlyButton_Symbol.flip = self.gvgFinalFightTip.activeSelf and 0 or 1;
|
|
end
|
|
|
|
function MainViewMiniMap:OnShow()
|
|
self:UpdateMyMapPos();
|
|
end
|
|
|
|
function MainViewMiniMap:OnEnter()
|
|
MainViewMiniMap.super.OnEnter(self);
|
|
|
|
self.minimapWindow:Show();
|
|
self:ActiveMapBord(false);
|
|
|
|
if (Game.MapManager:IsPVPMode_PoringFight()) then
|
|
self:ShowPoringFightMapItems();
|
|
end
|
|
|
|
self:ActiveCheckMonstersPoses(true);
|
|
end
|
|
|
|
function MainViewMiniMap:OnExit()
|
|
self.minimapWindow:Hide();
|
|
self:ActiveCheckMonstersPoses(false);
|
|
self:ClearPoringFightMapItems();
|
|
|
|
MainViewMiniMap.super.OnExit(self);
|
|
end
|
|
|
|
-- function MainViewMiniMap:EnterMap()
|
|
-- self:UpdateMapAllInfo();
|
|
-- end
|
|
|
|
|
|
-- nearly creatures begin
|
|
function MainViewMiniMap:ActiveNearlyBord(b)
|
|
self.nearlyBord:SetActive(b);
|
|
self.nearlyButton_Symbol.flip = self.nearlyBord.activeSelf and 0 or 1;
|
|
end
|
|
|
|
function MainViewMiniMap:UpdateNearlyCreature(tog, forceUpdate)
|
|
local needUpdateList = true;
|
|
if(not forceUpdate and not self.nearlyBord.activeSelf)then
|
|
needUpdateList = not self.nearlyBord.activeSelf;
|
|
end
|
|
if(not needUpdateList)then
|
|
return;
|
|
end
|
|
|
|
self.nearlyCreaturesCtl:ResetPosition();
|
|
-- 1:player 2:npc
|
|
if(tog == 1)then
|
|
self.playerTog.value = true;
|
|
self.npcTog.value = false;
|
|
_TableClearByDeleter(self.nearlyPlayers, miniMapDataDeleteFunc);
|
|
|
|
local allRole = NSceneUserProxy.Instance.userMap;
|
|
for _,role in pairs(allRole)do
|
|
local playerMapData = MiniMapData.CreateAsTable( role.data.id );
|
|
playerMapData:SetParama("creatureType", Creature_Type.Player);
|
|
playerMapData:SetParama("name", role.data.name);
|
|
|
|
local profession = role.data.userdata:Get(UDEnum.PROFESSION);
|
|
playerMapData:SetParama("Profession", profession);
|
|
local gender = role.data.userdata:Get(UDEnum.SEX);
|
|
playerMapData:SetParama("gender", gender);
|
|
local level = role.data.userdata:Get(UDEnum.ROLELEVEL);
|
|
playerMapData:SetParama("level", level);
|
|
|
|
table.insert(self.nearlyPlayers, playerMapData)
|
|
end
|
|
|
|
self.nearlyCreaturesCtl:ResetDatas(self.nearlyPlayers);
|
|
|
|
self.noPlayerTip:SetActive(#self.nearlyPlayers == 0);
|
|
elseif(tog == 2)then
|
|
self.npcTog.value = true;
|
|
self.playerTog.value = false;
|
|
|
|
_TableClearByDeleter(self.npcRoles, miniMapDataDeleteFunc);
|
|
|
|
local npcRolesMap = {};
|
|
local npcList = MapManager:GetNPCPointArray();
|
|
if(npcList)then
|
|
for i=1,#npcList do
|
|
local point = npcList[i];
|
|
local npcData = Table_Npc[ point.ID ];
|
|
if(npcData and npcData.MapIcon ~= "" and npcData.NoShowMapIcon ~= 1)then
|
|
local combineId = QuestDataStepType.QuestDataStepType_VISIT..point.ID..point.uniqueID;
|
|
local npcMapData = npcRolesMap[combineId];
|
|
if(npcMapData == nil)then
|
|
npcMapData = MiniMapData.CreateAsTable( combineId );
|
|
end
|
|
|
|
npcMapData:SetParama("creatureType", Creature_Type.Npc);
|
|
npcMapData:SetParama("npcid", npcData.id);
|
|
npcMapData:SetParama("uniqueid", point.uniqueID);
|
|
npcMapData:SetParama("name", npcData.NameZh);
|
|
npcMapData:SetParama("icon", npcData.MapIcon);
|
|
npcMapData:SetParama("PositionTip", npcData.Position);
|
|
|
|
npcMapData:SetPos(point.position[1], point.position[2], point.position[3]);
|
|
|
|
npcRolesMap[ combineId ] = npcMapData;
|
|
|
|
table.insert(self.npcRoles, npcMapData);
|
|
end
|
|
end
|
|
end
|
|
-- for combineId, miniMapData in pairs(self.questShowDatas)do
|
|
-- local npcMapData = npcRolesMap[combineId];
|
|
-- if( npcMapData )then
|
|
-- npcMapData:SetParama("Symbol", miniMapData:GetParama("SymbolType"));
|
|
-- end
|
|
-- end
|
|
table.sort(self.npcRoles, function (qa, qb)
|
|
return qa:GetParama("npcid") < qb:GetParama("npcid");
|
|
end)
|
|
self.nearlyCreaturesCtl:ResetDatas(self.npcRoles);
|
|
|
|
self.noPlayerTip:SetActive(false);
|
|
end
|
|
self.nowNearlyTog = tog;
|
|
end
|
|
|
|
function MainViewMiniMap:ActiveCheckMonstersPoses(open)
|
|
if(open)then
|
|
TimeTickManager.Me():CreateTick(0,1000,self.UpdateNearlyMonsters, self, 1)
|
|
else
|
|
TimeTickManager.Me():ClearTick(self, 1)
|
|
end
|
|
end
|
|
|
|
function MainViewMiniMap:UpdateNearlyMonsters()
|
|
if(not self.minimapWindow:IsActive())then
|
|
return;
|
|
end
|
|
local isMvpFight = MapManager:IsPVPMode_MvpFight();
|
|
local monsterIdMap = FunctionMonster.Me():FilterMonster(isMvpFight);
|
|
_TableClearByDeleter(self.monsterDataMap, miniMapDataDeleteFunc);
|
|
|
|
local rolelv = MyselfProxy.Instance:RoleLevel()
|
|
local curImageId = ServicePlayerProxy.Instance:GetCurMapImageId() or 0;
|
|
local isRaid = MapManager:IsRaidMode() or curImageId > 0;
|
|
for _,monsterId in pairs(monsterIdMap)do
|
|
local monster = _NSceneNpcProxy:Find(monsterId);
|
|
if(monster and monster.data and RoleDefines_Camp.ENEMY == monster.data:GetCamp())then
|
|
local pos = monster:GetPosition();
|
|
if(pos)then
|
|
local monsterMapData = MiniMapData.CreateAsTable(monster.id);
|
|
monsterMapData:SetPos(pos[1], pos[2], pos[3]);
|
|
|
|
local sdata = monster.data.staticData;
|
|
local symbolName, depth;
|
|
local bdata = Table_Boss[sdata.id]
|
|
if bdata and bdata.Type == 3 then
|
|
if(isMvpFight)then
|
|
monsterMapData:SetParama("monster_icon", sdata.Icon);
|
|
end
|
|
symbolName = "ui_mvp_dead11_JM";
|
|
depth = 4;
|
|
elseif(sdata.Type == "MVP")then
|
|
if(isMvpFight)then
|
|
monsterMapData:SetParama("monster_icon", sdata.Icon);
|
|
end
|
|
symbolName = "map_mvpboss";
|
|
depth = 3;
|
|
elseif(sdata.Type == "MINI")then
|
|
if(isMvpFight)then
|
|
monsterMapData:SetParama("monster_icon", sdata.Icon);
|
|
end
|
|
symbolName = "map_miniboss";
|
|
depth = 2;
|
|
else
|
|
if(isRaid)then
|
|
symbolName = "map_dot";
|
|
else
|
|
local search = monster.data.search or 0;
|
|
local searchrange = monster.data.searchrange or 0;
|
|
if(search > 0 or searchrange > 0)then
|
|
local mdata = monster.data.staticData;
|
|
if(mdata.PassiveLv and mdata.PassiveLv <= rolelv)then
|
|
symbolName = "map_dot";
|
|
else
|
|
symbolName = "map_green";
|
|
end
|
|
else
|
|
symbolName = "map_green";
|
|
end
|
|
end
|
|
depth = 1;
|
|
end
|
|
monsterMapData:SetParama("Symbol", symbolName);
|
|
monsterMapData:SetParama("depth", depth);
|
|
table.insert(self.monsterDataMap, monsterMapData);
|
|
end
|
|
end
|
|
end
|
|
|
|
if(self.minimapWindow:IsActive())then
|
|
self.minimapWindow:UpdateMonstersPoses(self.monsterDataMap, true)
|
|
end
|
|
if(self.bigmapWindow:IsActive())then
|
|
self.bigmapWindow:UpdateMonstersPoses(self.monsterDataMap, true)
|
|
end
|
|
end
|
|
-- nearly creatures end
|
|
|
|
|
|
|
|
|
|
-- quest begin
|
|
function MainViewMiniMap:GetMapNpcPointByNpcId( npcid )
|
|
local npcList = MapManager:GetNPCPointArray();
|
|
if(npcList)then
|
|
for i=1,#npcList do
|
|
local npcPoint = npcList[i];
|
|
if(npcPoint and npcPoint.ID == npcid)then
|
|
return npcPoint;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function MainViewMiniMap:UpdateQuestMapSymbol()
|
|
local nowMapId = MapManager:GetMapID();
|
|
local questlst = QuestProxy.Instance:getQuestListByMapAndSymbol(nowMapId);
|
|
|
|
_TableClearByDeleter(self.questShowDatas, miniMapDataDeleteFunc);
|
|
|
|
-- Normal Quest
|
|
for _, q in pairs(questlst) do
|
|
local params = q.staticData and q.staticData.Params;
|
|
if(params.ShowSymbol~=2 and params.ShowSymbol~=3)then
|
|
local symbolType = QuestSymbolCheck.GetQuestSymbolByQuest(q)
|
|
if( symbolType )then
|
|
local combineId;
|
|
|
|
local npcPoint;
|
|
local uniqueid, npcid = params.uniqueid, params.npc;
|
|
npcid = type(npcid) == "table" and npcid[1] or npcid;
|
|
if( uniqueid )then
|
|
npcPoint = MapManager:FindNPCPoint( uniqueid );
|
|
elseif(npcid)then
|
|
npcPoint = self:GetMapNpcPointByNpcId( npcid );
|
|
uniqueid = npcPoint and npcPoint.uniqueID or 0;
|
|
else
|
|
combineId = q.questDataStepType..q.id;
|
|
end
|
|
|
|
if(nil == combineId)then
|
|
if(npcid == nil and uniqueid == nil)then
|
|
errorLog("Not Find Npc (questId:%s)", q.id);
|
|
end
|
|
combineId = QuestDataStepType.QuestDataStepType_VISIT..tostring(npcid)..tostring(uniqueid);
|
|
end
|
|
|
|
local miniMapData = self.questShowDatas[combineId];
|
|
if(not miniMapData)then
|
|
local pos = params.pos;
|
|
if(not pos and npcPoint)then
|
|
pos = npcPoint.position;
|
|
end
|
|
if(pos)then
|
|
miniMapData = self.questShowDatas[combineId];
|
|
if(miniMapData == nil)then
|
|
miniMapData = MiniMapData.CreateAsTable(combineId);
|
|
end
|
|
miniMapData:SetPos(pos[1], pos[2], pos[3]);
|
|
|
|
miniMapData:SetParama( "questId", q.id );
|
|
miniMapData:SetParama( "npcid", npcid );
|
|
miniMapData:SetParama( "uniqueid", uniqueid );
|
|
miniMapData:SetParama( "SymbolType", symbolType );
|
|
miniMapData:SetParama( "combineId", combineId );
|
|
|
|
self.questShowDatas[combineId] = miniMapData;
|
|
end
|
|
else
|
|
local cacheSymbolType = miniMapData:GetParama( "SymbolType" );
|
|
if(symbolType < cacheSymbolType)then
|
|
miniMapData:SetParama( "SymbolType", symbolType );
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Left Daily Quest
|
|
local npcList = MapManager:GetNPCPointArray();
|
|
if(npcList)then
|
|
for i=1,#npcList do
|
|
local npcPoint = npcList[i];
|
|
local npcid, uniqueid = npcPoint.ID, npcPoint.uniqueID;
|
|
|
|
local combineId = QuestDataStepType.QuestDataStepType_VISIT..npcPoint.ID..npcPoint.uniqueID;
|
|
local miniMapData = self.questShowDatas[combineId];
|
|
if(not miniMapData)then
|
|
local npcSData = Table_Npc[ npcid ];
|
|
if( QuestSymbolCheck.HasDailySymbol(npcSData) )then
|
|
|
|
miniMapData = self.questShowDatas[combineId];
|
|
if(miniMapData == nil)then
|
|
miniMapData = MiniMapData.CreateAsTable(combineId);
|
|
self.questShowDatas[combineId] = miniMapData;
|
|
end
|
|
|
|
local pos = npcPoint.position;
|
|
miniMapData:SetPos(pos[1], pos[2], pos[3]);
|
|
|
|
miniMapData:SetParama( "npcid", npcid );
|
|
miniMapData:SetParama( "uniqueid", uniqueid );
|
|
miniMapData:SetParama( "SymbolType", QuestSymbolType.Daily );
|
|
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
self.minimapWindow:UpdateQuestNpcSymbol(self.questShowDatas, true);
|
|
self.bigmapWindow:UpdateQuestNpcSymbol(self.questShowDatas, true);
|
|
|
|
self:UpdateNpcPointState();
|
|
end
|
|
|
|
function MainViewMiniMap:UpdateNpcPointState()
|
|
local config = GameConfig.NpcMapIconShowCondition;
|
|
if(config)then
|
|
local mylv = Game.Myself.data.userdata:Get(UDEnum.ROLELEVEL)
|
|
for npcid, config in pairs(config)do
|
|
local isNowMap = config.mapid == nil or config.mapid == MapManager:GetMapID();
|
|
local islvReach = config.level == nil or mylv >= config.level;
|
|
local isCompelete = QuestProxy.Instance:isQuestComplete(config.questId);
|
|
self.minimapWindow:UpdateNpcPointState(npcid, isNowMap and (islvReach or isCompelete));
|
|
self.bigmapWindow:UpdateNpcPointState(npcid, isNowMap and (islvReach or isCompelete));
|
|
end
|
|
end
|
|
end
|
|
-- quest end
|
|
|
|
|
|
|
|
|
|
-- memberPos begin
|
|
function MainViewMiniMap:UpdateTeamMembersPos(refreshSymbol)
|
|
local nowMapid = MapManager:GetMapID();
|
|
local restirct = Table_MapRaid[nowMapid] and Table_MapRaid[nowMapid].Restrict;
|
|
if(restirct and restirct == 1)then
|
|
self:ClearTeamMemberPos();
|
|
return;
|
|
end
|
|
|
|
if(_TeamProxy:IHaveTeam())then
|
|
local myTeam = _TeamProxy.myTeam;
|
|
local memberMap = myTeam:GetMemberMap();
|
|
for id,member in pairs(memberMap)do
|
|
self:UpdateTeamMemberPos(member.id, refreshSymbol);
|
|
end
|
|
for id,data in pairs(self.teamMemberMapDatas)do
|
|
if(not myTeam:GetMemberByGuid(id))then
|
|
self:RemoveTeamMemberPos(id);
|
|
end
|
|
end
|
|
else
|
|
self:ClearTeamMemberPos();
|
|
end
|
|
end
|
|
|
|
local BuffToBallMap;
|
|
local Init_BuffToBallMap = function ()
|
|
BuffToBallMap = {};
|
|
local npcsID = GameConfig.PvpTeamRaid and GameConfig.PvpTeamRaid.ElementNpcsID;
|
|
if(npcsID == nil)then
|
|
error("GameConfig.PvpTeamRaid Not Find..");
|
|
return;
|
|
end
|
|
for k,v in pairs(npcsID)do
|
|
BuffToBallMap[v.buffid] = v;
|
|
end
|
|
end
|
|
local Func_GetTeamPwsBallSymbol = function (creature)
|
|
if(not MapManager:IsPVPMode_TeamPws())then
|
|
return;
|
|
end
|
|
local buffs = creature.buffs;
|
|
if(buffs == nil)then
|
|
return;
|
|
end
|
|
|
|
if(BuffToBallMap == nil)then
|
|
Init_BuffToBallMap();
|
|
end
|
|
|
|
for buffid,_ in pairs(buffs)do
|
|
if(BuffToBallMap[buffid])then
|
|
return BuffToBallMap[buffid].mapicon;
|
|
end
|
|
end
|
|
end
|
|
|
|
local Player_Symbol_Name_Map =
|
|
{
|
|
[1] = "map_red",
|
|
[2] = "map_blue",
|
|
[3] = "map_yellow",
|
|
}
|
|
local GvgDroiyan_Player_Symbol_Name_Map =
|
|
{
|
|
[1] = "map_red",
|
|
[2] = "map_blue",
|
|
[3] = "map_purple",
|
|
[4] = "map_green",
|
|
}
|
|
function MainViewMiniMap:UpdateTeamMemberPos(id, refreshSymbol)
|
|
if(not id or (Game.Myself and id == Game.Myself.data.id))then
|
|
return;
|
|
end
|
|
-- remove OtherMap Member
|
|
if(_TeamProxy:IHaveTeam())then
|
|
local myTeam = _TeamProxy.myTeam;
|
|
local memData = myTeam:GetMemberByGuid(id);
|
|
local nowMapid = MapManager:GetMapID();
|
|
if(not memData or
|
|
(memData.mapid~=nowMapid and memData.raid~=nowMapid) or
|
|
memData.offline == 1)then
|
|
self:RemoveTeamMemberPos(id);
|
|
return;
|
|
end
|
|
|
|
local symbolMap = MapManager:IsGvgMode_Droiyan() and _EmptyTable or Player_Symbol_Name_Map;
|
|
local miniMapData = self.teamMemberMapDatas[id];
|
|
if(not miniMapData)then
|
|
miniMapData= MiniMapData.CreateAsTable(id);
|
|
self.teamMemberMapDatas[id] = miniMapData;
|
|
|
|
refreshSymbol = true;
|
|
end
|
|
|
|
local isTeamPws = MapManager:IsPVPMode_TeamPws();
|
|
if(isTeamPws)then
|
|
refreshSymbol = true;
|
|
end
|
|
|
|
if(refreshSymbol)then
|
|
local tag = Game.Myself.data.userdata:Get(UDEnum.PVP_COLOR);
|
|
if(tag~=nil and symbolMap[tag])then
|
|
miniMapData:SetParama("Symbol", symbolMap[tag]);
|
|
else
|
|
miniMapData:SetParama("Symbol", "map_teammate");
|
|
end
|
|
if(isTeamPws)then
|
|
local playerPwsSymbol;
|
|
local player = NSceneUserProxy.Instance:Find(id);
|
|
if(player)then
|
|
playerPwsSymbol = Func_GetTeamPwsBallSymbol(player);
|
|
if(playerPwsSymbol)then
|
|
miniMapData:SetParama("Symbol", playerPwsSymbol);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local pos = memData.pos;
|
|
miniMapData:SetPos(pos[1], pos[2], pos[3]);
|
|
|
|
local k,v = next(self.teamMemberMapDatas);
|
|
self.minimapWindow:UpdateTeamMemberSymbol(self.teamMemberMapDatas);
|
|
self.bigmapWindow:UpdateTeamMemberSymbol(self.teamMemberMapDatas);
|
|
end
|
|
end
|
|
|
|
function MainViewMiniMap:RemoveTeamMemberPos(id)
|
|
if(not id)then
|
|
return;
|
|
end
|
|
local miniMapData = self.teamMemberMapDatas[id];
|
|
if(miniMapData)then
|
|
miniMapData:Destroy();
|
|
end
|
|
self.teamMemberMapDatas[id] = nil;
|
|
|
|
self.minimapWindow:RemoveTeamMemberSymbol(id);
|
|
self.bigmapWindow:RemoveTeamMemberSymbol(id);
|
|
end
|
|
|
|
function MainViewMiniMap:ClearTeamMemberPos()
|
|
for id, teamMemberData in pairs(self.teamMemberMapDatas)do
|
|
self.minimapWindow:RemoveTeamMemberSymbol(id);
|
|
self.bigmapWindow:RemoveTeamMemberSymbol(id);
|
|
end
|
|
_TableClear(self.teamMemberMapDatas, miniMapDataDeleteFunc);
|
|
end
|
|
-- memberPos end
|
|
|
|
|
|
local lastMapId;
|
|
local cache_servershowNpcMap;
|
|
|
|
function MainViewMiniMap:UpdateMapAllInfo(map2d)
|
|
|
|
self.mapInited = true;
|
|
|
|
map2d = map2d or Game.Map2DManager:GetMap2D();
|
|
|
|
local nowMapId = MapManager:GetMapID();
|
|
local mapIdChanged = false;
|
|
if(nowMapId ~= lastMapId)then
|
|
lastMapId = nowMapId;
|
|
mapIdChanged = true;
|
|
end
|
|
|
|
self.mapdata = Table_Map[nowMapId];
|
|
self.mapName.text = self.mapdata.NameZh;
|
|
|
|
if(MapManager:IsRaidMode())then
|
|
self.bigMapLab.text = ZhString.MainViewMiniMap_ReturnHome;
|
|
else
|
|
self.bigMapLab.text = ZhString.MainViewMiniMap_WorldMap;
|
|
end
|
|
|
|
self.minimapWindow:Reset();
|
|
self.bigmapWindow:Reset();
|
|
if(map2d)then
|
|
tempV3:Set(375, 375, 0);
|
|
self.bigmapWindow:UpdateMapTexture(self.mapdata, tempV3, map2d);
|
|
|
|
if(self.mapdata.MapScale)then
|
|
local maxline = math.max(map2d.size.x, map2d.size.y);
|
|
maxline = maxline*(150/self.mapdata.MapScale);
|
|
tempV3:Set(maxline, maxline, 0);
|
|
self.minimapWindow:UpdateMapTexture(self.mapdata, tempV3, map2d);
|
|
end
|
|
|
|
self:UpdateQuestMapSymbol();
|
|
|
|
self:UpdateMapSealPoint();
|
|
|
|
self:RefreshScenicSpots();
|
|
|
|
self:UpdateTeamMembersPos(true);
|
|
|
|
self:UpdateGvgDroiyanInfos();
|
|
|
|
self:UpdateTeamPwsMapInfo();
|
|
|
|
self.bigmapWindow:UpdateQuestFocuses(self.focusMap);
|
|
self.minimapWindow:UpdateQuestFocuses(self.focusMap);
|
|
|
|
if(mapIdChanged)then
|
|
_TableClear(self.showNpcs, miniMapDataDeleteFunc);
|
|
|
|
if(cache_servershowNpcMap ~= nil)then
|
|
for k,v in pairs(cache_servershowNpcMap)do
|
|
self.showNpcs[k] = v;
|
|
cache_servershowNpcMap[k] = nil;
|
|
end
|
|
cache_servershowNpcMap = nil;
|
|
end
|
|
end
|
|
|
|
self.minimapWindow:UpdateServerNpcPointMap(self.showNpcs, true);
|
|
self.bigmapWindow:UpdateServerNpcPointMap(self.showNpcs, true);
|
|
end
|
|
|
|
self:ActiveNearlyBord(false);
|
|
end
|
|
|
|
function MainViewMiniMap:MapEvent()
|
|
self:AddListenEvt(MyselfEvent.TargetPositionChange, self.HandleUpdateDestPos);
|
|
self:AddListenEvt(MyselfEvent.PlaceTo, self.UpdateMyMapPos);
|
|
self:AddListenEvt(ServiceEvent.SceneGoToUserCmd, self.UpdateMyMapPos);
|
|
|
|
-- 小地圖任務氣泡提示
|
|
self:AddListenEvt(GuideEvent.ShowBubble, self.HandleMiniMapGuide);
|
|
self:AddListenEvt(GuideEvent.MiniMapAnim, self.HandleMiniMapGuideAnim);
|
|
-- 出口狀態更新
|
|
self:AddListenEvt(MiniMapEvent.ExitPointStateChange, self.HandleChangeExitPointState);
|
|
self:AddListenEvt(MiniMapEvent.ExitPointReInit, self.HandleExitPointReInit);
|
|
-- 隊友位置更新
|
|
self:AddListenEvt(ServiceEvent.SessionTeamMemberPosUpdate, self.HandleTeamMemberPosUpdate);
|
|
self:AddListenEvt(TeamEvent.MemberChangeMap, self.HandleTeamMemberUpdate);
|
|
self:AddListenEvt(TeamEvent.MemberOffline, self.HandleTeamMemberUpdate);
|
|
self:AddListenEvt(TeamEvent.MemberExitTeam, self.HandleTeamMemberUpdate);
|
|
-- boss位置更新
|
|
self:AddListenEvt(ServiceEvent.BossCmdBossPosUserCmd, self.HanldBossPosUpdate);
|
|
-- 景點位置更新
|
|
self:AddListenEvt(FunctionScenicSpot.Event.StateChanged, self.UpdateScenicSpotSymbol)
|
|
self:AddListenEvt(AdventureDataEvent.SceneItemsUpdate, self.HandleScenicSpotUpdate)
|
|
-- 地圖更新
|
|
self:AddListenEvt(SceneGlobalEvent.Map2DChanged, self.HandleUpdateMap2d)
|
|
-- 封印圖示更新
|
|
self:AddListenEvt(ServiceEvent.SceneSealUpdateSeal, self.UpdateMapSealPoint)
|
|
self:AddListenEvt(ServiceEvent.SceneSealQuerySeal, self.UpdateMapSealPoint)
|
|
-- 任務更新
|
|
self:AddListenEvt(ServiceEvent.QuestQuestList, self.HandleQuesUpdate);
|
|
self:AddListenEvt(ServiceEvent.QuestQuestUpdate, self.HandleQuesUpdate);
|
|
self:AddListenEvt(ServiceEvent.QuestQuestStepUpdate, self.HandleQuesUpdate);
|
|
self:AddListenEvt(SystemUnLockEvent.NUserNewMenu, self.HandleQuesUpdate);
|
|
self:AddListenEvt(ServiceEvent.NUserVarUpdate, self.HandleQuesUpdate);
|
|
self:AddListenEvt(QuestEvent.RemoveGuildQuestList, self.HandleQuesUpdate);
|
|
-- 任務Focus框
|
|
self:AddListenEvt(MainViewEvent.AddQuestFocus, self.HandleAddQuestFocus);
|
|
self:AddListenEvt(MainViewEvent.RemoveQuestFocus, self.HandleRemoveQuestFocus);
|
|
self:AddListenEvt(MiniMapEvent.ShowMiniMapDirEffect, self.HandlePlayQuestDirEffect);
|
|
|
|
-- 更新NPC位置
|
|
self:AddListenEvt(ServiceEvent.NUserNtfVisibleNpcUserCmd, self.HandleShowNpcPos);
|
|
|
|
-- 附近玩家更新
|
|
self:AddListenEvt(SceneUserEvent.SceneAddRoles, self.HandleAddRoles)
|
|
self:AddListenEvt(SceneUserEvent.SceneRemoveRoles, self.HandleRemoveRoles);
|
|
|
|
-- 北森尋寶(蘋果樹位置更新)
|
|
self:AddListenEvt(ServiceEvent.NUserTreeListUserCmd, self.HandleTreeListUpdate);
|
|
|
|
-- B格貓入侵 大貓的位置
|
|
self:AddListenEvt(ServiceEvent.NUserBCatActivityStartUserCmd, self.HandleUpdateBCatPos);
|
|
self:AddListenEvt(ServiceEvent.ActivityCmdBCatUFOPosActCmd, self.HandleUpdateBCatPos);
|
|
|
|
-- 移動景點ID begin
|
|
self:AddListenEvt(MiniMapEvent.CreatureScenicChange, self.HandleCreatureScenicChange);
|
|
self:AddListenEvt(MiniMapEvent.CreatureScenicAdd, self.HandleCreatureScenicAdd);
|
|
self:AddListenEvt(MiniMapEvent.CreatureScenicRemove, self.HandleCreatureScenicRemove);
|
|
-- 移動景點ID end
|
|
|
|
-- 小地圖引導 begin
|
|
self:AddListenEvt(GuideEvent.MapGuide_Change, self.HandleMapGuide_Change);
|
|
-- 小地圖引導 end
|
|
|
|
-- 更新地圖玩家位置
|
|
self:AddDispatcherEvt(CreatureEvent.Player_CampChange, self.HandlePlayerCampChange);
|
|
self:AddDispatcherEvt(CreatureEvent.Hiding_Change, self.HandlePlayerHidingChange);
|
|
|
|
-- 公會決戰小地圖資訊
|
|
self:AddListenEvt(ServiceEvent.FuBenCmdGvgMetalDieFubenCmd, self.UpdateGvgDroiyanInfos);
|
|
self:AddListenEvt(ServiceEvent.FuBenCmdSuperGvgSyncFubenCmd, self.UpdateGvgDroiyanInfos);
|
|
self:AddListenEvt(ServiceEvent.FuBenCmdGvgTowerUpdateFubenCmd, self.UpdateGvgDroiyanInfos);
|
|
self:AddListenEvt(GVGEvent.GVG_FinalFightLaunch, self.UpdateGvgDroiyanInfos);
|
|
self:AddListenEvt(GVGEvent.GVG_FinalFightShutDown, self.ClearGvgDroiyanInfos);
|
|
|
|
-- 波利大亂鬥顯示掉落物品
|
|
self:AddListenEvt(PVPEvent.PVP_PoringFightLaunch, self.ShowPoringFightMapItems);
|
|
self:AddListenEvt(PVPEvent.PVP_PoringFightShutdown, self.ClearPoringFightMapItems);
|
|
self:AddListenEvt(ServiceEvent.MapAddMapItem, self.HandleAddMapItem);
|
|
self:AddListenEvt(ServiceEvent.MapPickupItem, self.HandelPickupItem);
|
|
|
|
-- 蝴蝶翅膀和蒼蠅翅膀快捷按鈕
|
|
self:AddListenEvt(ItemEvent.ItemUpdate, self.RefreshButterflyAndFlyButtons);
|
|
|
|
-- 組隊競技戰小地圖
|
|
self:AddListenEvt(PVPEvent.TeamPws_Launch, self.UpdateTeamPwsMapInfo);
|
|
self:AddListenEvt(PVPEvent.TeamPws_ShutDown, self.ClearAllTeamPwsMapInfo);
|
|
self:AddListenEvt(PVPEvent.TeamPws_PlayerBuffBallChange, self.HandleTeamPwsBallChange);
|
|
|
|
self:AddListenEvt(SceneUserEvent.SceneAddNpcs, self.HandleAddNpcs)
|
|
self:AddListenEvt(SceneUserEvent.SceneRemoveNpcs, self.HandleRemoveNpcs);
|
|
end
|
|
|
|
function MainViewMiniMap:HandleUpdateMap2d(note)
|
|
self:UpdateMapAllInfo(note.body);
|
|
end
|
|
|
|
function MainViewMiniMap:HandleAddRoles(note)
|
|
if(self.nowNearlyTog == 1)then
|
|
self:UpdateNearlyCreature(1);
|
|
end
|
|
|
|
local players = note.body;
|
|
if(players)then
|
|
for _,player in pairs(players)do
|
|
self:UpdatePlayerSymbolData(player.data.id);
|
|
end
|
|
end
|
|
|
|
self:UpdatePlayerSymbolsPos();
|
|
end
|
|
|
|
function MainViewMiniMap:HandleRemoveRoles(note)
|
|
if(self.nowNearlyTog == 1)then
|
|
self:UpdateNearlyCreature(1);
|
|
end
|
|
|
|
local playerids = note.body;
|
|
if(playerids)then
|
|
for _,playerid in pairs(playerids)do
|
|
local miniMapData = self.playerMap[playerid];
|
|
if(miniMapData)then
|
|
miniMapData:Destroy();
|
|
end
|
|
self.playerMap[playerid] = nil;
|
|
end
|
|
end
|
|
|
|
self:UpdatePlayerSymbolsPos();
|
|
end
|
|
|
|
function MainViewMiniMap:HandleUpdateDestPos(note)
|
|
local destPos = note.body;
|
|
self.bigmapWindow:UpdateDestPos(destPos);
|
|
self.minimapWindow:UpdateDestPos(destPos);
|
|
end
|
|
|
|
function MainViewMiniMap:UpdateMyMapPos(note)
|
|
self.bigmapWindow:UpdateMyPos(true);
|
|
self.minimapWindow:UpdateMyPos(true);
|
|
end
|
|
|
|
|
|
-- minimap Guide begin
|
|
function MainViewMiniMap:ShutDownGuideAnim()
|
|
if(self.miniMapGuideAnim)then
|
|
self.miniMapGuideAnim:ShutDown();
|
|
self.miniMapGuideAnim = nil;
|
|
end
|
|
end
|
|
|
|
function MainViewMiniMap:HandleMiniMapGuideAnim(note)
|
|
if(note.body)then
|
|
if(not self.mapBord.activeInHierarchy)then
|
|
self:ActiveMapBord(true);
|
|
end
|
|
self:ShutDownGuideAnim();
|
|
local questData, bubbleId = note.body.questData, note.body.bubbleId;
|
|
self.miniMapGuideAnim = MiniMapGuideAnim.new(self.bigmapWindow);
|
|
self.enlargeSprite.spriteName = "com_btn_narrow";
|
|
self.miniMapGuideAnim:Launch(questData, bubbleId, self.bubbleStick);
|
|
self.miniMapGuideAnim:SetEndCall(MainViewMiniMap._MiniMapAnimEndCall, self);
|
|
self.miniMapGuideAnim:SetShutDownCall(MainViewMiniMap._MiniMapAnimShutDownCall, self);
|
|
end
|
|
end
|
|
|
|
function MainViewMiniMap:_MiniMapAnimEndCall(miniMapGuideAnim)
|
|
if(not miniMapGuideAnim)then
|
|
return;
|
|
end
|
|
|
|
local questData = QuestProxy.Instance:getQuestDataByIdAndType( miniMapGuideAnim.questId );
|
|
if(questData)then
|
|
QuestProxy.Instance:notifyQuestState(questData.id, questData.staticData.FinishJump);
|
|
end
|
|
end
|
|
|
|
function MainViewMiniMap:_MiniMapAnimShutDownCall(miniMapGuideAnim)
|
|
if(not miniMapGuideAnim)then
|
|
return;
|
|
end
|
|
|
|
self:EnLargeBigMap(true, true);
|
|
|
|
if(not miniMapGuideAnim.isEnd)then
|
|
local questData = QuestProxy.Instance:getQuestDataByIdAndType( miniMapGuideAnim.questId );
|
|
if(questData)then
|
|
QuestProxy.Instance:notifyQuestState(questData.id, questData.staticData.FailJump);
|
|
end
|
|
end
|
|
|
|
self.miniMapGuideAnim = nil;
|
|
end
|
|
|
|
function MainViewMiniMap:HandleMiniMapGuide(note)
|
|
local bubbleid = note.body;
|
|
if(not self.bubbleStick)then
|
|
end
|
|
if(bubbleid == BubbleID.MapBubbleID)then
|
|
self:ActiveMapBord(true);
|
|
tempV3:Set(-236.8, -365);
|
|
self.bubbleStick.transform.localPosition = tempV3;
|
|
TipManager.Instance:ShowBubbleTipById(bubbleid, self.bubbleStick, NGUIUtil.AnchorSide.Center, {50, 10});
|
|
elseif(bubbleid == BubbleID.MapQuestId or
|
|
bubbleid == BubbleID.MapQuestGuideId1 or
|
|
bubbleid == BubbleID.MapQuestGuideId2)then
|
|
tempV3:Set(-236.8, -365);
|
|
self.bubbleStick.transform.localPosition = tempV3;
|
|
TipManager.Instance:ShowBubbleTipById(bubbleid, self.bubbleStick, NGUIUtil.AnchorSide.Center, {50, 10});
|
|
end
|
|
end
|
|
-- minimap Guide end
|
|
|
|
|
|
function MainViewMiniMap:HandleQuesUpdate(note)
|
|
self:UpdateQuestMapSymbol();
|
|
end
|
|
|
|
function MainViewMiniMap:HandleChangeExitPointState(note)
|
|
local id = note.body.id;
|
|
local state = note.body.state;
|
|
self.minimapWindow:UpdateExitPointMapState(id, state);
|
|
self.bigmapWindow:UpdateExitPointMapState(id, state);
|
|
end
|
|
|
|
function MainViewMiniMap:HandleExitPointReInit(note)
|
|
self.minimapWindow:UpdateExitPoints();
|
|
self.bigmapWindow:UpdateExitPoints();
|
|
end
|
|
|
|
function MainViewMiniMap:HandleTeamMemberUpdate(note)
|
|
local nowMapid = MapManager:GetMapID();
|
|
local restirct = Table_MapRaid[nowMapid] and Table_MapRaid[nowMapid].Restrict;
|
|
if(restirct and restirct == 1)then
|
|
return;
|
|
end
|
|
|
|
local member = note.body;
|
|
if(member)then
|
|
self:UpdateTeamMemberPos(member.id, true);
|
|
self:HandlePlayerHidingChange(member.id);
|
|
end
|
|
end
|
|
|
|
function MainViewMiniMap:HandleTeamMemberPosUpdate(note)
|
|
local id = note.body.id;
|
|
self:UpdateTeamMemberPos(id);
|
|
end
|
|
|
|
function MainViewMiniMap:HanldBossPosUpdate(note)
|
|
local pos = note.body;
|
|
if(pos)then
|
|
local x,y,z = pos.x or 0, pos.y or 0, pos.z or 0;
|
|
pos = Vector3(x,y,z);
|
|
self.minimapWindow:UpdateBossSymbol(pos);
|
|
self.bigmapWindow:UpdateBossSymbol(pos);
|
|
end
|
|
end
|
|
|
|
function MainViewMiniMap:HandleShowNpcPos(note)
|
|
local showNpcs = note.body;
|
|
|
|
local data = note.body;
|
|
if(data)then
|
|
local cacheMap;
|
|
if(self.mapInited)then
|
|
cacheMap = self.showNpcs;
|
|
else
|
|
cache_servershowNpcMap = {};
|
|
cacheMap = cache_servershowNpcMap;
|
|
end
|
|
|
|
local showNpcs, type = data.npcs, data.type;
|
|
if(type == 1)then
|
|
local npc, scenePos;
|
|
for i=1,#showNpcs do
|
|
npc = showNpcs[i];
|
|
|
|
local npcData = Table_Npc[ npc.npcid ];
|
|
if(npcData and npcData.MapIcon)then
|
|
local createNpcID = "Server_ShowNpc_" .. npc.npcid .. "_" .. tostring(npc.uniqueid);
|
|
local miniMapData = cacheMap[ createNpcID ];
|
|
if(miniMapData == nil)then
|
|
miniMapData = MiniMapData.CreateAsTable(createNpcID);
|
|
cacheMap[ createNpcID ] = miniMapData;
|
|
|
|
scenePos = npc.pos;
|
|
miniMapData:SetPos(scenePos.x/1000, scenePos.y/1000, scenePos.z/1000);
|
|
|
|
miniMapData:SetParama("Symbol", npcData.MapIcon);
|
|
end
|
|
end
|
|
end
|
|
self.minimapWindow:UpdateServerNpcPointMap(cacheMap, false);
|
|
self.bigmapWindow:UpdateServerNpcPointMap(cacheMap, false);
|
|
elseif(type == 0)then
|
|
for i=1,#showNpcs do
|
|
local createNpcID = "Server_ShowNpc_" .. showNpcs[i].npcid .. "_" .. tostring(showNpcs[i].uniqueid);
|
|
local miniMapData = cacheMap[createNpcID];
|
|
if(miniMapData)then
|
|
miniMapData:Destroy();
|
|
cacheMap[createNpcID] = nil;
|
|
|
|
self.minimapWindow:RemoveServerNpcPointMap(createNpcID);
|
|
self.bigmapWindow:RemoveServerNpcPointMap(createNpcID);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function MainViewMiniMap:RefreshScenicSpots()
|
|
self:UpdateSceneSpots(FunctionScenicSpot.Me():GetAllScenicSpot());
|
|
end
|
|
|
|
function MainViewMiniMap:UpdateSceneSpots( validScenicSpots )
|
|
_TableClearByDeleter(self.spotDatas, miniMapDataDeleteFunc);
|
|
|
|
if(MapManager:IsPVPMode_TeamPws() or validScenicSpots == nil)then
|
|
self.minimapWindow:UpdateScenicSpotSymbol(self.spotDatas);
|
|
self.bigmapWindow:UpdateScenicSpotSymbol(self.spotDatas);
|
|
return;
|
|
end
|
|
|
|
for k,v in pairs(validScenicSpots) do
|
|
if(v.ID)then
|
|
self:_UpdateSceneSpot(v);
|
|
else
|
|
for i=1,#v do
|
|
if(v[i].ID)then
|
|
self:_UpdateSceneSpot(v[i]);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
self.minimapWindow:UpdateScenicSpotSymbol(self.spotDatas);
|
|
self.bigmapWindow:UpdateScenicSpotSymbol(self.spotDatas);
|
|
end
|
|
|
|
function MainViewMiniMap:_UpdateSceneSpot(scenicSpot, forceUpdate)
|
|
if(MapManager:IsPVPMode_TeamPws())then
|
|
return;
|
|
end
|
|
|
|
local isDiaplay, mapStr = AdventureDataProxy.Instance:IsSceneryHasTakePic(scenicSpot.ID);
|
|
|
|
if(isDiaplay)then
|
|
mapStr = "map_Lookout";
|
|
else
|
|
mapStr = "map_Lookout_lock";
|
|
end
|
|
|
|
local spotConfig = Table_Viewspot[scenicSpot.ID];
|
|
|
|
if(spotConfig and (spotConfig.Type == 1 or spotConfig.Type == 3))then
|
|
local p = scenicSpot.position;
|
|
if(p ~= nil)then
|
|
local guid = scenicSpot.ID;
|
|
if(scenicSpot.guid)then
|
|
guid = scenicSpot.ID .. "_" .. scenicSpot.guid;
|
|
end
|
|
local spotData = self.spotDatas[guid];
|
|
if(spotData == nil)then
|
|
spotData = MiniMapData.CreateAsTable(guid);
|
|
self.spotDatas[guid] = spotData;
|
|
end
|
|
spotData:SetPos(p[1], p[2], p[3]);
|
|
spotData:SetParama("Symbol", mapStr);
|
|
end
|
|
end
|
|
|
|
if(forceUpdate)then
|
|
self.minimapWindow:UpdateScenicSpotSymbol(self.spotDatas);
|
|
self.bigmapWindow:UpdateScenicSpotSymbol(self.spotDatas);
|
|
end
|
|
end
|
|
|
|
function MainViewMiniMap:_RemoveSceneSpot(scenicSpot, forceUpdate)
|
|
local ID, guid = scenicSpot.ID, scenicSpot.guid;
|
|
if(guid)then
|
|
guid = ID .. "_" .. guid;
|
|
end
|
|
|
|
local spotData = self.spotDatas[guid];
|
|
if(spotData ~= nil)then
|
|
spotData:Destroy();
|
|
end
|
|
self.spotDatas[guid] = nil;
|
|
|
|
if(forceUpdate)then
|
|
self.minimapWindow:UpdateScenicSpotSymbol(self.spotDatas);
|
|
self.bigmapWindow:UpdateScenicSpotSymbol(self.spotDatas);
|
|
end
|
|
end
|
|
|
|
function MainViewMiniMap:HandleCreatureScenicChange(note)
|
|
local spotDatas = note.body;
|
|
if(spotDatas)then
|
|
for i=1,#spotDatas do
|
|
self:_UpdateSceneSpot(spotDatas[i]);
|
|
end
|
|
self.minimapWindow:UpdateScenicSpotSymbol(self.spotDatas);
|
|
self.bigmapWindow:UpdateScenicSpotSymbol(self.spotDatas);
|
|
end
|
|
end
|
|
function MainViewMiniMap:HandleCreatureScenicAdd(note)
|
|
local sceneSpots = note.body;
|
|
for i=1,#sceneSpots do
|
|
self:_UpdateSceneSpot(sceneSpots[i]);
|
|
end
|
|
self.minimapWindow:UpdateScenicSpotSymbol(self.spotDatas);
|
|
self.bigmapWindow:UpdateScenicSpotSymbol(self.spotDatas);
|
|
end
|
|
function MainViewMiniMap:HandleCreatureScenicRemove(note)
|
|
self:_RemoveSceneSpot(note.body, true);
|
|
end
|
|
|
|
-- 更新景點圖示
|
|
function MainViewMiniMap:UpdateScenicSpotSymbol(note)
|
|
self:UpdateSceneSpots(note.body.validScenicSpots);
|
|
end
|
|
|
|
function MainViewMiniMap:HandleScenicSpotUpdate(note)
|
|
local updateSceneIds = note.body;
|
|
for i=1,#updateSceneIds do
|
|
local id = updateSceneIds[i];
|
|
if(id and self.spotDatas[id])then
|
|
self.spotDatas[id]:SetParama("Symbol", "map_Lookout");
|
|
end
|
|
end
|
|
self.minimapWindow:UpdateScenicSpotSymbol(self.spotDatas);
|
|
self.bigmapWindow:UpdateScenicSpotSymbol(self.spotDatas);
|
|
end
|
|
|
|
-- 更新封印圖示
|
|
function MainViewMiniMap:UpdateMapSealPoint()
|
|
local nowMapId = MapManager:GetMapID();
|
|
local data = SealProxy.Instance:GetSealData(nowMapId);
|
|
if(data)then
|
|
if(not self.sealDatasMap)then
|
|
self.sealDatasMap = {};
|
|
else
|
|
_TableClearByDeleter(self.sealDatasMap, miniMapDataDeleteFunc);
|
|
end
|
|
|
|
for k,v in pairs(data.itemMap)do
|
|
local symbol = v.issealing and "map_whirlpool2" or "map_whirlpool";
|
|
local sealMapData = self.sealDatasMap[k];
|
|
if(sealMapData == nil)then
|
|
sealMapData = MiniMapData.CreateAsTable(k);
|
|
self.sealDatasMap[k] = sealMapData;
|
|
end
|
|
sealMapData:SetPos(v.pos[1], v.pos[2], v.pos[3]);
|
|
sealMapData:SetParama("Symbol", symbol);
|
|
end
|
|
|
|
self.minimapWindow:UpdateSealSymbol(self.sealDatasMap, true);
|
|
self.bigmapWindow:UpdateSealSymbol(self.sealDatasMap, true);
|
|
end
|
|
end
|
|
|
|
-- 北森尋寶
|
|
function MainViewMiniMap:HandleTreeListUpdate(note)
|
|
local treePoints = note.body.updates;
|
|
local dels = note.body.dels;
|
|
if(treePoints~=nil)then
|
|
if(not self.treeMapDatasMap)then
|
|
self.treeMapDatasMap = {};
|
|
else
|
|
_TableClearByDeleter(self.treeMapDatasMap, miniMapDataDeleteFunc);
|
|
end
|
|
for i=1,#treePoints do
|
|
local single = treePoints[i];
|
|
local treeMapData = self.treeMapDatasMap[single.id];
|
|
if(treeMapData == nil)then
|
|
treeMapData = MiniMapData.CreateAsTable(single.id);
|
|
self.treeMapDatasMap[single.id] = treeMapData;
|
|
end
|
|
treeMapData:SetPos(single.pos.x/1000, single.pos.y/1000, single.pos.z/1000);
|
|
treeMapData:SetParama("Symbol", "map_plant");
|
|
end
|
|
self.bigmapWindow:UpdateTreePoints(self.treeMapDatasMap, false);
|
|
self.minimapWindow:UpdateTreePoints(self.treeMapDatasMap, false);
|
|
end
|
|
if(dels~=nil)then
|
|
for i=1,#dels do
|
|
self.bigmapWindow:RemoveTreePoint(dels[i]);
|
|
self.minimapWindow:RemoveTreePoint(dels[i]);
|
|
end
|
|
end
|
|
end
|
|
|
|
function MainViewMiniMap:HandleUpdateBCatPos(note)
|
|
local bigCatActivityData = FunctionActivity.Me():GetActivityData( ACTIVITYTYPE.EACTIVITYTYPE_BCAT );
|
|
local mapId = bigCatActivityData and bigCatActivityData.mapid;
|
|
local serverPos = note.body.pos;
|
|
if(serverPos and MapManager:GetMapID() == mapId)then
|
|
tempV3:Set(serverPos.x/1000, serverPos.y/1000, serverPos.z/1000);
|
|
self.bigmapWindow:UpdateBigCatSymbol(tempV3);
|
|
self.minimapWindow:UpdateBigCatSymbol(tempV3);
|
|
else
|
|
self.bigmapWindow:UpdateBigCatSymbol();
|
|
self.minimapWindow:UpdateBigCatSymbol();
|
|
end
|
|
end
|
|
|
|
function MainViewMiniMap:HandleAddQuestFocus(note)
|
|
if(not self.focusMap)then
|
|
self.focusMap = {};
|
|
end
|
|
|
|
local questId, pos = note.body[1], note.body[2];
|
|
|
|
local focusData = self.focusMap[questId];
|
|
if(not focusData)then
|
|
focusData = MiniMapData.CreateAsTable(questId);
|
|
focusData:SetParama("questId", questId);
|
|
|
|
self.focusMap[questId] = focusData;
|
|
end
|
|
focusData:SetPos(pos[1], pos[2], pos[3]);
|
|
|
|
self.bigmapWindow:UpdateQuestFocuses(self.focusMap);
|
|
self.minimapWindow:UpdateQuestFocuses(self.focusMap);
|
|
|
|
end
|
|
|
|
function MainViewMiniMap:HandleRemoveQuestFocus(note)
|
|
local questId = note.body;
|
|
|
|
if(questId and self.focusMap)then
|
|
local focusData = self.focusMap[questId];
|
|
if(focusData)then
|
|
focusData:Destroy();
|
|
end
|
|
self.focusMap[questId] = nil;
|
|
|
|
self.bigmapWindow:RemoveQuestFocusByQuestId(questId);
|
|
self.minimapWindow:RemoveQuestFocusByQuestId(questId);
|
|
end
|
|
end
|
|
|
|
function MainViewMiniMap:HandlePlayQuestDirEffect(note)
|
|
local questId = note.body;
|
|
if(questId)then
|
|
self.minimapWindow:PlayFocusFrameEffect( questId );
|
|
end
|
|
end
|
|
|
|
function MainViewMiniMap:HandlePlayerCampChange(player)
|
|
if(player)then
|
|
self:_UpdatePlayerSymbolData(player);
|
|
self:UpdatePlayerSymbolsPos();
|
|
end
|
|
end
|
|
|
|
function MainViewMiniMap:HandlePlayerHidingChange(playerid)
|
|
local player = NSceneUserProxy.Instance:Find(playerid);
|
|
if(player)then
|
|
self:_UpdatePlayerSymbolData(player);
|
|
self:UpdatePlayerSymbolsPos();
|
|
end
|
|
end
|
|
|
|
function MainViewMiniMap:UpdatePlayerSymbolData(playerid)
|
|
if(playerid == Game.Myself.data.id)then
|
|
return;
|
|
end
|
|
|
|
local player = NSceneUserProxy.Instance:Find(playerid);
|
|
self:_UpdatePlayerSymbolData(player);
|
|
|
|
end
|
|
|
|
function MainViewMiniMap:_GetScenePlayerSymbolName( player )
|
|
local playerid = player.data.id;
|
|
local playerSymbolName = nil;
|
|
if(player~=Game.Myself and not _TeamProxy:IsInMyTeam(playerid))then
|
|
local tag = player.data.userdata:Get(UDEnum.PVP_COLOR);
|
|
local symbolMap = MapManager:IsGvgMode_Droiyan() and GvgDroiyan_Player_Symbol_Name_Map or Player_Symbol_Name_Map;
|
|
if (Game.MapManager:IsPVPMode_PoringFight()) then
|
|
playerSymbolName = "map_green";
|
|
elseif(tag~=nil and symbolMap[tag])then
|
|
local myTeam = _TeamProxy.myTeam;
|
|
if(myTeam == nil or myTeam:GetMemberByGuid(player.data.id) == nil)then
|
|
playerSymbolName = symbolMap[tag];
|
|
end
|
|
else
|
|
local camp = player.data:GetCamp();
|
|
if(camp == RoleDefines_Camp.ENEMY)then
|
|
playerSymbolName = "map_dot";
|
|
end
|
|
end
|
|
end
|
|
|
|
local pwsSymbol = Func_GetTeamPwsBallSymbol(player);
|
|
if(pwsSymbol)then
|
|
playerSymbolName = pwsSymbol;
|
|
end
|
|
|
|
local hideValue = player.data.props.Hiding:GetValue();
|
|
if(hideValue > 0)then
|
|
playerSymbolName = nil;
|
|
end
|
|
return playerSymbolName;
|
|
end
|
|
|
|
function MainViewMiniMap:_UpdatePlayerSymbolData(player)
|
|
if(player == nil)then
|
|
return;
|
|
end
|
|
if(_TeamProxy:IsInMyTeam(player.data.id))then
|
|
return;
|
|
end
|
|
|
|
local playerid = player.data.id;
|
|
local playerSymbolName = self:_GetScenePlayerSymbolName(player);
|
|
local miniMapData = self.playerMap[playerid];
|
|
if(playerSymbolName ~= nil)then
|
|
if(miniMapData == nil)then
|
|
miniMapData = MiniMapData.CreateAsTable(playerid);
|
|
self.playerMap[playerid] = miniMapData;
|
|
end
|
|
|
|
local pos = player:GetPosition()
|
|
if(pos)then
|
|
miniMapData:SetPos(pos[1], pos[2], pos[3]);
|
|
end
|
|
miniMapData:SetParama("Symbol", playerSymbolName);
|
|
miniMapData:SetParama("depth", 4);
|
|
else
|
|
if(miniMapData~=nil)then
|
|
miniMapData:Destroy();
|
|
self.playerMap[playerid] = nil;
|
|
end
|
|
end
|
|
end
|
|
|
|
function MainViewMiniMap:UpdatePlayerSymbolsPos()
|
|
local hasPlayer = false;
|
|
for playerid, miniMapData in pairs(self.playerMap)do
|
|
local player = NSceneUserProxy.Instance:Find(playerid);
|
|
if(player~=nil)then
|
|
local pos = player:GetPosition()
|
|
if(pos)then
|
|
miniMapData:SetPos(pos[1], pos[2], pos[3]);
|
|
end
|
|
else
|
|
local miniMapData = self.playerMap[playerid]
|
|
self.playerMap[playerid] = nil;
|
|
|
|
if(miniMapData)then
|
|
miniMapData:Destroy();
|
|
end
|
|
end
|
|
|
|
hasPlayer = true;
|
|
end
|
|
|
|
self.minimapWindow:UpdatePlayerPoses(self.playerMap, true);
|
|
self.bigmapWindow:UpdatePlayerPoses(self.playerMap, true);
|
|
|
|
if(hasPlayer == true)then
|
|
if(self.playerPosCheck == nil)then
|
|
self.playerPosCheck = TimeTickManager.Me():CreateTick(0,1000,self.UpdatePlayerSymbolsPos, self, 2)
|
|
end
|
|
else
|
|
if(self.playerPosCheck)then
|
|
TimeTickManager.Me():ClearTick(self, 2)
|
|
self.playerPosCheck = nil;
|
|
end
|
|
end
|
|
end
|
|
|
|
function MainViewMiniMap:HandleMapGuide_Change(note)
|
|
FunctionGuide.Me():AttachGuideEffect(self.bigMapButton, Guild_RemoveType.Click);
|
|
FunctionGuide.Me():AttachGuideEffect(self.miniMapButton, Guild_RemoveType.Time | Guild_RemoveType.Click);
|
|
end
|
|
|
|
|
|
-- GvgDroiyan Update
|
|
local GameConfig_GvgDroiyan = GameConfig.GvgDroiyan;
|
|
local RobPlatformId_Prefix = "RobPlatform_";
|
|
local BornGorgeousMetalId_Prefix = "BornGorgeousMetal_";
|
|
local GvgDroiyan_SymbolMap = {
|
|
[0] = "gvg_bg_gray",
|
|
[1] = "gvg_bg_red",
|
|
[2] = "gvg_bg_blue",
|
|
[3] = "gvg_bg_purple",
|
|
[4] = "gvg_bg_green",
|
|
}
|
|
function MainViewMiniMap:UpdateGvgDroiyanInfos(note)
|
|
if(not Game.MapManager:IsGvgMode_Droiyan())then
|
|
self:ClearGvgDroiyanInfos();
|
|
return;
|
|
end
|
|
|
|
_TableClearByDeleter(self.gvgDroiyanMap, miniMapDataDeleteFunc);
|
|
|
|
local robPlatform = GameConfig_GvgDroiyan and GameConfig_GvgDroiyan.RobPlatform;
|
|
for index,v in pairs(robPlatform)do
|
|
local pos = v.pos;
|
|
local map_guid = RobPlatformId_Prefix .. index;
|
|
|
|
local miniMapData = MiniMapData.CreateAsTable( map_guid );
|
|
miniMapData:SetPos(pos[1], pos[2], pos[3]);
|
|
miniMapData:SetParama("Symbol", GvgDroiyan_SymbolMap[0]);
|
|
self.gvgDroiyanMap[ map_guid ] = miniMapData;
|
|
end
|
|
local towersMap = _SuperGvgProxy:GetTowersMap() or _EmptyTable;
|
|
for k,clientGvgTowerData in pairs(towersMap)do
|
|
local index = _SuperGvgProxy:GetIndexByGuildId(clientGvgTowerData.owner_guild);
|
|
if(index and index ~= 0)then
|
|
local map_guid = RobPlatformId_Prefix .. tostring(clientGvgTowerData.etype);
|
|
local miniMapData = self.gvgDroiyanMap[map_guid];
|
|
if(miniMapData ~= nil)then
|
|
miniMapData:SetParama("Symbol", GvgDroiyan_SymbolMap[index]);
|
|
end
|
|
end
|
|
end
|
|
|
|
local bornGorgeousMetal = GameConfig_GvgDroiyan and GameConfig_GvgDroiyan.BornGorgeousMetal;
|
|
for index, v in pairs(bornGorgeousMetal)do
|
|
local pos = v.pos;
|
|
local map_guid = BornGorgeousMetalId_Prefix .. index;
|
|
|
|
local miniMapData = MiniMapData.CreateAsTable( map_guid );
|
|
miniMapData:SetPos(pos[1], pos[2], pos[3]);
|
|
miniMapData:SetParama("Symbol", GvgDroiyan_SymbolMap[index]);
|
|
|
|
self.gvgDroiyanMap[ map_guid ] = miniMapData;
|
|
end
|
|
local guildsMap = _SuperGvgProxy:GetGuildsMap();
|
|
for k,clientGvgGuildInfo in pairs(guildsMap)do
|
|
local map_guid = BornGorgeousMetalId_Prefix .. clientGvgGuildInfo.index;
|
|
local miniMapData = self.gvgDroiyanMap[map_guid];
|
|
if(miniMapData ~= nil)then
|
|
miniMapData:SetParama("metal_live", clientGvgGuildInfo.metal_live and 1 or 0);
|
|
-- if(not clientGvgGuildInfo.metal_live)then
|
|
-- miniMapData:SetParama("Symbol", GvgDroiyan_SymbolMap[0]);
|
|
-- end
|
|
end
|
|
end
|
|
|
|
self.minimapWindow:UpdateGvgDroiyanInfos(self.gvgDroiyanMap, true);
|
|
self.bigmapWindow:UpdateGvgDroiyanInfos(self.gvgDroiyanMap, true);
|
|
end
|
|
|
|
function MainViewMiniMap:ClearGvgDroiyanInfos()
|
|
_TableClearByDeleter(self.gvgDroiyanMap, miniMapDataDeleteFunc);
|
|
|
|
self.minimapWindow:UpdateGvgDroiyanInfos(self.gvgDroiyanMap, true);
|
|
self.bigmapWindow:UpdateGvgDroiyanInfos(self.gvgDroiyanMap, true);
|
|
self:ActiveGvgFinalFightTip(false);
|
|
end
|
|
|
|
--波利大亂鬥顯示掉落物品
|
|
function MainViewMiniMap:ShowPoringFightMapItems()
|
|
_TableClearByDeleter(self.poringFightDropMap, miniMapDataDeleteFunc);
|
|
if (SceneItemProxy.Instance ~= nil) then
|
|
for id,data in pairs(SceneItemProxy.Instance.userMap) do
|
|
if (data.staticData.id == 157) then
|
|
local miniMapData = MiniMapData.CreateAsTable(id);
|
|
local pos = data.pos;
|
|
miniMapData:SetPos(pos.x, pos.y, pos.z);
|
|
miniMapData:SetParama("Symbol", "map_apple");
|
|
self.poringFightDropMap[id] = miniMapData;
|
|
end
|
|
end
|
|
end
|
|
self.minimapWindow:UpdatePoringFightMapItems(self.poringFightDropMap, true);
|
|
self.bigmapWindow:UpdatePoringFightMapItems(self.poringFightDropMap, true);
|
|
end
|
|
|
|
function MainViewMiniMap:ClearPoringFightMapItems()
|
|
_TableClearByDeleter(self.poringFightDropMap, miniMapDataDeleteFunc);
|
|
self.minimapWindow:UpdatePoringFightMapItems(self.poringFightDropMap, true);
|
|
self.bigmapWindow:UpdatePoringFightMapItems(self.poringFightDropMap, true);
|
|
end
|
|
|
|
function MainViewMiniMap:HandleAddMapItem(note)
|
|
if (not Game.MapManager:IsPVPMode_PoringFight() or not SceneItemProxy.Instance) then
|
|
return
|
|
end
|
|
|
|
local items = note.body and note.body.items
|
|
if (not items) then return end
|
|
for i = 1, #items do
|
|
local item = SceneItemProxy.Instance.userMap[items[i].guid]
|
|
if (item and item.staticData.id == 157 and not self.poringFightDropMap[item.id]) then
|
|
local miniMapData = MiniMapData.CreateAsTable(item.id);
|
|
local pos = item.pos;
|
|
miniMapData:SetPos(pos.x, pos.y, pos.z);
|
|
miniMapData:SetParama("Symbol", "map_apple");
|
|
self.poringFightDropMap[item.id] = miniMapData;
|
|
end
|
|
end
|
|
self.minimapWindow:UpdatePoringFightMapItems(self.poringFightDropMap, true);
|
|
self.bigmapWindow:UpdatePoringFightMapItems(self.poringFightDropMap, true);
|
|
end
|
|
|
|
function MainViewMiniMap:HandelPickupItem(note)
|
|
if (not Game.MapManager:IsPVPMode_PoringFight() or not SceneItemProxy.Instance) then
|
|
return
|
|
end
|
|
|
|
local id = note.body and note.body.itemguid
|
|
if (self.poringFightDropMap[id]) then
|
|
self.poringFightDropMap[id]:Destroy()
|
|
self.poringFightDropMap[id] = nil
|
|
self.minimapWindow:UpdatePoringFightMapItems(self.poringFightDropMap, true);
|
|
self.bigmapWindow:UpdatePoringFightMapItems(self.poringFightDropMap, true);
|
|
end
|
|
end
|
|
|
|
--揹包物品更新時重新整理蝴蝶翅膀和蒼蠅翅膀按鈕
|
|
function MainViewMiniMap:RefreshButterflyAndFlyButtons()
|
|
self:RefreshButtonStatus(self.UseButterflyButtonInfo)
|
|
self:RefreshButtonStatus(self.UseFlyButtonInfo)
|
|
end
|
|
|
|
--重新整理蝴蝶按鈕或蒼蠅按鈕狀態
|
|
function MainViewMiniMap:RefreshButtonStatus(go)
|
|
local item = BagProxy.Instance:GetItemByStaticID(go.itemID, BagProxy.BagType.MainBag)
|
|
if (nil == item) then
|
|
item = BagProxy.Instance:GetItemByStaticID(go.itemID, BagProxy.BagType.Temp)
|
|
end
|
|
if (nil == item) then
|
|
self:SetTextureGrey(go.base)
|
|
self:SetTextureGrey(go.icon)
|
|
else
|
|
self:SetTextureWhite(go.base)
|
|
self:SetTextureWhite(go.icon)
|
|
end
|
|
end
|
|
|
|
--使用蝴蝶翅膀或蒼蠅翅膀
|
|
function MainViewMiniMap:TryUseButterflyOrFly(go)
|
|
local item = BagProxy.Instance:GetItemByStaticID(go.itemID, BagProxy.BagType.MainBag)
|
|
if (nil == item) then
|
|
item = BagProxy.Instance:GetItemByStaticID(go.itemID, BagProxy.BagType.Temp)
|
|
end
|
|
if (nil ~= item) then
|
|
local dont = LocalSaveProxy.Instance:GetDontShowAgain(go.msgID)
|
|
if (nil == dont) then
|
|
MsgManager.DontAgainConfirmMsgByID(go.msgID, function() FunctionItemFunc.TryUseItem(item) end)
|
|
else
|
|
FunctionItemFunc.TryUseItem(item)
|
|
end
|
|
else
|
|
item = Table_Item[go.itemID]
|
|
if (nil ~= item) then
|
|
MsgManager.ShowMsgByID(go.msgDoNotHaveID, item.NameZh)
|
|
else
|
|
redlog("Cannot Find Item Data: " .. go.itemID)
|
|
end
|
|
end
|
|
self:RefreshButtonStatus(go)
|
|
end
|
|
|
|
function MainViewMiniMap:HandleTeamPwsBuffBallChange(note)
|
|
for id,_ in pairs(self.playerMap)do
|
|
self:UpdatePlayerSymbolData(id);
|
|
end
|
|
end
|
|
|
|
local GetBallBornPosSID = function (id)
|
|
return "Born_" .. id;
|
|
end
|
|
local GetBallBallPosSID = function (id)
|
|
return "Ball_" .. id;
|
|
end
|
|
function MainViewMiniMap:UpdateTeamPwsMapInfo(note)
|
|
if(not MapManager:IsPVPMode_TeamPws())then
|
|
return;
|
|
end
|
|
|
|
local ballBornPos = GameConfig.PvpTeamRaid.ElementBornPosition;
|
|
local sid;
|
|
for id, pos in pairs(ballBornPos)do
|
|
sid = GetBallBornPosSID(id);
|
|
|
|
local miniMapData = self.teamPwsMapInfo[sid];
|
|
if(miniMapData == nil)then
|
|
miniMapData = MiniMapData.CreateAsTable( sid );
|
|
self.teamPwsMapInfo[sid] = miniMapData;
|
|
end
|
|
|
|
miniMapData:SetPos(pos[1], pos[2], pos[3]);
|
|
miniMapData:SetParama("Symbol", "map_tpvppt");
|
|
miniMapData:SetParama("depth", 10);
|
|
end
|
|
|
|
self.minimapWindow:UpdateTeamPwsInfo(self.teamPwsMapInfo, true);
|
|
self.bigmapWindow:UpdateTeamPwsInfo(self.teamPwsMapInfo, true);
|
|
end
|
|
|
|
function MainViewMiniMap:UpdateTeamBallInfos(updates)
|
|
if(not MapManager:IsPVPMode_TeamPws())then
|
|
return;
|
|
end
|
|
|
|
if(updates == nil or #updates == 0)then
|
|
return;
|
|
end
|
|
|
|
for i=1,#updates do
|
|
self:UpdateTeamPwsBallInfoData(updates[i]);
|
|
end
|
|
self.minimapWindow:UpdateTeamPwsInfo(self.teamPwsMapInfo, true);
|
|
self.bigmapWindow:UpdateTeamPwsInfo(self.teamPwsMapInfo, true);
|
|
end
|
|
local tempBallMap;
|
|
function MainViewMiniMap:UpdateTeamPwsBallInfoData(ballNpc)
|
|
if(not MapManager:IsPVPMode_TeamPws())then
|
|
return;
|
|
end
|
|
|
|
if(tempBallMap == nil)then
|
|
tempBallMap = {};
|
|
local ballConfig = GameConfig.PvpTeamRaid.ElementNpcsID;
|
|
for id,config in pairs(ballConfig)do
|
|
tempBallMap[config.npcid] = {id, config};
|
|
end
|
|
end
|
|
|
|
local npcid = ballNpc.data.staticData and ballNpc.data.staticData.id;
|
|
local tempConfig = npcid and tempBallMap[npcid];
|
|
if(tempConfig == nil)then
|
|
return;
|
|
end
|
|
local sid = GetBallBallPosSID(ballNpc.data.id);
|
|
local miniMapData = self.teamPwsMapInfo[sid];
|
|
if(miniMapData == nil)then
|
|
miniMapData = MiniMapData.CreateAsTable(sid);
|
|
self.teamPwsMapInfo[sid] = miniMapData;
|
|
end
|
|
miniMapData:SetParama("Symbol", tempConfig[2].mapicon);
|
|
local x, y, z = ballNpc:GetServerPos();
|
|
miniMapData:SetPos(x, y, z);
|
|
miniMapData:SetParama("depth", 11);
|
|
end
|
|
function MainViewMiniMap:RemoveTeamPwsBallInfo(dels)
|
|
if(not MapManager:IsPVPMode_TeamPws())then
|
|
return;
|
|
end
|
|
|
|
local dirty = false;
|
|
for i=1,#dels do
|
|
local ncpid = dels[i];
|
|
local sid = GetBallBallPosSID(ncpid);
|
|
local miniMapData = self.teamPwsMapInfo[sid];
|
|
if(miniMapData)then
|
|
miniMapData:Destroy();
|
|
self.teamPwsMapInfo[sid] = nil;
|
|
dirty = true;
|
|
end
|
|
end
|
|
if(dirty)then
|
|
self.minimapWindow:UpdateTeamPwsInfo(self.teamPwsMapInfo, true);
|
|
self.bigmapWindow:UpdateTeamPwsInfo(self.teamPwsMapInfo, true);
|
|
end
|
|
end
|
|
function MainViewMiniMap:ClearAllTeamPwsMapInfo()
|
|
_TableClearByDeleter(self.teamPwsMapInfo, miniMapDataDeleteFunc);
|
|
self.minimapWindow:UpdateTeamPwsInfo(self.teamPwsMapInfo, true);
|
|
self.bigmapWindow:UpdateTeamPwsInfo(self.teamPwsMapInfo, true);
|
|
|
|
self:UpdateTeamMembersPos(true);
|
|
end
|
|
|
|
function MainViewMiniMap:HandleAddNpcs(note)
|
|
self:UpdateTeamBallInfos(note.body);
|
|
end
|
|
|
|
function MainViewMiniMap:HandleRemoveNpcs(note)
|
|
self:RemoveTeamPwsBallInfo(note.body);
|
|
end
|
|
|
|
function MainViewMiniMap:HandleTeamPwsBallChange(note)
|
|
self:UpdateTeamMembersPos(true);
|
|
|
|
local _nSceneUserProxy = NSceneUserProxy.Instance;
|
|
for playerid,_ in pairs(self.playerMap)do
|
|
local player = _nSceneUserProxy:Find(playerid);
|
|
self:_UpdatePlayerSymbolData(player);
|
|
end
|
|
end |