Для исправления ошибки "CS1061: Type `ItemDefinition' does not contain a definition for `recoil'" вам необходимо обратиться к соответствующему объекту, который содержит информацию о предмете оружия и его отдаче. В Rust API нет прямого свойства
recoil
в объекте
ItemDefinition
. Обычно информация об отдаче хранится в другом объекте или свойстве.
Давайте обновим ваш код таким образом, чтобы использовать правильное свойство или объект для хранения информации об отдаче оружия. Например, если информация об отдаче хранится в самом
BaseProjectile
, вам нужно обновить соответствующую часть кода. Пожалуйста, попробуйте следующий вариант:
C#:
using Oxide.Core;
using Oxide.Plugins;
using UnityEngine;
namespace RecoilPlugin
{
public class RecoilProperties
{
public float recoilHeightMax { get; set; }
public RecoilProperties(float recoilHeightMax)
{
this.recoilHeightMax = recoilHeightMax;
}
}
[Info("NewRecoil", "YourName", "1.0.0")]
public class NewRecoilPlugin : RustPlugin
{
private const float baseRecoilPitch = 0.1f;
private const float baseRecoilYaw = 0f;
private const float recoilIncrease = 0.05f;
void OnWeaponShoot(BasePlayer player, ItemModProjectile mod, Item item, global::ProtoBuf.PlayerProjectileAttack proto)
{
if (item.info.shortname == "rifle.ak" || item.info.shortname == "rifle.lr300")
{
var recoilPitch = baseRecoilPitch;
var recoilYaw = baseRecoilYaw;
var heldEntity = player.GetHeldEntity() as BaseProjectile;
if (heldEntity != null)
{
var aimCone = heldEntity.aimCone;
var scopeMultiplier = 1.0f;
if (IsScopeHolosight(item))
{
scopeMultiplier = 0.3f;
}
else if (IsScope8x(item))
{
scopeMultiplier = 0.2f;
}
recoilPitch *= scopeMultiplier;
recoilYaw *= scopeMultiplier;
var randomPitch = UnityEngine.Random.Range(-0.1f, 0.1f);
var randomYaw = UnityEngine.Random.Range(-0.1f, 0.1f);
aimCone = Mathf.Min(aimCone + recoilPitch + randomPitch, 3.0f);
heldEntity.aimCone = aimCone;
var recoilProps = new RecoilProperties(aimCone);
PrintToChat(player, "Отдача для " + item.info.displayName.english + " обработана. Новое вертикальное отклонение: " + aimCone);
}
}
}
private bool IsScopeHolosight(Item item)
{
return item.info.shortname == "weapon.mod.holosight";
}
private bool IsScope8x(Item item)
{
return item.info.shortname == "weapon.mod.small.scope";
}
}
}
Попробуйте использовать этот обновленный код. Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться.