- Joined
- Apr 27, 2009
- Messages
- 237
Could someone make me a better UI or just a design idea because i am not pleased with mine.
I have already made one an UI with Warcraft 3 Reforged UI Designer (RUID) program for my map Warcraft 3 Reforged: Defense of the Plaguelands
You can see how it looks in my map when picking the first quest near the Villager
I am not as pleased with the design, would like something that suits the Warcraft III Reforged UI design but is more slick, classy then this
An example what I like
I don't know how to make the transparent block like from image above, which type box it is
I have already made one an UI with Warcraft 3 Reforged UI Designer (RUID) program for my map Warcraft 3 Reforged: Defense of the Plaguelands
You can see how it looks in my map when picking the first quest near the Villager
I am not as pleased with the design, would like something that suits the Warcraft III Reforged UI design but is more slick, classy then this
An example what I like
I don't know how to make the transparent block like from image above, which type box it is
Code:
-- ============================================
-- SKELETON QUEST SYSTEM WITH 2 QUESTS (CLICKABLE HEADER)
-- ============================================
-- Quest 1 UI Frame references
BackdropVeryBlack014 = nil
BackdropUndeadUnrest = nil
Text05 = nil
Backdrop02Copy = nil
Text08 = nil
Text05Copy = nil
Backdrop02 = nil
-- Quest 5 UI Frame references
BackdropVeryBlack015 = nil
BackdropUndeadSource = nil
Text09 = nil
Backdrop03 = nil
Text06 = nil
Backdrop03Copy = nil
Text06Copy = nil
-- Quest header
questsHeaderButton = nil
Text08Copy = nil
-- Quest UI visibility
local questUIVisible = true
-- Quest 1 tracking variables
local skeletonArcherCurrent = 0
local skeletonArcherTarget = 10
local skeletonMageCurrent = 0
local skeletonMageTarget = 5
local quest1Active = false
-- Quest 5 tracking variables
local ghostCurrent = 0
local ghostTarget = 10
local wraithCurrent = 0
local wraithTarget = 5
local quest5Active = false
-- Death trigger (shared for both quests)
local deathTrigger = nil
-- Initialize the UI
REFORGEDUIMAKER = {}
REFORGEDUIMAKER.Initialize = function()
-- ========== QUEST 1: UNDEAD UNREST ==========
-- Main quest panel
BackdropVeryBlack014 = BlzCreateFrame("QuestButtonBaseTemplate", BlzGetFrameByName("ConsoleUIBackdrop", 0), 0, 0)
BlzFrameSetAbsPoint(BackdropVeryBlack014, FRAMEPOINT_TOPLEFT, 0.770520, 0.425287)
BlzFrameSetAbsPoint(BackdropVeryBlack014, FRAMEPOINT_BOTTOMRIGHT, 0.876800, 0.308537)
-- "Quests" header BUTTON (CLICKABLE)
questsHeaderButton = BlzCreateFrame("ScriptDialogButton", BlzGetFrameByName("ConsoleUIBackdrop", 0), 0, 0)
BlzFrameSetAbsPoint(questsHeaderButton, FRAMEPOINT_TOPLEFT, 0.796520, 0.475297)
BlzFrameSetAbsPoint(questsHeaderButton, FRAMEPOINT_BOTTOMRIGHT, 0.850800, 0.444597)
-- "Quests" header text (properly centered with slight left nudge)
Text08Copy = BlzCreateFrameByType("TEXT", "Text08Copy", questsHeaderButton, "", 0)
BlzFrameSetPoint(Text08Copy, FRAMEPOINT_CENTER, questsHeaderButton, FRAMEPOINT_CENTER, -0.0012, 0.0)
BlzFrameSetText(Text08Copy, "|cffFFCC00Quests|r")
BlzFrameSetEnable(Text08Copy, false)
BlzFrameSetScale(Text08Copy, 1.00)
BlzFrameSetTextAlignment(Text08Copy, TEXT_JUSTIFY_CENTER, TEXT_JUSTIFY_MIDDLE)
-- "Undead Unrest" title background
BackdropUndeadUnrest = BlzCreateFrame("QuestButtonDisabledBackdropTemplate", BlzGetFrameByName("ConsoleUIBackdrop", 0), 0, 0)
BlzFrameSetAbsPoint(BackdropUndeadUnrest, FRAMEPOINT_TOPLEFT, 0.774000, 0.434777)
BlzFrameSetAbsPoint(BackdropUndeadUnrest, FRAMEPOINT_BOTTOMRIGHT, 0.873000, 0.404397)
-- Quest 1 title "Undead Unrest"
Text08 = BlzCreateFrameByType("TEXT", "Text08", BlzGetFrameByName("ConsoleUIBackdrop", 0), "", 0)
BlzFrameSetAbsPoint(Text08, FRAMEPOINT_TOPLEFT, 0.774000, 0.429777)
BlzFrameSetAbsPoint(Text08, FRAMEPOINT_BOTTOMRIGHT, 0.873000, 0.409397)
BlzFrameSetText(Text08, "|cffFFCC00Undead Unrest|r")
BlzFrameSetEnable(Text08, false)
BlzFrameSetScale(Text08, 1.15)
BlzFrameSetTextAlignment(Text08, TEXT_JUSTIFY_CENTER, TEXT_JUSTIFY_MIDDLE)
-- Skeleton Archer icon
Backdrop02 = BlzCreateFrameByType("BACKDROP", "Backdrop02", BlzGetFrameByName("ConsoleUIBackdrop", 0), "", 1)
BlzFrameSetAbsPoint(Backdrop02, FRAMEPOINT_TOPLEFT, 0.783660, 0.398897)
BlzFrameSetAbsPoint(Backdrop02, FRAMEPOINT_BOTTOMRIGHT, 0.823660, 0.358897)
BlzFrameSetTexture(Backdrop02, "ReplaceableTextures\\CommandButtons\\BTNSkeletonArcher.blp", 0, true)
-- Skeleton Archer counter
Text05 = BlzCreateFrameByType("TEXT", "Text05", BlzGetFrameByName("ConsoleUIBackdrop", 0), "", 0)
BlzFrameSetAbsPoint(Text05, FRAMEPOINT_TOPLEFT, 0.828660, 0.383347)
BlzFrameSetAbsPoint(Text05, FRAMEPOINT_BOTTOMRIGHT, 0.868660, 0.372227)
BlzFrameSetText(Text05, "|cffffffff0 / 10|r")
BlzFrameSetEnable(Text05, false)
BlzFrameSetScale(Text05, 1.00)
BlzFrameSetTextAlignment(Text05, TEXT_JUSTIFY_LEFT, TEXT_JUSTIFY_MIDDLE)
-- Skeleton Mage icon
Backdrop02Copy = BlzCreateFrameByType("BACKDROP", "Backdrop02Copy", BlzGetFrameByName("ConsoleUIBackdrop", 0), "", 1)
BlzFrameSetAbsPoint(Backdrop02Copy, FRAMEPOINT_TOPLEFT, 0.783660, 0.358187)
BlzFrameSetAbsPoint(Backdrop02Copy, FRAMEPOINT_BOTTOMRIGHT, 0.823660, 0.318187)
BlzFrameSetTexture(Backdrop02Copy, "ReplaceableTextures\\CommandButtons\\BTNSkeletonMage.blp", 0, true)
-- Skeleton Mage counter
Text05Copy = BlzCreateFrameByType("TEXT", "Text05Copy", BlzGetFrameByName("ConsoleUIBackdrop", 0), "", 0)
BlzFrameSetAbsPoint(Text05Copy, FRAMEPOINT_TOPLEFT, 0.828660, 0.342807)
BlzFrameSetAbsPoint(Text05Copy, FRAMEPOINT_BOTTOMRIGHT, 0.868660, 0.331687)
BlzFrameSetText(Text05Copy, "|cffffffff0 / 5|r")
BlzFrameSetEnable(Text05Copy, false)
BlzFrameSetScale(Text05Copy, 1.00)
BlzFrameSetTextAlignment(Text05Copy, TEXT_JUSTIFY_LEFT, TEXT_JUSTIFY_MIDDLE)
-- ========== QUEST 5: UNDEAD SOURCE (SAME POSITION AS QUEST 1) ==========
-- Quest 5 panel (SAME POSITION AS QUEST 1)
BackdropVeryBlack015 = BlzCreateFrame("QuestButtonBaseTemplate", BlzGetFrameByName("ConsoleUIBackdrop", 0), 0, 0)
BlzFrameSetAbsPoint(BackdropVeryBlack015, FRAMEPOINT_TOPLEFT, 0.770520, 0.425287)
BlzFrameSetAbsPoint(BackdropVeryBlack015, FRAMEPOINT_BOTTOMRIGHT, 0.876800, 0.308537)
-- "Undead Source" title background (SAME POSITION AS UNDEAD UNREST)
BackdropUndeadSource = BlzCreateFrame("QuestButtonDisabledBackdropTemplate", BlzGetFrameByName("ConsoleUIBackdrop", 0), 0, 0)
BlzFrameSetAbsPoint(BackdropUndeadSource, FRAMEPOINT_TOPLEFT, 0.774000, 0.434777)
BlzFrameSetAbsPoint(BackdropUndeadSource, FRAMEPOINT_BOTTOMRIGHT, 0.873000, 0.404397)
-- Quest 5 title "Undead Source" (SAME POSITION AS UNDEAD UNREST)
Text09 = BlzCreateFrameByType("TEXT", "Text09", BlzGetFrameByName("ConsoleUIBackdrop", 0), "", 0)
BlzFrameSetAbsPoint(Text09, FRAMEPOINT_TOPLEFT, 0.774000, 0.429777)
BlzFrameSetAbsPoint(Text09, FRAMEPOINT_BOTTOMRIGHT, 0.873000, 0.409397)
BlzFrameSetText(Text09, "|cffFFCC00Undead Source|r")
BlzFrameSetEnable(Text09, false)
BlzFrameSetScale(Text09, 1.15)
BlzFrameSetTextAlignment(Text09, TEXT_JUSTIFY_CENTER, TEXT_JUSTIFY_MIDDLE)
-- Ghost icon (SAME POSITION AS SKELETON ARCHER)
Backdrop03 = BlzCreateFrameByType("BACKDROP", "Backdrop03", BlzGetFrameByName("ConsoleUIBackdrop", 0), "", 1)
BlzFrameSetAbsPoint(Backdrop03, FRAMEPOINT_TOPLEFT, 0.783660, 0.398897)
BlzFrameSetAbsPoint(Backdrop03, FRAMEPOINT_BOTTOMRIGHT, 0.823660, 0.358897)
BlzFrameSetTexture(Backdrop03, "ReplaceableTextures\\CommandButtons\\BTNGhost.blp", 0, true)
-- Ghost counter (SAME POSITION AS SKELETON ARCHER COUNTER)
Text06 = BlzCreateFrameByType("TEXT", "Text06", BlzGetFrameByName("ConsoleUIBackdrop", 0), "", 0)
BlzFrameSetAbsPoint(Text06, FRAMEPOINT_TOPLEFT, 0.828660, 0.383347)
BlzFrameSetAbsPoint(Text06, FRAMEPOINT_BOTTOMRIGHT, 0.868660, 0.372227)
BlzFrameSetText(Text06, "|cffffffff0 / 10|r")
BlzFrameSetEnable(Text06, false)
BlzFrameSetScale(Text06, 1.00)
BlzFrameSetTextAlignment(Text06, TEXT_JUSTIFY_LEFT, TEXT_JUSTIFY_MIDDLE)
-- Wraith icon (SAME POSITION AS SKELETON MAGE)
Backdrop03Copy = BlzCreateFrameByType("BACKDROP", "Backdrop03Copy", BlzGetFrameByName("ConsoleUIBackdrop", 0), "", 1)
BlzFrameSetAbsPoint(Backdrop03Copy, FRAMEPOINT_TOPLEFT, 0.783660, 0.358187)
BlzFrameSetAbsPoint(Backdrop03Copy, FRAMEPOINT_BOTTOMRIGHT, 0.823660, 0.318187)
BlzFrameSetTexture(Backdrop03Copy, "ReplaceableTextures\\CommandButtons\\BTNWraith.blp", 0, true)
-- Wraith counter (SAME POSITION AS SKELETON MAGE COUNTER)
Text06Copy = BlzCreateFrameByType("TEXT", "Text06Copy", BlzGetFrameByName("ConsoleUIBackdrop", 0), "", 0)
BlzFrameSetAbsPoint(Text06Copy, FRAMEPOINT_TOPLEFT, 0.828660, 0.342807)
BlzFrameSetAbsPoint(Text06Copy, FRAMEPOINT_BOTTOMRIGHT, 0.868660, 0.331687)
BlzFrameSetText(Text06Copy, "|cffffffff0 / 5|r")
BlzFrameSetEnable(Text06Copy, false)
BlzFrameSetScale(Text06Copy, 1.00)
BlzFrameSetTextAlignment(Text06Copy, TEXT_JUSTIFY_LEFT, TEXT_JUSTIFY_MIDDLE)
-- Hide all UI initially
HideQuest1UI()
HideQuest5UI()
BlzFrameSetVisible(questsHeaderButton, false)
BlzFrameSetVisible(Text08Copy, false)
-- Initialize the quest header button click
InitializeQuestHeaderButton()
end
-- Initialize quest header button click functionality
function InitializeQuestHeaderButton()
local clickTrigger = CreateTrigger()
BlzTriggerRegisterFrameEvent(clickTrigger, questsHeaderButton, FRAMEEVENT_CONTROL_CLICK)
TriggerAddAction(clickTrigger, ToggleQuestUI)
end
-- Toggle quest visibility
function ToggleQuestUI()
questUIVisible = not questUIVisible
if questUIVisible then
-- Show active quests
if quest1Active then
ShowQuest1UIInternal()
end
if quest5Active then
ShowQuest5UIInternal()
end
else
-- Hide all quest UI (but keep them active in background)
BlzFrameSetVisible(BackdropVeryBlack014, false)
BlzFrameSetVisible(BackdropUndeadUnrest, false)
BlzFrameSetVisible(Text08, false)
BlzFrameSetVisible(Backdrop02, false)
BlzFrameSetVisible(Backdrop02Copy, false)
BlzFrameSetVisible(Text05, false)
BlzFrameSetVisible(Text05Copy, false)
BlzFrameSetVisible(BackdropVeryBlack015, false)
BlzFrameSetVisible(BackdropUndeadSource, false)
BlzFrameSetVisible(Text09, false)
BlzFrameSetVisible(Backdrop03, false)
BlzFrameSetVisible(Backdrop03Copy, false)
BlzFrameSetVisible(Text06, false)
BlzFrameSetVisible(Text06Copy, false)
end
end
-- Internal show functions (don't check visibility state)
function ShowQuest1UIInternal()
BlzFrameSetVisible(BackdropVeryBlack014, true)
BlzFrameSetVisible(questsHeaderButton, true)
BlzFrameSetVisible(BackdropUndeadUnrest, true)
BlzFrameSetVisible(Text08, true)
BlzFrameSetVisible(Text08Copy, true)
BlzFrameSetVisible(Backdrop02, true)
BlzFrameSetVisible(Backdrop02Copy, true)
BlzFrameSetVisible(Text05, true)
BlzFrameSetVisible(Text05Copy, true)
end
function ShowQuest5UIInternal()
BlzFrameSetVisible(BackdropVeryBlack015, true)
BlzFrameSetVisible(questsHeaderButton, true)
BlzFrameSetVisible(BackdropUndeadSource, true)
BlzFrameSetVisible(Text09, true)
BlzFrameSetVisible(Text08Copy, true)
BlzFrameSetVisible(Backdrop03, true)
BlzFrameSetVisible(Backdrop03Copy, true)
BlzFrameSetVisible(Text06, true)
BlzFrameSetVisible(Text06Copy, true)
end
-- Show/Hide Quest 1 UI (respect visibility toggle)
function ShowQuest1UI()
if not questUIVisible then return end
ShowQuest1UIInternal()
end
function HideQuest1UI()
BlzFrameSetVisible(BackdropVeryBlack014, false)
BlzFrameSetVisible(BackdropUndeadUnrest, false)
BlzFrameSetVisible(Text08, false)
BlzFrameSetVisible(Backdrop02, false)
BlzFrameSetVisible(Backdrop02Copy, false)
BlzFrameSetVisible(Text05, false)
BlzFrameSetVisible(Text05Copy, false)
end
-- Show/Hide Quest 5 UI (respect visibility toggle)
function ShowQuest5UI()
if not questUIVisible then return end
ShowQuest5UIInternal()
end
function HideQuest5UI()
BlzFrameSetVisible(BackdropVeryBlack015, false)
BlzFrameSetVisible(BackdropUndeadSource, false)
BlzFrameSetVisible(Text09, false)
BlzFrameSetVisible(Backdrop03, false)
BlzFrameSetVisible(Backdrop03Copy, false)
BlzFrameSetVisible(Text06, false)
BlzFrameSetVisible(Text06Copy, false)
end
-- Create or update the death detection trigger
function CreateDeathTrigger()
if not deathTrigger then
deathTrigger = CreateTrigger()
TriggerRegisterPlayerUnitEvent(deathTrigger, Player(PLAYER_NEUTRAL_AGGRESSIVE), EVENT_PLAYER_UNIT_DEATH, nil)
TriggerAddAction(deathTrigger, function()
local dyingUnit = GetTriggerUnit()
local unitType = GetUnitTypeId(dyingUnit)
-- Quest 1: Skeleton kills
if unitType == FourCC('n003') then -- Skeleton Archer
OnSkeletonArcherKilled()
elseif unitType == FourCC('uskm') then -- Skeleton Mage
OnSkeletonMageKilled()
end
-- Quest 5: Ghost/Wraith kills
if unitType == FourCC('ugho') then -- Ghost (replace with your ID)
OnGhostKilled()
elseif unitType == FourCC('nwrg') then -- Wraith (replace with your ID)
OnWraithKilled()
end
end)
end
end
-- Destroy death trigger if no quests are active
function CheckDestroyDeathTrigger()
if not quest1Active and not quest5Active and deathTrigger then
DestroyTrigger(deathTrigger)
deathTrigger = nil
end
end
-- ========== QUEST 1: UNDEAD UNREST ==========
function StartSkeletonQuest()
if quest1Active then
DisplayTextToPlayer(GetLocalPlayer(), 0, 0, "|cffff0000Quest 1 already active!|r")
return
end
quest1Active = true
skeletonArcherCurrent = 0
skeletonMageCurrent = 0
ShowQuest1UI()
UpdateSkeletonArcherCount(0, skeletonArcherTarget)
UpdateSkeletonMageCount(0, skeletonMageTarget)
CreateDeathTrigger()
DisplayTextToPlayer(GetLocalPlayer(), 0, 0, "|cffffcc00New Quest:|r Undead Unrest - Kill 10 Skeleton Archers and 5 Skeleton Mages")
end
function UpdateSkeletonArcherCount(current, target)
skeletonArcherCurrent = current
if Text05 then
if current >= target then
BlzFrameSetText(Text05, "|cff00ff00" .. current .. " / " .. target .. "|r")
else
BlzFrameSetText(Text05, "|cffffffff" .. current .. " / " .. target .. "|r")
end
end
end
function UpdateSkeletonMageCount(current, target)
skeletonMageCurrent = current
if Text05Copy then
if current >= target then
BlzFrameSetText(Text05Copy, "|cff00ff00" .. current .. " / " .. target .. "|r")
else
BlzFrameSetText(Text05Copy, "|cffffffff" .. current .. " / " .. target .. "|r")
end
end
end
function OnSkeletonArcherKilled()
if not quest1Active then return end
if skeletonArcherCurrent < skeletonArcherTarget then
skeletonArcherCurrent = skeletonArcherCurrent + 1
UpdateSkeletonArcherCount(skeletonArcherCurrent, skeletonArcherTarget)
CheckQuest1Completion()
end
end
function OnSkeletonMageKilled()
if not quest1Active then return end
if skeletonMageCurrent < skeletonMageTarget then
skeletonMageCurrent = skeletonMageCurrent + 1
UpdateSkeletonMageCount(skeletonMageCurrent, skeletonMageTarget)
CheckQuest1Completion()
end
end
function CheckQuest1Completion()
if skeletonArcherCurrent >= skeletonArcherTarget and skeletonMageCurrent >= skeletonMageTarget then
CompleteQuest1()
end
end
function CompleteQuest1()
if not quest1Active then return end
quest1Active = false
DisplayTextToPlayer(GetLocalPlayer(), 0, 0, "|cff00ff00Quest Complete!|r Undead Unrest")
HideQuest1UI()
CheckDestroyDeathTrigger()
-- Hide "Quests" header if no quests active
if not quest5Active then
BlzFrameSetVisible(questsHeaderButton, false)
BlzFrameSetVisible(Text08Copy, false)
end
end
-- ========== QUEST 5: UNDEAD SOURCE ==========
function StartUndeadSourceQuest()
if quest5Active then
DisplayTextToPlayer(GetLocalPlayer(), 0, 0, "|cffff0000Quest 5 already active!|r")
return
end
quest5Active = true
ghostCurrent = 0
wraithCurrent = 0
ShowQuest5UI()
UpdateGhostCount(0, ghostTarget)
UpdateWraithCount(0, wraithTarget)
CreateDeathTrigger()
DisplayTextToPlayer(GetLocalPlayer(), 0, 0, "|cffffcc00New Quest:|r Undead Source - Kill 10 Ghosts and 5 Wraiths")
end
function UpdateGhostCount(current, target)
ghostCurrent = current
if Text06 then
if current >= target then
BlzFrameSetText(Text06, "|cff00ff00" .. current .. " / " .. target .. "|r")
else
BlzFrameSetText(Text06, "|cffffffff" .. current .. " / " .. target .. "|r")
end
end
end
function UpdateWraithCount(current, target)
wraithCurrent = current
if Text06Copy then
if current >= target then
BlzFrameSetText(Text06Copy, "|cff00ff00" .. current .. " / " .. target .. "|r")
else
BlzFrameSetText(Text06Copy, "|cffffffff" .. current .. " / " .. target .. "|r")
end
end
end
function OnGhostKilled()
if not quest5Active then return end
if ghostCurrent < ghostTarget then
ghostCurrent = ghostCurrent + 1
UpdateGhostCount(ghostCurrent, ghostTarget)
CheckQuest5Completion()
end
end
function OnWraithKilled()
if not quest5Active then return end
if wraithCurrent < wraithTarget then
wraithCurrent = wraithCurrent + 1
UpdateWraithCount(wraithCurrent, wraithTarget)
CheckQuest5Completion()
end
end
function CheckQuest5Completion()
if ghostCurrent >= ghostTarget and wraithCurrent >= wraithTarget then
CompleteQuest5()
end
end
function CompleteQuest5()
if not quest5Active then return end
quest5Active = false
DisplayTextToPlayer(GetLocalPlayer(), 0, 0, "|cff00ff00Quest Complete!|r Undead Source")
HideQuest5UI()
CheckDestroyDeathTrigger()
-- Hide "Quests" header if no quests active
if not quest1Active then
BlzFrameSetVisible(questsHeaderButton, false)
BlzFrameSetVisible(Text08Copy, false)
end
end
--[[
====================================
NEW FEATURES:
====================================
✅ "Quests" header is now a CLICKABLE BUTTON
✅ Click the "Quests" button to HIDE all quest UI
✅ Click again to SHOW the quest UI
✅ Quests continue tracking in the background even when hidden
✅ Both quests occupy the same position on screen
✅ When Quest 1 is active, only Quest 1 UI shows
✅ When Quest 5 is active, only Quest 5 UI shows
UNIT IDs TO REPLACE:
- Ghost: 'ugho' (replace with your Ghost unit ID)
- Wraith: 'nwrg' (replace with your Wraith unit ID)
]]
Last edited: