public FireCharges(Character caster) : base(caster: caster, baseCooldown: 10, baseDamage: 3, animationKey: "skill_3", triggersGCD: true, target: "player", GCDRespect: true, delay: .5f) { boss = (NecromancerBoss)caster; name = "Fire Charges"; }
public ShadowBolt(Character caster) : base(caster, baseCooldown: 4, baseDamage: 4, animationKey: "skill_2", triggersGCD: true, target: "player", GCDRespect: true, delay: 2f) { boss = (NecromancerBoss)caster; name = "Shadowbolt"; }
public SummonCrystal(Character caster) : base(caster, 30, "skill_3") { stage = gameController.stage; boss = (NecromancerBoss)caster; name = "Summon Crystal"; }
public StoreCharge(Character caster, int chargesPerCast = 1) : base(caster, baseCooldown: 6f, animationKey: "skill_3") { this.chargesPerCast = chargesPerCast; boss = (NecromancerBoss)caster; distanceFromCenter = .5f + distanceGrowth * boss.maxCharges; name = "Store Charge"; }
IEnumerator NecromancerCastArrowsState_CastArrows(On.NecromancerCastArrowsState.orig_CastArrows orig, NecromancerCastArrowsState self) { DynData <NecromancerCastArrowsState> selfData = new DynData <NecromancerCastArrowsState>(self); NecromancerBoss boss = selfData.Get <NecromancerBoss>("boss"); try { SkeloutonSpawner spawner = Resources.FindObjectsOfTypeAll <SkeloutonSpawner>()[0]; for (int i = 0; i < 5; i++) { Vector3 spawnPos = Vector3.Lerp(boss.castingPosLeft.position, boss.castingPosRight.position, 0.25f * i); if (Vector3.Distance(spawnPos, Manager <PlayerManager> .Instance.Player.transform.position) > 5) { spawner.Spawn(spawnPos); } } } catch (Exception e) { Console.WriteLine("Exception while spawning skeloutons"); CourierLogger.LogDetailed(e, "HarderBosses"); } for (int wavesDone = 0; wavesDone < self.waveCount; wavesDone++) { List <Transform> arrowPattern = (List <Transform>)CastArrowsStateGetRandomArrowPatternInfo.Invoke(self, new object[] { wavesDone }); int numProjectiles = arrowPattern.Count; while (arrowPattern.Count > 0) { try { GameObject projectile = Manager <PoolManager> .Instance.GetObjectInstance(boss.arrowProjectilePrefab); projectile.transform.position = arrowPattern[0].position; projectile.GetComponent <PoisonArrow>().SetNecromancerRef(boss); projectile.GetComponent <PoisonArrow>().OverrideDir(Vector2.down); PoisonArrow arrow = projectile.GetComponent <PoisonArrow>(); DynData <PoisonArrow> arrowData = new DynData <PoisonArrow>(arrow); arrow.GetComponent <SpriteRenderer>().color = Color.cyan; arrow.damageTypeImmunity = (EDamageType)255; arrowData.Set("bounceAtWall", false); arrowPattern.RemoveAt(0); } catch (Exception e) { CourierLogger.LogDetailed(e, "HarderBosses"); } yield return(new WaitForSeconds(self.projectileCD)); } yield return(new WaitForSeconds(self.waveCD / 2f)); } boss.GotoNextAttackState(); }
IEnumerator NecromancerShootingState_ShootCoroutine(On.NecromancerShootingState.orig_ShootCoroutine orig, NecromancerShootingState self) { DynData <NecromancerShootingState> selfData = new DynData <NecromancerShootingState>(self); NecromancerBoss boss = selfData.Get <NecromancerBoss>("boss"); Vector3 targetPos = (!(Manager <PlayerManager> .Instance.Player.transform.position.x > boss.arenaCenter.position.x)) ? boss.castingPosRight.position : boss.castingPosLeft.position; boss.Invincibru = true; boss.hurtZone.enabled = false; boss.Animator.Update(0f); boss.Animator.SetTrigger("TeleportOut"); yield return(new WaitForSeconds(1f)); Vector3 position3 = boss.arenaCenter.position; if (targetPos.x < position3.x) { boss.transform.localScale = new Vector3(-1f, 1f, 1f); } else { boss.transform.localScale = Vector3.one; } boss.transform.position = targetPos; boss.Animator.SetTrigger("TeleportIn"); yield return(new WaitForSeconds(0.25f)); boss.hurtZone.enabled = true; boss.Invincibru = false; specialArrows = true; while (selfData.Get <int>("maxWaveCount") > 0) { boss.Animator.SetBool("Shooting", true); yield return(new WaitForSeconds(0.3f)); float[] pattern = GetRandomShotPattern(); foreach (float wait in pattern) { boss.Animator.SetTrigger("DoShot"); yield return(new WaitForSeconds(wait)); } boss.Animator.SetBool("Shooting", false); selfData.Set("maxWaveCount", selfData.Get <int>("maxWaveCount") - 1); yield return(new WaitForSeconds(1f)); } selfData.Set("allDone", true); }
IEnumerator NecromancerSkullMountState_StartBeam(On.NecromancerSkullMountState.orig_StartBeam orig, NecromancerSkullMountState self) { yield return(orig(self)); DynData <NecromancerSkullMountState> selfData = new DynData <NecromancerSkullMountState>(self); NecromancerBoss boss = selfData.Get <NecromancerBoss>("boss"); while (true) { PoisonArrow arrow = Manager <PoolManager> .Instance.GetObjectInstance(boss.arrowProjectilePrefab).GetComponent <PoisonArrow>(); arrow.transform.position = boss.projectileSpawnPoint.position + new Vector3(1.6f, 1.3f); Vector3 dir = Manager <PlayerManager> .Instance.Player.transform.position - arrow.transform.position; dir.z = 0; dir = dir.normalized; arrow.OverrideDir(dir); arrow.transform.rotation = Quaternion.Euler(0, 0, (dir.x > 0 ? 0 : 180) + Vector3.SignedAngle(-arrow.transform.right, dir, arrow.transform.forward)); arrow.SetNecromancerRef(boss); arrow.StartMovement(0); yield return(new WaitForSeconds(0.7f)); } }