Esempio n. 1
0
        private IEnumerator DowngradeBuildingBlocks(BasePlayer player, BuildingGrade.Enum targetGrade, PermissionSettings permS, bool isAdmin)
        {
            int current = 0, success = 0;
            var autoGrade = targetGrade == BuildingGrade.Enum.None;

            foreach (var buildingBlock in allBuildingBlocks)
            {
                if (buildingBlock == null || buildingBlock.IsDestroyed)
                {
                    continue;
                }
                BuildingGrade.Enum grade = targetGrade;
                if (CheckBuildingGrade(buildingBlock, false, ref grade))
                {
                    if (!autoGrade || tempGrantedGrades.Contains(grade))
                    {
                        if (TryDowngradeToGrade(buildingBlock, player, grade /*, permS.refund*/, isAdmin: isAdmin))
                        {
                            success++;
                        }
                    }
                }

                if (current++ % configData.globalS.perFrame == 0)
                {
                    yield return(CoroutineEx.waitForEndOfFrame);
                }
            }

            if (player != null && player.IsConnected)
            {
                Print(player, success > 0 ? Lang("FinishedDowngrade", player.UserIDString, success) : Lang("NotDowngraded", player.UserIDString));
            }
        }
Esempio n. 2
0
        void PasteBuilding(List <object> structureData, Vector3 targetPoint, float targetRot, float heightAdjustment)
        {
            Vector3    OriginRotation = new Vector3(0f, targetRot, 0f);
            Quaternion OriginRot      = Quaternion.EulerRotation(OriginRotation);

            foreach (Dictionary <string, object> structure in structureData)
            {
                Dictionary <string, object> structPos = structure["pos"] as Dictionary <string, object>;
                Dictionary <string, object> structRot = structure["rot"] as Dictionary <string, object>;
                string prefabname = (string)structure["prefabname"];
                if (!prefabname.Contains(".prefab"))
                {
                    prefabname = "assets/bundled/prefabs/" + prefabname + ".prefab";
                }
                BuildingGrade.Enum grade     = (BuildingGrade.Enum)structure["grade"];
                Quaternion         newAngles = Quaternion.EulerRotation((new Vector3(Convert.ToSingle(structRot["x"]), Convert.ToSingle(structRot["y"]), Convert.ToSingle(structRot["z"]))) + OriginRotation);
                Vector3            TempPos   = OriginRot * (new Vector3(Convert.ToSingle(structPos["x"]), Convert.ToSingle(structPos["y"]), Convert.ToSingle(structPos["z"])));
                Vector3            NewPos    = TempPos + targetPoint;
                GameObject         newPrefab = GameManager.server.FindPrefab(prefabname);
                if (newPrefab != null)
                {
                    var block = SpawnStructure(newPrefab, NewPos, newAngles, grade);
                    if (block && block.HasSlot(BaseEntity.Slot.Lock))
                    {
                        TryPasteLock(block, structure);
                    }
                }
            }
        }
Esempio n. 3
0
 void OnStructureUpgrade(BuildingBlock block, BasePlayer player, BuildingGrade.Enum grade)
 {
     if (sd.OnUpgrade.ContainsKey("From" + block.grade.ToString() + "To" + grade.ToString()) == false)
     {
         sd.OnUpgrade.Add("From" + block.grade.ToString() + "To" + grade.ToString(), 1);
     }
     else
     {
         if (sd.PlayerXP.ContainsKey(player.UserIDString) == false)
         {
             sd.PlayerXP.Add(player.UserIDString, 0);
         }
         if (sd.PlayerLevel.ContainsKey(player.UserIDString) == false)
         {
             sd.PlayerLevel.Add(player.UserIDString, 1);
         }
         XPToAdd[player]           = XPToAdd[player] + sd.OnUpgrade["From" + block.grade.ToString() + "To" + grade.ToString()];
         PlayerStreakEnded[player] = false;
         PlayerStreakTime[player]  = sd.StreakTimeEnd;
         if (sd.PlayerXP[player.UserIDString] >= (sd.XpNeededPerLevel_Will_be_Mutiplied_By_Level * sd.PlayerLevel[player.UserIDString]) * sd.PlayerLevel[player.UserIDString])
         {
             sd.PlayerXP[player.UserIDString]    = 0;
             sd.PlayerLevel[player.UserIDString] = sd.PlayerLevel[player.UserIDString] + 1;
             Reconomy.Call("GiveMoney", player, sd.MoneyPerLevel_Will_be_Mutiplied_By_Level * sd.PlayerLevel[player.UserIDString], "You leveled up!", true);
         }
     }
 }
