[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); }