private static void HealthComponent_TakeDamage(On.RoR2.HealthComponent.orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo) { orig(self, damageInfo); if (NetworkServer.active && RunArtifactManager.instance.IsArtifactEnabled(ArtifactOfGenetics.artifactDef)) { if (damageInfo.attacker is GameObject attackerObject) { if (attackerObject != null && attackerObject.GetComponent <CharacterBody>() is CharacterBody attackerBody) { if (attackerBody != null && attackerBody.inventory?.GetItemCount(GeneTokens.blockerDef) == 0) { MonsterGeneBehaviour attackerGene = livingGenes.Find(x => x.characterBody == attackerBody); if (attackerGene != null) { attackerGene.damageDealt += damageInfo.damage; } } } } else if (damageInfo.inflictor is GameObject inflictorObject) { if (inflictorObject != null && inflictorObject.GetComponent <CharacterBody>() is CharacterBody inflictorBody) { if (inflictorBody != null && inflictorBody.inventory?.GetItemCount(GeneTokens.blockerDef) == 0) { MonsterGeneBehaviour inflictorGene = livingGenes.Find(x => x.characterBody == inflictorBody); if (inflictorGene != null) { inflictorGene.damageDealt += damageInfo.damage; } } } } } }
private static void CharacterBody_Start(On.RoR2.CharacterBody.orig_Start orig, CharacterBody self) { orig(self); if (NetworkServer.active && RunArtifactManager.instance.IsArtifactEnabled(ArtifactOfGenetics.artifactDef)) { if (instance == null) //Emergency Catch for Bulwark Edge Case { Run.instance.gameObject.AddComponent <GeneEngineDriver>(); GeneticsArtifactPlugin.geneticLogSource.LogWarning("GeneEngineDriver Emergency Activation! Wasn't ready for a body yet."); } if (self.teamComponent.teamIndex == TeamIndex.Monster && self.inventory) { if (!masterGenes.Exists(x => x.bodyIndex == self.bodyIndex)) { MasterGeneBehaviour newMaster = new MasterGeneBehaviour(); newMaster.Init(); newMaster.bodyIndex = self.bodyIndex; masterGenes.Add(newMaster); GeneticsArtifactPlugin.geneticLogSource.LogInfo("Generated a Master Template for: " + BodyCatalog.GetBodyName(self.bodyIndex)); } MonsterGeneBehaviour geneBehaviour = self.gameObject.AddComponent <MonsterGeneBehaviour>(); geneBehaviour.MutateFromMaster(); } } }