C#:
using GTANetworkAPI;
using System.Collections.Generic;
namespace ServerSide
{
public class InputMarker
{
public float posX { get; set; }
public float posY { get; set; }
public float posZ { get; set; }
public Vector3 position = new Vector3();
public string stringClientCefTrigger { get; set; }
public static List<InputMarker> CordList = new List<InputMarker>()
{
};
public static void CreateInputMarker(string textLabel, float posX, float posY, float posZ, int iconBlip, byte colorBlip, string stringClientCefTrigger)
{
NAPI.TextLabel.CreateTextLabel(textLabel, new Vector3(posX, posY, posZ + 0.8f), 20.0f, 0.75f, 4, new Color(255, 255, 255));//Основной тект
NAPI.TextLabel.CreateTextLabel("Нажмите [E]", new Vector3(posX, posY - 0.5f, posZ + 0.8f), 20.0f, 0.75f, 4, new Color(255, 255, 255));//Нажмите [E]
NAPI.Marker.CreateMarker(MarkerType.VerticalCylinder, new Vector3(posX, posY, posZ - 1), new Vector3(), new Vector3(), 1.0f, new Color(255, 255, 255));//Маркер
Blip blip = NAPI.Blip.CreateBlip(iconBlip, new Vector3(posX, posY, posZ), 1.0f, colorBlip);//Блип
NAPI.Blip.SetBlipName(blip, textLabel);//Установка имени блипу
NAPI.Blip.SetBlipShortRange(blip, true); //Установка видимости блипу
InputMarker inputMarker = new InputMarker();
inputMarker.stringClientCefTrigger = stringClientCefTrigger;
inputMarker.position=new Vector3(posX, posY, posZ);
InputMarker.CordList.Add(inputMarker);
}
public static InputMarker inputMarkerIsWithinReach(Player player, float distance = 1.5f)
{
InputMarker h = null;
foreach (InputMarker inputMarker in CordList)
{
if (inputMarker != null && player.Position.DistanceTo(inputMarker.position) < distance)
{
h = inputMarker;
NAPI.ClientEvent.TriggerClientEvent(player, inputMarker.stringClientCefTrigger);
}
}
return h;
}
}
}
C#:
//помещаем в Event.ResourceStart, передаем параметры, название нашего маркера, координаты, id блипа, цвет и само название ивента на клиентской части.
InputMarker.CreateInputMarker("Автосалон высокого класса", -802.8635f, -223.81265f, 37.21845f, 523, 44,"showAutoSalonWindow");
InputMarker.CreateInputMarker("Работа: дальнобойщик", 1245.0433f, -3184.297f, 6.0282335f, 477, 52, "showTrukersWindow");
//дальше отлавливаем нажатие кнопки
[RemoteEvent("CLIENT:SERVER:OnPlayerPressE")]
private void OnPlayerPressE(Player player)
{
if(InputMarker.inputMarkerIsWithinReach(player)!=null)//проверяем стоит ли игрок возле нашего маркера
{
player.SendNotification("Вы успешно вошли в CEF");
}
}
//и клиентская часть
RAGE.Input.Bind(VirtualKeys.E, true, () =>
{
Events.CallRemote("CLIENT:SERVER:OnPlayerPressE");
});
Выглядит вот так
Заранее еще извиняюсь за говнокод если он присутствует и то что может как то не красиво оформил тему, т.к выкладываю первый раз
Последнее редактирование модератором: