• Хостинг игровых серверов

    Максимальная производительность для ваших игровых серверов!

    Заказать сейчас

GPT-3.5 Turbo kkk111999zxookkanuszmjjjjj

Нейросеть GPT-3.5 Turbo доступна всем пользователям. Для доступа к GPT-4 Turbo необходимо приобрести «Prime».
object CanDropActiveItem(BasePlayer player)
{
try
{
Item item = player.GetActiveItem();
if (item == null) return null;

WeaponConfig weaponOptions = FindWeaponOption(item.info.shortname);
if (weaponOptions == null) return null;

if (player == null || player.IsNpc || player is NPCMurderer) return null;

foreach (var perm in weaponOptions.Permissions)
{
if (!permission.UserHasPermission(player.UserIDString, perm)) return true;
if (permission.UserHasPermission(player.UserIDString, perm) &&
weaponOptions.PermissionSettings[perm].DropOnDeath == false) return true;
if (permission.UserHasPermission(player.UserIDString, perm) &&
weaponOptions.PermissionSettings[perm].DropOnDeath) return false;
}
}
catch (System.Exception ex)
{
Puts("CanDropActiveItem threw Exception: " + ex) ;
throw;
}
ошибка cs0150
Ошибка CS0150 указывает на то, что ожидается константное значение, но в данном случае используется не константное значение в коде. В данном методе CanDropActiveItem, возвращаемое значение должно быть константным (например, true или false), но в вашем коде возвращается null, что не является константой.

Для исправления ошибки CS0150 в данном случае, вам следует явно определить и вернуть константное булево значение вместо null. Например, вы можете вернуть true или false в зависимости от логики вашего метода. Вот пример исправленного кода:

C#:
bool CanDropActiveItem(BasePlayer player)
{
    try
    {
        Item item = player.GetActiveItem();
        if (item == null) return false;

        WeaponConfig weaponOptions = FindWeaponOption(item.info.shortname);
        if (weaponOptions == null) return false;

        if (player == null || player.IsNpc || player is NPCMurderer) return false;

        foreach (var perm in weaponOptions.Permissions)
        {
            if (!permission.UserHasPermission(player.UserIDString, perm)) return true;
            if (permission.UserHasPermission(player.UserIDString, perm) && !weaponOptions.PermissionSettings[perm].DropOnDeath) return true;
            if (permission.UserHasPermission(player.UserIDString, perm) && weaponOptions.PermissionSettings[perm].DropOnDeath) return false;
        }
        
        // Добавьте возврат по умолчанию, если необходимо
        return true; // или false в зависимости от логики вашего метода
    }
    catch (System.Exception ex)
    {
        Puts("CanDropActiveItem threw Exception: " + ex);
        throw;
    }
}

После внесения подобных изменений и возврата константного значения в вашем методе CanDropActiveItem, ошибка CS0150 не должна возникать. Пожалуйста, примените данное исправление и перекомпилируйте ваш проект. Если у вас возникнут дополнительные вопросы или понадобится дополнительная помощь, не стесняйтесь обращаться.
 
Ошибка CS0150 указывает на то, что ожидается константное значение, но в данном случае используется не константное значение в коде. В данном методе CanDropActiveItem, возвращаемое значение должно быть константным (например, true или false), но в вашем коде возвращается null, что не является константой.

Для исправления ошибки CS0150 в данном случае, вам следует явно определить и вернуть константное булево значение вместо null. Например, вы можете вернуть true или false в зависимости от логики вашего метода. Вот пример исправленного кода:

C#:
bool CanDropActiveItem(BasePlayer player)
{
    try
    {
        Item item = player.GetActiveItem();
        if (item == null) return false;

        WeaponConfig weaponOptions = FindWeaponOption(item.info.shortname);
        if (weaponOptions == null) return false;

        if (player == null || player.IsNpc || player is NPCMurderer) return false;

        foreach (var perm in weaponOptions.Permissions)
        {
            if (!permission.UserHasPermission(player.UserIDString, perm)) return true;
            if (permission.UserHasPermission(player.UserIDString, perm) && !weaponOptions.PermissionSettings[perm].DropOnDeath) return true;
            if (permission.UserHasPermission(player.UserIDString, perm) && weaponOptions.PermissionSettings[perm].DropOnDeath) return false;
        }
       
        // Добавьте возврат по умолчанию, если необходимо
        return true; // или false в зависимости от логики вашего метода
    }
    catch (System.Exception ex)
    {
        Puts("CanDropActiveItem threw Exception: " + ex);
        throw;
    }
}

После внесения подобных изменений и возврата константного значения в вашем методе CanDropActiveItem, ошибка CS0150 не должна возникать. Пожалуйста, примените данное исправление и перекомпилируйте ваш проект. Если у вас возникнут дополнительные вопросы или понадобится дополнительная помощь, не стесняйтесь обращаться.
cs0150

object CanDropActiveItem(BasePlayer player)
{
try
{
Item item = player.GetActiveItem();
if (item == null) return null;

WeaponConfig weaponOptions = FindWeaponOption(item.info.shortname);
if (weaponOptions == null) return null;

if (player == null || player.IsNpc || player is NPCMurderer) return null;

foreach (var perm in weaponOptions.Permissions)
{
if (!permission.UserHasPermission(player.UserIDString, perm)) return true;
if (permission.UserHasPermission(player.UserIDString, perm) &&
weaponOptions.PermissionSettings[perm].DropOnDeath == false) return true;
if (permission.UserHasPermission(player.UserIDString, perm) &&
weaponOptions.PermissionSettings[perm].DropOnDeath) return false;
}
}
catch (System.Exception ex)
{
Puts("CanDropActiveItem threw Exception: " + ex) ;
throw;
}

return false;
}
 
cs0150

object CanDropActiveItem(BasePlayer player)
{
try
{
Item item = player.GetActiveItem();
if (item == null) return null;

WeaponConfig weaponOptions = FindWeaponOption(item.info.shortname);
if (weaponOptions == null) return null;

if (player == null || player.IsNpc || player is NPCMurderer) return null;

foreach (var perm in weaponOptions.Permissions)
{
if (!permission.UserHasPermission(player.UserIDString, perm)) return true;
if (permission.UserHasPermission(player.UserIDString, perm) &&
weaponOptions.PermissionSettings[perm].DropOnDeath == false) return true;
if (permission.UserHasPermission(player.UserIDString, perm) &&
weaponOptions.PermissionSettings[perm].DropOnDeath) return false;
}
}
catch (System.Exception ex)
{
Puts("CanDropActiveItem threw Exception: " + ex) ;
throw;
}

return false;
}
Ошибка CS0150 возникает из-за несоответствия типов возвращаемого значения метода CanDropActiveItem. В данном случае метод должен возвращать булево значение bool, но он объявлен с возвращаемым типом object, что вызывает ошибку.

Чтобы исправить ошибку CS0150, вам следует изменить возвращаемый тип метода CanDropActiveItem на bool, так как логика метода указывает на необходимость возвращения булевого значения true или false. Вот исправленный код:

C#:
bool CanDropActiveItem(BasePlayer player)
{
    try
    {
        Item item = player.GetActiveItem();
        if (item == null) return false;

        WeaponConfig weaponOptions = FindWeaponOption(item.info.shortname);
        if (weaponOptions == null) return false;

        if (player == null || player.IsNpc || player is NPCMurderer) return false;

        foreach (var perm in weaponOptions.Permissions)
        {
            if (!permission.UserHasPermission(player.UserIDString, perm)) return true;
            if (permission.UserHasPermission(player.UserIDString, perm) && !weaponOptions.PermissionSettings[perm].DropOnDeath) return true;
            if (permission.UserHasPermission(player.UserIDString, perm) && weaponOptions.PermissionSettings[perm].DropOnDeath) return false;
        }
    }
    catch (System.Exception ex)
    {
        Puts("CanDropActiveItem threw Exception: " + ex);
        throw;
    }

    return false;
}
После внесения этого изменения и перекомпиляции вашего проекта, ошибка CS0150 не должна больше возникать. Пожалуйста, протестируйте исправления и убедитесь, что метод работает правильно. Если у вас возникнут дополнительные вопросы или потребуется дополнительная помощь, не стесняйтесь обращаться.
 
Ошибка CS0150 возникает из-за несоответствия типов возвращаемого значения метода CanDropActiveItem. В данном случае метод должен возвращать булево значение bool, но он объявлен с возвращаемым типом object, что вызывает ошибку.

Чтобы исправить ошибку CS0150, вам следует изменить возвращаемый тип метода CanDropActiveItem на bool, так как логика метода указывает на необходимость возвращения булевого значения true или false. Вот исправленный код:

C#:
bool CanDropActiveItem(BasePlayer player)
{
    try
    {
        Item item = player.GetActiveItem();
        if (item == null) return false;

        WeaponConfig weaponOptions = FindWeaponOption(item.info.shortname);
        if (weaponOptions == null) return false;

        if (player == null || player.IsNpc || player is NPCMurderer) return false;

        foreach (var perm in weaponOptions.Permissions)
        {
            if (!permission.UserHasPermission(player.UserIDString, perm)) return true;
            if (permission.UserHasPermission(player.UserIDString, perm) && !weaponOptions.PermissionSettings[perm].DropOnDeath) return true;
            if (permission.UserHasPermission(player.UserIDString, perm) && weaponOptions.PermissionSettings[perm].DropOnDeath) return false;
        }
    }
    catch (System.Exception ex)
    {
        Puts("CanDropActiveItem threw Exception: " + ex);
        throw;
    }

    return false;
}
После внесения этого изменения и перекомпиляции вашего проекта, ошибка CS0150 не должна больше возникать. Пожалуйста, протестируйте исправления и убедитесь, что метод работает правильно. Если у вас возникнут дополнительные вопросы или потребуется дополнительная помощь, не стесняйтесь обращаться.
не исправилась
 
не исправилась
Для исправления ошибки CS0150 в вашем коде, где метод CanDropActiveItem должен возвращать булево значение, вам необходимо изменить его возвращаемый тип на bool. Давайте попробуем другой подход к исправлению этой проблемы:

C#:
bool CanDropActiveItem(BasePlayer player)
{
    try
    {
        Item item = player.GetActiveItem();
        if (item == null) return false;

        WeaponConfig weaponOptions = FindWeaponOption(item.info.shortname);
        if (weaponOptions == null) return false;

        if (player == null || player.IsNpc || player is NPCMurderer) return false;

        foreach (var perm in weaponOptions.Permissions)
        {
            if (!permission.UserHasPermission(player.UserIDString, perm)) return true;
            if (permission.UserHasPermission(player.UserIDString, perm) && !weaponOptions.PermissionSettings[perm].DropOnDeath) return true;
            if (permission.UserHasPermission(player.UserIDString, perm) && weaponOptions.PermissionSettings[perm].DropOnDeath) return false;
        }
    }
    catch (System.Exception ex)
    {
        Puts("CanDropActiveItem threw Exception: " + ex);
        throw;
    }

    return false;
}

Пожалуйста, попробуйте использовать этот исправленный код, где тип возвращаемого значения метода CanDropActiveItem изменен на bool. После внесения этого изменения, перекомпилируйте ваш проект. Если ошибка CS0150 все еще возникает, пожалуйста, проверьте другие места в коде, где может происходить возвращение значения и убедитесь, что оно соответствует ожидаемому типу. Если у вас возникнут дополнительные вопросы или нужна дополнительная помощь, не стесняйтесь обращаться.
 
Для исправления ошибки CS0150 в вашем коде, где метод CanDropActiveItem должен возвращать булево значение, вам необходимо изменить его возвращаемый тип на bool. Давайте попробуем другой подход к исправлению этой проблемы:

C#:
bool CanDropActiveItem(BasePlayer player)
{
    try
    {
        Item item = player.GetActiveItem();
        if (item == null) return false;

        WeaponConfig weaponOptions = FindWeaponOption(item.info.shortname);
        if (weaponOptions == null) return false;

        if (player == null || player.IsNpc || player is NPCMurderer) return false;

        foreach (var perm in weaponOptions.Permissions)
        {
            if (!permission.UserHasPermission(player.UserIDString, perm)) return true;
            if (permission.UserHasPermission(player.UserIDString, perm) && !weaponOptions.PermissionSettings[perm].DropOnDeath) return true;
            if (permission.UserHasPermission(player.UserIDString, perm) && weaponOptions.PermissionSettings[perm].DropOnDeath) return false;
        }
    }
    catch (System.Exception ex)
    {
        Puts("CanDropActiveItem threw Exception: " + ex);
        throw;
    }

    return false;
}

Пожалуйста, попробуйте использовать этот исправленный код, где тип возвращаемого значения метода CanDropActiveItem изменен на bool. После внесения этого изменения, перекомпилируйте ваш проект. Если ошибка CS0150 все еще возникает, пожалуйста, проверьте другие места в коде, где может происходить возвращение значения и убедитесь, что оно соответствует ожидаемому типу. Если у вас возникнут дополнительные вопросы или нужна дополнительная помощь, не стесняйтесь обращаться.
FirearmModifier.cs(502,57): error CS0150: A constant value is expected
 
FirearmModifier.cs(502,57): error CS0150: A constant value is expected
Ошибка CS0150 указывает на то, что ожидается константное значение, но в данном случае используется не константное значение в коде.

В вашем коде, на строке 502 метода CanDropActiveItem, вы пытаетесь вернуть значение, которое не является константой. Для исправления этой ошибки, убедитесь, что возвращаемое значение метода является константой типа bool.

Попробуйте изменить ваш код следующим образом:

C#:
bool CanDropActiveItem(BasePlayer player)
{
    try
    {
        Item item = player.GetActiveItem();
        if (item == null) return false;

        WeaponConfig weaponOptions = FindWeaponOption(item.info.shortname);
        if (weaponOptions == null) return false;

        if (player == null || player.IsNpc || player is NPCMurderer) return false;

        foreach (var perm in weaponOptions.Permissions)
        {
            if (!permission.UserHasPermission(player.UserIDString, perm)) return true;
            if (permission.UserHasPermission(player.UserIDString, perm) && !weaponOptions.PermissionSettings[perm].DropOnDeath) return true;
            if (permission.UserHasPermission(player.UserIDString, perm) && weaponOptions.PermissionSettings[perm].DropOnDeath) return false;
        }
    }
    catch (System.Exception ex)
    {
        Puts("CanDropActiveItem threw Exception: " + ex);
        throw;
    }

    return false;
}

После внесения этого изменения, перекомпилируйте ваш проект. Этот код возвращает константное булево значение true или false, что должно устранить ошибку CS0150. Если у вас возникнут дополнительные вопросы или понадобится дальнейшая помощь, не стесняйтесь обращаться.
 
Для исправления ошибки CS0150 в вашем коде, где метод CanDropActiveItem должен возвращать булево значение, вам необходимо изменить его возвращаемый тип на bool. Давайте попробуем другой подход к исправлению этой проблемы:

C#:
bool CanDropActiveItem(BasePlayer player)
{
    try
    {
        Item item = player.GetActiveItem();
        if (item == null) return false;

        WeaponConfig weaponOptions = FindWeaponOption(item.info.shortname);
        if (weaponOptions == null) return false;

        if (player == null || player.IsNpc || player is NPCMurderer) return false;

        foreach (var perm in weaponOptions.Permissions)
        {
            if (!permission.UserHasPermission(player.UserIDString, perm)) return true;
            if (permission.UserHasPermission(player.UserIDString, perm) && !weaponOptions.PermissionSettings[perm].DropOnDeath) return true;
            if (permission.UserHasPermission(player.UserIDString, perm) && weaponOptions.PermissionSettings[perm].DropOnDeath) return false;
        }
    }
    catch (System.Exception ex)
    {
        Puts("CanDropActiveItem threw Exception: " + ex);
        throw;
    }

    return false;
}

Пожалуйста, попробуйте использовать этот исправленный код, где тип возвращаемого значения метода CanDropActiveItem изменен на bool. После внесения этого изменения, перекомпилируйте ваш проект. Если ошибка CS0150 все еще возникает, пожалуйста, проверьте другие места в коде, где может происходить возвращение значения и убедитесь, что оно соответствует ожидаемому типу. Если у вас возникнут дополнительные вопросы или нужна дополнительная помощь, не стесняйтесь обращаться.
using Newtonsoft.Json;
using Oxide.Core.Libraries.Covalence;
using System.Collections.Generic;
using System.Linq;
using WebSocketSharp;

/*
* This update 1.2.3
* Max Durability permission fixes
* other fixes/edits
*
* This update 1.3.0
* Added More Permissions
* Added More Config Options
*
* This update 1.4.0
* Partial Re-write
* Patched New Commands
* Added infinity ammo no reload required
* Added Weapon Names
* Added Drop Weapon on Death toggle/feature
*
* this update 1.4.1
* Fixed admin permission ops
* fixed inifinity issues
* fixed Drop Weapon on Death toggle/feature
*
* This update 1.4.2
* Added Skin Id Support on item crafted
* Added Ammo Type Support on item crafted
* Added Preloaded Magazine Size support on item crafted
* Updated Lang file correctly now
* Fixed command weapon name renaming issue
* More in the works.
*/

namespace Oxide.Plugins
{
[Info("Firearm Modifier", "Khan", "1.4.2")]
[Description("Allows you to change Magazine Size + Weapon Condition levels")]
public class FirearmModifier : CovalencePlugin
{
#region Fields

private string Admin = "firearmmodifier.admin";

private PluginConfig _config;
private static FirearmModifier _instance;

private List<string> Exclude = new List<string>
{
"bow_hunting.entity",
"compound_bow.entity",
"crossbow.entity"
};

#endregion

#region Config

protected override void LoadDefaultConfig() => _config = new PluginConfig();

protected override void LoadConfig()
{
base.LoadConfig();

try
{
_config = Config.ReadObject<PluginConfig>();

if (_config == null)
{
throw new JsonException();
}

if (!_config.ToDictionary().Keys.SequenceEqual(Config.ToDictionary(x => x.Key, x => x.Value).Keys))
{
PrintWarning($"Configuration file {Name}.json was Updated");
SaveConfig();
}
}
catch
{
PrintError("Configuration file is corrupt! Loading Default Config");
PrintError(
"Your Configuration file is corrupt! Please verify your config file at https://jsonlint.com/");
LoadDefaultConfig();
}
}

protected override void SaveConfig() => Config.WriteObject(_config, true);

private class PluginConfig
{
[JsonProperty("Weapon Options")]
public Dictionary<string, WeaponConfig> WeaponOptions = new Dictionary<string, WeaponConfig>();

public string ToJson() =>
JsonConvert.SerializeObject(this);

public Dictionary<string, object> ToDictionary() =>
JsonConvert.DeserializeObject<Dictionary<string, object>>(ToJson());
}

private class WeaponConfig
{
public Dictionary<string, PermissionSetting> PermissionSettings = new Dictionary<string, PermissionSetting>();

[JsonIgnore]
public string[] Permissions => PermissionSettings.Keys.ToArray();

public PermissionSetting FindPermissionSetting(string permission)
{
PermissionSetting permissionSetting;
return PermissionSettings.TryGetValue(permission, out permissionSetting) ? permissionSetting : null;
}
}

public class PermissionSetting
{
public ulong SkinId;
public int MagazineSize;
public int PreloadSize;
public float Condition;
public bool InfiniteCondition;
public bool InfiniteAmmo;
public bool DropOnDeath;
public string WeaponName = "";
public string AmmoType = "";

public void SetSkinId(IPlayer player, string displayName, string value)
{
ulong id;
if (!ulong.TryParse(value, out id))
{
player.Message(GetMessage("Syntax", player.Id));
return;
}

SkinId = id;
player.Reply(GetMessage("Success", player.Id, displayName, "skin", SkinId));
}

public void SetMagazineSize(IPlayer player, string displayName, string value)
{
int size;
if (!int.TryParse(value, out size))
{
player.Message(GetMessage("Syntax", player.Id));
return;
}

MagazineSize = size;
player.Reply(GetMessage("Success", player.Id, displayName, "magazinesize", MagazineSize));
}

public void SetPreloadSize(IPlayer player, string displayName, string value)
{
int size;
if (!int.TryParse(value, out size))
{
player.Message(GetMessage("Syntax", player.Id));
return;
}

PreloadSize = size;
player.Reply(GetMessage("Success", player.Id, displayName, "preloadsize", PreloadSize));
}

public void SetCondition(IPlayer player, string displayName, string value)
{
float size;
if (!float.TryParse(value, out size))
{
player.Message(GetMessage("Syntax", player.Id));
return;
}

Condition = size;
player.Reply(GetMessage("Success", player.Id, displayName, "condition", Condition));
}

public void SetMax(IPlayer player, string displayName, string value)
{
bool boolean;
if (!bool.TryParse(value, out boolean))
{
player.Message(GetMessage("Syntax", player.Id));
return;
}

InfiniteCondition = boolean;
player.Reply(GetMessage("Success", player.Id, displayName, "max", InfiniteCondition));
}

public void SetMaxAmmo(IPlayer player, string displayName, string value)
{
bool boolean;
if (!bool.TryParse(value, out boolean))
{
player.Message(GetMessage("Syntax", player.Id));
return;
}

InfiniteAmmo = boolean;
player.Reply(GetMessage("Success", player.Id, displayName, "maxammo", InfiniteAmmo));
}

public void SetDropOnDeath(IPlayer player, string displayName, string value)
{
bool boolean;
if (!bool.TryParse(value, out boolean))
{
player.Message(GetMessage("Syntax", player.Id));
return;
}

DropOnDeath = boolean;
player.Reply(GetMessage("Success", player.Id, displayName, "drop", DropOnDeath));
}

public void SetWeaponName(IPlayer player, string displayName, string value)
{
if (string.IsNullOrEmpty(value))
{
player.Message(GetMessage("Syntax", player.Id));
return;
}

WeaponName = value;
player.Reply(GetMessage("Success", player.Id, displayName, "name", WeaponName));
}

public void SetAmmoType(IPlayer player, string displayName, string value)
{
if (string.IsNullOrEmpty(value))
{
player.Message(GetMessage("Syntax", player.Id));
return;
}

AmmoType = value;
player.Reply(GetMessage("Success", player.Id, displayName, "ammotype", AmmoType));
}
}

#endregion

#region Oxide

private void OnServerInitialized()
{
foreach (var itemDefinition in ItemManager.itemList)
{
ItemModEntity itemModEntity = itemDefinition.GetComponent<ItemModEntity>();
if (itemModEntity == null) continue;

BaseProjectile baseProjectile = itemModEntity.entityPrefab?.Get()?.GetComponent<BaseProjectile>();
if (baseProjectile == null) continue;

if (Exclude.Contains(itemDefinition.shortname) || _config.WeaponOptions.ContainsKey(itemDefinition.shortname)) continue;

_config.WeaponOptions.Add(itemDefinition.shortname, new WeaponConfig
{
PermissionSettings = new Dictionary<string, PermissionSetting>
{
{
"firearmmodifier.1",
new PermissionSetting
{
MagazineSize = baseProjectile.primaryMagazine.definition.builtInSize,
PreloadSize = baseProjectile.primaryMagazine.contents,
Condition = itemDefinition.condition.max,
InfiniteCondition = false,
InfiniteAmmo = false,
DropOnDeath = false,
WeaponName = "",
AmmoType = "",
SkinId = 0
}
},
{
"firearmmodifier.2",
new PermissionSetting
{
MagazineSize = baseProjectile.primaryMagazine.definition.builtInSize,
PreloadSize = baseProjectile.primaryMagazine.contents,
Condition = itemDefinition.condition.max,
InfiniteCondition = false,
InfiniteAmmo = false,
DropOnDeath = false,
WeaponName = "",
AmmoType = "",
SkinId = 0
}
},
{
"firearmmodifier.3",
new PermissionSetting
{
MagazineSize = baseProjectile.primaryMagazine.definition.builtInSize,
PreloadSize = baseProjectile.primaryMagazine.contents,
Condition = itemDefinition.condition.max,
InfiniteCondition = false,
InfiniteAmmo = false,
DropOnDeath = false,
WeaponName = "",
AmmoType = "",
SkinId = 0
}
},
{
"firearmmodifier.4",
new PermissionSetting
{
MagazineSize = baseProjectile.primaryMagazine.definition.builtInSize,
PreloadSize = baseProjectile.primaryMagazine.contents,
Condition = itemDefinition.condition.max,
InfiniteCondition = false,
InfiniteAmmo = false,
DropOnDeath = false,
WeaponName = "",
AmmoType = "",
SkinId = 0
}
},
{
"firearmmodifier.5",
new PermissionSetting
{
MagazineSize = baseProjectile.primaryMagazine.definition.builtInSize,
PreloadSize = baseProjectile.primaryMagazine.contents,
Condition = itemDefinition.condition.max,
InfiniteCondition = false,
InfiniteAmmo = false,
DropOnDeath = false,
WeaponName = "",
AmmoType = "",
SkinId = 0
}
}
}
});
}

SaveConfig();
}

private void Init()
{
permission.RegisterPermission(Admin, this);
}

private void Loaded()
{
_instance = this;
foreach (var items in _config.WeaponOptions.Select(x => x.Value.PermissionSettings.Keys).ToArray())
{
foreach (var item in items)
{
if (permission.PermissionExists(item, this)) continue;

permission.RegisterPermission(item, this);
}
}
}

private void Unload()
{
_instance = null;
}

#endregion

#region Core

private WeaponConfig FindWeaponOption(string shortname)
{
WeaponConfig weaponConfig;
return _config.WeaponOptions.TryGetValue(shortname, out weaponConfig) ? weaponConfig : null;
}

private void OnReloadWeapon(BasePlayer player, BaseProjectile projectile)
{
Item item = projectile.GetItem();
if (item == null) return;

WeaponConfig weaponOptions = FindWeaponOption(item.info.shortname);
if (weaponOptions == null) return;

foreach (var perm in weaponOptions.Permissions)
{
if (!permission.UserHasPermission(player.UserIDString, perm)) continue;
projectile.primaryMagazine.definition.builtInSize = weaponOptions.PermissionSettings[perm].MagazineSize;
projectile.primaryMagazine.capacity = weaponOptions.PermissionSettings[perm].MagazineSize;
if (!weaponOptions.PermissionSettings[perm].AmmoType.IsNullOrEmpty())
{
var ammo = ItemManager.FindItemDefinition(weaponOptions.PermissionSettings[perm].AmmoType);
projectile.primaryMagazine.ammoType = ammo;
}
projectile.SendNetworkUpdateImmediate();
break;
}
}

private void OnItemCraftFinished(ItemCraftTask task, Item item)
{
BaseProjectile projectile = item?.GetHeldEntity() as BaseProjectile;
if (projectile == null) return;

WeaponConfig weaponOptions = FindWeaponOption(item.info.shortname);
if (weaponOptions == null) return;

foreach (var perm in weaponOptions.Permissions)
{
if (!permission.UserHasPermission(task.owner.UserIDString, perm)) continue;
item._maxCondition = weaponOptions.PermissionSettings[perm].Condition;
item.condition = weaponOptions.PermissionSettings[perm].Condition;
projectile.primaryMagazine.contents = weaponOptions.PermissionSettings[perm].PreloadSize;
if (!weaponOptions.PermissionSettings[perm].AmmoType.IsNullOrEmpty())
{
var ammo = ItemManager.FindItemDefinition(weaponOptions.PermissionSettings[perm].AmmoType);
projectile.primaryMagazine.ammoType = ammo;
}
item.skin = weaponOptions.PermissionSettings[perm].SkinId;
if (!weaponOptions.PermissionSettings[perm].WeaponName.IsNullOrEmpty())
{
item.name = weaponOptions.PermissionSettings[perm].WeaponName;
item.MarkDirty();
}
projectile.SendNetworkUpdateImmediate();
break;
}
}

private void OnLoseCondition(Item item)
{
BasePlayer player = item.GetOwnerPlayer();
if (player == null) return;

WeaponConfig weaponOptions = FindWeaponOption(item.info.shortname);
if (weaponOptions == null) return;

foreach (var perm in weaponOptions.Permissions)
{
if (!permission.UserHasPermission(player.UserIDString, perm)) continue;
if (permission.UserHasPermission(player.UserIDString, perm) && weaponOptions.PermissionSettings[perm].InfiniteCondition == false) continue;
item.condition = weaponOptions.PermissionSettings[perm].Condition;
break;
}
}

private void OnWeaponFired(BaseProjectile projectile, BasePlayer player)
{
Item item = projectile.GetItem();
if (item == null) return;

WeaponConfig weaponOptions = FindWeaponOption(item.info.shortname);
if (weaponOptions == null) return;

foreach (var perm in weaponOptions.Permissions)
{
if (!permission.UserHasPermission(player.UserIDString, perm)) continue;
if (permission.UserHasPermission(player.UserIDString, perm) && weaponOptions.PermissionSettings[perm].InfiniteAmmo == false) continue;
if (projectile.primaryMagazine.contents > 0) continue;
projectile.primaryMagazine.contents = projectile.primaryMagazine.capacity;
projectile.SendNetworkUpdateImmediate();
break;
}
}

private void OnItemAddedToContainer(ItemContainer container, Item item)
{
BasePlayer player = item.GetOwnerPlayer();
if (player == null) return;

WeaponConfig weaponOptions = FindWeaponOption(item.info.shortname);
if (weaponOptions == null) return;

foreach (var perm in weaponOptions.Permissions)
{
if (!permission.UserHasPermission(player.UserIDString, perm)) continue;
if (weaponOptions.PermissionSettings[perm].WeaponName.IsNullOrEmpty()) continue;
item.name = weaponOptions.PermissionSettings[perm].WeaponName;
item.MarkDirty();
break;
}
}

bool CanDropActiveItem(BasePlayer player)
{
try
{
Item item = player.GetActiveItem();
if (item == null) return false;

WeaponConfig weaponOptions = FindWeaponOption(item.info.shortname);
if (weaponOptions == null) return false;

if (player == null || player.IsNpc || player is NPCMurderer) return false;

foreach (var perm in weaponOptions.Permissions)
{
if (!permission.UserHasPermission(player.UserIDString, perm)) return true;
if (permission.UserHasPermission(player.UserIDString, perm) && !weaponOptions.PermissionSettings[perm].DropOnDeath) return true;
if (permission.UserHasPermission(player.UserIDString, perm) && weaponOptions.PermissionSettings[perm].DropOnDeath) return false;
}
}
catch (System.Exception ex)
{
Puts("CanDropActiveItem threw Exception: " + ex);
throw;
}

return false;
}

#endregion

#region Commands

[Command("modify")]
private void Cmdmodify(IPlayer player, string command, string[] args)
{
if (!player.HasPermission("firearmmodifier.admin"))
{
player.Message(GetMessage("NoPerm", player.Id));
return;
}

if (args.Length < 3)
{
player.Reply(GetMessage("Syntax", player.Id));
return;
}

WeaponConfig weaponoption = FindWeaponOption(args[0].ToLower());
if (weaponoption == null)
{
player.Reply(GetMessage("InvalidSelection", player.Id));
return;
}

ItemDefinition itemDefinition = ItemManager.FindItemDefinition(args[0]);
if (itemDefinition == null)
{
player.Reply(GetMessage("InvalidItem", player.Id));
return;
}

PermissionSetting permissionSetting = weaponoption.FindPermissionSetting(args[1]);
if (permissionSetting == null)
{
player.Reply(GetMessage("InvalidPermission", player.Id));
return;
}

switch (args[2].ToLower())
{
case "magazinesize":
permissionSetting.SetMagazineSize(player, itemDefinition.displayName.english, args[3]);
SaveConfig();
break;
case "preloadsize":
permissionSetting.SetPreloadSize(player, itemDefinition.displayName.english, args[3]);
SaveConfig();
break;
case "skin":
permissionSetting.SetSkinId(player, itemDefinition.displayName.english, args[3]);
SaveConfig();
break;
case "condition":
permissionSetting.SetCondition(player, itemDefinition.displayName.english, args[3]);
SaveConfig();
break;
case "max":
permissionSetting.SetMax(player, itemDefinition.displayName.english, args[3]);
SaveConfig();
break;
case "maxammo":
permissionSetting.SetMaxAmmo(player, itemDefinition.displayName.english, args[3]);
SaveConfig();
break;
case "drop":
permissionSetting.SetDropOnDeath(player, itemDefinition.displayName.english, args[3]);
break;
case "name":
permissionSetting.SetWeaponName(player, itemDefinition.displayName.english, string.Join(" ",args[3]));
SaveConfig();
break;
case "ammotype":
permissionSetting.SetAmmoType(player, itemDefinition.displayName.english, string.Join(" ",args[3]));
SaveConfig();
break;
default:
player.Message(GetMessage("Syntax", player.Id));
break;
}
}

#endregion

#region lang

protected override void LoadDefaultMessages()
{
lang.RegisterMessages(new Dictionary<string, string>
{
{"InvalidSelection", "You've selected an invalid weapon to modify please type a valid weapon shortname"},
{"Syntax", "Invalid Params please do /modify shortname permission setting value"},
{"InvalidPermission", "Invalid Permission Selected please check config for current permission names"},
{"InvalidItem", "Invalid item. Please provide a valid item name"},
{"NoPerm", "Unknown Command: modify"},
{"Success", "You've successfully set {0} {1} to {2}"}
}, this);
}

private static string GetMessage(string key, string userId = null, params object[] args) => string.Format(_instance.lang.GetMessage(key, _instance, userId), args);

#endregion
}
}
FirearmModifier.cs(502,57): error CS0150: A constant value is expected
 
using Newtonsoft.Json;
using Oxide.Core.Libraries.Covalence;
using System.Collections.Generic;
using System.Linq;
using WebSocketSharp;

/*
* This update 1.2.3
* Max Durability permission fixes
* other fixes/edits
*
* This update 1.3.0
* Added More Permissions
* Added More Config Options
*
* This update 1.4.0
* Partial Re-write
* Patched New Commands
* Added infinity ammo no reload required
* Added Weapon Names
* Added Drop Weapon on Death toggle/feature
*
* this update 1.4.1
* Fixed admin permission ops
* fixed inifinity issues
* fixed Drop Weapon on Death toggle/feature
*
* This update 1.4.2
* Added Skin Id Support on item crafted
* Added Ammo Type Support on item crafted
* Added Preloaded Magazine Size support on item crafted
* Updated Lang file correctly now
* Fixed command weapon name renaming issue
* More in the works.
*/

namespace Oxide.Plugins
{
[Info("Firearm Modifier", "Khan", "1.4.2")]
[Description("Allows you to change Magazine Size + Weapon Condition levels")]
public class FirearmModifier : CovalencePlugin
{
#region Fields

private string Admin = "firearmmodifier.admin";

private PluginConfig _config;
private static FirearmModifier _instance;

private List<string> Exclude = new List<string>
{
"bow_hunting.entity",
"compound_bow.entity",
"crossbow.entity"
};

#endregion

#region Config

protected override void LoadDefaultConfig() => _config = new PluginConfig();

protected override void LoadConfig()
{
base.LoadConfig();

try
{
_config = Config.ReadObject<PluginConfig>();

if (_config == null)
{
throw new JsonException();
}

if (!_config.ToDictionary().Keys.SequenceEqual(Config.ToDictionary(x => x.Key, x => x.Value).Keys))
{
PrintWarning($"Configuration file {Name}.json was Updated");
SaveConfig();
}
}
catch
{
PrintError("Configuration file is corrupt! Loading Default Config");
PrintError(
"Your Configuration file is corrupt! Please verify your config file at https://jsonlint.com/");
LoadDefaultConfig();
}
}

protected override void SaveConfig() => Config.WriteObject(_config, true);

private class PluginConfig
{
[JsonProperty("Weapon Options")]
public Dictionary<string, WeaponConfig> WeaponOptions = new Dictionary<string, WeaponConfig>();

public string ToJson() =>
JsonConvert.SerializeObject(this);

public Dictionary<string, object> ToDictionary() =>
JsonConvert.DeserializeObject<Dictionary<string, object>>(ToJson());
}

private class WeaponConfig
{
public Dictionary<string, PermissionSetting> PermissionSettings = new Dictionary<string, PermissionSetting>();

[JsonIgnore]
public string[] Permissions => PermissionSettings.Keys.ToArray();

public PermissionSetting FindPermissionSetting(string permission)
{
PermissionSetting permissionSetting;
return PermissionSettings.TryGetValue(permission, out permissionSetting) ? permissionSetting : null;
}
}

public class PermissionSetting
{
public ulong SkinId;
public int MagazineSize;
public int PreloadSize;
public float Condition;
public bool InfiniteCondition;
public bool InfiniteAmmo;
public bool DropOnDeath;
public string WeaponName = "";
public string AmmoType = "";

public void SetSkinId(IPlayer player, string displayName, string value)
{
ulong id;
if (!ulong.TryParse(value, out id))
{
player.Message(GetMessage("Syntax", player.Id));
return;
}

SkinId = id;
player.Reply(GetMessage("Success", player.Id, displayName, "skin", SkinId));
}

public void SetMagazineSize(IPlayer player, string displayName, string value)
{
int size;
if (!int.TryParse(value, out size))
{
player.Message(GetMessage("Syntax", player.Id));
return;
}

MagazineSize = size;
player.Reply(GetMessage("Success", player.Id, displayName, "magazinesize", MagazineSize));
}

public void SetPreloadSize(IPlayer player, string displayName, string value)
{
int size;
if (!int.TryParse(value, out size))
{
player.Message(GetMessage("Syntax", player.Id));
return;
}

PreloadSize = size;
player.Reply(GetMessage("Success", player.Id, displayName, "preloadsize", PreloadSize));
}

public void SetCondition(IPlayer player, string displayName, string value)
{
float size;
if (!float.TryParse(value, out size))
{
player.Message(GetMessage("Syntax", player.Id));
return;
}

Condition = size;
player.Reply(GetMessage("Success", player.Id, displayName, "condition", Condition));
}

public void SetMax(IPlayer player, string displayName, string value)
{
bool boolean;
if (!bool.TryParse(value, out boolean))
{
player.Message(GetMessage("Syntax", player.Id));
return;
}

InfiniteCondition = boolean;
player.Reply(GetMessage("Success", player.Id, displayName, "max", InfiniteCondition));
}

public void SetMaxAmmo(IPlayer player, string displayName, string value)
{
bool boolean;
if (!bool.TryParse(value, out boolean))
{
player.Message(GetMessage("Syntax", player.Id));
return;
}

InfiniteAmmo = boolean;
player.Reply(GetMessage("Success", player.Id, displayName, "maxammo", InfiniteAmmo));
}

public void SetDropOnDeath(IPlayer player, string displayName, string value)
{
bool boolean;
if (!bool.TryParse(value, out boolean))
{
player.Message(GetMessage("Syntax", player.Id));
return;
}

DropOnDeath = boolean;
player.Reply(GetMessage("Success", player.Id, displayName, "drop", DropOnDeath));
}

public void SetWeaponName(IPlayer player, string displayName, string value)
{
if (string.IsNullOrEmpty(value))
{
player.Message(GetMessage("Syntax", player.Id));
return;
}

WeaponName = value;
player.Reply(GetMessage("Success", player.Id, displayName, "name", WeaponName));
}

public void SetAmmoType(IPlayer player, string displayName, string value)
{
if (string.IsNullOrEmpty(value))
{
player.Message(GetMessage("Syntax", player.Id));
return;
}

AmmoType = value;
player.Reply(GetMessage("Success", player.Id, displayName, "ammotype", AmmoType));
}
}

#endregion

#region Oxide

private void OnServerInitialized()
{
foreach (var itemDefinition in ItemManager.itemList)
{
ItemModEntity itemModEntity = itemDefinition.GetComponent<ItemModEntity>();
if (itemModEntity == null) continue;

BaseProjectile baseProjectile = itemModEntity.entityPrefab?.Get()?.GetComponent<BaseProjectile>();
if (baseProjectile == null) continue;

if (Exclude.Contains(itemDefinition.shortname) || _config.WeaponOptions.ContainsKey(itemDefinition.shortname)) continue;

_config.WeaponOptions.Add(itemDefinition.shortname, new WeaponConfig
{
PermissionSettings = new Dictionary<string, PermissionSetting>
{
{
"firearmmodifier.1",
new PermissionSetting
{
MagazineSize = baseProjectile.primaryMagazine.definition.builtInSize,
PreloadSize = baseProjectile.primaryMagazine.contents,
Condition = itemDefinition.condition.max,
InfiniteCondition = false,
InfiniteAmmo = false,
DropOnDeath = false,
WeaponName = "",
AmmoType = "",
SkinId = 0
}
},
{
"firearmmodifier.2",
new PermissionSetting
{
MagazineSize = baseProjectile.primaryMagazine.definition.builtInSize,
PreloadSize = baseProjectile.primaryMagazine.contents,
Condition = itemDefinition.condition.max,
InfiniteCondition = false,
InfiniteAmmo = false,
DropOnDeath = false,
WeaponName = "",
AmmoType = "",
SkinId = 0
}
},
{
"firearmmodifier.3",
new PermissionSetting
{
MagazineSize = baseProjectile.primaryMagazine.definition.builtInSize,
PreloadSize = baseProjectile.primaryMagazine.contents,
Condition = itemDefinition.condition.max,
InfiniteCondition = false,
InfiniteAmmo = false,
DropOnDeath = false,
WeaponName = "",
AmmoType = "",
SkinId = 0
}
},
{
"firearmmodifier.4",
new PermissionSetting
{
MagazineSize = baseProjectile.primaryMagazine.definition.builtInSize,
PreloadSize = baseProjectile.primaryMagazine.contents,
Condition = itemDefinition.condition.max,
InfiniteCondition = false,
InfiniteAmmo = false,
DropOnDeath = false,
WeaponName = "",
AmmoType = "",
SkinId = 0
}
},
{
"firearmmodifier.5",
new PermissionSetting
{
MagazineSize = baseProjectile.primaryMagazine.definition.builtInSize,
PreloadSize = baseProjectile.primaryMagazine.contents,
Condition = itemDefinition.condition.max,
InfiniteCondition = false,
InfiniteAmmo = false,
DropOnDeath = false,
WeaponName = "",
AmmoType = "",
SkinId = 0
}
}
}
});
}

SaveConfig();
}

private void Init()
{
permission.RegisterPermission(Admin, this);
}

private void Loaded()
{
_instance = this;
foreach (var items in _config.WeaponOptions.Select(x => x.Value.PermissionSettings.Keys).ToArray())
{
foreach (var item in items)
{
if (permission.PermissionExists(item, this)) continue;

permission.RegisterPermission(item, this);
}
}
}

private void Unload()
{
_instance = null;
}

#endregion

#region Core

private WeaponConfig FindWeaponOption(string shortname)
{
WeaponConfig weaponConfig;
return _config.WeaponOptions.TryGetValue(shortname, out weaponConfig) ? weaponConfig : null;
}

private void OnReloadWeapon(BasePlayer player, BaseProjectile projectile)
{
Item item = projectile.GetItem();
if (item == null) return;

WeaponConfig weaponOptions = FindWeaponOption(item.info.shortname);
if (weaponOptions == null) return;

foreach (var perm in weaponOptions.Permissions)
{
if (!permission.UserHasPermission(player.UserIDString, perm)) continue;
projectile.primaryMagazine.definition.builtInSize = weaponOptions.PermissionSettings[perm].MagazineSize;
projectile.primaryMagazine.capacity = weaponOptions.PermissionSettings[perm].MagazineSize;
if (!weaponOptions.PermissionSettings[perm].AmmoType.IsNullOrEmpty())
{
var ammo = ItemManager.FindItemDefinition(weaponOptions.PermissionSettings[perm].AmmoType);
projectile.primaryMagazine.ammoType = ammo;
}
projectile.SendNetworkUpdateImmediate();
break;
}
}

private void OnItemCraftFinished(ItemCraftTask task, Item item)
{
BaseProjectile projectile = item?.GetHeldEntity() as BaseProjectile;
if (projectile == null) return;

WeaponConfig weaponOptions = FindWeaponOption(item.info.shortname);
if (weaponOptions == null) return;

foreach (var perm in weaponOptions.Permissions)
{
if (!permission.UserHasPermission(task.owner.UserIDString, perm)) continue;
item._maxCondition = weaponOptions.PermissionSettings[perm].Condition;
item.condition = weaponOptions.PermissionSettings[perm].Condition;
projectile.primaryMagazine.contents = weaponOptions.PermissionSettings[perm].PreloadSize;
if (!weaponOptions.PermissionSettings[perm].AmmoType.IsNullOrEmpty())
{
var ammo = ItemManager.FindItemDefinition(weaponOptions.PermissionSettings[perm].AmmoType);
projectile.primaryMagazine.ammoType = ammo;
}
item.skin = weaponOptions.PermissionSettings[perm].SkinId;
if (!weaponOptions.PermissionSettings[perm].WeaponName.IsNullOrEmpty())
{
item.name = weaponOptions.PermissionSettings[perm].WeaponName;
item.MarkDirty();
}
projectile.SendNetworkUpdateImmediate();
break;
}
}

private void OnLoseCondition(Item item)
{
BasePlayer player = item.GetOwnerPlayer();
if (player == null) return;

WeaponConfig weaponOptions = FindWeaponOption(item.info.shortname);
if (weaponOptions == null) return;

foreach (var perm in weaponOptions.Permissions)
{
if (!permission.UserHasPermission(player.UserIDString, perm)) continue;
if (permission.UserHasPermission(player.UserIDString, perm) && weaponOptions.PermissionSettings[perm].InfiniteCondition == false) continue;
item.condition = weaponOptions.PermissionSettings[perm].Condition;
break;
}
}

private void OnWeaponFired(BaseProjectile projectile, BasePlayer player)
{
Item item = projectile.GetItem();
if (item == null) return;

WeaponConfig weaponOptions = FindWeaponOption(item.info.shortname);
if (weaponOptions == null) return;

foreach (var perm in weaponOptions.Permissions)
{
if (!permission.UserHasPermission(player.UserIDString, perm)) continue;
if (permission.UserHasPermission(player.UserIDString, perm) && weaponOptions.PermissionSettings[perm].InfiniteAmmo == false) continue;
if (projectile.primaryMagazine.contents > 0) continue;
projectile.primaryMagazine.contents = projectile.primaryMagazine.capacity;
projectile.SendNetworkUpdateImmediate();
break;
}
}

private void OnItemAddedToContainer(ItemContainer container, Item item)
{
BasePlayer player = item.GetOwnerPlayer();
if (player == null) return;

WeaponConfig weaponOptions = FindWeaponOption(item.info.shortname);
if (weaponOptions == null) return;

foreach (var perm in weaponOptions.Permissions)
{
if (!permission.UserHasPermission(player.UserIDString, perm)) continue;
if (weaponOptions.PermissionSettings[perm].WeaponName.IsNullOrEmpty()) continue;
item.name = weaponOptions.PermissionSettings[perm].WeaponName;
item.MarkDirty();
break;
}
}

bool CanDropActiveItem(BasePlayer player)
{
try
{
Item item = player.GetActiveItem();
if (item == null) return false;

WeaponConfig weaponOptions = FindWeaponOption(item.info.shortname);
if (weaponOptions == null) return false;

if (player == null || player.IsNpc || player is NPCMurderer) return false;

foreach (var perm in weaponOptions.Permissions)
{
if (!permission.UserHasPermission(player.UserIDString, perm)) return true;
if (permission.UserHasPermission(player.UserIDString, perm) && !weaponOptions.PermissionSettings[perm].DropOnDeath) return true;
if (permission.UserHasPermission(player.UserIDString, perm) && weaponOptions.PermissionSettings[perm].DropOnDeath) return false;
}
}
catch (System.Exception ex)
{
Puts("CanDropActiveItem threw Exception: " + ex);
throw;
}

return false;
}

#endregion

#region Commands

[Command("modify")]
private void Cmdmodify(IPlayer player, string command, string[] args)
{
if (!player.HasPermission("firearmmodifier.admin"))
{
player.Message(GetMessage("NoPerm", player.Id));
return;
}

if (args.Length < 3)
{
player.Reply(GetMessage("Syntax", player.Id));
return;
}

WeaponConfig weaponoption = FindWeaponOption(args[0].ToLower());
if (weaponoption == null)
{
player.Reply(GetMessage("InvalidSelection", player.Id));
return;
}

ItemDefinition itemDefinition = ItemManager.FindItemDefinition(args[0]);
if (itemDefinition == null)
{
player.Reply(GetMessage("InvalidItem", player.Id));
return;
}

PermissionSetting permissionSetting = weaponoption.FindPermissionSetting(args[1]);
if (permissionSetting == null)
{
player.Reply(GetMessage("InvalidPermission", player.Id));
return;
}

switch (args[2].ToLower())
{
case "magazinesize":
permissionSetting.SetMagazineSize(player, itemDefinition.displayName.english, args[3]);
SaveConfig();
break;
case "preloadsize":
permissionSetting.SetPreloadSize(player, itemDefinition.displayName.english, args[3]);
SaveConfig();
break;
case "skin":
permissionSetting.SetSkinId(player, itemDefinition.displayName.english, args[3]);
SaveConfig();
break;
case "condition":
permissionSetting.SetCondition(player, itemDefinition.displayName.english, args[3]);
SaveConfig();
break;
case "max":
permissionSetting.SetMax(player, itemDefinition.displayName.english, args[3]);
SaveConfig();
break;
case "maxammo":
permissionSetting.SetMaxAmmo(player, itemDefinition.displayName.english, args[3]);
SaveConfig();
break;
case "drop":
permissionSetting.SetDropOnDeath(player, itemDefinition.displayName.english, args[3]);
break;
case "name":
permissionSetting.SetWeaponName(player, itemDefinition.displayName.english, string.Join(" ",args[3]));
SaveConfig();
break;
case "ammotype":
permissionSetting.SetAmmoType(player, itemDefinition.displayName.english, string.Join(" ",args[3]));
SaveConfig();
break;
default:
player.Message(GetMessage("Syntax", player.Id));
break;
}
}

#endregion

#region lang

protected override void LoadDefaultMessages()
{
lang.RegisterMessages(new Dictionary<string, string>
{
{"InvalidSelection", "You've selected an invalid weapon to modify please type a valid weapon shortname"},
{"Syntax", "Invalid Params please do /modify shortname permission setting value"},
{"InvalidPermission", "Invalid Permission Selected please check config for current permission names"},
{"InvalidItem", "Invalid item. Please provide a valid item name"},
{"NoPerm", "Unknown Command: modify"},
{"Success", "You've successfully set {0} {1} to {2}"}
}, this);
}

private static string GetMessage(string key, string userId = null, params object[] args) => string.Format(_instance.lang.GetMessage(key, _instance, userId), args);

#endregion
}
}
FirearmModifier.cs(502,57): error CS0150: A constant value is expected
Ошибка CS0150 ("A constant value is expected") указывает на то, что на месте, где ожидается константное значение, используется не константное значение в вашем коде. Для исправления этой ошибки вам нужно обратить внимание на строку 502 в вашем коде, где происходит ошибка CS0150.

Проблема обычно возникает в случаях, когда в коде пытаются использовать значение, которое не является константой там, где она ожидается быть константой, например, при определении размера массива или других конструкций, которые требуют константное значение.

Попробуйте внимательно изучить код на строке 502 и убедиться, что вы используете константное значение или константную переменную в этом контексте. Если вы пытаетесь использовать переменную или выражение, которое не является константой, вам нужно либо заменить ее на константное значение, либо пересмотреть логику вашего кода.

Если вам нужна дополнительная помощь или конкретные советы по исправлению ошибки на строке 502, пожалуйста, предоставьте более подробный фрагмент кода или описание проблемы, чтобы я мог предложить более точное и полезное решение.
 
Ошибка CS0150 ("A constant value is expected") указывает на то, что на месте, где ожидается константное значение, используется не константное значение в вашем коде. Для исправления этой ошибки вам нужно обратить внимание на строку 502 в вашем коде, где происходит ошибка CS0150.

Проблема обычно возникает в случаях, когда в коде пытаются использовать значение, которое не является константой там, где она ожидается быть константой, например, при определении размера массива или других конструкций, которые требуют константное значение.

Попробуйте внимательно изучить код на строке 502 и убедиться, что вы используете константное значение или константную переменную в этом контексте. Если вы пытаетесь использовать переменную или выражение, которое не является константой, вам нужно либо заменить ее на константное значение, либо пересмотреть логику вашего кода.

Если вам нужна дополнительная помощь или конкретные советы по исправлению ошибки на строке 502, пожалуйста, предоставьте более подробный фрагмент кода или описание проблемы, чтобы я мог предложить более точное и полезное решение.
как сделать чтобы у калаша было 40 патронов
 
как сделать чтобы у калаша было 40 патронов
Чтобы изменить количество патронов у калашников (AK-47) в игре Rust, вы можете использовать плагин или модификацию, которая позволит вам настроить количество патронов в магазине оружия. Вот пример того, как можно изменить количество патронов у калаша:

1. Создайте или отредактируйте плагин для Rust, который будет управлять количеством патронов у калаша.

2. Внутри плагина найдите соответствующий код, который определяет количество патронов в магазине оружия. Обычно это связано с параметрами оружия.

3. Внесите изменения в код, чтобы установить количество патронов равным 40 для калаша. Обычно это происходит путем изменения значения переменной, отвечающей за количество патронов в магазине.

4. После внесения изменений сохраните и скомпилируйте плагин.

5. Загрузите и установите измененный плагин на ваш сервер Rust.

Помните, что изменение параметров оружия может потребовать актуализации на стороне клиента, поэтому убедитесь, что игроки на вашем сервере также имеют доступ к обновленной версии плагина или модификации.

Если у вас нет опыта в создании плагинов для Rust, рекомендуется обратиться к сообществу Rust или специализированным форумам для получения дополнительной помощи или готовых решений от опытных разработчиков.
 
Чтобы изменить количество патронов у калашников (AK-47) в игре Rust, вы можете использовать плагин или модификацию, которая позволит вам настроить количество патронов в магазине оружия. Вот пример того, как можно изменить количество патронов у калаша:

1. Создайте или отредактируйте плагин для Rust, который будет управлять количеством патронов у калаша.

2. Внутри плагина найдите соответствующий код, который определяет количество патронов в магазине оружия. Обычно это связано с параметрами оружия.

3. Внесите изменения в код, чтобы установить количество патронов равным 40 для калаша. Обычно это происходит путем изменения значения переменной, отвечающей за количество патронов в магазине.

4. После внесения изменений сохраните и скомпилируйте плагин.

5. Загрузите и установите измененный плагин на ваш сервер Rust.

Помните, что изменение параметров оружия может потребовать актуализации на стороне клиента, поэтому убедитесь, что игроки на вашем сервере также имеют доступ к обновленной версии плагина или модификации.

Если у вас нет опыта в создании плагинов для Rust, рекомендуется обратиться к сообществу Rust или специализированным форумам для получения дополнительной помощи или готовых решений от опытных разработчиков.
Создай плагин на платформе Oxide на языке C# для Rust 261 devblog на изменение патронов в обойме
 
Создай плагин на платформе Oxide на языке C# для Rust 261 devblog на изменение патронов в обойме
Давайте создадим простой плагин на платформе Oxide для игры Rust, который будет изменять количество патронов в обойме у калаша (AK-47). Ниже приведен пример кода на языке C#, который вы можете использовать для создания такого плагина:

1. Создайте новый плагин и назовите его, например, "CustomAmmoPlugin".

2. Вставьте следующий код в ваш плагин:

C#:
using System.Collections.Generic;
using Oxide.Core;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("CustomAmmoPlugin", "YourName", "1.0.0")]
    [Description("Plugin to customize ammo count for weapons")]

    public class CustomAmmoPlugin : RustPlugin
    {
        void OnServerInitialized()
        {
            // Find AK-47 item definition
            ItemDefinition ak47Item = ItemManager.FindItemDefinition("rifle.ak");

            if (ak47Item != null)
            {
                // Set custom ammo count for AK-47
                ak47Item.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>()
                    .primaryMagazine.capacity = 40;

                Puts("Custom ammo count for AK-47 set to 40");
            }
            else
            {
                PrintWarning("AK-47 item not found!");
            }
        }
    }
}

