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

FREE Raft : 1.0.24 1.0.24

Нет прав для скачивания
C#:
using System;
using Oxide.Core;
using Oxide.Core.Configuration;
using Network;
using System.Runtime.CompilerServices;
using System.Collections.Generic;
using UnityEngine;
using Facepunch;
using System.Linq;
namespace Oxide.Plugins {
    [Info("Raft", "Colon Blow", "1.0.24")]
    class Raft : RustPlugin {
#region Hooks
        BaseEntity newRaft;
        static Dictionary<ulong, string> hasRaft = new Dictionary<ulong, string>();
        static List<uint> storedRafts = new List<uint>();
        private DynamicConfigFile data;
        private bool initialized;
        void Loaded() {
            LoadVariables();
            permission.RegisterPermission("raft.builder", this);
            lang.RegisterMessages(Messages, this);
            data = Interface.Oxide.DataFileSystem.GetFile("raft_data");
        }
        private void OnServerInitialized() {
            initialized = true;
            LoadData();
            timer.In(3, RestoreRafts);
        }
        private void OnServerSave() {
            SaveData();
        }
        private void RestoreRafts() {
            if (storedRafts.Count > 0) {
                BaseEntity[] objects = BaseEntity.saveList.Where(x => x is BaseEntity).ToArray();
                if (objects != null) {
                    foreach (var obj in objects) {
                        if (!obj.IsValid() || obj.IsDestroyed) continue;
                        if (storedRafts.Contains(obj.net.ID)) {
                            bool hassail = false;
                            bool hasfire = false;
                            bool hasnet = false;
                            bool hasroof = false;
                            bool haswalls = false;
                            bool haschairs = false;
                            string codestr = "0";
                            string guestcodestr = "0";
                            foreach (Transform child in obj.GetComponent<Transform>()) {
                                if (child == null) continue;
                                if (child.name.Contains("wall.frame.garagedoor")) hassail = true;
                                if (child.name.Contains("campfire/campfire")) hasfire = true;
                                if (child.name.Contains("wall.frame.netting")) hasnet = true;
                                if (child.name.Contains("chair/chair") && child != obj) haschairs = true;
                                if (child.name.Contains("sign.post.single") && (child.GetComponent<BaseEntity>().skinID != 1)) hasroof = true;
                                if (child.name.Contains("sign.large.wood") && (child.GetComponent<BaseEntity>().skinID == 1)) haswalls = true;
                                if (child.name.Contains("keypad/lock.code")) {
                                    CodeLock codelock = child.GetComponent<CodeLock>() ?? null;
                                    if (codelock != null) codestr = codelock.code;
                                    if (codelock != null) guestcodestr = codelock.guestCode;
                                }
                            }
                            var spawnpos = obj.transform.position;
                            var spawnrot = obj.transform.rotation;
                            var userid = obj.OwnerID;
                            storedRafts.Remove(obj.net.ID);
                            SaveData();
                            obj.Invoke("KillMessage", 0.1f);
                            timer.Once(2f, () => RespawnRaft(spawnpos, spawnrot, userid, hassail, hasfire, hasnet, hasroof, haswalls, haschairs, codestr, guestcodestr));
                        }
                    }
                }
            }
        }
        void SaveData() => data.WriteObject(storedRafts.ToList());
        void LoadData() {
            try {
                storedRafts = data.ReadObject<List<uint>>();
            }
            catch {
                storedRafts = new List<uint>();
            }
        }
        bool isAllowed(BasePlayer player, string perm) => permission.UserHasPermission(player.UserIDString, perm);
        public void AddPlayerRaft(ulong id) {
            if (!OnlyOneActiveRaft) return;
            if (hasRaft.ContainsKey(id)) return;
            hasRaft.Add(id, "");
        }
        public void RemovePlayerRaft(ulong id) {
            if (!OnlyOneActiveRaft) return;
            if (!hasRaft.ContainsKey(id)) return;
            hasRaft.Remove(id);
        }
        public void BuildRaft(BasePlayer player) {
            string prefabstr = "assets/prefabs/deployable/chair/chair.deployed.prefab";
            var waterheight = TerrainMeta.WaterMap.GetHeight(player.transform.position);
            var spawnpos = new Vector3(player.transform.position.x, waterheight, player.transform.position.z);
            newRaft = GameManager.server.CreateEntity(prefabstr, spawnpos + new Vector3(0f, 0.4f, 0f), new Quaternion(), true);
            var mount = newRaft.GetComponent<BaseMountable>();
            mount.isMobile = true;
            newRaft.enableSaving = true;
            newRaft.OwnerID = player.userID;
            newRaft?.Spawn();
            var addraft = newRaft.gameObject.AddComponent<RaftEntity>();
            AddPlayerRaft(player.userID);
            storedRafts.Add(newRaft.net.ID);
            mount.MountPlayer(player);
            SaveData();
        }
        public void RespawnRaft(Vector3 spawnpos, Quaternion spawnrot, ulong userid, bool hassail, bool hasfire, bool hasnet, bool hasroof, bool haswalls, bool haschairs, string codestr, string guestcodestr) {
            string prefabstr = "assets/prefabs/deployable/chair/chair.deployed.prefab";
            newRaft = GameManager.server.CreateEntity(prefabstr, spawnpos, spawnrot, true);
            var mount = newRaft.GetComponent<BaseMountable>() ?? null;
            if (mount != null) mount.isMobile = true;
            newRaft.enableSaving = true;
            newRaft.OwnerID = userid;
            newRaft?.Spawn();
            var addraft = newRaft.gameObject.AddComponent<RaftEntity>();
            if (hassail) addraft.SpawnSail();
            if (hasfire) addraft.SpawnCampfire();
            if (hasnet) addraft.SpawnNet();
            if (hasroof) addraft.SpawnRoof();
            if (haswalls) addraft.SpawnSideWalls();
            if (haschairs) addraft.SpawnPassengerChairs();
            if (codestr != "0") {
                var codelock = addraft.boatlock.GetComponent<CodeLock>() ?? null;
                if (codelock != null) {
                    codelock.whitelistPlayers.Add(userid);
                    codelock.code = codestr;
                    codelock.guestCode = guestcodestr;
                    codelock.SetFlag(BaseEntity.Flags.Locked, true, false);
                }
            }
            AddPlayerRaft(userid);
            storedRafts.Add(newRaft.net.ID);
            SaveData();
        }
        void ScrapRaft(BasePlayer player) {
            Item woodrefund = ItemManager.CreateByItemID(-151838493, RefundForScrap);
            player.inventory.GiveItem(woodrefund, null);
            player.Command("note.inv", -151838493, RefundForScrap);
        }
        bool CheckUpgradeMats(BasePlayer player, int itemID, int amount, string str) {
            int HasReq = player.inventory.GetAmount(itemID);
            if (HasReq >= amount) {
                player.inventory.Take(null, itemID, amount);
                player.Command("note.inv", itemID, -amount);
                return true;
            }
            ItemDefinition itemDefinition = ItemManager.FindItemDefinition(itemID);
            SendReply(player, "You need " + amount + " " + itemDefinition.shortname + " to build " + str);
            return false;
        }
        public bool IsStandingInWater(BasePlayer player) {
            var position = player.transform.position;
            var waterdepth = (TerrainMeta.WaterMap.GetHeight(position) - TerrainMeta.HeightMap.GetHeight(position));
            if (waterdepth >= 0.6f) return true;
            return false;
        }
        private void OnPlayerInput(BasePlayer player, InputState input) {
            if (!player.isMounted) return;
            var activeraft = player.GetMounted().GetComponentInParent<RaftEntity>() ?? null;
            if (activeraft == null) return;
            if (player.GetMounted() != activeraft.entity) return;
            if (activeraft.boatlock.IsLocked() == true) return;
            if (input != null) {
                if (input.WasJustPressed(BUTTON.FORWARD)) {
                    activeraft.setsail = false;
                    activeraft.moveforward = true;
                }
                if (input.WasJustReleased(BUTTON.FORWARD)) {
                    activeraft.moveforward = false;
                }
                if (input.WasJustPressed(BUTTON.BACKWARD)) {
                    activeraft.setsail = false;
                    activeraft.movebackward = true;
                }
                if (input.WasJustReleased(BUTTON.BACKWARD)) {
                    activeraft.movebackward = false;
                }
                if (input.WasJustPressed(BUTTON.RIGHT)) {
                    activeraft.rotright = true;
                }
                if (input.WasJustReleased(BUTTON.RIGHT)) {
                    activeraft.rotright = false;
                }
                if (input.WasJustPressed(BUTTON.LEFT)) {
                    activeraft.rotleft = true;
                }
                if (input.WasJustReleased(BUTTON.LEFT)) {
                    activeraft.rotleft = false;
                }
                if (input.WasJustPressed(BUTTON.JUMP)) {
                    activeraft.ismoving = false;
                    activeraft.moveforward = false;
                    activeraft.movebackward = false;
                    activeraft.rotright = false;
                    activeraft.rotleft = false;
                    activeraft.setsail = false;
                }
                return;
            }
        }
        void OnEntityDeath(BaseCombatEntity entity, HitInfo info) {
            if (entity == null) return;
            if (storedRafts.Contains(entity.net.ID)) {
                storedRafts.Remove(entity.net.ID);
                SaveData();
            }
        }
        object OnEntityGroundMissing(BaseEntity entity) {
            var raft = entity.GetComponentInParent<RaftEntity>() ?? null;
            if (raft != null) return false;
            return null;
        }
        void OnEntityMounted(BaseMountable mountable, BasePlayer player) {
            if (mountable == null || player == null) return;
            var raftentity = mountable.GetComponentInParent<RaftEntity>() ?? null;
            if (raftentity == null) return;
            if (mountable.GetComponent<BaseEntity>() != raftentity.entity) return;
            if (raftentity != null && raftentity.player == null) {
                SendReply(player, msg("captain", player.UserIDString));
            }
        }
        void OnEntityTakeDamage(BaseCombatEntity entity, HitInfo hitInfo) {
            if (entity == null || hitInfo == null) return;
            var isboat = entity.GetComponentInParent<RaftEntity>() ?? null;
            if (isboat != null) hitInfo.damageTypes.ScaleAll(0);
            return;
        }
        object CanPickupEntity(BaseCombatEntity entity, BasePlayer player) {
            if (entity == null || player == null) return null;
            var raft = entity.GetComponentInParent<RaftEntity>() ?? null;
            if (raft != null) return false;
            return null;
        }
        object CanPickupLock(BasePlayer player, BaseLock baseLock) {
            if (baseLock == null || player == null) return null;
            if (baseLock.GetComponentInParent<RaftEntity>()) return false;
            return null;
        }
        void Unload() {
            foreach (var player in BasePlayer.activePlayerList) {
                if (player.isMounted) {
                    var activeraft = player.GetMounted().GetComponentInParent<RaftEntity>() ?? null;
                    if (activeraft != null) player.DismountObject();
                }
            }
        }
        void DestroyAll<T>() {
            var objects = GameObject.FindObjectsOfType(typeof(T));
            if (objects != null) foreach (var gameObj in objects) GameObject.Destroy(gameObj);
        }
#endregion
#region Commands
        [ChatCommand("raft")]
        void cmdChatRaftHelp(BasePlayer player, string command, string[] args) {
            if (!isAllowed(player, "raft.builder")) {
                SendReply(player, msg("notauthorized", player.UserIDString));
                return;
            }
            string raftstr = "/raft.build - need " + MaterialsForRaft + " Wood to Build a raft.";
            string roofstr = "/raft.addroof - need " + MaterialsForRoof + " Wood to add a Roof.";
            string wallsstr = "/raft.addwalls - need " + MaterialsForWalls + " Wood to add Walls.";
            string sailstr = "/raft.addsail - need " + MaterialsForSail + " Wood to add a Sail.";
            string netstr = "/raft.addnet - need " + MaterialsForNet + " Rope to add Netting.";
            string firestr = "/raft.addfire - need " + MaterialsForCampfire + " Wood to add a Campfire.";
            string chairsstr = "/raft.addchairs - need" + MaterialsForChairs + " Wood to add Chairs";
            string destroystr = "/raft.destroy - Destroys raft give back " + RefundForScrap + " wood.";
            string locationstr = "/raft.loc - Shows X and Y location Coordinates.";
            string sailmodestr = "/raft.setsail - Enables Sailing Mode.";
            string stashstr = "/raft.stash - Toggles stash hidden from others or not.";
            string consolestr = "To fix invisible parts, hit F1, then type culling.env 0 in console";
            SendReply(player, " Raft Chat Commands (while seated): \n " + raftstr + " \n " + roofstr + " \n " + wallsstr + " \n " + sailstr + " \n " + netstr + " \n " + firestr + " \n " + chairsstr + " \n " + destroystr + " \n " + locationstr + " \n " + sailmodestr + " \n " + stashstr + " \n " + consolestr);
        }
        [ChatCommand("raft.build")]
        void cmdChatRaftBuild(BasePlayer player, string command, string[] args) {
            if (OnlyOneActiveRaft && hasRaft.ContainsKey(player.userID)) {
                SendReply(player, msg("hasraftalready", player.UserIDString));
                return;
            }
            if (!isAllowed(player, "raft.builder")) {
                SendReply(player, msg("notauthorized", player.UserIDString));
                return;
            }
            if (!IsStandingInWater(player) || player.IsSwimming()) {
                SendReply(player, msg("notstandingwater", player.UserIDString));
                return;
            }
            if (player.isMounted) return;
            if (CheckUpgradeMats(player, -151838493, MaterialsForRaft, "Base Raft")) BuildRaft(player);
        }
        [ConsoleCommand("raft.build")]
        void cmdConsoleRaftBuild(ConsoleSystem.Arg arg) {
            var player = arg.Player();
            if (OnlyOneActiveRaft && hasRaft.ContainsKey(player.userID)) {
                SendReply(player, msg("hasraftalready", player.UserIDString));
                return;
            }
            if (!isAllowed(player, "raft.builder")) {
                SendReply(player, msg("notauthorized", player.UserIDString));
                return;
            }
            if (!IsStandingInWater(player) || player.IsSwimming()) {
                SendReply(player, msg("notstandingwater", player.UserIDString));
                return;
            }
            if (player.isMounted) return;
            if (CheckUpgradeMats(player, -151838493, MaterialsForRaft, "Base Raft")) BuildRaft(player);
        }
        [ChatCommand("raft.addwalls")]
        void cmdRaftAddWalls(BasePlayer player, string command, string[] args) {
            if (!isAllowed(player, "raft.builder")) {
                SendReply(player, msg("notauthorized", player.UserIDString));
                return;
            }
            if (!player.isMounted) return;
            var activeraft = player.GetMounted().GetComponentInParent<RaftEntity>();
            if (activeraft == null) return;
            if (activeraft.haswalls) {
                SendReply(player, msg("alreadyadded", player.UserIDString));
                return;
            }
            if (CheckUpgradeMats(player, -151838493, MaterialsForWalls, "Walls")) activeraft.SpawnSideWalls();
        }
        [ConsoleCommand("raft.addwalls")]
        void cmdConsoleRaftAddWalls(ConsoleSystem.Arg arg) {
            var player = arg.Player();
            if (!isAllowed(player, "raft.builder")) {
                SendReply(player, msg("notauthorized", player.UserIDString));
                return;
            }
            if (!player.isMounted) return;
            var activeraft = player.GetMounted().GetComponentInParent<RaftEntity>();
            if (activeraft == null) return;
            if (activeraft.haswalls) {
                SendReply(player, msg("alreadyadded", player.UserIDString));
                return;
            }
            if (CheckUpgradeMats(player, -151838493, MaterialsForWalls, "Walls")) activeraft.SpawnSideWalls();
        }
        [ChatCommand("raft.addroof")]
        void cmdRaftAddRoof(BasePlayer player, string command, string[] args) {
            if (!isAllowed(player, "raft.builder")) {
                SendReply(player, msg("notauthorized", player.UserIDString));
                return;
            }
            if (!player.isMounted) return;
            var activeraft = player.GetMounted().GetComponentInParent<RaftEntity>() ?? null;
            if (activeraft == null) return;
            if (activeraft.hasroof) {
                SendReply(player, msg("alreadyadded", player.UserIDString));
                return;
            }
            if (CheckUpgradeMats(player, -151838493, MaterialsForRoof, "Roof")) activeraft.SpawnRoof();
        }
        [ConsoleCommand("raft.addroof")]
        void cmdConsoleRaftAddRoof(ConsoleSystem.Arg arg) {
            var player = arg.Player();
            if (!isAllowed(player, "raft.builder")) {
                SendReply(player, msg("notauthorized", player.UserIDString));
                return;
            }
            if (!player.isMounted) return;
            var activeraft = player.GetMounted().GetComponentInParent<RaftEntity>() ?? null;
            if (activeraft == null) return;
            if (activeraft.hasroof) {
                SendReply(player, msg("alreadyadded", player.UserIDString));
                return;
            }
            if (CheckUpgradeMats(player, -151838493, MaterialsForRoof, "Roof")) activeraft.SpawnRoof();
        }
        [ChatCommand("raft.addsail")]
        void cmdRaftAddSail(BasePlayer player, string command, string[] args) {
            if (!isAllowed(player, "raft.builder")) {
                SendReply(player, msg("notauthorized", player.UserIDString));
                return;
            }
            if (!player.isMounted) return;
            var activeraft = player.GetMounted().GetComponentInParent<RaftEntity>() ?? null;
            if (activeraft == null) return;
            if (activeraft.hassail) {
                SendReply(player, msg("alreadyadded", player.UserIDString));
                return;
            }
            if (CheckUpgradeMats(player, -151838493, MaterialsForSail, "Sail")) activeraft.SpawnSail();
        }
        [ConsoleCommand("raft.addsail")]
        void cmdConsoleRaftAddSail(ConsoleSystem.Arg arg) {
            var player = arg.Player();
            if (!isAllowed(player, "raft.builder")) {
                SendReply(player, msg("notauthorized", player.UserIDString));
                return;
            }
            if (!player.isMounted) return;
            var activeraft = player.GetMounted().GetComponentInParent<RaftEntity>() ?? null;
            if (activeraft == null) return;
            if (activeraft.hassail) {
                SendReply(player, msg("alreadyadded", player.UserIDString));
                return;
            }
            if (CheckUpgradeMats(player, -151838493, MaterialsForSail, "Sail")) activeraft.SpawnSail();
        }
        [ChatCommand("raft.addfire")]
        void cmdRaftAddFire(BasePlayer player, string command, string[] args) {
            if (!isAllowed(player, "raft.builder")) {
                SendReply(player, msg("notauthorized", player.UserIDString));
                return;
            }
            if (!player.isMounted) return;
            var activeraft = player.GetMounted().GetComponentInParent<RaftEntity>() ?? null;
            if (activeraft == null) return;
            if (activeraft.hasfire) {
                SendReply(player, msg("alreadyadded", player.UserIDString));
                return;
            }
            if (CheckUpgradeMats(player, -151838493, MaterialsForCampfire, "Campfire")) activeraft.SpawnCampfire();
        }
        [ConsoleCommand("raft.addfire")]
        void cmdConsoleRaftAddFire(ConsoleSystem.Arg arg) {
            var player = arg.Player();
            if (!isAllowed(player, "raft.builder")) {
                SendReply(player, msg("notauthorized", player.UserIDString));
                return;
            }
            if (!player.isMounted) return;
            var activeraft = player.GetMounted().GetComponentInParent<RaftEntity>() ?? null;
            if (activeraft == null) return;
            if (activeraft.hasfire) {
                SendReply(player, msg("alreadyadded", player.UserIDString));
                return;
            }
            if (CheckUpgradeMats(player, -151838493, MaterialsForCampfire, "Campfire")) activeraft.SpawnCampfire();
        }
        [ChatCommand("raft.addchairs")]
        void cmdRaftAddChairs(BasePlayer player, string command, string[] args) {
            if (!isAllowed(player, "raft.builder")) {
                SendReply(player, msg("notauthorized", player.UserIDString));
                return;
            }
            if (!player.isMounted) return;
            var activeraft = player.GetMounted().GetComponentInParent<RaftEntity>() ?? null;
            if (activeraft == null) return;
            if (activeraft.haschairs) {
                SendReply(player, msg("alreadyadded", player.UserIDString));
                return;
            }
            if (CheckUpgradeMats(player, 1534542921, MaterialsForChairs, "Chairs")) activeraft.SpawnPassengerChairs();
        }
        [ConsoleCommand("raft.addchairs")]
        void cmdConsoleRaftAddChairs(ConsoleSystem.Arg arg) {
            var player = arg.Player();
            if (!isAllowed(player, "raft.builder")) {
                SendReply(player, msg("notauthorized", player.UserIDString));
                return;
            }
            if (!player.isMounted) return;
            var activeraft = player.GetMounted().GetComponentInParent<RaftEntity>() ?? null;
            if (activeraft == null) return;
            if (activeraft.haschairs) {
                SendReply(player, msg("alreadyadded", player.UserIDString));
                return;
            }
            if (CheckUpgradeMats(player, 1534542921, MaterialsForChairs, "Chairs")) activeraft.SpawnPassengerChairs();
        }
        [ChatCommand("raft.addnet")]
        void cmdRaftAddNet(BasePlayer player, string command, string[] args) {
            if (!isAllowed(player, "raft.builder")) {
                SendReply(player, msg("notauthorized", player.UserIDString));
                return;
            }
            if (!player.isMounted) return;
            var activeraft = player.GetMounted().GetComponentInParent<RaftEntity>() ?? null;
            if (activeraft == null) return;
            if (!activeraft.hasroof) {
                SendReply(player, msg("nonet", player.UserIDString));
                return;
            }
            if (activeraft.hasnet) {
                SendReply(player, msg("alreadyadded", player.UserIDString));
                return;
            }
            if (CheckUpgradeMats(player, 1414245522, MaterialsForNet, "Net")) activeraft.SpawnNet();
        }
        [ConsoleCommand("raft.addnet")]
        void cmdConsoleRaftAddNet(ConsoleSystem.Arg arg) {
            var player = arg.Player();
            if (!isAllowed(player, "raft.builder")) {
                SendReply(player, msg("notauthorized", player.UserIDString));
                return;
            }
            if (!player.isMounted) return;
            var activeraft = player.GetMounted().GetComponentInParent<RaftEntity>() ?? null;
            if (activeraft == null) return;
            if (!activeraft.hasroof) {
                SendReply(player, msg("nonet", player.UserIDString));
                return;
            }
            if (activeraft.hasnet) {
                SendReply(player, msg("alreadyadded", player.UserIDString));
                return;
            }
            if (CheckUpgradeMats(player, 1414245522, MaterialsForNet, "Net")) activeraft.SpawnNet();
        }
        [ChatCommand("raft.setsail")]
        void cmdRaftSail(BasePlayer player, string command, string[] args) {
            if (!isAllowed(player, "raft.builder")) {
                SendReply(player, msg("notauthorized", player.UserIDString));
                return;
            }
            if (!player.isMounted) return;
            var activeraft = player.GetMounted().GetComponentInParent<RaftEntity>() ?? null;
            if (activeraft == null) return;
            if (!activeraft.hassail) return;
            var sailisin = activeraft.door.IsOpen();
            if (sailisin) {
                activeraft.door.SetFlag(BaseEntity.Flags.Open, false, false);
            }
            activeraft.setsail = true;
            SendReply(player, msg("setsail", player.UserIDString));
        }
        [ConsoleCommand("raft.setsail")]
        void cmdConsoleRaftSail(ConsoleSystem.Arg arg) {
            var player = arg.Player();
            if (!isAllowed(player, "raft.builder")) {
                SendReply(player, msg("notauthorized", player.UserIDString));
                return;
            }
            if (!player.isMounted) return;
            var activeraft = player.GetMounted().GetComponentInParent<RaftEntity>() ?? null;
            if (activeraft == null) return;
            if (!activeraft.hassail) return;
            var sailisin = activeraft.door.IsOpen();
            if (sailisin) {
                activeraft.door.SetFlag(BaseEntity.Flags.Open, false, false);
            }
            activeraft.setsail = true;
            SendReply(player, msg("setsail", player.UserIDString));
        }
        [ChatCommand("raft.loc")]
        void cmdRaftLoc(BasePlayer player, string command, string[] args) {
            if (!isAllowed(player, "raft.builder")) {
                SendReply(player, msg("notauthorized", player.UserIDString));
                return;
            }
            string location = player.transform.position.x + " / " + player.transform.position.z;
            SendReply(player, "you position is : " + location);
        }
        [ConsoleCommand("raft.loc")]
        void cmdConsoleRaftLoc(ConsoleSystem.Arg arg) {
            var player = arg.Player();
            if (!isAllowed(player, "raft.builder")) {
                SendReply(player, msg("notauthorized", player.UserIDString));
                return;
            }
            string location = player.transform.position.x + " / " + player.transform.position.z;
            SendReply(player, "you position is : " + location);
        }
        [ChatCommand("raft.destroy")]
        void cmdRaftDestroy(BasePlayer player, string command, string[] args) {
            BaseEntity[] objects = BaseEntity.saveList.Where(x => x is BaseEntity).ToArray();
            if (objects != null) {
                foreach (var obj in objects) {
                    if (!obj.IsValid() || obj.IsDestroyed) continue;
                    var israft = obj.GetComponent<RaftEntity>() ?? null;
                    if (israft != null && obj.OwnerID == player.userID) {
                        storedRafts.Remove(obj.net.ID);
                        SaveData();
                        israft.entity.Invoke("KillMessage", 0.1f);
                        ScrapRaft(player);
                    }
                }
            }
        }
        [ChatCommand("raft.stash")]
        void cmdRaftStash(BasePlayer player, string command, string[] args) {
            if (DisableRaftStash) return;
            if (!isAllowed(player, "raft.builder")) {
                SendReply(player, msg("notauthorized", player.UserIDString));
                return;
            }
            if (!player.isMounted) return;
            var activeraft = player.GetMounted().GetComponentInParent<RaftEntity>() ?? null;
            if (activeraft == null) return;
            if (activeraft.entity.OwnerID == player.userID) activeraft.ToggleStash();
            return;
        }
#endregion
#region Raft Entity
        public class RaftEntity : BaseEntity {
            Raft raft;
            public BaseEntity entity;
            BaseEntity floor1;
            BaseEntity floor2;
            BaseEntity barrel1;
            BaseEntity barrel2;
            BaseEntity barrel3;
            BaseEntity barrel4;
            BaseEntity barrel5;
            BaseEntity barrel6;
            BaseEntity backtop;
            BaseEntity backside1;
            BaseEntity backside2;
            BaseEntity rudder;
            BaseEntity pole1;
            BaseEntity pole2;
            BaseEntity pole3;
            BaseEntity pole4;
            public BaseEntity roof1;
            public BaseEntity roof2;
            BaseOven fire;
            BaseOven lantern;
            public BaseEntity net1;
            public BaseEntity door;
            BaseEntity door2;
            BaseEntity chairbackright;
            BaseEntity chairbackleft;
            BaseEntity stash;
            BaseEntity lootbarrel;
            public BaseEntity boatlock;
            Vector3 entitypos;
            Quaternion entityrot;
            public BasePlayer player;
            ulong ownerid;
            int counter;
            bool lootready;
            public bool ismoving;
            public bool moveforward;
            public bool movebackward;
            public bool rotright;
            public bool rotleft;
            public bool setsail;
            public bool hasroof;
            public bool haswalls;
            public bool hassail;
            public bool hasfire;
            public bool hasnet;
            public bool haschairs;
            bool spawnfullybuilt;
            Vector3 movedirection;
            Vector3 rotdirection;
            Vector3 startloc;
            Vector3 startrot;
            Vector3 endloc;
            float steps;
            float sailsteps;
            float incrementor;
            float waterheight;
            float groundheight;
            public float ghitDistance;
            public float whitDistance;
            private static int waterlayer;
            private static int groundlayer;
            private static int buildinglayer;
            void Awake() {
                entity = GetComponent<BaseEntity>();
                entitypos = entity.transform.position;
                entityrot = Quaternion.identity;
                ownerid = entity.OwnerID;
                raft = new Raft();
                waterlayer = UnityEngine.LayerMask.GetMask("Water");
                groundlayer = UnityEngine.LayerMask.GetMask("Terrain", "World", "Construction", "Default");
                buildinglayer = UnityEngine.LayerMask.GetMask("World", "Construction", "Default");
                counter = 0;
                incrementor = 0;
                ismoving = false;
                moveforward = false;
                movebackward = false;
                rotright = false;
                rotleft = false;
                setsail = false;
                hasroof = false;
                haswalls = false;
                hassail = false;
                hasfire = false;
                hasnet = false;
                haschairs = false;
                lootready = true;
                startrot = entity.transform.eulerAngles;
                startloc = entity.transform.position;
                steps = DefaultRaftMovementSpeed;
                sailsteps = DefaultRaftSailingSpeed;
                spawnfullybuilt = SpawnFullyBuilt;
                SpawnRaft();
                SpawnLock();
                if (!DisableRaftStash) SpawnStash();
                if (SpawnFullyBuilt) {
                    SpawnSideWalls();
                    SpawnRoof();
                    SpawnCampfire();
                    SpawnNet();
                    SpawnSail();
                    SpawnPassengerChairs();
                }
                RefreshAll();
            }
            public void SpawnStash() {
                string prefabstash = "assets/prefabs/deployable/small stash/small_stash_deployed.prefab";
                stash = GameManager.server.CreateEntity(prefabstash, entitypos, entityrot, false);
                stash.transform.localEulerAngles = new Vector3(0, 0, 0);
                stash.transform.localPosition = new Vector3(0f, 0f, 0f);
                var stashcont = stash.GetComponent<StashContainer>();
                stashcont.uncoverRange = -1f;
                stashcont.burriedOffset = 1f;
                var stashstab = stash.GetComponent<StabilityEntity>();
                if (stashstab) stashstab.grounded = true;
                stash.OwnerID = ownerid;
                stash?.Spawn();
                stash.SetParent(entity);
            }
            void SpawnLock() {
                string copterlockprefab = "assets/prefabs/locks/keypad/lock.code.prefab";
                boatlock = GameManager.server.CreateEntity(copterlockprefab, entitypos, entityrot, true);
                boatlock.transform.localEulerAngles = new Vector3(0, 90, 90);
                boatlock.transform.localPosition = new Vector3(0.5f, 0f, 0f);
                boatlock.OwnerID = ownerid;
                boatlock?.Spawn();
                boatlock.SetParent(entity, 0);
            }
            public void SpawnSail() {
                string prefabdoor = "assets/prefabs/building/wall.frame.garagedoor/wall.frame.garagedoor.prefab";
                string prefabmast = "assets/prefabs/deployable/signs/sign.post.single.prefab";
                door = GameManager.server.CreateEntity(prefabdoor, entitypos, entityrot, true);
                door.transform.localEulerAngles = new Vector3(90, -90, 0);
                door.transform.localPosition = new Vector3(1.3f, 3.6f, 0.6f);
                var doorstab = door.GetComponent<StabilityEntity>();
                doorstab.grounded = true;
                door.skinID = 1199376910;
                door.OwnerID = ownerid;
                door?.Spawn();
                door.SetParent(entity);
                door.SetFlag(BaseEntity.Flags.Open, true, true);
                door2 = GameManager.server.CreateEntity(prefabdoor, entitypos, entityrot, true);
                door2.transform.localEulerAngles = new Vector3(90, -90, 0);
                door2.transform.localPosition = new Vector3(1.3f, 1.2f, 0.6f);
                var door2stab = door2.GetComponent<StabilityEntity>();
                door2stab.grounded = true;
                door2.skinID = 1199376910;
                door2.OwnerID = ownerid;
                door2?.Spawn();
                door2.SetParent(entity);
                door2.SetFlag(BaseEntity.Flags.Open, true, true);
                door2.SetFlag(BaseEntity.Flags.Locked, true, true);
                hassail = true;
            }
            void SpawnRaft() {
                string prefabfloor = "assets/prefabs/deployable/signs/sign.huge.wood.prefab";
                string prefabbarrel = "assets/bundled/prefabs/radtown/oil_barrel.prefab";
                string prefabrudder = "assets/prefabs/deployable/signs/sign.post.single.prefab";
                floor1 = GameManager.server.CreateEntity(prefabfloor, entitypos, entityrot, true);
                floor1.transform.localEulerAngles = new Vector3(-90, 90, 0);
                floor1.transform.localPosition = new Vector3(0f, 0f, 0f);
                var floor1stab = floor1.GetComponent<StabilityEntity>();
                if (floor1stab) floor1stab.grounded = true;
                floor1.OwnerID = ownerid;
                floor1?.Spawn();
                floor1.SetParent(entity);
                floor2 = GameManager.server.CreateEntity(prefabfloor, entitypos, entityrot, true);
                floor2.transform.localEulerAngles = new Vector3(-90, 90, 0);
                floor2.transform.localPosition = new Vector3(2f, 0f, 0f);
                var floor2stab = floor2.GetComponent<StabilityEntity>();
                if (floor2stab) floor2stab.grounded = true;
                floor2.OwnerID = ownerid;
                floor2?.Spawn();
                floor2.SetParent(entity);
                rudder = GameManager.server.CreateEntity(prefabrudder, entitypos, entityrot, true);
                rudder.transform.localEulerAngles = new Vector3(0, 270, 130);
                rudder.transform.localPosition = new Vector3(0f, 0.7f, -1.7f);
                var rudderstab = rudder.GetComponent<StabilityEntity>();
                if (rudderstab) rudderstab.grounded = true;
                rudder.skinID = 1;
                rudder.OwnerID = ownerid;
                rudder?.Spawn();
                rudder.SetParent(entity);
                rudder.SetFlag(BaseEntity.Flags.Busy, true, true);
                barrel1 = GameManager.server.CreateEntity(prefabbarrel, entitypos, entityrot, true);
                barrel1.transform.localEulerAngles = new Vector3(-90, 0, 0);
                barrel1.transform.localPosition = new Vector3(-1.8f, -0.4f, -1.5f);
                var barrel1stab = barrel1.GetComponent<StabilityEntity>();
                if (barrel1stab) barrel1stab.grounded = true;
                barrel1.OwnerID = ownerid;
                barrel1?.Spawn();
                barrel1.SetParent(entity);
                barrel2 = GameManager.server.CreateEntity(prefabbarrel, entitypos, entityrot, true);
                barrel2.transform.localEulerAngles = new Vector3(-90, 0, 0);
                barrel2.transform.localPosition = new Vector3(-1.8f, -0.4f, 0.5f);
                var barrel2stab = barrel2.GetComponent<StabilityEntity>();
                if (barrel2stab) barrel2stab.grounded = true;
                barrel2.OwnerID = ownerid;
                barrel2?.Spawn();
                barrel2.SetParent(entity);
                barrel3 = GameManager.server.CreateEntity(prefabbarrel, entitypos, entityrot, true);
                barrel3.transform.localEulerAngles = new Vector3(-90, 0, 0);
                barrel3.transform.localPosition = new Vector3(-1.8f, -0.4f, 2.5f);
                var barrel3stab = barrel3.GetComponent<StabilityEntity>();
                if (barrel3stab) barrel3stab.grounded = true;
                barrel3.OwnerID = ownerid;
                barrel3?.Spawn();
                barrel3.SetParent(entity);
                barrel4 = GameManager.server.CreateEntity(prefabbarrel, entitypos, entityrot, true);
                barrel4.transform.localEulerAngles = new Vector3(-90, 0, 0);
                barrel4.transform.localPosition = new Vector3(1.8f, -0.4f, -1.5f);
                var barrel4stab = barrel4.GetComponent<StabilityEntity>();
                if (barrel4stab) barrel4stab.grounded = true;
                barrel4.OwnerID = ownerid;
                barrel4?.Spawn();
                barrel4.SetParent(entity);
                barrel5 = GameManager.server.CreateEntity(prefabbarrel, entitypos, entityrot, true);
                barrel5.transform.localEulerAngles = new Vector3(-90, 0, 0);
                barrel5.transform.localPosition = new Vector3(1.8f, -0.4f, 0.5f);
                var barrel5stab = barrel5.GetComponent<StabilityEntity>();
                if (barrel5stab) barrel5stab.grounded = true;
                barrel5.OwnerID = ownerid;
                barrel5?.Spawn();
                barrel5.SetParent(entity);
                barrel6 = GameManager.server.CreateEntity(prefabbarrel, entitypos, entityrot, true);
                barrel6.transform.localEulerAngles = new Vector3(-90, 0, 0);
                barrel6.transform.localPosition = new Vector3(1.8f, -0.4f, 2.5f);
                var barrel6stab = barrel6.GetComponent<StabilityEntity>();
                if (barrel6stab) barrel6stab.grounded = true;
                barrel6.OwnerID = ownerid;
                barrel6?.Spawn();
                barrel6.SetParent(entity);
            }
            public void SpawnPassengerChairs() {
                string prefabchair = "assets/prefabs/deployable/chair/chair.deployed.prefab";
                chairbackright = GameManager.server.CreateEntity(prefabchair, entitypos, entityrot, true);
                chairbackright.transform.localEulerAngles = new Vector3(0, 0, 0);
                chairbackright.transform.localPosition = new Vector3(0.9f, 0f, -2);
                var rmount = chairbackright.GetComponent<BaseMountable>();
                rmount.isMobile = true;
                chairbackright.OwnerID = ownerid;
                chairbackright?.Spawn();
                chairbackright.SetParent(entity);
                chairbackleft = GameManager.server.CreateEntity(prefabchair, entitypos, entityrot, true);
                chairbackleft.transform.localEulerAngles = new Vector3(0, 0, 0);
                chairbackleft.transform.localPosition = new Vector3(-0.9f, 0f, -2);
                var lmount = chairbackleft.GetComponent<BaseMountable>();
                lmount.isMobile = true;
                chairbackleft.OwnerID = ownerid;
                chairbackleft?.Spawn();
                chairbackleft.SetParent(entity);
                haschairs = true;
            }
            public void SpawnNet() {
                string prefabnet = "assets/prefabs/building/wall.frame.netting/wall.frame.netting.prefab";
                net1 = GameManager.server.CreateEntity(prefabnet, entitypos, entityrot, false);
                net1.transform.localEulerAngles = new Vector3(0, 0, 17);
                net1.transform.localPosition = new Vector3(2.4f, -0.9f, -1f);
                var netstab1 = net1.GetComponent<StabilityEntity>();
                netstab1.grounded = true;
                net1.OwnerID = ownerid;
                net1?.Spawn();
                net1.SetParent(entity);
                hasnet = true;
            }
            public void SpawnCampfire() {
                string prefabfire = "assets/prefabs/deployable/campfire/campfire.prefab";
                fire = GameManager.server.CreateEntity(prefabfire, entitypos, entityrot, true) as BaseOven;
                fire.transform.localEulerAngles = new Vector3(0, 180, 0);
                fire.transform.localPosition = new Vector3(1.5f, 0f, 2f);
                fire.OwnerID = ownerid;
                fire?.Spawn();
                fire.SetParent(entity);
                fire.SetFlag(BaseEntity.Flags.On, false, true);
                string prefablantern = "assets/prefabs/deployable/lantern/lantern.deployed.prefab";
                lantern = GameManager.server.CreateEntity(prefablantern, entitypos, entityrot, true) as BaseOven;
                lantern.transform.localEulerAngles = new Vector3(0, 180, 0);
                lantern.transform.localPosition = new Vector3(0f, 0f, 2.4f);
                lantern.OwnerID = ownerid;
                lantern?.Spawn();
                lantern.SetParent(entity);
                hasfire = true;
            }
            public void SpawnSideWalls() {
                string prefabtop = "assets/prefabs/deployable/signs/sign.large.wood.prefab";
                backtop = GameManager.server.CreateEntity(prefabtop, entitypos, entityrot, true);
                backtop.transform.localEulerAngles = new Vector3(0, 180, 0);
                backtop.transform.localPosition = new Vector3(0f, 0f, -2.4f);
                backtop.skinID = 1;
                backtop.OwnerID = ownerid;
                backtop?.Spawn();
                backtop.SetParent(entity);
                backside1 = GameManager.server.CreateEntity(prefabtop, entitypos, entityrot, true);
                backside1.transform.localEulerAngles = new Vector3(0, 90, 0);
                backside1.transform.localPosition = new Vector3(1.55f, 0f, -1f);
                backside1.OwnerID = ownerid;
                backside1?.Spawn();
                backside1.SetParent(entity);
                backside2 = GameManager.server.CreateEntity(prefabtop, entitypos, entityrot, true);
                backside2.transform.localEulerAngles = new Vector3(0, 270, 0);
                backside2.transform.localPosition = new Vector3(-1.55f, 0f, -1f);
                backside2.OwnerID = ownerid;
                backside2?.Spawn();
                backside2.SetParent(entity);
                haswalls = true;
            }
            public void SpawnRoof() {
                string prefabrudder = "assets/prefabs/deployable/signs/sign.post.single.prefab";
                string prefabtop = "assets/prefabs/deployable/signs/sign.large.wood.prefab";
                pole1 = GameManager.server.CreateEntity(prefabrudder, entitypos, entityrot, true);
                pole1.transform.localEulerAngles = new Vector3(0, 90, 180);
                pole1.transform.localPosition = new Vector3(1.5f, 2.3f, 0f);
                pole1.OwnerID = ownerid;
                pole1?.Spawn();
                pole1.SetParent(entity);
                pole1.SetFlag(BaseEntity.Flags.Busy, true, true);
                pole2 = GameManager.server.CreateEntity(prefabrudder, entitypos, entityrot, true);
                pole2.transform.localEulerAngles = new Vector3(0, 90, 180);
                pole2.transform.localPosition = new Vector3(-1.5f, 2.3f, 0f);
                pole2.OwnerID = ownerid;
                pole2?.Spawn();
                pole2.SetParent(entity);
                pole2.SetFlag(BaseEntity.Flags.Busy, true, true);
                pole3 = GameManager.server.CreateEntity(prefabrudder, entitypos, entityrot, true);
                pole3.transform.localEulerAngles = new Vector3(0, 90, 180);
                pole3.transform.localPosition = new Vector3(1.5f, 2.3f, -1.5f);
                pole3.OwnerID = ownerid;
                pole3?.Spawn();
                pole3.SetParent(entity);
                pole3.SetFlag(BaseEntity.Flags.Busy, true, true);
                pole4 = GameManager.server.CreateEntity(prefabrudder, entitypos, entityrot, true);
                pole4.transform.localEulerAngles = new Vector3(0, 90, 180);
                pole4.transform.localPosition = new Vector3(-1.5f, 2.3f, -1.5f);
        
// ... [Code preview truncated due to length. Full source in attached file] ...

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

Другие ресурсы пользователя 15FPS

Сверху