Since new vending machine UI (todays update) it doesn't show the names anymore

Hi there, since today's update, it no longer shows the names of the players.

Same issue, but idk if this plugin is maintained anymore...though i hope it is.

Maxxx

Same issue, but idk if this plugin is maintained anymore...though i hope it is.

 

 

 

Small modification. Should show name correctly even if overlapping other markers:

using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using Convert = System.Convert;
using CompanionServer.Handlers;


namespace Oxide.Plugins
{
    [Info("Map My Players", "1AK1", "1.1.1")]
    [Description("Display all players positions with texted markers on ingame map (name/steamID/activ/sleepers) with autorefresh")]

    public class MapMyPlayers : RustPlugin
    {
        string Prefix = "[MMP] :";                       // CHAT PLUGIN PREFIX
        string PrefixColor = "#008000";                 // CHAT PLUGIN PREFIX COLOR
        ulong SteamIDIcon = 76561############;          // SteamID FOR PLUGIN ICON

        bool debug = false;
        float refreshrate = 20;
        float MarkerRadius = 0.2f;
        bool ShowSteamID = false;

        const string MMPAdmin = "mapmyplayers.admin"; 

        bool ConfigChanged;
		private Timer mmptimer;

        public List<MapMarkerGenericRadius> PublicRadMarker = new List<MapMarkerGenericRadius>(); 
        public List<VendingMachineMapMarker> PublicVendMarker = new List<VendingMachineMapMarker>(); 
        public Dictionary<ulong, string> activplayers = new Dictionary<ulong, string>();
        public Dictionary<ulong, string> sleepplayers = new Dictionary<ulong, string>();
        public Dictionary<ulong, Vector3> playerspos = new Dictionary<ulong, Vector3>();

		private void Init()
        {
            LoadVariables();
            permission.RegisterPermission(MMPAdmin, this);
        }

#region CONFIG

    protected override void LoadDefaultConfig()
        {
            LoadVariables();
        }

        private void LoadVariables()
        {
            Prefix = Convert.ToString(GetConfig("Chat Settings", "Prefix", "[MMP] :"));                       // CHAT PLUGIN PREFIX
            PrefixColor = Convert.ToString(GetConfig("Chat Settings", "PrefixColor", "#008000"));                // CHAT PLUGIN PREFIX COLOR
            SteamIDIcon = Convert.ToUInt64(GetConfig("Chat Settings", "SteamIDIcon", "76561############"));  
            refreshrate = Convert.ToSingle(GetConfig("Refresh Rate", "Value in seconds", "20"));
            MarkerRadius = Convert.ToSingle(GetConfig("Markers", "radius size (0.2 by default)", "0.2"));
            ShowSteamID = Convert.ToBoolean(GetConfig("Markers Label", "Show player steam ID", "false"));

            if (!ConfigChanged) return;
            SaveConfig();
            ConfigChanged = false;
        }

        private object GetConfig(string menu, string datavalue, object defaultValue)
        {
            var data = Config[menu] as Dictionary<string, object>;
            if (data == null)
            {
                data = new Dictionary<string, object>();
                Config[menu] = data;
                ConfigChanged = true;
            }
            object value;
            if (!data.TryGetValue(datavalue, out value))
            {
                value = defaultValue;
                data[datavalue] = value;
                ConfigChanged = true;
            }
            return value;
        }

#endregion

        void Unload()
        {
            MarkerDisplayingDelete(null, null, null);
			if (mmptimer != null) mmptimer.Destroy();
        }

        object CanNetworkTo(MapMarkerGenericRadius marker, BasePlayer player)
        {
            if (!PublicRadMarker.Contains(marker))
            {
                return null;
            }

            if (player.IPlayer.HasPermission(MMPAdmin) && PublicRadMarker.Contains(marker))
            {
                return null;
            }

            return false;
        }

        object CanNetworkTo(VendingMachineMapMarker marker, BasePlayer player)
        {
            if (!PublicVendMarker.Contains(marker))
            {
                return null;
            }