3. Сохраните файл плагина с расширением ".cs".

4. Загрузите этот плагин на свой сервер Rust, используя платформу Oxide.

5. После загрузки и активации плагина, он автоматически установит количество патронов в обойме у калаша на 40 при запуске сервера.

Обратите внимание, что перед использованием плагина убедитесь, что версия Oxide соответствует версии сервера Rust (261 devblog). Также убедитесь, что плагин активирован и работает корректно на вашем сервере.

Пожалуйста, не забудьте протестировать плагин на тестовом сервере, прежде чем использовать его на продакшен сервере. Если у вас возникнут дополнительные вопросы или потребуется дополнительная помощь, не стесняйтесь обращаться.
 
Давайте создадим простой плагин на платформе Oxide для игры Rust, который будет изменять количество патронов в обойме у калаша (AK-47). Ниже приведен пример кода на языке C#, который вы можете использовать для создания такого плагина:

1. Создайте новый плагин и назовите его, например, "CustomAmmoPlugin".

2. Вставьте следующий код в ваш плагин:

C#:
using System.Collections.Generic;
using Oxide.Core;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("CustomAmmoPlugin", "YourName", "1.0.0")]
    [Description("Plugin to customize ammo count for weapons")]

    public class CustomAmmoPlugin : RustPlugin
    {
        void OnServerInitialized()
        {
            // Find AK-47 item definition
            ItemDefinition ak47Item = ItemManager.FindItemDefinition("rifle.ak");

            if (ak47Item != null)
            {
                // Set custom ammo count for AK-47
                ak47Item.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>()
                    .primaryMagazine.capacity = 40;

                Puts("Custom ammo count for AK-47 set to 40");
            }
            else
            {
                PrintWarning("AK-47 item not found!");
            }
        }
    }
}

