Türkçe özet
Kavramlar
Bir eklentinin parçaları, kuralların nerede çalıştığı ve oyuncuyu neyin koruduğu, kısa ve Türkçe.
Bu sayfada
Eklenti
Eklenti (addon), senin barındırdığın ve kendini bir manifest.json ile tanıtan bir servis. CamTable'a dört kaynaktan istediklerini sunar:
| Kaynak | Ne işe yarar |
|---|---|
catalog | Sunduğun oyunların listesi. |
meta | Her oyunun ayrıntı sayfası: adı, açıklaması, oyuncu sayısı. |
play | Oyunun nasıl oynanacağı: oyun sayfanın adresi, isteğe bağlı özel sekmeler ve engine. |
engine | Kuralları senin sunucunda işleten servis. CamTable'ın odası onu durumsuz bir reducer gibi çağırır. |
Her şey üç kuraldan çıkar:
- CamTable oyununun hiçbir baytını barındırmaz. Oyun sayfan, senin kökeninde duran sıradan bir web sayfası. CamTable onu iç içe bir çerçevede açar; kodunu kendi Chrome eklentisinde ya da sunucusunda indirmez, saklamaz, çalıştırmaz.
- Durumu oda tutar, kararı kuralların verir. Kimin bağlı olduğu, sıra, sayaçlar ve oyunun durumu CamTable'ın odasında durur. Oyuncunun hamlesi bir istektir (intent), asla bir durum değildir: oda onu kurallarına verir (oda sahibinin sayfasına ya da engine'ine) ve gelen yanıtı saklar. Sayfan odanın yayınladığını çizer, oyuncunun yaptığını gönderir.
- CamTable topluluk eklentilerini listelemez, önermez. Oyuncular eklentini adresiyle ya da paylaştığın bir kurulum bağlantısıyla ekler. CamTable'ın kendi oyunları da aynı protokolle, Resmî Eklenti'den gelir.
İngilizcesi: The model.
Manifest
manifest.json eklentinin kimliği: id, version, name, protokol sürümü ("camtable": "1"), sunduğu kaynaklar
(resources), anladığı oyun kimliklerinin önekleri (idPrefixes), Catalog'ları ve istediği izinler (permissions). Oyuncunun yapıştırdığı
eklenti bağlantısı bu dosyanın adresidir.
camtablealanı zorunlu. CamTable'ın konuşmadığı bir ana sürüm, kurulumda okunabilir bir gerekçeyle reddedilir.- Bilinmeyen anahtarlar yok sayılır, bu yüzden sonraki bir ara sürüm için yazılmış bir manifest de kurulur.
- Oyun kimlikleri, BoardGameGeek'te kaydı olan oyunlar için
bgg:<sayı>, özgün oyunlar için<eklentiId>:<kısa-ad>biçimindedir. donationUrl, CamTable'ın sunduğu tek gelir yolu: oyuncular onu oyunlarında görür. CamTable gelirden pay almaz.@camtable/sdk/addoniçindekivalidateManifest, manifesti CamTable'ın baktığı gibi denetler.
İngilizcesi: The manifest.
Catalog ve filtreleri
Her Catalog, Keşfet'te kendi satırı olan bir oyun listesi (arayüzde kategori). Satırlar catalogs sırasını izler: oyuncu bir eklentinin ilk üç
Catalog'unu varsayılan olarak görür, istediğini açıp kapatabilir. Hangi oyunun hangi sırada duracağına sen karar verirsin; CamTable kendisi hiçbir şeyi sıralamaz.
Popüler, en yeni ve A'dan Z'ye üç ayrı Catalog'dur, çünkü sıralama bir filtre değildir.
Bir Catalog iki filtre alabilir (Catalog Filter): genre ile kendi adlandırdığın türler, players ile oyuncu sayısı (2, 3,
4, 5, 6+). Seçilen filtreler istek yolunda sabit bir sırayla gelir, bu yüzden statik bir eklenti her birleşimi önceden bilinen dosya
adlarından sunabilir. Sunmadığın bir birleşim 404 döner, oyuncu da bunu hata değil "oyun yok" olarak görür.
İngilizcesi: Catalogs and Catalog Filters.
Play Option
Play Option (oynama seçeneği), bir eklentinin bir oyunu oynatma teklifi: oyun sayfanın adresi (uiUrl), en az ve en çok oyuncu, oyunun kullandığı izinler ve
isteğe bağlı olarak bir engine, özel sekmeler (tabs) ve oyun ayarları (settings). /play/game/{id}.json bir
oyunun seçeneklerini listeler; oyunun Keşfet'teki sayfasında, Nerede oynanır altında her seçenek için bir Oyna düğmesi durur.
Oyun ayarları (Game Settings) tanımlayan bir oyunun odası lobide bekler: oda sahibi ayarları CamTable panelinin Oda sekmesinde seçer ve maçı oradan başlatır. Formu CamTable çizer, sen yalnız tanımı yazarsın. Oda, açıldığı sürümü maç boyunca korur: maç sürerken yeni bir sürüm yayınlasan da süren maç eskisiyle devam eder.
İngilizcesi: Catalog, meta and play.
Host mode ve engine mode
Her oyunun kuralları iki yerden birinde çalışır. Hangisi olacağını Play Option söyler: bir engine tanımlıyorsa engine mode, tanımlamıyorsa host mode. Başka bir
anahtar yok, bu yüzden ikisi hiç çelişemez.
| Konu | Host mode (varsayılan) | Engine mode |
|---|---|---|
| Kuralları kim işletir | Odayı açan oyuncunun, yani oda sahibinin tarayıcısı | Senin sunucun; onu CamTable'ın odası çağırır |
| Diğer oyuncular hile yapabilir mi | Hayır, yalnız istek gönderirler | Hayır |
| Oda sahibi hile yapabilir mi | Evet: onun sayfası karar verir | Hayır |
| Gizli bilgi | Oda sahibi hepsini görür, diğerleri yalnız kendi görünümünü | Herkesten gizli |
| Rastgelelik | Oda sahibinin (rng tekrarlanabilir, adil değil) | Senin; oda sahibi etkileyemez |
| Maliyetin | Yok: statik dosyalar Cloudflare'de ücretsiz ve sınırsız | Her hamle ya da zamanlayıcı için bir engine çağrısı (Cloudflare'in ücretsiz planında günde 100.000 Worker çağrısı) |
| Onay ekranında | "Kuralları oda sahibinin tarayıcısı işletir (gizli bilgileri görebilir)" | "Kuralları <engine kökenin> sunucusu işletir" |
Kuralları bir kez yazarsın: iki modda da aynı sözleşmeyle çalışan saf bir reducer (GameReducer). Bir moddan ötekine geçmek bu yüzden bir yapılandırma
değişikliğidir, kurallar yerinden oynamaz. Arkadaşlar arası rahat oyunlara host mode yeter; gizli el, gizli rol ya da iddialı maçlar için engine mode seç.
Oda sahibinin bağlantısı maç sırasında koparsa maç iki modda da en çok 15 dakika duraklar. Zamanında dönerse kaldığı yerden sürer, dönmezse sonuçsuz biter.
İngilizcesi: Host mode and engine mode.
İzinler
permissions, CamTable'ın uyguladığı bir sözlük. Oyuncu listeni onay ekranında görür: kurulumda, bir de arkadaşının odası oyununu yüklediğinde. Tanımlamadığın
bir yetenek için yapılan her köprü çağrısı PERMISSION_DENIED hatasıyla reddedilir. Manifest bütün izinlerin birleşimini, her Play Option da o oyunun
kullandıklarını tanımlar.
| İzin | Ne verir | Onay ekranında |
|---|---|---|
players.profile | Oyuncuların görünen adları, kullanıcı adları ve avatarları. Bu izin olmadan herkes "Player 1", "Player 2" diye görünür. | Oyuncuların görünen adlarını ve avatarlarını görür |
video.effects | Oyuncunun kamerasından giden görüntüye filtre. Filtre oyunundur; oyuncunun onu kaldıracak bir düğmesi yoktur. | Bu oyun kamerandan giden görüntüyü değiştirebilir. |
whisper | Oyuncuları fısıltıya almak, fısıltı isteklerini oyuncu adına yapmak ve yanıtlamak. | Bu oyun seni fısıltıya alabilir ve senin adına fısıltı isteyip kabul edebilir. |
tiles.overlay | Oyuncuların video kutucuklarında rozet, sayaç, süre, vurgu ve eylem düğmeleri. | Oyuncu video kutucuklarının üzerine katman çizer |
call.mute | Maç sürerken oyuncunun sesini aramaya kapatmak (Call Mute). | Bu oyun aramaya giden sesini kapatabilir. |
call.cover | Maç sürerken kameraları aramaya kapatmak (Call Cover): masa, kapalı bir kameranın yerinde karanlık, bulanık ya da donmuş bir görüntü görür. | Bu oyun kameranı aramaya kapatabilir ve fısıldaştığın oyunculara gösterebilir. |
Oyun durumu, hamleler, özel sekme durumu, tıklama bölgeleri ve video yuvaları izin istemez. Ne kadar az izin istersen o kadar iyi: her izin, oyuncunun karar vermeden önce okuduğu bir satır.
İngilizcesi: Permissions.
Katılım onayı
Bir eklenti kurulmadan önce oyuncu bir onay ekranı görür: eklentinin adı, kökeni, istediği izinler, kuralları kimin işlettiği (gizli bilgiyi görebilen oda sahibi ya da engine'inin kökeni) ve CamTable'ın eklentiyi barındırmadığı ve incelemediği.
Oyununla açılmış bir odaya katılan arkadaşın da aynı soruyu bir kez görür (Katılım onayı), sonra hiçbir şey kurmadan oynar. İsterse vazgeçer: aramada kalır, oyun onun için yüklenmez. Bir oda, oyuncunun henüz onaylamadığı bir izin ya da köken isterse oyuncuya yeniden sorulur.
İngilizcesi: Installing, sharing and updating.
Güvenlik modeli
Oyun sayfan, CamTable'ın Chrome eklentisinin bir sayfasının içinde, opak kökenli bir sandbox="allow-scripts" çerçevesinde çalışır:
- Discord'un sayfasını, çerezlerini ya da depolamasını okuyamaz; Chrome eklentisinin API'lerine erişemez.
-
CamTable'la bütün teması
@camtable/sdk'nın arkasındakipostMessageköprüsünden geçer. Köprünün sunduğu her yetenek, manifestinde tanımladığın bir izin ister. - Sayfan kameranın görüntüsünü ya da mikrofonun sesini hiç almaz. Video ekranda görünür, çünkü CamTable onu sayfanın açtığı bir boşluğun arkasına kendisi çizer; akışı sana vermez.
- Sayfan kendi ağ isteklerini yapabilir, CamTable bunları kısıtlamaz. Karşılığında oyuncular hakkında öğrenebileceklerini en aza indirir.
Eklentin bir oyuncunun Discord kimliğini, bulunduğu sunucuyu ya da kanalı hiç almaz. Her oyuncunun maça özel, rastgele bir Match Player Id'si olur (mp_...):
yeniden bağlanınca değişmez, ama başka bir maçta asla yeniden kullanılmaz, bu yüzden iki maçı onunla birbirine bağlayamazsın. Ad ve avatar yalnız
players.profile ile gelir.
CamTable bir de eklenti kökenlerinden ve manifest adreslerinden oluşan bir engel listesi tutar: listedeki bir eklenti kurulamaz, başlatılamaz, odasına katılınamaz ve engine'i hiç çağrılmaz. Oyuncunun gözünden güvenlik için Güvenlik sayfasına bak.
İngilizcesi: Security model ve Players and privacy.
Devamı İngilizce
Ayrıntıların tamamı İngilizce rehberde:
- The addon protocol: bütün yollar, yanıtlar, önbellek ve sürümler.
- The game page and the SDK: oyun sayfası, tıklama bölgeleri, video yuvaları, fısıltılar.
- Host mode and engine mode: reducer, görünümler, zamanlayıcılar, oyun ayarları, imzalar.
- Limits at a glance: bütün sınırlar tek tabloda.