Esempio n. 4
0
    public override float GetDecayDelay(BaseEntity entity)
    {
        BuildingBlock buildingBlock = entity as BuildingBlock;

        BuildingGrade.Enum grade = (buildingBlock ? buildingBlock.grade : BuildingGrade.Enum.Twigs);
        return(GetDecayDelay(grade));
    }
Esempio n. 5
0
        HashSet <BuildingBlock> FindAllCupboardlessBlocks(BuildingGrade.Enum grade)
        {
            var blocks = FindAllBuildingBlocks(grade);

            FilterAllCupboardless(blocks);
            return(blocks);
        }
Esempio n. 6
0
        // Upgrading construction blocks.
        private object CanAffordUpgrade(BasePlayer player, BuildingBlock block, BuildingGrade.Enum iGrade)
        {
            var ruleset = GetPlayerRuleset(player.UserIDString);

            if (ruleset == null)
            {
                return(null);
            }

            var args = new object[] { player, block, iGrade };

            object otherPluginResult;

            if (PluginReturnedResult(VerificationGatekeeper, nameof(OnPayForPlacement), out otherPluginResult, args))
            {
                return(otherPluginResult);
            }

            if (!ruleset.PlayerHasAmountList(player, block.GetGrade(iGrade).costToBuild))
            {
                return(false);
            }

            // Return true to allow placement, skipping vanilla validation.
            return(true);
        }
        private bool CanDemolish(BasePlayer player, BuildingBlock block, BuildingGrade.Enum grade)
        {
            var @event =
                new RustPlayerDemolishingBuildingBlockEvent(new RustPlayer(player), new RustBuildingBlock(block));

            return(EmitCancellableReturnsBool(@event));
        }
Esempio n. 8
0
        //Oxide Hook
        void OnStructureUpgrade(BuildingBlock block, BasePlayer player, BuildingGrade.Enum grade)
        {
            if (block.grade == BuildingGrade.Enum.Twigs)
            {
                if (allowDemolish)
                {
                    block.SetFlag(BaseEntity.Flags.Reserved2, true);

                    if (this.amountOfMinutesAfterUpgrade > 0)
                    {
                        addBlockToList(block, DateTime.Now);
                    }
                }
            }

            else if (block.name.Contains("build/door.hinged") && block.grade == BuildingGrade.Enum.Wood)
            {
                if (allowDemolishDoors)
                {
                    block.SetFlag(BaseEntity.Flags.Reserved2, true);

                    if (this.amountOfMinutesAfterUpgrade > 0)
                    {
                        addBlockToList(block, DateTime.Now);
                    }
                }
            }
        }
 void OnStructureUpgrade(BaseCombatEntity block, BasePlayer player, BuildingGrade.Enum grade)
 {
     if (block != null && upgradeBlockCheck.Contains(block as BuildingBlock))
     {
         upgradeBlockCheck.Remove(block as BuildingBlock);
         return;
     }
     if (!playersInfo.ContainsKey(player.userID))
     {
         playersInfo[player.userID] = new PlayerDetails();
     }
     if ((enablePermission && !permission.UserHasPermission(player.UserIDString, permissionName)) || PlayerHasFlag(player.userID, PlayerFlags.PLUGIN_DISABLED))
     {
         return;
     }
     if (playersInfo[player.userID].upgradeInfo != grade)
     {
         playersInfo[player.userID].upgradeInfo = grade;
         RenderMode(player, false);
         if (!PlayerHasFlag(player.userID, PlayerFlags.MESSAGES_DISABLED))
         {
             player.ChatMessage(pluginPrefix + string.Format(lang.GetMessage("UpgradeModeGrade", this, player.UserIDString), grade.ToString()));
         }
     }
     if (enableDistanceUpgrade && player.GetComponent <EHammer>() == null)
     {
         player.gameObject.AddComponent <EHammer>();
     }
     RefreshTimer(player);
 }
    private bool CanAffordUpgrade(BuildingGrade.Enum iGrade, BasePlayer player)
    {
        bool   flag;
        object obj = Interface.CallHook("CanAffordUpgrade", player, this, iGrade);

        if (obj as bool)
        {
            return((bool)obj);
        }
        List <ItemAmount> .Enumerator enumerator = this.GetGrade(iGrade).costToBuild.GetEnumerator();
        try
        {
            while (enumerator.MoveNext())
            {
                ItemAmount current = enumerator.Current;
                if ((float)player.inventory.GetAmount(current.itemid) >= current.amount)
                {
                    continue;
                }
                flag = false;
                return(flag);
            }
            return(true);
        }
        finally
        {
            ((IDisposable)enumerator).Dispose();
        }
        return(flag);
    }
