コード例 #1
0
 public void VehicleBuyBack(InteractableVehicle vehicle)
 {
     try
     {
         if (vehicle.isLocked && vehicle.lockedOwner != CSteamID.Nil)
         {
             VehicleInfo info     = DShop.Instance.Database.GetVehicleInfo((ulong)vehicle.lockedOwner, vehicle.id);
             ShopObject  svehicle = DShop.Instance.Database.GetItem(ItemType.Vehicle, vehicle.id);
             if (info != null && svehicle.ItemID == vehicle.id && svehicle.RestrictBuySell != RestrictBuySell.BuyOnly)
             {
                 Uconomy.Instance.Database.CheckSetupAccount(vehicle.lockedOwner);
                 Uconomy.Instance.Database.IncreaseBalance(vehicle.lockedOwner.ToString(), Math.Round(decimal.Multiply(svehicle.BuyCost, svehicle.SellMultiplier), 2));
                 DShop.Instance.Database.DeleteVehicleInfo(info);
                 bool getPInfo = WreckingBall.isPlayerInfoLibLoaded;
                 Logger.Log(string.Format("Vehicle buyback successfull for: InstanceID: {0}, and Type: {1}({2}), at position: {3} , Sign By: {4}, Locked By: {5}.",
                                          vehicle.instanceID,
                                          vehicle.asset.vehicleName,
                                          vehicle.id, vehicle.transform.ToString(),
                                          DestructionProcessing.HasFlaggedElement(vehicle.transform, out ulong vFlagOwner) ? (getPInfo ? Instance.PInfoGenerateMessage(vFlagOwner) : vFlagOwner.ToString()) : "N/A",
                                          vehicle.isLocked ? (getPInfo ? Instance.PInfoGenerateMessage((ulong)vehicle.lockedOwner) : vehicle.lockedOwner.ToString()) : "N/A"));
             }
         }
     }
     catch (Exception ex)
     {
         Logger.LogException(ex, "There was an error with trying to process a vehicle buyback.");
     }
 }
コード例 #2
0
        public void Execute(IRocketPlayer caller, string[] command)
        {
            UnturnedPlayer player      = (UnturnedPlayer)caller;
            Ray            ray         = new Ray(player.Player.look.aim.position, player.Player.look.aim.forward);
            RaycastInfo    raycastInfo = DamageTool.raycast(ray, 10f, RayMasks.VEHICLE);

            if (raycastInfo.vehicle != null)
            {
                bool getPInfo = false;
                if (WreckingBall.Instance.Configuration.Instance.EnablePlayerInfo && WreckingBall.isPlayerInfoLibPresent && WreckingBall.isPlayerInfoLibLoaded)
                {
                    getPInfo = true;
                }
                if (!raycastInfo.vehicle.isDead)
                {
                    bool showSignOwner = false;
                    showSignOwner = DestructionProcessing.HasFlaggedElement(raycastInfo.transform, out ulong signOwner);
                    string signmsg   = getPInfo ? WreckingBall.Instance.PInfoGenerateMessage(signOwner) : signOwner.ToString();
                    string lockedmsg = raycastInfo.vehicle.isLocked ? (!getPInfo || raycastInfo.vehicle.lockedOwner == CSteamID.Nil ? raycastInfo.vehicle.lockedOwner.ToString() : WreckingBall.Instance.PInfoGenerateMessage((ulong)raycastInfo.vehicle.lockedOwner)) : "N/A";
                    string msg       = string.Format("Dropping elements off of vehicle: {0}({1}), InstanceID: {2}, Locked Owner: {3}, SignOwner {4}.", raycastInfo.vehicle.asset.name, raycastInfo.vehicle.id, raycastInfo.vehicle.instanceID,
                                                     lockedmsg,
                                                     showSignOwner ? signmsg : "N/A");
                    UnturnedChat.Say(caller, msg);
                    Logger.Log(msg);
                    WreckingBall.Instance.VehicleElementDrop(raycastInfo.vehicle, true, raycastInfo.transform);
                }
            }
            else
            {
                UnturnedChat.Say(caller, "Couldn't find a vehicle in the direction you're looking, or too far away, within 10 units.");
            }
        }
