Imports System
Imports System.Windows.Forms
Imports GTA
Imports System.IO
Public Class SoundsDemo
Inherits Script
private bSOn as boolean = false
Private l As Int32 = 0
Private linhas As String()
Private effect As Int32
private coef as int16 = 1
private effectSize as double = 1.0
private sFilter as string = ""
private xRot, yRot, zRot as double
private bRadians as boolean
private soundID as int32 = 0
private actualSound as string = ""
private actualSoundBack as string = ""
private soundPos as vector3
dim f As File
Public Sub New()
Me.Interval = 100
linhas = f.ReadAllLines(".\scripts\sounds.txt")
f.WriteAllLines(".\scripts\sounds.txt.back", linhas)
End Sub
private sub console_CMD(ByVal sender As Object, ByVal e As ConsoleEventArgs) Handles MyBase.ConsoleCommand
if e.command = "sd" then
bSOn = not bSOn
if bSOn then
msg("SoundsDemo ON", 3000)
else
msg("SoundsDemo OFF", 3000)
end if
end if
if e.command = "sfilter" then
if not bSOn then exit sub
if e.parameterCount = 0 then
game.console.print("Sound filter: " & sFilter)
else
sFilter = e.parameter(0).tolower
l = 0
end if
end if
end sub
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 Function findLinePos
For c As Int32 = 0 to linhas.length - 1
If linhas(c) = actualSoundBack then Return c
next
Return 0
End Function
Shadows Sub keyDown(ByVal sender As Object, ByVal e As GTA.KeyEventArgs) Handles MyBase.KeyDown
if not bSOn then exit sub
If e.Key = Keys.Right Then nextL()
If e.Key = Keys.Left Then priorL()
if e.key = keys.back then
actualSound = actualSound.substring(0, actualSound.length - 1)
playEffect(false, actualSound)
end if
if e.key = keys.numpad9 then
linhas(findLinePos) = actualSound
f.WriteAllLines(".\scripts\sounds.txt", linhas)
msg("saving...", 1000)
end if
if e.key = keys.numpad0 then
coef = 0
playEffect(false, actualSound)
msg("Replay: " & actualSound, 5000)
end if
if e.key = keys.numpad1 then
native.function.call("stop_sound", soundID)
end if
End Sub
private sub playEffect(optional bNavigating as boolean = true, optional sTmpString as string = "")
if not bSOn then exit sub
Dim sTmp As String
if sTmpString = "" then
sTmp = lerLinha
else
sTmp = sTmpString
end if
If sTmp.Length > 0 Then
if not bNavigating then
soundPos = player.character.position
native.function.call("stop_sound", soundID)
native.function.call(of int32)("release_sound_id", soundID)
soundID = native.function.call(of int32)("get_sound_id")
native.function.call("PLAY_SOUND_FROM_position", soundID, sTmp, soundPos.x, soundPos.y, soundPos.z)
end if
actualSound = sTmp
if sTmpString = "" then actualSoundBack = sTmp
msg(sTmp, 5000)
End If
end sub
Private Function lerLinha
if not bSOn then exit function
Dim sTmp As String
sTmp = ""
While sTmp = ""
l += coef
If l < 0 Then
l = 0
Exit While
End If
If l > linhas.Length - 1 Then
l = linhas.Length - 1
Exit While
End If
sTmp = linhas(l)
If (sTmp.Trim.Length > 0) andalso ((sfilter = "") orelse ((sfilter <> "") andalso sTmp.tolower.contains(sfilter.tolower))) then
Exit While
else
sTmp = ""
End If
End While
Return sTmp.Trim
End Function
Private Sub nextL()
coef = 1
playEffect(false)
End Sub
Private Sub priorL()
coef = -1
playEffect(false)
End Sub
Private Sub GraphicsEventHandler(ByVal sender As Object, ByVal e As GTA.GraphicsEventArgs) Handles mybase.PerFrameDrawing
if bSon then
e.graphics.drawtext("Sounds demo - Use left/right to navigate, press numpad0 to play and numpad1 to stop", 10, 10)
e.graphics.drawtext("Sound: " & actualSound, 10, 35)
e.graphics.drawtext("Distance from sound: " & soundPos.distanceto(player.character.position).tostring, 10, 60)
e.graphics.drawtext("Filter: " & sFilter, 10, 90)
e.graphics.drawtext("* Use backspace to remove last character from sound string and retest the sound", 10, 135)
e.graphics.drawtext("* if its correct, press numpad9 to save the file sounds.txt", 10, 165)
end if
end sub
End Class