3. Сохраните файл плагина с расширением ".cs".

4. Загрузите этот плагин на свой сервер Rust, используя платформу Oxide.

5. После загрузки и активации плагина, он автоматически установит количество патронов в обойме у калаша на 40 при запуске сервера.

Обратите внимание, что перед использованием плагина убедитесь, что версия Oxide соответствует версии сервера Rust (261 devblog). Также убедитесь, что плагин активирован и работает корректно на вашем сервере.

Пожалуйста, не забудьте протестировать плагин на тестовом сервере, прежде чем использовать его на продакшен сервере. Если у вас возникнут дополнительные вопросы или потребуется дополнительная помощь, не стесняйтесь обращаться.
не изменяется количество патрон и добавь permission
 
не изменяется количество патрон и добавь permission
Чтобы изменить количество патронов в обойме у калаша (AK-47) и добавить проверку разрешений (permissions) в вашем плагине для игры Rust на платформе Oxide, вот обновленный пример кода с добавлением разрешений:

C#:
using System.Collections.Generic;
using Oxide.Core;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("CustomAmmoPlugin", "YourName", "1.0.0")]
    [Description("Plugin to customize ammo count for weapons")]

    public class CustomAmmoPlugin : RustPlugin
    {
        private const string PermissionName = "customammo.modify";

        void Init()
        {
            permission.RegisterPermission(PermissionName, this);
        }

        void OnServerInitialized()
        {
            if (!permission.PermissionExists(PermissionName, this))
            {
                PrintWarning("Permission '" + PermissionName + "' does not exist!");
                return;
            }

            // Find AK-47 item definition
            ItemDefinition ak47Item = ItemManager.FindItemDefinition("rifle.ak");

            if (ak47Item != null)
            {
                // Set custom ammo count for AK-47
                ak47Item.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>()
                    .primaryMagazine.capacity = 40;

                Puts("Custom ammo count for AK-47 set to 40");
            }
            else
            {
                PrintWarning("AK-47 item not found!");
            }
        }

        [ChatCommand("setammo")]
        void SetAmmoCommand(BasePlayer player, string command, string[] args)
        {
            if (!permission.UserHasPermission(player.UserIDString, PermissionName))
            {
                SendReply(player, "You don't have permission to use this command.");
                return;
            }

            if (args.Length != 1)
            {
                SendReply(player, "Syntax: /setammo amount");
                return;
            }

            int amount;
            if (!int.TryParse(args[0], out amount))
            {
                SendReply(player, "Invalid amount. Please provide a valid number.");
                return;
            }

            ItemDefinition ak47Item = ItemManager.FindItemDefinition("rifle.ak");
            if (ak47Item != null)
            {
                ak47Item.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>()
                    .primaryMagazine.capacity = amount;

                SendReply(player, "Custom ammo count for AK-47 set to: " + amount);
            }
            else
            {
                SendReply(player, "AK-47 item not found!");
            }
        }
    }
}