コード例 #3
0
        public void Execute(IRocketPlayer caller, string[] command)
        {
            float          radius = 0;
            UnturnedPlayer player = null;

            if (!(caller is ConsolePlayer))
            {
                if (command.GetFloatParameter(0) == null)
                {
                    UnturnedChat.Say(caller, WreckingBall.Instance.Translate("wreckingball_lv_help"));
                    return;
                }
                player = (UnturnedPlayer)caller;
                radius = (float)command.GetFloatParameter(0);
            }
            foreach (InteractableVehicle vehicle in VehicleManager.vehicles)
            {
                int  count    = 0;
                bool getPInfo = false;
                // skip the vehicle in the list if it is destroyed or drowned.
                if (vehicle.isDead || vehicle.isDrowned)
                {
                    continue;
                }
                if (WreckingBall.Instance.Configuration.Instance.EnablePlayerInfo && WreckingBall.isPlayerInfoLibPresent && WreckingBall.isPlayerInfoLibLoaded)
                {
                    getPInfo = true;
                }
                string lockedBy   = getPInfo ? WreckingBall.Instance.PInfoGenerateMessage((ulong)vehicle.lockedOwner) : vehicle.lockedOwner.ToString();
                ulong  signOwner  = 0;
                string signBy     = string.Empty;
                bool   showSignBy = false;
                if (BarricadeManager.tryGetPlant(vehicle.transform, out byte x, out byte y, out ushort plant, out BarricadeRegion barricadeRegion))
                {
                    count = barricadeRegion.drops.Count;
                }
                if (caller is ConsolePlayer || Vector3.Distance(vehicle.transform.position, player.Position) <= radius)
                {
                    showSignBy = DestructionProcessing.HasFlaggedElement(vehicle.transform, out signOwner);
                    if (showSignBy)
                    {
                        signBy = getPInfo ? WreckingBall.Instance.PInfoGenerateMessage(signOwner) : signOwner.ToString();
                    }
                    ProcessMessages(caller, vehicle.transform, vehicle.asset, vehicle.instanceID, count, lockedBy, vehicle.isLocked, signBy, showSignBy);
                }
                // Handle train cars too, if in range.
                if (vehicle.asset.engine == EEngine.TRAIN && vehicle.trainCars != null && vehicle.trainCars.Length > 1)
                {
                    for (int i = 1; i < vehicle.trainCars.Length; i++)
                    {
                        if (caller is ConsolePlayer || Vector3.Distance(vehicle.trainCars[i].root.transform.position, player.Position) <= radius)
                        {
                            if (BarricadeManager.tryGetPlant(vehicle.trainCars[i].root, out x, out y, out plant, out barricadeRegion))
                            {
                                count = barricadeRegion.drops.Count;
                            }
                            showSignBy = DestructionProcessing.HasFlaggedElement(vehicle.trainCars[i].root, out signOwner);
                            if (showSignBy)
                            {
                                signBy = getPInfo ? WreckingBall.Instance.PInfoGenerateMessage(signOwner) : signOwner.ToString();
                            }
                            ProcessMessages(caller, vehicle.trainCars[i].root, null, vehicle.instanceID, count, lockedBy, false, signBy, showSignBy, true, i);
                        }
                    }
                }
            }
        }
