Иконка ресурса

FREE FishR : 1.0.2 1.0.2

Нет прав для скачивания
C#:
using System;
using System.Linq;
using System.Reflection;
using System.Collections.Generic;
using UnityEngine;
using Oxide.Core;
using Oxide.Core.Plugins;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Facepunch;
using Rust;

#region Changelogs and Todo

/**********************************************************************
* 
* 1.0.0 :       -   Initial release
* 1.0.1 :       -   Cleanup
*               -   Added 1 fishbone after eating minnows
* 1.0.2         -   Converted gutting to switchcase
*               -   When inventory is full when gutting drops the items on the floor
* 
**********************************************************************/

#endregion

namespace Oxide.Plugins
{
    [Info("FishR", "Krungh Crow", "1.0.2")]
    [Description("Core item handling when gutting fish")]

    class FishR : RustPlugin
    {
        #region Variables

        ulong chaticon = 0;
        string prefix;
        bool Debug = false;

        ulong SkinBoneFi;

        #endregion

        #region Configuration
        void Init()
        {
            if (!LoadConfigVariables())
            {
                Puts("Config file issue detected. Please delete file, or check syntax and fix.");
                return;
            }

            Debug = configData.PlugCFG.Debug;
            prefix = "[<color=green>FishR</color>] ";
            chaticon = 0;

            #region Fish Bone Skin Id assign
            SkinBoneFi = 2583801321;
            #endregion

            if (Debug) Puts($"[Debug] Debug is activated if unintentional disable this in the config !");
        }

        private ConfigData configData;

        class ConfigData
        {
            [JsonProperty(PropertyName = "Main config")]
            public SettingsPlugin PlugCFG = new SettingsPlugin();
            [JsonProperty(PropertyName = "Anchovy")]
            public OutputAnchovy Anchovy = new OutputAnchovy();
            [JsonProperty(PropertyName = "Cat fish")]
            public OutputCatfish Catfish = new OutputCatfish();
            [JsonProperty(PropertyName = "Herring")]
            public OutputHerring Herring = new OutputHerring();
            [JsonProperty(PropertyName = "Orange Roughy")]
            public OutputOrange Orange = new OutputOrange();
            [JsonProperty(PropertyName = "Salmon")]
            public OutputSalmon Salmon = new OutputSalmon();
            [JsonProperty(PropertyName = "Sardine")]
            public OutputSardine Sardine = new OutputSardine();
            [JsonProperty(PropertyName = "Small Shark")]
            public OutputSmallShark Shark = new OutputSmallShark();
            [JsonProperty(PropertyName = "Small Trout")]
            public OutputTrout Trout = new OutputTrout();
            [JsonProperty(PropertyName = "Yellow Perch")]
            public OutputYellow Yellow = new OutputYellow();
        }

        class SettingsPlugin
        {
            [JsonProperty(PropertyName = "Debug")]
            public bool Debug = false;
        }

        class OutputAnchovy
        {
            [JsonProperty(PropertyName = "Fish Bones")]
            public int FBones = 2;
            [JsonProperty(PropertyName = "Raw Fish")]
            public int Fmeat = 1;
            [JsonProperty(PropertyName = "Animal Fat")]
            public int FFat = 1;
            [JsonProperty(PropertyName = "Add bonus item")]
            public bool UseBonus = false;
            [JsonProperty(PropertyName = "Bonus item (x1)")]
            public List<string> Bonus = new List<string>();
        }

        class OutputCatfish
        {
            [JsonProperty(PropertyName = "Fish Bones")]
            public int FBones = 18;
            [JsonProperty(PropertyName = "Raw Fish")]
            public int Fmeat = 18;
            [JsonProperty(PropertyName = "Animal Fat")]
            public int FFat = 18;
            [JsonProperty(PropertyName = "Add bonus item")]
            public bool UseBonus = true;
            [JsonProperty(PropertyName = "Bonus item (x1)")]
            public List<string> Bonus = new List<string>();
        }

        class OutputHerring
        {
            [JsonProperty(PropertyName = "Fish Bones")]
            public int FBones = 1;
            [JsonProperty(PropertyName = "Raw Fish")]
            public int Fmeat = 2;
            [JsonProperty(PropertyName = "Animal Fat")]
            public int FFat = 1;
            [JsonProperty(PropertyName = "Add bonus item")]
            public bool UseBonus = false;
            [JsonProperty(PropertyName = "Bonus item (x1)")]
            public List<string> Bonus = new List<string>();
        }

