Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement