public static void CastPortal() { portalAimLine.Disable(); Transform t = Camera.main.transform; var hits1 = Physics.RaycastAll(t.position, t.forward, portalCastMaxRange + 1f); Vector3 pos; foreach (var hit in hits1) { if (!hit.transform.CompareTag("enemyCollide") && hit.transform.root != LocalPlayer.Transform.root) { pos = hit.point - t.forward * 2.5f + Vector3.up * 2.1f; goto portal_postPickingPos; } } pos = LocalPlayer.Transform.position + t.forward * (portalCastMaxRange - 2) + Vector3.up * 2f; portal_postPickingPos: int id = Portal.GetPortalID(); try { Portal.CreatePortal(pos, ModdedPlayer.Stats.spell_portalDuration, id, LocalPlayer.IsInCaves, LocalPlayer.IsInEndgame); } catch (Exception e) { ModAPI.Log.Write(e.ToString()); } if (BoltNetwork.isRunning) { if (Portal.BothPortalsActive) { Portal.SyncBothPortals(); } else { Portal.SyncTransform(pos, ModdedPlayer.Stats.spell_portalDuration, id, LocalPlayer.IsInCaves, LocalPlayer.IsInEndgame); } } }
public static void DoBlink() { blinkAim?.Disable(); Transform t = Camera.main.transform; Vector3 blinkPoint = Vector3.zero; var hits1 = Physics.RaycastAll(t.position, t.forward, ModdedPlayer.Stats.spell_blinkRange + 1f); foreach (var hit in hits1) { if (!hit.transform.CompareTag("enemyCollide") && hit.transform.root != LocalPlayer.Transform.root) { blinkPoint = hit.point - t.forward + Vector3.up * 0.25f; break; } } if (blinkPoint == Vector3.zero) { blinkPoint = LocalPlayer.Transform.position + t.forward * ModdedPlayer.Stats.spell_blinkRange; } if (ModdedPlayer.Stats.spell_blinkDamage > 0) { RaycastHit[] hits = Physics.BoxCastAll(t.position, Vector3.one * 1.2f, blinkPoint - t.position, t.rotation, Vector3.Distance(blinkPoint, t.position) + 1); foreach (RaycastHit hit in hits) { if (hit.transform.CompareTag("enemyCollide")) { ModAPI.Console.Write("Hit enemy on layer " + hit.transform.gameObject.layer); float dmg = ModdedPlayer.Stats.spell_blinkDamage + ModdedPlayer.Stats.spellFlatDmg * ModdedPlayer.Stats.spell_blinkDamageScaling; dmg *= ModdedPlayer.Stats.TotalMagicDamageMultiplier; if (GameSetup.IsMpClient) { BoltEntity enemyEntity = hit.transform.GetComponentInParent <BoltEntity>(); if (enemyEntity == null) { enemyEntity = hit.transform.gameObject.GetComponent <BoltEntity>(); } if (enemyEntity != null) { PlayerHitEnemy playerHitEnemy = PlayerHitEnemy.Create(enemyEntity); playerHitEnemy.hitFallDown = true; playerHitEnemy.getAttackerType = DamageMath.CONVERTEDFLOATattackerType; playerHitEnemy.Hit = DamageMath.GetSendableDamage(dmg); playerHitEnemy.Send(); } } else { if (EnemyManager.enemyByTransform.ContainsKey(hit.transform.root)) { EnemyManager.enemyByTransform[hit.transform.root].HitMagic(dmg); } else { hit.transform.SendMessageUpwards("HitMagic", dmg, SendMessageOptions.DontRequireReceiver); } } } } } if (ModdedPlayer.Stats.spell_blinkDoExplosion) { Effects.Sound_Effects.GlobalSFX.Play(Effects.Sound_Effects.GlobalSFX.SFX.Boom); var raycastHitExplosion = Physics.OverlapSphere(blinkPoint, (blinkPoint - t.position).magnitude / 4f); float dmg = ModdedPlayer.Stats.spell_blinkDamage + LocalPlayer.Rigidbody.velocity.magnitude * ModdedPlayer.Stats.spellFlatDmg * ModdedPlayer.Stats.spell_blinkDamageScaling / 7f; dmg *= ModdedPlayer.Stats.TotalMagicDamageMultiplier * ModdedPlayer.Stats.RandomCritDamage; foreach (var hitCollider in raycastHitExplosion) { if (hitCollider.transform.CompareTag("enemyCollide")) { if (GameSetup.IsMpClient) { BoltEntity enemyEntity = hitCollider.transform.GetComponentInParent <BoltEntity>(); if (enemyEntity == null) { enemyEntity = hitCollider.transform.gameObject.GetComponent <BoltEntity>(); } if (enemyEntity != null) { PlayerHitEnemy playerHitEnemy = PlayerHitEnemy.Create(enemyEntity); playerHitEnemy.hitFallDown = true; playerHitEnemy.getAttackerType = DamageMath.CONVERTEDFLOATattackerType; playerHitEnemy.Hit = DamageMath.GetSendableDamage(dmg); playerHitEnemy.Send(); } } else { if (EnemyManager.enemyByTransform.ContainsKey(hitCollider.transform.root)) { EnemyManager.enemyByTransform[hitCollider.transform.root].HitMagic(dmg); } else { hitCollider.transform.SendMessageUpwards("HitMagic", dmg, SendMessageOptions.DontRequireReceiver); } } } } } BlinkTowards(blinkPoint); }
public static void DoBlink() { blinkAim?.Disable(); Transform t = Camera.main.transform; Vector3 blinkPoint = Vector3.zero; var hits1 = Physics.RaycastAll(t.position, t.forward, BlinkRange + 1f); foreach (var hit in hits1) { if (!hit.transform.CompareTag("enemyCollide") && hit.transform.root != LocalPlayer.Transform.root) { blinkPoint = hit.point - t.forward + Vector3.up * 0.25f; break; } } if (blinkPoint == Vector3.zero) { blinkPoint = LocalPlayer.Transform.position + t.forward * BlinkRange; } if (BlinkDamage > 0) { RaycastHit[] hits = Physics.BoxCastAll(t.position, Vector3.one * 1.2f, blinkPoint - t.position, t.rotation, Vector3.Distance(blinkPoint, t.position) + 1); foreach (RaycastHit hit in hits) { if (hit.transform.CompareTag("enemyCollide")) { ModAPI.Console.Write("Hit enemy on layer " + hit.transform.gameObject.layer); float dmg = BlinkDamage + ModdedPlayer.instance.SpellDamageBonus; dmg *= ModdedPlayer.instance.SpellAMP * 3; DamageMath.DamageClamp(dmg, out int dmgInt, out int repetitions); if (GameSetup.IsMpClient) { BoltEntity enemyEntity = hit.transform.GetComponentInParent <BoltEntity>(); if (enemyEntity == null) { enemyEntity = hit.transform.gameObject.GetComponent <BoltEntity>(); } if (enemyEntity != null) { PlayerHitEnemy playerHitEnemy = PlayerHitEnemy.Create(enemyEntity); playerHitEnemy.hitFallDown = true; playerHitEnemy.explosion = true; playerHitEnemy.Hit = dmgInt; for (int i = 0; i < repetitions; i++) { playerHitEnemy.Send(); } } } else { var v = hit.transform.GetComponentInParent <EnemyProgression>(); if (v == null) { v = hit.transform.GetComponent <EnemyProgression>(); } if (v != null) { for (int i = 0; i < repetitions; i++) { v.HitMagic(dmgInt); } } else { hit.transform.SendMessageUpwards("Hit", dmgInt, SendMessageOptions.DontRequireReceiver); } } } } } BlinkTowards(blinkPoint); }