        class OutputOrange
        {
            [JsonProperty(PropertyName = "Fish Bones")]
            public int FBones = 18;
            [JsonProperty(PropertyName = "Raw Fish")]
            public int Fmeat = 18;
            [JsonProperty(PropertyName = "Animal Fat")]
            public int FFat = 18;
            [JsonProperty(PropertyName = "Add bonus item")]
            public bool UseBonus = true;
            [JsonProperty(PropertyName = "Bonus item (x1)")]
            public List<string> Bonus = new List<string>();
        }

        class OutputSalmon
        {
            [JsonProperty(PropertyName = "Fish Bones")]
            public int FBones = 16;
            [JsonProperty(PropertyName = "Raw Fish")]
            public int Fmeat = 18;
            [JsonProperty(PropertyName = "Animal Fat")]
            public int FFat = 16;
            [JsonProperty(PropertyName = "Add bonus item")]
            public bool UseBonus = true;
            [JsonProperty(PropertyName = "Bonus item (x1)")]
            public List<string> Bonus = new List<string>();
        }

        class OutputSmallShark
        {
            [JsonProperty(PropertyName = "Fish Bones")]
            public int FBones = 20;
            [JsonProperty(PropertyName = "Raw Fish")]
            public int Fmeat = 20;
            [JsonProperty(PropertyName = "Animal Fat")]
            public int FFat = 20;
            [JsonProperty(PropertyName = "Add bonus item")]
            public bool UseBonus = true;
            [JsonProperty(PropertyName = "Bonus item (x1)")]
            public List<string> Bonus = new List<string>();
        }

        class OutputSardine
        {
            [JsonProperty(PropertyName = "Fish Bones")]
            public int FBones = 1;
            [JsonProperty(PropertyName = "Raw Fish")]
            public int Fmeat = 1;
            [JsonProperty(PropertyName = "Animal Fat")]
            public int FFat = 5;
            [JsonProperty(PropertyName = "Add bonus item")]
            public bool UseBonus = false;
            [JsonProperty(PropertyName = "Bonus item (x1)")]
            public List<string> Bonus = new List<string>();
        }

        class OutputTrout
        {
            [JsonProperty(PropertyName = "Fish Bones")]
            public int FBones = 5;
            [JsonProperty(PropertyName = "Raw Fish")]
            public int Fmeat = 4;
            [JsonProperty(PropertyName = "Animal Fat")]
            public int FFat = 8;
            [JsonProperty(PropertyName = "Add bonus item")]
            public bool UseBonus = false;
            [JsonProperty(PropertyName = "Bonus item (x1)")]
            public List<string> Bonus = new List<string>();
        }

        class OutputYellow
        {
            [JsonProperty(PropertyName = "Fish Bones")]
            public int FBones = 6;
            [JsonProperty(PropertyName = "Raw Fish")]
            public int Fmeat = 4;
            [JsonProperty(PropertyName = "Animal Fat")]
            public int FFat = 9;
            [JsonProperty(PropertyName = "Add bonus item")]
            public bool UseBonus = false;
            [JsonProperty(PropertyName = "Bonus item (x1)")]
            public List<string> Bonus = new List<string>();
        }

        private bool LoadConfigVariables()
        {
            try
            {
                configData = Config.ReadObject<ConfigData>();
            }
            catch
            {
                return false;
            }
            SaveConf();
            return true;
        }

        protected override void LoadDefaultConfig()
        {
            Puts("Fresh install detected Creating a new config file.");
            configData = new ConfigData();

            configData.Catfish.Bonus = new List<string>
            {

                {"scrap"},
                {"keycard_blue"},
                {"cloth"},
                {"ammo.pistol"},
                {"flare"}
            };

            configData.Orange.Bonus = new List<string>
            {

                {"scrap"},
                {"keycard_blue"},
                {"cloth"},
                {"ammo.pistol"},
                {"flare"}
            };

            configData.Salmon.Bonus = new List<string>
            {

                {"scrap"},
                {"keycard_blue"},
                {"cloth"},
                {"ammo.pistol"},
                {"flare"}
            };

            configData.Shark.Bonus = new List<string>
            {

                {"scrap"},
                {"keycard_blue"},
                {"cloth"},
                {"ammo.pistol"},
                {"flare"}
            };

            SaveConf();
        }

        void SaveConf() => Config.WriteObject(configData, true);
        #endregion

