public void OnReceived() { if (NetworkServer.active) { return; } GameObject target = null; var playerGameObject = RoR2.Util.FindNetworkObject(PlayerBody); if (playerGameObject) { var playerBody = playerGameObject.GetComponent <RoR2.CharacterBody>(); if (playerBody) { var eqp = playerBody.equipmentSlot.FindActiveEquipmentDisplay(); target = eqp ? eqp.gameObject : playerGameObject; } } else { Debug.LogError("We don't have a jar or a playerbody. Can't do an orb!"); return; } if (target) { var orb = new JarOfReshapingOrb(); orb.Target = target; orb.origin = StartingPosition; orb.Index = -1; OrbManager.instance.AddOrb(orb); } }
public void FixedUpdate() { var input = body.inputBank; if (SuckTime > 0) { if (!IsSuckingProjectiles) { RoR2.EffectData sphere = new RoR2.EffectData { origin = TargetTransform ? TargetTransform.position : body.transform.position, rotation = TargetTransform ? TargetTransform.rotation : body.transform.rotation, rootObject = TargetTransform ? TargetTransform.gameObject : body.gameObject }; RoR2.EffectManager.SpawnEffect(JarChargeSphere, sphere, false); var bodyIdentity = body.gameObject.GetComponent <NetworkIdentity>(); if (bodyIdentity && NetworkServer.active) { new SyncJarSucking(SyncJarSucking.MessageType.Charging, true, projectileAbsorptionTime, bodyIdentity.netId).Send(NetworkDestination.Clients); } IsSuckingProjectiles = true; } SuckTime -= Time.fixedDeltaTime; List <ProjectileController> bullets = new List <ProjectileController>(); new RoR2.SphereSearch { radius = baseRadiusGranted, mask = RoR2.LayerIndex.projectile.mask, origin = body.corePosition }.RefreshCandidates().FilterCandidatesByProjectileControllers().GetProjectileControllers(bullets); if (bullets.Count > 0) { foreach (ProjectileController controller in bullets) { var controllerOwner = controller.owner; if (controllerOwner) { var ownerBody = controllerOwner.GetComponent <RoR2.CharacterBody>(); if (ownerBody) { if (ownerBody.teamComponent.teamIndex == body.teamComponent.teamIndex) { if (FriendlyFireManager.friendlyFireMode != FriendlyFireManager.FriendlyFireMode.Off && iWantToLoseFriendsInChaosMode) { if (ownerBody == body) { continue; } } else { continue; } } var projectileDamage = controller.gameObject.GetComponent <ProjectileDamage>(); if (projectileDamage) { jarBullets.Add(new JarBullet(projectileDamage.damage, projectileDamage.damageColorIndex, projectileDamage.damageType)); var orb = new JarOfReshapingOrb(); orb.Target = TargetTransform ? TargetTransform.gameObject : body.gameObject; //Where it is going to orb.origin = controller.transform.position; //Where it is coming from orb.Index = -1; OrbManager.instance.AddOrb(orb); // Fire var bodyIdentity = body.gameObject.GetComponent <NetworkIdentity>(); if (bodyIdentity && NetworkServer.active) { new SyncJarOrb(SyncJarOrb.MessageType.Fired, bodyIdentity.netId, controller.transform.position).Send(NetworkDestination.Clients); } RoR2.Util.PlayScaledSound(EntityStates.Engi.EngiWeapon.ChargeGrenades.chargeStockSoundString, body.gameObject, jarBullets.Count); EntityState.Destroy(controller.gameObject); } } } } } } else { IsSuckingProjectiles = false; } if (ChargeTime > 0) { if (!IsCharging && NetworkServer.active) { var bodyIdentity = body.gameObject.GetComponent <NetworkIdentity>(); if (bodyIdentity) { new SyncJarCharging(jarBullets.Count, ChargeTime, RefireTime, bodyIdentity.netId).Send(NetworkDestination.Clients); } IsCharging = true; } ChargeTime -= Time.fixedDeltaTime; if (ChargeTime <= 0) { if (NetworkServer.active) { var bullet = jarBullets.Last(); FireProjectileInfo projectileInfo = new FireProjectileInfo(); projectileInfo.projectilePrefab = JarProjectile; projectileInfo.damage = 20 + bullet.Damage * 2; projectileInfo.damageColorIndex = bullet.DamageColorIndex; projectileInfo.damageTypeOverride = bullet.DamageType; projectileInfo.owner = body.gameObject; projectileInfo.procChainMask = default(RoR2.ProcChainMask); projectileInfo.position = TargetTransform ? TargetTransform.position : body.corePosition; projectileInfo.rotation = RoR2.Util.QuaternionSafeLookRotation(input ? input.aimDirection : body.transform.forward); projectileInfo.speedOverride = 120; ProjectileManager.instance.FireProjectile(projectileInfo); jarBullets.RemoveAt(jarBullets.Count - 1); } RoR2.Util.PlaySound(EntityStates.ClayBoss.FireTarball.attackSoundString, body.gameObject); ClientBullets--; if (jarBullets.Count > 0 || ClientBullets > 0) { ChargeTime += RefireTime; } } } else { IsCharging = false; } }