C#:
using System.Collections.Generic;
using Oxide.Core.Plugins;
namespace Oxide.Plugins
{
[Info("TCmap", "WuyZar", "1.0.0")]
[Description("https://discord.gg/R9McPkST96")]
public class TCmap : RustPlugin
{
private Dictionary<BuildingPrivlidge, VendingMachineMapMarker> markerByEntity = new Dictionary<BuildingPrivlidge, VendingMachineMapMarker>();
private const string prefabPath = "assets/prefabs/deployable/vendingmachine/vending_mapmarker.prefab";
private void Init()
{
Unsubscribe(nameof(OnEntitySpawned));
}
private void OnServerInitialized()
{
Subscribe(nameof(OnEntitySpawned));
foreach (var entity in UnityEngine.Object.FindObjectsOfType<BuildingPrivlidge>())
{
OnEntitySpawned(entity);
}
}
private void Unload()
{
foreach (var marker in markerByEntity.Values)
{
if (marker.IsValid() && !marker.IsDestroyed)
{
marker.Kill();
}
}
var markers = UnityEngine.Object.FindObjectsOfType<VendingMachineMapMarker>();
foreach (var marker in markers)
{
if (marker.IsValid() && !marker.IsDestroyed)
{
marker.Kill();
}
}
}
private void OnEntitySpawned(BuildingPrivlidge entity)
{
var marker = GameManager.server.CreateEntity(prefabPath, entity.transform.position) as VendingMachineMapMarker;
if (marker == null) return;
marker.enableSaving = false;
marker.SetFlag(BaseEntity.Flags.Busy, true);
marker.Spawn();
markerByEntity[entity] = marker;
}
private void OnEntityDeath(BaseCombatEntity entity, HitInfo info)
{
var buildingPrivlidge = entity as BuildingPrivlidge;
if (buildingPrivlidge == null) return;
VendingMachineMapMarker marker;
if (!markerByEntity.TryGetValue(buildingPrivlidge, out marker)) return;
marker.SetFlag(BaseEntity.Flags.Busy, false);
marker.SendNetworkUpdate();
markerByEntity.Remove(buildingPrivlidge);
}
[ChatCommand("tcremove")]
private void RemoveMarkersCommand(BasePlayer player, string command, string[] args)
{
if (!player.IsAdmin)
{
SendReply(player, "You must be an admin to use this command.");
return;
}
foreach (var marker in markerByEntity.Values)
{
if (marker.IsValid() && !marker.IsDestroyed)
{
marker.Kill();
}
}
var markers = UnityEngine.Object.FindObjectsOfType<VendingMachineMapMarker>();
foreach (var marker in markers)
{
if (marker.IsValid() && !marker.IsDestroyed)
{
marker.Kill();
}
}
markerByEntity.Clear();
SendReply(player, "All markers removed from the map.");
}
}
}