예제 #1
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);
         }
     }
 }
예제 #2
0
            private void Upgrade(BuildingBlock block)
            {
                if (Interface.Oxide.CallHook("OnStructureUpgrade", block, player, gradeEnum) != null)
                {
                    Destroy(this);
                    return;
                }

                Refresh();

                if (UpgradeBlocked(block))
                {
                    return;
                }

                if (block.grade >= gradeEnum)
                {
                    return;
                }

                if (block.SecondsSinceAttacked < config.attackTime)
                {
                    return;
                }

                if (config.checkPrivilege && !player.CanBuild())
                {
                    return;
                }

                if (config.checkHealth && Math.Abs(block.Health() - block.MaxHealth()) > 1)
                {
                    return;
                }

                try
                {
                    var resources = block.blockDefinition.grades[gradeInt].costToBuild;
                    if (!TakeResources(resources))
                    {
                        return;
                    }
                }
                catch
                {
                    return;
                }

                block.SetGrade(gradeEnum);
                block.SetHealthToMax();
                block.StartBeingRotatable();
                block.SendNetworkUpdate();
                block.UpdateSkin();
                block.ResetUpkeepTime();
                Effect.server.Run("assets/bundled/prefabs/fx/build/promote_" + gradeEnum.ToString().ToLower() + ".prefab", block.transform.position);
            }
예제 #3
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);
        }
 private object OnStructureUpgrade(BaseCombatEntity entity, BasePlayer player, BuildingGrade.Enum grade)
 {
     if (permission.UserHasPermission(player.UserIDString, BypassPerm))
     {
         return(null);
     }
     if (CFile.Hits.ContainsKey(grade) && Entities.ContainsKey(entity.net.ID) && CFile.Hits[grade] > Entities[entity.net.ID])
     {
         PrintToChat(player, Lang("NoUpgrade", player.UserIDString, grade.ToString(), CFile.Hits[grade] - Entities[entity.net.ID]));
         return(false);
     }
     return(null);
 }
예제 #5
0
 private static void SetBuildingBlockGrade(BuildingBlock buildingBlock, BuildingGrade.Enum targetGrade)
 {
     buildingBlock.SetGrade(targetGrade);
     buildingBlock.SetHealthToMax();
     buildingBlock.StartBeingRotatable();
     buildingBlock.SendNetworkUpdate();
     buildingBlock.UpdateSkin();
     buildingBlock.ResetUpkeepTime();
     buildingBlock.UpdateSurroundingEntities();
     BuildingManager.server.GetBuilding(buildingBlock.buildingID)?.Dirty();
     if (targetGrade > BuildingGrade.Enum.Twigs)
     {
         Effect.server.Run("assets/bundled/prefabs/fx/build/promote_" + targetGrade.ToString().ToLower() + ".prefab", buildingBlock, 0u, Vector3.zero, Vector3.zero);
     }
 }
