forked from minetest-mods/unified_inventory
		
	Compare commits
	
		
			11 Commits
		
	
	
		
			cb6e602497
			...
			6f132186ab
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 6f132186ab | |||
|  | e071a01372 | ||
|  | 1547ebcdd4 | ||
|  | 16265dca2d | ||
|  | 235fa841dd | ||
|  | 2c9449b6e7 | ||
|  | b5de18b196 | ||
|  | 921a6d76ee | ||
|  | 004a39aaf7 | ||
|  | eb3bb03ebf | ||
|  | e7d03626b4 | 
| @@ -10,6 +10,7 @@ read_globals = { | ||||
| 	string = {fields = {"split", "trim"}}, | ||||
| 	table = {fields = {"copy", "getn"}}, | ||||
|  | ||||
| 	"dump", | ||||
| 	"minetest", "vector", | ||||
| 	"ItemStack", "datastorage", | ||||
|  | ||||
|   | ||||
							
								
								
									
										32
									
								
								api.lua
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								api.lua
									
									
									
									
									
								
							| @@ -51,6 +51,7 @@ minetest.after(0.01, function() | ||||
| 			end | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	table.sort(ui.items_list) | ||||
| 	ui.items_list_size = #ui.items_list | ||||
| 	print("Unified Inventory. Inventory size: "..ui.items_list_size) | ||||
| @@ -183,6 +184,37 @@ minetest.after(0.01, function() | ||||
| 		ui.crafts_for.recipe[outputitemname] = new_recipe_list | ||||
| 	end | ||||
|  | ||||
| 	-- Remove unknown items from all categories | ||||
| 	local total_removed = 0 | ||||
| 	for cat_name, cat_def in pairs(ui.registered_category_items) do | ||||
| 		for itemname, _ in pairs(cat_def) do | ||||
| 			local idef = minetest.registered_items[itemname] | ||||
| 			if not idef then | ||||
| 				total_removed = total_removed + 1 | ||||
| 				--[[ | ||||
| 				-- For analysis | ||||
| 				minetest.log("warning", "[unified_inventory] Removed item '" | ||||
| 					.. itemname .. "' from category '" .. cat_name | ||||
| 					.. "'. Reason: item not registered") | ||||
| 				]] | ||||
| 				cat_def[itemname] = nil | ||||
| 			elseif not ui.is_itemdef_listable(idef) then | ||||
| 				total_removed = total_removed + 1 | ||||
| 				--[[ | ||||
| 				-- For analysis | ||||
| 				minetest.log("warning", "[unified_inventory] Removed item '" | ||||
| 					.. itemname .. "' from category '" .. cat_name | ||||
| 					.. "'. Reason: item is in 'not_in_creative_inventory' group") | ||||
| 				]] | ||||
| 				cat_def[itemname] = nil | ||||
| 			end | ||||
| 		end | ||||
| 	end | ||||
| 	if total_removed > 0 then | ||||
| 		minetest.log("info", "[unified_inventory] Removed " .. total_removed .. | ||||
| 			" items from the categories.") | ||||
| 	end | ||||
|  | ||||
| 	for _, callback in ipairs(ui.initialized_callbacks) do | ||||
| 		callback() | ||||
| 	end | ||||
|   | ||||
							
								
								
									
										2
									
								
								bags.lua
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								bags.lua
									
									
									
									
									
								
							| @@ -144,7 +144,7 @@ local function save_bags_metadata(player, bags_inv) | ||||
| 	end | ||||
| 	local meta = player:get_meta() | ||||
| 	if is_empty then | ||||
| 		meta:set_string("unified_inventory:bags", nil) | ||||
| 		meta:set_string("unified_inventory:bags", "") | ||||
| 	else | ||||
| 		meta:set_string("unified_inventory:bags", | ||||
| 			minetest.serialize(bags)) | ||||
|   | ||||
| @@ -115,6 +115,11 @@ function unified_inventory.set_category_index(category_name, index) | ||||
| 	update_category_list() | ||||
| end | ||||
| function unified_inventory.add_category_item(category_name, item) | ||||
| 	if type(item) ~= "string" then | ||||
| 		minetest.log("warning", "[unified_inventory] Cannot register category item: " .. dump(item)) | ||||
| 		return | ||||
| 	end | ||||
|  | ||||
| 	ensure_category_exists(category_name) | ||||
| 	unified_inventory.registered_category_items[category_name][item] = true | ||||
| end | ||||
|   | ||||
| @@ -1,4 +1,5 @@ | ||||
| local S = minetest.get_translator("unified_inventory") | ||||
| local ui = unified_inventory | ||||
|  | ||||
| unified_inventory.register_category('plants', { | ||||
| 	symbol = "flowers:tulip", | ||||
| @@ -25,71 +26,87 @@ unified_inventory.register_category('lighting', { | ||||
| 	label = S("Lighting") | ||||
| }) | ||||
|  | ||||
|  | ||||
| if unified_inventory.automatic_categorization then | ||||
| 	minetest.register_on_mods_loaded(function() | ||||
|  | ||||
| 		-- Add biome nodes to environment category | ||||
| 		for _,def in pairs(minetest.registered_biomes) do | ||||
| 			local env_nodes = { | ||||
| 				def.node_riverbed, def.node_top, def.node_filler, def.node_dust, | ||||
| 			} | ||||
| 			for i,node in pairs(env_nodes) do | ||||
| 				if node then | ||||
| 					unified_inventory.add_category_item('environment', node) | ||||
| 				end | ||||
| local function register_automatic_categorization() | ||||
| 	-- Add biome nodes to environment category | ||||
| 	for _,def in pairs(minetest.registered_biomes) do | ||||
| 		local env_nodes = { | ||||
| 			def.node_riverbed, def.node_top, def.node_filler, def.node_dust, | ||||
| 		} | ||||
| 		for i,node in pairs(env_nodes) do | ||||
| 			if node then | ||||
| 				unified_inventory.add_category_item('environment', node) | ||||
| 			end | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 		-- Add minable ores to minerals and everything else (pockets of stone & sand variations) to environment | ||||
| 		for _,item in  pairs(minetest.registered_ores) do | ||||
| 			if item.ore_type == "scatter" then | ||||
| 				local drop = minetest.registered_nodes[item.ore].drop | ||||
| 				if drop and drop ~= "" then | ||||
| 					unified_inventory.add_category_item('minerals', item.ore) | ||||
| 					unified_inventory.add_category_item('minerals', drop) | ||||
| 				else | ||||
| 					unified_inventory.add_category_item('environment', item.ore) | ||||
| 	-- Preparation for ore registration: find all possible drops (digging) | ||||
| 	local possible_node_dig_drops = { | ||||
| 		-- ["default:stone_with_coal"] = { "default:coal_lump", "mymod:raregem" } | ||||
| 		-- Ores may be contained multiple times, depending on drop chances. | ||||
| 	} | ||||
| 	for itemname, recipes in pairs(ui.crafts_for.usage) do | ||||
| 		for _, recipe in ipairs(recipes) do | ||||
| 			if recipe.type == "digging" or recipe.type == "digging_chance" then | ||||
| 				if not possible_node_dig_drops[itemname] then | ||||
| 					possible_node_dig_drops[itemname] = {} | ||||
| 				end | ||||
| 			else | ||||
| 				unified_inventory.add_category_item('environment', item.ore) | ||||
| 				local stack = ItemStack(recipe.output) | ||||
| 				table.insert(possible_node_dig_drops[itemname], stack:get_name()) | ||||
| 			end | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 		-- Add items by item definition | ||||
| 		for name, def in pairs(minetest.registered_items) do | ||||
| 			local group = def.groups or {} | ||||
| 			if not group.not_in_creative_inventory then | ||||
| 				if group.stair or | ||||
| 				   group.slab or | ||||
| 				   group.wall or | ||||
| 				   group.fence then | ||||
| 					unified_inventory.add_category_item('building', name) | ||||
| 				elseif group.flora or | ||||
| 					   group.flower or | ||||
| 					   group.seed or | ||||
| 					   group.leaves or | ||||
| 					   group.sapling or | ||||
| 					   group.tree then | ||||
| 					unified_inventory.add_category_item('plants', name) | ||||
| 				elseif def.type == 'tool' then | ||||
| 					unified_inventory.add_category_item('tools', name) | ||||
| 				elseif def.liquidtype == 'source' then | ||||
| 					unified_inventory.add_category_item('environment', name) | ||||
| 				elseif def.light_source and def.light_source > 0 then | ||||
| 					unified_inventory.add_category_item('lighting', name) | ||||
| 				elseif group.door or | ||||
| 					   minetest.global_exists("doors") and ( | ||||
| 					     doors.registered_doors and doors.registered_doors[name..'_a'] or | ||||
| 					     doors.registered_trapdoors and doors.registered_trapdoors[name] | ||||
| 					   ) then | ||||
| 					unified_inventory.add_category_item('building', name) | ||||
| 				end | ||||
| 	-- Add minable ores to minerals and everything else (pockets of stone & sand variations) to environment | ||||
| 	for _, odef in pairs(minetest.registered_ores) do | ||||
| 		local drops = possible_node_dig_drops[odef.ore] | ||||
| 		if drops and odef.ore_type == "scatter" then | ||||
| 			ui.add_category_item('minerals', odef.ore) | ||||
| 			-- Register all possible drops as "minerals" | ||||
| 			ui.add_category_items('minerals', drops) | ||||
| 			possible_node_dig_drops[odef.ore] = {} -- mask as handled | ||||
| 		else | ||||
| 			ui.add_category_item('environment', odef.ore) | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	-- Add items by item definition | ||||
| 	for name, def in pairs(minetest.registered_items) do | ||||
| 		local group = def.groups or {} | ||||
| 		if not group.not_in_creative_inventory then | ||||
| 			if group.stair or | ||||
| 			   group.slab or | ||||
| 			   group.wall or | ||||
| 			   group.fence then | ||||
| 				unified_inventory.add_category_item('building', name) | ||||
| 			elseif group.flora or | ||||
| 				   group.flower or | ||||
| 				   group.seed or | ||||
| 				   group.leaves or | ||||
| 				   group.sapling or | ||||
| 				   group.tree then | ||||
| 				unified_inventory.add_category_item('plants', name) | ||||
| 			elseif def.type == 'tool' then | ||||
| 				unified_inventory.add_category_item('tools', name) | ||||
| 			elseif def.liquidtype == 'source' then | ||||
| 				unified_inventory.add_category_item('environment', name) | ||||
| 			elseif def.light_source and def.light_source > 0 then | ||||
| 				unified_inventory.add_category_item('lighting', name) | ||||
| 			elseif group.door or | ||||
| 				   minetest.global_exists("doors") and ( | ||||
| 					 doors.registered_doors and doors.registered_doors[name..'_a'] or | ||||
| 					 doors.registered_trapdoors and doors.registered_trapdoors[name] | ||||
| 				   ) then | ||||
| 				unified_inventory.add_category_item('building', name) | ||||
| 			end | ||||
| 		end | ||||
| 	end) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| if ui.automatic_categorization then | ||||
| 	ui.register_on_initialized(register_automatic_categorization) | ||||
| end | ||||
|  | ||||
|  | ||||
| -- [[ | ||||
| unified_inventory.add_category_items('plants', { | ||||
| 	"default:dry_grass_5", | ||||
| @@ -256,23 +273,6 @@ unified_inventory.add_category_items('minerals', { | ||||
| 	"default:coal_lump", | ||||
| 	"default:bronzeblock", | ||||
| 	"default:goldblock", | ||||
|  | ||||
| 	"stairs:slab_bronzeblock", | ||||
| 	"stairs:slab_copperblock", | ||||
| 	"stairs:slab_steelblock", | ||||
| 	"stairs:slab_tinblock", | ||||
| 	"stairs:stair_bronzeblock", | ||||
| 	"stairs:stair_copperblock", | ||||
| 	"stairs:stair_inner_bronzeblock", | ||||
| 	"stairs:stair_inner_copperblock", | ||||
| 	"stairs:stair_inner_steelblock", | ||||
| 	"stairs:stair_inner_tinblock", | ||||
| 	"stairs:stair_outer_bronzeblock", | ||||
| 	"stairs:stair_outer_copperblock", | ||||
| 	"stairs:stair_outer_steelblock", | ||||
| 	"stairs:stair_outer_tinblock", | ||||
| 	"stairs:stair_steelblock", | ||||
| 	"stairs:stair_tinblock", | ||||
| }) | ||||
|  | ||||
| unified_inventory.add_category_items('building', { | ||||
|   | ||||
							
								
								
									
										3
									
								
								init.lua
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								init.lua
									
									
									
									
									
								
							| @@ -53,8 +53,9 @@ unified_inventory = { | ||||
| 	standard_background = "bgcolor[#0000]background9[0,0;1,1;ui_formbg_9_sliced.png;true;16]", | ||||
|  | ||||
| 	hide_disabled_buttons = minetest.settings:get_bool("unified_inventory_hide_disabled_buttons", false), | ||||
| 	hide_uncraftable_items = minetest.settings:get_bool("unified_inventory_hide_uncraftable_items", false), | ||||
|  | ||||
| 	version = 4 | ||||
| 	version = 5 | ||||
| } | ||||
|  | ||||
| local ui = unified_inventory | ||||
|   | ||||
							
								
								
									
										49
									
								
								internal.lua
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								internal.lua
									
									
									
									
									
								
							| @@ -270,8 +270,8 @@ local function formspec_add_item_browser(player, formspec, ui_peruser) | ||||
| 					button_name, minetest.formspec_escape(tooltip) | ||||
| 				) | ||||
| 				n = n + 2 | ||||
| 				list_index = list_index + 1 | ||||
| 			end | ||||
| 			list_index = list_index + 1 | ||||
| 		end | ||||
| 	end | ||||
| 	formspec[n] = "style[page_number;content_offset=0]" | ||||
| @@ -349,12 +349,29 @@ function ui.apply_filter(player, filter, search_dir) | ||||
| 	end | ||||
| 	local player_name = player:get_player_name() | ||||
|  | ||||
| 	-- Whether to show uncraftable items | ||||
| 	local fprefilter = function(_) | ||||
| 		return true | ||||
| 	end | ||||
| 	if ui.hide_uncraftable_items and not ui.is_creative(player_name) then | ||||
| 		fprefilter = function(name) | ||||
| 			return ui.get_recipe_list(name) | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	local registered_items = minetest.registered_items | ||||
| 	local lfilter = string.lower(filter) | ||||
| 	local ffilter | ||||
|  | ||||
| 	if lfilter:sub(1, 6) == "group:" then | ||||
| 		-- Group filter: all groups of the item must match | ||||
| 		local groups = lfilter:sub(7):split(",") | ||||
| 		ffilter = function(name, def) | ||||
| 		ffilter = function(name) | ||||
| 			local def = registered_items[name] | ||||
| 			if not def then | ||||
| 				return false | ||||
| 			end | ||||
|  | ||||
| 			for _, group in ipairs(groups) do | ||||
| 				if not def.groups[group] | ||||
| 				or def.groups[group] <= 0 then | ||||
| @@ -368,7 +385,12 @@ function ui.apply_filter(player, filter, search_dir) | ||||
| 		local player_info = minetest.get_player_information(player_name) | ||||
| 		local lang = player_info and player_info.lang_code or "" | ||||
|  | ||||
| 		ffilter = function(name, def) | ||||
| 		ffilter = function(name) | ||||
| 			local def = registered_items[name] | ||||
| 			if not def then | ||||
| 				return false | ||||
| 			end | ||||
|  | ||||
| 			local lname = string.lower(name) | ||||
| 			local ldesc = string.lower(def.description) | ||||
| 			local llocaldesc = minetest.get_translated_string | ||||
| @@ -378,32 +400,29 @@ function ui.apply_filter(player, filter, search_dir) | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	local is_itemdef_listable = ui.is_itemdef_listable | ||||
| 	local filtered_items = {} | ||||
|  | ||||
| 	local category = ui.current_category[player_name] or 'all' | ||||
| 	if category == 'all' then | ||||
| 		for name, def in pairs(minetest.registered_items) do | ||||
| 			if is_itemdef_listable(def) | ||||
| 			and ffilter(name, def) then | ||||
| 		for _, name in ipairs(ui.items_list) do | ||||
| 			if fprefilter(name) and ffilter(name) then | ||||
| 				table.insert(filtered_items, name) | ||||
| 			end | ||||
| 		end | ||||
| 	elseif category == 'uncategorized' then | ||||
| 		for name, def in pairs(minetest.registered_items) do | ||||
| 			if is_itemdef_listable(def) | ||||
| 			and not ui.find_category(name) | ||||
| 			and ffilter(name, def) then | ||||
| 		for _, name in ipairs(ui.items_list) do | ||||
| 			if not ui.find_category(name) | ||||
| 					and fprefilter(name) | ||||
| 					and ffilter(name) then | ||||
| 				table.insert(filtered_items, name) | ||||
| 			end | ||||
| 		end | ||||
| 	else | ||||
| 		-- Any other category is selected | ||||
| 		for name, exists in pairs(ui.registered_category_items[category]) do | ||||
| 			local def = minetest.registered_items[name] | ||||
| 			if exists and def | ||||
| 			and is_itemdef_listable(def) | ||||
| 			and ffilter(name, def) then | ||||
| 			if exists | ||||
| 					and fprefilter(name) | ||||
| 					and ffilter(name) then | ||||
| 				table.insert(filtered_items, name) | ||||
| 			end | ||||
| 		end | ||||
|   | ||||
| @@ -18,7 +18,8 @@ local function set_hud(player) | ||||
|  | ||||
| 	item_names[player_name] = { | ||||
| 		hud = player:hud_add({ | ||||
| 			hud_elem_type = "text", | ||||
| 			-- TODO: remove compatibility code when 5.8.0 is no longer used | ||||
| 			[minetest.features.hud_def_type_field and "type" or "hud_elem_type"] = "text", | ||||
| 			position = {x=0.5, y=1}, | ||||
| 			offset = off, | ||||
| 			alignment = {x=0, y=-1}, | ||||
|   | ||||
							
								
								
									
										23
									
								
								register.lua
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								register.lua
									
									
									
									
									
								
							| @@ -166,7 +166,7 @@ local function stack_image_button(x, y, w, h, buttonname_prefix, item) | ||||
| 		local group_name = name:sub(7) | ||||
| 		local group_item = ui.get_group_item(group_name) | ||||
| 		show_is_group = not group_item.sole | ||||
| 		displayitem = group_item.item or "unknown" | ||||
| 		displayitem = group_item.item or name | ||||
| 		selectitem = group_item.sole and displayitem or name | ||||
| 	end | ||||
| 	local label = show_is_group and "G" or "" | ||||
| @@ -249,11 +249,10 @@ ui.register_page("craftguide", { | ||||
|  | ||||
| 		local n = 4 | ||||
|  | ||||
| 		local item_def = minetest.registered_items[item_name] | ||||
| 		local item_name_shown | ||||
| 		if minetest.registered_items[item_name] | ||||
| 				and minetest.registered_items[item_name].description then | ||||
| 			item_name_shown = S("@1 (@2)", | ||||
| 				minetest.registered_items[item_name].description, item_name) | ||||
| 		if item_def and item_def.description then | ||||
| 			item_name_shown = S("@1 (@2)", item_def.description, item_name) | ||||
| 		else | ||||
| 			item_name_shown = item_name | ||||
| 		end | ||||
| @@ -278,12 +277,14 @@ ui.register_page("craftguide", { | ||||
| 				F(role_text[dir]), item_name_shown) | ||||
| 		n = n + 2 | ||||
|  | ||||
| 		local giveme_form = table.concat({ | ||||
| 			"label[".. (give_x+0.1)..",".. (craftguidey + 2.7) .. ";" .. F(S("Give me:")) .. "]", | ||||
| 			"button["..(give_x)..","..     (craftguidey + 2.9) .. ";0.75,0.5;craftguide_giveme_1;1]", | ||||
| 			"button["..(give_x+0.8)..",".. (craftguidey + 2.9) .. ";0.75,0.5;craftguide_giveme_10;10]", | ||||
| 			"button["..(give_x+1.6)..",".. (craftguidey + 2.9) .. ";0.75,0.5;craftguide_giveme_99;99]" | ||||
| 		}) | ||||
| 		local giveme_form = | ||||
| 			"label[" .. (give_x + 0.1) .. "," .. (craftguidey + 2.7) .. ";" .. F(S("Give me:")) .. "]" .. | ||||
| 			"button[" .. (give_x) .. "," .. (craftguidey + 2.9) .. ";0.75,0.5;craftguide_giveme_1;1]" | ||||
| 		if item_def.type ~= "tool" then | ||||
| 			giveme_form = giveme_form .. | ||||
| 				"button[" .. (give_x + 0.8) .. "," .. (craftguidey + 2.9) .. ";0.75,0.5;craftguide_giveme_10;10]" .. | ||||
| 				"button[" .. (give_x + 1.6) .. "," .. (craftguidey + 2.9) .. ";0.75,0.5;craftguide_giveme_99;99]" | ||||
| 		end | ||||
|  | ||||
| 		if not craft then | ||||
| 			-- No craft recipes available for this item. | ||||
|   | ||||
| @@ -16,6 +16,10 @@ unified_inventory_waypoints (Enable waypoints) bool true | ||||
| # If enabled, disabled buttons will be hidden instead of grayed out. | ||||
| unified_inventory_hide_disabled_buttons (Hide disabled buttons) bool false | ||||
|  | ||||
| # Hides items with no known craft recipe from the category "all" (default). | ||||
| # This setting has no effect on players in creative mode. | ||||
| unified_inventory_hide_uncraftable_items (Hide uncraftable items) bool false | ||||
|  | ||||
| # Automatically categorizes registered items based on their | ||||
| # groups. This is based on a fuzzy match, thus is not 100% accurate. | ||||
| unified_inventory_automatic_categorization (Categories: add items automatically) bool true | ||||
|   | ||||
| @@ -103,7 +103,7 @@ local function get_waypoint_data(player) | ||||
| end | ||||
|  | ||||
| ui.register_page("waypoints", { | ||||
| 	get_formspec = function(player) | ||||
| 	get_formspec = function(player, perplayer_formspec) | ||||
| 		local player_name = player:get_player_name() | ||||
| 		local wp_info_x = ui.style_full.form_header_x + 1.25 | ||||
| 		local wp_info_y = ui.style_full.form_header_y + 0.5 | ||||
| @@ -115,12 +115,16 @@ ui.register_page("waypoints", { | ||||
| 		local sel = waypoints.selected or 1 | ||||
|  | ||||
| 		local formspec = { | ||||
| 			ui.style_full.standard_inv_bg, | ||||
| 			string.format("label[%f,%f;%s]", | ||||
| 				ui.style_full.form_header_x, ui.style_full.form_header_y, F(S("Waypoints"))), | ||||
| 			"image["..wp_info_x..","..wp_info_y..";1,1;ui_waypoints_icon.png]" | ||||
| 		} | ||||
| 		local n=4 | ||||
| 		local n=3 | ||||
|  | ||||
| 		if not perplayer_formspec.is_lite_mode then | ||||
| 			formspec[n] = ui.style_full.standard_inv_bg | ||||
| 			n = n + 1 | ||||
| 		end | ||||
|  | ||||
| 		-- Tabs buttons: | ||||
| 		for i = 1, COUNT do | ||||
| @@ -212,7 +216,10 @@ ui.register_page("waypoints", { | ||||
| 		formspec[n+2] = string.format("label[%f,%f;%s: %s]", | ||||
| 			wp_info_x, wp_info_y+2.60, F(S("HUD text color")), hud_colors[waypoint.color or 1][3]) | ||||
|  | ||||
| 		return {formspec=table.concat(formspec)} | ||||
| 		return { | ||||
| 			formspec = table.concat(formspec), | ||||
| 			draw_inventory = not perplayer_formspec.is_lite_mode, | ||||
| 		} | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| @@ -220,7 +227,6 @@ ui.register_button("waypoints", { | ||||
| 	type = "image", | ||||
| 	image = "ui_waypoints_icon.png", | ||||
| 	tooltip = S("Waypoints"), | ||||
| 	hide_lite=true | ||||
| }) | ||||
|  | ||||
| local function update_hud(player, waypoints, temp, i) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user