            if (player.IPlayer.HasPermission(MMPAdmin) && PublicVendMarker.Contains(marker))
            {
                return null;
            }

            return false;
        }

        #region Lang messages

        protected override void LoadDefaultMessages()
        {
            lang.RegisterMessages(new Dictionary<string, string>
            {
                {"NoAdminPermMsg", "Not authorized to control this plugin."},
            }, this, "en");

            lang.RegisterMessages(new Dictionary<string, string>
            {
                {"NoAdminPermMsg", "Vous n'êtes pas autorisé à contrôler ce plugin."},
            }, this, "fr");
        }


#endregion

        void MarkerDisplayingDelete(BasePlayer player, string command, string[] args)
        { 
            foreach (var Rad in PublicRadMarker)
            {
                if (Rad != null)
                {
                    Rad.Kill();
                    Rad.SendUpdate();   
                }
            }
            if (debug) Puts($"-> DEL ALL RAD MARKER");
            foreach (var Vend in PublicVendMarker)
            {
                if (Vend != null) Vend.Kill();
            }
            if (debug) Puts($"-> DEL ALL VEND MARKER");
            PublicRadMarker.Clear();
            PublicVendMarker.Clear();         
        }

        private void ListPlayers()
        {
#region EACH ACTIV
            activplayers.Clear();
            playerspos.Clear();
            sleepplayers.Clear();
            foreach(BasePlayer player in BasePlayer.activePlayerList.ToList())
            {
                Vector3 pos;
                pos = player.transform.position;
                if (pos == null)
                {           
                    if (debug){Puts($"-> MY MARKER Position update ERROR for {player.UserIDString}");}
                    return;
                }
                string playername = player.displayName.ToString();
                if (playername.Length > 16){playername = playername.Substring(0,16);}
                activplayers.Remove(player.userID);
                activplayers.Add(player.userID, playername);
                playerspos.Remove(player.userID);
                playerspos.Add(player.userID, pos);
            }
#endregion

 #region EACH SLEEPER

            foreach(BasePlayer player in BasePlayer.sleepingPlayerList.ToList())
            {
                Vector3 pos;
                pos = player.transform.position;
                if (pos == null)
                {           
                    if (debug){Puts($"-> MY MARKER Position update ERROR SLEEPER for {player.UserIDString}");}
                    return;
                }
                string playername = player.displayName.ToString();
                if (playername.Length > 16){playername = playername.Substring(0,16);}
                sleepplayers.Remove(player.userID);
                sleepplayers.Add(player.userID, playername);
                playerspos.Remove(player.userID);
                playerspos.Add(player.userID, pos);
            }
#endregion

        }

        [ChatCommand("mmp_stop")] 
        private void MapMyCommandStop(BasePlayer player, string command, string[] args)
        {
            bool isadmin = permission.UserHasPermission(player.UserIDString, MMPAdmin);
            if (isadmin == false)
            {
                Player.Message(player, $"{lang.GetMessage("NoAdminPermMsg", this, player.UserIDString)}",$"<color={PrefixColor}> {Prefix} </color>", SteamIDIcon);
                return;
            }
            //chat stop
            MarkerDisplayingDelete(null, null, null);
			if (mmptimer != null){mmptimer.Destroy();}

        }

        [ChatCommand("mmp_show")]
        private void MapMyCommand(BasePlayer player, string command, string[] args)
        {
            bool isadmin = permission.UserHasPermission(player.UserIDString, MMPAdmin);
            if (isadmin == false)
            {
                Player.Message(player, $"{lang.GetMessage("NoAdminPermMsg", this, player.UserIDString)}",$"<color={PrefixColor}> {Prefix} </color>", SteamIDIcon);
                return;
            }
            if (debug) Puts($"-> REFRESH RATE IS {refreshrate}");
            //chat show
            GenerateMarkers();
            mmptimer = timer.Repeat(refreshrate, 0, () =>
            {
                GenerateMarkers();
            });   
        }

#region marker generator