Esempio n. 11
0
        void PasteBuilding(List <object> structureData, Vector3 targetPoint, float targetRot, float heightAdjustment)
        {
            Vector3 OriginRotation = new Vector3(0f, targetRot, 0f);
            //Quaternion OriginRot = Quaternion.EulerRotation(OriginRotation);
            Quaternion OriginRot = Quaternion.Euler(OriginRotation);;

            foreach (Dictionary <string, object> structure in structureData)
            {
                Dictionary <string, object> structPos = structure["pos"] as Dictionary <string, object>;
                Dictionary <string, object> structRot = structure["rot"] as Dictionary <string, object>;
                string             prefabname         = (string)structure["prefabname"];
                BuildingGrade.Enum grade     = (BuildingGrade.Enum)structure["grade"];
                Quaternion         newAngles = Quaternion.Euler((new Vector3(Convert.ToSingle(structRot["x"]), Convert.ToSingle(structRot["y"]), Convert.ToSingle(structRot["z"]))) + OriginRotation);
                Vector3            TempPos   = OriginRot * (new Vector3(Convert.ToSingle(structPos["x"]), Convert.ToSingle(structPos["y"]), Convert.ToSingle(structPos["z"])));
                Vector3            NewPos    = TempPos + targetPoint;
                GameObject         newPrefab = GameManager.server.FindPrefab(prefabname);
                if (newPrefab != null)
                {
                    var block = SpawnStructure(newPrefab, NewPos, newAngles, grade);
                    block.enableStability = false;
                    //block.isClient = true;
                    //supports.SetValue(block, null);
                    //var supp = supports.GetValue(block) as BuildingBlock.Support;
                    if (block && block.HasSlot(BaseEntity.Slot.Lock))
                    {
                        TryPasteLock(block, structure);
                    }
                }
            }
        }
 object CanChangeGrade(BasePlayer player, BuildingBlock block, BuildingGrade.Enum grade)
 {
     if (permission.UserHasPermission(player.UserIDString, "upgradepermissions.all"))
     {
         return(true);
     }
     if (grade == BuildingGrade.Enum.Wood && !permission.UserHasPermission(player.UserIDString, WoodPermission))
     {
         SendReply(player, Lang("Wood", player.UserIDString));
         return(false);
     }
     if (grade == BuildingGrade.Enum.Stone && !permission.UserHasPermission(player.UserIDString, StonePermission))
     {
         SendReply(player, Lang("Stone", player.UserIDString));
         return(false);
     }
     if (grade == BuildingGrade.Enum.Metal && !permission.UserHasPermission(player.UserIDString, SheetMetalPermission))
     {
         SendReply(player, Lang("SheetMetal", player.UserIDString));
         return(false);
     }
     if (grade == BuildingGrade.Enum.TopTier && !permission.UserHasPermission(player.UserIDString, ArmouredPermission))
     {
         SendReply(player, Lang("Armoured", player.UserIDString));
         return(false);
     }
     return(null);
 }
        public BuildingPartGradeChangeEvent(BuildingBlock bb, BuildingGrade.Enum bgrade, BasePlayer player)
        {
            BuildingPart = new BuildingPart(bb);
            Builder = Server.GetPlayer(player);
            grade = bgrade;

            HasPrivilege = (bool)bb.CallMethod("CanChangeToGrade", bgrade, player);
        }
        public BuildingPartGradeChangeEvent(BuildingBlock bb, BuildingGrade.Enum bgrade, BasePlayer player)
        {
            BuildingPart = new BuildingPart(bb);
            Builder      = Server.GetPlayer(player);
            grade        = bgrade;

            HasPrivilege = (bool)bb.CallMethod("CanChangeToGrade", bgrade, player);
        }
 ConstructionGrade GetGrade(BuildingBlock block, BuildingGrade.Enum iGrade)
 {
     if (block.grade >= (BuildingGrade.Enum)block.blockDefinition.grades.Length)
     {
         return(block.blockDefinition.defaultGrade);
     }
     return(block.blockDefinition.grades[(int)iGrade]);
 }
Esempio n. 16
0
 private bool HasUpgradePrivilege(BuildingGrade.Enum iGrade, BasePlayer player)
 {
     if (iGrade == this.grade || iGrade >= (BuildingGrade.Enum) this.blockDefinition.grades.Length || (iGrade < BuildingGrade.Enum.Twigs || iGrade < this.grade))
     {
         return(false);
     }
     return(!player.IsBuildingBlocked(((Component)this).get_transform().get_position(), ((Component)this).get_transform().get_rotation(), this.bounds));
 }
