Конечно, вот доработанный код плагина для управления отдачей оружия в игре Rust 261 devblog, учитывающий изменения в структуре данных параметров отдачи:
C#:
using Oxide.Core;
using Oxide.Core.Plugins;
using System;
using UnityEngine;
namespace Oxide.Plugins
{
[Info("RecoilControl", "YourName", "1.0.0")]
class RecoilControl : RustPlugin
{
void OnServerInitialized()
{
ModifyRecoil();
}
private void ModifyRecoil()
{
foreach (var itemDefinition in ItemManager.GetItemDefinitions())
{
if (itemDefinition.shortname.Contains("pistol") || itemDefinition.shortname.Contains("rifle"))
{
var heldEntityPrefab = itemDefinition.GetComponent<ItemModEntity>()?.entityPrefab;
if (heldEntityPrefab != null)
{
var heldEntity = heldEntityPrefab.Get().GetComponent<BaseProjectile>();
if (heldEntity != null)
{
var primaryMagazine = heldEntity.primaryMagazine;
if (primaryMagazine != null)
{
var recoil = primaryMagazine.recoil;
if (recoil != null)
{
recoil.minYaw *= 0.5f; // Уменьшаем отдачу по горизонтали
recoil.maxYaw *= 0.5f;
recoil.minPitch *= 0.5f; // Уменьшаем отдачу по вертикали
recoil.maxPitch *= 0.5f;
}
}
}
}
}
}
}
}
}
В этом обновленном коде я использовал структуру данных для доступа к параметрам отдачи оружия в соответствии с изменениями в версии 261 devblog. Пожалуйста, добавьте этот код в ваш плагин на сервере Rust и протестируйте его. Если у вас возникнут дополнительные вопросы или потребуется дальнейшая помощь, не стесняйтесь обращаться!
Исправь код чтобы работало тп
using System;
using Oxide.Core.Plugins;
using Oxide.Core.Libraries.Covalence;
using UnityEngine;
namespace Oxide.Plugins
{
[Info("TeleportBanditandTown Remake", "KET", "3.0.0")]
class Town : RustPlugin
{
//корды бандитки
float xbanditka = -13.3f;
float ybanditka = 24.5f;
float zbanditka = 160.4f;
//корды города
float xtown = -15.8f;
float ytown = 50.3f;
float ztown = 22.3f;
//состояния телепорта
bool IsTp = false;
string prefix = "<color=yellow>[GOLD RUST] </color>";
private readonly System.Collections.Generic.Dictionary<string, DateTime> lastTeleportTimes = new System.Collections.Generic.Dictionary<string, DateTime>();
//таймеры для телепортации
private Timer banditTimer;
private Timer townTimer;
[ChatCommand("banditka")]
void BanditPos(BasePlayer player)
{
string playerId = player.UserIDString;
if (IsTp)
{
PrintToChat(player, $"{prefix} Вы не можете использовать эту команду сейчас.");
return;
}
if (lastTeleportTimes.ContainsKey(playerId) && (DateTime.Now - lastTeleportTimes[playerId]).TotalSeconds < 15)
{
PrintToChat(player, $"{prefix} Вы не можете телепортироваться так часто.");
return;
}
if (lastTeleportTimes.ContainsKey(playerId) && (DateTime.Now - lastTeleportTimes[playerId]).TotalSeconds < 300)
{
TimeSpan remainingTime = TimeSpan.FromSeconds(300 - (DateTime.Now - lastTeleportTimes[playerId]).TotalSeconds);
PrintToChat(player, $"{prefix} Следующая телепортация будет доступна через {remainingTime.Minutes} минут(-ы) и {remainingTime.Seconds} секунд(-ы).");
return;
}
IsTp = true;
PrintToChat(player, $"{prefix} Вы будете телепортированы в бандитку через 15 секунд.");
banditTimer = timer.Once(15, () =>
{
player.StartSleeping();
player.Teleport(new Vector3(xbanditka, ybanditka, zbanditka));
PrintToChat(player, $"{prefix} Вы были телепортированы в бандитку.");
lastTeleportTimes[playerId] = DateTime.Now;
IsTp = false;
});
}
[ChatCommand("town")]
void TownPos(BasePlayer player)
{
string playerId = player.UserIDString;
if (IsTp)
{
PrintToChat(player, $"{prefix} Вы не можете использовать эту команду сейчас.");
return;
}
if (lastTeleportTimes.ContainsKey(playerId) && (DateTime.Now - lastTeleportTimes[playerId]).TotalSeconds < 15)
{
PrintToChat(player, $"{prefix} Вы не можете телепортироваться так часто.");
return;
}
if (lastTeleportTimes.ContainsKey(playerId) && (DateTime.Now - lastTeleportTimes[playerId]).TotalSeconds < 300)
{
TimeSpan remainingTime = TimeSpan.FromSeconds(300 - (DateTime.Now - lastTeleportTimes[playerId]).TotalSeconds);
PrintToChat(player, $"{prefix} Следующая телепортация будет доступна через {remainingTime.Minutes} минут(-ы) и {remainingTime.Seconds} секунд(-ы).");
return;
}
IsTp = true;
PrintToChat(player, $"{prefix} Вы будете телепортированы в мирный город через 15 секунд.");
townTimer = timer.Once(15, () =>
{
player.StartSleeping();
player.Teleport(new Vector3(xtown, ytown, ztown));
PrintToChat(player, $"{prefix} Вы были телепортированы в Мирный город.");
lastTeleportTimes[playerId] = DateTime.Now;
IsTp = false;
});
}
// Если умер, получил урон, нанес урон - отмена телепортации.
void OnPlayerDeath(BasePlayer player)
{
string playerId = player.UserIDString;
if ((banditTimer != null && !banditTimer.Destroyed) || (townTimer != null && !townTimer.Destroyed))
{
if (banditTimer != null && !banditTimer.Destroyed)
banditTimer.Destroy();
if (townTimer != null && !townTimer.Destroyed)
townTimer.Destroy();
PrintToChat(player, $"{prefix} Телепортация отменена. Вы умерли.");
IsTp = false; // Установка IsTp в false при отмене телепортации по смерти игрока
}
}
void OnEntityTakeDamage(BaseCombatEntity entity, HitInfo info)
{
var player = info?.Initiator as BasePlayer;
if (player != null)
{
string playerId = player.UserIDString;
if (entity is BasePlayer)
{
if ((banditTimer != null && !banditTimer.Destroyed) || (townTimer != null && !townTimer.Destroyed))
{
if (banditTimer != null && !banditTimer.Destroyed)
banditTimer.Destroy();
if (townTimer != null && !townTimer.Destroyed)
townTimer.Destroy();
PrintToChat(player, $"{prefix} Телепортация отменена. Вы получили урон.");
IsTp = false;
}
}
else if (info?.Initiator is BasePlayer)
{
var target = entity as BasePlayer;
if ((banditTimer != null && !banditTimer.Destroyed) || (townTimer != null && !townTimer.Destroyed))
{
if (banditTimer != null && !banditTimer.Destroyed)
banditTimer.Destroy();
if (townTimer != null && !townTimer.Destroyed)
townTimer.Destroy();
PrintToChat(player, $"{prefix} Телепортация отменена. Вы нанесли урон.");
IsTp = false;
}
}
}
}
[ChatCommand("tb_tpc")]
void TeleportOtmena(BasePlayer player)
{
if ((banditTimer != null && !banditTimer.Destroyed) || (townTimer != null && !townTimer.Destroyed))
{
if (banditTimer != null && !banditTimer.Destroyed)
banditTimer.Destroy();
if (townTimer != null && !townTimer.Destroyed)
townTimer.Destroy();
PrintToChat(player, $"{prefix} Телепортация отменена.");
IsTp = false;
}
}
[ChatCommand("tb_help")]
void TeleHelp(BasePlayer player)
{
PrintToChat(player, $"{prefix} \n <color=green>/town</color> - Телепортация в Мирный Город \n <color=green>/banditka</color> - Телепортация в Город Бандитов \n <color=green>/tb_tpc</color> - Отмена телепортации \n <color=green>/tb_help</color> - Список команд\n {prefix}");
}
}
}