public override void OnAction() { if (animator) { animator.speed = animationSpeedTemp; } if (Ammo > 0 || InfinityAmmo) { if (!InfinityAmmo) { Ammo -= 1; } if (BulletNum <= 0) { BulletNum = 1; } byte spread = (byte)(Spread * spreadmult); byte seed = (byte)Random.Range(0, 255 * spreadmult); if (!MuzzlePoint) { MuzzlePoint = this.transform; } if (IsVisible) { if (MuzzleFX) { GameObject fx = (GameObject)GameObject.Instantiate(MuzzleFX, MuzzlePoint.position, MuzzlePoint.rotation); fx.transform.parent = this.transform; GameObject.Destroy(fx, 2); } if (audioSource && SoundFire && IsVisible) { if (audioSource.enabled) { audioSource.PlayOneShot(SoundFire); } } for (int i = 0; i < BulletNum; i++) { if (Pointer) { Vector3 direction = (Pointer.forward + (new Vector3(Random.Range(-spread, spread) * 0.001f, Random.Range(-spread, spread) * 0.001f, Random.Range(-spread, spread) * 0.001f) * spreadmult)); if (ProjectileFX && fpsController) { GameObject.Instantiate(ProjectileFX, Pointer.position + (direction * 5), Quaternion.LookRotation(direction)); } } } } if (fpsController) { fpsController.Kick(KickPower); } if (character != null) { if (Pointer) { if (panicfire < 0.5f) { if (BulletNum == 1) { spread = 0; } } //我们可以使用所有参数调用DoDamage。但是,它在网络上发送了太多参数 //character.DoDamage(Pointer.position, Pointer.forward, BulletNum, spread, (byte)Random.Range(0, 255), (byte)Damage, Distance, MaxPenetrate, character.NetID, character.Team); //所以我们需要在物品管理器中注册所有武器,所以我们只发送物品索引。 character.DoDamageByItemIndex(Pointer.position, Pointer.forward, ItemIndex, seed); } } panicfire += 5; } base.OnAction(); }
public override void OnAction() { if (animator) { animator.speed = animationSpeedTemp; } if (Ammo > 0 || InfinityAmmo) { if (!InfinityAmmo) { Ammo -= 1; } if (BulletNum <= 0) { BulletNum = 1; } byte spread = (byte)(Spread * spreadmult); byte seed = (byte)Random.Range(0, 255 * spreadmult); if (this.transform.localScale == Vector3.zero) { if (character.inventory.TDEquipment != null) { MuzzlePoint = character.inventory.TDEquipment.EffectPoint; } if (MuzzlePoint == null) { MuzzlePoint = this.transform; } } else { MuzzlePoint = this.transform; } if (IsVisible) { if (MuzzleFX) { GameObject fx = (GameObject)GameObject.Instantiate(MuzzleFX, MuzzlePoint.position, MuzzlePoint.rotation); fx.transform.parent = MuzzlePoint.transform; GameObject.Destroy(fx, 2); } if (audioSource && SoundFire && IsVisible) { if (audioSource.enabled && audioSource.isActiveAndEnabled) { audioSource.PlayOneShot(SoundFire); } } for (int i = 0; i < BulletNum; i++) { if (Pointer) { Vector3 direction = (Pointer.forward + (new Vector3(Random.Range(-spread, spread) * 0.001f, Random.Range(-spread, spread) * 0.001f, Random.Range(-spread, spread) * 0.001f) * spreadmult)); if (ProjectileFX && fpsController) { GameObject.Instantiate(ProjectileFX, Pointer.position + (direction * 5), Quaternion.LookRotation(direction)); } } } } if (fpsController) { fpsController.Kick(KickPower); } if (character != null) { if (Pointer) { if (panicfire < 0.5f) { if (BulletNum == 1) { spread = 0; } } // we can call DoDamage with all parameters usage. But, it's sending too much parameter on networking //character.DoDamage(Pointer.position, Pointer.forward, BulletNum, spread, (byte)Random.Range(0, 255), (byte)Damage, Distance, MaxPenetrate, character.NetID, character.Team); // so we need to registeration all weapons in Item Manager so we just send only item Index. character.DoDamageByItemIndex(Pointer.position, Pointer.forward, ItemIndex, seed); } } panicfire += 5; } base.OnAction(); }