Пример #1
0
 internal StatisticEffectData CreateStatisticData(StatCollection.StatOperation op, T value)
 {
     return(new()
     {
         statName = Key,
         operation = op,
         modValue = value.ToString(),
         modType = value.GetType().ToString()
     });
 }
Пример #2
0
        // Rebuilt from StatTooltipData.GetEffectMod() to be used in the prefix patch of StatTooltipData.SetDurabilityData()
        public static float GetEffectMod(EffectData effectData, string statName, StatisticEffectData.TargetCollection target, StatCollection.StatOperation operation, WeaponSubType subTarget = WeaponSubType.NotSet)
        {
            StatisticEffectData statisticData = effectData.statisticData;

            if (statisticData != null && statisticData.statName == statName && statisticData.targetCollection == target && statisticData.operation == operation && statisticData.targetWeaponSubType == subTarget)
            {
                return(float.Parse(statisticData.modValue, CultureInfo.InvariantCulture));
            }
            return(0f);
        }
        public static void Prefix(StatCollection __instance, string statName, StatCollection.StatOperation op, Variant variant)
        {
            try {
                Dictionary <string, Statistic> stats = Traverse.Create(__instance).Field <Dictionary <string, Statistic> >("stats").Value;
                if (stats.ContainsKey(statName))
                {
                    return;
                }
                Log.Debug?.TWL(0, "StatCollection.ModifyStatistic " + statName + " is absent. Adding");
                switch (op)
                {
                case StatCollection.StatOperation.Set: {
                    if (variant.CheckType(Variant.boolType))
                    {
                        __instance.AddStatistic <bool>(statName, false);
                    }
                    else
                    if (variant.CheckType(Variant.intType))
                    {
                        __instance.AddStatistic <int>(statName, 0);
                    }
                    else
                    if (variant.CheckType(Variant.floatType))
                    {
                        __instance.AddStatistic <float>(statName, 0.0f);
                    }
                    else
                    if (variant.CheckType(Variant.stringType))
                    {
                        __instance.AddStatistic <string>(statName, string.Empty);
                    }
                }
                break;

                case StatCollection.StatOperation.Int_Add:
                case StatCollection.StatOperation.Int_Subtract:
                case StatCollection.StatOperation.Int_Multiply:
                case StatCollection.StatOperation.Int_Divide:
                case StatCollection.StatOperation.Int_Divide_Denom:
                case StatCollection.StatOperation.Int_Mod:
                case StatCollection.StatOperation.Int_Multiply_Float:
                case StatCollection.StatOperation.Int_Divide_Float:
                case StatCollection.StatOperation.Int_Divide_Denom_Float:
                case StatCollection.StatOperation.Bitflag_SetBit:
                case StatCollection.StatOperation.Bitflag_FlipBit:
                case StatCollection.StatOperation.Bitflag_Combine: {
                    __instance.AddStatistic <int>(statName, 0);
                }; break;

                case StatCollection.StatOperation.Float_Add:
                case StatCollection.StatOperation.Float_Subtract:
                case StatCollection.StatOperation.Float_Multiply:
                case StatCollection.StatOperation.Float_Divide:
                case StatCollection.StatOperation.Float_Divide_Denom:
                case StatCollection.StatOperation.Float_Multiply_Int:
                case StatCollection.StatOperation.Float_Divide_Int:
                case StatCollection.StatOperation.Float_Divide_Denom_Int: {
                    __instance.AddStatistic <float>(statName, 0.0f);
                }; break;

                case StatCollection.StatOperation.String_Append:
                case StatCollection.StatOperation.String_Prepend: {
                    __instance.AddStatistic <string>(statName, string.Empty);
                }; break;
                }
            } catch (Exception e) {
                Log.Error?.TWL(0, e.ToString(), true);
            }
        }