Посмотреть вложение 18168
Посмотреть вложение 18169
Посмотреть вложение 18170
Меня интересует больше пока что работа на с#, сильно не пинайте за ошибки, скажите что не так. 10 поставил чисто проверить работу скрипта.
Не уверен на 100%, но если я не ошибаюсь, то команда может принимать объект (то есть Player) только первым аргументом для игрока, который вводит команду.
Дальше ты уже используешь типы данных struct, то есть числа (boolean, float, int, byte, long), текст (string) и т.д.
Таким образом если ты хочешь просто проверить работает ли твоя клиентская сторона, то исправь код на следующий:
Сервер:
C#:
[Command("heal")]
public void SetHealth(Player player, int heal)
{
player.TriggerEvent("PlayerHealth", heal);
player.SendChatMessage($"Вы пытаетесь изменить своё здоровье на {heal}");
}
Клиент:
C#:
public void PlayerHealth(object[] args)
{
if (args == null || args.Length == 0) return;
int health = Convert.ToInt32(args[0]);
if (health < 0) return;
RAGE.Elements.Player.LocalPlayer.SetHealth(health);
}
Если же ты хочешь делать команду по target, то нужно вписывать либо динамический Id игрока, который устанавливается RAGEMP, либо в будущем свой статичный, который выдаётся каждому игроку навсегда.
Для использования логики с ID RAGEMP:
C#:
[Command("heal")]
public void SetHealth(Player player, int targetId, int heal)
{
Player target = NAPI.Pools.GetAllPlayers().FirstOrDefault(x => x.Value == targetId);
if (target == null)
{
player.SendChatMessage($"Игрока с Id {targetId} не существует в данный момент.");
return;
}
target.TriggerEvent("PlayerHealth", heal);
player.SendChatMessage($"Вы пытаетесь изменить здоровье {target.Name} ({target.Value}) на {heal}");
}
Ну либо с именем, как тебе удобнее:
C#:
[Command("heal", GreedyArg = true)]
public void SetHealth(Player player, int heal, string targetName)
{
Player target = NAPI.Pools.GetAllPlayers().FirstOrDefault(x => x.Name == targetName);
if (target == null)
{
player.SendChatMessage($"Игрока с именем {targetName} не существует в данный момент.");
return;
}
target.TriggerEvent("PlayerHealth", heal);
player.SendChatMessage($"Вы пытаетесь изменить здоровье {target.Name} ({target.Value}) на {heal}");
}
В любом случае тебе нужно искать объект игрока по каким-то ключевым данным, ты не можешь получить его в команду автоматически.