示例#1
0
 protected override void Unload()
 {
     if (DestructionProcessing.processing)
     {
         if (DestructionProcessing.originalCaller != null)
         {
             UnturnedChat.Say(DestructionProcessing.originalCaller, Translate("wreckingball_reload_abort"), Color.yellow);
         }
         Logger.LogWarning(Translate("wreckingball_reload_abort"));
         DestructionProcessing.Abort(WreckType.Wreck);
     }
     if (DestructionProcessing.cleanupProcessingBuildables || DestructionProcessing.cleanupProcessingFiles)
     {
         DestructionProcessing.Abort(WreckType.Cleanup);
     }
     ElementData              = null;
     Level.onPostLevelLoaded -= _PostLevelLoaded;
 }
示例#2
0
 // Changed timer to Update(), to attempt to fix ghost objects bug by syncing the destructions to the game frame/tic.
 public void Update()
 {
     if (Instance.State == PluginState.Loaded)
     {
         if ((DateTime.Now - DestructionProcessing.lastRunTimeWreck).TotalSeconds > (1 / Instance.Configuration.Instance.DestructionRate))
         {
             DestructionProcessing.lastRunTimeWreck = DateTime.Now;
             if (DestructionProcessing.processing)
             {
                 try
                 {
                     DestructionProcessing.DestructionLoop(WreckType.Wreck);
                 }
                 catch
                 {
                     DestructionProcessing.Abort(WreckType.Wreck);
                 }
             }
             if (DestructionProcessing.cleanupProcessingBuildables)
             {
                 try
                 {
                     DestructionProcessing.DestructionLoop(WreckType.Cleanup);
                 }
                 catch
                 {
                     DestructionProcessing.Abort(WreckType.Cleanup);
                 }
             }
         }
         if (Instance.Configuration.Instance.EnableCleanup)
         {
             DestructionProcessing.HandleCleanup();
         }
         if (Instance.Configuration.Instance.EnableVehicleCap)
         {
             DestructionProcessing.HandleVehicleCap();
         }
     }
 }
        public void Execute(IRocketPlayer caller, string[] cmd)
        {
            string command = String.Join(" ", cmd);

            if (!caller.IsAdmin && !WreckingBall.Instance.Configuration.Instance.Enabled)
            {
                return;
            }

            if (!caller.IsAdmin && !caller.HasPermission("wreck"))
            {
                return;
            }

            UnturnedPlayer player   = null;
            Vector3        position = Vector3.zero;

            if (!(caller is ConsolePlayer))
            {
                player   = (UnturnedPlayer)caller;
                position = player.Position;
            }


            if (String.IsNullOrEmpty(command.Trim()))
            {
                if (DestructionProcessing.processing)
                {
                    DestructionProcessing.Wreck(caller, "", 0, position, WreckType.Wreck, FlagType.Normal, 0, 0);
                }
                else
                {
                    UnturnedChat.Say(caller, WreckingBall.Instance.Translate("wreckingball_help"));
                    return;
                }
            }
            else
            {
                string[] oper = command.Split(' ');

                if (oper.Length >= 1)
                {
                    switch (oper[0])
                    {
                    case "confirm":
                        if (!(caller.HasPermission("wreck.wreck") || caller.HasPermission("wreck.*")) && !(caller is ConsolePlayer))
                        {
                            UnturnedChat.Say(caller, WreckingBall.Instance.Translate("wreckingball_wreck_permission"), Color.red);
                            return;
                        }
                        WreckingBall.Instance.Confirm(caller);
                        break;

                    case "abort":
                        if (!(caller.HasPermission("wreck.wreck") || caller.HasPermission("wreck.*")) && !(caller is ConsolePlayer))
                        {
                            UnturnedChat.Say(caller, WreckingBall.Instance.Translate("wreckingball_wreck_permission"), Color.red);
                            return;
                        }
                        if (!(caller is ConsolePlayer))
                        {
                            UnturnedChat.Say(caller, WreckingBall.Instance.Translate("wreckingball_aborted"));
                        }
                        Logger.Log(WreckingBall.Instance.Translate("wreckingball_aborted"));
                        DestructionProcessing.Abort(WreckType.Wreck);
                        break;

                    case "scan":
                        if (!(caller.HasPermission("wreck.scan") || caller.HasPermission("wreck.*")) && !(caller is ConsolePlayer))
                        {
                            UnturnedChat.Say(caller, WreckingBall.Instance.Translate("wreckingball_scan_permission"), Color.red);
                            return;
                        }
                        if ((oper.Length == 3 && !(caller is ConsolePlayer)) || (oper.Length == 6 && caller is ConsolePlayer))
                        {
                            if (caller is ConsolePlayer)
                            {
                                if (!cmd.GetVectorFromCmd(3, out position))
                                {
                                    UnturnedChat.Say(caller, WreckingBall.Instance.Translate("wreckingball_help_scan_console"));
                                    break;
                                }
                            }
                            ushort itemID = 0;
                            if (ushort.TryParse(oper[1], out itemID))
                            {
                                WreckingBall.Instance.Scan(caller, oper[1], Convert.ToSingle(oper[2]), position, FlagType.ItemID, 0, itemID);
                            }
                            else
                            {
                                if (oper[2].ToLower() == "nan")
                                {
                                    WreckingBall.Instance.Scan(caller, oper[1], float.NaN, position, FlagType.Normal, 0, 0);
                                }
                                else
                                {
                                    WreckingBall.Instance.Scan(caller, oper[1], Convert.ToSingle(oper[2]), position, FlagType.Normal, 0, 0);
                                }
                            }
                        }
                        else if ((oper.Length == 4 && !(caller is ConsolePlayer)) || (oper.Length == 7 && caller is ConsolePlayer))
                        {
                            ulong steamID = 0;
                            if (caller is ConsolePlayer)
                            {
                                if (!cmd.GetVectorFromCmd(4, out position))
                                {
                                    UnturnedChat.Say(caller, WreckingBall.Instance.Translate("wreckingball_help_scan_console"));
                                    break;
                                }
                            }
                            if (oper[1].isCSteamID(out steamID))
                            {
                                WreckingBall.Instance.Scan(caller, oper[2], Convert.ToSingle(oper[3]), position, FlagType.SteamID, (ulong)steamID, 0);
                            }
                            else
                            {
                                UnturnedChat.Say(caller, WreckingBall.Instance.Translate("wreckingball_help_scan"));
                            }
                        }
                        else
                        {
                            UnturnedChat.Say(caller, WreckingBall.Instance.Translate("wreckingball_help_scan"));
                        }

                        break;

                    case "teleport":
                        if (!(caller.HasPermission("wreck.teleport") || caller.HasPermission("wreck.*")) && !(caller is ConsolePlayer))
                        {
                            UnturnedChat.Say(caller, WreckingBall.Instance.Translate("wreckingball_teleport_permission"), Color.red);
                            return;
                        }
                        ulong ulSteamID    = 0;
                        bool  firstSteamID = false;
                        if (oper.Length > 1 && oper[1].isCSteamID(out ulSteamID))
                        {
                            firstSteamID = true;
                        }
                        if (oper.Length > 1)
                        {
                            if (caller is ConsolePlayer)
                            {
                                UnturnedChat.Say(caller, WreckingBall.Instance.Translate("wreckingball_teleport_not_allowed"));
                                break;
                            }
                            string ch = string.Empty;
                            if (firstSteamID && oper.Length > 2)
                            {
                                ch = oper[2];
                            }
                            else if (!firstSteamID)
                            {
                                ch = oper[1];
                            }
                            switch (ch)
                            {
                            case "b":
                                WreckingBall.Instance.Teleport(player, TeleportType.Barricades, ulSteamID);
                                break;

                            case "s":
                                WreckingBall.Instance.Teleport(player, TeleportType.Structures, ulSteamID);
                                break;

                            case "v":
                                WreckingBall.Instance.Teleport(player, TeleportType.Vehicles, ulSteamID);
                                break;

                            default:
                                UnturnedChat.Say(caller, WreckingBall.Instance.Translate("wreckingball_help_teleport2"));
                                break;
                            }
                        }
                        else
                        {
                            UnturnedChat.Say(caller, WreckingBall.Instance.Translate("wreckingball_help_teleport2"));
                            break;
                        }
                        break;

                    default:
                        if (!(caller.HasPermission("wreck.wreck") || caller.HasPermission("wreck.*")) && !(caller is ConsolePlayer))
                        {
                            UnturnedChat.Say(caller, WreckingBall.Instance.Translate("wreckingball_wreck_permission"), Color.red);
                            return;
                        }
                        if ((oper.Length == 2 && !(caller is ConsolePlayer)) || (oper.Length == 5 && caller is ConsolePlayer))
                        {
                            if (caller is ConsolePlayer)
                            {
                                if (!cmd.GetVectorFromCmd(2, out position))
                                {
                                    UnturnedChat.Say(caller, WreckingBall.Instance.Translate("wreckingball_help_console"));
                                    break;
                                }
                            }
                            ushort itemID = 0;
                            if (ushort.TryParse(oper[0], out itemID))
                            {
                                DestructionProcessing.Wreck(caller, oper[0], Convert.ToSingle(oper[1]), position, WreckType.Wreck, FlagType.ItemID, 0, itemID);
                            }
                            else
                            {
                                if (oper[1].ToLower() == "nan")
                                {
                                    DestructionProcessing.Wreck(caller, oper[0], float.NaN, position, WreckType.Wreck, FlagType.Normal, 0, 0);
                                }
                                else
                                {
                                    DestructionProcessing.Wreck(caller, oper[0], Convert.ToSingle(oper[1]), position, WreckType.Wreck, FlagType.Normal, 0, 0);
                                }
                            }
                        }
                        else if ((oper.Length == 3 && !(caller is ConsolePlayer)) || (oper.Length == 6 && caller is ConsolePlayer))
                        {
                            if (caller is ConsolePlayer)
                            {
                                if (!cmd.GetVectorFromCmd(3, out position))
                                {
                                    UnturnedChat.Say(caller, WreckingBall.Instance.Translate("wreckingball_help_console"));
                                    break;
                                }
                            }
                            ulong steamID = 0;
                            if (oper[0].isCSteamID(out steamID))
                            {
                                DestructionProcessing.Wreck(caller, oper[1], Convert.ToSingle(oper[2]), position, WreckType.Wreck, FlagType.SteamID, steamID, 0);
                            }
                            else
                            {
                                UnturnedChat.Say(caller, WreckingBall.Instance.Translate("wreckingball_help"));
                            }
                        }
                        else
                        {
                            UnturnedChat.Say(caller, WreckingBall.Instance.Translate("wreckingball_help"));
                            break;
                        }
                        break;
                    }
                    return;
                }
                else
                {
                    UnturnedChat.Say(caller, WreckingBall.Instance.Translate("wreckingball_help"));
                }
            }
        }