'http://gtaxscripting.blogspot.com/ 'http://www.facebook.com/GtaIVScripting 'https://www.youtube.com/user/GTAScripting ' sorry people, i have no time now to comment and explain this mess :( ' this is not the best way to do the effects but works almost as expected ' this is my second script for GTA IV :) ' by JulioNIB Imports System Imports System.Drawing Imports System.Windows.Forms Imports System.IO Imports GTA Public Class GhostRider Inherits Script private depMsg as string = "" Private bWaitLoad As Boolean = True Private WaitLoadCount As Int16 = 500 Private l1, l2, l3, PSLight, carLight As light Private timer1, timeScript As int32 Private vecL As vector3 Private mGR, mPL As model Private isGhostRider As Boolean = False Private launchControl As int32 = 1 Private speedToThrowEffect As Double Private hkActivate, hkSpawnBike, hkThrowFlames, hkBikeNitro, hkControlKey, hkSpitBullets, hkPenanceStare, hkAccelKey, hkAimKey, hkShootKey, hkEnterVehicleKey As int32 Private hkChainAttack1, hkChainAttackGrab, hkTurnVehicleLeft, hkTurnVehicleRight, hkEquipChain, hkChainClimb As int32 Private throwEffectRoundForVehicles, throwEffectRoundForPeds As Double Private sGRmodel As String Private throwTimeout As int16 = 0 Private GRBike As String = "" Private bPrintSign As Boolean = True Private flameW1, flameW2, flameW3, flameW4, flameH1, flame1, flame2, flame3, flame4, effectThrow1, effectThrow2, flameCar1, flameCar2, flameCar3, flameCar4, flameCar5, flameCar6, flameCar7 As int32 private flameOffSetX, flameOffSetY, flameOffSetZ, flameSizeMuliplier as double private BikeFlameOffSetX, BikeFlameOffSetY, BikeFlameOffSetZ, BikeFlameSizeMuliplier as double private flameLightMultiplier as double Private onAllWheelsCont, fallCont, timeHealth As Int16 Private penanceStaretArr(20) As ped Private penanceStaretArrCount As int16 = 1 Private penanceStareTime As int16 = 3000 Private PenanceStareMod As int16 = 0 Private PenanceStarePedTmp As ped = Nothing Private PenanceStareCP As checkpoint Private aSetPenanceStare As animationset Private aSetPenanceStarePed, aSetPenanceStarePedIni As animationset Private PenanceStareSpeechAux As int16 = 0 Private PSBoneAttach As int32 Private PSAnimName As String private PreviousWeapon as int32 Private BeingArrestedCount As int16 = 0 Private bIconThrowFlames, bIconSpitbullets, bIconSpitbulletsLoop, bIconShotgun, bIconSpeedKills, bIconChains As Boolean Private iIconPenanceStare As int16 = 0 Private IconThrowFlames As Texture Private IconPenanceStare1, IconPenanceStare2, IconPenanceStare3, IconPenanceStare4 As Texture Private IconSpitbullets As Texture Private IconShotgun As Texture Private IconSpeedKills As Texture Private IconChains As Texture Private SpitBulletBulCount As int32 = 0 Private SpitBulletBulCountFont As gta.font Private bInfiniteSpitBullets, bShowMsgs, bPlaySounds, bShowIcons As Boolean Private UpForceWallRide As Double = 0.25 private TimeEffectForHit as double = 0.3 private bTimeEffectForHit as boolean private bBulletTimeWhenAim as boolean private HeadEffectScale as double = 1.0 private PlMaxHealth as int16 = 100 private wasGROnceCont as double = 0 private wasGROnce as boolean = false private HitForce as double = 1.0 private ShotgunForce as double = 1.0 private hkcontrolkeyDownTime as int16 = 0 private bSpawnBike as boolean = false Private bAutoSpawnBike As Boolean = False Private vecVelocityGeneral As Vector3 private collisionProof as boolean = false private bTransformVehicle as boolean = false private currVehDim as vector3 private vehLastVehicle as vehicle = nothing Private objChain(10) as gta.object private maxChainObj as int16 = 10 private pChainTarget as ped = nothing private pChainTargetGrab as ped = nothing private vChainTarget as vehicle = nothing private vChainTargetGrab as vehicle = nothing private chainAttackMode as int16 = 0 private vecChainDimIni, vecChainDim as vector3 private timeOutMoveChain as int16 = 0 private aSetChainAttack as animationset private aSetChainGrab as animationset private vecChainVelocity as vector3 private timeRestoreChain as int16 = 0 Private grabTargetPos As Vector3 private TargetCheckpoint as checkpoint private TargetLight as light private RequipChainCounter as int16 = 0 private aSetChainClimb as animationset private ChainTargetVeh as vehicle = nothing private FPS as double = 0 Private sVersion As String = "2.4" Private pedsTarget As Ped() = Nothing Private vehsTarget As Vehicle() = Nothing Private pedTargeted As Ped = Nothing Private vehTargeted As Vehicle = Nothing Private targetObjectAux As GTA.Object = Nothing Private targetObjectRotation As Double = 0 Private timeCheckTargets As Double = 0 Public Sub New() me.interval = 10 End Sub Private Sub LoadSettingsAux() If WaitLoadCount > 0 Then WaitLoadCount -= getInterval Else bWaitLoad = False If Settings.GetValueKey("speedToThrowEffect", "GENERAL", -1) = -1 Then Settings.SetValue("speedToThrowEffect", "GENERAL", 25) If Settings.GetValueKey("throwEffectRoundForVehicles", "GENERAL", -1) = -1 Then Settings.SetValue("throwEffectRoundForVehicles", "GENERAL", 12) If Settings.GetValueKey("throwEffectRoundForPeds", "GENERAL", -1) = -1 Then Settings.SetValue("throwEffectRoundForPeds", "GENERAL", 20) If Settings.GetValueFloat("flameOffSetX", "GENERAL", -1) = -1 Then Settings.SetValue("flameOffSetX", "GENERAL", "0") If Settings.GetValueFloat("flameOffSetY", "GENERAL", -1) = -1 Then Settings.SetValue("flameOffSetY", "GENERAL", "0") If Settings.GetValueFloat("flameOffSetZ", "GENERAL", -1) = -1 Then Settings.SetValue("flameOffSetZ", "GENERAL", "0") If Settings.GetValueFloat("flameSizeMuliplier", "GENERAL", -1) = -1 Then Settings.SetValue("flameSizeMuliplier", "GENERAL", "1") If Settings.GetValueFloat("flameLightMultiplier", "GENERAL", -1) = -1 Then Settings.SetValue("flameLightMultiplier", "GENERAL", "1") If Settings.GetValueFloat("BikeFlameOffSetX", "GENERAL", -1) = -1 Then Settings.SetValue("BikeFlameOffSetX", "GENERAL", "0") If Settings.GetValueFloat("BikeFlameOffSetY", "GENERAL", -1) = -1 Then Settings.SetValue("BikeFlameOffSetY", "GENERAL", "0") If Settings.GetValueFloat("BikeFlameOffSetZ", "GENERAL", -1) = -1 Then Settings.SetValue("BikeFlameOffSetZ", "GENERAL", "0") If Settings.GetValueFloat("BikeFlameSizeMuliplier", "GENERAL", -1) = -1 Then Settings.SetValue("BikeFlameSizeMuliplier", "GENERAL", "1") If Settings.GetValueFloat("UpForceWallRide", "GENERAL", -1) = -1 Then Settings.SetValue("UpForceWallRide", "GENERAL", Convert.ToString(UpForceWallRide)) If Settings.GetValueFloat("HitForce", "GENERAL", -1) = -1 Then Settings.SetValue("HitForce", "GENERAL", Convert.ToString(HitForce)) If Settings.GetValueFloat("ShotgunForce", "GENERAL", -1) = -1 Then Settings.SetValue("ShotgunForce", "GENERAL", Convert.ToString(ShotgunForce)) If Settings.GetValueKey("UseTimeEffectForHit", "GENERAL", -1) = -1 Then Settings.SetValue("UseTimeEffectForHit", "GENERAL", 0) If Settings.GetValueFloat("TimeEffectForHit", "GENERAL", -1) = -1 Then Settings.SetValue("TimeEffectForHit", "GENERAL", Convert.ToString(TimeEffectForHit)) If Settings.GetValueKey("bBulletTimeWhenAim", "GENERAL", -1) = -1 Then Settings.SetValue("bBulletTimeWhenAim", "GENERAL", 1) If Settings.GetValueFloat("PlMaxHealth", "GENERAL", -1) = -1 Then Settings.SetValue("PlMaxHealth", "GENERAL", Convert.ToString(PlMaxHealth)) If Settings.GetValueKey("penanceStareTime", "GENERAL", -1) = -1 Then Settings.SetValue("penanceStareTime", "GENERAL", 3000) If Settings.GetValueKey("InfiniteSpitBullets", "GENERAL", -1) = -1 Then Settings.SetValue("InfiniteSpitBullets", "GENERAL", 0) If Settings.GetValueKey("ShowMsgs", "GENERAL", -1) = -1 Then Settings.SetValue("ShowMsgs", "GENERAL", 1) If Settings.GetValueKey("PlaySounds", "GENERAL", -1) = -1 Then Settings.SetValue("PlaySounds", "GENERAL", 1) If Settings.GetValueKey("ShowIcons", "GENERAL", -1) = -1 Then Settings.SetValue("ShowIcons", "GENERAL", 1) If Settings.GetValueKey("bAutoSpawnBike", "GENERAL", -1) = -1 Then Settings.SetValue("bAutoSpawnBike", "GENERAL", 0) If Settings.GetValueKey("maxChainObj", "GENERAL", -1) = -1 Then Settings.SetValue("maxChainObj", "GENERAL", 15) If Settings.GetValueKey("collisionProof", "GENERAL", -1) = -1 Then Settings.SetValue("collisionProof", "GENERAL", 1) If Settings.GetValueKey("bTransformVehicle", "GENERAL", -1) = -1 Then Settings.SetValue("bTransformVehicle", "GENERAL", 0) If Settings.GetValueKey("ActivateScript", "HotKeys", -1) = -1 Then Settings.SetValue("ActivateScript", "HotKeys", Keys.F4) If Settings.GetValueKey("SpawnBike", "HotKeys", -1) = -1 Then Settings.SetValue("SpawnBike", "HotKeys", Keys.F5) If Settings.GetValueKey("ThrowFlames", "HotKeys", -1) = -1 Then Settings.SetValue("ThrowFlames", "HotKeys", Keys.D1) If Settings.GetValueKey("hkChainAttack1", "HotKeys", -1) = -1 Then Settings.SetValue("hkChainAttack1", "HotKeys", Keys.D1) If Settings.GetValueKey("hkChainAttackGrab", "HotKeys", -1) = -1 Then Settings.SetValue("hkChainAttackGrab", "HotKeys", Keys.D3) If Settings.GetValueKey("hkTurnVehicleLeft", "HotKeys", -1) = -1 Then Settings.SetValue("hkTurnVehicleLeft", "HotKeys", Keys.A) If Settings.GetValueKey("hkTurnVehicleRight", "HotKeys", -1) = -1 Then Settings.SetValue("hkTurnVehicleRight", "HotKeys", Keys.D) If Settings.GetValueKey("hkEquipChain", "HotKeys", -1) = -1 Then Settings.SetValue("hkEquipChain", "HotKeys", Keys.d0) If Settings.GetValueKey("BikeNitro", "HotKeys", -1) = -1 Then Settings.SetValue("BikeNitro", "HotKeys", Keys.ShiftKey) If Settings.GetValueKey("ControlKey", "HotKeys", -1) = -1 Then Settings.SetValue("ControlKey", "HotKeys", Keys.ControlKey) If Settings.GetValueKey("hkSpitBullets", "HotKeys", -1) = -1 Then Settings.SetValue("hkSpitBullets", "HotKeys", Keys.D3) If Settings.GetValueKey("hkPenanceStare", "HotKeys", -1) = -1 Then Settings.SetValue("hkPenanceStare", "HotKeys", Keys.D2) If Settings.GetValueKey("hkAccelKey", "HotKeys", -1) = -1 Then Settings.SetValue("hkAccelKey", "HotKeys", Keys.W) If Settings.GetValueKey("hkAimKey", "HotKeys", -1) = -1 Then Settings.SetValue("hkAimKey", "HotKeys", Keys.RButton) If Settings.GetValueKey("hkShootKey", "HotKeys", -1) = -1 Then Settings.SetValue("hkShootKey", "HotKeys", Keys.LButton) If Settings.GetValueKey("hkEnterVehicleKey", "HotKeys", -1) = -1 Then Settings.SetValue("hkEnterVehicleKey", "HotKeys", Keys.F) If Settings.GetValueKey("hkChainClimb", "HotKeys", -1) = -1 Then Settings.SetValue("hkChainClimb", "HotKeys", Keys.d4) If Settings.GetValueString("GhostRider_Replaced_model_name", "GENERAL", "") = "" Then Settings.SetValue("GhostRider_Replaced_model_name", "GENERAL", "m_y_multiplayer") If Settings.GetValueString("GhostRider_Replaced_Bike_name", "GENERAL", "") = "" Then Settings.SetValue("GhostRider_Replaced_Bike_name", "GENERAL", "ZOMBIEB") Settings.Save() speedToThrowEffect = Settings.GetValueKey("speedToThrowEffect", "GENERAL", 25) penanceStareTime = Settings.GetValueKey("penanceStareTime", "GENERAL", 3000) bInfiniteSpitBullets = Settings.GetValueKey("InfiniteSpitBullets", "GENERAL", 0) = 1 bShowMsgs = Settings.GetValueKey("ShowMsgs", "GENERAL", 1) = 1 bPlaySounds = Settings.GetValueKey("PlaySounds", "GENERAL", 1) = 1 bShowIcons = Settings.GetValueKey("ShowIcons", "GENERAL", 1) = 1 bAutoSpawnBike = Settings.GetValueKey("bAutoSpawnBike", "GENERAL", 1) = 1 maxChainObj = Settings.GetValueKey("maxChainObj", "GENERAL", 15) collisionProof = Settings.GetValueKey("collisionProof", "GENERAL", 1) = 1 bTransformVehicle = Settings.GetValueKey("bTransformVehicle", "GENERAL", 0) = 1 bTimeEffectForHit = Settings.GetValueKey("UseTimeEffectForHit", "GENERAL", 1) = 1 bBulletTimeWhenAim = Settings.GetValueKey("bBulletTimeWhenAim", "GENERAL", 1) = 1 hkActivate = Settings.GetValueKey("ActivateScript", "HotKeys", Keys.F4) hkSpawnBike = Settings.GetValueKey("SpawnBike", "HotKeys", Keys.F5) hkThrowFlames = Settings.GetValueKey("ThrowFlames", "HotKeys", Keys.D1) hkChainAttack1 = Settings.GetValueKey("hkChainAttack1", "HotKeys", Keys.D1) hkChainAttackGrab = Settings.GetValueKey("hkChainAttackGrab", "HotKeys", Keys.D3) hkTurnVehicleLeft = Settings.GetValueKey("hkTurnVehicleLeft", "HotKeys", Keys.A) hkTurnVehicleRight = Settings.GetValueKey("hkTurnVehicleRight", "HotKeys", Keys.D) hkEquipChain = Settings.GetValueKey("hkEquipChain", "HotKeys", Keys.d0) hkBikeNitro = Settings.GetValueKey("BikeNitro", "HotKeys", Keys.ShiftKey) hkControlKey = Settings.GetValueKey("ControlKey", "HotKeys", Keys.ControlKey) hkSpitBullets = Settings.GetValueKey("hkSpitBullets", "HotKeys", Keys.D3) hkPenanceStare = Settings.GetValueKey("hkPenanceStare", "HotKeys", Keys.D2) hkAccelKey = Settings.GetValueKey("hkAccelKey", "HotKeys", Keys.W) hkAimKey = Settings.GetValueKey("hkAimKey", "HotKeys", Keys.RButton) hkShootKey = Settings.GetValueKey("hkShootKey", "HotKeys", Keys.LButton) hkEnterVehicleKey = Settings.GetValueKey("hkEnterVehicleKey", "HotKeys", Keys.F) hkChainClimb = Settings.GetValueKey("hkChainClimb", "HotKeys", Keys.D4) throwEffectRoundForVehicles = Settings.GetValueKey("throwEffectRoundForVehicles", "GENERAL", 12) throwEffectRoundForPeds = Settings.GetValueKey("throwEffectRoundForPeds", "GENERAL", 20) flameOffSetX = Settings.GetValueFloat("flameOffSetX", "GENERAL", 0) flameOffSetY = Settings.GetValueFloat("flameOffSetY", "GENERAL", 0) flameOffSetZ = Settings.GetValueFloat("flameOffSetZ", "GENERAL", 0) flameSizeMuliplier = Settings.GetValueFloat("flameSizeMuliplier", "GENERAL", 1) flameLightMultiplier = Settings.GetValueFloat("flameLightMultiplier", "GENERAL", 1) BikeFlameOffSetX = Settings.GetValueFloat("BikeFlameOffSetX", "GENERAL", 0) BikeFlameOffSetY = Settings.GetValueFloat("BikeFlameOffSetY", "GENERAL", 0) BikeFlameOffSetZ = Settings.GetValueFloat("BikeFlameOffSetZ", "GENERAL", 0) BikeFlameSizeMuliplier = Settings.GetValueFloat("BikeFlameSizeMuliplier", "GENERAL", 1) UpForceWallRide = Settings.GetValueFloat("UpForceWallRide", "GENERAL", 0.25) HitForce = Settings.GetValueFloat("HitForce", "GENERAL", 1.0) ShotgunForce = Settings.GetValueFloat("ShotgunForce", "GENERAL", 1.0) TimeEffectForHit = Settings.GetValueFloat("TimeEffectForHit", "GENERAL", 0.1) PlMaxHealth = Settings.GetValueFloat("PlMaxHealth", "GENERAL", 100) sGRmodel = Settings.GetValueString("GhostRider_Replaced_model_name", "GENERAL", "m_y_multiplayer") GRBike = Settings.GetValueString("GhostRider_Replaced_Bike_name", "GENERAL", "ZOMBIEB") If throwEffectRoundForPeds > 200 Then throwEffectRoundForPeds = 200 l1 = New Light l1.Color = System.Drawing.Color.Goldenrod l1.Position = Player.Character.GetBonePosition(Bone.Head) + Vector3.WorldUp / 2 l1.Intensity = 15 l1.Range = 3 l1.Enabled = False l2 = New Light l2.Color = l1.Color l2.Position = Player.Character.GetBonePosition(Bone.Head) + Vector3.WorldUp / 2 l2.Intensity = 15 l2.Range = 3 l2.Enabled = False l3 = New Light l3.Color = System.Drawing.Color.Orange l3.Position = Player.Character.GetBonePosition(Bone.Head) + Vector3.WorldUp / 2 l3.Intensity = 15 l3.Range = 3 l3.Enabled = False PSLight = New Light PSLight.Color = System.Drawing.Color.White PSLight.Enabled = False PSLight.Intensity = 20 PSLight.Position = Player.Character.GetBonePosition(Bone.Head) + Vector3.WorldUp / 2 carLight = New Light carLight.Color = System.Drawing.Color.orangered carLight.Enabled = False carLight.Intensity = 50 carLight.Position = Player.Character.GetBonePosition(Bone.Head) + Vector3.WorldUp / 2 PenanceStareCP = New Checkpoint PenanceStareCP.Visible = False PenanceStareCP.Color = System.Drawing.Color.FromArgb(100, System.Drawing.Color.White) PenanceStareCP.Diameter = 1.0 aSetPenanceStare = New AnimationSet("missfaustin3") aSetPenanceStarePed = New AnimationSet("missfrancis2") aSetPenanceStarePedIni = New AnimationSet("amb@brazier") PSAnimName = "point_fwd" PSBoneAttach = Bone.RightHand timer1 = 0 timeScript = 0 if sGRmodel <> "none" then mGR = New Model(sGRmodel) else mGR = nothing end if mPL = New Model("player") Player.Character.Metadata.isGhostRider = False Player.Character.Metadata.resetModel = False Try If bShowIcons Then IconThrowFlames = New GTA.Texture(File.ReadAllBytes(".\scripts\GRIcons\THF.png")) IconPenanceStare1 = New GTA.Texture(File.ReadAllBytes(".\scripts\GRIcons\PS1.png")) IconPenanceStare2 = New GTA.Texture(File.ReadAllBytes(".\scripts\GRIcons\PS2.png")) IconPenanceStare3 = New GTA.Texture(File.ReadAllBytes(".\scripts\GRIcons\PS3.png")) IconPenanceStare4 = New GTA.Texture(File.ReadAllBytes(".\scripts\GRIcons\PS4.png")) IconSpitbullets = New GTA.Texture(File.ReadAllBytes(".\scripts\GRIcons\SB.png")) IconShotgun = New GTA.Texture(File.ReadAllBytes(".\scripts\GRIcons\SG.png")) IconSpeedKills = New GTA.Texture(File.ReadAllBytes(".\scripts\GRIcons\SK.png")) IconChains = New GTA.Texture(File.ReadAllBytes(".\scripts\GRIcons\CH.png")) End If Catch IconThrowFlames = Nothing IconPenanceStare1 = Nothing IconPenanceStare2 = Nothing IconPenanceStare3 = Nothing IconPenanceStare4 = Nothing IconSpitbullets = Nothing IconShotgun = Nothing IconSpeedKills = Nothing IconChains = Nothing End Try bIconThrowFlames = False iIconPenanceStare = 0 bIconSpitbullets = False bIconSpitbulletsLoop = False bIconShotgun = False bIconSpeedKills = False bIconChains = False SpitBulletBulCountFont = New GTA.Font SpitBulletBulCountFont.Color = System.Drawing.Color.DarkGray timeHealth = 0 aSetChainAttack = New AnimationSet("amb@garbage") aSetChainGrab = New AnimationSet("melee_counters") ReDim objChain(maxChainObj) Dim chainModel As Model = New Model("cj_proc_brick") vecChainDim = chainModel.GetDimensions vecChainDimIni = chainModel.GetDimensions player.character.metadata.isInWater = false TargetCheckpoint = new Checkpoint TargetCheckpoint.color = System.Drawing.Color.FromArgb(100, System.Drawing.Color.red) TargetCheckpoint.diameter = 2.0 TargetLight = New Light TargetLight.Color = System.Drawing.Color.Red TargetLight.Enabled = False TargetLight.Intensity = 50 TargetLight.Position = Player.Character.GetBonePosition(Bone.Head) + Vector3.WorldUp / 2 aSetChainClimb = New AnimationSet("jump_std") targetObjectAux = World.CreateObject("cj_proc_brick", Vector3.Zero.Around(300)) targetObjectAux.FreezePosition = True targetObjectAux.Visible = False targetObjectAux.Collision = False End If End Sub Private Sub GraphicsEventHandler(ByVal sender As Object, ByVal e As GTA.GraphicsEventArgs) Handles mybase.PerFrameDrawing FPS = e.graphics.FrameTime If isGhostRider AndAlso bShowIcons Then If bIconThrowFlames Then If Exists(IconThrowFlames) Then e.Graphics.DrawSprite(IconThrowFlames, 35, 35, 100, 80, 0) Else If Exists(IconThrowFlames) Then e.Graphics.DrawSprite(IconThrowFlames, 35, 35, 65, 50, 0, System.Drawing.Color.SlateGray) End If If iIconPenanceStare = 1 Then If Exists(IconPenanceStare1) Then e.Graphics.DrawSprite(IconPenanceStare1, 105, 35, 100, 80, 0) ElseIf iIconPenanceStare = 2 Then If Exists(IconPenanceStare2) Then e.Graphics.DrawSprite(IconPenanceStare2, 105, 35, 100, 80, 0) ElseIf iIconPenanceStare = 3 Then If Exists(IconPenanceStare3) Then e.Graphics.DrawSprite(IconPenanceStare3, 105, 35, 100, 80, 0) ElseIf iIconPenanceStare = 4 Then If Exists(IconPenanceStare4) Then e.Graphics.DrawSprite(IconPenanceStare4, 105, 35, 100, 80, 0) Else If Exists(IconPenanceStare1) Then e.Graphics.DrawSprite(IconPenanceStare1, 105, 35, 65, 50, 0, System.Drawing.Color.SlateGray) End If If bIconSpitbullets OrElse bIconSpitbulletsLoop Then If Exists(IconSpitbullets) Then e.Graphics.DrawSprite(IconSpitbullets, 175, 35, 100, 80, 0) Else If Exists(IconSpitbullets) Then e.Graphics.DrawSprite(IconSpitbullets, 175, 35, 65, 50, 0, System.Drawing.Color.SlateGray) End If If bIconShotgun Then If Exists(IconShotgun) Then e.Graphics.DrawSprite(IconShotgun, 245, 35, 100, 80, 0) Else If Exists(IconShotgun) Then e.Graphics.DrawSprite(IconShotgun, 245, 35, 65, 50, 0, System.Drawing.Color.SlateGray) End If If bIconSpeedKills Then If Exists(IconSpeedKills) Then e.Graphics.DrawSprite(IconSpeedKills, 315, 35, 100, 80, 0) Else If Exists(IconSpeedKills) Then e.Graphics.DrawSprite(IconSpeedKills, 315, 35, 65, 50, 0, System.Drawing.Color.SlateGray) End If If bIconChains Then If Exists(IconChains) Then e.Graphics.DrawSprite(IconChains, 385, 35, 100, 80, 0) Else If Exists(IconChains) Then e.Graphics.DrawSprite(IconChains, 385, 35, 65, 50, 0, System.Drawing.Color.SlateGray) End If If Not bInfiniteSpitBullets Then e.Graphics.DrawText(SpitBulletBulCount.ToString, 145, 10, SpitBulletBulCountFont) End If if depMsg <> "" then e.graphics.drawtext(depMsg, 10, 10) End Sub private function getInterval Return Me.Interval * (25 / Game.FPS) end function Private Sub PlaySound(ByVal sFile) Try If bPlaySounds Then Dim Sound As New System.Media.SoundPlayer() Sound.SoundLocation = sFile Sound.Load() Sound.Play() End If Catch End Try End Sub Private Sub msg(ByVal smsg As String, ByVal duracao As int32) If bShowMsgs Then _ Native.Function.Call("PRINT_STRING_WITH_LITERAL_STRING_NOW", "STRING", smsg, duracao, 1) End Sub Private Function random(ByVal min As int32, ByVal max As int32) Dim rnd As random = New random(System.DateTime.Now.Millisecond) random = rnd.next(min, max) End Function Private Sub console_CMD(ByVal sender As Object, ByVal e As ConsoleEventArgs) Handles MyBase.ConsoleCommand End Sub Private Sub waitEx(ByVal time As int32) Dim c As Double = 0 While c < time c += getInterval wait(getInterval) End While End Sub Shadows Sub keyDown(ByVal sender As Object, ByVal e As GTA.KeyEventArgs) Handles MyBase.KeyDown If bWaitLoad Then Exit Sub If e.Key = hkActivate Then wasGROnceCont = 4000 wasGROnce = True isGhostRider = Not isGhostRider If isGhostRider Then Player.Character.MakeProofTo(False, True, True, collisionProof, True) World.AddExplosion(Player.Character.Position.ToGround, ExplosionType.Molotov, 1.0, True, False, 0.0F) bSpawnBike = bAutoSpawnBike Else targetObjectAux.FreezePosition = True leaveChains() End If End If if isGhostRider andalso (e.key = hkChainClimb) andalso game.iskeypressed(hkAimKey) andalso isChainOn then TargetCheckpoint.visible = true TargetLight.enabled = true end if If isGhostRider AndAlso Not isChainOn() AndAlso ((e.Key = hkThrowFlames) OrElse (e.Key = hkSpitBullets) OrElse (e.Key = hkPenanceStare)) Then _ PreviousWeapon = Player.Character.Weapons.Current If isGhostRider AndAlso Not isChainOn() AndAlso (e.Key = hkThrowFlames) Then _ throwFlames If isGhostRider AndAlso (e.Key = hkSpawnBike) Then _ spawnBike() If isGhostRider AndAlso Not isChainOn() AndAlso (e.Key = hkSpitBullets) AndAlso Game.isKeyPressed(hkAimKey) Then If Not Player.Character.Weapons.inSlot(WeaponSlot.Thrown).isPresent Then Native.Function.Call("GIVE_WEAPON_TO_CHAR", Player.Character, 4, 1, 1) if (player.character.weapons.current <> WeaponSlot.Thrown) then Player.Character.Weapons.inSlot(WeaponSlot.Thrown).Select End If End If If isGhostRider AndAlso (e.Key = hkBikeNitro) AndAlso Player.Character.Metadata.DidWallRide Then _ World.AddExplosion(Player.Character.Position, ExplosionType.Molotov, 1.0, True, False, 5.0F) If isGhostRider AndAlso (e.Key = hkEnterVehicleKey) Then If Exists(Player.Character.CurrentVehicle) Then currVehDim = Player.Character.CurrentVehicle.model.getdimensions Native.Function.Call("SET_CAR_WATERTIGHT", Player.Character.CurrentVehicle, True) end if If Native.Function.Call(Of Boolean)("IS_CHAR_IN_WATER", Player.Character) AndAlso Not Exists(Player.Character.CurrentVehicle) Then Dim vAux As Vehicle vAux = World.GetClosestVehicle(Player.Character.Position, 3.0F) If Exists(vAux) AndAlso vAux.Model.isBike Then Player.Character.Task.ClearAllImmediately() Player.Character.Task.GoTo(vAux.Position, False) vAux.ApplyForce(Vector3.WorldUp * 5) Wait(500) Player.Character.Task.ClearAllImmediately() Player.Character.Task.WarpIntoVehicle(vAux, VehicleSeat.Driver) End If End If End If If isGhostRider AndAlso (e.Key = hkPenanceStare) Then pChainTargetGrab = Nothing vChainTargetGrab = Nothing PenanceStareFindPed() If Exists(PenanceStarePedTmp) AndAlso (PenanceStarePedTmp.Health > 0) Then PenanceStareMod = 0 PenanceStareCP.Position = PenanceStarePedTmp.Position.ToGround PenanceStareCP.Visible = True PSLight.Position = PenanceStareCP.Position + Vector3.WorldUp / 2 PSLight.Enabled = True If Exists(PenanceStarePedTmp.CurrentVehicle) Then PenanceStarePedTmp.CurrentVehicle.EngineHealth = 0 PenanceStarePedTmp.CurrentVehicle.EngineRunning = False End If Else If PenanceStareCP.Visible Then PenanceStareCP.Visible = False If PSLight.Enabled Then PSLight.Enabled = False iIconPenanceStare = 0 End If End If If isGhostRider AndAlso (e.Key = hkEquipChain) Then _ spawnChain If isGhostRider AndAlso isChainOn() AndAlso (e.Key = hkChainAttack1) AndAlso Game.isKeyPressed(hkAimKey) Then pChainTarget = Nothing vChainTarget = Nothing chainAttackMode = 1 If Not chainFindTarget() Then chainAttackMode = 0 Else timeOutMoveChain = 0 If Exists(pChainTarget) AndAlso Exists(pChainTarget.CurrentVehicle) Then pChainTarget.CurrentVehicle.EngineHealth = 1 pChainTarget.CurrentVehicle.EngineRunning = False End If If Exists(vChainTargetGrab) AndAlso vChainTargetGrab.Model.isHelicopter Then vChainTargetGrab.EngineHealth = -1 If Exists(vChainTarget) Then vChainTarget.EngineHealth = 0 PlaySound(".\scripts\GRSounds\ChainDrag.wav") chainThrowAnim() Try If Not Exists(vChainTargetGrab) Then While (Exists(vChainTarget) OrElse Exists(pChainTarget)) AndAlso _ Not moveChainToVec(Player.Character.Position + (Player.Character.Direction * 2) + Vector3.WorldUp * 4, 1, 200) Wait(getInterval) Player.Character.Heading = Game.CurrentCamera.Heading End While Else vChainTargetGrab.FreezePosition = True vChainTargetGrab.FreezePosition = False Dim vecAux As Vector3 = vChainTargetGrab.Position + Player.Character.Direction + Vector3.WorldUp * 9 While (Exists(vChainTarget) OrElse Exists(pChainTarget)) AndAlso Not moveChainToVec(vecAux, 1, 50) Wait(getInterval) Player.Character.Heading = Game.CurrentCamera.Heading End While 'vChainTargetGrab.FreezePosition = True 'vChainTargetGrab.FreezePosition = False If Exists(pChainTarget) Then 'vChainTargetGrab.Metadata.ChainTargetPos = pChainTarget.Position + Vector3.WorldDown If Exists(pChainTarget.CurrentVehicle) Then vChainTarget = pChainTarget.CurrentVehicle pChainTarget = Nothing grabTargetPos = vChainTarget.Position + Vector3.WorldDown Else grabTargetPos = pChainTarget.Position + Vector3.WorldDown End If Else 'vChainTargetGrab.Metadata.ChainTargetPos = vChainTarget.Position + Vector3.WorldDown grabTargetPos = vChainTarget.Position + Vector3.WorldDown End If End If PlaySound(".\scripts\GRSounds\ChainStart.wav") If Exists(pChainTargetGrab) Then pChainTargetGrab.FreezePosition = True pChainTargetGrab.FreezePosition = False pChainTargetGrab.isOnFire = True pChainTargetGrab.isRagdoll = True timeOutMoveChain = 0 End If If Exists(vChainTargetGrab) Then vChainTargetGrab.CanBeDamaged = True Catch chainAttackMode = 0 vChainTarget = Nothing pChainTarget = Nothing vChainTargetGrab = Nothing pChainTargetGrab = Nothing End Try End If End If If isGhostRider AndAlso isChainOn() AndAlso (e.Key = hkChainAttackGrab) AndAlso Game.isKeyPressed(hkAimKey) Then pChainTarget = Nothing pChainTargetGrab = Nothing vChainTarget = Nothing vChainTargetGrab = Nothing chainAttackMode = 2 If Not chainFindTarget() Then chainAttackMode = 0 pChainTarget = Nothing pChainTargetGrab = Nothing vChainTarget = Nothing vChainTargetGrab = Nothing Else If Exists(pChainTargetGrab) AndAlso Exists(pChainTargetGrab.CurrentVehicle) Then pChainTargetGrab.CurrentVehicle.EngineHealth = 1 pChainTargetGrab.CurrentVehicle.EngineRunning = False End If Dim pAux As Ped = pChainTargetGrab pChainTargetGrab = Nothing Player.Character.Heading = Game.CurrentCamera.Heading PlaySound(".\scripts\GRSounds\ChainDrag.wav") chainGrabAnim() If Not Exists(vChainTargetGrab) Then While Not moveChainToVec(Player.Character.Position + (Player.Character.Direction * 2) + Vector3.WorldUp * 4, 1, 50) Wait(getInterval) Player.Character.Heading = Game.CurrentCamera.Heading End While Else If Not vChainTargetGrab.Model.isHelicopter Then vChainTargetGrab.EngineHealth = 0 End If Player.Character.Heading = Game.CurrentCamera.Heading pChainTargetGrab = pAux If Exists(vChainTargetGrab) Then vChainTargetGrab.CanBeDamaged = True End If End If If isGhostRider AndAlso (e.Key = hkSpitBullets) AndAlso isChainOn() Then if (player.character.weapons.current <> weapon.Misc_Object) then Player.Character.Weapons.inSlot(Weapon.Misc_Object).Select End If If isGhostRider AndAlso (e.Key = hkControlKey) Then hkcontrolkeyDownTime = 0 End If End Sub shadows Sub keyUp(ByVal sender As Object, ByVal e As GTA.KeyEventArgs) Handles MyBase.KeyUp if isGhostRider andalso (e.key = hkChainClimb) andalso game.iskeypressed(hkAimKey) andalso isChainOn then TargetCheckpoint.visible = false TargetLight.enabled = false ChainWarpToPos elseif (e.key = hkChainClimb) orelse (e.key = hkAimKey) then TargetCheckpoint.visible = false TargetLight.enabled = false end if If isGhostRider AndAlso (e.key = hkPenanceStare) Then chainAttackMode = 2 PenanceStareCatchPed if exists(PenanceStarePedTmp) andalso exists(PenanceStarePedTmp.currentvehicle) then PenanceStarePedTmp.currentvehicle.enginehealth = 1 PenanceStarePedTmp.currentvehicle.EngineRunning = false end if chainAttackMode = 0 End If 'if isGhostRider AndAlso (e.key = hkSpitBullets) andalso isChainOn andalso (player.character.weapons.current <> WeaponSlot.Thrown) Then 'player.character.weapons.inslot(WeaponSlot.Thrown).select 'end if End Sub private sub wheelieJump If exists(player.character.currentvehicle) AndAlso ((Player.Character.CurrentVehicle.Model.isBike orelse player.character.currentvehicle.metadata.isGRTransformed)) Then Dim vecAux, vecAux2 As vector3 if (hkcontrolkeyDownTime <= 200) andalso ((world.GetGroundPosition(player.character.position, GroundType.Lowest).distanceto(player.character.position) < 1.1) orelse _ player.character.currentvehicle.isonallwheels orelse ((onAllWheelsCont > 500) andalso native.function.call(Of Boolean)("IS_CAR_IN_WATER", player.character.currentvehicle))) then world.addexplosion(player.character.currentvehicle.position.toground, explosionType.molotov, 1.0, True, False, 0.0F) vecAux.z = 8 if not game.iskeypressed(hkAimKey) then vecAux2.y = 0.13 onAllWheelsCont = 1000 else vecAux2.y = -0.2 end if if player.character.currentvehicle.metadata.isGRTransformed then if currVehDim.y > 8 then vecAux.z = 10 if currVehDim.y > 10 then vecAux2.y = 1.2 else vecAux2.y = 1 end if else vecAux2.y = 0.3 end if end if else vecAux.z = 0.3 vecAux2.y = 1 end if hkcontrolkeyDownTime = 0 player.character.currentvehicle.applyforce(vecAux, vecAux2) End If end sub private sub HitEffect if player.character.isInMeleeCombat then Dim bSlowed As Boolean = False Dim vecAux As Vector3 For Each p As ped In world.getpeds(player.character.position, 2.0) If native.function.call(Of Boolean)("HAS_CHAR_BEEN_DAMAGED_BY_CHAR", p, player.character) Then p.isragdoll = true p.isonfire = true if bTimeEffectForHit then game.timescale = TimeEffectForHit bSlowed = true end if vecAux = Player.Character.Direction vecAux.Z = Game.CurrentCamera.Direction.Z p.Velocity = vecAux * 15 * HitForce native.function.call("CLEAR_CHAR_LAST_DAMAGE_ENTITY", p) native.function.call("CLEAR_CHAR_LAST_WEAPON_DAMAGE", p) End If Next For Each v As vehicle In world.getvehicles(player.character.position, 7.0) If native.function.call(Of Boolean)("HAS_CAR_BEEN_DAMAGED_BY_CHAR", v, player.character) Then if bTimeEffectForHit then game.timescale = TimeEffectForHit bSlowed = true end if vecAux = Player.Character.Direction vecAux.Z = Game.CurrentCamera.Direction.Z playsound(".\scripts\GRSounds\CarHit1.wav") v.ApplyForce((vecAux + Vector3.WorldUp / 2) * 10 * HitForce) native.function.call("CLEAR_CAR_LAST_DAMAGE_ENTITY", v) native.function.call("CLEAR_CAR_LAST_WEAPON_DAMAGE", v) End If Next if bSlowed then player.character.health += 33 wait(2000) game.timescale = 1.0 end if end if end sub Private Sub throwFlames Dim timeOut As int16 = 0 Dim aSet As animationset = New animationset("melee_counters") bIconThrowFlames = True 'PlaySound(".\scripts\GRSounds\burn.wav") While timeOut < 5000 If (Not player.character.animation.isplaying(aSet, "dodge_back")) Then Native.Function.Call("STOP_PTFX", effectThrow1) Native.Function.Call("STOP_PTFX", effectThrow2) wait(getInterval) player.character.health += 3 effectThrow1 = Native.Function.Call(Of int32)("START_PTFX_ON_PED_BONE", "exp_fireball", Player.Character, 0, 0.15, 0, 0, 0, 0, Bone.head, 0.01) ' this makes the noise, basically effectThrow2 = Native.Function.Call(Of int32)("START_PTFX_ON_PED_BONE", "shot_directed_flame", Player.Character, 0, 0.25, 0, -90.0F, 0, 0, Bone.head, 1.5) ' one more falme, 2x bigger If Not game.iskeypressed(hkAccelKey) AndAlso (player.character.velocity.distanceto(vector3.zero) < 1) AndAlso Not exists(player.character.currentvehicle) Then _ player.character.animation.play(aSet, "dodge_back", 1.0, animationflags.unknown01) End If timeOut += Me.Interval * 4 wait(getInterval) updateLightPos findPedVehAndBurnHim() ' ...search for peds/vehicles in the way an burn them If game.iskeypressed(hkAccelKey) AndAlso Not exists(player.character.currentvehicle) AndAlso (player.character.velocity.distanceto(vector3.zero) < 1) Then _ player.character.heading = game.currentcamera.heading If (player.character.velocity.distanceto(vector3.zero) > 1) AndAlso player.character.animation.isplaying(aSet, "dodge_back") Then _ player.character.task.clearallimmediately() flames() flamesBike() player.character.health += 1 End While bIconThrowFlames = False Native.Function.Call("STOP_PTFX", effectThrow1) Native.Function.Call("STOP_PTFX", effectThrow2) flames() flamesBike() End Sub Private Sub spawnBike If player.character.isinvehicle orelse player.character.isragdoll orelse player.character.isgettingup Then Exit Sub Dim vTmp As vehicle dim vecAux, vecRot as vector3 dim pAux as ped = nothing dim TimeOut as int16 = 0 dim GRBikeModel as model = nothing for each v as vehicle in world.getallvehicles if exists(v) then v.metadata.launchControl = 0 if v.model = GRBike then v.delete end if next GRBikeModel = new model(GRBike) vecAux = (player.Character.position + (player.Character.direction * 20)) 'vecAux.z = world.GetGroundPosition(vecAux, GroundType.Lowest).z + 1 If Not native.function.call(Of Boolean)("IS_CHAR_IN_WATER", player.character) Then ' if (player.character.position.z - world.GetNextPositionOnPavement(player.character.position).z > 3) orelse _ ' ((world.GetNextPositionOnStreet(player.character.position).distanceto(player.character.position) > 7) andalso _ ' (world.GetNextPositionOnPavement(player.character.position).distanceto(player.character.position) > 7)) then ' vecAux = player.Character.position + (player.Character.direction * 2) ' 'vecAux.z = world.GetGroundPosition(vecAux, GroundType.Lowest).z + 1 ' ' vTmp = world.createvehicle(GRBikeModel, vecAux) ' else PlaySound(".\scripts\GRSounds\whistle.wav") 'vecAux = world.GetNextPositionOnStreet(vecAux) 'if vecAux.distanceto(player.character.position) > world.GetNextPositionOnPavement(player.character.position).distanceto(player.character.position) then _ ' vecAux = world.GetNextPositionOnPavement(player.character.position) world.addexplosion(vecAux, explosionType.molotov, 1.0, True, False, 0.0F) vTmp = world.createvehicle(GRBikeModel.hash, vecAux) while not exists(vTmp) andalso (timeOut < 500) wait(me.interval) timeOut += me.interval end while if not exists(vTmp) then msg("There is something wrong...", 5000) exit sub end if vTmp.metadata.GRprop = true native.function.call("DETACH_CAR", vTmp) vTmp.heading = player.character.heading - 180 vTmp.cantiresburst = False vTmp.makeproofto(True, True, True, True, True) vTmp.freezeposition = False timeOut = 0 paux = vTmp.CreatePedOnSeat(vehicleseat.driver) while not exists(pAux) andalso (timeOut < 500) wait(me.interval) timeOut += me.interval end while if exists(paux) then pAux.visible = false pAux.MakeProofTo(True, True, True, True, True) end if vTmp.applyforce(vector3.worldup * 7) wait(1000) if not exists(vTmp) then msg("There is something wrong...", 3000) exit sub end if vecAux = vTmp.position if exists(paux) then pAux.task.DriveTo(player.character.position + player.character.direction / 2, 100, true, true) Player.Character.MakeProofTo(False, True, True, collisionProof, True) TimeOut = 0 while (vTmp.position.distanceto((player.character.position + player.character.direction)) > 3) andalso (TimeOut < 3500) TimeOut += me.interval general_tick(nothing, nothing) vTmp.applyforce((player.character.position - vTmp.position) / 30) throwCars(vTmp) player.character.health += 1 wait(me.interval) if vTmp.speed < 1.5 then vTmp.applyforce((player.character.position - vTmp.position) / 2) if vTmp.position.z < player.character.getboneposition(bone.rightfoot).z then vTmp.applyforce(vector3.worldup) 'vTmp.applyforce((player.character.position - vTmp.position) / 30, vector3.worlddown) if vTmp.position.toground.distanceto(vTmp.position) < 1 then world.startfire(vTmp.position.toground) if (TimeOut > 500) andalso (vecAux.distanceto2d(vTmp.position) < 1) then TimeOut = 3500 vecRot = vTmp.rotation if vecRot.x > 65 then vecRot.x = 65 vTmp.rotation = vecRot elseif vecRot.x < 55 then vTmp.applyforce((player.character.position - vTmp.position) / 30, vector3.worlddown) end if if game.iskeypressed(hkSpawnBike) then TimeOut = 3500 end while vTmp.metadata.isGRBike = true if TimeOut >= 3500 then if exists(paux) then pAux.delete msg("There is something wrong...", 3000) vTmp.makeproofto(False, True, False, collisionProof, False) exit sub end if vTmp.freezeposition = true wait(50) vTmp.freezeposition = false vTmp.applyforce(vector3.worlddown * 2) world.addexplosion(vTmp.position, explosionType.molotov, 1.0, True, False, 0.0F) if exists(paux) then pAux.task.leavevehicle TimeOut = 0 while exists(paux) andalso pAux.isinvehicle andalso (TimeOut < 500) wait(me.interval) TimeOut += me.interval player.character.health += 1 end while if exists(pAux) then pAux.delete if TimeOut >= 500 then 'msg("There is something wrong...", 3000) vTmp.makeproofto(False, True, False, collisionProof, False) exit sub end if vTmp.makeproofto(False, True, False, collisionProof, false) vTmp = nothing 'end if Else vTmp = world.createvehicle(GRBikeModel.hash, (player.Character.position + (player.Character.direction * 2))) End If If exists(vTmp) Then vTmp.metadata.GRprop = true native.function.call("DETACH_CAR", vTmp) vTmp.cantiresburst = False vTmp.makeproofto(False, True, False, collisionProof, False) vTmp.freezeposition = False world.addexplosion(vTmp.position.toground, explosionType.molotov, 1.0, True, False, 0.0F) End If Player.Character.MakeProofTo(False, True, True, collisionProof, True) End Sub Private Sub findPedVehAndBurnHim() ' search for peds/vehicles in the way an burn them Dim vec As vector3 = player.character.position + (player.character.direction / 4) ' take the initial vector While vec.distanceto(player.character.position) <= 8 ' while the distance is less than 8.x, increment the vector with the direction of the player vec += player.character.direction ' it will result in steps of 1 distance For Each p As ped In world.getpeds(vec, 1.5) ' get peds that are close to the vector If exists(p) AndAlso (p <> player.character) Then If Not p.isonfire Then p.isonfire = True ' burn it p.applyforce(player.character.direction / 8.5) End If Next For Each v As vehicle In world.getvehicles(vec, 1.5) ' get vehicles that are close to the vector If exists(v) AndAlso (v <> player.character.currentvehicle) Then v.petroltankhealth = -1 ' set the petroltank on fire v.applyforce(player.character.direction / 5.8) End If Next End While End Sub Private Sub CheckArrest If Native.Function.Call(Of Boolean)("IS_PLAYER_BEING_ARRESTED") AndAlso (BeingArrestedCount < 5000) Then BeingArrestedCount += 300 end if End Sub Private Sub general_tick(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Tick If bWaitLoad Then LoadSettingsAux exit sub end if If bPrintSign Then bPrintSign = False Game.Console.Print("Ghost Rider Script Mod by JulioNIB v" & sVersion) End If If Not Player.Character.isAlive OrElse (BeingArrestedCount > 1200) Then isGhostRider = False End If If isGhostRider And Not Player.Character.Metadata.isGhostRider Then Player.Character.Metadata.isGhostRider = True l1.Enabled = True l2.Enabled = True l3.Enabled = True If mGR <> Nothing Then Player.Model = mGR Player.Character.Metadata.resetModel = True Player.Character.MakeProofTo(False, True, True, collisionProof, True) Player.NeverGetsTired = True If bSpawnBike Then bSpawnBike = False spawnBike() End If targetObjectAux.FreezePosition = False End If If isGhostRider Then If timeScript < 10000 Then timeScript += Me.Interval Else timeScript = 0 End If If Game.isGameKeyPressed(GameKey.Aim) Then targetObjectAux.Velocity = (Player.Character.Position - targetObjectAux.Position) * 2 targetObjectAux.Rotation = Game.CurrentCamera.Rotation DrawTargetHUD() End If If (timeScript Mod 5000 = 0) AndAlso isChainOn() Then stopChainFire() startChainFire() End If If timeScript Mod 200 = 0 Then HeadEffectScale = Player.Character.Health / PlMaxHealth End If If (timeScript Mod 500 = 0) Then If Exists(Player.Character.CurrentVehicle) AndAlso (Player.Character.CurrentVehicle.Model.isBike) Then Player.Character.CurrentVehicle.Repair() If RequipChainCounter > 0 Then RequipChainCounter = 0 spawnChain(True) End If End If If timeScript Mod 50 = 0 Then If Exists(Player.Character.CurrentVehicle) AndAlso Exists(Player.Character.CurrentVehicle.GetPedOnSeat(VehicleSeat.Driver)) Then Player.Character.CurrentVehicle.DoorLock = DoorLock.None If Game.isKeyPressed(hkChainClimb) AndAlso Game.isKeyPressed(hkAimKey) AndAlso isChainOn() Then TargetCheckpoint.Position = targetedGround(200) TargetLight.Position = TargetCheckpoint.Position + Vector3.WorldUp / 2 If Exists(ChainTargetVeh) Then TargetCheckpoint.Position = ChainTargetVeh.Position + Vector3.WorldDown TargetLight.Position = TargetCheckpoint.Position + Vector3.WorldUp * 1.5 End If End If End If If Game.isGameKeyPressed(GameKey.Aim) AndAlso ((Player.Character.Weapons.Current = Weapon.Shotgun_Basic) OrElse (Player.Character.Weapons.Current = Weapon.Shotgun_Baretta)) _ AndAlso Not Player.Character.isInAir Then Native.Function.Call("SET_CHAR_ALL_ANIMS_SPEED", Player.Character, 5.0) Game.TimeScale = 0.2 Else Native.Function.Call("SET_CHAR_ALL_ANIMS_SPEED", Player.Character, 1.0) Game.TimeScale = 1.0 End If If Game.isKeyPressed(hkControlKey) AndAlso (hkcontrolkeyDownTime < 1000) Then If Player.Character.isSittingInVehicle Then hkcontrolkeyDownTime += Me.Interval Else hkcontrolkeyDownTime = 0 End If End If If Not Game.isKeyPressed(hkControlKey) AndAlso (hkcontrolkeyDownTime < 200) AndAlso (hkcontrolkeyDownTime > 0) Then wheelieJump() End If If timeScript Mod 300 = 0 Then If Not Player.Character.Weapons.inSlot(WeaponSlot.Shotgun).isPresent AndAlso Not Native.Function.Call(Of Boolean)("IS_PLAYER_BEING_ARRESTED") Then _ Native.Function.Call("GIVE_WEAPON_TO_CHAR", Player.Character, Weapon.Shotgun_Basic, 500, 1) CheckArrest() End If TransformVehicle() HitEffect() updateLightPos() shotgunEffect() chainTick() If timer1 = Me.Interval Then Flames() timer1 += Me.Interval If timer1 >= Me.Interval * 5 Then timer1 = Me.Interval flamesBike() If Exists(Player.Character.CurrentVehicle) Then If (timeScript Mod 500 = 0) Then Player.Character.CurrentVehicle.MakeProofTo(False, True, True, collisionProof, True) End If If vehLastVehicle = Nothing Then vehLastVehicle = Player.Character.CurrentVehicle ElseIf Exists(vehLastVehicle) Then vehLastVehicle.MakeProofTo(False, True, False, False, False) vehLastVehicle.CanBeDamaged = True vehLastVehicle.CanBeVisiblyDamaged = True vehLastVehicle = Nothing End If throwCars() wallRide() If Exists(sender) AndAlso Game.isKeyPressed(hkSpitBullets) AndAlso Not isChainOn() AndAlso _ (Player.Character.Weapons.inSlot(WeaponSlot.Thrown).isPresent OrElse Not Game.isKeyPressed(hkAimKey)) Then If (Player.Character.Weapons.Current <> WeaponSlot.Thrown) Then Player.Character.Weapons.inSlot(WeaponSlot.Thrown).Select() spitBulletsAux() Else bIconSpitbullets = False End If If timeHealth >= 100 Then timeHealth = 0 Player.Character.Health += 5 Else timeHealth += 10 End If WaterRide() If Game.isKeyPressed(hkPenanceStare) AndAlso Exists(PenanceStarePedTmp) Then If PenanceStareSpeechAux < 1000 Then PenanceStareSpeechAux += Me.Interval If PenanceStareMod < 10000 Then PenanceStareMod += Me.Interval * 2 End If PenanceStareCP.Position = PenanceStarePedTmp.Position.ToGround PSLight.Position = PenanceStareCP.Position + Vector3.WorldUp / 2 Dim effAux As Int32 If PenanceStareMod < 1000 Then PenanceStareCP.Color = System.Drawing.Color.FromArgb(100, System.Drawing.Color.White) PSLight.Intensity = 20 iIconPenanceStare = 1 ElseIf PenanceStareMod < 2000 Then PenanceStareCP.Color = System.Drawing.Color.FromArgb(100, System.Drawing.Color.Yellow) PSLight.Intensity = 35 If PenanceStareMod Mod 100 = 0 Then effAux = Player.Character.Metadata.PSEffect1 Native.Function.Call("STOP_PTFX", effAux) Player.Character.Metadata.PSEffect1 = _ Native.Function.Call(Of Int32)("START_PTFX_ON_PED_BONE", "exp_fireball", Player.Character, 0.1, 0, 0, 0, 0, 0, PSBoneAttach, 0.03) End If iIconPenanceStare = 2 ElseIf PenanceStareMod < 3000 Then PenanceStareCP.Color = System.Drawing.Color.FromArgb(100, System.Drawing.Color.Orange) PSLight.Intensity = 65 If PenanceStareMod Mod 50 = 0 Then effAux = Player.Character.Metadata.PSEffect1 Native.Function.Call("STOP_PTFX", effAux) Player.Character.Metadata.PSEffect1 = _ Native.Function.Call(Of Int32)("START_PTFX_ON_PED_BONE", "exp_fireball", Player.Character, 0.1, 0, 0, 0, 0, 0, PSBoneAttach, 0.03) End If If PenanceStareMod Mod 100 = 0 Then effAux = Player.Character.Metadata.PSEffect3 Native.Function.Call("STOP_PTFX", effAux) Player.Character.Metadata.PSEffect3 = _ Native.Function.Call(Of Int32)("START_PTFX_ON_PED_BONE", "ambient_fire_generic", Player.Character, 0.1, 0, 0, 0, 0, 0, PSBoneAttach, 1.2) End If iIconPenanceStare = 3 Else PenanceStareCP.Color = System.Drawing.Color.FromArgb(100, System.Drawing.Color.Red) PSLight.Intensity = 75 If PenanceStareMod Mod 50 = 0 Then effAux = Player.Character.Metadata.PSEffect1 Native.Function.Call("STOP_PTFX", effAux) Player.Character.Metadata.PSEffect1 = _ Native.Function.Call(Of Int32)("START_PTFX_ON_PED_BONE", "exp_fireball", Player.Character, 0.1, 0, 0, 0, 0, 0, PSBoneAttach, 0.03) End If If PenanceStareMod Mod 100 = 0 Then effAux = Player.Character.Metadata.PSEffect3 Native.Function.Call("STOP_PTFX", effAux) Player.Character.Metadata.PSEffect3 = _ Native.Function.Call(Of Int32)("START_PTFX_ON_PED_BONE", "ambient_fire_generic", Player.Character, 0.1, 0, 0, 0, 0, 0, PSBoneAttach, 1.2) End If iIconPenanceStare = 4 End If PSLight.Color = PenanceStareCP.Color End If PenanceStare() If Not bInfiniteSpitBullets AndAlso (timeScript Mod 500 = 0) Then For Each p As Ped In World.GetPeds(Player.Character.Position, 50.0F) If Native.Function.Call(Of Boolean)("HAS_CHAR_BEEN_DAMAGED_BY_CHAR", Player.Character, p) AndAlso _ (p.Weapons.Current <> Weapon.Unarmed) AndAlso (p.Weapons.Current <> Weapon.Melee_Knife) AndAlso (p.Weapons.Current <> Weapon.Melee_PoolCue) AndAlso _ (p.Weapons.Current <> Weapon.Melee_BaseballBat) Then SpitBulletBulCount += 10 If SpitBulletBulCount > 1000 Then SpitBulletBulCount = 1000 End If Next Native.Function.Call("CLEAR_CHAR_LAST_DAMAGE_ENTITY", Player.Character) End If If Player.Character.Metadata.invincible AndAlso Not Exists(Player.Character.CurrentVehicle) Then Player.Character.Invincible = False Player.Character.Metadata.invincible = False End If Else timeScript = 0 SpitBulletBulCount = 0 BeingArrestedCount = 0 If Player.Character.Metadata.resetModel Then Player.Character.Metadata.resetModel = False l1.Enabled = False l2.Enabled = False l3.Enabled = False Native.Function.Call("STOP_PTFX", flameW1) Native.Function.Call("STOP_PTFX", flameW2) Native.Function.Call("STOP_PTFX", flameW3) Native.Function.Call("STOP_PTFX", flameW4) Native.Function.Call("STOP_PTFX", flameH1) Native.Function.Call("STOP_PTFX", flame1) Native.Function.Call("STOP_PTFX", flame2) Native.Function.Call("STOP_PTFX", flame3) Native.Function.Call("STOP_PTFX", flame4) Native.Function.Call("STOP_PTFX", effectThrow1) Native.Function.Call("STOP_PTFX", effectThrow2) World.ExtinguishFire(Player.Character.Position, 5.0) Wait(1000) Player.Character.MakeProofTo(False, False, False, False, False) If Exists(Player.Character.CurrentVehicle) Then Player.Character.CurrentVehicle.MakeProofTo(False, False, False, False, False) If mGR <> Nothing Then Player.Model = mPL Native.Function.Call("SET_CHAR_DEFAULT_COMPONENT_VARIATION", Player.Character, True) End If End If Try If (wasGROnceCont > 0) AndAlso Exists(Player.Character.CurrentVehicle) AndAlso Player.Character.CurrentVehicle.Model.isBike Then Player.Character.ForceHelmet(False) wasGROnceCont -= getInterval() End If If wasGROnce AndAlso ((Exists(Player.Character.CurrentVehicle) AndAlso Not Player.Character.CurrentVehicle.Model.isBike) OrElse Not Exists(Player.Character.CurrentVehicle)) Then _ wasGROnceCont = 4000 Catch End Try End Sub Private Sub DrawTargetHUD() If timeCheckTargets <= 0 Then timeCheckTargets = 250 pedsTarget = World.GetAllPeds vehsTarget = World.GetAllVehicles Else timeCheckTargets -= getInterval() End If pedTargeted = Nothing vehTargeted = Nothing Dim tmpDist As Double Dim tmpPosCompare As Vector3 If Exists(pedsTarget) Then For Each p As Ped In pedsTarget If Exists(p) AndAlso (p.Health > 0) AndAlso (p <> Player.Character) Then tmpDist = p.Position.DistanceTo(Game.CurrentCamera.Position) tmpPosCompare = Game.CurrentCamera.Position + Game.CurrentCamera.Direction * tmpDist If (p.Position.DistanceTo(tmpPosCompare) < 0.5) OrElse (p.GetBonePosition(Bone.Head).DistanceTo(tmpPosCompare) < 0.3) _ OrElse (p.GetBonePosition(Bone.LeftFoot).DistanceTo(tmpPosCompare) < 0.5) Then pedTargeted = p Exit For End If End If Next End If If Not Exists(pedTargeted) AndAlso Exists(vehsTarget) Then For Each v As Vehicle In vehsTarget If Exists(v) AndAlso (v <> Player.Character.CurrentVehicle) Then tmpDist = v.Position.DistanceTo(Game.CurrentCamera.Position) tmpPosCompare = Game.CurrentCamera.Position + Game.CurrentCamera.Direction * tmpDist If (v.Position.DistanceTo(tmpPosCompare) < 1.2) OrElse (v.GetOffsetPosition(Vector3.RelativeFront * 1.3).DistanceTo(tmpPosCompare) < 1.2) OrElse _ (v.GetOffsetPosition(Vector3.RelativeBack * 1.3).DistanceTo(tmpPosCompare) < 1.2) Then vehTargeted = v Exit For End If End If Next End If If Exists(vehTargeted) OrElse Exists(pedTargeted) Then Dim tmpPosHead As Vector3 Dim tmpPos As Vector3 Dim tmpXOff, tmpYOff As Double Dim diameterMulti As Double = 1 targetObjectRotation += 5 If targetObjectRotation > 360 Then targetObjectRotation = 0 tmpPos = targetObjectAux.Rotation tmpPos.Y = targetObjectRotation targetObjectAux.Rotation = tmpPos If Exists(pedTargeted) Then tmpDist = pedTargeted.Position.DistanceTo(Player.Character.Position) * 0.01 tmpPosHead = pedTargeted.GetBonePosition(Bone.Head) tmpXOff = 0.25 tmpYOff = 0.25 tmpPos = tmpPosHead + targetObjectAux.Position - targetObjectAux.GetOffsetPosition(Vector3.RelativeRight * tmpXOff) ElseIf Exists(vehTargeted) Then diameterMulti = 1.5 tmpDist = vehTargeted.Position.DistanceTo(Player.Character.Position) * 0.01 tmpPosHead = vehTargeted.Position - Game.CurrentCamera.Direction * 2 tmpXOff = 1 tmpYOff = 1 tmpPos = tmpPosHead + targetObjectAux.Position - targetObjectAux.GetOffsetPosition(Vector3.RelativeRight * tmpXOff * diameterMulti) Native.Function.Call("draw_corona", tmpPosHead.X, tmpPosHead.Y, tmpPosHead.Z, tmpDist * 100 * 0.8, 0, 0, 255, 0, 0) Native.Function.Call("DRAW_CHECKPOINT", tmpPosHead.X, tmpPosHead.Y, tmpPosHead.Z, tmpDist * 0.8, 255, 0, 0) End If Native.Function.Call("draw_corona", tmpPos.X, tmpPos.Y, tmpPos.Z, tmpDist * 100, 0, 0, 255, 0, 0) Native.Function.Call("DRAW_CHECKPOINT", tmpPos.X, tmpPos.Y, tmpPos.Z, tmpDist, 255, 0, 0) tmpPos = tmpPosHead + targetObjectAux.Position - targetObjectAux.GetOffsetPosition(Vector3.RelativeLeft * tmpXOff * diameterMulti) Native.Function.Call("draw_corona", tmpPos.X, tmpPos.Y, tmpPos.Z, tmpDist * 100, 0, 0, 255, 0, 0) Native.Function.Call("DRAW_CHECKPOINT", tmpPos.X, tmpPos.Y, tmpPos.Z, tmpDist, 255, 0, 0) tmpPos = tmpPosHead + targetObjectAux.Position - targetObjectAux.GetOffsetPosition(Vector3.RelativeBottom * tmpYOff * diameterMulti) Native.Function.Call("draw_corona", tmpPos.X, tmpPos.Y, tmpPos.Z, tmpDist * 100, 0, 0, 255, 0, 0) Native.Function.Call("DRAW_CHECKPOINT", tmpPos.X, tmpPos.Y, tmpPos.Z, tmpDist, 255, 0, 0) tmpPos = tmpPosHead + targetObjectAux.Position - targetObjectAux.GetOffsetPosition(Vector3.RelativeTop * tmpYOff * diameterMulti) Native.Function.Call("draw_corona", tmpPos.X, tmpPos.Y, tmpPos.Z, tmpDist * 100, 0, 0, 255, 0, 0) Native.Function.Call("DRAW_CHECKPOINT", tmpPos.X, tmpPos.Y, tmpPos.Z, tmpDist, 255, 0, 0) End If End Sub private sub TransformVehicle if not bTransformVehicle then exit sub if player.character.issittinginvehicle andalso exists(player.character.currentvehicle) andalso not player.character.currentvehicle.model.isbike andalso _ not native.function.call(Of Boolean)("IS_CAR_IN_WATER", player.character.currentvehicle) then if currVehDim = vector3.zero then currVehDim = player.character.currentvehicle.model.getdimensions dim vecDim as vector3 = currVehDim dim bTruck as boolean if not player.character.currentvehicle.metadata.isGRTransformed then player.character.currentvehicle.metadata.isGRTransformed = true If Player.Character.CurrentVehicle.Model.isHelicopter orelse Player.Character.CurrentVehicle.Model.isPlane orelse _ Player.Character.CurrentVehicle.Model.isBoat orelse Player.Character.CurrentVehicle.Model.isTrain then Exit sub native.function.call("BREAK_CAR_DOOR", Player.Character.currentvehicle, 4, false) player.character.currentvehicle.CanTiresBurst = false player.character.currentvehicle.Dirtyness = 0 player.character.currentvehicle.makeproofto(false, true, true, false, false) world.addexplosion(player.character.currentvehicle.position.toground, explosionType.molotov, 6.0, True, False, 0.0F) player.character.currentvehicle.applyforce(vector3.worldup * 5) player.character.currentvehicle.color = colorindex.black player.character.currentvehicle.FeatureColor1 = colorindex.BlazeRed player.character.currentvehicle.FeatureColor2 = colorindex.BlazeRed player.character.currentvehicle.SpecularColor = colorindex.black end if If Player.Character.CurrentVehicle.Model.isHelicopter orelse Player.Character.CurrentVehicle.Model.isPlane orelse _ Player.Character.CurrentVehicle.Model.isBoat orelse Player.Character.CurrentVehicle.Model.isTrain then Exit sub if (timeScript mod 200 = 0) andalso (player.character.currentvehicle.isonallwheels) andalso (player.character.currentvehicle.rotation.x > -10) _ andalso (player.character.currentvehicle.rotation.x < 10) then 'if (timeScript mod 200 = 0) then dim zPos as double = (Player.Character.currentvehicle.position.distanceto(Player.Character.currentvehicle.position.toground)) * -1 'dim zPos as double = (vecDim.z / 2.2) * -1 native.function.call("stop_ptfx", flameCar1) native.function.call("stop_ptfx", flameCar2) native.function.call("stop_ptfx", flameCar3) native.function.call("stop_ptfx", flameCar4) native.function.call("stop_ptfx", flameCar5) native.function.call("stop_ptfx", flameCar6) native.function.call("stop_ptfx", flameCar7) bTruck = (vecDim.y < 10) andalso (vecDim.y > 8) andalso (vecDim.z > 3) if vecDim.z > 2 then vecDim.z = 2 if bTruck then flameCar1 = Native.Function.Call(Of int32)("START_PTFX_ON_VEH", "ambient_fire_generic", Player.Character.currentvehicle, vecdim.x / 2.3, vecdim.y / 2.5, zPos, 0, 0, 0, 1.5 * (vecDim.z / 1.36)) flameCar2 = Native.Function.Call(Of int32)("START_PTFX_ON_VEH", "ambient_fire_generic", Player.Character.currentvehicle, (vecdim.x / 2.3) * -1, vecdim.y / 2.5, zPos, 0, 0, 0, 1.5 * (vecDim.z / 1.36)) flameCar6 = Native.Function.Call(Of int32)("START_PTFX_ON_VEH", "ambient_fire_generic", Player.Character.currentvehicle, vecdim.x / 2.3, (vecdim.y / 2.5) * -1, zPos, 0, 0, 0, 1.5 * (vecDim.z / 1.36)) flameCar7 = Native.Function.Call(Of int32)("START_PTFX_ON_VEH", "ambient_fire_generic", Player.Character.currentvehicle, (vecdim.x / 2.3) * -1, (vecdim.y / 2.5) * -1, zPos, 0, 0, 0, 1.5 * (vecDim.z / 1.36)) flameCar5 = Native.Function.Call(Of int32)("START_PTFX_ON_VEH", "ambient_fire_generic", Player.Character.currentvehicle, 0, vecdim.y / 2.8, 0.3, 0, 0, 0, 1.5 * (vecDim.z / 1.36)) else flameCar1 = Native.Function.Call(Of int32)("START_PTFX_ON_VEH", "ambient_fire_generic", Player.Character.currentvehicle, vecdim.x / 2.3, vecdim.y / 3.8, zPos, 0, 0, 0, 1.5 * (vecDim.z / 1.36)) flameCar2 = Native.Function.Call(Of int32)("START_PTFX_ON_VEH", "ambient_fire_generic", Player.Character.currentvehicle, (vecdim.x / 2.3) * -1, vecdim.y / 3.8, zPos, 0, 0, 0, 1.5 * (vecDim.z / 1.36)) flameCar5 = Native.Function.Call(Of int32)("START_PTFX_ON_VEH", "ambient_fire_generic", Player.Character.currentvehicle, 0, vecdim.y / 3.8, zPos + 0.5, 0, 0, 0, 1.5 * (vecDim.z / 1.36)) end if flameCar3 = Native.Function.Call(Of int32)("START_PTFX_ON_VEH", "ambient_fire_generic", Player.Character.currentvehicle, vecdim.x / 2.3, (vecdim.y / 3.8) * -1, zPos, 0, 0, 0, 1.5 * (vecDim.z / 1.36)) flameCar4 = Native.Function.Call(Of int32)("START_PTFX_ON_VEH", "ambient_fire_generic", Player.Character.currentvehicle, (vecdim.x / 2.3) * -1, (vecdim.y / 3.8) * -1, zPos, 0, 0, 0, 1.5 * (vecDim.z / 1.36)) end if carLight.enabled = true vecDim = currVehDim bTruck = (vecDim.y < 10) andalso (vecDim.y > 8) andalso (vecDim.z > 3) vecDim.x = 0 vecDim.z /= 2 vecDim.y = 0 if not bTruck then carLight.position = Player.Character.currentvehicle.position + (Player.Character.currentvehicle.direction * 1.5) + vecDim else carLight.position = Player.Character.currentvehicle.position + (Player.Character.currentvehicle.direction * 4) + vecDim end if if player.character.currentvehicle.isonfire then player.character.currentvehicle.repair end if If not Exists(Player.Character.CurrentVehicle) Then carLight.enabled = false end sub Private Sub shotgunEffect Try If (player.character.weapons.current = weapon.Shotgun_Basic) orelse (player.character.weapons.current = weapon.Shotgun_Baretta) Then bIconShotGun = True 'If native.function.call(Of Boolean)("IS_CHAR_SHOOTING", player.character) Then if player.character.isShooting then Dim force As Double For Each p As ped In world.getpeds(player.character.position + player.character.direction * 20, 45.0) If exists(p) AndAlso native.function.call(Of Boolean)("HAS_CHAR_BEEN_DAMAGED_BY_CHAR", p, player.character) Then p.isonfire = True force = 20 - p.position.distanceto(player.character.position) If force <= 5 Then force = 5 p.velocity = (game.currentcamera.direction + vector3.worldup / 2) * force * ShotgunForce p.die() native.function.call("CLEAR_CHAR_LAST_DAMAGE_ENTITY", p) End If Next For Each v As vehicle In world.getvehicles(player.character.position + player.character.direction * 20, 45.0) If exists(v) AndAlso native.function.call(Of Boolean)("HAS_CAR_BEEN_DAMAGED_BY_CHAR", v, player.character) Then force = 15 - v.position.distanceto(player.character.position) If force <= 0 Then force = 1 v.applyforce((game.currentcamera.direction + vector3.worldup / 2) * force * ShotgunForce) native.function.call("CLEAR_CAR_LAST_DAMAGE_ENTITY", v) End If Next playsound(".\scripts\GRSounds\shotgun.wav") End If Else bIconShotGun = False End If Catch End Try End Sub Private Sub updateLightPos if flameLightMultiplier = 0 then exit sub vecL = Player.Character.GetBonePosition(Bone.Head) l1.Position = vecL + (Player.Character.Direction / 3) l2.Position = vecL - (Player.Character.Direction / 3) vecL.z += 0.5 l3.Position = vecL l1.Intensity = random(14, 17) * flameLightMultiplier l2.Intensity = random(14, 17) * flameLightMultiplier l3.Intensity = random(15, 17) * flameLightMultiplier End Sub Private Sub PenanceStareFindPed() Try Dim vecAux As vector3 = player.character.position dim maxDist as int16 = 20 PenanceStarePedTmp = pedTargeted If Not Exists(PenanceStarePedTmp) Then Exit Sub FleePeds(PenanceStarePedTmp.Position, 10, PenanceStarePedTmp) If exists(PenanceStarePedTmp) AndAlso exists(PenanceStarePedTmp.currentvehicle) andalso not isChainOn Then msg("YOU...", 2000) PlaySound(".\scripts\GRSounds\you.wav") PenanceStarePedTmp.currentvehicle.applyforce(vector3.worldup * 2) world.addexplosion(PenanceStarePedTmp.currentvehicle.position.toground, explosionType.molotov, 5.0, True, False, 0) PenanceStarePedTmp.task.leavevehicle() PenanceStarePedTmp.task.FleeFromChar(player.character, False, 5000) PenanceStarePedTmp = Nothing iIconPenanceStare = 0 End If If exists(PenanceStarePedTmp) Then msg("YOU...", 2000) PlaySound(".\scripts\GRSounds\you.wav") PenanceStareSpeechAux = 0 player.character.heading = game.currentcamera.heading Dim aSet As animationset = New animationset("missfaustin3") player.character.animation.play(aSet, "point_fwd", 5.0) PenanceStarePedTmp.makeproofto(False, True, False, False, False) PenanceStarePedTmp.metadata.PSEffect1 = _ Native.Function.Call(Of int32)("START_PTFX_ON_PED_BONE", "ambient_fire_generic", PenanceStarePedTmp, 0, 0, 0, 90.0, 0, 90.0, Bone.HDFacerighteyeball, 0.3) PenanceStarePedTmp.metadata.PSEffect2 = _ Native.Function.Call(Of int32)("START_PTFX_ON_PED_BONE", "ambient_fire_generic", PenanceStarePedTmp, 0, 0, 0, 90.0, 0, 90.0, Bone.HDFacelefteyeball, 0.3) PenanceStarePedTmp.metadata.PSEffect3 = _ Native.Function.Call(Of int32)("START_PTFX_ON_PED_BONE", "ambient_steam_vent_oblong", PenanceStarePedTmp, 0, 0, 0, 90.0, 0, 90.0, Bone.head, 0.5) native.function.call("ON_FIRE_SCREAM", PenanceStarePedTmp) if exists(PenanceStarePedTmp.currentvehicle) then PenanceStarePedTmp.currentvehicle.EngineRunning = false elseif Not PenanceStarePedTmp.animation.isplaying(aSetPenanceStarePed, "drop_tray_scream") Then PenanceStarePedTmp.animation.play(aSetPenanceStarePed, "drop_tray_scream", 10.0, animationflags.Unknown05) End If End If Catch End Try End Sub Private Sub PenanceStareCatchPed() Try PenanceStareCP.visible = False PSLight.enabled = False If exists(PenanceStarePedTmp) Then If PenanceStareMod > 1000 Then Dim timeOut As double = 0 if not exists(PenanceStarePedTmp.currentvehicle) then PenanceStarePedTmp.task.turnto(player.character) end if If Not exists(PenanceStarePedTmp) Then iIconPenanceStare = 0 Exit Sub End If native.function.call("ON_FIRE_SCREAM", PenanceStarePedTmp) If (PenanceStareMod > 3000) AndAlso Not bInfiniteSpitBullets And (SpitBulletBulCount < 3) Then PenanceStarePedTmp.task.FightAgainst(player.character) Dim aSet As animationset = New animationset("amb@bottle_create") player.character.task.clearallimmediately() player.character.animation.play(aSet, "stand_create", 10.0) wait(2500) SpitBulletBulCount = 15 End If player.character.task.turnto(PenanceStarePedTmp) PenanceStarePedTmp.makeproofto(false, true, false, true, false) if isChainOn then timeOut = 0 PlaySound(".\scripts\GRSounds\ChainDrag.wav") chainGrabAnim timeOutMoveChain = 0 while not moveChainToVec(player.character.position + (player.character.direction * 2) + vector3.worldup * 4, 1, 150) wait(getInterval) chainTick player.character.health += 1 end while timeOut = 0 timeOutMoveChain = 0 while (timeOut < 1000) andalso not moveChainToVec(PenanceStarePedTmp.position, 1, 0) wait(me.interval) timeOut += me.interval player.character.health += 1 end while pChainTargetGrab = PenanceStarePedTmp if not ChainGrabFlyFromVeh then PenanceStarePedTmp = nothing exit sub end if pChainTargetGrab = nothing end if timeOut = 0 While exists(PenanceStarePedTmp) AndAlso _ (Not PenanceStarePedTmp.isTouching(player.character) AndAlso (PenanceStarePedTmp.position.distanceto(player.character.position) > 2.5)) AndAlso _ (timeOut < 2500) If exists(PenanceStarePedTmp) Then PenanceStarePedTmp.isragdoll = true If Not isChainOn() Then vecVelocityGeneral = (Player.Character.Position + (Vector3.WorldDown / 2) - PenanceStarePedTmp.Position) * 2 PenanceStarePedTmp.Velocity = ControlVelocity(vecVelocityGeneral, 50.0) Else vecVelocityGeneral = (Player.Character.Position + (Vector3.WorldUp) - PenanceStarePedTmp.Position) * 2 PenanceStarePedTmp.Velocity = ControlVelocity(vecVelocityGeneral, 50.0) 'moveChainToVec(player.character.getboneposition(bone.head) + player.character.direction, 0.3, 0) timeOutMoveChain = 0 moveChainToVec(PenanceStarePedTmp.GetBonePosition(Bone.Head), 1, 0) End If PenanceStarePedTmp.isonfire = False PenanceStarePedTmp.heading = player.character.heading + 180 If PenanceStarePedTmp.health <= 0 Then PenanceStareClearPTFX(PenanceStarePedTmp) PenanceStarePedTmp.die PenanceStarePedTmp = Nothing End If End If wait(10) timeOut += 10 player.character.health += 1 End While timeOut = 0 pChainTargetGrab = nothing PenanceStarePedTmp.isRagDoll = false if exists(PenanceStarePedTmp) then If Not PenanceStarePedTmp.animation.isplaying(aSetPenanceStarePed, "drop_tray_scream") Then PenanceStarePedTmp.isragdoll = false PenanceStarePedTmp.task.clearallimmediately PenanceStarePedTmp.animation.play(aSetPenanceStarePed, "drop_tray_scream", 10.0, animationflags.Unknown05) End If player.character.task.turnto(PenanceStarePedTmp) player.character.animation.play(aSetPenanceStare, PSAnimName, 10.0) native.function.call("ON_FIRE_SCREAM", PenanceStarePedTmp) End If End If If exists(PenanceStarePedTmp) Then PenanceStarePedTmp.metadata.PenanceStareMod = PenanceStareMod PenanceStareExec() End If End If Catch End Try End Sub Private Sub PenanceStareExec() Try If exists(PenanceStarePedTmp) Then ' If exists(PenanceStarePedTmp.currentvehicle) Then ' PenanceStarePedTmp.task.leavevehicle() ' Exit Sub ' End If If Not PenanceStarePedTmp.isalive Then Exit Sub penanceStaretArrCount += 1 If penanceStaretArrCount > 20 Then penanceStaretArrCount = 1 penanceStaretArr(penanceStaretArrCount) = PenanceStarePedTmp penanceStaretArr(penanceStaretArrCount).metadata.PSTime = 0 penanceStaretArr(penanceStaretArrCount).metadata.PSspitBulletsCont = 0 If PenanceStareSpeechAux < 1000 Then wait(1000 - PenanceStareSpeechAux) msg("guilty...", 2000) PlaySound(".\scripts\GRSounds\guilty.wav") If Not exists(penanceStaretArr(penanceStaretArrCount).currentvehicle) AndAlso (penanceStaretArr(penanceStaretArrCount).metadata.PenanceStareMod <= 1000) Then penanceStaretArr(penanceStaretArrCount).task.clearallimmediately() penanceStaretArr(penanceStaretArrCount).task.turnto(player.character) wait(500) penanceStaretArr(penanceStaretArrCount).task.clearallimmediately() If Not penanceStaretArr(penanceStaretArrCount).animation.isplaying(aSetPenanceStarePed, "drop_tray_scream") Then penanceStaretArr(penanceStaretArrCount).animation.play(aSetPenanceStarePed, "drop_tray_scream", 10.0, animationflags.Unknown05) End If End If Else iIconPenanceStare = 0 End If Catch End Try End Sub Private Sub PenanceStare() Try For c As int16 = 1 To penanceStaretArrCount If exists(penanceStaretArr(c)) Then if timeScript mod 1000 = 0 then fleePeds(penanceStaretArr(c).position, 5, penanceStaretArr(c)) If PenanceStareMod <= 1000 Then iIconPenanceStare = 0 If (penanceStaretArr(c).metadata.PSTime < 500) AndAlso Not penanceStaretArr(c).isalive Then msg("no... died too soon...", 2000) penanceStaretArr(c) = Nothing Continue For End If Dim effAux As int32 If (penanceStaretArr(c).metadata.PenanceStareMod > 1000) AndAlso (penanceStaretArr(c).metadata.PSTime = 350) Then msg("look into my eyes...", 2000) PlaySound(".\scripts\GRSounds\lookIntoMyEyes.wav") End If If ((penanceStaretArr(c).metadata.PSTime < penanceStareTime) AndAlso (penanceStaretArr(c).metadata.PenanceStareMod <= 1000)) OrElse _ ((penanceStaretArr(c).metadata.PenanceStareMod > 2000) andalso (penanceStaretArr(c).metadata.PenanceStareMod <= 3000) AndAlso (player.character.animation.GetCurrentAnimationTime(aSetPenanceStare, PSAnimName) < 0.5)) orelse _ ((penanceStaretArr(c).metadata.PSTime < 1470)) Then penanceStaretArr(c).metadata.PSTime += me.interval If penanceStaretArr(c).metadata.PenanceStareMod <= 1000 Then If exists(penanceStaretArr(c).currentvehicle) Then penanceStaretArr(c).task.leavevehicleimmediately(penanceStaretArr(c).currentvehicle) else If Not penanceStaretArr(c).animation.isplaying(aSetPenanceStarePed, "drop_tray_scream") Then penanceStaretArr(c).animation.play(aSetPenanceStarePed, "drop_tray_scream", 10.0, animationflags.Unknown05) End If End If end if If penanceStaretArr(c).metadata.PenanceStareMod > 1000 Then If ((penanceStaretArr(c).metadata.PenanceStareMod - 1999 <= 0)) OrElse _ ((penanceStaretArr(c).metadata.PenanceStareMod > 2000) AndAlso (penanceStaretArr(c).metadata.PSTime > 100)) Then If penanceStaretArr(c).Metadata.PSspitBulletsCont = 0 Then vecVelocityGeneral = (Player.Character.GetBonePosition(PSBoneAttach) - penanceStaretArr(c).GetBonePosition(Bone.Neck) - _ (penanceStaretArr(c).Direction / 8)) * 5 penanceStaretArr(c).Velocity = ControlVelocity(vecVelocityGeneral, 50.0) Else vecVelocityGeneral = penanceStaretArr(c).Velocity + Vector3.WorldUp + Player.Character.Direction / 2 penanceStaretArr(c).Velocity = ControlVelocity(vecVelocityGeneral, 50.0) End If End If if player.character.animation.GetCurrentAnimationTime(aSetPenanceStare, PSAnimName) > 0.2 then native.function.call("SET_CHAR_ALL_ANIMS_SPEED", player.character, 0.05) elseif player.character.animation.GetCurrentAnimationTime(aSetPenanceStare, PSAnimName) > 0.4 then native.function.call("SET_CHAR_ALL_ANIMS_SPEED", player.character, 1.0) end if penanceStaretArr(c).heading = player.character.heading + 180 If not exists(penanceStaretArr(c).currentvehicle) andalso Not penanceStaretArr(c).animation.isplaying(aSetPenanceStarePed, "drop_tray_scream") Then penanceStaretArr(c).task.playanimation(aSetPenanceStarePed, "drop_tray_scream", 10.0, animationflags.Unknown05 Or animationflags.Unknown09) End If if isChainOn then timeOutMoveChain = 0 moveChainToVec(player.character.position.toground + player.character.direction * 5, 1, 0) end if End If If ((penanceStaretArr(c).metadata.PenanceStareMod > 2000) AndAlso (penanceStaretArr(c).metadata.PSTime >= 500)) Then If penanceStaretArr(c).metadata.PenanceStareMod <= 3000 Then penanceStaretArr(c).makeproofto(False, False, False, False, False) penanceStaretArr(c).isonfire = True End If If penanceStaretArr(c).metadata.PenanceStareMod <= 3000 Then effAux = player.character.metadata.PSEffect3 Native.Function.Call("STOP_PTFX", effAux) If random(1, 10) < 3 Then player.character.metadata.PSEffect3 = _ Native.Function.Call(Of int32)("START_PTFX_ON_PED_BONE", "shot_directed_flame", player.character, 0, 0.1, 0, -90.0F, 90.0F, 0, Bone.head, 0.4) ElseIf random(1, 10) < 6 Then player.character.metadata.PSEffect3 = _ Native.Function.Call(Of int32)("START_PTFX_ON_PED_BONE", "shot_directed_flame", player.character, 0, 0.1, 0, -100.0F, 90.0F, 0, Bone.head, 0.4) Else player.character.metadata.PSEffect3 = _ Native.Function.Call(Of int32)("START_PTFX_ON_PED_BONE", "shot_directed_flame", player.character, 0, 0.1, 0, -110.0F, 90.0F, 0, Bone.head, 0.4) End If ElseIf penanceStaretArr(c).metadata.PSTime >= 1200 Then If penanceStaretArr(c).metadata.PSspitBulletsCont < 10 Then penanceStaretArr(c).metadata.PSspitBulletsCont += 1 penanceStaretArr(c).metadata.PSTime += me.interval * 2 native.function.call("SET_CHAR_ALL_ANIMS_SPEED", player.character, 0.5) player.character.invincible = True player.character.task.turnto(penanceStaretArr(c)) spitBullets(False, penanceStaretArr(c)) player.character.invincible = False Else penanceStaretArr(c).metadata.PSTime = 5000 End If End If Else penanceStaretArr(c).isonfire = False End If player.character.health += 1 If penanceStaretArr(c).metadata.PSTime Mod 500 = 0 Then native.function.call("ON_FIRE_SCREAM", penanceStaretArr(c)) effAux = PenanceStarePedTmp.metadata.PSEffect1 Native.Function.Call("STOP_PTFX", effAux) PenanceStarePedTmp.metadata.PSEffect1 = _ Native.Function.Call(Of int32)("START_PTFX_ON_PED_BONE", "ambient_fire_generic", PenanceStarePedTmp, 0, 0, 0, 90.0, 0, 90.0, Bone.HDFacerighteyeball, 0.3) effAux = PenanceStarePedTmp.metadata.PSEffect2 Native.Function.Call("STOP_PTFX", effAux) PenanceStarePedTmp.metadata.PSEffect2 = _ Native.Function.Call(Of int32)("START_PTFX_ON_PED_BONE", "ambient_fire_generic", PenanceStarePedTmp, 0, 0, 0, 90.0, 0, 90.0, Bone.HDFacelefteyeball, 0.3) effAux = PenanceStarePedTmp.metadata.PSEffect3 Native.Function.Call("STOP_PTFX", effAux) PenanceStarePedTmp.metadata.PSEffect3 = _ Native.Function.Call(Of int32)("START_PTFX_ON_PED_BONE", "ambient_steam_vent_oblong", PenanceStarePedTmp, -0.5, 0, 0, 90.0, 0, 90.0, Bone.head, 0.5) ElseIf penanceStaretArr(c).metadata.PSTime Mod 100 = 0 Then If penanceStaretArr(c).metadata.PenanceStareMod > 1000 Then effAux = player.character.metadata.PSEffect1 Native.Function.Call("STOP_PTFX", effAux) player.character.metadata.PSEffect1 = _ Native.Function.Call(Of int32)("START_PTFX_ON_PED_BONE", "exp_fireball", player.character, 0.1, 0, -0.1, 0, 0, 0, PSBoneAttach, 0.03) End If End If Else If penanceStaretArr(c).metadata.PenanceStareMod > 1000 Then native.function.call("SET_CHAR_ALL_ANIMS_SPEED", player.character, 1.0) iIconPenanceStare = 0 elseif isChainOn then if (player.character.weapons.current <> weapon.Misc_Object) then player.character.weapons.inslot(Weapon.Misc_Object).select End If penanceStaretArr(c).task.clearallimmediately() PenanceStareClearPTFX(penanceStaretArr(c)) effAux = player.character.metadata.PSEffect Native.Function.Call("STOP_PTFX", effAux) effAux = player.character.metadata.PSEffect1 Native.Function.Call("STOP_PTFX", effAux) effAux = player.character.metadata.PSEffect2 Native.Function.Call("STOP_PTFX", effAux) effAux = player.character.metadata.PSEffect3 Native.Function.Call("STOP_PTFX", effAux) penanceStaretArr(c).makeproofto(False, False, False, False, False) penanceStaretArr(c).die() penanceStaretArr(c).isonfire = False If penanceStaretArr(c).metadata.PenanceStareMod <= 1000 Then penanceStaretArr(c).velocity = vector3.worlddown * 10 Else If penanceStaretArr(c).metadata.PenanceStareMod > 2000 Then penanceStaretArr(c).isonfire = True penanceStaretArr(c).isragdoll = True penanceStaretArr(c).velocity = (player.character.direction * 3) 'If penanceStaretArr(c).metadata.PenanceStareMod > 1000 Then 'if not isChainOn then player.character.weapons.select(PreviousWeapon) 'end if End If penanceStaretArr(c) = Nothing End If End If Next Catch End Try End Sub Private Sub PenanceStareClearPTFX(ByVal p As ped) Try Dim effAux As int32 effAux = p.metadata.PSEffect1 Native.Function.Call("STOP_PTFX", effAux) effAux = p.metadata.PSEffect2 Native.Function.Call("STOP_PTFX", effAux) effAux = p.metadata.PSEffect3 Native.Function.Call("STOP_PTFX", effAux) Catch End Try End Sub Private Sub WaterRide If exists(player.character.currentvehicle) AndAlso (player.character.currentvehicle.model.isbike orelse player.character.currentvehicle.metadata.isGRTransformed) AndAlso player.character.issittinginvehicle Then If (native.function.call(Of Boolean)("IS_CAR_IN_WATER", player.character.currentvehicle)) Then if player.character.currentvehicle.isupsidedown then player.character.currentvehicle.applyforce(vector3.worldup / 6, vector3.worldup / 2) else player.character.currentvehicle.EngineRunning = True Dim vecAux, vecAux2 As vector3 vecAux = vector3.zero vecAux2 = vecAux 'if player.character.currentvehicle.model.isbike then vecAux.z = 0.2 'else ' vecAux.z = 0.3 'end if If Not game.iskeypressed(hkControlKey) Then If player.character.currentvehicle.speed < 2 Then If player.character.currentvehicle.rotation.x > 3 Then vecAux2.y = -0.1 ElseIf player.character.currentvehicle.rotation.x < 3 Then vecAux2.y = 0.1 End If Else If player.character.currentvehicle.rotation.x > 7 Then vecAux2.y = -0.3 ElseIf player.character.currentvehicle.rotation.x < 7 Then vecAux2.y = 0.3 End If End If End If if player.character.currentvehicle.metadata.isGRTransformed then if player.character.currentvehicle.speed > 10 then vecAux2.y = 0.6 elseif game.iskeypressed(hkAccelKey) andalso (player.character.currentvehicle.speed > 6) then vecAux2.y = 0.3 end if end if player.character.currentvehicle.applyforce(vecAux, vecAux2) If game.iskeypressed(hkAccelKey) Then If Not game.iskeypressed(hkBikeNitro) Then player.character.currentvehicle.applyforce(player.character.direction / 1.5) Else vecAux2.y = 1 player.character.currentvehicle.applyforce(player.character.direction * 4, vecAux2) End If End If if not player.character.currentvehicle.model.isbike andalso (player.character.currentvehicle.speed < 10) then If game.iskeypressed(hkTurnVehicleLeft) Then player.character.currentvehicle.applyforce(player.character.direction / 3.5, vector3.worldeast / 3.5 + vector3.worldnorth / 3.5) ElseIf game.iskeypressed(hkTurnVehicleRight) Then player.character.currentvehicle.applyforce(player.character.direction / 3.5, vector3.worldwest / 3.5 + vector3.worldsouth / 3.5) End If end if end if player.character.currentvehicle.metadata.isInWater = True player.character.metadata.dir = player.character.currentvehicle.direction Else If player.character.currentvehicle.metadata.isInWater Then player.character.currentvehicle.metadata.isInWater = False End If End If End Sub Private Sub spitBulletsAux() If Not bInfiniteSpitBullets AndAlso (SpitBulletBulCount <= 0) Then Exit Sub bIconSpitbullets = True If Not Game.isKeyPressed(hkAimKey) Then Try Dim vecAux As Vector3 vecAux = Player.Character.GetBonePosition(Bone.RightArmRoll) - Player.Character.Direction / 3 vecAux.Z += 0.3 Dim a As AnimationSet = New AnimationSet("melee_counters") Player.Character.Invincible = True If Exists(Player.Character.CurrentVehicle) Then Player.Character.CurrentVehicle.CanBeDamaged = False For c As Int16 = 1 To 7 WaitAndspitBulletsAux(300, 3) If Not bInfiniteSpitBullets AndAlso (SpitBulletBulCount <= 0) Then Exit For Player.Character.Task.PlayAnimation(a, "dodge_back", 0.5, AnimationFlags.Unknown09) Next If Not isGhostRider Then Player.Character.Invincible = False If Exists(Player.Character.CurrentVehicle) Then Player.Character.CurrentVehicle.CanBeDamaged = True Exit Sub End If For c As Int16 = 1 To 14 WaitAndspitBulletsAux(300, -3) If Not bInfiniteSpitBullets AndAlso (SpitBulletBulCount <= 0) Then Exit For Player.Character.Task.PlayAnimation(a, "dodge_back", 0.2, AnimationFlags.Unknown09) Next If Not isGhostRider Then Player.Character.Invincible = False If Exists(Player.Character.CurrentVehicle) Then Player.Character.CurrentVehicle.CanBeDamaged = True Exit Sub End If For c As Int16 = 1 To 7 WaitAndspitBulletsAux(300, 3) If Not bInfiniteSpitBullets AndAlso (SpitBulletBulCount <= 0) Then Exit For Player.Character.Task.PlayAnimation(a, "dodge_back", 0.2, AnimationFlags.Unknown09) Next Player.Character.Invincible = False If Not bInfiniteSpitBullets AndAlso (SpitBulletBulCount <= 0) Then Exit Sub Player.Character.Task.ClearAll() If Exists(Player.Character.CurrentVehicle) Then Player.Character.CurrentVehicle.CanBeDamaged = True If Not isGhostRider Then Exit Sub Catch End Try Else spitBullets() End If End Sub Private Sub WaitAndspitBulletsAux(ByVal time As int32, ByVal pos As int16) While (time > 0) AndAlso isGhostRider If Not bInfiniteSpitBullets AndAlso (SpitBulletBulCount <= 0) Then SpitBulletBulCount = 0 Exit While End If bIconSpitbulletsLoop = True If Not exists(player.character.currentvehicle) Then If Not game.iskeypressed(hkAccelKey) Then player.character.heading += pos Else player.character.heading = game.currentcamera.heading End If End If wait(getInterval) general_tick(Nothing, Nothing) If Not game.iskeypressed(hkAccelKey) Then time -= getInterval * 15 spitBullets(True) bIconSpitbulletsLoop = False End While End Sub Private Sub spitBullets(Optional ByVal bAuto As Boolean = False, Optional ByVal PSPed As ped = Nothing) If Not bInfiniteSpitBullets AndAlso (SpitBulletBulCount <= 0) Then SpitBulletBulCount = 0 Exit Sub End If If Not bInfiniteSpitBullets Then SpitBulletBulCount -= 1 Dim vec, vecIni As vector3 player.character.health += 1 If Not Exists(PSPed) Then vecIni = Player.Character.Position + Vector3.WorldUp * 0.4 vecIni += Game.CurrentCamera.Direction + Player.Character.Velocity 'If Not Game.isGameKeyPressed(GameKey.Aim) Then vec = vecIni + Player.Character.Direction * 300 'Else vec.Z = (vecIni + Game.CurrentCamera.Direction * 300).Z 'End If Else vec = PSPed.Position vecIni = Player.Character.GetBonePosition(Bone.Head) + Player.Character.Direction / 4 End If vecIni.Z += 5 World.AddExplosion(vecIni, ExplosionType.Default, 0.001, True, True, 0.02) vecIni.Z -= 5 Dim tmpDist As Double Dim tmpPosCompare As Vector3 Dim tmpDirVector As Vector3 If bAuto Then tmpDirVector = Player.Character.Direction tmpDirVector.Z = Game.CurrentCamera.Direction.Z Else tmpDirVector = Game.CurrentCamera.Direction End If If Not Exists(PSPed) Then For Each p As Ped In pedsTarget If Exists(p) AndAlso (p <> Player.Character) Then tmpDist = p.Position.DistanceTo(Player.Character.Position) tmpPosCompare = Player.Character.Position + tmpDirVector * tmpDist If p.Position.DistanceTo(tmpPosCompare) < 1 Then If Not p.isOnFire Then p.isOnFire = True p.isRagdoll = True p.Die() End If If Not bAuto Then p.Velocity = Game.CurrentCamera.Direction * 10 Else p.Velocity = Player.Character.Direction * 10 End If End If End If Next End If Native.Function.Call(Of Int32)("trigger_PTFX_ON_PED_BONE", "muz_minigun", Player.Character, 0, 0, 0, 0, 0, 0, Bone.Head, 0.2) Native.Function.Call(Of Int32)("trigger_PTFX_ON_PED_BONE", "wpn_bullet_trace", Player.Character, 0, 0, 0.55, _ (90 - Helper.RadianToDegree(Game.CurrentCamera.Direction.Z)), 0, 180.0F, Bone.Root, 1.0) Native.Function.Call("FIRE_SINGLE_BULLET", vecIni.X, vecIni.Y, vecIni.Z, vec.X, vec.Y, vec.Z, 1000) Native.Function.Call("FIRE_SINGLE_BULLET", vecIni.X, vecIni.Y, vecIni.Z, vec.X, vec.Y, vec.Z + 0.1, 1000) If Not bAuto Then Wait(150) Else Wait(25) End If Native.Function.Call("FIRE_SINGLE_BULLET", vecIni.X, vecIni.Y, vecIni.Z, vec.X, vec.Y, vec.Z - 0.1, 1000) End Sub Private Sub wallRide If exists(player.character.currentvehicle) AndAlso (Player.Character.CurrentVehicle.Model.isBike orelse player.character.currentvehicle.metadata.isGRTransformed) Then Dim bResetDir As int16 = 2 Dim bApplyForce As Boolean = False If player.character.currentvehicle.isonallwheels OrElse player.character.metadata.isInWater Then onAllWheelsCont = 600 fallCont = 0 Else If onAllWheelsCont > 0 Then onAllWheelsCont -= getInterval Else onAllWheelsCont = 0 End If If fallCont < 1000 Then fallCont += Me.Interval End If Dim vecAux As vector3 If player.character.currentvehicle.enginerunning AndAlso (onAllWheelsCont > 0) Then If (player.character.currentvehicle.rotation.x > 70) AndAlso (player.character.currentvehicle.rotation.x < 110) Then If game.iskeypressed(hkAccelKey) Then If player.character.metadata.isInWater Then player.character.currentvehicle.metadata.inWater = 0 player.character.currentvehicle.metadata.blockNitro = True if not player.character.currentvehicle.metadata.isGRTransformed then vecAux = player.character.currentvehicle.rotation If onAllWheelsCont > 200 Then vecAux.x = 90 player.character.currentvehicle.rotation = vecAux End If end if if not player.character.currentvehicle.metadata.isGRTransformed orelse not player.character.currentvehicle.isonallwheels then vecAux = player.character.metadata.dir / 3 else vecAux = player.character.metadata.dir / 4 end if If player.character.currentvehicle.speed > 5 Then vecAux.z = UpForceWallRide Else vecAux.z = UpForceWallRide + UpForceWallRide / 5 End If if player.character.currentvehicle.metadata.isGRTransformed then vecAux.z *= 1.2 If game.iskeypressed(hkBikeNitro) Then vecAux.z = UpForceWallRide * 2 bApplyForce = True End If Else bResetDir -= 1 End If If (player.character.currentvehicle.rotation.x < -40) AndAlso (player.character.currentvehicle.rotation.x > -100) Then If (game.iskeypressed(hkAimKey)) Then player.character.currentvehicle.metadata.blockNitro = True vecAux = player.character.currentvehicle.rotation vecAux.x = -90 player.character.currentvehicle.rotation = vecAux vecAux = (player.character.metadata.dir) * -1 vecAux.z = 1.0 If game.iskeypressed(hkBikeNitro) Then vecAux.z = UpForceWallRide / 5 bApplyForce = True End If Else bResetDir -= 1 End If If bApplyForce Then player.character.currentvehicle.applyforce(vecAux) player.character.metadata.DidWallRide = True End If If bResetDir = 0 Then player.character.currentvehicle.metadata.blockNitro = False If player.character.currentvehicle.isonallwheels OrElse player.character.metadata.isInWater Then player.character.metadata.dir = player.character.currentvehicle.direction End If End If End If If Not game.iskeypressed(hkcontrolkey) AndAlso Not game.iskeypressed(hkAccelKey) AndAlso player.character.metadata.DidWallRide Then player.character.metadata.DidWallRide = False native.function.call("apply_force_to_car", player.character.currentvehicle, True, 0, 0, -1.0, 0, 0, -1.0, True, False, True, True) End If If fallCont >= 600 Then If not player.character.currentvehicle.metadata.isGRTransformed andalso _ player.character.currentvehicle.isupsidedown AndAlso _ (player.character.currentvehicle.speed < 2) AndAlso _ (player.character.currentvehicle.position.distanceto(player.character.currentvehicle.position.toground) < 2) Then player.character.task.LeaveVehicleImmediately(player.character.currentvehicle) Player.Character.invincible = False Player.Character.metadata.invincible = False fallCont = 0 Exit Sub End If Player.Character.invincible = True Player.Character.metadata.invincible = True Else If Player.Character.metadata.invincible Then Player.Character.invincible = False Player.Character.metadata.invincible = False End If End If Else If player.character.metadata.DidWallRide Then player.character.metadata.DidWallRide = False End If End Sub Private Sub Flames if flameSizeMuliplier = 0 then exit sub Native.Function.Call("STOP_PTFX", flame1) Native.Function.Call("STOP_PTFX", flame2) Native.Function.Call("STOP_PTFX", flame3) Native.Function.Call("STOP_PTFX", flame4) Native.Function.Call("STOP_PTFX", flameH1) flame1 = Native.Function.Call(Of int32)("START_PTFX_ON_PED_BONE", "shot_directed_flame", Player.Character, -0.3 + flameOffSetZ, 0 + flameOffSetY, 0 + flameOffSetX, 90.0F, 0, 105.0F, Bone.head, 0.15 * HeadEffectScale * flameSizeMuliplier) flame2 = Native.Function.Call(Of int32)("START_PTFX_ON_PED_BONE", "shot_directed_flame", Player.Character, -0.3 + flameOffSetZ, 0 + flameOffSetY, 0 + flameOffSetX, 90.0F, 0, 95.0F, Bone.head, 0.15 * HeadEffectScale * flameSizeMuliplier) flame3 = Native.Function.Call(Of int32)("START_PTFX_ON_PED_BONE", "shot_directed_flame", Player.Character, -0.3 + flameOffSetZ, 0 + flameOffSetY, 0 + flameOffSetX, 90.0F, 0, 90.0F, Bone.head, 0.15 * HeadEffectScale * flameSizeMuliplier) flame4 = Native.Function.Call(Of int32)("START_PTFX_ON_PED_BONE", "shot_directed_flame", Player.Character, -0.3 + flameOffSetZ, 0 + flameOffSetY, 0 + flameOffSetX, 90.0F, 0, 85.0F, Bone.head, 0.15 * HeadEffectScale * flameSizeMuliplier) flameH1 = Native.Function.Call(Of int32)("START_PTFX_ON_PED_BONE", "ambient_fire_generic", Player.Character, 0.05 + flameOffSetZ, 0 + flameOffSetY, 0 + flameOffSetX, 90.0F, 0, 90.0F, Bone.head, 0.5 * flameSizeMuliplier) End Sub Private Sub flamesBike if BikeFlameSizeMuliplier = 0 then exit sub If exists(player.character.currentvehicle) AndAlso player.character.currentvehicle.model.isbike Then if timeScript mod 20 = 0 then If (player.character.currentvehicle.position.distanceto(player.character.currentvehicle.position.toground) < 1) Then If (throwTimeOut > 0) Then world.startfire((player.character.currentvehicle.position + player.character.currentvehicle.direction).toground) world.startfire((player.character.currentvehicle.position - player.character.currentvehicle.direction).toground) Else world.startfire((player.character.currentvehicle.position + player.character.currentvehicle.direction).toground - (vector3.worldup) / 6) world.startfire((player.character.currentvehicle.position - player.character.currentvehicle.direction).toground - (vector3.worldup) / 6) End If world.extinguishfire(player.character.currentvehicle.position - (player.character.currentvehicle.direction * 15), 3.0F) End If End If if timeScript mod 200 = 0 then Native.Function.Call("STOP_PTFX", flameW1) Native.Function.Call("STOP_PTFX", flameW2) flameW1 = Native.Function.Call(Of int32)("START_PTFX_ON_VEH", "ambient_fire_generic", Player.Character.currentvehicle, 0 + BikeFlameOffSetX, 1.1 + BikeFlameOffSetY, -0.4 + BikeFlameOffSetZ, 0, 0, 0, 1.5 * BikeFlameSizeMuliplier) flameW2 = Native.Function.Call(Of int32)("START_PTFX_ON_VEH", "ambient_fire_generic", Player.Character.currentvehicle, 0 + BikeFlameOffSetX, -0.9 + BikeFlameOffSetY, -0.35 + BikeFlameOffSetZ, 0, 0, 0, 1.5 * BikeFlameSizeMuliplier) end if Player.Character.Health += 1 End If End Sub Private Sub throwCars(Optional ByVal vehJustDoIt As Vehicle = Nothing) ' throw cars, like in the first movie when he becomes ghost rider If Exists(vehJustDoIt) OrElse (Exists(Player.Character.CurrentVehicle) AndAlso (Player.Character.CurrentVehicle.Model.isBike orelse player.character.currentvehicle.metadata.isGRTransformed)) Then Dim vec As Vector3 Dim vAux As Vehicle = Nothing Dim throwEffectRoundForVehiclesAux As Double = throwEffectRoundForVehicles If Exists(vehJustDoIt) Then vAux = vehJustDoIt throwEffectRoundForVehiclesAux = 5 Else vAux = Player.Character.CurrentVehicle End If If Not Exists(vehJustDoIt) AndAlso Not vAux.Metadata.blockNitro AndAlso Game.isKeyPressed(hkBikeNitro) AndAlso (vAux.isOnAllWheels) AndAlso (vAux.Speed > 1) Then _ vAux.ApplyForce(Player.Character.Direction / 4) If Not Exists(vehJustDoIt) Then vAux.CanTiresBurst = False Player.Character.CanBeKnockedOffBike = False Player.Character.CanBeDraggedOutOfVehicle = False End If If Exists(vehJustDoIt) Then throwTimeout = 1000 Else If vAux.Speed >= speedToThrowEffect Then ' only in high speed throwTimeout = 1000 ElseIf vAux.Speed < 10 Then throwTimeout = 0 End If End If If throwTimeout > 0 Then throwTimeout -= getInterval() If Not Exists(vehJustDoIt) Then vAux.PetrolTankHealth = 1000 ' get the vehicles that are max throwEffectRoundForVehiclesAux distance to an position some steps behind player to make them be affected when the player pass For Each v As Vehicle In World.GetVehicles(vAux.Position + vAux.Direction * throwEffectRoundForVehiclesAux * 0.5, throwEffectRoundForVehiclesAux) If Exists(v) AndAlso (v <> vAux) AndAlso (v.Metadata.launchControl <> launchControl) Then v.Metadata.launchControl = launchControl ' this makes the effect occur one time If Exists(vehJustDoIt) Then vec.X = 0 vec.Y = 0 vec.Z = 10 Else vec = (v.Position - vAux.Position) vec.Z = 10 * (vAux.Speed / 20) End If Native.Function.Call("APPLY_FORCE_TO_CAR", v, True, vec.X, vec.Y, vec.Z, 0.5, 0.5, 0.5, True, False, True, True) World.AddExplosion(v.Position.ToGround, ExplosionType.Molotov, 5.0, True, False, 0.0F) If Not Exists(vehJustDoIt) Then v.PetrolTankHealth = -1 End If Next If Not Exists(vehJustDoIt) Then For Each p As Ped In World.GetPeds(vAux.Position - (vAux.Direction * 4), throwEffectRoundForPeds) If Exists(p) AndAlso (p <> Player.Character) AndAlso (p.Metadata.launchControl <> launchControl) Then p.Metadata.launchControl = launchControl World.AddExplosion(p.Position.ToGround, ExplosionType.Molotov, 1.0, True, False, 0.0F) p.isOnFire = True End If Next msg("Speed kills...", 100) bIconSpeedKills = True End If Else If vAux.Speed < 15 Then launchControl += 1 bIconSpeedKills = False End If Else launchControl = 1 throwTimeout = 0 bIconSpeedKills = False End If If launchControl > 9999999999999999 Then launchControl = 1 ' this will never happen, but is better prevent End Sub private sub spawnChain(optional bDontAnim as boolean = false) If player.character.isinvehicle orelse isChainOn orelse player.character.isragdoll orelse player.character.isgettingup Then Exit Sub dim chainModel as model = nothing chainAttackMode = 0 pChainTargetGrab = nothing vChainTargetGrab = nothing dim aSet as animationset = nothing dim anim as string = "rifle_out" if not bDontAnim then aSet = new animationset("config_screen_m") Dim iCont As Int16 = 0 if exists(objChain(1)) andalso objChain(1).metadata.isAttToPl then for c as int16 = 1 to maxChainObj if exists(objChain(c)) then objChain(c).visible = false objChain(c).detach objChain(c).collision = true objChain(c).metadata.isAttToPl = true end if next if not bDontAnim then Player.Character.Task.PlayAnimation(aSet, anim, 10.0) While Not Player.Character.Animation.isPlaying(aSet, anim) AndAlso (iCont < 500) iCont += Me.Interval Wait(Me.Interval) End While end if Native.Function.Call("GIVE_PED_PICKUP_OBJECT", Player.Character, objChain(1)) while not objChain(1).isAttachedSomewhere wait(getInterval) player.character.health += 1 End While wait(250) attachChains exit sub end if if (player.character.weapons.current <> weapon.unarmed) then player.character.weapons.inslot(WeaponSlot.unarmed).select dim vecAux as vector3 = player.character.position + (vector3.worldup) * 2 dim vecAttach as vector3 vecAttach.y = 0.07 vecAttach.z = 0.15 dim vecSum as vector3 iCont = 0 if not bDontAnim then Player.Character.Task.PlayAnimation(aSet, anim, 10.0) While Not Player.Character.Animation.isPlaying(aSet, anim) AndAlso (iCont < 500) iCont += Me.Interval Wait(Me.Interval) End While end if vecSum = vecChainDim * 2 vecSum.x = 0 vecSum.y = 0 for c as int16 = 1 to maxChainObj objChain(c) = nothing next chainModel = New Model("cj_proc_brick") wait(10) objChain(1) = World.CreateObject(chainModel, vecAux) while not exists(objChain(1)) andalso (iCont < 250) wait(getInterval) iCont += Me.Interval player.character.health += 1 end while if not exists(objChain(1)) then msg("There is something wrong...", 2000) exit sub end if objChain(1).visible = false objChain(1).metadata.isAttToPl = false objChain(1).collision = true ' Native.Function.Call("SET_OBJECT_AS_STEALABLE", objChain(1), 1) ' Native.Function.Call("SET_OBJECT_DYNAMIC", objChain(1), 1) ' Native.Function.Call("MARK_OBJECT_AS_NO_LONGER_NEEDED", objChain(1)) Native.Function.Call("GIVE_PED_PICKUP_OBJECT", Player.Character, objChain(1)) while not objChain(1).isAttachedSomewhere wait(getInterval) player.character.health += 1 End While objChain(1).visible = true for c as int16 = 2 to maxChainObj chainModel = New Model("cj_proc_brick") wait(10) objChain(c) = World.CreateObject(chainModel, vecAux) iCont = 0 while not exists(objChain(c)) andalso (iCont < 250) wait(getInterval) iCont += Me.Interval player.character.health += 1 end while if not exists(objChain(c)) then msg("There is something wrong...", 2000) exit sub end if objChain(c).visible = false objChain(c).metadata.isAttToPl = true objChain(c).collision = true ' Native.Function.Call("SET_OBJECT_DYNAMIC", objChain(c), 1) ' Native.Function.Call("SET_OBJECT_AS_STEALABLE", objChain(c), 1) ' Native.Function.Call("MARK_OBJECT_AS_NO_LONGER_NEEDED", objChain(c)) objChain(c).detach objChain(c).attachtoped(player.character, bone.spine, vecAttach, vector3.zero) vecAux += vecSum next wait(250) attachChains startChainFire() end sub private sub AttachChains if player.character.isragdoll orelse player.character.isGettingUp then exit sub dim bShow as boolean = false for c as int16 = 2 to maxChainObj if exists(objChain(c)) then if objChain(c).metadata.isAttToPl then objChain(c).detach objChain(c).metadata.isAttToPl = false end if if not objChain(c).isAttachedSomewhere then bShow = true chainAttackMode = 0 pChainTargetGrab = nothing vChainTargetGrab = nothing native.function.call("ATTACH_OBJECT_TO_OBJECT_PHYSICALLY", objChain(c), objChain(c - 1), false, 0, _ vecChainDim.x / 2, vecChainDim.y / 2, vecChainDim.z / 2, 0.05, 0.05, 0.05, 0, 0) end if end if next if bShow then for c as int16 = 2 to maxChainObj if exists(objChain(c)) then objChain(c).visible = true next end if end sub Private Function chainFindTarget() Try If (chainAttackMode = 2) AndAlso Not Exists(pChainTargetGrab) Then pChainTargetGrab = pedTargeted Else pChainTarget = pedTargeted End If If (chainAttackMode = 2) AndAlso Not Exists(vChainTargetGrab) Then vChainTargetGrab = vehTargeted Else vChainTarget = vehTargeted End If If chainAttackMode <> 2 Then Return Exists(pChainTarget) OrElse Exists(vChainTarget) Else Return Exists(pChainTargetGrab) OrElse Exists(vChainTargetGrab) End If If (pedTargeted <> pChainTargetGrab) Then If chainAttackMode <> 2 Then If Exists(pedTargeted.CurrentVehicle) Then vChainTarget = pedTargeted.CurrentVehicle Return True Else pChainTarget = pedTargeted Return True End If Else pChainTargetGrab = pedTargeted Return True End If End If If Not Exists(pChainTarget) AndAlso Not Exists(vChainTarget) Then vChainTarget = vehTargeted If chainAttackMode = 1 Then If vChainTarget <> vChainTargetGrab Then Return True End If Else If vChainTarget <> vChainTargetGrab Then vChainTargetGrab.CanBeDamaged = False vChainTargetGrab.MakeProofTo(False, True, False, False, False) vChainTargetGrab.PetrolTankHealth = 1 If vChainTargetGrab.Speed > 5 Then vChainTargetGrab.ApplyForce(vChainTargetGrab.Velocity * -1) Return True End If End If End If Return False Catch Return False End Try End Function Private Sub chainThrowAnim() Dim icont As Int16 = 0 Player.Character.Animation.Play(aSetChainAttack, "throwrubbish", 10.0, AnimationFlags.Unknown01) While Not Player.Character.Animation.isPlaying(aSetChainAttack, "throwrubbish") AndAlso (icont < 500) icont += Me.Interval Wait(Me.Interval) End While End Sub Private Sub chainGrabAnim() Dim icont As Int16 = 0 Player.Character.Animation.Play(aSetChainGrab, "disarm_knife_r", 10.0, AnimationFlags.Unknown01) While Not Player.Character.Animation.isPlaying(aSetChainGrab, "disarm_knife_r") AndAlso (icont < 500) icont += Me.Interval Wait(Me.Interval) End While End Sub private sub chainAttack1 if chainAttackMode <> 1 then exit sub if exists(pChainTarget) andalso exists(objChain(maxChainObj)) then timeOutMoveChain = 0 If (Not Exists(vChainTargetGrab) AndAlso moveChaintoPed(pChainTarget, 0)) OrElse (Exists(vChainTargetGrab) AndAlso moveChainToVec(grabTargetPos, 1, 0)) Then 'moveChaintoVec(vChainTargetGrab.metadata.ChainTargetPos, 1, 0)) then If Exists(vChainTargetGrab) Then vChainTargetGrab.PetrolTankHealth = -1 World.AddExplosion(pChainTarget.Position, ExplosionType.Molotov, 10.0, True, False, 0) pChainTarget.isRagdoll = True pChainTarget.isOnFire = True If Not Exists(pChainTargetGrab) AndAlso Not Exists(vChainTargetGrab) Then _ pChainTarget.Velocity = Game.CurrentCamera.Direction * 15 + Vector3.WorldUp * 3 pChainTarget.isRagdoll = False pChainTarget = Nothing pChainTargetGrab = Nothing vChainTarget = Nothing vChainTargetGrab = Nothing chainAttackMode = 0 FleePeds(pChainTarget.Position, 5.0F) FleePeds(Player.Character.Position, 5.0F) End If end if if exists(vChainTarget) andalso exists(objChain(maxChainObj)) then 'timeOutMoveChain = 0 If (Not Exists(vChainTargetGrab) AndAlso moveChainToVeh(vChainTarget, 0, 10)) OrElse (Exists(vChainTargetGrab) AndAlso moveChainToVec(grabTargetPos, 1, 0)) Then 'moveChainToVec(vChainTargetGrab.metadata.ChainTargetPos, 1, 0)) then If Exists(vChainTargetGrab) Then vChainTargetGrab.PetrolTankHealth = -1 If Not Exists(pChainTargetGrab) Then FleePeds(vChainTarget.Position, 10.0F) FleePeds(Player.Character.Position, 10.0F) If vChainTarget.Model.isHelicopter Then vChainTarget.PetrolTankHealth = 0 vChainTarget.EngineHealth = 0 Else vChainTarget.PetrolTankHealth = 1 End If If Not Exists(vChainTargetGrab) Then vChainTarget.ApplyForce(Vector3.WorldUp * 8 + ((Game.CurrentCamera.Direction * 2) - vChainTarget.Velocity) * 2, Vector3.WorldUp * 2) World.AddExplosion(vChainTarget.Position, ExplosionType.Molotov, 10.0, True, False, 0.0F) Else World.AddExplosion(vChainTarget.Position, ExplosionType.Rocket, 2.0, True, False, 0.5) End If Else vChainTarget.ApplyForce(Vector3.WorldDown * 15) End If For c As Int16 = 0 To 5 random(1, 11) random(1, 11) If random(1, 11) Mod 2 = 0 Then Native.Function.Call("BREAK_CAR_DOOR", vChainTarget, c, False) Next pChainTarget = Nothing pChainTargetGrab = Nothing vChainTarget = Nothing vChainTargetGrab = Nothing chainAttackMode = 0 Wait(500) End If end if if (not exists(pChainTarget) andalso not exists(vChainTarget)) orelse not exists(objChain(maxChainObj)) then pChainTarget = nothing pChainTargetGrab = nothing vChainTarget = nothing vChainTargetGrab = nothing chainAttackMode = 0 end if end sub private sub chainGrab if (chainAttackMode <> 2) andalso (chainAttackMode <> 3) then exit sub if exists(pChainTargetGrab) andalso exists(objChain(maxChainObj)) then timeOutMoveChain = 0 if ((chainAttackMode = 2) andalso moveChaintoPed(pChainTargetGrab, 0)) orelse (chainAttackMode = 3) then if ChainGrabFlyFromVeh then pChainTargetGrab.isRagdoll = True vecVelocityGeneral = (objChain(maxChainObj).Position - pChainTargetGrab.Position) * (objChain(maxChainObj).Position.DistanceTo(pChainTargetGrab.Position) * 10) pChainTargetGrab.Velocity = ControlVelocity(vecVelocityGeneral, 100.0) if timeScript mod 500 = 0 then native.function.call("ON_FIRE_SCREAM", pChainTargetGrab) chainAttackMode = 3 end if end if end if if exists(vChainTargetGrab) andalso exists(objChain(maxChainObj)) then timeOutMoveChain = 0 if ((chainAttackMode = 2) andalso moveChaintoVeh(vChainTargetGrab, 0)) orelse (chainAttackMode = 3) then if chainAttackMode = 2 then World.AddExplosion(vChainTargetGrab.Position.ToGround, ExplosionType.Molotov, 3.0, True, False, 0.0F) vChainTargetGrab.applyforce(vector3.worlddown * 3) end if chainAttackMode = 3 end if end if end sub private function ChainGrabFlyFromVeh try if exists(pChainTargetGrab.currentvehicle) then if not pChainTargetGrab.currentvehicle.model.isboat then dim hAux as int16 = player.character.heading - pChainTargetGrab.currentvehicle.heading native.function.call("SET_PED_FORCE_FLY_THROUGH_WINDSCREEN", pChainTargetGrab) dim iCont as int16 = 0 while (iCont < 500) andalso exists(pChainTargetGrab.currentvehicle) wait(getInterval) timeOutMoveChain = 0 moveChaintoPed(pChainTargetGrab, 0) iCont += Me.Interval player.character.health += 1 end while native.function.call("BREAK_CAR_DOOR", pChainTargetGrab.currentvehicle, 1, false) native.function.call("BREAK_CAR_DOOR", pChainTargetGrab.currentvehicle, 3, false) native.function.call("BREAK_CAR_DOOR", pChainTargetGrab.currentvehicle, 0, false) native.function.call("BREAK_CAR_DOOR", pChainTargetGrab.currentvehicle, 2, false) if iCont >= 500 then pChainTargetGrab.task.leavevehicleimmediately(pChainTargetGrab.currentvehicle) iCont = 0 while (iCont < 500) andalso exists(pChainTargetGrab.currentvehicle) wait(getInterval) timeOutMoveChain = 0 moveChaintoPed(pChainTargetGrab, 0) iCont += Me.Interval player.character.health += 1 end while if iCont >= 500 then chainAttackMode = 0 pChainTargetGrab = nothing pChainTarget = nothing return false end if end if else pChainTargetGrab.task.leavevehicleimmediately(pChainTargetGrab.currentvehicle) end if end if catch end try return true end function private sub FleePeds(vec as vector3, round as double, optional pedIgnore as ped = nothing) try dim bIgnore as boolean = false for each p as ped in world.getpeds(vec, round) if exists(p) andalso (p <> player.character) andalso (p <> pedIgnore) andalso (p <> pChainTarget) andalso (p <> pChainTargetGrab) then for c as int16 = 1 to penanceStaretArrCount if exists(penanceStaretArr(c)) andalso (p = penanceStaretArr(c)) then bIgnore = true exit for end if next if not bIgnore then if (p.pedtype <> PedType.Cop) andalso (not exists(p.currentvehicle) orelse (exists(p.currentvehicle) andalso not p.currentvehicle.model.ishelicopter)) then p.task.FleeFromChar(player.character) else p.enemy = true if player.WantedLevel = 0 then player.WantedLevel = 1 end if end if end if next catch end try end sub private function moveChaintoPed(p as ped, freezeTime as int16, optional speed as double = 1) if exists(p) andalso exists(objChain(maxChainObj)) then if timeOutMoveChain > 700 then chainAttackMode = 0 vChainTarget = nothing pChainTarget = nothing return true end if if chainAttackMode > 0 then player.character.heading = game.currentcamera.heading if (not exists(p.currentvehicle) andalso not native.function.call(of boolean)("IS_CHAR_TOUCHING_OBJECT", p, objChain(maxChainObj))) orelse (exists(p.currentvehicle) andalso not native.function.call(of boolean)("IS_VEHICLE_TOUCHING_OBJECT", p.currentvehicle, objChain(maxChainObj))) then timeOutMoveChain += Me.Interval vecVelocityGeneral = ((p.Position - objChain(maxChainObj).Position) * p.Position.DistanceTo(objChain(maxChainObj).Position) * 25) * speed objChain(maxChainObj).Velocity = ControlVelocity(vecVelocityGeneral, 100.0) if (objChain(maxChainObj).position.distanceto(p.position) < 3) andalso (objChain(maxChainObj).velocity.distanceto(vector3.zero) < 10) then return true end if If (chainAttackMode = 1) AndAlso Exists(pChainTargetGrab) AndAlso (pChainTargetGrab.Position.DistanceTo(p.Position) > 4) Then vecVelocityGeneral = ((p.Position - pChainTargetGrab.Position) * 5) pChainTargetGrab.Velocity = ControlVelocity(vecVelocityGeneral, 100.0) if (freezeTime = 0) andalso (pChainTargetGrab <> p) andalso (pChainTargetGrab.position.distanceto(p.position) < 2) then return true end if End If If Exists(vChainTargetGrab) Then 'vChainTargetGrab.ApplyForce((p.Position - vChainTargetGrab.Position) * 2) vChainTargetGrab.ApplyForce(Vector3.Normalize(p.Position - vChainTargetGrab.Position) * 20) If (freezeTime = 0) AndAlso (vChainTargetGrab.Position.DistanceTo(p.Position) < 10) Then Return True End If end if Return False Else While freezeTime >= 0 freezeTime -= getInterval() vecVelocityGeneral = ((p.GetBonePosition(Bone.Head) - objChain(maxChainObj).Position) * _ p.GetBonePosition(Bone.Head).DistanceTo(objChain(maxChainObj).Position) * 10) objChain(maxChainObj).Velocity = ControlVelocity(vecVelocityGeneral, 50.0) Wait(getInterval) End While Return True End If Else Return False End If end function private function moveChainToVeh(v as vehicle, freezeTime as int16, optional speed as double = 1) if exists(v) andalso exists(objChain(maxChainObj)) then if timeOutMoveChain > 700 then chainAttackMode = 0 vChainTarget = nothing pChainTarget = nothing return true end if if chainAttackMode > 0 then player.character.heading = game.currentcamera.heading if (objChain(maxChainObj).position.distanceto(v.position) > 1) andalso not native.function.call(of boolean)("IS_VEHICLE_TOUCHING_OBJECT", v, objChain(maxChainObj)) then timeOutMoveChain += Me.Interval vecVelocityGeneral = ((v.Position - objChain(maxChainObj).Position) * _ v.Position.DistanceTo(objChain(maxChainObj).Position) * 10) * speed objChain(maxChainObj).Velocity = ControlVelocity(vecVelocityGeneral, 100.0) If Exists(pChainTargetGrab) AndAlso (pChainTargetGrab.Position.DistanceTo(v.Position) > 2) Then vecVelocityGeneral = ((v.Position - pChainTargetGrab.Position) * 15) * speed pChainTargetGrab.Velocity = ControlVelocity(vecVelocityGeneral, 100.0) if (freezeTime = 0) andalso (pChainTargetGrab.position.distanceto(v.position) < 2) then return true end if End If If Exists(vChainTargetGrab) Then 'vChainTargetGrab.ApplyForce((v.Position - vChainTargetGrab.Position) * 2) vChainTargetGrab.ApplyForce(Vector3.Normalize(v.Position - vChainTargetGrab.Position)) if (freezeTime = 0) andalso (vChainTargetGrab <> v) andalso (vChainTargetGrab.position.distanceto(v.position) < 3) then return true end if end if Return False Else While freezeTime >= 0 freezeTime -= getInterval() vecVelocityGeneral = ((v.Position - objChain(maxChainObj).Position) * _ v.Position.DistanceTo(objChain(maxChainObj).Position) * 5) * speed objChain(maxChainObj).Velocity = ControlVelocity(vecVelocityGeneral, 50.0) Wait(getInterval) End While Return True End If Else Return False End If end function private function moveChainToVec(v as vector3, speed as double, freezeTime as int16) if exists(objChain(maxChainObj)) then if timeOutMoveChain > 700 then chainAttackMode = 0 return true end if if chainAttackMode > 0 then player.character.heading = game.currentcamera.heading if (objChain(maxChainObj).position.distanceto(v) > 2) then timeOutMoveChain += Me.Interval vecVelocityGeneral = (v - objChain(maxChainObj).Position) * v.DistanceTo(objChain(maxChainObj).Position) * 2 * speed objChain(maxChainObj).Velocity = ControlVelocity(vecVelocityGeneral, 100.0) If Exists(pChainTargetGrab) Then vecVelocityGeneral = (v - pChainTargetGrab.Position) * 10 * speed pChainTargetGrab.Velocity = ControlVelocity(vecVelocityGeneral, 100.0) if (freezeTime = 0) andalso (pChainTargetGrab.position.distanceto(v) <= 1) then return true End If If Exists(vChainTargetGrab) Then If (freezeTime = 0) AndAlso Exists(vChainTarget) AndAlso vChainTarget.Model.isHelicopter AndAlso Not vChainTarget.Metadata.hit Then If vChainTargetGrab.Position.DistanceTo(Player.Character.Position) > vChainTargetGrab.Position.DistanceTo(vChainTarget.Position) Then _ vChainTarget.Metadata.hit = True If vChainTargetGrab.Position.DistanceTo(vChainTarget.Position) < 20 Then 'vChainTargetGrab.ApplyForce((vChainTarget.Position - vChainTargetGrab.Position)) vChainTargetGrab.ApplyForce(Vector3.Normalize(vChainTarget.Position - vChainTargetGrab.Position) * 50) End If Else 'vChainTargetGrab.ApplyForce((v - vChainTargetGrab.Position) / 4) vChainTargetGrab.ApplyForce(Vector3.Normalize(v - vChainTargetGrab.Position) * 10) End If if (freezeTime = 0) andalso (vChainTargetGrab.position.distanceto(v) <= 3) then return true end if End If Return False Else If Exists(pChainTargetGrab) Then pChainTargetGrab.Velocity = Vector3.Zero While freezeTime >= 0 freezeTime -= getInterval() objChain(maxChainObj).Velocity = (v - objChain(maxChainObj).Position) * v.DistanceTo(objChain(maxChainObj).Position) * 2 * speed If Exists(pChainTargetGrab) Then pChainTargetGrab.Velocity = Vector3.WorldUp / 2 If Exists(vChainTargetGrab) Then vChainTargetGrab.ApplyForce(Vector3.WorldUp / 3, Vector3.WorldEast * 3) Wait(getInterval) End While Return True End If Else Return False End If end function private sub chainTick try if exists(player.character.currentvehicle) andalso _ (player.character.weapons.current = weapon.Misc_Object) andalso exists(objChain(1)) andalso objChain(1).isAttachedSomewhere then if (player.character.weapons.current <> weapon.unarmed) then player.character.weapons.inslot(weapon.unarmed).select end if if (player.character.weapons.current <> weapon.Misc_Object) orelse _ (exists(objChain(2)) andalso not objChain(2).metadata.isAttToPl andalso not objChain(2).isAttachedSomewhere) then if (exists(objChain(1)) andalso (not objChain(1).metadata.isAttToPl orelse not objChain(1).isAttachedSomewhere) orelse (exists(objChain(2)) andalso not objChain(2).isAttachedSomewhere)) then _ unequipChains bIconChains = False exit sub End If If ((Player.Character.Weapons.Current = Weapon.Misc_Object) AndAlso Exists(objChain(1)) AndAlso _ objChain(1).isAttachedSomewhere And Exists(objChain(2)) AndAlso objChain(2).Metadata.isAttToPl) Then unequipChains() Exit Sub End If If (Exists(objChain(1)) AndAlso Not objChain(1).isAttachedSomewhere) Then unequipChains() bIconChains = True chainAttack1() chainGrab() If (chainAttackMode = 0) OrElse (chainAttackMode = 3) Then If Not Exists(vChainTargetGrab) Then For c As Int16 = 2 To maxChainObj If Exists(objChain(c)) Then objChain(c).isOnFire = False If Game.isKeyPressed(hkAimKey) Then If Player.Character.Weapons.Current <> Weapon.Misc_Object Then Player.Character.Weapons.inSlot(Weapon.Misc_Object).Select End If vecChainVelocity = ((objChain(1).Position - objChain(c).Position) * 3 + Vector3.WorldDown / 1.5 _ + (objChain(1).Direction * 4)) + Player.Character.Velocity + Vector3.WorldDown ElseIf Player.Character.Weapons.Current = Weapon.Misc_Object Then vecChainVelocity = ((objChain(c - 1).Position - objChain(c).Position) * 3 * objChain(5).Position.DistanceTo(Player.Character.Position) _ + Vector3.WorldDown / 1.5 _ - (Player.Character.Direction / 1.6) + (objChain(1).Direction / 3)) + Player.Character.Velocity End If While vecChainVelocity.DistanceTo(Vector3.Zero) > 30 vecChainVelocity = vecChainVelocity / 2 End While If objChain(1).isAttachedSomewhere AndAlso objChain(2).isAttachedSomewhere Then If (c > 2) AndAlso (c < 7) AndAlso Native.Function.Call(Of Boolean)("IS_CHAR_TOUCHING_OBJECT", Player.Character, objChain(c)) Then objChain(c).Velocity = objChain(c).Position - Player.Character.Position Else objChain(c).Velocity = vecChainVelocity End If End If End If Next ElseIf objChain(1).isAttachedSomewhere AndAlso objChain(2).isAttachedSomewhere Then If Exists(objChain(maxChainObj)) Then vecVelocityGeneral = (vChainTargetGrab.Position - objChain(maxChainObj).Position) * 10 objChain(maxChainObj).Velocity = ControlVelocity(vecVelocityGeneral, 50.0) End If If (vChainTargetGrab.Speed < 10) AndAlso (vChainTargetGrab.Position.DistanceTo(Player.Character.Position) > 10) Then vChainTargetGrab.ApplyForce((Player.Character.Position - vChainTargetGrab.Position) / Player.Character.Position.DistanceTo(vChainTargetGrab.Position)) End If If (vChainTargetGrab.Speed > 1) AndAlso (vChainTargetGrab.Position.DistanceTo(Player.Character.Position) < 5) Then Try vChainTargetGrab.ApplyForce(Vector3.WorldDown * 3) Wait(200) vChainTargetGrab.FreezePosition = True vChainTargetGrab.FreezePosition = False Catch End Try End If End If End If Catch End Try end sub Private Sub unequipChains() If Exists(objChain(1)) AndAlso (Player.Character.Weapons.Current = Weapon.Misc_Object) Then Player.Character.Weapons.Current.Remove() End If chainAttackMode = 0 pChainTargetGrab = Nothing vChainTargetGrab = Nothing Dim vecAux As Vector3 vecAux.Y = 0.07 vecAux.Z = 0.15 For c As Int16 = 1 To maxChainObj If Exists(objChain(c)) Then objChain(c).Metadata.isAttToPl = True objChain(c).Detach() objChain(c).Collision = False objChain(c).AttachToPed(Player.Character, Bone.Spine, vecAux, Vector3.Zero) End If Next stopChainResFire() End Sub private sub leaveChains chainAttackMode = 0 pChainTargetGrab = nothing vChainTargetGrab = nothing stopChainFire for c as int16 = 1 to maxChainObj if exists(objChain(c)) then objChain(c).detach objChain(c).delete objChain(c) = nothing end if next end sub private sub stopChainFire dim effectAux as int32 for c as int16 = 2 to maxChainObj if exists(objChain(c)) then effectAux = objChain(c).metadata.chinEID Native.Function.Call("STOP_PTFX_ON", effectAux) end if next stopChainResFire end sub private sub stopChainResFire for c as int16 = 1 to maxChainObj if exists(objChain(c)) then world.ExtinguishFire(objChain(c).position, 2.0) end if next end sub private sub startChainFire for c as int16 = 2 to maxChainObj if exists(objChain(c)) then objChain(c).metadata.chinEID = Native.Function.Call(of int32)("START_PTFX_ON_OBJ", "ambient_fire_generic", objChain(c), 0, 0, 0, 0, 0, 0, 0.25) end if next end sub private function isChainOn if exists(objChain(1)) andalso (player.character.weapons.current = weapon.Misc_Object) andalso exists(objChain(2)) andalso not objChain(2).metadata.isAtttoPl then return true else chainAttackMode = 0 pChainTargetGrab = nothing vChainTargetGrab = nothing return false end if End Function Private Function ControlVelocity(ByVal vel As Vector3, ByVal max As Double, optional min as double = 0) Dim vecAux As Vector3 = vel While vecAux.DistanceTo(Vector3.Zero) > max vecAux = vecAux / 2 End While While (min > 0) andalso (vecAux.DistanceTo(Vector3.Zero) < min) vecAux = vecAux * 1.1 End While Return vecAux End Function private function targetedGround(maxDist as double) dim vec as vector3 = player.character.getboneposition(bone.head) + game.currentcamera.direction * 6 dim vecRes as vector3 while vec.distanceto(player.character.position) < maxDist vecRes = world.getgroundposition(vec, groundtype.highest) 'ChainTargetVeh = world.getclosestvehicle(vec, 1.5) ChainTargetVeh = vehTargeted 'if not exists(ChainTargetVeh) then ChainTargetVeh = world.getclosestvehicle(vec, 3.0) if exists(ChainTargetVeh) then exit while if vecRes.distanceto(vec) < 1 then return vecRes vec += game.currentcamera.direction / 2 end while return vector3.zero end function private sub ChainWarpToPos(optional targetVeh as vehicle = nothing) dim vecAux as vector3 if not exists(ChainTargetVeh) then vecAux = targetedGround(200) else vecAux = ChainTargetVeh.position end if player.character.invincible = true if vecAux <> vector3.zero then PlaySound(".\scripts\GRSounds\ChainDrag.wav") chainThrowAnim() timeOutMoveChain = 0 while not moveChainToVec(player.character.position + player.character.direction * 2 + vector3.worldup * 4, 1, 100) wait(10) end while timeOutMoveChain = 500 while not moveChainToVec(vecAux, 1.5, 0) wait(10) if exists(ChainTargetVeh) then vecAux = ChainTargetVeh.position end while dim pedDriverAux as ped = nothing dim timeOut as int16 = 0 if exists(ChainTargetVeh) then wait(250) pedDriverAux = ChainTargetVeh.getPedOnSeat(vehicleSeat.driver) if exists(pedDriverAux) then while exists(pedDriverAux) andalso pedDriverAux.isinvehicle andalso (timeOut < 1000) native.function.call("SET_PED_FORCE_FLY_THROUGH_WINDSCREEN", pedDriverAux) moveChainToVec(pedDriverAux.position, 1, 0) wait(100) updateLightPos timeOut += 100 end while wait(250) if exists(pedDriverAux) andalso pedDriverAux.isinvehicle then pedDriverAux.delete end if native.function.call("BREAK_CAR_DOOR", ChainTargetVeh, 0, false) end if player.character.metadata.headingOriginal = player.character.heading player.character.euphoria.bodybalance.start player.character.euphoria.pedallegs.start dim vecDim as vector3 if not exists(ChainTargetVeh) then vecAux += vector3.worldup * 3 + player.character.direction / 2 else if ChainTargetVeh.model.ishelicopter then vecDim = vector3.worlddown else vecDim = ChainTargetVeh.model.getdimensions end if vecAux = ChainTargetVeh.position vecAux.z += vecDim.z end if dim maxSpeed as double = 0 dim failCont as int16 = 0 while (player.character.position.distanceto(vecAux) > 1) if exists(ChainTargetVeh) then vecAux = ChainTargetVeh.position vecAux.z += vecDim.z pedDriverAux = ChainTargetVeh.getPedOnSeat(vehicleSeat.driver) if exists(pedDriverAux) then native.function.call("SET_PED_FORCE_FLY_THROUGH_WINDSCREEN", pedDriverAux) end if timeOutMoveChain = 0 moveChainToVec(vecAux - vector3.worldup * 3, 1, 0) updateLightPos if exists(objChain(1)) then objChain(1).velocity = ControlVelocity((vecAux + vector3.worldup * 2 - objChain(1).position) * 10, 55, 40) end if player.character.velocity = ControlVelocity((vecAux - player.character.position) / 3, 30, 25) wait(10) updateLightPos if maxSpeed - player.character.velocity.distanceto(vector3.zero) > 10 then player.character.velocity = vector3.worldup * 10 failCont += 10 if failCont > 1000 then exit while end if if player.character.velocity.distanceto(vector3.zero) > maxSpeed then maxSpeed = player.character.velocity.distanceto(vector3.zero) end while player.character.isragdoll = false if exists(ChainTargetVeh) then ChainTargetVeh.makeproofto(false, true, false, false, false) world.addexplosion(ChainTargetVeh.position, explosiontype.molotov, 1.0) pedDriverAux = ChainTargetVeh.getPedOnSeat(vehicleSeat.driver) player.character.velocity = vector3.zero if exists(pedDriverAux) then pedDriverAux.delete wait(250) end if player.character.warpintovehicle(ChainTargetVeh, vehicleseat.driver) for each p as ped in world.getpeds(ChainTargetVeh.position, 3.0) if exists(p) andalso (p <> player.character) then p.isonfire = true end if next else player.character.position = vecAux player.character.heading = player.character.metadata.headingOriginal player.character.animation.play(aSetChainClimb, "jump_land_roll", 10.0, animationflags.unknown01) wait(100) while player.character.animation.isplaying(aSetChainClimb, "jump_land_roll") wait(10) updateLightPos end while RequipChainCounter = 500 end if end if player.character.invincible = false end sub End Class