public void SetUpgrade(Upgrade upgrade, bool createNetworkEvent = false) { Upgrade existingUpgrade = GetUpgrade(upgrade.Identifier); if (existingUpgrade != null) { existingUpgrade.Level = upgrade.Level; existingUpgrade.ApplyUpgrade(); upgrade.Dispose(); } else { AddUpgrade(upgrade, createNetworkEvent); } DebugConsole.Log($"Set (ID: {ID} {prefab.Name})'s \"{upgrade.Prefab.Name}\" upgrade to level {upgrade.Level}"); }
/// <summary> /// Adds a new upgrade to the item /// </summary> public virtual bool AddUpgrade(Upgrade upgrade, bool createNetworkEvent = false) { if (this is Item item && !upgrade.Prefab.UpgradeCategories.Any(category => category.CanBeApplied(item, upgrade.Prefab))) { return(false); } if (disallowedUpgrades.Contains(upgrade.Identifier)) { return(false); } Upgrade existingUpgrade = GetUpgrade(upgrade.Identifier); if (existingUpgrade != null) { existingUpgrade.Level += upgrade.Level; existingUpgrade.ApplyUpgrade(); upgrade.Dispose(); } else { upgrade.ApplyUpgrade(); Upgrades.Add(upgrade); } // not used anymore #if SERVER // if (createNetworkEvent) // { // if (this is IServerSerializable serializable) // { // GameMain.Server.CreateEntityEvent(serializable, new object[] { NetEntityEvent.Type.Upgrade, upgrade }); // } // } #endif return(true); }