Saya memiliki sistem otoritatif, di mana ketika pemain bergabung dengan pertandingan, ia mendapatkan semua benda yang telah muncul - muncul pada dirinya sendiri (klien).
Ini terlihat seperti ini:
Client
mengirim token akses keServer
Client
menerima penerimaan dariServer
Client
beralih adegan ke adegan gameServer
mengirimkan pemain, peti, objek yang dapat berinteraksi dengan Anda sehinggaclient
dapat memunculkan dan menampilkannya.
Tapi bagaimana dengan objek dasarnya? Untuk saat ini, saya memiliki adegan yang sama persis di server dan klien - dengan satu pesawat statis yang bertindak sebagai lantai. Saat ini saya sedang menambahkan barang baru, pohon, tangga dan membangun bersama.
Saya pikir - kita baik-baik saja. Tetapi bukankah seharusnya lingkungan disinkronkan juga? Menjadi jaringan entah bagaimana? Dimiliki oleh server?
Mari kita ambil League of Legends
:
Ini adalah lingkungan yang statis, mungkin satu gabungan mesh (tangga, rumput, dinding, toko). Tetapi apakah itu benar-benar disimpan di klien atau dikirim oleh server selama layar memuat?
sumber
Jawaban:
Sebagian besar, tidak, aset seni dalam bentuk apa pun tidak secara rutin dikirim melalui jaringan. Umumnya semua klien akan memiliki aset konten yang sama secara lokal. Mungkin ada kode untuk memastikan hal ini terjadi melalui pengecekan konten, atau serupa. Jika Anda khawatir tentang pengguna yang merusak beberapa sisi klien konten mereka, Anda dapat menerapkan sistem serupa.
Server mungkin mengirim arahan ke klien yang menunjukkan bahwa ia harus menampilkan atau menyembunyikan aset tertentu, tetapi tidak akan mengirim data aktual dari aset tersebut. Dalam praktiknya, ini terlalu boros dan lambat, dan dapat menyebabkan masalah nyata dengan orang-orang yang memiliki data terbatas.
Dalam kasus tertentu, aset yang lebih kecil dapat dialirkan secara keseluruhan jika aset tersebut entah bagaimana dianggap sebagai "spoiler" atau apa pun. Tapi itu tidak biasa. Secara umum yang Anda lihat adalah gim mungkin mengunduh konten baru dari tambalan, atau apa pun, tetapi itu hanya akan terjadi sekali, selama proses penambalan saat startup. Tidak selama bermain game.
sumber
Tergantung pada beberapa faktor, termasuk jenis permainan (saya akan menganggap RTS di sini, meskipun MMO dunia terbuka juga muncul di benak). Keadaan dasar pangkalan, ke pemain lokal dikirim pada saat terhubung, atau merupakan bagian dari aset klien - pikirkan sebuah game RTS di mana peta dikirimkan bersama dengan klien, atau diunduh sebelum game dimulai.
Memang, mesh biasanya tidak akan dikirim, karena sudah pada klien dalam kebanyakan kasus RTS. Apakah peta tabrakan, yang merupakan hal yang sangat penting untuk menjaga sinkronisasi keduanya dikirim, adalah pertanyaan lain. Tetapi di sebagian besar RTS, ini lagi akan disimpan sebelumnya pada klien.
Jadi sungguh, itu semua tergantung pada apa yang RTS kirim, apakah Anda mengunduh peta sebelum waktu bermain, atau pada saat permainan dimulai.
Setelah itu, ada beberapa cara khas untuk tetap disinkronkan:
sumber
Mengenai pertanyaan persis seperti yang Anda tanyakan, saya tidak tahu bagaimana League of Legends secara khusus menanganinya. Saya belum pernah memainkan game itu, jadi saya tidak bisa menyarankan apakah perlu atau tidak.
Tetapi jawaban untuk pertanyaan Anda, secara umum, cukup sederhana dan langsung:
Jika datanya statis , dan Anda tahu pasti bahwa itu tidak akan pernah berubah (singkat dari pembaruan permainan penuh berkala, tetapi itu terpisah), lalu mengapa Anda ingin mengirim data tambahan itu? Biasanya Anda mencoba menghindari pengiriman apa pun yang bisa dihindari. Kirimkan data hanya jika komunikasi itu diperlukan .
Di sisi lain, jika data akan berubah seiring waktu , atau jika Anda hanya ingin membiarkan opsi itu terbuka, apakah Anda benar-benar punya pilihan dalam masalah ini? Untuk kasus ini, Anda harus mengirim data. Kalau tidak, klien tidak memiliki apa yang dibutuhkannya.
Ini berlaku untuk semua komunikasi jaringan, bukan hanya data terrain. Semuanya .
sumber
Tidak.
Saya telah melakukan hal yang adil tentang menggali sumber League of Legends, dan semuanya, termasuk model Champion, Penjaga Toko, latar belakang peta umum, dan makhluk halus yang ditambahkan setelah fakta (seperti tupai kecil di bebatuan dan siput di sungai) disimpan di sisi klien. Fakta bahwa klien memiliki semua model ini adalah salah satu alasan LoL banyak gigabytes.
Mentransfer semua data ini dari server ke klien akan menjadi neraka, belum lagi mengunyah melalui penggunaan bandwidth hanya untuk melakukan semuanya lagi di game berikutnya.
Jadi bagaimana cara mengatasinya? Setiap pemain HANYA mengirimkan data yang penting bagi pemain lain dalam permainan ke server. Tidak ada yang perlu tahu apakah Anda memiliki 5 detik tersisa pada cooldown Q, atau bahwa Deep Thror Skin Thresh menciptakan gelembung untuk Anda. Hal-hal yang bisa diteruskan dalam game adalah hal-hal seperti, Vel'Koz yang dicor Q, Viktor pindah ke kiri, dll ...
Lebih eksplisit lagi, terkait dengan pemuatan layar, saat Anda membahasnya, hal-hal yang terjadi ada hal-hal seperti tambalan tengah, yang setiap pemain perlu bicarakan dengan server kerusuhan sebelum permainan dimulai, jabat tangan koneksi yang aman, dan protokol anti curang.
CATATAN:
Jika Anda ingin melihat-lihat barang apa yang dimiliki klien, dan oleh karena itu, server tidak memberikan Anda, temukan folder C: \ Riot Games \ RADS \ lol_Game_Client \ Projects (yang mungkin sedikit tidak aktif, maafkan saya, saya ' m sedang tidak berfungsi memori sekarang) dan temukan file .RAF unpacker online. Kemudian Anda dapat melihat semua barang yang disimpan secara lokal seperti memuat percikan layar dan tekstur kulit, bahkan kerangka juara.
sumber
Contoh di mana ini tidak dilakukan adalah Elder Scrolls Online, di mana ia mempercayai klien tentang ketinggian permukaan tanah .
Penambang emas turun beberapa meter dari permukaan tanah. Mereka kemudian bisa berjalan "di bawah" medan, dan menambang sumber daya dari bawah tanpa terlihat oleh PC atau diserang oleh NPC.
Suntingan yang serupa memungkinkan mereka untuk menghaluskan tebing sehingga mereka bisa berjalan di atasnya, menghapus atau merutekan di bawah dinding statis, melihat semua benda statis, dll.
Pada dasarnya, server mempercayai klien tentang lokasi pemain, menghitung tabrakan di sisi server untuk setiap pemain tunggal terhadap semua statika akan sangat berat.
Namun, dalam permainan berbasis ubin seperti Furcadia, itu berbeda: setiap kotak yang Anda pindahkan memiliki walkabilty sisi-server, dan server tidak perlu memercayai klien untuk apa pun: server mengetahui dan memvalidasi setiap gerakan dan tindakan pengguna, dan klien hanya menampilkan tindakan ketika server memberitahukan hasilnya.
sumber