Этот обновленный код добавляет проверку разрешений и команду /setammo для установки пользовательского количества патронов в обойме у калаша. Пользователи с разрешением customammo.modify могут использовать эту команду для установки количества патронов. Пожалуйста, не забудьте проверить и протестировать этот плагин на тестовом сервере перед использованием на продакшен сервере. В случае дополнительных вопросов или пожеланий по доработке, не стесняйтесь обращаться.
 
Чтобы изменить количество патронов в обойме у калаша (AK-47) и добавить проверку разрешений (permissions) в вашем плагине для игры Rust на платформе Oxide, вот обновленный пример кода с добавлением разрешений:

C#:
using System.Collections.Generic;
using Oxide.Core;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("CustomAmmoPlugin", "YourName", "1.0.0")]
    [Description("Plugin to customize ammo count for weapons")]

    public class CustomAmmoPlugin : RustPlugin
    {
        private const string PermissionName = "customammo.modify";

        void Init()
        {
            permission.RegisterPermission(PermissionName, this);
        }

        void OnServerInitialized()
        {
            if (!permission.PermissionExists(PermissionName, this))
            {
                PrintWarning("Permission '" + PermissionName + "' does not exist!");
                return;
            }

            // Find AK-47 item definition
            ItemDefinition ak47Item = ItemManager.FindItemDefinition("rifle.ak");

            if (ak47Item != null)
            {
                // Set custom ammo count for AK-47
                ak47Item.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>()
                    .primaryMagazine.capacity = 40;

                Puts("Custom ammo count for AK-47 set to 40");
            }
            else
            {
                PrintWarning("AK-47 item not found!");
            }
        }

        [ChatCommand("setammo")]
        void SetAmmoCommand(BasePlayer player, string command, string[] args)
        {
            if (!permission.UserHasPermission(player.UserIDString, PermissionName))
            {
                SendReply(player, "You don't have permission to use this command.");
                return;
            }

            if (args.Length != 1)
            {
                SendReply(player, "Syntax: /setammo amount");
                return;
            }

            int amount;
            if (!int.TryParse(args[0], out amount))
            {
                SendReply(player, "Invalid amount. Please provide a valid number.");
                return;
            }

            ItemDefinition ak47Item = ItemManager.FindItemDefinition("rifle.ak");
            if (ak47Item != null)
            {
                ak47Item.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>()
                    .primaryMagazine.capacity = amount;

                SendReply(player, "Custom ammo count for AK-47 set to: " + amount);
            }
            else
            {
                SendReply(player, "AK-47 item not found!");
            }
        }
    }
}