コード例 #4
0
        internal void Report(IRocketPlayer caller, ushort itemId, float range, bool printConsole, bool getPinfo, object data, BuildableType type = BuildableType.Element, int count = 0, ulong lockedOwner = 0, int vindex = 0)
        {
            Category cat;

            if (!elements.ContainsKey(itemId))
            {
                if (type == BuildableType.VehicleElement)
                {
                    if (reportLists[BuildableType.VehicleElement].ContainsKey('!'))
                    {
                        reportLists[BuildableType.VehicleElement]['!'] += 1;
                    }
                    else
                    {
                        reportLists[BuildableType.VehicleElement].Add('!', 1);
                    }
                    cat = categorys['!'];
                }
                else
                {
                    if (reportLists[BuildableType.Element].ContainsKey('!'))
                    {
                        reportLists[BuildableType.Element]['!'] += 1;
                    }
                    else
                    {
                        reportLists[BuildableType.Element].Add('!', 1);
                    }
                    cat = categorys['!'];
                }
            }
            else
            {
                if (type == BuildableType.VehicleElement)
                {
                    if (reportLists[BuildableType.VehicleElement].ContainsKey(elements[itemId].CategoryId))
                    {
                        reportLists[BuildableType.VehicleElement][elements[itemId].CategoryId] += 1;
                    }
                    else
                    {
                        reportLists[BuildableType.VehicleElement].Add(elements[itemId].CategoryId, 1);
                    }
                    cat = categorys[elements[itemId].CategoryId];
                }
                else
                {
                    if (reportLists[BuildableType.Element].ContainsKey(elements[itemId].CategoryId))
                    {
                        reportLists[BuildableType.Element][elements[itemId].CategoryId] += 1;
                    }
                    else
                    {
                        reportLists[BuildableType.Element].Add(elements[itemId].CategoryId, 1);
                    }
                    cat = categorys[elements[itemId].CategoryId];
                }
            }
            if (printConsole || !elements.ContainsKey(itemId))
            {
                string stype = type == BuildableType.VehicleElement ? "Vehicle Element: " : "Element: ";
                string msg   = string.Empty;
                ulong  owner = 0;
                InteractableVehicle vehicle = null;
                StructureData       sData   = null;
                BarricadeData       bData   = null;
                string eName = string.Empty;
                if (data is BarricadeData)
                {
                    bData = data as BarricadeData;
                    owner = bData.owner;
                    eName = bData.barricade.asset.itemName;
                }
                else if (data is StructureData)
                {
                    sData = data as StructureData;
                    owner = sData.owner;
                    eName = sData.structure.asset.itemName;
                }
                else if (data is InteractableVehicle)
                {
                    vehicle = data as InteractableVehicle;
                    itemId  = vehicle.id;
                    eName   = vehicle.asset.vehicleName;
                }
                if (type == BuildableType.Vehicle)
                {
                    DestructionProcessing.HasFlaggedElement(vindex > 0 ? vehicle.trainCars[vindex].root : vehicle.transform, out ulong signOwner);
                    msg = string.Format("{0}{1} (Id: {6}:{2}, Instance ID: {8}) @ {3}m, Barricade Count: {4}, Sign by: {7}, Locked By: {5}", stype, cat.Name, itemId, Math.Round(range, 2), count, lockedOwner > 0 ? getPinfo ? WreckingBall.Instance.PInfoGenerateMessage(lockedOwner) : lockedOwner.ToString() : "N/A", vindex > 0 ? "Train car#" + vindex : eName, signOwner > 0 ? getPinfo ? WreckingBall.Instance.PInfoGenerateMessage(signOwner) : signOwner.ToString() : "N/A", vehicle.instanceID.ToString());
                }
                else
                {
                    // Generate the message in another method, as the Player info one requires special data types that have to be loaded before executing a method.
                    msg = string.Format("{0}{1} (Id: {5}:{2}) @ {3}m, Owner: {4}", stype, cat.Name, itemId, Math.Round(range, 2), owner > 0 ? getPinfo ? WreckingBall.Instance.PInfoGenerateMessage(owner) : owner.ToString() : "N/A", eName);
                }


                if (WreckingBall.Instance.Configuration.Instance.LogScans)
                {
                    Logger.Log(msg, cat.Color);
                }
                else
                {
                    Console.ForegroundColor = cat.Color;
                    Console.WriteLine(msg);
                    Console.ResetColor();
                    if (R.Settings.Instance.RCON.Enabled)
                    {
                        RCONServer.Broadcast(msg);
                    }
                }
                if (WreckingBall.Instance.Configuration.Instance.PrintToChat && !(caller is ConsolePlayer))
                {
                    UnturnedChat.Say(caller, msg, Color.yellow);
                }
            }
        }