Esempio n. 17
0
 private void OnStructureUpgrade(BuildingBlock block, BasePlayer player, BuildingGrade.Enum grade)
 {
     if (block == null || player == null || !HasPerms(player.UserIDString, "hammertime.allowed"))
     {
         return;
     }
     NextTick(() => DoInvokes(block, false, block?.blockDefinition?.canRotate ?? true));
 }
 public RustBuildingBlockUpgradingEvent(
     RustBuildingBlock buildingBlock,
     RustPlayer player,
     BuildingGrade.Enum grade) : base(buildingBlock)
 {
     Player = player;
     Grade  = grade;
 }
Esempio n. 19
0
 private object CanChangeGrade(BasePlayer player, BuildingBlock block, BuildingGrade.Enum iGrade)
 {
     if (DeployVolume.Check(block.transform.position, block.transform.rotation, PrefabAttribute.server.FindAll <DeployVolume>(block.prefabID), ~(1 << block.gameObject.layer)))
     {
         return(false);
     }
     return(null);
 }
Esempio n. 20
0
 private bool HasGradePermission(BasePlayer player, BuildingGrade.Enum grade, bool isUpgrade)
 {
     return(isUpgrade
         ? permission.UserHasPermission(player.UserIDString, PERMISSION_UP_ALL) ||
            permission.UserHasPermission(player.UserIDString, PERMISSION_UP + (int)grade)
         : permission.UserHasPermission(player.UserIDString, PERMISSION_DOWN_ALL) ||
            permission.UserHasPermission(player.UserIDString, PERMISSION_DOWN + (int)grade));
 }
Esempio n. 21
0
        HashSet <BuildingBlock> FindAllBuildingBlocks(BuildingGrade.Enum grade)
        {
            var started_at = Time.realtimeSinceStartup;
            var blocks     = new HashSet <BuildingBlock>(((ListDictionary <uint, BaseNetworkable>)entityListField.GetValue(BaseNetworkable.serverEntities)).Values.OfType <BuildingBlock>().Where(block => block.grade == grade));

            Puts($"Finding {blocks.Count} {grade} blocks took {Time.realtimeSinceStartup - started_at:0.000} seconds");
            return(blocks);
        }
 private ConstructionGrade GetGrade(BuildingGrade.Enum iGrade)
 {
     if ((int)this.grade < (int)this.blockDefinition.grades.Length)
     {
         return(this.blockDefinition.grades[(int)iGrade]);
     }
     Debug.LogWarning(string.Concat(new object[] { "Grade out of range ", base.gameObject, " ", this.grade, " / ", (int)this.blockDefinition.grades.Length }));
     return(this.blockDefinition.defaultGrade);
 }
Esempio n. 23
0
 bool?OnStructureUpgrade(BaseCombatEntity entity, BasePlayer player, BuildingGrade.Enum grade)
 {
     JDeployable.Child c = entity?.GetComponent <JDeployable.Child>();
     if (c != null && c.parent != null && player != null)
     {
         return(c.parent.OnStructureUpgrade(c, player, grade));
     }
     return(null);
 }
Esempio n. 24
0
 private ConstructionGrade GetGrade(BuildingGrade.Enum iGrade)
 {
     if (this.grade < (BuildingGrade.Enum) this.blockDefinition.grades.Length)
     {
         return(this.blockDefinition.grades[(int)iGrade]);
     }
     Debug.LogWarning((object)("Grade out of range " + (object)((Component)this).get_gameObject() + " " + (object)this.grade + " / " + (object)this.blockDefinition.grades.Length));
     return(this.blockDefinition.defaultGrade);
 }
Esempio n. 25
0
 public ConstructionGrade GetGrade(BuildingGrade.Enum iGrade)
 {
     if ((int)grade >= blockDefinition.grades.Length)
     {
         Debug.LogWarning(string.Concat("Grade out of range ", base.gameObject, " ", grade, " / ", blockDefinition.grades.Length));
         return(blockDefinition.defaultGrade);
     }
     return(blockDefinition.grades[(int)iGrade]);
 }
 public void SetGrade(BuildingGrade.Enum iGradeID)
 {
     if (this.blockDefinition.grades == null || (int)iGradeID >= (int)this.blockDefinition.grades.Length)
     {
         Debug.LogError(string.Concat("Tried to set to undefined grade! ", this.blockDefinition.fullName), base.gameObject);
         return;
     }
     this.grade = iGradeID;
     this.grade = this.currentGrade.gradeBase.type;
     this.UpdateGrade();
 }