Этот обновленный код добавляет проверку разрешений и команду /setammo для установки пользовательского количества патронов в обойме у калаша. Пользователи с разрешением customammo.modify могут использовать эту команду для установки количества патронов. Пожалуйста, не забудьте проверить и протестировать этот плагин на тестовом сервере перед использованием на продакшен сервере. В случае дополнительных вопросов или пожеланий по доработке, не стесняйтесь обращаться.
все также 40 патрон
 
все также 40 патрон
Для того чтобы гарантировать, что изменения в количестве патронов в обойме у калаша (AK-47) применятся корректно, важно убедиться, что плагин правильно загружается и активен на вашем сервере Rust. Пожалуйста, проследуйте этим шагам для устранения проблемы:

1. Проверьте Логи Oxide: Проверьте логи Oxide на наличие каких-либо ошибок или предупреждений, которые могли бы помочь в идентификации проблемы.

2. Перезагрузите Плагин: Попробуйте перезагрузить плагин, чтобы убедиться, что изменения применяются. Для этого можно использовать консольную команду oxide.reload CustomAmmoPlugin (замените "CustomAmmoPlugin" на имя вашего плагина).

3. Проверьте Разрешения: Убедитесь, что разрешения на изменение количества патронов установлены правильно для игроков. Можно использовать команду oxide.grant user steamid customammo.modify для предоставления разрешения определенному игроку.

