/close
/close
Последний раз редактировалось HA1DEKS; 18.11.2022 в 19:12.
Трекинг? Аддонами нельзя, сишная часть все рисует
local RAID_CLASS_COLORS = RAID_CLASS_COLORS
local UnitIsPlayer = UnitIsPlayer
local UnitClass = UnitClass
hooksecurefunc("WorldMapUnit_Update",function(self)
local unitID = self.unit
if UnitIsPlayer(unitID) then
local _,class = UnitClass(unitID)
local color = RAID_CLASS_COLORS[class]
self.icon:SetVertexColor(color.r,color.g,color.b,1)
return
end
icon:SetVertexColor(1,1,1)
end)
- - - Updated - - -
но надо еще текстуру найти белую что бы цвета не смешивались
Игрок может сменить сервер, но не намерение.
"Починим сервер вместе!"
HA1DEKS (12.06.2021)
Игрок может сменить сервер, но не намерение.
"Починим сервер вместе!"
Игрок может сменить сервер, но не намерение.
"Починим сервер вместе!"
Эти текстуры лежат в Interface\Minimap\PartyRaidBlips.blp. Вот код с панд.
P.S. можете объяснить, в чем разница на миникарте в текстурах которые цельные и которые вырезанные?) Никогда не понимал этого.Код:local select = select local GetNumRaidMembers, UnitIsPlayer, UnitClass, UnitInParty = GetNumRaidMembers, UnitIsPlayer, UnitClass, UnitInParty local BLIP_TEX_COORDS = { ["WARRIOR"] = { 0, 0.125, 0, 0.25 }, ["PALADIN"] = { 0.125, 0.25, 0, 0.25 }, ["HUNTER"] = { 0.25, 0.375, 0, 0.25 }, ["ROGUE"] = { 0.375, 0.5, 0, 0.25 }, ["PRIEST"] = { 0.5, 0.625, 0, 0.25 }, ["DEATHKNIGHT"] = { 0.625, 0.75, 0, 0.25 }, ["SHAMAN"] = { 0.75, 0.875, 0, 0.25 }, ["MAGE"] = { 0.875, 1, 0, 0.25 }, ["WARLOCK"] = { 0, 0.125, 0.25, 0.5 }, ["DRUID"] = { 0.25, 0.375, 0.25, 0.5 } } local BLIP_RAID_Y_OFFSET = 0.5; for i=1,4 do local partyIcon = _G["WorldMapParty"..i.."Icon"] partyIcon:SetTexture('Interface\\Minimap\\PartyRaidBlips.blp') end for i=1,40 do local raidIcon = _G["WorldMapRaid"..i.."Icon"] raidIcon:SetTexture('Interface\\Minimap\\PartyRaidBlips.blp') end hooksecurefunc("WorldMapUnit_Update",function(self) local unit = self.unit if UnitIsPlayer(unit) then local class = select(2, UnitClass(unit)) if ( GetNumRaidMembers() > 0 ) then if ( UnitInParty(unit) ) then self.icon:SetTexCoord( BLIP_TEX_COORDS[class][1], BLIP_TEX_COORDS[class][2], BLIP_TEX_COORDS[class][3], BLIP_TEX_COORDS[class][4] ); else self.icon:SetTexCoord( BLIP_TEX_COORDS[class][1], BLIP_TEX_COORDS[class][2], BLIP_TEX_COORDS[class][3] + BLIP_RAID_Y_OFFSET, BLIP_TEX_COORDS[class][4] + BLIP_RAID_Y_OFFSET ); end else self.icon:SetTexCoord( BLIP_TEX_COORDS[class][1], BLIP_TEX_COORDS[class][2], BLIP_TEX_COORDS[class][3], BLIP_TEX_COORDS[class][4] ); end end end)
Последний раз редактировалось Artur91425; 13.06.2021 в 16:42.
HA1DEKS (13.06.2021)
HA1DEKS (13.06.2021)
Обновил код в сообщении выше (взял код с панд), теперь логика как для миникарты. То есть если вы в рейде, то ВАША группа будет с цельными текстурами, а все игроки ВНЕ вашей группы будут иметь текстуры "пончики" (с дыркой по-середине).
- - - Updated - - -
Да, они от этого. Я по коду понял.
Вот этот BLIP_RAID_Y_OFFSET сдвигает текстуры на те, которые с дыркой для случая если IsInRaid() (в рейде) и UnitInParty(unit) (вне группы. Вне потому что BLIP_RAID_Y_OFFSET после else).Код:if ( IsInRaid() ) then for i=1, MAX_PARTY_MEMBERS do local partyMemberFrame = _G["WorldMapParty"..i]; partyMemberFrame:Hide(); end for i=1, MAX_RAID_MEMBERS do local unit = "raid"..i; local partyX, partyY = GetPlayerMapPosition(unit); local partyMemberFrame = _G["WorldMapRaid"..(playerCount + 1)]; if ( (partyX == 0 and partyY == 0) or UnitIsUnit(unit, "player") ) then partyMemberFrame:Hide(); else partyX = partyX * WorldMapDetailFrame:GetWidth(); partyY = -partyY * WorldMapDetailFrame:GetHeight(); partyMemberFrame:SetPoint("CENTER", "WorldMapDetailFrame", "TOPLEFT", partyX, partyY); local class = select(2, UnitClass(unit)); if ( class ) then if ( UnitInParty(unit) ) then partyMemberFrame.icon:SetTexCoord( BLIP_TEX_COORDS[class][1], BLIP_TEX_COORDS[class][2], BLIP_TEX_COORDS[class][3], BLIP_TEX_COORDS[class][4] ); else partyMemberFrame.icon:SetTexCoord( BLIP_TEX_COORDS[class][1], BLIP_TEX_COORDS[class][2], BLIP_TEX_COORDS[class][3] + BLIP_RAID_Y_OFFSET, BLIP_TEX_COORDS[class][4] + BLIP_RAID_Y_OFFSET ); end end partyMemberFrame.name = nil; partyMemberFrame.unit = unit; partyMemberFrame:Show(); playerCount = playerCount + 1; end end
Вложение 943484
Последний раз редактировалось Artur91425; 13.06.2021 в 16:51.
HA1DEKS (13.06.2021)
Так нормально?:
Untitled.png
Код
Чтобы не заморачиваться с настройками и не плодить тонну кода - размер иконок настраивается через глобальную переменную "WORLDMAP_UNITBUTTON_TEXTURE_SIZE" (в коде выделил красным). Сделал глобально, чтобы можно было быстро изменять размер из игры без перезагрузки пользовательского интерфейса. Достаточно просто использовать макрос:
Код:/run WORLDMAP_UNITBUTTON_TEXTURE_SIZE = <значение>Код:local select = select local GetNumRaidMembers, UnitIsPlayer, UnitClass, UnitInParty, PlayerIsPVPInactive = GetNumRaidMembers, UnitIsPlayer, UnitClass, UnitInParty, PlayerIsPVPInactive WORLDMAP_UNITBUTTON_TEXTURE_SIZE = 64 -- default - 16 local BLIP_TEX_COORDS = { ["WARRIOR"] = { 0, 0.125, 0, 0.25 }, ["PALADIN"] = { 0.125, 0.25, 0, 0.25 }, ["HUNTER"] = { 0.25, 0.375, 0, 0.25 }, ["ROGUE"] = { 0.375, 0.5, 0, 0.25 }, ["PRIEST"] = { 0.5, 0.625, 0, 0.25 }, ["DEATHKNIGHT"] = { 0.625, 0.75, 0, 0.25 }, ["SHAMAN"] = { 0.75, 0.875, 0, 0.25 }, ["MAGE"] = { 0.875, 1, 0, 0.25 }, ["WARLOCK"] = { 0, 0.125, 0.25, 0.5 }, ["DRUID"] = { 0.25, 0.375, 0.25, 0.5 } } local BLIP_RAID_Y_OFFSET = 0.5; for i=1,4 do local partyUnitButton = _G["WorldMapParty"..i] partyUnitButton:SetSize(WORLDMAP_UNITBUTTON_TEXTURE_SIZE, WORLDMAP_UNITBUTTON_TEXTURE_SIZE) partyUnitButton.icon:SetTexture('Interface\\Minimap\\PartyRaidBlips.blp') end for i=1,40 do local raidUnitButton = _G["WorldMapRaid"..i] raidUnitButton:SetSize(WORLDMAP_UNITBUTTON_TEXTURE_SIZE, WORLDMAP_UNITBUTTON_TEXTURE_SIZE) raidUnitButton.icon:SetTexture('Interface\\Minimap\\PartyRaidBlips.blp') end hooksecurefunc("WorldMapUnit_Update",function(self) local unit = self.unit if not UnitIsPlayer(unit) then return end local class = select(2, UnitClass(unit)) if ( GetNumRaidMembers() > 0 ) then if ( UnitInParty(unit) ) then self.icon:SetTexCoord( BLIP_TEX_COORDS[class][1], BLIP_TEX_COORDS[class][2], BLIP_TEX_COORDS[class][3], BLIP_TEX_COORDS[class][4] ); else self.icon:SetTexCoord( BLIP_TEX_COORDS[class][1], BLIP_TEX_COORDS[class][2], BLIP_TEX_COORDS[class][3] + BLIP_RAID_Y_OFFSET, BLIP_TEX_COORDS[class][4] + BLIP_RAID_Y_OFFSET ); end else self.icon:SetTexCoord( BLIP_TEX_COORDS[class][1], BLIP_TEX_COORDS[class][2], BLIP_TEX_COORDS[class][3], BLIP_TEX_COORDS[class][4] ); end end) hooksecurefunc('WorldMapUnit_OnEnter', function(self, motion) local unit = self.unit if not UnitIsPlayer(unit) then return end local tooltipText = "" local class = select(2, UnitClass(unit)) local name = UnitName(unit) local color = RAID_CLASS_COLORS[class] local coloredName = ("|cFF%02x%02x%02x%s|r"):format(color.r * 255, color.g * 255, color.b * 255, name) if ( PlayerIsPVPInactive(unit) ) then tooltipText = PLAYER_IS_PVP_AFK:format(coloredName) else tooltipText = coloredName end WorldMapTooltip:SetText(tooltipText) WorldMapTooltip:Show() end)[свернуть]
Последний раз редактировалось Artur91425; 13.06.2021 в 19:22.
HA1DEKS (13.06.2021)
Аддон - Mapster пробовал? он должен тебя вполне устроить, по цветам показывает на карте всех.
Последний раз редактировалось KpoTwOw~; 12.06.2021 в 14:44.