public void Shoot(Vector3 target) { IsCrosshairVisible = true; var weaponPos = Game.Player.Character.Position; //take velocity into account if (Game.Player.Character.IsInVehicle()) { var vehicle = Game.Player.Character.CurrentVehicle; weaponPos += vehicle.Velocity * 0.06f; var fireRateTime = TimeSpan.FromSeconds(0.2); if (_shootStopWatch.Elapsed > fireRateTime) { World.ShootBullet(weaponPos, target, Game.Player.Character, new Model(Game.Player.Character.Weapons.Current.Hash), 1); _shootStopWatch.Restart(); } } else { var dir = target - Game.Player.Character.GetBoneCoord(Bone.SKEL_R_Hand); var pitchToTarget = Geometry.DirectionToRotation(dir).X; _animationHelper.PlayShootingAnimation(pitchToTarget); ScriptHookExtensions.SetPedShootsAtCoord(Game.Player.Character, target); RotatePlayerCharacterTowardsTarget(target); } }
private void CreateMissileEntity() { var model = new Model("w_at_ar_supp_02"); var playerCharacter = Game.Player.Character; if (playerCharacter == null) { return; } var position = playerCharacter.GetBoneCoord(Bone.SKEL_R_Hand) + _launchDir * 1f; if (playerCharacter.IsInVehicle()) { position = playerCharacter.GetBoneCoord(Bone.SKEL_R_Hand) + _launchDir * 2f; } if (playerCharacter.IsInPlane) { position = playerCharacter.GetBoneCoord(Bone.SKEL_R_Hand) + _launchDir * 4f; } _missile = World.CreateProp(model, position, false, false); if (_missile == null) { Debug.Log("Failed to create a missile prop"); Exists = false; return; } GTA.Native.Function.Call(GTA.Native.Hash.SET_ENTITY_RECORDS_COLLISIONS, _missile, false); _soundId = ScriptHookExtensions.GetSoundId(); ScriptHookExtensions.PlaySoundFromEntity(_soundId, "SPL_RPG_DIST_FLIGHT_MASTER", _missile, ""); ScriptHookExtensions.PtfxRequestAsset("scr_exile2"); _fxId = ScriptHookExtensions.PtfxStartOnEntity(_missile, "scr_ex2_rpg_trail", "scr_exile2", new Vector3(0.56f, 0, 0), new Vector3(0, 0, -90), 1.0); UpdatePosition(); }
private void RemoveMissileEntity() { ScriptHookExtensions.PtfxStop(_fxId); if (_missile != null) { _missile.IsVisible = false; _missile.Detach(); _missile.MarkAsNoLongerNeeded(); _missile.Position = Vector3.Zero; } Exists = false; }
private void ApplyCameraPosition(Camera camera, Vector3 extraOffset, bool isRelative) { var pitch = Mathf.Deg2Rad * camera.Rotation.X; var yaw = Mathf.Deg2Rad * camera.Rotation.Z; var delta = new Vector3(extraOffset.X, (float)(_distanceToCharacter * -Math.Cos(pitch)), (float)(_distanceToCharacter * -Math.Sin(pitch))); delta.Z = Math.Max(delta.Z, -1f) + extraOffset.Z; var extendedViewCameraOffset = delta; extendedViewCameraOffset.X = (float)(Math.Cos(yaw) * delta.X - Math.Sin(yaw) * delta.Y); extendedViewCameraOffset.Y = (float)(Math.Sin(yaw) * delta.X + Math.Cos(yaw) * delta.Y); ScriptHookExtensions.AttachCamToEntity(camera, Game.Player.Character, extendedViewCameraOffset, isRelative); }
public void PlayMindControlAnimation() { if (Game.Player.Character.IsInVehicle()) { return; } if (_lastAnimation == null) { var animation = new AnimationName(); animation.Group = "gestures@f@standing@casual"; animation.Name = "gesture_shrug_soft"; ScriptHookExtensions.PlayAnimation(Game.Player.Character, animation.Group, animation.Name, 40.0f, -1, false, 0, true); _lastAnimation = animation; } _wasPlayingAnimationThisFrame = true; }
public void PlayShootingAnimation(float pitchToTarget) { var animation = GetWeaponAnimation(Game.Player.Character.Weapons.Current.Hash, pitchToTarget); if ((!_wasPlayingAnimationLastFrame || !animation.Equals(_lastAnimation)) && (Game.Player.Character.Weapons.Current.AmmoInClip > 0)) { if (_lastAnimation != null) { Game.Player.Character.Task.ClearAnimation(_lastAnimation.Group, _lastAnimation.Name); } ScriptHookExtensions.PlayAnimation(Game.Player.Character, animation.Group, animation.Name, 8.0f, -1, false, 0, true); _lastAnimation = animation; } _wasPlayingAnimationThisFrame = true; }
public void Process() { if (_initFlag) { ScriptHookExtensions.PtfxRequestAsset("scr_exile2"); _initFlag = false; } foreach (var missile in _missiles) { missile.Process(); if (!missile.Exists) { missile.Dispose(); } } _missiles = _missiles.Where(missile => missile.Exists).ToList(); }
private void Detonate() { if (_missile == null) { return; } if (Exists && !Detonated) { var player = Game.Player.Character; var dist = (player.Position - _missile.Position).Length(); if (dist > 1.5) { World.AddOwnedExplosion(player, _missile.Position, ExplosionType.Rocket, 1.5f, 0.1f); ScriptHookExtensions.PtfxStop(_fxId); ScriptHookExtensions.StopSound(_soundId); Detonated = true; } } }
private bool HasTimeOut() { return(_flightTime > _timeout.TotalSeconds * ScriptHookExtensions.GetTimeCoef()); }