private void PayForUpgrade(ConstructionGrade g, BasePlayer player) { List <Item> collect = new List <Item>(); foreach (ItemAmount itemAmount in g.costToBuild) { player.inventory.Take(collect, itemAmount.itemid, (int)itemAmount.amount); player.Command("note.inv " + (object)itemAmount.itemid + " " + (object)(float)((double)itemAmount.amount * -1.0), (object[])Array.Empty <object>()); } foreach (Item obj in collect) { obj.Remove(0.0f); } }
public static void On_BuildingPartGradeChange(BuildingBlock bb, BaseEntity.RPCMessage msg) { BuildingGrade.Enum bgrade = (BuildingGrade.Enum)msg.read.Int32(); BasePlayer player = msg.player; BuildingPartGradeChangeEvent bpgce = new BuildingPartGradeChangeEvent(bb, bgrade, player); OnNext("On_BuildingPartGradeChange", bpgce); ConstructionGrade cg = (ConstructionGrade)bb.CallMethod("GetGrade", bpgce.Grade); if (bpgce.DoDestroy) { bpgce.Builder.Message(bpgce.DestroyReason); UnityEngine.Object.Destroy(bb); return; } if (cg == null) { return; } if (!bpgce.HasPrivilege) { return; } if (bpgce.PayForUpgrade && !(bool)bb.CallMethod("CanAffordUpgrade", bpgce.Grade, player)) { return; } if (bb.TimeSinceAttacked() < 8f) { return; } if (bpgce.PayForUpgrade) { bb.CallMethod("PayForUpgrade", cg, player); } bb.SetGrade(bpgce.Grade); bb.SetHealthToMax(); if (bpgce.Rotatable) { bb.CallMethod("StartBeingRotatable"); } bb.SendNetworkUpdate(); bb.CallMethod("UpdateSkin", false); Effect.server.Run("assets/bundled/prefabs/fx/build/promote_" + bpgce.Grade.ToString().ToLower() + ".prefab", bb, 0u, Vector3.zero, Vector3.zero); }
public void PayForUpgrade(ConstructionGrade g, BasePlayer player) { if (Interface.CallHook("OnPayForUpgrade", player, this, g) != null) { return; } List <Item> list = new List <Item>(); foreach (ItemAmount item in g.costToBuild) { player.inventory.Take(list, item.itemid, (int)item.amount); player.Command("note.inv " + item.itemid + " " + item.amount * -1f); } foreach (Item item2 in list) { item2.Remove(); } }
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); }
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); } } }
public bool CanAffordUpgrade(BuildingBlock buildingBlock, ConstructionGrade constructionGrade, BasePlayer player, BuildingGrade.Enum grade) { object obj = Interface.CallHook("CanAffordUpgrade", player, buildingBlock, grade); if (obj is bool) { return((bool)obj); } bool flag = true; foreach (var item in constructionGrade.costToBuild) { var missingAmount = item.amount - player.inventory.GetAmount(item.itemid); if (missingAmount > 0f) { flag = false; missingDictionary[item.itemDef] += (int)missingAmount; } } return(flag); }
// Upgrading construction blocks. private object OnPayForUpgrade(BasePlayer player, BuildingBlock block, ConstructionGrade grade) { var ruleset = GetPlayerRuleset(player.UserIDString); if (ruleset == null) { return(null); } var args = new object[] { player, block, grade }; object otherPluginResult; if (PluginReturnedResult(FreeBuild, nameof(OnPayForPlacement), out otherPluginResult, args)) { return(otherPluginResult); } ruleset.TakePlayerItemList(player, grade.costToBuild); // Return non-null to force the placement, skipping vanilla charges. return(false); }
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); }
private void ChangeSkin() { if (base.IsDestroyed) { return; } ConstructionGrade constructionGrade = currentGrade; if (constructionGrade.skinObject.isValid) { ChangeSkin(constructionGrade.skinObject); return; } ConstructionGrade[] grades = blockDefinition.grades; foreach (ConstructionGrade constructionGrade2 in grades) { if (constructionGrade2.skinObject.isValid) { ChangeSkin(constructionGrade2.skinObject); return; } } Debug.LogWarning("No skins found for " + base.gameObject); }
private object OnPayForUpgrade(BasePlayer player, BuildingBlock block, ConstructionGrade gradeTarget) { var @event = new RustPlayerUpgradingBuildingBlockEvent(new RustPlayer(player), new RustBuildingBlock(block), gradeTarget); return(EmitCancellableReturnsObject(@event)); }