public void SetConstantStat(gamedataStatType stat, float value, GameSavedStatsData statsData) { var foundStat = false; foreach (Handle <GameStatModifierData> modifier in statsData.StatModifiers) { if (modifier.Value.GetType() == typeof(GameConstantStatModifierData)) { if (((GameConstantStatModifierData)modifier.Value).StatType == stat) { ((GameConstantStatModifierData)modifier.Value).Value = value; foundStat = true; } } } if (!foundStat) { var newModifierData = new GameConstantStatModifierData(); newModifierData.ModifierType = gameStatModifierType.Additive; newModifierData.StatType = stat; newModifierData.Value = value; this.AddStat(typeof(GameConstantStatModifierData), statsData, newModifierData); } }
public void SetConstantStat(gamedataStatType stat, float value, GameSavedStatsData statsData, gameStatModifierType mod = gameStatModifierType.Additive) { var foundStat = false; foreach (Handle <GameStatModifierData> modifier in statsData.StatModifiers) { if (modifier.Value is GameConstantStatModifierData constantModifier) { if (constantModifier.StatType == stat && constantModifier.ModifierType == mod) { constantModifier.Value = value; foundStat = true; } } } if (!foundStat) { var newModifierData = new GameConstantStatModifierData { ModifierType = mod, StatType = stat, Value = value }; this.AddStat(typeof(GameConstantStatModifierData), statsData, newModifierData); } }
public uint AddStat(Type statType, GameSavedStatsData statsData, GameStatModifierData modifierData = null) { var newModifierData = Activator.CreateInstance(statType); if (statType == typeof(GameCurveStatModifierData)) { ((GameCurveStatModifierData)newModifierData).ColumnName = "<null>"; ((GameCurveStatModifierData)newModifierData).CurveName = "<null>"; } if (modifierData != null) { newModifierData = modifierData; } var newModifier = this.GetStatsContainer().CreateHandle <GameStatModifierData>((GameStatModifierData)newModifierData); statsData.StatModifiers = statsData.StatModifiers.Append(newModifier).ToArray(); return(newModifier.Id); }
public GameSavedStatsData CreateStatData(ItemData item, Random rand) { var randBytes = new byte[4]; rand.NextBytes(randBytes); var newSeed = BitConverter.ToUInt32(randBytes); while (this.GetStatsMap().Values.Where(x => x.Seed == newSeed).FirstOrDefault() != null) { rand.NextBytes(randBytes); newSeed = BitConverter.ToUInt32(randBytes); } if (item.Data.GetType() != typeof(ItemData.SimpleItemData)) { item.Header.Seed = newSeed; } else { newSeed = 2; } this.GetStatsMap().Keys = this.GetStatsMap().Keys.Append(new GameStatsObjectID { IdType = gameStatIDType.ItemID, EntityHash = GetItemIdHash(item.ItemTdbId.Raw64, newSeed, 0) }).ToArray(); var statsEntry = new GameSavedStatsData { RecordID = item.ItemTdbId, Seed = newSeed, StatModifiers = new Handle <GameStatModifierData> [0] }; this.GetStatsMap().Values = this.GetStatsMap().Values.Append(statsEntry).ToArray(); return(statsEntry); }
public void RemoveStat(Handle <GameStatModifierData> statsHandle, GameSavedStatsData statsData) { var modifiersList = statsData.StatModifiers.ToList(); modifiersList.Remove(statsHandle); statsData.StatModifiers = modifiersList.ToArray(); this.GetStatsContainer().RemoveHandle(statsHandle.Id); foreach (GameSavedStatsData value in this.GetStatsMap().Values) { if (value.StatModifiers != null) { foreach (Handle <GameStatModifierData> modifierData in value.StatModifiers) { if (modifierData.Id > statsHandle.Id) { modifierData.Id = (modifierData.Id - 1); } } } } }