Exemple #1
0
    [HarmonyPriority(Priority.Last)] // Let other prefixes apply their changes, so we can properly pick up the final result.
    private static void RecordLastHit(Character __instance, HitData hit)
    {
        try
        {
#if DEBUG
            Log.LogTrace("Applying damage.");
#endif

            var zdo = ZdoCache.GetZDO(__instance.gameObject);

            if (zdo is null)
            {
#if DEBUG
                Log.LogTrace($"[{__instance.name}] Skipping record of last hit.");
#endif
                return;
            }

#if DEBUG
            Log.LogTrace($"[{__instance.name}] Recording hit.");
#endif

            DamageRecords.RecordLastHit.SetLastHit(__instance, hit);
            DamageRecords.RecordRecentHits.SetRecentHit(__instance, hit);
            StatusRecords.RecordLastStatus.SetLastStatus(__instance);
        }
        catch (Exception e)
        {
            Log.LogError("Error during attempt at recording last hit", e);
        }
    }
        public bool ShouldFilter(CharacterDrop.Drop drop, DropExtended extended, CharacterDrop characterDrop)
        {
            if (!extended.Config.Subsections.TryGetValue(CharacterDropModConfigSpawnThat.ModName, out Config modConfig))
            {
                return(false);
            }

            var config = modConfig as CharacterDropModConfigSpawnThat;

            if (config is null || string.IsNullOrWhiteSpace(config.ConditionTemplateId.Value))
            {
                return(false);
            }

            var character = CharacterCache.GetCharacter(characterDrop);

            if (!character || character is null)
            {
                return(false);
            }

            var zdo = ZdoCache.GetZDO(character.gameObject);

            if (zdo is null)
            {
                return(false);
            }

            var templateId = zdo.GetString(SpawnModifierSetTemplateId.ZdoFeature, null);

            var configTemplateIds = config.ConditionTemplateId.Value.SplitByComma();

            if (!configTemplateIds.Any(x => x == templateId))
            {
                Log.LogTrace($"{nameof(config.ConditionTemplateId)}: Disabling drop {drop.m_prefab.name} due to not having required spawn template id {config.ConditionTemplateId.Value}.");
                return(true);
            }

            return(false);
        }