Esempio n. 27
0
 void DrawUI(BasePlayer player, BuildingGrade.Enum grade, int seconds)
 {
     if (!loaded)
     {
         return;
     }
     DestroyUI(player);
     CuiHelper.AddUi(player,
                     GUI.Replace("{0}", gradesString[grade]).Replace("{1}", seconds.ToString())
                     .Replace("{2}", gradeImages[$"building.upgrade.{(int) grade}"]));
 }
Esempio n. 28
0
        object OnStructureUpgrade(BuildingBlock block, BasePlayer player, BuildingGrade.Enum gradeEnum)
        {
            var grade = gradeEnum.ToString();

            if ((bool)Config[grade] || IsAllowed(player.UserIDString, $"{Title}.{grade}"))
            {
                return(null);
            }
            PrintToChat(player, Lang("NotAllowed", player.UserIDString, grade));
            return(true);
        }
Esempio n. 29
0
 public void SetGrade(BuildingGrade.Enum iGradeID)
 {
     if (blockDefinition.grades == null || (int)iGradeID >= blockDefinition.grades.Length)
     {
         Debug.LogError("Tried to set to undefined grade! " + blockDefinition.fullName, base.gameObject);
         return;
     }
     grade = iGradeID;
     grade = currentGrade.gradeBase.type;
     UpdateGrade();
 }
Esempio n. 30
0
        void DrawUI(BasePlayer player, BuildingGrade.Enum grade, int seconds)
        {
            if (!loaded)
            {
                return;
            }
            string imgString = seconds.ToString("00");
            string image1    = ImageStorage.FetchPng(imgString[0].ToString());
            string image2    = ImageStorage.FetchPng(imgString[1].ToString());

            core.DrawUI(player, "BuildingUpgrade", "menu", gradeImages[$"building.upgrade.{(int) grade}"], image1, image2);
        }
 public override void ResetState()
 {
     base.ResetState();
     this.blockDefinition  = null;
     this.forceSkinRefresh = false;
     this.modelState       = 0;
     this.lastModelState   = 0;
     this.grade            = BuildingGrade.Enum.Twigs;
     this.lastGrade        = BuildingGrade.Enum.None;
     this.DestroySkin();
     this.UpdatePlaceholder(true);
 }
 public StructureComponent(BuildingPart bp, SerializedVector3 v3, SerializedQuaternion q)
 {
     Grade = bp.buildingBlock.grade;
     Prefab = bp.buildingBlock.LookupPrefabName();
     LocalPosition = v3;
     LocalRotation = q;
     Health = (float)((int)Math.Floor((double)(bp.Health / 85)) * 85);
     if (bp.buildingBlock.HasSlot(BaseEntity.Slot.Lock))
     {
         var baseLock = bp.buildingBlock.GetSlot(BaseEntity.Slot.Lock) as BaseLock;
         if (baseLock == null)
         {
             HasCodeLock = false;
             HasKeyLock = false;
         }
         else if (baseLock.GetComponent<CodeLock>())
         {
             HasCodeLock = true;
             HasKeyLock = false;
             CodeLock codeLock = baseLock.GetComponent<CodeLock>();
             if (!string.IsNullOrEmpty((string)codeLock.GetFieldValue("code")))
             {
                 LockCode = (string)codeLock.GetFieldValue("code");
                 LockWList = new List<ulong>();
                 LockWList = (List<ulong>)codeLock.GetFieldValue("whitelistPlayers");
             }
         }
         else if (baseLock.GetComponent<KeyLock>())
         {
             HasCodeLock = false;
             HasKeyLock = true;
             KeyLock keyLock = baseLock.GetComponent<KeyLock>();
             int keyCode = (int)keyLock.GetFieldValue("keyCode");
             keyCode = (bool)keyLock.GetFieldValue("firstKeyCreated") ? keyCode |= 0x80 : (int)keyLock.GetFieldValue("keyCode");
             LockCode = keyCode.ToString();
         }
     }
 }
Esempio n. 33
0
 public BuildingUpgradeEvent(BuildingBlock buildingBlock, BuildingGrade.Enum buildingGrade, BasePlayer basePlayer)
 {
     BuildingPart = new BuildingPart(buildingBlock);
     Grade = buildingGrade;
     Player = Server.GetPlayer(basePlayer);
 }