private void UpdateBlueprint(ItemBlueprint bp, JSONObject o) { bp.rarity = GetRarity(o); if (!_craftingController) { bp.time = o.GetFloat("time", 0); } bp.amountToCreate = o.GetInt("amountToCreate", 1); //bp.UnlockPrice = o.GetInt("UnlockPrice", 0); //bp.UnlockLevel = o.GetInt("UnlockLevel", 10); bp.blueprintStackSize = o.GetInt("blueprintStackSize"); //bp.userCraftable = o.GetBoolean("userCraftable", true); bp.isResearchable = o.GetBoolean("isResearchable", true); bp.NeedsSteamItem = o.GetBoolean("NeedsSteamItem", false); var ingredients = o.GetArray("ingredients"); bp.ingredients.Clear(); foreach (var ingredient in ingredients) { var itemDef = GetItem(ingredient.Obj, "shortname"); if (itemDef == null) { continue; } bp.ingredients.Add(new ItemAmount(itemDef, ingredient.Obj.GetFloat("amount", 0))); } }
private static void UpdateBlueprint(ItemBlueprint bp, JSONObject o) { bp.rarity = (Rarity)Enum.Parse(typeof(Rarity), o.GetString("rarity", "None")); bp.time = o.GetInt("time", 0); bp.amountToCreate = o.GetInt("amountToCreate", 1); bp.userCraftable = o.GetBoolean("userCraftable", true); bp.defaultBlueprint = o.GetBoolean("defaultBlueprint", false); var ingredients = o.GetArray("ingredients"); var manager = SingletonComponent <ItemManager> .Instance; bp.ingredients.Clear(); foreach (var ingredient in ingredients) { var itemid = ingredient.Obj.GetInt("itemid", 0); var definition = manager.itemList.Find(x => x.itemid == itemid); bp.ingredients.Add(new ItemAmount(definition, ingredient.Obj.GetFloat("amount", 0))); } }
/*private void UpdateConstructions() * { * var constructions = Config["Constructions"] as Dictionary<string, object>; * if (constructions == null) * { * LocalPuts("No constructions in config"); * return; * } * var componentList = (List<Construction.Common>) ComponentList.GetValue(null); * var protectionProperties = new HashSet<ProtectionProperties>(); * var manager = SingletonComponent<ItemManager>.Instance; * foreach (var common in componentList) * { * var construction = ObjectToJsonObject(constructions[common.name]); * var grades = construction.Obj.GetObject("grades"); * for (var g = 0; g < common.grades.Length; g++) * { * var gradeType = (BuildingGrade.Enum) g; * if (!grades.ContainsKey(gradeType.ToString())) * { * common.grades[g] = null; * continue; * } * if (common.grades[g] == null) common.grades[g] = new Construction.Grade(); * var grade = common.grades[g]; * var newGrade = grades.GetObject(gradeType.ToString()); * UpdateConstructionHealth(grade, newGrade.GetFloat("maxHealth", 0)); * grade.costToBuild.Clear(); * var costToBuild = newGrade.GetArray("costToBuild"); * foreach (var cost in costToBuild) * { * var itemid = cost.Obj.GetInt("itemid", 0); * var definition = manager.itemList.Find(x => x.itemid == itemid); * grade.costToBuild.Add(new ItemAmount(definition, cost.Obj.GetFloat("amount", 0))); * } * if (grade.damageProtecton != null) * { * protectionProperties.Add(grade.damageProtecton); * } * } * } * var protections = Config["DamageProtections"] as Dictionary<string, object>; * if (protections == null) * return; * foreach (var protectionProperty in protectionProperties) * { * protectionProperty.Clear(); * var damageProtection = protections[protectionProperty.name] as Dictionary<string, object>; * if (damageProtection == null) continue; * foreach (var o in damageProtection) * { * protectionProperty.Add((DamageType) Enum.Parse(typeof (DamageType), o.Key), (float)Convert.ToDouble(o.Value)); * } * } * } * * private void UpdateConstructionHealth(Construction.Grade grade, float newHealth) * { * if (grade.maxHealth == newHealth) return; * grade.maxHealth = newHealth; * var bb = UnityEngine.Object.FindObjectsOfType<BuildingBlock>().Where(b => b.currentGrade == grade); * foreach (var buildingBlock in bb) * { * buildingBlock.SetHealthToMax(); * } * }*/ private static void UpdateItem(ItemDefinition definition, JSONObject item) { definition.shortname = item.GetString("shortname", "unnamed"); definition.itemid = item.GetInt("itemid", 0); definition.stackable = item.GetInt("stackable", 1); definition.category = (ItemCategory)Enum.Parse(typeof(ItemCategory), item.GetString("category", "Weapon")); var condition = item.GetObject("condition"); definition.condition.enabled = condition.GetBoolean("enabled", false); definition.condition.max = condition.GetInt("max", 0); definition.condition.repairable = condition.GetBoolean("repairable", false); definition.rarity = (Rarity)Enum.Parse(typeof(Rarity), item.GetString("rarity", "None")); var modules = item.GetArray("modules").Select(m => m.Obj); var cook = 0; foreach (var mod in modules) { var typeName = mod.GetString("type", ""); if (typeName.Equals("ItemModConsume")) { var itemMod = definition.GetComponent <ItemModConsume>(); var itemEffects = itemMod.GetComponent <ItemModConsumable>().effects; var effects = mod.GetArray("effects"); itemEffects.Clear(); foreach (var effect in effects) { itemEffects.Add(new ItemModConsumable.ConsumableEffect { type = (MetabolismAttribute.Type)Enum.Parse(typeof(MetabolismAttribute.Type), effect.Obj.GetString("type", "")), amount = effect.Obj.GetFloat("amount", 0), time = effect.Obj.GetFloat("time", 0) }); } } else if (typeName.Equals("ItemModContainer")) { var itemMod = definition.GetComponent <ItemModContainer>(); itemMod.capacity = mod.GetInt("capacity", 6); itemMod.openInDeployed = mod.GetBoolean("openInDeployed", true); itemMod.openInInventory = mod.GetBoolean("openInInventory", true); itemMod.defaultContents.Clear(); var defaultContents = mod.GetArray("defaultContents"); var manager = SingletonComponent <ItemManager> .Instance; foreach (var content in defaultContents) { var itemid = content.Obj.GetInt("itemid", 0); var def = manager.itemList.Find(x => x.itemid == itemid); itemMod.defaultContents.Add(new ItemAmount(def, content.Obj.GetFloat("amount", 0))); } } else if (typeName.Equals("ItemModBurnable")) { //definition.gameObject.AddComponent<ItemModBurnable>(); var itemMod = definition.GetComponent <ItemModBurnable>(); itemMod.fuelAmount = mod.GetFloat("fuelAmount", 10f); itemMod.byproductAmount = mod.GetInt("byproductAmount", 1); itemMod.byproductChance = mod.GetFloat("byproductChance", 0.5f); var manager = SingletonComponent <ItemManager> .Instance; var itemid = mod.GetObject("byproductItem").GetInt("itemid", 0); itemMod.byproductItem = manager.itemList.Find(x => x.itemid == itemid); } else if (typeName.Equals("ItemModCookable")) { var itemMods = definition.GetComponents <ItemModCookable>(); var itemMod = itemMods[cook++]; itemMod.cookTime = mod.GetFloat("cookTime", 30f); itemMod.amountOfBecome = mod.GetInt("amountOfBecome", 1); itemMod.lowTemp = mod.GetInt("lowTemp", 0); itemMod.highTemp = mod.GetInt("highTemp", 0); itemMod.setCookingFlag = mod.GetBoolean("setCookingFlag", false); var become = mod.GetObject("becomeOnCooked"); if (become == null) { itemMod.becomeOnCooked = null; continue; } var manager = SingletonComponent <ItemManager> .Instance; var itemid = become.GetInt("itemid", 0); itemMod.becomeOnCooked = manager.itemList.Find(x => x.itemid == itemid); } else if (typeName.Equals("ItemModSwap")) { var itemMod = definition.GetComponent <ItemModSwap>(); itemMod.sendPlayerDropNotification = mod.GetBoolean("sendPlayerDropNotification", false); itemMod.sendPlayerPickupNotification = mod.GetBoolean("sendPlayerPickupNotification", false); var items = new List <ItemAmount>(); var becomeItems = mod.GetArray("becomeItem"); var manager = SingletonComponent <ItemManager> .Instance; foreach (var content in becomeItems) { var itemid = content.Obj.GetInt("itemid", 0); var def = manager.itemList.Find(x => x.itemid == itemid); items.Add(new ItemAmount(def, content.Obj.GetFloat("amount", 0))); } itemMod.becomeItem = items.ToArray(); } else if (typeName.Equals("ItemModProjectile")) { var itemMod = definition.GetComponent <ItemModProjectile>(); var projectile = itemMod.projectileObject.targetObject.GetComponent <Projectile>(); projectile.drag = mod.GetFloat("drag", 0); projectile.thickness = mod.GetFloat("thickness", 0); projectile.remainInWorld = mod.GetBoolean("remainInWorld", false); projectile.stickProbability = mod.GetFloat("stickProbability", 0); projectile.breakProbability = mod.GetFloat("breakProbability", 0); projectile.ricochetChance = mod.GetFloat("ricochetChance", 0); projectile.fullDamageVelocity = mod.GetFloat("fullDamageVelocity", 200); projectile.damageTypes.Clear(); var damageTypes = mod.GetArray("damageTypes"); foreach (var damageType in damageTypes) { projectile.damageTypes.Add(new DamageTypeEntry { amount = damageType.Obj.GetFloat("amount", 0), type = (DamageType)Enum.Parse(typeof(DamageType), damageType.Obj.GetString("type", "")) }); } } } }
private Rarity GetRarity(JSONObject item) { var rarity = "None"; if (item.ContainsKey("rarity")) { rarity = item["rarity"].Type == JSONValueType.String ? item.GetString("rarity", "None") : item.GetInt("rarity", 0).ToString(); } return((Rarity)Enum.Parse(typeof(Rarity), rarity)); }
private void UpdateItem(ItemDefinition definition, JSONObject item) { definition.shortname = item.GetString("shortname", "unnamed"); if (!_stackSizes) { definition.stackable = item.GetInt("stackable", 1); } definition.maxDraggable = item.GetInt("maxDraggable", 0); definition.category = (ItemCategory)Enum.Parse(typeof(ItemCategory), item.GetString("category", "Weapon")); var condition = item.GetObject("condition"); definition.condition.enabled = condition.GetBoolean("enabled", false); definition.condition.max = condition.GetFloat("max", 0); definition.condition.repairable = condition.GetBoolean("repairable", false); definition.rarity = GetRarity(item); definition.Parent = GetItem(item, "Parent"); var modules = item.GetArray("modules").Select(m => m.Obj); foreach (var mod in modules) { var typeName = mod.GetString("type", ""); //Puts("Item: {0} - {1}", definition.shortname, typeName); if (typeName.Equals("ItemModConsume")) { var itemMod = definition.GetComponent <ItemModConsume>(); var itemEffects = itemMod.GetComponent <ItemModConsumable>().effects; var effects = mod.GetArray("effects"); itemEffects.Clear(); foreach (var effect in effects) { itemEffects.Add(new ItemModConsumable.ConsumableEffect { type = (MetabolismAttribute.Type)Enum.Parse(typeof(MetabolismAttribute.Type), effect.Obj.GetString("type", "")), amount = effect.Obj.GetFloat("amount", 0), time = effect.Obj.GetFloat("time", 0) }); } } else if (typeName.Equals("ItemModContainer")) { var itemMod = definition.GetComponent <ItemModContainer>(); itemMod.capacity = mod.GetInt("capacity", 6); itemMod.maxStackSize = mod.GetInt("maxStackSize", 0); itemMod.openInDeployed = mod.GetBoolean("openInDeployed", true); itemMod.openInInventory = mod.GetBoolean("openInInventory", true); itemMod.defaultContents.Clear(); var defaultContents = mod.GetArray("defaultContents"); foreach (var content in defaultContents) { var itemDef = GetItem(content.Obj, "shortname"); if (itemDef == null) { continue; } itemMod.defaultContents.Add(new ItemAmount(itemDef, content.Obj.GetFloat("amount", 0))); } itemMod.onlyAllowedItemType = mod.GetValue("onlyAllowedItemType").Type == JSONValueType.Null ? null : GetItem(mod.GetString("onlyAllowedItemType", "unnamed")); } else if (typeName.Equals("ItemModBurnable")) { var itemMod = definition.GetComponent <ItemModBurnable>() ?? definition.gameObject.AddComponent <ItemModBurnable>(); itemMod.fuelAmount = mod.GetFloat("fuelAmount", 10f); itemMod.byproductAmount = mod.GetInt("byproductAmount", 1); itemMod.byproductChance = mod.GetFloat("byproductChance", 0.5f); itemMod.byproductItem = GetItem(mod, "byproductItem"); } else if (typeName.Equals("ItemModCookable")) { var itemMod = definition.GetComponent <ItemModCookable>() ?? definition.gameObject.AddComponent <ItemModCookable>(); itemMod.cookTime = mod.GetFloat("cookTime", 30f); itemMod.amountOfBecome = mod.GetInt("amountOfBecome", 1); itemMod.lowTemp = mod.GetInt("lowTemp", 0); itemMod.highTemp = mod.GetInt("highTemp", 0); itemMod.setCookingFlag = mod.GetBoolean("setCookingFlag", false); itemMod.becomeOnCooked = GetItem(mod, "becomeOnCooked"); } else if (typeName.Equals("ItemModReveal")) { var itemMod = definition.GetComponent <ItemModReveal>(); itemMod.revealedItemAmount = mod.GetInt("revealedItemAmount", 1); itemMod.numForReveal = mod.GetInt("numForReveal", 1); itemMod.revealedItemOverride = GetItem(mod, "revealedItemOverride"); } else if (typeName.Equals("ItemModUpgrade")) { var itemMod = definition.GetComponent <ItemModUpgrade>(); itemMod.numForUpgrade = mod.GetInt("numForUpgrade", 10); itemMod.upgradeSuccessChance = mod.GetFloat("upgradeSuccessChance", 1f); itemMod.numToLoseOnFail = mod.GetInt("numToLoseOnFail", 2); itemMod.numUpgradedItem = mod.GetInt("numUpgradedItem", 1); itemMod.upgradedItem = GetItem(mod, "upgradedItem"); } else if (typeName.Equals("ItemModRecycleInto")) { var itemMod = definition.GetComponent <ItemModRecycleInto>(); itemMod.numRecycledItemMin = mod.GetInt("numRecycledItemMin", 1); itemMod.numRecycledItemMax = mod.GetInt("numRecycledItemMax", 1); itemMod.recycleIntoItem = GetItem(mod, "recycleIntoItem"); } else if (typeName.Equals("ItemModXPWhenUsed")) { var itemMod = definition.GetComponent <ItemModXPWhenUsed>(); itemMod.xpPerUnit = mod.GetFloat("xpPerUnit", 0); itemMod.unitSize = mod.GetInt("unitSize", 1); } else if (typeName.Equals("ItemModSwap")) { var itemMod = definition.GetComponent <ItemModSwap>(); itemMod.sendPlayerDropNotification = mod.GetBoolean("sendPlayerDropNotification", false); itemMod.sendPlayerPickupNotification = mod.GetBoolean("sendPlayerPickupNotification", false); var items = new List <ItemAmount>(); var becomeItems = mod.GetArray("becomeItem"); foreach (var content in becomeItems) { var itemDef = GetItem(content.Obj, "shortname"); if (itemDef == null) { continue; } items.Add(new ItemAmount(itemDef, content.Obj.GetFloat("amount", 0))); } itemMod.becomeItem = items.ToArray(); } else if (typeName.Equals("ItemModProjectile") || typeName.Equals("ItemModProjectileSpawn")) { var itemMod = definition.GetComponent <ItemModProjectile>(); var projectile = itemMod.projectileObject.Get().GetComponent <Projectile>(); projectile.drag = mod.GetFloat("drag", 0); projectile.thickness = mod.GetFloat("thickness", 0); projectile.remainInWorld = mod.GetBoolean("remainInWorld", false); projectile.breakProbability = mod.GetFloat("breakProbability", 0); projectile.stickProbability = mod.GetFloat("stickProbability", 1f); projectile.ricochetChance = mod.GetFloat("ricochetChance", 0); projectile.penetrationPower = mod.GetFloat("penetrationPower", 1f); UpdateDamageTypes(mod.GetArray("damageTypes"), projectile.damageTypes); var spawn = itemMod as ItemModProjectileSpawn; if (spawn != null) { spawn.createOnImpactChance = mod.GetFloat("createOnImpactChance", 0); spawn.spreadAngle = mod.GetFloat("spreadAngle", 30); } var projMods = mod.GetArray("mods"); var i = 0; foreach (var projMod in projMods) { var curMod = (ItemModProjectileRadialDamage)itemMod.mods[i++]; curMod.radius = projMod.Obj.GetFloat("radius", 0); curMod.damage.amount = projMod.Obj.GetObject("damage").GetFloat("amount", 0); curMod.damage.type = (DamageType)Enum.Parse(typeof(DamageType), projMod.Obj.GetObject("damage").GetString("type", "")); } } else if (typeName.EndsWith("TimedExplosive") || typeName.EndsWith("FlameExplosive") || typeName.EndsWith("SupplySignal") || typeName.EndsWith("SurveyCharge")) { TimedExplosive timedExplosive; if (typeName.StartsWith("ItemModProjectile")) { var itemMod = definition.GetComponent <ItemModProjectile>(); timedExplosive = itemMod.projectileObject.Get().GetComponent <TimedExplosive>(); } else if (typeName.StartsWith("ItemModEntity")) { var itemMod = definition.GetComponent <ItemModEntity>(); timedExplosive = itemMod.entityPrefab.Get().GetComponent <ThrownWeapon>().prefabToThrow.Get().GetComponent <TimedExplosive>(); } else { continue; } var flameExplosive = timedExplosive as FlameExplosive; if (flameExplosive != null) { flameExplosive.maxVelocity = mod.GetFloat("maxVelocity", 5); flameExplosive.minVelocity = mod.GetFloat("minVelocity", 2); flameExplosive.numToCreate = mod.GetFloat("numToCreate", 10); flameExplosive.spreadAngle = mod.GetFloat("spreadAngle", 90); } else { var dudTimedExplosive = timedExplosive as DudTimedExplosive; if (dudTimedExplosive != null) { dudTimedExplosive.dudChance = mod.GetFloat("dudChance", 0.3f); } } timedExplosive.canStick = mod.GetBoolean("canStick", false); timedExplosive.minExplosionRadius = mod.GetFloat("minExplosionRadius", 0); timedExplosive.explosionRadius = mod.GetFloat("explosionRadius", 10); timedExplosive.timerAmountMax = mod.GetFloat("timerAmountMax", 20); timedExplosive.timerAmountMin = mod.GetFloat("timerAmountMin", 10); UpdateDamageTypes(mod.GetArray("damageTypes"), timedExplosive.damageTypes); } else if (typeName.Equals("ItemModProjectileServerProjectile")) { var itemMod = definition.GetComponent <ItemModProjectile>(); var projectile = itemMod.projectileObject.Get().GetComponent <ServerProjectile>(); projectile.drag = mod.GetFloat("drag", 0); projectile.gravityModifier = mod.GetFloat("gravityModifier", 0); projectile.speed = mod.GetFloat("speed", 0); } else if (typeName.Equals("ItemModEntityBaseMelee")) { var itemMod = definition.GetComponent <ItemModEntity>(); var baseMelee = itemMod.entityPrefab.Get().GetComponent <BaseMelee>(); baseMelee.attackRadius = mod.GetFloat("attackRadius", 0.3f); baseMelee.isAutomatic = mod.GetBoolean("isAutomatic", true); baseMelee.maxDistance = mod.GetFloat("maxDistance", 1.5f); baseMelee.repeatDelay = mod.GetFloat("repeatDelay", 1.0f); var gathering = mod.GetObject("gathering"); UpdateGatherPropertyEntry(baseMelee.gathering.Ore, gathering.GetObject("Ore")); UpdateGatherPropertyEntry(baseMelee.gathering.Flesh, gathering.GetObject("Flesh")); UpdateGatherPropertyEntry(baseMelee.gathering.Tree, gathering.GetObject("Tree")); UpdateDamageTypes(mod.GetArray("damageTypes"), baseMelee.damageTypes); } else if (typeName.Equals("ItemModEntityBaseProjectile")) { var itemMod = definition.GetComponent <ItemModEntity>(); var baseProjectile = itemMod.entityPrefab.Get().GetComponent <BaseProjectile>(); baseProjectile.primaryMagazine.contents = mod.GetInt("contents", 4); baseProjectile.primaryMagazine.ammoType = GetItem(mod, "ammoType"); baseProjectile.primaryMagazine.definition.builtInSize = mod.GetInt("builtInSize", 30); //baseProjectile.primaryMagazine.definition.ammoTypes = FromJsonString<AmmoTypes>(mod.GetString("ammoTypes")); } else if (typeName.Equals("ItemModWearable")) { var itemMod = definition.GetComponent <ItemModWearable>(); itemMod.targetWearable.occupationOver = GetOccupationSlot(mod.GetObject("targetWearable").GetValue("occupationOver")); itemMod.targetWearable.occupationUnder = GetOccupationSlot(mod.GetObject("targetWearable").GetValue("occupationUnder")); if (itemMod?.protectionProperties != null) { var protectionObj = mod.GetObject("protection"); var entry = itemMod.protectionProperties; entry.density = protectionObj.GetFloat("density", 1f); var amounts = protectionObj.GetObject("amounts"); foreach (var amount in amounts) { entry.amounts[(int)Enum.Parse(typeof(DamageType), amount.Key)] = (float)amount.Value.Number; } } if (itemMod?.armorProperties != null) { itemMod.armorProperties.area = (HitArea)Enum.Parse(typeof(HitAreaUnity), mod.GetString("armor"), true); } } else if (typeName.Equals("ItemModAlterCondition")) { var itemMod = definition.GetComponentsInChildren <ItemModAlterCondition>(true); itemMod[0].conditionChange = mod.GetFloat("conditionChange", 0); } else if (typeName.Equals("ItemModConditionHasFlag") || typeName.Equals("ItemModCycle") || typeName.Equals("ItemModConditionContainerFlag") || typeName.Equals("ItemModSwitchFlag") || typeName.Equals("ItemModUseContent") || typeName.Equals("ItemModConditionHasContents")) { continue; } else { Puts("Unknown type: {0}", typeName); } } }