• Добрый день, если вы испытываете проблемы с пополнением баланса, свяжитесь с @MrFallen.

Помогите И вроде простая задача

pagan

21 Фев 2023
94
10
17
Я всё со своим плагином, и вроде простая задача узнать под седлом лошадь на которую смотришь или нет, но я по-моему испробовал всё, но инвентарь у этого объекта так и не нашёл (думал там лежит седло). параметры которые что то говорят о его присутствии тоже не нашёл. Но я только учусь многого не знаю :( Но очень стараюсь :) Вот урезанный код где должна быть проверка:

C#:
RaycastHit hit;
if (UnityEngine.Physics.Raycast(player.eyes.HeadRay(), out hit))
{
    BaseEntity entity = hit.GetEntity();

    if (entity != null && entity.name.Contains("testridablehorse"))
       
    {
        //Puts(entity.ShouldNetworkOwnerInfo);
        if (int.Parse(dataFile["Horses"].ToString()) <= 61)
        {
            entity.Kill();
            PrintToChat(player, "Horse save");
        }
    }
}
Думал как вариант находится ли игрок в безопасной зоне, но каюсь пока не смотрел крючки если они есть такие ...
 
Решение
C#:
RaycastHit hit;
    if (UnityEngine.Physics.Raycast(player.eyes.HeadRay(), out hit))
    {
        BaseEntity entity = hit.GetEntity();
        var horseMountable = entity.GetComponent<RidableHorse>();
        if (entity != null && entity.name.Contains("testridablehorse") && horseMountable.HasSaddle() && !horseMountable.IsForSale())
        
        {
            if (int.Parse(dataFile["Horses"].ToString()) <= 61)
            {
                entity.Kill();
                PrintToChat(player, "Horse save");
 
            }
        }
    }

А ещё лучше так, а то вдруг захотят сохранять лошадей, которые в конюшнях продаются
Сам написал сам отвечаю, надеюсь кому-нибудь поможет, вот работающий код :

C#:
RaycastHit hit;
if (UnityEngine.Physics.Raycast(player.eyes.HeadRay(), out hit))
{
    BaseEntity entity = hit.GetEntity();
    var horseMountable = entity.GetComponent<RidableHorse>();
    if (entity != null && entity.name.Contains("testridablehorse") && horseMountable.HasSaddle())
        
    {
        if (int.Parse(dataFile["Horses"].ToString()) <= 61)
        {
            entity.Kill();
            PrintToChat(player, "Horse save");
 
        }
    }
}
 
  • Мне нравится
Реакции: MrFallen
C#:
RaycastHit hit;
    if (UnityEngine.Physics.Raycast(player.eyes.HeadRay(), out hit))
    {
        BaseEntity entity = hit.GetEntity();
        var horseMountable = entity.GetComponent<RidableHorse>();
        if (entity != null && entity.name.Contains("testridablehorse") && horseMountable.HasSaddle() && !horseMountable.IsForSale())
        
        {
            if (int.Parse(dataFile["Horses"].ToString()) <= 61)
            {
                entity.Kill();
                PrintToChat(player, "Horse save");
 
            }
        }
    }

А ещё лучше так, а то вдруг захотят сохранять лошадей, которые в конюшнях продаются
 
  • Мне нравится
Реакции: pagan
А просто "спросить" у игрока на чем он сидит нынче не модно? BasePlayer.GetMountedVehicle()
Надо лучами обязательно стрелять?


Я идиот, не верно прочитал тему.

думал там лежит седло
Седло - это флаги. Для которых есть методы, которые можно увидеть в классе RidableHorse внутри DLL.
 
А просто "спросить" у игрока на чем он сидит нынче не модно? BasePlayer.GetMountedVehicle()
Надо лучами обязательно стрелять?


Я идиот, не верно прочитал тему.


Седло - это флаги. Для которых есть методы, которые можно увидеть в классе RidableHorse внутри DLL.
Я новичок в написании плагинов, от слова совсем, поэтому декомпиляция библиотек это следующий шаг, кстати какой декомпилер посоветуете?
 
Разве так не получится?
C#:
var horseMountable = entity as RidableHorse;
Не пробовал, но то что я описал натыкал сам используя сторонние плагины с оксида, вышел на то как получить параметры лошади, а потом долго и нудно ковырялся .. :)
 
имея entity, зачем изобретать велосипеды?
Потому что не во всем и не всегда подойдёт явное приведение. Иногда просто напросто легче использовать геткомпонент
 
Активность
Пока никто не печатает сообщение

Похожие темы