Чтобы дополнить плагин функцией изменения количества патронов в магазине при выдаче или отзыве разрешения, нам нужно добавить проверку наличия у игрока соответствующего разрешения и затем изменить количество патронов в зависимости от этого статуса. Для этого мы можем использовать события выдачи и отзыва разрешений, а также обновить обработчик спауна оружия.Переделай плагин для того чтобы после выдачи permission игроку выдовалась 38 патрон а если забрали то обратно 30 патрон в обойму
Предполагается, что у вас уже есть система выдачи и управления разрешениями на сервере, и вы используете Oxide/Umod для Rust.
Вот обновлённая версия плагина:
C#:
using Oxide.Core.Plugins;
using Oxide.Core;
using System.Collections.Generic;
using UnityEngine;
namespace Oxide.Plugins
{
[Info("Custom Magazine Size by Permission", "YourName", "0.3.0")]
public class CustomMagazineSizeByPermission : RustPlugin
{
private const int DefaultMagazineSize = 30;
private const int CustomMagazineSize = 38;
private void Init()
{
permission.RegisterPermission("custommagazinesize.ak", this);
// Здесь можно добавить больше оружия и соответствующих разрешений
}
private void OnServerInitialized()
{
foreach (var player in BasePlayer.activePlayerList)
{
UpdatePlayerAmmo(player);
}
}
private void OnUserPermissionGranted(string id, string perm)
{
if (!perm.StartsWith("custommagazinesize")) return;
var player = BasePlayer.FindByID(ulong.Parse(id));
if (player == null) return;
UpdatePlayerAmmo(player);
}
private void OnUserPermissionRevoked(string id, string perm)
{
if (!perm.StartsWith("custommagazinesize")) return;
var player = BasePlayer.FindByID(ulong.Parse(id));
if (player == null) return;
UpdatePlayerAmmo(player);
}
private void OnEntitySpawned(BaseNetworkable entity)
{
if (entity == null) return;
var weapon = entity as BaseProjectile;
if (weapon == null) return;
var player = weapon.GetOwnerPlayer();
if (player == null) return;
UpdatePlayerAmmo(player);
}
private void UpdatePlayerAmmo(BasePlayer player)
{
foreach (Item item in player.inventory.AllItems())
{
var weapon = item.GetHeldEntity() as BaseProjectile;
if (weapon == null) continue;
if (weapon.ShortPrefabName.Contains("ak"))
{
if (permission.UserHasPermission(player.UserIDString, "custommagazinesize.ak"))
{
weapon.primaryMagazine.capacity = CustomMagazineSize;
weapon.primaryMagazine.contents = CustomMagazineSize;
}
else
{
weapon.primaryMagazine.capacity = DefaultMagazineSize;
weapon.primaryMagazine.contents = DefaultMagazineSize;
}
weapon.SendNetworkUpdateImmediate();
}
// Добавьте дополнительную логику для других типов оружия здесь
}
}
}
}
Этот код теперь включает в себя метод
UpdatePlayerAmmo
, который обновляет количество патронов в магазине у всех оружий игрока в зависимости от наличия разрешения. При спауне оружия, выдаче или отзыве разрешения вызывается этот метод. Этот подход позволяет автоматически корректировать количество патронов в магазине после изменения прав доступа игрока, обеспечивая более плавную и интуитивно понятную работу с разрешениями на сервере.