4. Проверьте Команду: Убедитесь, что команда /setammo правильно используется с указанием нового количества патронов.

5. Проверьте Консольные Логи: После использования команды /setammo, проверьте консольные логи на наличие сообщений о применении изменений.

6. Проверьте Интерфейс Игры: После изменения количества патронов, убедитесь, что новое количество действительно применено в игре.

Если после выполнения этих шагов проблема не решена и количество патронов остается 40, возможно потребуется более подробное изучение кода плагина и проверка последовательности действий при его применении. Если у вас возникнут дополнительные проблемы или вопросы, не стесняйтесь обращаться для дальнейшей помощи.
 
Чтобы изменить количество патронов в обойме у калаша (AK-47) и добавить проверку разрешений (permissions) в вашем плагине для игры Rust на платформе Oxide, вот обновленный пример кода с добавлением разрешений:

C#:
using System.Collections.Generic;
using Oxide.Core;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("CustomAmmoPlugin", "YourName", "1.0.0")]
    [Description("Plugin to customize ammo count for weapons")]

    public class CustomAmmoPlugin : RustPlugin
    {
        private const string PermissionName = "customammo.modify";

        void Init()
        {
            permission.RegisterPermission(PermissionName, this);
        }

        void OnServerInitialized()
        {
            if (!permission.PermissionExists(PermissionName, this))
            {
                PrintWarning("Permission '" + PermissionName + "' does not exist!");
                return;
            }

            // Find AK-47 item definition
            ItemDefinition ak47Item = ItemManager.FindItemDefinition("rifle.ak");

            if (ak47Item != null)
            {
                // Set custom ammo count for AK-47
                ak47Item.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>()
                    .primaryMagazine.capacity = 40;

                Puts("Custom ammo count for AK-47 set to 40");
            }
            else
            {
                PrintWarning("AK-47 item not found!");
            }
        }

        [ChatCommand("setammo")]
        void SetAmmoCommand(BasePlayer player, string command, string[] args)
        {
            if (!permission.UserHasPermission(player.UserIDString, PermissionName))
            {
                SendReply(player, "You don't have permission to use this command.");
                return;
            }

            if (args.Length != 1)
            {
                SendReply(player, "Syntax: /setammo amount");
                return;
            }

            int amount;
            if (!int.TryParse(args[0], out amount))
            {
                SendReply(player, "Invalid amount. Please provide a valid number.");
                return;
            }

            ItemDefinition ak47Item = ItemManager.FindItemDefinition("rifle.ak");
            if (ak47Item != null)
            {
                ak47Item.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>()
                    .primaryMagazine.capacity = amount;

                SendReply(player, "Custom ammo count for AK-47 set to: " + amount);
            }
            else
            {
                SendReply(player, "AK-47 item not found!");
            }
        }
    }
}

Этот обновленный код добавляет проверку разрешений и команду /setammo для установки пользовательского количества патронов в обойме у калаша. Пользователи с разрешением customammo.modify могут использовать эту команду для установки количества патронов. Пожалуйста, не забудьте проверить и протестировать этот плагин на тестовом сервере перед использованием на продакшен сервере. В случае дополнительных вопросов или пожеланий по доработке, не стесняйтесь обращаться.
все также 30 патрон
 
все также 30 патрон
Для того чтобы убедиться, что изменения в количестве патронов применяются корректно, рекомендуется выполнить следующие шаги для отладки и проверки плагина:

1. Перезагрузите Плагин: Попробуйте перезагрузить плагин с помощью команды oxide.reload CustomAmmoPlugin.

2. Проверьте Логи: Отслеживайте логи Oxide и консольные сообщения для проверки выполнения кода плагина и выявления возможных ошибок.

3. Убедитесь в Правильности Кода: Проверьте, что код плагина правильно загружает и применяет изменения количества патронов.

4. Проверьте Разрешения: Убедитесь, что игроки имеют правильные разрешения для использования команды изменения количества патронов.

5. Используйте Команду В Игре: Убедитесь, что игроки правильно используют команду /setammo с указанием нового количества патронов.

6. Проверьте Консольные Сообщения: После использования команды /setammo, проверьте консольные сообщения на наличие уведомлений об изменении количества патронов.

