Plum's minimap - Rotating map, bordersnapping blips and more!

Can I ask, does it work with underground things too? For example an SCP game?

You could remove the roof of your game and map out your map that way :slight_smile:

one way would be to have a cache of the formatted terrain data and load it in chunks perhaps I’ll write one soon! :ReadVoxels(Position,Region)

Made a script to add players as tags

Made something myself for this minimap since I didn’t find anything so might help some people idk I made a script so you can see players as tags on the map.

image

  1. first step
    add a local script inside of PlumsMinimap name it whatever you want and also add a normal script inside of serverscriptservice so like this
    image

  2. paste this inside the script that you just made in serverscriptservice

-->> Service
local CollectionService = game:GetService("CollectionService")
local Players = game:GetService("Players")

-->> Script
Players.PlayerAdded:Connect(function(player)
	player.CharacterAdded:Connect(function(char)
		if char.PrimaryPart then
			CollectionService:AddTag(char.PrimaryPart, player.Name)
		end
	end)
end)
  1. paste this inside the local script that you just made inside of PlumsMinimap module
-->> Services
local Players = game:GetService("Players")

-->> Modules
local Settings = require(script.Parent.Settings)

-->> Variables
local Tag = {
	tagName = nil; --This is the name of the tag you give the part in your workspace / ReplicatedStorage.
	toolTip = nil; --This is the text you want to show up if you hover over the blip on the map. You can set it to "" to hide it.
	iconID = 5254553771; --This is the image of your blip.
	color = Color3.fromRGB(255,255,255); --The color showing on the background
	size = UDim2.new(0, 20, 0, 20); --The size of the blip, when it shows on the map
	snapToBorder = true; --If you want it to snap on the border.
	rotate = true; --If you want the blip to rotate with its world orientation.
};

-->> Script
for _, player in pairs(Players:GetPlayers()) do
	if player ~= Players.LocalPlayer then
		local newTag = Tag
		newTag.tagName = player.Name
		newTag.toolTip = player.DisplayName.." @"..player.Name
		table.insert(Settings["Tags"], newTag)
	end
end

Players.PlayerAdded:Connect(function(player)
	if player ~= Players.LocalPlayer then
		local newTag = Tag
		newTag.tagName = player.Name
		newTag.toolTip = player.DisplayName.." @"..player.Name
		table.insert(Settings["Tags"], newTag)
	end
end)

Players.PlayerRemoving:Connect(function(player)
	if player ~= Players.LocalPlayer then
		local index = nil
		for i, tag in pairs(Settings["Tags"]) do
			if tag.tagName == player.Name then
				index = i
				break
			end
		end
		
		if index then
			table.remove(Settings["Tags"], index)
		end
	end
end)

and that should be it it should now work you can change the settings of the tag inside of the local script just don’t change the tagName cause then it will break everything and if you wanna change the toolTip delete line 23 and 32

I put this here since it didn’t take me long to make and some people with no experience in scripting might find this useful so here it is.

4 Likes

Wild, that is pretty nice. Will use this in my game for testing for sure, I feel my minimap gets too cluttered tho from all the points of interest… maybe I will disable some others.

1 Like

found some issues with this btw so I am working on fixing this and will maybe then send an updated version here since it bugs for some reason when playing with more then 2 players and also when your the first player in a server it doesn’t work

Replace in Blip (Minimap.Internal.MinimapController.Blip) Line 96-97 with the following:

				else
					if TagInfo.team == false and self.state.Visible == false then
						self.state.Visible = true
					elseif TagInfo.team == true then
						if plr.Team.Name == TagInfo.tagName then
							self.state.Visible = true
						else
							self.state.Visible = false
						end
					elseif self.state.Visible == false then
						self.state.Visible = true
					end
				end

Then with CollectionService, add Team Names to the HumanoidRootPart upon joining, then add all teams to the blips in Settings, make sure tagName is the exact same as the Team name and add a new boolean setting called “team” to all blips. Set it to true for all teams and to false for other blips.

This will display other team members but only if you are on the same team.

Also, if you don’t want your own player to display the blip, simply remove the tag locally

Welcome!

I wonder how you could make it fullscreen somehow like when u click on the minimap and its open up a big ui with the minimap in it and there an X button to close it ( my coding skill is trash so idk how to do it much)

If anyone does want the map itself to be draggable you can override the position of the player, to a position of your choice in MinimapController

For example:

	local ROOTPART_POS = humanoidRootPart.CFrame.p

			if Settings.Technical.overrideMapFocus then
				if Settings.Technical.isMinimapExpanded then
					ROOTPART_POS = Settings.Technical.overrideMapFocus
				end
			end

You can create this overrideMapFocus as a Vector3 which is where you want it to focus the map towards. Kind of like an invisible player, as that’s how it acts.

You need to create your own dragging functions to change this variable, my code to do this isn’t tested enough to recommend but you can use InputBegan/InputChanged to get the input position and change overrideMapFocus. You’ll need some good Lua knowledge to do this but hopefully it can be included with my contribution sent to OP. Once I finish and test my code for it I can send it here or you can message me and I can send over the prototype.