'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