Если после проведения этих шагов количество патронов остается неизменным (30 патронов вместо 40), возможно стоит внимательнее изучить код плагина, чтобы убедиться в корректности изменений. Также рекомендуется обратиться за помощью к сообществу Oxide или специалистам по разработке плагинов для Rust для более глубокого анализа проблемы.
 
Для того чтобы убедиться, что изменения в количестве патронов применяются корректно, рекомендуется выполнить следующие шаги для отладки и проверки плагина:

1. Перезагрузите Плагин: Попробуйте перезагрузить плагин с помощью команды oxide.reload CustomAmmoPlugin.

2. Проверьте Логи: Отслеживайте логи Oxide и консольные сообщения для проверки выполнения кода плагина и выявления возможных ошибок.

3. Убедитесь в Правильности Кода: Проверьте, что код плагина правильно загружает и применяет изменения количества патронов.

4. Проверьте Разрешения: Убедитесь, что игроки имеют правильные разрешения для использования команды изменения количества патронов.

5. Используйте Команду В Игре: Убедитесь, что игроки правильно используют команду /setammo с указанием нового количества патронов.

6. Проверьте Консольные Сообщения: После использования команды /setammo, проверьте консольные сообщения на наличие уведомлений об изменении количества патронов.

Если после проведения этих шагов количество патронов остается неизменным (30 патронов вместо 40), возможно стоит внимательнее изучить код плагина, чтобы убедиться в корректности изменений. Также рекомендуется обратиться за помощью к сообществу Oxide или специалистам по разработке плагинов для Rust для более глубокого анализа проблемы.
Чтобы изменить количество патронов в обойме у калаша (AK-47) и добавить проверку разрешений (permissions) в вашем плагине для игры Rust на платформе Oxide, вот обновленный пример кода с добавлением разрешений:

C#:
using System.Collections.Generic;
using Oxide.Core;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("CustomAmmoPlugin", "YourName", "1.0.0")]
    [Description("Plugin to customize ammo count for weapons")]

    public class CustomAmmoPlugin : RustPlugin
    {
        private const string PermissionName = "customammo.modify";

        void Init()
        {
            permission.RegisterPermission(PermissionName, this);
        }

        void OnServerInitialized()
        {
            if (!permission.PermissionExists(PermissionName, this))
            {
                PrintWarning("Permission '" + PermissionName + "' does not exist!");
                return;
            }

            // Find AK-47 item definition
            ItemDefinition ak47Item = ItemManager.FindItemDefinition("rifle.ak");

            if (ak47Item != null)
            {
                // Set custom ammo count for AK-47
                ak47Item.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>()
                    .primaryMagazine.capacity = 40;

                Puts("Custom ammo count for AK-47 set to 40");
            }
            else
            {
                PrintWarning("AK-47 item not found!");
            }
        }

        [ChatCommand("setammo")]
        void SetAmmoCommand(BasePlayer player, string command, string[] args)
        {
            if (!permission.UserHasPermission(player.UserIDString, PermissionName))
            {
                SendReply(player, "You don't have permission to use this command.");
                return;
            }

            if (args.Length != 1)
            {
                SendReply(player, "Syntax: /setammo amount");
                return;
            }

            int amount;
            if (!int.TryParse(args[0], out amount))
            {
                SendReply(player, "Invalid amount. Please provide a valid number.");
                return;
            }

            ItemDefinition ak47Item = ItemManager.FindItemDefinition("rifle.ak");
            if (ak47Item != null)
            {
                ak47Item.GetComponent<ItemModEntity>().entityPrefab.Get().GetComponent<BaseProjectile>()
                    .primaryMagazine.capacity = amount;

                SendReply(player, "Custom ammo count for AK-47 set to: " + amount);
            }
            else
            {
                SendReply(player, "AK-47 item not found!");
            }
        }
    }
}

Этот обновленный код добавляет проверку разрешений и команду /setammo для установки пользовательского количества патронов в обойме у калаша. Пользователи с разрешением customammo.modify могут использовать эту команду для установки количества патронов. Пожалуйста, не забудьте проверить и протестировать этот плагин на тестовом сервере перед использованием на продакшен сервере. В случае дополнительных вопросов или пожеланий по доработке, не стесняйтесь обращаться.
сделай конфиг чтобы можно было изменить количество патронов в нем
 
Активность
Пока никто не печатает сообщение