        #region LanguageAPI
        protected override void LoadDefaultMessages()
        {
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["GutUnsuccesful"] = "<color=#4A95CC>Gutting was unsuccesfull !</color> gut the fish in your inventory instead.",
                ["Info"] = "\n<color=green>Available Commands</color> :\n<color=green>/fishr info</color> : Shows info on version/author and commands",
                ["InvalidInput"] = "<color=red>Please enter a valid command!</color>",
                ["Version"] = "Version : V",
            }, this);
        }

        #endregion

        #region Commands

        [ChatCommand("fishr")]
        private void CMDFishr(BasePlayer player, string command, string[] args)
        {
            if (args.Length == 0)
            {
                Player.Message(player, prefix + string.Format(msg("InvalidInput", player.UserIDString)), chaticon);
            }
            else
            {
                if (args[0].ToLower() == "info")
                {
                    Player.Message(player, prefix + string.Format(msg("Version", player.UserIDString)) + this.Version.ToString() + " By : " + this.Author.ToString()
                    + msg("Info")
                    , chaticon);

                    return;
                }
                else
                {
                    Player.Message(player, prefix + string.Format(msg("InvalidInput", player.UserIDString)), chaticon);
                }
            }
        }
        #endregion

        #region Hooks

        private object OnItemUse(Item item)
        {
            BasePlayer ownerPlayer = item.GetOwnerPlayer();

            if (item.info.shortname.Contains("minnows") && item != null)
            {
                Item bones = ItemManager.CreateByName("bone.fragments", 1);
                bones.name = "Fish Bones";
                bones.skin = SkinBoneFi;
                bones.MarkDirty();
                ownerPlayer.inventory.GiveItem(bones, null);
                return false;
            }
            return null;
        }

        private object OnItemAction(Item item, string action, BasePlayer player)
        {
            BasePlayer ownerPlayer = item.GetOwnerPlayer();

            if (action == "Gut")
            {
                try
                {
                    string itemName = item.info.shortname.ToLower();
                    Item bonus = null; // Initialize bonus variable
                    Item bones = ItemManager.CreateByName("bone.fragments" , 1);
                    Item fat = ItemManager.CreateByName("fat.animal" , 1);
                    Item meat = ItemManager.CreateByName("fish.raw" , 1);
                    switch (itemName)
                    {
                        case "fish.anchovy":
                            item.UseItem();
                            if (configData.Anchovy.Bonus.Count != 0 && configData.Anchovy.UseBonus == true)
                            {
                                string BonusItem = configData.Anchovy.Bonus[new System.Random().Next(configData.Anchovy.Bonus.Count())];
                                bonus = ItemManager.CreateByName($"{BonusItem}" , 1);
                                //if (bonus != null) ownerPlayer.inventory.GiveItem(bonus , null);
                            }
                            bones.amount = configData.Anchovy.FBones;
                            fat.amount = configData.Anchovy.FFat;
                            meat.amount = configData.Anchovy.Fmeat;
                            break;
                        case "fish.catfish":
                            item.UseItem();
                            if (configData.Catfish.Bonus.Count != 0 && configData.Catfish.UseBonus == true)
                            {
                                string BonusItem = configData.Catfish.Bonus[new System.Random().Next(configData.Catfish.Bonus.Count())];
                                bonus = ItemManager.CreateByName($"{BonusItem}" , 1);
                                //if (bonus != null) ownerPlayer.inventory.GiveItem(bonus , null);
                            }
                            bones.amount = configData.Catfish.FBones;
                            fat.amount = configData.Catfish.FFat;
                            meat.amount = configData.Catfish.Fmeat; break;
                        case "fish.herring":
                            item.UseItem();
                            if (configData.Herring.Bonus.Count != 0 && configData.Herring.UseBonus == true)
                            {
                                string BonusItem = configData.Herring.Bonus[new System.Random().Next(configData.Herring.Bonus.Count())];
                                bonus = ItemManager.CreateByName($"{BonusItem}" , 1);
                                //if (bonus != null) ownerPlayer.inventory.GiveItem(bonus , null);
                            }
                            bones.amount = configData.Herring.FBones;
                            fat.amount = configData.Herring.FFat;
                            meat.amount = configData.Herring.Fmeat; break;
                        case "fish.orangeroughy":
                            item.UseItem();
                            if (configData.Orange.Bonus.Count != 0 && configData.Orange.UseBonus == true)
                            {
                                string BonusItem = configData.Orange.Bonus[new System.Random().Next(configData.Orange.Bonus.Count())];
                                bonus = ItemManager.CreateByName($"{BonusItem}" , 1);
                                //if (bonus != null) ownerPlayer.inventory.GiveItem(bonus , null);
                            }
                            bones.amount = configData.Orange.FBones;
                            fat.amount = configData.Orange.FFat;
                            meat.amount = configData.Orange.Fmeat; break;
                        case "fish.salmon":
                            item.UseItem();
                            if (configData.Salmon.Bonus.Count != 0 && configData.Salmon.UseBonus == true)
                            {
                                string BonusItem = configData.Salmon.Bonus[new System.Random().Next(configData.Salmon.Bonus.Count())];
                                bonus = ItemManager.CreateByName($"{BonusItem}" , 1);
                                //if (bonus != null) ownerPlayer.inventory.GiveItem(bonus , null);
                            }
                            bones.amount = configData.Salmon.FBones;
                            fat.amount = configData.Salmon.FFat;
                            meat.amount = configData.Salmon.Fmeat; break;
                        case "fish.sardine":
                            item.UseItem();
                            if (configData.Sardine.Bonus.Count != 0 && configData.Sardine.UseBonus == true)
                            {
                                string BonusItem = configData.Sardine.Bonus[new System.Random().Next(configData.Sardine.Bonus.Count())];
                                bonus = ItemManager.CreateByName($"{BonusItem}" , 1);
                                //if (bonus != null) ownerPlayer.inventory.GiveItem(bonus , null);
                            }
                            bones.amount = configData.Sardine.FBones;
                            fat.amount = configData.Sardine.FFat;
                            meat.amount = configData.Sardine.Fmeat; break;
                        case "fish.smallshark":
                            item.UseItem();
                            if (configData.Shark.Bonus.Count != 0 && configData.Shark.UseBonus == true)
                            {
                                string BonusItem = configData.Shark.Bonus[new System.Random().Next(configData.Shark.Bonus.Count())];
                                bonus = ItemManager.CreateByName($"{BonusItem}" , 1);
                                //if (bonus != null) ownerPlayer.inventory.GiveItem(bonus , null);
                            }
                            bones.amount = configData.Shark.FBones;
                            fat.amount = configData.Shark.FFat;
                            meat.amount = configData.Shark.Fmeat; break;
                        case "fish.troutsmall":
                            item.UseItem();
                            if (configData.Yellow.Bonus.Count != 0 && configData.Yellow.UseBonus == true)
                            {
                                string BonusItem = configData.Yellow.Bonus[new System.Random().Next(configData.Yellow.Bonus.Count())];
                                bonus = ItemManager.CreateByName($"{BonusItem}" , 1);
                                //if (bonus != null) ownerPlayer.inventory.GiveItem(bonus , null);
                            }
                            bones.amount = configData.Yellow.FBones;
                            fat.amount = configData.Yellow.FFat;
                            meat.amount = configData.Yellow.Fmeat; break;
                        case "fish.yellowperch":
                            item.UseItem();
                            if (configData.Yellow.Bonus.Count != 0 && configData.Yellow.UseBonus == true)
                            {
                                string BonusItem = configData.Yellow.Bonus[new System.Random().Next(configData.Yellow.Bonus.Count())];
                                bonus = ItemManager.CreateByName($"{BonusItem}" , 1);
                                //if (bonus != null) ownerPlayer.inventory.GiveItem(bonus , null);
                            }
                            bones.amount = configData.Yellow.FBones;
                            fat.amount = configData.Yellow.FFat;
                            meat.amount = configData.Yellow.Fmeat; break;
                        default:
                            // Handle the default case if the fish type is not recognized
                            break;
                    }

                    bones.name = "Fish Bones";
                    bones.skin = SkinBoneFi;
                    bones.MarkDirty();
                    if (player.inventory.containerMain.IsFull())
                    {
                        bones.DropAndTossUpwards(player.transform.position);
                        fat.DropAndTossUpwards(player.transform.position);
                        meat.DropAndTossUpwards(player.transform.position);
                        if (bonus != null) bonus.DropAndTossUpwards(player.transform.position);
                    }
                    else
                    {
                        if (bonus != null) ownerPlayer.inventory.GiveItem(bonus , null);
                        ownerPlayer.inventory.GiveItem(bones , null);
                        ownerPlayer.inventory.GiveItem(fat , null);
                        ownerPlayer.inventory.GiveItem(meat , null);
                    }
                    if (Debug) Puts($"[Debug] {ownerPlayer.displayName} Gutted a {item.info.shortname} and got :\n {bones.amount}x [{bones.name}]\n {fat.amount}x [animal fat]\n {meat.amount}x [raw fish]");
                    return true;
                }
                catch
                {
                    Player.Message(player , prefix + string.Format(msg("GutUnsuccesful" , player.UserIDString)) , chaticon);
                    return false;
                }
             }
            return null;
        }

        #endregion

        #region Message helper

        private string msg(string key, string id = null) => lang.GetMessage(key, this, id);

        #endregion
    }
}

Автор
15FPS
Скачиваний
0
Просмотры
1
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху