Server game theo giờ. Chỉ trả tiền khi bạn chơi.

Server CS2 crash khi đổi bản đồ (GOTV bật): cách sửa một dòng

Server CS2 của bạn đang chạy ổn, rồi đổi bản đồ và mọi người bị kick: server đã crash. Nếu GOTV đang bật và có người chơi kết nối, đây chính là lỗi đó. Dưới đây là cách sửa, rồi đến nguyên nhân.

Cách sửa: một dòng

Thêm dòng này vào game/csgo/cfg/server.cfg:

bot_join_delay 15
  • Giờ bot sẽ chờ 15 giây sau mỗi lần đổi bản đồ rồi mới vào.
  • Crash xảy ra khi bot vào trong lúc một người chơi vẫn đang tải bản đồ mới. Có độ trễ, người chơi sẽ tải xong trước.
  • GOTV vẫn bật. Demo vẫn được ghi, người xem vẫn xem được.
  • Để áp dụng mà không cần khởi động lại, gửi qua RCON: rcon bot_join_delay 15

Trong lab của chúng tôi: không có nó, 3 trên 6 lần đổi bản đồ bị crash. Có nó, 0 trên 18 lần crash, gồm đổi bản đồ giữa trận, cuối trận và chuyển chế độ khi đang chạy. Mọi server CS2 của 2hours.gg đều có sẵn thiết lập này.

Khi nào xảy ra

Tất cả những điều sau cùng lúc:

  • SourceTV (GOTV) đang bật: tv_enable 1
  • Có ít nhất một người chơi thật đang kết nối. Server chỉ có bot chưa bao giờ crash.
  • Level thay đổi: bản đồ chọn từ console, changelevel hoặc map, kết thúc trận, hoặc bình chọn cuối trận.

Nó xảy ra ngẫu nhiên. Trong thử nghiệm của chúng tôi khoảng một nửa số lần đổi bản đồ bị crash, và trên server thật nó xảy ra thường hơn khi có từ 3 người chơi trở lên. Server qua được một lần đổi vẫn có thể crash ở lần sau.

Dấu hiệu: mọi người chơi rớt cùng lúc trong khi tải bản đồ, và log server kết thúc bằng lỗi segmentation fault (SIGSEGV) thay vì bắt đầu bản đồ mới.

Khác biệt giữa các chế độ

Config Valve của mỗi chế độ quyết định bao nhiêu bot vào mỗi lần tải bản đồ. Càng nhiều bot vào, càng nhiều khả năng crash:

  • Deathmatch, Team Deathmatch, Casual: tới 10 bot vào mỗi lần tải. Đây là các chế độ dễ gặp nhất, và là nơi chúng tôi thấy nhiều crash nhất.
  • Competitive: 1 bot. Trong lab của chúng tôi nó không crash khi chưa sửa, nhưng server thật có nhiều người chơi hơn thì có.
  • Cách sửa giống nhau ở mọi chế độ: bot_join_delay là một thiết lập áp dụng cho mọi lần đổi bản đồ, bất kể nguyên nhân.

Lỗi thực sự (cho ai tò mò)

Đây là lỗi engine của Valve, không phải lỗi plugin. Server vẫn crash khi đã gỡ Metamod và CounterStrikeSharp. Lỗi được báo cáo từ năm 2024 tại ValveSoftware/csgo-osx-linux#3831. Hãy theo dõi ở đó: chúng tôi hy vọng Valve sớm sửa, để cách xử lý tạm này không còn cần nữa.

Những gì chúng tôi tìm thấy bằng debugger:

  • Khi đổi bản đồ, SourceTV tắt và ngắt kết nối người chơi đang kết nối với lý do "SourceTV stopped" (HLTVSTOP), dù đó là người chơi bình thường, không phải người xem GOTV.
  • Người chơi bị ngắt nửa chừng đó còn lại một object nội bộ rỗng. Trên server thuần, engine crash ngay tại đó (libengine2.so).
  • Nếu qua được bước đó, code game crash một giây sau, khi bot vào bản đồ mới (libserver.so). Đó là crash mà bot_join_delay ngăn chặn, và là mọi crash chúng tôi thấy trên server CounterStrikeSharp.
  • Trên server thuần không có Metamod, chúng tôi cũng thấy crash đầu tiên, phía engine. Chúng tôi chưa thử bot_join_delay với crash đó.

Những cách không hiệu quả

  • tv_enable 0 trong lúc chơi: làm mọi người chơi rớt cùng lúc.
  • Tắt GOTV ngay từ khi khởi động: không crash, nhưng không có demo và không xem được.
  • tv_delay, tv_delaymapchange, tv_autorecord 0, tv_stoprecord: vẫn crash. Dừng demo là không đủ: server vẫn crash khi hoàn toàn không ghi demo.
  • bot_quota 0 trong _server.cfg của một chế độ: nó cũng chạy mỗi lần khởi động lại trận và có thể kick chính SourceTV, khiến GOTV dừng ghi giữa bản đồ.
  • map thay vì changelevel: crash y như vậy.

Thiết lập đầy đủ cho server của riêng bạn

Những gì chúng tôi chạy trên mọi server, trong server.cfg:

tv_enable 1
tv_autorecord 1
bot_join_delay 15
  • Giữ nó trong server.cfg, không chỉ trong một lệnh RCON dùng một lần, để nó vẫn còn sau khi khởi động lại.
  • 15 giây là giá trị chúng tôi đã thử. Người chơi mạng chậm hoặc bản đồ Workshop lớn sẽ tải lâu hơn, nên giá trị cao hơn sẽ an toàn hơn và chỉ khiến bot vào muộn hơn một chút.
  • Để kiểm tra nó đang hoạt động, gõ vào console server hoặc RCON: bot_join_delay
  • Chơi không có bot? Vẫn nên giữ: các chế độ như Deathmatch và Casual mặc định thêm bot mỗi lần tải bản đồ.

Hoặc bỏ qua phần thiết lập: mọi server CS2 trên 2hours.gg đã có sẵn cách sửa, với GOTV và demo đều bật.

Triển khai server CS2 tính theo giờ

Xem thêm

← Quay lại tất cả hướng dẫn