        void GenerateMarkers()
        { 
            ListPlayers();
            MarkerDisplayingDelete(null, null, null);
            MapMarkerGenericRadius MapMarkerCustom; 
            VendingMachineMapMarker MapMarkerVendingCustom;
            Vector3 pos;
            string activname;
            string sleepername;
            foreach (var playeringame in activplayers)
            {
                playerspos.TryGetValue(playeringame.Key, out pos);
                activplayers.TryGetValue(playeringame.Key, out activname);
                if (debug){Puts($"-> LOADED MARKER ACTIV LOCATION");}           
                MapMarkerVendingCustom = GameManager.server.CreateEntity("assets/prefabs/deployable/vendingmachine/vending_mapmarker.prefab", pos) as VendingMachineMapMarker;
                if (MapMarkerVendingCustom == null) return;
                if (ShowSteamID) MapMarkerVendingCustom.markerShopName = $"ACTIVE PLAYER\n{activname}\nSTEAM : {playeringame.Key}";
                else MapMarkerVendingCustom.markerShopName = $"{activname} - Online";
                PublicVendMarker.Add(MapMarkerVendingCustom);
                if (debug) Puts($"-> VENDING MARKER STORED DICT");
                MapMarkerCustom = GameManager.server.CreateEntity("assets/prefabs/tools/map/genericradiusmarker.prefab", pos) as MapMarkerGenericRadius;
                MapMarkerCustom.alpha = 1.0f;
                MapMarkerCustom.color1 = Color.green;
                MapMarkerCustom.color2 = Color.black;
                MapMarkerCustom.radius = MarkerRadius;
                PublicRadMarker.Add(MapMarkerCustom);
                if (debug) {Puts($"-> SPAWN MARKER FOR ACTIV PLAYER {activname}");}      
            }

            foreach (var playersleepin in sleepplayers)
            {
                playerspos.TryGetValue(playersleepin.Key, out pos);
                sleepplayers.TryGetValue(playersleepin.Key, out sleepername);
                if (debug){Puts($"-> LOADED MARKER ACTIV LOCATION");}
                MapMarkerVendingCustom = GameManager.server.CreateEntity("assets/prefabs/deployable/vendingmachine/vending_mapmarker.prefab", pos) as VendingMachineMapMarker;
                if (MapMarkerVendingCustom == null) return;
                if (ShowSteamID) MapMarkerVendingCustom.markerShopName = $"SLEEPER PLAYER\n{sleepername}\nSTEAM : {playersleepin.Key}";
                else MapMarkerVendingCustom.markerShopName = $"{sleepername} - Sleeper";
                PublicVendMarker.Add(MapMarkerVendingCustom);
                if (debug) Puts($"-> VENDING MARKER STORED DICT");
                MapMarkerCustom = GameManager.server.CreateEntity("assets/prefabs/tools/map/genericradiusmarker.prefab", pos) as MapMarkerGenericRadius;
                MapMarkerCustom.alpha = 1.0f;
                MapMarkerCustom.color1 = Color.red;
                MapMarkerCustom.color2 = Color.black;
                MapMarkerCustom.radius = MarkerRadius;
                PublicRadMarker.Add(MapMarkerCustom);
                if (debug) Puts($"-> SPAWN MARKER FOR SLEEPING PLAYER {sleepername}"); 
            }
            foreach (var Vend in PublicVendMarker)
            {
                Vend.Spawn();
                MapMarker.serverMapMarkers.Remove(Vend);
                if (debug){Puts($"-> SPAWN ALL VEND MARKER");}             
            }
            foreach (var Rad in PublicRadMarker)
            {
                Rad.Spawn();
                MapMarker.serverMapMarkers.Remove(Rad);
                Rad.SendUpdate();   
                if (debug){Puts($"-> SPAWN ALL RAD MARKER");}         
            }               
        }
#endregion
    }
}

Thx mate. It´s working again since April i think, but not as before due to FP changes.... So i´ll give it a try with your code. 

Maxxx

Thx mate. It´s working again since April i think, but not as before due to FP changes.... So i´ll give it a try with your code. 

Works a little better with mine, eg when players are stacked together, and shortened text to get around any other space limitations