Gathering radar forked from jbiahhxcyeyrgvcyks. Improved drawing, draws to nearest objects. Added fishing support and a few pools
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
GatheringRadar/Radar.lua

354 lines
15 KiB

local Tinkr = ...
local Draw = Tinkr.Util.Draw:New()
local Builder = Tinkr.Util.GUIBuilder:New {
config = "node_finder_config"
}
local nodes = {
-- Mining nodes
[413046] = {name = "Bismuth", type = "mining"},
[413902] = {name = "Weeping Ironclaw", type = "mining"},
[1733] = {name = "Silver Vein", type = "mining"},
[413881] = {name = "Aqirite Seam", type = "mining"},
[181557] = {name = "Khorium Vein", type = "mining"},
[2040] = {name = "Mithril Deposit", type = "mining"},
[1732] = {name = "Tin Vein", type = "mining"},
[1731] = {name = "Copper Vein", type = "mining"},
[1735] = {name = "Iron Deposit", type = "mining"},
[202736] = {name = "Obsidium Deposit", type = "mining"},
[175404] = {name = "Rich Thorium Vein", type = "mining"},
[413047] = {name = "Aqirite", type = "mining"},
[181555] = {name = "Fel Iron Deposit", type = "mining"},
[413049] = {name = "Ironclaw", type = "mining"},
[181556] = {name = "Adamantite Deposit", type = "mining"},
[413880] = {name = "Bismuth Seam", type = "mining"},
[413882] = {name = "Ironclaw Seam", type = "mining"},
[202738] = {name = "Elementium Vein", type = "mining"},
[1734] = {name = "Gold Vein", type = "mining"},
[413905] = {name = "EZ-Mine Ironclaw", type = "mining"},
[2047] = {name = "Truesilver Deposit", type = "mining"},
[413886] = {name = "EZ-Mine Bismuth", type = "mining"},
[324] = {name = "Small Thorium Vein", type = "mining"},
[413907] = {name = "Camouflaged Ironclaw", type = "mining"},
[191133] = {name = "Titanium Vein", type = "mining"},
[446351] = {name = "Loose Crystal Shard", type = "mining"},
[430351] = {name = "Webbed Ore Deposit", type = "mining"},
[202737] = {name = "Pyrite Deposit", type = "mining"},
[430335] = {name = "Webbed Ore Deposit", type = "mining"},
[189978] = {name = "Cobalt Deposit", type = "mining"},
[413897] = {name = "Camouflaged Aqirite", type = "mining"},
[446352] = {name = "Loose Crystal Shard", type = "mining"},
[181569] = {name = "Rich Adamantite Deposit", type = "mining"},
[165658] = {name = "Dark Iron Deposit", type = "mining"},
[413874] = {name = "Rich Bismuth", type = "mining"},
[209313] = {name = "Trillium Vein", type = "mining"},
[413884] = {name = "Weeping Bismuth", type = "mining"},
[413892] = {name = "Weeping Aqirite", type = "mining"},
[209330] = {name = "Rich Trillium Vein", type = "mining"},
[452079] = {name = "Bismuth", type = "mining"},
[413889] = {name = "Camouflaged Bismuth", type = "mining"},
[413895] = {name = "EZ-Mine Aqirite", type = "mining"},
[202741] = {name = "Rich Elementium Vein", type = "mining"},
[255344] = {name = "Felslate Seam", type = "mining"},
[434558] = {name = "Bismuth Chunk", type = "mining"},
[413883] = {name = "Crystallized Bismuth", type = "mining"},
[209311] = {name = "Ghost Iron Deposit", type = "mining"},
[413900] = {name = "Crystallized Ironclaw", type = "mining"},
[446349] = {name = "Loose Crystal Shard", type = "mining"},
[189980] = {name = "Saronite Deposit", type = "mining"},
[440211] = {name = "Bismuth", type = "mining"},
[452075] = {name = "Ironclaw", type = "mining"},
[413877] = {name = "Rich Ironclaw", type = "mining"},
[440214] = {name = "Ironclaw", type = "mining"},
[414113] = {name = "Sivstone Deposit", type = "mining"},
[181248] = {name = "Copper Vein", type = "mining"},
[452076] = {name = "Bismuth", type = "mining"},
[241726] = {name = "Leystone Deposit", type = "mining"},
[446347] = {name = "Loose Crystal Shard", type = "mining"},
[452060] = {name = "Ironclaw", type = "mining"},
[430352] = {name = "Webbed Ore Deposit", type = "mining"},
[253280] = {name = "Leystone Seam", type = "mining"},
[202739] = {name = "Rich Obsidium Deposit", type = "mining"},
[452083] = {name = "Ironclaw", type = "mining"},
[189979] = {name = "Rich Cobalt Deposit", type = "mining"},
[434556] = {name = "Aqirite Chunk", type = "mining"},
[446343] = {name = "Loose Crystal Shard", type = "mining"},
[349982] = {name = "Phaedrum Deposit", type = "mining"},
[195036] = {name = "Pure Saronite Deposit", type = "mining"},
[236169] = {name = "Harvestable Precious Crystal", type = "mining"},
[202740] = {name = "Rich Pyrite Deposit", type = "mining"},
[325874] = {name = "Osmenite Seam", type = "mining"},
[272768] = {name = "Empyrium Deposit", type = "mining"},
[272780] = {name = "Empyrium Seam", type = "mining"},
[247075] = {name = "Secreted Wax Glob", type = "mining"},
[452080] = {name = "Bismuth", type = "mining"},
[247967] = {name = "Brimstone Destroyer Core", type = "mining"},
[185877] = {name = "Nethercite Deposit", type = "mining"},
[123848] = {name = "Ooze Covered Thorium Vein", type = "mining"},
[189981] = {name = "Rich Saronite Deposit", type = "mining"},
[349900] = {name = "Elethium Deposit", type = "mining"},
[452081] = {name = "Bismuth", type = "mining"},
[452066] = {name = "Ironclaw", type = "mining"},
[276619] = {name = "Monelite Seam", type = "mining"},
[177388] = {name = "Ooze Covered Rich Thorium Vein", type = "mining"},
[413890] = {name = "Crystallized Aqirite", type = "mining"},
[181570] = {name = "Rich Adamantite Deposit", type = "mining"},
[185557] = {name = "Ancient Gem Vein", type = "mining"},
[241743] = {name = "Felslate Deposit", type = "mining"},
[349898] = {name = "Laestrite Deposit", type = "mining"},
[349981] = {name = "Oxxein Deposit", type = "mining"},
[413875] = {name = "Rich Aqirite", type = "mining"},
[276621] = {name = "Rich Monelite Deposit", type = "mining"},
[247370] = {name = "Brimstone Destroyer Core", type = "mining"},
[276618] = {name = "Platinum Deposit", type = "mining"},
[232543] = {name = "Rich Blackrock Deposit", type = "mining"},
[272778] = {name = "Rich Empyrium Deposit", type = "mining"},
[232545] = {name = "Rich True Iron Deposit", type = "mining"},
[276620] = {name = "Storm Silver Seam", type = "mining"},
[221541] = {name = "Trillium Vein", type = "mining"},
-- Herb nodes
[454010] = {name = "Luredrop", type = "herb"},
[414319] = {name = "Arathor's Spear", type = "herb"},
[414317] = {name = "Orbinid", type = "herb"},
[142140] = {name = "Purple Lotus", type = "herb"},
[454055] = {name = "Luredrop", type = "herb"},
[414316] = {name = "Luredrop", type = "herb"},
[1621] = {name = "Briarthorn", type = "herb"},
[2046] = {name = "Goldthorn", type = "herb"},
[202747] = {name = "Cinderbloom", type = "herb"},
[452956] = {name = "Orbinid", type = "herb"},
[210537] = {name = "Eternal Blossom", type = "herb"},
[210539] = {name = "Eternal Blossom", type = "herb"},
[202751] = {name = "Twilight Jasmine", type = "herb"},
[210538] = {name = "Eternal Blossom", type = "herb"},
[186662] = {name = "Reagent Pouch", type = "herb"},
[202749] = {name = "Azshara's Veil", type = "herb"},
[414344] = {name = "Camouflaged Arathor's Spear", type = "herb"},
[202748] = {name = "Stormvine", type = "herb"},
[181279] = {name = "Netherbloom", type = "herb"},
[142145] = {name = "Gromsblood", type = "herb"},
[454071] = {name = "Mycobloom", type = "herb"},
[454008] = {name = "Irradiated Luredrop", type = "herb"},
[142144] = {name = "Ghost Mushroom", type = "herb"},
[202750] = {name = "Heartblossom", type = "herb"},
[2866] = {name = "Firebloom", type = "herb"},
[452979] = {name = "Luredrop", type = "herb"},
[202752] = {name = "Whiptail", type = "herb"},
[142143] = {name = "Blindweed", type = "herb"},
[2042] = {name = "Fadeleaf", type = "herb"},
[414331] = {name = "Altered Luredrop", type = "herb"},
[142142] = {name = "Sungrass", type = "herb"},
[181278] = {name = "Ancient Lichen", type = "herb"},
[1620] = {name = "Mageroyal", type = "herb"},
[414318] = {name = "Blessing Blossom", type = "herb"},
[181276] = {name = "Flame Cap", type = "herb"},
[414332] = {name = "Altered Orbinid", type = "herb"},
[414337] = {name = "Irradiated Orbinid", type = "herb"},
[2041] = {name = "Liferoot", type = "herb"},
[452973] = {name = "Luredrop", type = "herb"},
[414324] = {name = "Lush Arathor's Spear", type = "herb"},
[176589] = {name = "Black Lotus", type = "herb"},
[1623] = {name = "Wild Steelbloom", type = "herb"},
[209354] = {name = "Golden Lotus", type = "herb"},
[423363] = {name = "Sporefused Arathor's Spear", type = "herb"},
[181275] = {name = "Ragveil", type = "herb"},
[452977] = {name = "Luredrop", type = "herb"},
[176586] = {name = "Mountain Silversage", type = "herb"},
[176584] = {name = "Dreamfoil", type = "herb"},
[1624] = {name = "Kingsblood", type = "herb"}
}
local function GetNodeInfo(objectId)
return nodes[objectId]
end
local function DrawCrystalNode(draw, nx, ny, nz, color)
draw:SetColor(unpack(color))
draw:SetWidth(2)
draw:SetAlpha(200)
local baseSize = 1.5
local height = 3
local bobHeight = math.sin(GetTime() * 4) * 0.5
local baseZ = nz + 5 + bobHeight
-- Bottom pyramid
local v1 = {nx, ny, baseZ}
local v2 = {nx - baseSize, ny - baseSize, baseZ + height/2}
local v3 = {nx + baseSize, ny - baseSize, baseZ + height/2}
local v4 = {nx + baseSize, ny + baseSize, baseZ + height/2}
local v5 = {nx - baseSize, ny + baseSize, baseZ + height/2}
-- Top pyramid
local v6 = {nx, ny, baseZ + height}
-- Draw bottom pyramid
draw:Line(v1[1], v1[2], v1[3], v2[1], v2[2], v2[3])
draw:Line(v1[1], v1[2], v1[3], v3[1], v3[2], v3[3])
draw:Line(v1[1], v1[2], v1[3], v4[1], v4[2], v4[3])
draw:Line(v1[1], v1[2], v1[3], v5[1], v5[2], v5[3])
draw:Line(v2[1], v2[2], v2[3], v3[1], v3[2], v3[3])
draw:Line(v3[1], v3[2], v3[3], v4[1], v4[2], v4[3])
draw:Line(v4[1], v4[2], v4[3], v5[1], v5[2], v5[3])
draw:Line(v5[1], v5[2], v5[3], v2[1], v2[2], v2[3])
-- Draw top pyramid
draw:Line(v2[1], v2[2], v2[3], v6[1], v6[2], v6[3])
draw:Line(v3[1], v3[2], v3[3], v6[1], v6[2], v6[3])
draw:Line(v4[1], v4[2], v4[3], v6[1], v6[2], v6[3])
draw:Line(v5[1], v5[2], v5[3], v6[1], v6[2], v6[3])
-- Draw a small sphere at the top for emphasis
draw:Circle(nx, ny, baseZ + height + 0.5, 0.3)
end
local function DrawNode(draw, nodeInfo, nx, ny, nz, objectId)
local px, py, pz = ObjectRawPosition('player')
local dist = FastDistance(px, py, pz, nx, ny, nz)
local nodeType = nodeInfo.type
local shouldDraw = false
local color
if nodeType == "mining" and Builder:GetConfig("show_mining") == "yes" and Builder:GetConfig("show_mining_" .. objectId) == "yes" then
color = {0, 0, 255}
shouldDraw = true
elseif nodeType == "herb" and Builder:GetConfig("show_herbs") == "yes" and Builder:GetConfig("show_herb_" .. objectId) == "yes" then
color = {0, 255, 0}
shouldDraw = true
end
if shouldDraw then
DrawCrystalNode(draw, nx, ny, nz, color)
if Builder:GetConfig("draw_lines") == "yes" then
draw:SetColor(unpack(color))
draw:Line(px, py, pz, nx, ny, nz)
end
draw:SetColor(255, 255, 255)
local displayText = string.format("%s [%dy]", nodeInfo.name, math.floor(dist))
draw:Text(displayText, "SourceCodePro", nx, ny, nz + 9)
end
end
Draw:Sync(function(draw)
for _, object in ipairs(Objects()) do
if ObjectType(object) == 8 then
local objectId = ObjectId(object)
local nodeInfo = GetNodeInfo(objectId)
if nodeInfo and ObjectLootable(object) then
local nx, ny, nz = ObjectRawPosition(object)
DrawNode(draw, nodeInfo, nx, ny, nz, objectId)
end
end
end
end)
-- Modify the SavePreferences function
local function SavePreferences()
for id, node in pairs(nodes) do
local key = "show_" .. node.type .. "_" .. id
local value = Builder:GetConfig(key)
Builder:SetConfig(key, value)
end
print("Node preferences saved!")
end
local MainSettingsTab = Builder:Tab {
title = "Main Settings",
content = {
Builder:Checkbox {
key = "show_mining",
label = "Show Mining Nodes",
-- description = "Toggle visibility of mining nodes.",
default = "yes"
},
Builder:Checkbox {
key = "show_herbs",
label = "Show Herb Nodes",
-- description = "Toggle visibility of herb nodes.",
default = "yes"
},
Builder:Checkbox {
key = "draw_lines",
label = "Draw Lines to Nodes",
description = "Draw lines between the player and visible nodes.",
default = "yes"
},
}
}
local DetailedFilterTab = Builder:Tab {
title = "Detailed Filters",
content = {
Builder:Group {
key = "mining_nodes_group",
title = "Mining Nodes",
content = (function()
local elements = {}
for id, node in pairs(nodes) do
if node.type == "mining" then
table.insert(elements, Builder:Checkbox {
key = "show_mining_" .. id,
label = node.name,
-- description = "Toggle visibility of " .. node.name,
default = "yes"
})
end
end
return elements
end)()
},
Builder:Group {
key = "herb_nodes_group",
title = "Herb Nodes",
content = (function()
local elements = {}
for id, node in pairs(nodes) do
if node.type == "herb" then
table.insert(elements, Builder:Checkbox {
key = "show_herb_" .. id,
label = node.name,
-- description = "Toggle visibility of " .. node.name,
default = "yes"
})
end
end
return elements
end)()
},
Builder:Button {
key = "save_preferences_button",
text = "Save Preferences",
onClick = function()
SavePreferences()
end
}
}
}
local MainWindow = Builder:Window {
key = "node_finder_window",
title = "Node Finder Settings",
width = 400, -- Increased width to accommodate more content
height = 600, -- Increased height to accommodate more content
content = {
Builder:TabGroup {
key = "main_tabs",
tabs = {
MainSettingsTab,
DetailedFilterTab,
}
}
}
}
Builder:Build(MainWindow)
Draw:Enable()