Bölümler Kavramlar

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.

  • camtable alanı 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/addon içindeki validateManifest, 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ındaki postMessage kö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: