Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Imports System
- Imports System.Drawing
- Imports System.Windows.Forms
- Imports GTA
- Imports System.IO
- Public Class ChainSaw
- Inherits Script
- Private chainSaw As GTA.Object = Nothing
- Private chainSaw2 As GTA.Object = Nothing
- Private bChainOn As Boolean = False
- Private RotAttacking As Vector3
- Private PosAttacking As Vector3
- Private RotWalking As Vector3
- Private PosWalking As Vector3
- Private affectedVehicles As Vehicle()
- Private timeSearchAffected As Double = 0
- Private bSetWalking As Boolean = True
- Private bSetAttacking As Boolean = True
- Private soundWalking As System.Media.SoundPlayer = New System.Media.SoundPlayer
- Private soundAttacking As System.Media.SoundPlayer = New System.Media.SoundPlayer
- Shared texBlood1 As Texture
- Shared texBlood2 As Texture
- Shared tRandom As Random = New Random()
- Shared myInterval As Int16 = 10
- Private timeCheckPlayer As Int16 = 0
- Private hkActivate As Keys
- Private bHasChaina As Boolean = False
- Private bWasBikeMode As Boolean = False
- Private bWasntBikeMode As Boolean = False
- Private lastPlayerPos As Vector3
- Private Function BikeMode() As Boolean
- Return Exists(Player.Character.CurrentVehicle) AndAlso Player.Character.CurrentVehicle.Model.isBike
- End Function
- Public Sub New()
- Me.Interval = myInterval
- Wait(500)
- hkActivate = Helper.StringToKey(settingsGetValueString("hkActivate", "general", "D0"), Keys.D0)
- Dim sModel As String = settingsGetValueString("model_name", "general", "chainsaw")
- PosAttacking.X = Double.Parse(settingsGetValueString("x", "attack_pos", "-0.05"))
- PosAttacking.Y = Double.Parse(settingsGetValueString("y", "attack_pos", "0.25"))
- PosAttacking.Z = Double.Parse(settingsGetValueString("z", "attack_pos", "-0.3"))
- RotAttacking.X = Double.Parse(settingsGetValueString("x", "attack_rot", "-3.6"))
- RotAttacking.Y = Double.Parse(settingsGetValueString("y", "attack_rot", "-0.6"))
- RotAttacking.Z = Double.Parse(settingsGetValueString("z", "attack_rot", "-0.6"))
- PosWalking.X = Double.Parse(settingsGetValueString("x", "walking_pos", "0"))
- PosWalking.Y = Double.Parse(settingsGetValueString("y", "walking_pos", "0.2"))
- PosWalking.Z = Double.Parse(settingsGetValueString("z", "walking_pos", "0.35"))
- RotWalking.X = Double.Parse(settingsGetValueString("x", "walking_rot", "-1.2"))
- RotWalking.Y = Double.Parse(settingsGetValueString("y", "walking_rot", "1.5"))
- RotWalking.Z = Double.Parse(settingsGetValueString("z", "walking_rot", "0.9"))
- Settings.Save()
- For Each o As GTA.Object In World.GetAllObjects(sModel)
- o.Delete()
- Next
- While Not Exists(chainSaw)
- chainSaw = World.CreateObject(sModel, Vector3.Zero)
- Wait(50)
- End While
- chainSaw.Visible = False
- chainSaw.Collision = False
- chainSaw.FreezePosition = True
- While Not Exists(chainSaw2)
- chainSaw2 = World.CreateObject(sModel, Vector3.Zero)
- Wait(50)
- End While
- chainSaw2.Visible = False
- chainSaw2.Collision = False
- chainSaw2.FreezePosition = True
- soundWalking.SoundLocation = ".\scripts\ChainSaw Files\Idle.wav"
- soundAttacking.SoundLocation = ".\scripts\ChainSaw Files\Attack.wav"
- texBlood1 = New Texture(File.ReadAllBytes(".\scripts\ChainSaw Files\Blood1.png"))
- texBlood2 = New Texture(File.ReadAllBytes(".\scripts\ChainSaw Files\Blood2.png"))
- Native.Function.Call("SET_ANIM_GROUP_FOR_CHAR", Player.Character, "move_player")
- Game.Console.Print("Chainsaw script by JulioNIB")
- End Sub
- Private Function settingsGetValueString(sOption As String, sCategory As String, sDefault As String) As String
- If Settings.GetValueString(sOption, sCategory, "") = "" Then Settings.SetValue(sOption, sCategory, sDefault)
- Return Settings.GetValueString(sOption, sCategory, "")
- End Function
- Private Class Blood
- Public tex As Texture
- Public x, y, w, h As Int16
- Public timeWait As Double
- Public Sub New()
- If tRandom.NextDouble <= 0.5 Then
- tex = texBlood1
- Else
- tex = texBlood2
- End If
- x = Game.Resolution.Width * tRandom.NextDouble + 10
- y = Game.Resolution.Height * tRandom.NextDouble + 10
- w = 55 + tRandom.NextDouble
- h = 55 + tRandom.NextDouble
- timeWait = tRandom.Next(100, 300)
- End Sub
- Public Sub tick()
- y += 1
- w -= tRandom.NextDouble * 0.7
- h = w
- If timeWait > 0 Then timeWait -= myInterval
- End Sub
- End Class
- Private BloodList As New List(Of Blood)
- Private tmpBlood As Blood
- Private Class Peds
- Public p As Ped
- Public bleedingTime As Double = 0
- Public fleeing As Boolean = False
- Public Sub New(tped As Ped)
- p = tped
- End Sub
- Public Sub flee(attacker As Ped)
- fleeing = True
- If (tRandom.NextDouble < 0.5) AndAlso Not p.CurrentVehicle Is Nothing AndAlso (p.CurrentVehicle.GetPedOnSeat(VehicleSeat.Driver) = p) Then
- p.Task.CruiseWithVehicle(p.CurrentVehicle, 80, False)
- Else
- p.Task.FleeFromChar(attacker)
- End If
- End Sub
- End Class
- Private PedsList As New List(Of Peds)
- Private tmpPed As Peds = Nothing
- Private Sub msg(ByVal smsg As String, ByVal duracao As Int32)
- Native.Function.Call("PRINT_STRING_WITH_LITERAL_STRING_NOW", "STRING", smsg, duracao, 1)
- End Sub
- Private Sub keyDown(ByVal sender As Object, ByVal e As GTA.KeyEventArgs) Handles MyBase.KeyDown
- If e.Key = hkActivate Then
- If Player.Character.isRagdoll OrElse (Exists(Player.Character.CurrentVehicle) AndAlso Not Player.Character.CurrentVehicle.Model.isBike) Then
- bChainOn = False
- Exit Sub
- End If
- bChainOn = Not bChainOn
- If bChainOn Then
- equipChain()
- Else
- stopChain(False)
- End If
- End If
- If bChainOn AndAlso (e.Key = Keys.RButton) AndAlso Not Exists(Player.Character.CurrentVehicle) AndAlso _
- Not Native.Function.Call(Of Boolean)("IS_CHAR_PLAYING_ANIM", Player.Character, "gun@ak47", "melee") Then
- Player.Character.Animation.Play(New AnimationSet("gun@ak47"), "melee", 5, AnimationFlags.Unknown12 Or AnimationFlags.Unknown11 Or AnimationFlags.Unknown10 Or AnimationFlags.Unknown09)
- End If
- End Sub
- Private Sub equipChain()
- bChainOn = True
- chainSaw.Collision = True
- chainSaw.Visible = True
- bSetAttacking = True
- bSetWalking = True
- timeCheckPlayer = 0
- If BikeMode() Then
- chainSaw2.Collision = True
- chainSaw2.Visible = True
- chainSaw2.FreezePosition = False
- Else
- chainSaw2.Collision = False
- chainSaw2.Visible = False
- chainSaw2.FreezePosition = True
- End If
- End Sub
- Private Sub stopChain(bDropChain As Boolean)
- bChainOn = False
- chainSaw.Detach()
- chainSaw.Velocity = (Vector3.WorldDown)
- chainSaw2.Detach()
- chainSaw2.Velocity = (Vector3.WorldDown)
- If Not bDropChain Then
- chainSaw.Visible = False
- chainSaw.Collision = False
- chainSaw.FreezePosition = True
- chainSaw2.Visible = False
- chainSaw2.Collision = False
- chainSaw2.FreezePosition = True
- End If
- Native.Function.Call("SET_ANIM_GROUP_FOR_CHAR", Player.Character, "move_player")
- bSetAttacking = True
- bSetWalking = True
- soundAttacking.Stop()
- soundWalking.Stop()
- End Sub
- Private Sub keyUp(ByVal sender As Object, ByVal e As GTA.KeyEventArgs) Handles MyBase.KeyUp
- End Sub
- Private Sub general_tick(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Tick
- If bChainOn AndAlso (timeCheckPlayer Mod 500 = 0) Then
- If (Player.Character.Health <= 0) OrElse _
- Native.Function.Call(Of Boolean)("IS_PLAYER_BEING_ARRESTED", Player) Then
- stopChain(True)
- Exit Sub
- ElseIf Exists(Player.Character.CurrentVehicle) AndAlso Not BikeMode() Then
- stopChain(False)
- Exit Sub
- End If
- ElseIf Not bChainOn AndAlso (timeCheckPlayer Mod 4000 = 0) Then
- chainSaw.Visible = False
- chainSaw.Collision = False
- chainSaw.FreezePosition = True
- chainSaw2.Visible = False
- chainSaw2.Collision = False
- chainSaw2.FreezePosition = True
- End If
- timeCheckPlayer += myInterval
- If timeCheckPlayer > 5000 Then timeCheckPlayer = 0
- If bChainOn Then
- Dim bBikeMode As Boolean = BikeMode()
- If bBikeMode AndAlso Not bWasBikeMode Then
- chainSaw2.Visible = True
- chainSaw2.Collision = True
- chainSaw2.FreezePosition = False
- bSetWalking = True
- bSetAttacking = True
- End If
- If Not bBikeMode AndAlso Not bWasntBikeMode Then
- chainSaw2.Visible = False
- chainSaw2.Collision = False
- chainSaw2.FreezePosition = True
- bSetWalking = True
- bSetAttacking = True
- End If
- bWasBikeMode = bBikeMode
- bWasntBikeMode = Not bBikeMode
- Try
- Dim tmpRot As Vector3 = RotAttacking
- tmpRot.Y *= -1
- If Not Game.isGameKeyPressed(GameKey.Sprint) AndAlso (Game.isGameKeyPressed(GameKey.MoveForward) OrElse Game.isGameKeyPressed(GameKey.MoveBackward)) Then
- If bSetAttacking Then
- bSetAttacking = False
- bSetWalking = True
- If Not bBikeMode Then
- Native.Function.Call("SET_ANIM_GROUP_FOR_CHAR", Player.Character, "move_melee")
- chainSaw.AttachToPed(Player.Character, Bone.LeftHand, PosAttacking, RotAttacking)
- Else
- chainSaw.AttachToPed(Player.Character, Bone.LeftHand, Vector3.Zero, RotAttacking)
- chainSaw2.AttachToPed(Player.Character, Bone.RightHand, Vector3.Zero, tmpRot)
- End If
- soundAttacking.PlayLooping()
- End If
- Else
- If bSetWalking Then
- bSetAttacking = True
- bSetWalking = False
- If Not bBikeMode Then
- Native.Function.Call("SET_ANIM_GROUP_FOR_CHAR", Player.Character, "move_rifle")
- chainSaw.AttachToPed(Player.Character, Bone.LeftHand, PosWalking, RotWalking)
- Else
- chainSaw.AttachToPed(Player.Character, Bone.LeftHand, Vector3.Zero, RotAttacking)
- chainSaw2.AttachToPed(Player.Character, Bone.RightHand, Vector3.Zero, tmpRot)
- End If
- soundWalking.PlayLooping()
- End If
- End If
- If Not Exists(Player.Character.CurrentVehicle) AndAlso (lastPlayerPos = Player.Character.Position) Then
- Player.Character.Task.ClearAll()
- End If
- lastPlayerPos = Player.Character.Position
- Dim mySpeed As Double = Player.Character.Velocity.DistanceTo(Vector3.Zero)
- If Exists(Player.Character.CurrentVehicle) Then mySpeed = Player.Character.CurrentVehicle.Speed
- If timeSearchAffected <= 0 Then
- timeSearchAffected = 500
- PedsList.Clear()
- For Each p As Ped In World.GetPeds(Player.Character.Position, 20)
- If Exists(p) AndAlso (p <> Player.Character) AndAlso (p.Health > 0) Then
- tmpPed = New Peds(p)
- PedsList.Add(tmpPed)
- End If
- Next
- affectedVehicles = World.GetVehicles(Player.Character.Position, 20)
- Else
- timeSearchAffected -= Interval
- If mySpeed > 7.5 Then timeSearchAffected -= Interval
- End If
- Dim tmpPos As Vector3
- Dim tmpPos2 As Vector3
- Dim tmpDim As Vector3
- Dim closetToHood As Boolean = False
- Dim closetToTrunk As Boolean = False
- Dim closetToHood2 As Boolean = False
- Dim closetToTrunk2 As Boolean = False
- Dim bCloseToPos2 As Boolean = False
- If Not bBikeMode Then
- tmpPos = chainSaw.GetOffsetPosition(Vector3.RelativeRight)
- tmpPos2 = chainSaw.GetOffsetPosition(Vector3.RelativeRight * 0.5)
- Else
- tmpPos = chainSaw.GetOffsetPosition(Vector3.RelativeRight * 0.5)
- tmpPos2 = chainSaw2.GetOffsetPosition(Vector3.RelativeRight * 0.5)
- End If
- 'Native.Function.Call("draw_corona", tmpPos.X, tmpPos.Y, tmpPos.Z, 10.0, 0, 0, 255, 0, 0)
- 'Native.Function.Call("draw_corona", tmpPos2.X, tmpPos2.Y, tmpPos2.Z, 10.0, 0, 0, 255, 255, 0)
- For Each v As Vehicle In affectedVehicles
- If Exists(v) AndAlso (v <> Player.Character.CurrentVehicle) Then
- tmpDim = v.Model.GetDimensions
- If Not bBikeMode Then tmpDim.X = tmpDim.X * 0.5
- closetToHood = (v.GetOffsetPosition(Vector3.RelativeFront * tmpDim.Y * 0.3).DistanceTo(tmpPos) < tmpDim.X)
- closetToTrunk = (v.GetOffsetPosition(Vector3.RelativeBack * tmpDim.Y * 0.3).DistanceTo(tmpPos) < tmpDim.X)
- If bBikeMode AndAlso Not closetToHood Then _
- closetToHood2 = (bBikeMode AndAlso (v.GetOffsetPosition(Vector3.RelativeFront * tmpDim.Y * 0.3).DistanceTo(tmpPos2) < tmpDim.X))
- If bBikeMode AndAlso Not closetToTrunk Then _
- closetToTrunk2 = (bBikeMode AndAlso (v.GetOffsetPosition(Vector3.RelativeBack * tmpDim.Y * 0.3).DistanceTo(tmpPos2) < tmpDim.X))
- If Not closetToHood AndAlso Not closetToHood2 AndAlso Not closetToTrunk AndAlso Not closetToTrunk2 Then _
- bCloseToPos2 = (v.Position.DistanceTo(tmpPos2) < tmpDim.X)
- If (v.Model.isBike AndAlso (v.Position.DistanceTo(tmpPos) < 1)) OrElse _
- (v.Position.DistanceTo(tmpPos) < tmpDim.X) OrElse closetToHood OrElse closetToTrunk OrElse _
- closetToHood2 OrElse closetToTrunk2 OrElse bCloseToPos2 Then
- If bCloseToPos2 OrElse closetToHood2 OrElse closetToTrunk2 Then
- Native.Function.Call("TRIGGER_PTFX_ON_OBJ", "imp_bullet_metal", chainSaw2,
- 0.8, 0, 0, 0, 0, 90.0, 1.5)
- Native.Function.Call("PLAY_SOUND_FROM_position", -1, "random_main_metal_collisions", tmpPos2.X, tmpPos2.Y, tmpPos2.Z)
- Else
- Native.Function.Call("TRIGGER_PTFX_ON_OBJ", "imp_bullet_metal", chainSaw,
- 0.8, 0, 0, 0, 0, 90.0, 1.5)
- Native.Function.Call("PLAY_SOUND_FROM_position", -1, "random_main_metal_collisions", tmpPos.X, tmpPos.Y, tmpPos.Z)
- End If
- v.ApplyForce(Vector3.WorldDown * 0.05)
- If v.GetOffsetPosition(Vector3.RelativeLeft).DistanceTo(tmpPos) < tmpDim.X Then
- Native.Function.Call("BREAK_CAR_DOOR", v, 0, False)
- Native.Function.Call("BREAK_CAR_DOOR", v, 2, False)
- End If
- If v.GetOffsetPosition(Vector3.RelativeRight).DistanceTo(tmpPos) < tmpDim.X Then
- Native.Function.Call("BREAK_CAR_DOOR", v, 1, False)
- Native.Function.Call("BREAK_CAR_DOOR", v, 3, False)
- End If
- If closetToHood OrElse closetToHood2 Then
- Native.Function.Call("BREAK_CAR_DOOR", v, 4, False)
- End If
- If closetToTrunk OrElse closetToTrunk2 Then
- Native.Function.Call("BREAK_CAR_DOOR", v, 5, False)
- End If
- For Each p As Peds In PedsList
- If Exists(p.p) AndAlso (p.p.CurrentVehicle = v) AndAlso (p.p.Health > 0) Then
- p.p.LeaveVehicle()
- If p.p.PedType = PedType.Cop Then
- Native.Function.Call("ALTER_WANTED_LEVEL_no_drop", Player, 2)
- Native.Function.Call("APPLY_WANTED_LEVEL_CHANGE_NOW", Player)
- Else
- p.p.Task.FleeFromChar(Player.Character)
- End If
- End If
- Next
- End If
- End If
- Next
- Player.Character.Weapons.Unarmed.Select()
- Dim bKiller As Boolean = False
- For Each p As Peds In PedsList
- If Not Exists(p.p) Then
- PedsList.RemoveAt(PedsList.IndexOf(p))
- Exit For
- End If
- 'Native.Function.Call("draw_corona", p.p.Position.X, p.p.Position.Y, p.p.Position.Z, 10.0, 0, 0, 0, 255, 0)
- If p.bleedingTime <= 0 Then
- If (p.p.Health > 0) AndAlso (((p.p.Position.DistanceTo(tmpPos) < 0.5) OrElse (p.p.Position.DistanceTo(tmpPos2) < 0.5)) OrElse _
- (bBikeMode AndAlso ((p.p.Position.DistanceTo(tmpPos) < 1.5) OrElse (p.p.Position.DistanceTo(tmpPos2) < 1.5)))) Then
- If Not p.p.isInVehicle Then
- p.p.CancelAmbientSpeech()
- p.bleedingTime = 100
- If p.p.PedType = PedType.Cop Then
- Native.Function.Call("ALTER_WANTED_LEVEL_no_drop", Player, 2)
- Native.Function.Call("APPLY_WANTED_LEVEL_CHANGE_NOW", Player)
- End If
- p.p.Task.ClearAll()
- p.p.Task.FleeFromChar(Player.Character)
- Dim tmpBloodCount As Int16 = tRandom.Next(20, 50)
- For c As Int16 = 1 To tmpBloodCount
- tmpBlood = New Blood
- BloodList.Add(tmpBlood)
- If BloodList.Count > 100 Then Exit For
- Next
- bKiller = True
- Else
- p.p.LeaveVehicle()
- End If
- ElseIf bKiller Then
- If p.p.PedType = PedType.Cop Then
- Native.Function.Call("ALTER_WANTED_LEVEL_no_drop", Player, 2)
- Native.Function.Call("APPLY_WANTED_LEVEL_CHANGE_NOW", Player)
- ElseIf Not p.fleeing Then
- p.flee(Player.Character)
- End If
- End If
- Else
- p.bleedingTime -= Interval
- Native.Function.Call("TRIGGER_PTFX_ON_PED", "blood_wheel_squash", p.p,
- 0, 0, 0, 0, 0, 0, 1.0)
- Native.Function.Call("PLAY_SOUND_FROM_position", -1, "special_someone_blood", p.p.Position.X, p.p.Position.Y, p.p.Position.Z)
- Native.Function.Call("HIGH_FALL_SCREAM", p.p)
- If bBikeMode Then
- p.p.ApplyForce(Vector3.Normalize(Player.Character.CurrentVehicle.Velocity) * 0.05 + Vector3.WorldUp * 0.5)
- Else
- p.p.ApplyForce(Player.Character.Direction * 0.5 + Vector3.WorldDown * 0.5)
- End If
- If p.bleedingTime <= 0 Then
- p.p.Die()
- PedsList.RemoveAt(PedsList.IndexOf(p))
- Exit For
- End If
- End If
- Next
- Catch
- PedsList.Clear()
- End Try
- End If
- For Each b As Blood In BloodList
- b.tick()
- If Not bChainOn Then
- b.tick()
- b.tick()
- End If
- If b.w < 15 Then
- BloodList.RemoveAt(BloodList.IndexOf(b))
- Exit For
- End If
- Next
- End Sub
- Private Sub console_CMD(ByVal sender As Object, ByVal e As ConsoleEventArgs) Handles MyBase.ConsoleCommand
- End Sub
- Private Sub GraphicsEventHandler(ByVal sender As Object, ByVal e As GTA.GraphicsEventArgs) Handles MyBase.PerFrameDrawing
- For Each b As Blood In BloodList
- If b.timeWait <= 0 Then _
- e.Graphics.DrawSprite(b.tex, b.x, b.y, b.w, b.h, 0)
- Next
- End Sub
- End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement