Saya bekerja di MMORPG gratis dan saya punya masalah.
Saya (dengan orang lain) mengembangkan sistem perekaman video untuk permainan. Idenya pada dasarnya: kami merekam semua paket yang dikirim & diterima dengan stempel waktu, ditambah beberapa data lokal dari klien, dan kemudian membuangnya dalam file. Untuk memutar video, kami hanya meniru semua yang ada di file. Kami juga memiliki opsi untuk mengekspor video ke avi dengan ffmpeg.
Masalahnya adalah: ketika kita mengubah antar versi game, sulit untuk mempertahankan kompatibilitas mundur untuk video (perintah ditambahkan / dihapus, perubahan fungsi, dll). Apakah ada cara yang baik untuk menangani masalah ini? alih-alih memiliki banyak pemain yang berbeda dan memilih yang tepat untuk setiap versi file video?
Akan sangat membantu untuk mengetahui bagaimana gim lain menangani situasi ini.
Terima kasih atas bantuannya, maaf untuk bahasa Inggris saya.
Jawaban:
Aturan dasar kami adalah untuk tidak pernah mengubah jenis paket yang ada. Semuanya ditambahkan di akhir yang sudah ada, atau perintah baru. Ini juga membuat jauh lebih kecil kemungkinan bagi dua orang untuk saling menginjak pekerjaan masing-masing.
sumber
Ini tidak masuk akal, terutama pada PC, bahwa mereka hanya versi kode gameplay dan menabrak versi ketika mereka membuat perubahan yang mempengaruhi sistem replay. Jika file replay ditandai dengan versi kode gameplay yang dibuat dan klien masih memiliki akses ke versi itu, maka file tersebut akan berfungsi dengan baik.
sumber
Salah satu cara mengatasi hal ini adalah di sepanjang permainan yang disebut "Heroes of Newerth." (yang berubah setiap +/- 2 minggu) Dari apa yang dapat saya katakan kepada mereka:
Karena saya tidak bekerja di S2, saya jelas tidak bisa mengatakan itu pasti cara kerjanya. Namun, saya perhatikan tren ukuran unduhan yang ditandai terkait dengan usia pemutaran ulang.
Entah itu, atau mereka menambahkan tambalan entitas ke replay (misalnya mantra X memiliki efek Y, bukan efek Z). Jika informasi terkait paket juga disimpan dalam konfigurasi entitas, hot-patching entitas ini akan memungkinkan Anda untuk memahami paket yang lebih lama.
Saya pasti tidak akan menyimpan perilaku historis pada klien karena itu bisa menjadi sangat besar dengan sangat cepat. Terutama ketika klien memperbarui dari misalnya 10.1.0 ke 10.2.0 (karena mereka perlu mengunduh setiap tambalan antara dua versi, bukan tambalan terakhir).
Google Protobuf adalah ide bagus sebagai lapisan serialisasi karena mendukung hal-hal seperti ini secara desain.
sumber