Hướng dẫn lập trình giao thông trong GTA IV.

Thảo luận trong 'Grand Theft Auto' bắt đầu bởi HacBachVoThuong, 21/10/11.

  1. HacBachVoThuong

    HacBachVoThuong Legend of Zelda

    Tham gia ngày:
    26/11/05
    Bài viết:
    1,071
    Nơi ở:
    TPHCM
    Điểm yếu của hệ thống giao thông trong GTA IV là gì? đó là không giống thật. Thực tế ở ngoài xe cộ đi trên đường ko chỉ có đạp thắng và lên ga mà phải tùy tốc độ mình đang chạy, tùy tình huống trên đường mà phát sinh lách né, đạp thắng từ xa, rồ ga vượt mặt... và phản ứng của mỗi người là khác nhau. Vì vậy mới cần lập trình lại hệ thống giao thông trong GTA IV cho giống thật.

    Ghi là lập trình vậy thôi chứ dễ ẹc chả có gì khó, mình cũng chả biết gì về VB mà vẫn hiểu được tí xíu. Các bác down file nén ở dưới về, giải nén vào thư mục gta IV version 1.0.7.0 rồi vào thư mục scripts để mở file traffic.vb ra chỉnh sửa bằng notepad.
    File traffic đã được mình làm sẵn theo ý của mình, các bác có thể chỉnh sửa tùy ý. ví dụ, khi open file traffic nó sẽ có những dòng sau:

    Imports System
    Imports System.Collections
    Imports System.Drawing
    Imports System.Windows.Forms
    Imports GTA

    Public Class Traffic
    Inherits Script

    Private xephiatruoc As Vehicle :gán tên cho xe phía trước, tác dụng là để canh khoảng cách tránh ủi đít xe. cái này các bác ko cần sửa chữa gì cả.

    Private xehientai As Vehicle : khỏi nói cũng hiểu đây là xe đang xét.

    Private Sub PanicTraffic_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Tick
    World.UnlockAllIslands()

    Dim vehicles As vehicle() = world.getvehicles(player.character.Position, 90.0F) : gom hết những xe trong khoảng cách 90 so với người chơi để chỉnh sửa giao thông.


    For Each vehicle As Vehicle In vehicles
    If exists(vehicle) Then

    Dim ped As Ped = vehicle.getpedonseat(vehicleseat.Driver) '


    xehientai=vehicle
    xephiatruoc = World.GetClosestVehicle(xehientai.Position, 10.0F) : xe phía trước ta chọn trong khoảng 10 là đủ dùng theo ý tui.

    If exists(ped) AndAlso ped.isrequiredformission = False AndAlso xehientai.Speed >= 0 AndAlso xehientai.Speed < 40 AndAlso not exists(xephiatruoc) Then : nếu tốc độ xe đang xét >=0 và <40 và ko có xe phía trước trong khoảng 10 thì:
    ped.Task.CruiseWithVehicle(xehientai, 35.0F, false) : chạy thả ga với tốc độ cao nhất là 35, lưu ý tốc độ 35 tương đương với 105 km/h. chữ false sau cùng nghĩa là thấy đèn đỏ thì vẫn vượt, thấy xe phía trước thì đánh tay lái né chứ ko thắng gấp...
    ped.nolongerneeded()
    End If



    If exists(ped) AndAlso ped.isrequiredformission = False AndAlso xehientai.Speed >= 10 AndAlso xehientai.Speed < 40 AndAlso exists(xephiatruoc) AndAlso xephiatruoc.speed > 15 Then : nếu tốc độ xe đang xét >=10 và <40 và có xe phía trước trong khoảng 10 và tốc độ xe phía trước >15, tức là xe phía trước đang chạy nhanh chứ ko thắng gấp thì:


    ped.Task.CruiseWithVehicle(xehientai, 25.0F, true) : chạy vừa vừa với tốc độ 25 (75km/h) nhưng cách chạy là true, có đèn đỏ thì phải ngừng, xe phía trước giảm tốc thì phải đạp thắng theo chứ ko lách.
    ped.nolongerneeded()
    End If


    If exists(ped) AndAlso ped.isrequiredformission = False AndAlso xehientai.Speed >= 10 AndAlso xehientai.Speed < 40 AndAlso exists(xephiatruoc) AndAlso xephiatruoc.speed < 15 Then : nếu tốc độ xe đang xét >=10 và <40 và có xe phía trước và tốc độ xe phía trước chậm hơn 15 thì:


    ped.Task.CruiseWithVehicle(xehientai, 15.0F, false) : chạy với tốc độ 15 (45km/h) nhưng chạy kiểu false, lỡ nó thắng gấp thì ta cứ đánh tay lái lách.
    ped.nolongerneeded()
    End If



    If exists(ped) AndAlso ped.isrequiredformission = False AndAlso xehientai.Speed >= 0 AndAlso xehientai.Speed < 10 AndAlso exists(xephiatruoc) Then :nếu đơn giản tốc độ xe đang xét >=0 và <10 và có xe phía trước, tốc độ xe phía trước ko cần quan tâm.

    ped.Task.CruiseWithVehicle(xehientai, 30.0F, true) : chạy tốc 30 (90km/h và chạy đàng hoàng)
    ped.nolongerneeded()
    End If




    End If
    Next
    End Sub
    End Class






    Bác nào muốn đơn giản là cho xe chạy vượt đèn đỏ, lạng lách lung tung thì chỉ việc để 1 dòng If như thế này:





    Imports System
    Imports System.Collections
    Imports System.Drawing
    Imports System.Windows.Forms
    Imports GTA

    Public Class Traffic
    Inherits Script

    Private xephiatruoc As Vehicle :gán tên cho xe phía trước, tác dụng là để canh khoảng cách tránh ủi đít xe. cái này các bác ko cần sửa chữa gì cả.

    Private xehientai As Vehicle : khỏi nói cũng hiểu đây là xe đang xét.

    Private Sub PanicTraffic_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Tick
    World.UnlockAllIslands()

    Dim vehicles As vehicle() = world.getvehicles(player.character.Position, 90.0F) : gom hết những xe trong khoảng cách 90 so với người chơi để chỉnh sửa giao thông.


    For Each vehicle As Vehicle In vehicles
    If exists(vehicle) Then

    Dim ped As Ped = vehicle.getpedonseat(vehicleseat.Driver) '


    xehientai=vehicle



    If exists(ped) AndAlso ped.isrequiredformission = False AndAlso xehientai.Speed >= 0 AndAlso xehientai.Speed < 100 Then nếu đơn giản tốc độ xe đang xét >=0 và <100 (cứ x3 lên là ra km/h)

    ped.Task.CruiseWithVehicle(xehientai, 100.0F, false) : chạy tốc max là 100 (300km/h tùy phân khối xe và chạy ẩu)
    ped.nolongerneeded()
    End If




    End If
    Next
    End Sub
    End Class


    Hướng dẫn test nhanh: để khỏi phải thoát game mỗi lần test thì các bác cứ việc mở file script song song với game, khi nào cần sửa chữa thì bấm alt + tab ra ngoài để sửa rồi alt + tab vào game lại, bấm dấu ~ cho hiện bảng console rồi gõ:reloadscripts là game tự load script bạn mới chỉnh sửa.

    Xong rồi, nếu bác nào lập trình được giao thông chạy nhanh mà vẫn an toàn thì gửi mình xem thử nhé. Mình làm lâu lâu vẫn gặp tai nạn hihi.
     

    Các file đính kèm:

    Chỉnh sửa cuối: 22/10/11

Chia sẻ trang này