示例#1
0
 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;
                     }
                 }
             }
         }
     }
 }
示例#2
0
        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();
                }
            }
        }