Для реализации отрисовки тиммейтов на компасе в вашем плагине для игры Rust, вам потребуется изменить логику обновления компаса и реализовать отображение направления к тиммейтам. Ниже приведен пример кода, который может помочь вам добавить функционал отображения тиммейтов на компасе:Дороботай плагин чтобы работало отрисовка тимейта на компасе
C#:
using System.Collections.Generic;
using UnityEngine;
using Oxide.Core;
using Oxide.Core.Configuration;
namespace Oxide.Plugins
{
[Info("TeammateCompass", "YourName", "1.0.0")]
class TeammateCompass : RustPlugin
{
private DynamicConfigFile data;
private Dictionary<ulong, List<ulong>> playerFriendsData;
void Init()
{
data = Interface.Oxide.DataFileSystem.GetFile("TeammateCompass");
LoadData();
}
void LoadData()
{
playerFriendsData = data.ReadObject<Dictionary<ulong, List<ulong>>();
if (playerFriendsData == null)
playerFriendsData = new Dictionary<ulong, List<ulong>>();
}
void SaveData()
{
data.WriteObject(playerFriendsData);
}
void OnPlayerTick(BasePlayer player)
{
List<BasePlayer> teammates = GetFriendsTeammates(player);
foreach (BasePlayer teammate in teammates)
{
Vector3 direction = teammate.transform.position - player.transform.position;
float angle = Quaternion.LookRotation(direction).eulerAngles.y;
// UpdateCompass(player, angle);
UpdateCompassMarker(player, teammate, angle);
}
}
List<BasePlayer> GetFriendsTeammates(BasePlayer player)
{
List<BasePlayer> teammates = new List<BasePlayer>();
List<ulong> playerFriends = GetPlayerFriends(player.userID);
foreach (BasePlayer p in BasePlayer.activePlayerList)
{
if (playerFriends.Contains(p.userID) && p != player)
{
teammates.Add(p);
}
}
return teammates;
}
List<ulong> GetPlayerFriends(ulong playerId)
{
List<ulong> friendsList = new List<ulong>();
if (playerFriendsData.ContainsKey(playerId))
{
friendsList = playerFriendsData[playerId];
}
return friendsList;
}
void UpdateCompassMarker(BasePlayer player, BasePlayer teammate, float angle)
{
Vector3 direction = teammate.transform.position - player.transform.position;
float angleToTeammate = Quaternion.LookRotation(direction).eulerAngles.y;
float angleDifference = angleToTeammate - angle;
// Отобразить маркер направления на компасе или миникарте
player.SendConsoleCommand("compass.marker", teammate.userID.ToString(), angleDifference);
}
}
}
В этом обновленном коде функция
UpdateCompassMarker
добавляет маркеры направления к тиммейтам на компасе, используя угловую разницу между направлением игрока и направлением к тиммейту. Пожалуйста, протестируйте этот код в вашем плагине и внесите необходимые изменения в зависимости от требований вашего проекта.