예제 #6
0
        object OnStructureUpgrade(BuildingBlock block, BasePlayer player, BuildingGrade.Enum grade)
        {
            string gradestring = grade.ToString();

            switch (gradestring)
            {
            case "Wood":
            {
                if (!Convert.ToBoolean(Config["Grade", "Wood"]))
                {
                    PrintToChat(player, GetMessage("NotAllowed", player.UserIDString).Replace("{grade}", gradestring)); return(false);
                }
                break;
            }

            case "Stone":
            {
                if (!Convert.ToBoolean(Config["Grade", "Stone"]))
                {
                    PrintToChat(player, GetMessage("NotAllowed", player.UserIDString).Replace("{grade}", gradestring)); return(false);
                }
                break;
            }

            case "Metal":
            {
                if (!Convert.ToBoolean(Config["Grade", "Metal"]))
                {
                    PrintToChat(player, GetMessage("NotAllowed", player.UserIDString).Replace("{grade}", gradestring)); return(false);
                }
                break;
            }

            case "TopTier":
            {
                if (!Convert.ToBoolean(Config["Grade", "TopTier"]))
                {
                    PrintToChat(player, GetMessage("NotAllowed", player.UserIDString).Replace("{grade}", gradestring)); return(false);
                }
                break;
            }
            }
            return(null);
        }
    private void DoUpgradeToGrade(BaseEntity.RPCMessage msg)
    {
        if (!msg.player.CanInteract())
        {
            return;
        }
        BuildingGrade.Enum @enum = (BuildingGrade.Enum)msg.read.Int32();
        ConstructionGrade  grade = this.GetGrade(@enum);

        if (grade == null)
        {
            return;
        }
        if (!this.CanChangeToGrade(@enum, msg.player))
        {
            return;
        }
        if (!this.CanAffordUpgrade(@enum, msg.player))
        {
            return;
        }
        if (base.SecondsSinceAttacked < 30f)
        {
            return;
        }
        if (Interface.CallHook("OnStructureUpgrade", this, msg.player, @enum) != null)
        {
            return;
        }
        this.PayForUpgrade(grade, msg.player);
        this.SetGrade(@enum);
        this.SetHealthToMax();
        this.StartBeingRotatable();
        base.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
        this.UpdateSkin(false);
        base.ResetUpkeepTime();
        BuildingManager.Building building = BuildingManager.server.GetBuilding(this.buildingID);
        if (building != null)
        {
            building.Dirty();
        }
        Effect.server.Run(string.Concat("assets/bundled/prefabs/fx/build/promote_", @enum.ToString().ToLower(), ".prefab"), this, 0, Vector3.zero, Vector3.zero, null, false);
    }
예제 #8
0
 private void DoUpgradeToGrade(RPCMessage msg)
 {
     if (msg.player.CanInteract())
     {
         BuildingGrade.Enum @enum             = (BuildingGrade.Enum)msg.read.Int32();
         ConstructionGrade  constructionGrade = GetGrade(@enum);
         if (!(constructionGrade == null) && CanChangeToGrade(@enum, msg.player) && CanAffordUpgrade(@enum, msg.player) && Interface.CallHook("OnStructureUpgrade", this, msg.player, @enum) == null && !(base.SecondsSinceAttacked < 30f))
         {
             PayForUpgrade(constructionGrade, msg.player);
             SetGrade(@enum);
             SetHealthToMax();
             StartBeingRotatable();
             SendNetworkUpdate();
             UpdateSkin();
             ResetUpkeepTime();
             UpdateSurroundingEntities();
             BuildingManager.server.GetBuilding(buildingID)?.Dirty();
             Effect.server.Run("assets/bundled/prefabs/fx/build/promote_" + @enum.ToString().ToLower() + ".prefab", this, 0u, Vector3.zero, Vector3.zero);
         }
     }
 }
예제 #9
0
    private void DoUpgradeToGrade(BaseEntity.RPCMessage msg)
    {
        if (!msg.player.CanInteract())
        {
            return;
        }
        BuildingGrade.Enum @enum = (BuildingGrade.Enum)msg.read.Int32();
        ConstructionGrade  grade = this.GetGrade(@enum);

        if ((PrefabAttribute)grade == (PrefabAttribute)null || !this.CanChangeToGrade(@enum, msg.player) || (!this.CanAffordUpgrade(@enum, msg.player) || (double)this.SecondsSinceAttacked < 30.0) || Interface.CallHook("OnStructureUpgrade", (object)this, (object)msg.player, (object)@enum) != null)
        {
            return;
        }
        this.PayForUpgrade(grade, msg.player);
        this.SetGrade(@enum);
        this.SetHealthToMax();
        this.StartBeingRotatable();
        this.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
        this.UpdateSkin(false);
        this.ResetUpkeepTime();
        BuildingManager.server.GetBuilding(this.buildingID)?.Dirty();
        Effect.server.Run("assets/bundled/prefabs/fx/build/promote_" + @enum.ToString().ToLower() + ".prefab", (BaseEntity)this, 0U, Vector3.get_zero(), Vector3.get_zero(), (Connection)null, false);
    }
예제 #10
0
        void OnStructureUpgrade(BaseCombatEntity block, BasePlayer player, BuildingGrade.Enum grade)
        {
            if (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))
                {
                    SendReply(player, pluginPrefix + "You are now in UPGRADE mode. [" + grade.ToString() + "]");
                }
            }

            RefreshTimer(player);
        }
예제 #11
0
 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);
 }