Đ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.